ð4"""Record of phased-in incompatible language changes.

Each line is: óthe form:

    FeatureName = "_ ÷(" OptionalRelease "," Mandatory G  K  ýCompilerFlag ")"

where, normally,j <h ð, and both are 5-tuples
of Ð s¾  Õ ó as sys.version_infoé ñ(PY_MAJOR_VERSION, #= ð 2 in 2.1.0a3; aRtÔ  2 .IN2 1'  <CROY 0' ÐRELEASE_LEVEL€ Ñ"alpha", "bet õcandidate" or "final"; string— I cSERIALÉ 
¾ <)

Âr?sö sfirst rÜ‚in which�from __fu˜__ import+ñ

was accepted.

InV c)-ofÀ t ýat have not yet occurred,
Vppredict6 e¤ i f·ô will become part	 =lse‘  2whe» R 0becN M /M D;
in� @s at¢ÿafter that, modules no longer needTito useà pin quesŠó, but may continue 1 Csuch¥ òO 4 ñalso be None, meaning¸ ´ a planned “got
droppÜpstancesdclass 'Òàtwo correspondX Ûmethods,
.get‡!()Í  ª Y().

1iÀ(bitfield) fH pp shouldÕ `passedÈ ð fourth
argument&  Àbuiltin funcP 8Pile()" 0enaA )  in
dynamic§/ Òd code.  ThisŽ vis stor‚ .[  r_® ñ
attribute on _FW3 inVK àese values musç1tch
òappropriate
#defin‰aCO_xxx� sú ƒInclude/{ u.h.

NoÓ ev¯Pdeletö ïtÎ ãile.
"""

all_	¡_names = [€ò"nested_scopes", Pgener @divi…" ’absolute_O  with_state­ dprint_« 0uni}…_literalk äbarry_as_FLUFL. “ T_stop `annota ? P]

__ì _à "
 	ö ]"] +  ƒ

# The „qsymbols›¢ d ä@ undn1he ¢H" Bin
#LhuÃbÞ1ð.h, so that an edðitor search will find them here.
# However, ñy're not exported in __all__, because) ÿ+ don't really belong to
# this module.
CO_NESTED = 0x0010  ð # nested_scopes8 ò GENERATOR_ALLOWC = ð# generators (obsolete, was 0x1000)L ñ FUTURE_DIVISION� I2000Ž §# division3 ñ ABSOLUTE_IMPORT: 4: °# perform a{ `ute im:Çs by defaultN ÒWITH_STATEMENM 8M ø # with statemen9 ´PRINT_FUNCTÀ  Ý Á Ú# print functÀ ñUNICODE_LITERALSÁ û  ü ñ	# unicode string literal�5ÑBARRY_AS_BDFL?  0× «ASTOP$ ×  c �  # StopIY  �  Gðomes RuntimeErrorhÊ[ `ANNOTAõ » ö Y  [ `annotaX sY Ë bs at rc ð


class _Feature:

Jðdef __init__(self, opL ð alRelease, mand_y ñ compiler_flag):J  N  A .@ , =K 
( W - =c 
* 	o 9 =  È JgetO¼ Ò   à"""Return firs¼ã  {Rwhichºf"B²recognized.i  ç Tàðis a 5-tuple, ofb same �s sys.verOe_info.Ö 5""" r‘ 	;k  œKgetMÕ r²Ï  ýfbecomepÖ /…, or, ifÑ Hthe Cÿdropped, is Nonec__repr¤Ò>"×@" + * (&Œ,ž  À ‚{ 2 	�Y))


È% =sÿ((2, 1, 0, "beta",  1)i  0 20 @alph1 00 	k6)

K‚ R ‚   3 �final",  6CO_¯4)

P… 2× (€  23CO_¯àDIVISION)

absÿ!olute_import = _Feature((2, 5, 0, "alpha", 1),
  !(3/ 2 02 ÿCO_FUTURE_ABSOLUTE_IMPORT)

with_statemenš + Ë 6œ Ë ™ ˜ ÐWITH_STATEMEN— ìprint_function1f 2ÿ 
0— ÿPRINT_FUNCTION)

unicode_literals™ */  › &  � ùUNICODE_LITERALS)

barry_as_FLUFL� J3, 1œ64. f™ üBARRY_AS_BDFL)

generator_stop– ý?betü 07˜ bðGENERATOR_STOP)

annota^
Æ33, c “  � /10‘ #`ANNOTAUð S)
# This file exists as a helper for the test. ñ_frozen module.
"""Shared AIX supd<ss."""

z7sys Áconfig

try:s& ñubprocess
except I¹ñError:  # pragma: no cover> t# _aix_‚ ò'is used in distutils by setup.py to build C extensionsü¥# before s‹ ÷
 dependencies like _posix# °are availab EÓ X_boot* s[ b


def¾ Òtag(vrtl, bd)ô# type: (List[int], int) -> stü BInfeªðABI bitwidth from maxsize (assuming 64#  é Ü�default)Gô_sz = 32 if sys.= ñ== (2**31-1) else 641  # ± @[verBñ, release, technology_level]/ ðreturn "aix-{:1x}{:1d}{:02d}-{:04 ‘}".formatB[0],e 1	  2]" , _sz)


#Ã\ract ‡ G andŠ  Š `a VRMFD6ingƒ Î \(vrmf€1struˆÐ °v, r, tl = 5 é.split(".")[:3ó  ¼q(v[-1])Â#(r Htl)]Œbosmp64(� ~ ‘Tuple[strD a  d nR\ða Tuple[str, int] ðNe.g., ['7.1.4.34', 1806]
    The fileset bos.mp64 is the AIX kernel. It's VRMF and builddate
D qreflect4 ñcurrent ABI levels of ñruntime environment.ƒ 1""" €# We expK 1all ñ!systems to have lslpp installed in this locationI ñout = subprocess.check_output(["/usr/bin/N €", "-Lqc 7"])J üout.decode("utf-8" òstrip().split(":")  # type: ignor)À# Use str() GQint()Ü Áelp mypy see8 s€ €return (3 �out[2]), 6   ñ-1]))


def aix_platform():= � P() ->v  n Ýùò!s are identified by four decimal values: V.R.M.F·¢V (versionÍ ñR (release) can be retreived using ``uname``Š ðSince 2007, start# Awithú�5.3 TL7,<Mƒ ‚ has beeç‘included 4  ±Ð É e’representÕ¡Technology… L¤P (TL)¨PAIX. sF (Fix)w �also incrÞ `s, but$1notD  ÷ ð vant for comparË   Aasesëbbinary ‚tibilityHOFor  ù Bso-cêsz Reeded@ RAgain'$ Qof anH†  6 „associat3îH !IX¶Á £  7 ñ#described  as guaranteed at: https://www.ibm.com/\ðsupport/knowledgecenter/en/ssw_²372/Ë �Bary_} a Qhtml
M  %Àpep425 purpoW ò ÆøÂ tag becomesð"aix-{:1x}{:1d}{:02d}-{:04 0}"./°at(v, r, tlÚÙ’, bitsizeëDP Ñ6107-1415-32"ó … 06.1¯@ bd  r, 32-bi [and, < /64< %64< ¯Pvrmf,^ != ;0bos«(Ÿ r( Atag(	 Pvrtl(8 )9  * # extract  Q fromfàBUILD_GNU_TYPEæ ang[L ?bgtW‚List[intN@gnu_ö Òysconfig.get_ j_var("n Ltif not A À]`aise V‚MErro@  ¢ : sdefinedO  ì =^  64 46Ri {w_wä¯� Python w®ruilt ondÎ#›_	@DATEÄ À  |-1ureÚ#ûF-Lcqàð| awk -F:  '{ print $NF }'
    build_òdate = sysconfig.get_ ñ_var("AIX_BUILDDATE")
    try:	   cbuild_H Fint( . òexcept (ValueError, Typ )I fraise & *(f} õ is not defined or invalid: "�  “ 	 6f"{’ 3!r}Ä ñreturn _aix_tag(	 vbgt(), 0 ñD)
"""A minimal subset of the locale module used at interpreter startup
(imported by; 3_io8 ó), in order to reduce 9 ñ  time.

Don't iE ð directly from third-party code;‰ d `  `i � instead!Ó #

M 4sys _0 @

if¡.platform.� ³swith("win"´òdef getpreferredencoding(do_setN S=True1  —\ ö flags.utf8_mode $ ›u'UTF-8'Ú § ³._getdefaulk “()[1]
elsO 	¦6 qCODESETU ™‚Attribut‘‹ ÷if hasattr(sys, 'getandroidapilevel'Ú  º b# On A$ ó langinfo.h and z Ñ are missing, ç 1 is”  F   €# alwaysÎd"¡mbstowcs()5 ¹wcstombs().8 •" q   byS %   f * e   ’     ð# This path for legacy¾¡tems needsÉmore complex0F K¤ function,w òJfull÷
~ N Yÿl Ñ   m?BÔ a }&bassertD£	¤ �È +   ”result = t4nl_( à  6   !if� A  55sysˆÆ == 'darwin'¦ 8   '# g S can £ ù an empty stringî 9 Awhen&psetting÷4 an^  v¹é2# D ¸Å H ÿ at case becauseq  - ›ÄQ char]Pn OSXå:  Ô  ¤ @noth  will crashÃ 3  �Ä À           r÷esult = 'UTF-8'
  �return r$ ôD
"""
Basic subprocess implementation for POSIX which only uses os functions. Only
i< ð! features required by setup.py to build C extensj Ømodules when
‘ æs unavailable.F `is not� Ñd on Windows.× òimport os


# distutils.spawn3 'by �command.— Ç_ext
# callsñ.Popen().wait()
class  :fòdef __init__(self, cmd, env=None)'  �  p._cmd =$ ?  Penv =7 
 ¾pcode = Q 
   w “  U d  pi^ ‘os.fork(),  d 1if  6= 0‘   @# Ch–1   :try-   0if t  ._± � ˜ *  . ‘os.execveþ C[0],C *N ®  :   OelseX W 
L ofinallÍ  ¦os._exit(11 u Ÿ# Parent %á_, status = os(¦pid(pid, 0V  Ï ê 	Ñ1 A 1_to�  í( )î = 8 9  ( 0


`_check\C(cmdñ.# Use regex [a-zA-Z0-9./-]+: reject empty string, space, etc.	�safe_charÝ ![]  ðfirst, last in (("a", "z"), ("A Z 0 39")“  É  A  ch8 ¡range(ord(Q 0),   V W) + 14  8 � ò .append(chr(ch)e \"./-"  %v'.join(2 gÐif isinstanceIè, (tuple, listÅ p!st1cmd/elB  7strÉ 	8 B[cmdU
tr²RFalse 40arg5B !if½  arÏ	{  D	Z     > 6argR   #%é     O  ¬ àR Rif ch« &n 
w Y s k ATrueß�_aix_supó"usmô.ùÌ;PoutpuÌ 9	 �ƒ**kwargsµ2if  ¥ ¤raise NotIûÒedError(repr(/ )T ±¡ê M RValueD Cf"unØ 3ed ¤£: {cmd!r}"W ð tmp_filename = ñ$"check_output.tmp"
    if not isinstance(cmd, str):!  % àcmd = " ".join" )  ñ
f"{cmd} >{tmp_filename}"
$ 6tryI ñ
# system() spawns a shell+  k Ãstatus = os., 2cmdo    ‚exitcode" Bwait2 D_to_ ( 5 4if  Œ  N ðraise ValueError(f"Command Ô ò!r} returned non-zero 9 ?   f"l  „   {  ± R!r}") 7 	  ¨with open(FÚ, "rb") as fp¼  5 östdout = fp.read(ô ñexcept FileNotFoundã 
E A 1b''„gfinall³© ™os.unlink© y /OSo  BpassW € ð
# Copyright 2007 Google, Inc. All R ðjs Reserved.
# Licensed to PSF under a Contributor Agreement.

"""Abstract Base Classes (ABCs) for collections, according b ñEP 3119.

Unit tests are in &_c< .m ò

from abc import ABCMeta, abˆ smethod
 ðsys

GenericAliaðtype(list[int])
EllipsisTyp ñ ...)
def _f(): e1FunÇ (  _f' ðl _f

__all__ = ["AGñable", "Coroutine", gÔ   "AsyncIter)  0tor:  ¿ a 	? DHash: F  / ' "< ‘ "Reversi– 	J PSizedp  èAaine} DCall` C‰Ä 0Set9 0Mut+  	[ wMapping$  ( @View, DKeys EItem Y 	A qSequencqŽ  	* qByteStr–  ñ]

# This module has been r!d }” ‰8to ¨_ ð
# speed up interpreterÄðrtup. Some of the s`s such–¾ ( ø
# required early butY² ö 0lot^ Sother sâðSee issue #19218
__[·"Û "€Private 1 R ¬ Àthat we want-Pregisà t Ô pvarious¡s!o 4 ‘they willTæ“s like:
#i~õiter(somebytearray)!  craAit, ÷0ble( `Note: GAimpl´"atˆDthesxm³àbe distinct
# ³¯ ð	may have their own impleñ@mentation specific types that
# are not included on this list.
bytes_iterator == ( p(b''))
! `array_ % 1yte è()))
#callable- Ï???
dict_keyD q{}.keysB ) _value+  - Oitem,   +  î •  $ç Q[]))
 oreversy   d(/ i)
rangå P   (0Along z  ‘(1 << 1002 ?set, 1set ?str! Š""))
tup|— > ?zip> 1zip! µ## views ##´s¨ Š  2())  ~    p## misce Ämappingproxy+  µ 1.__j_)
genžó(lambda: (yield))T �coroutineY °async def _ ‘(): pass
 $ = 
 5 =ü! )( Ð.close()  # Pònt ResourceWarning
delM A
## v †hronous ¹ 1##
 �  agŽ ¼ @
_ag�   # _6 ‘ 2ag)f òag


### ONE-TRICK PONIES ###

í óheck_methods(C, * ñ):
    mro = C.__mro__ Bfor & 3 in
 s/  3   B &ro   #if.   B´
% )  [l ž] is None/  3 ð return NotImpleè!ed¯    Ubreak ;elsN F  ðTrue

class Hash¾Q(meta ±=ABCMeta):
e â__slots__ = () ’@abstract× ( ‹Ã_hash__(self~ · y 0> h ; 1sub ×hook__(cls, CE `if clsBµ 
Fe ,_c#"_— !")ª ’ k_Await9aQ • @ü (´ –  2!__¢ @_getÖ ´  (G´”icAlias)
JC¡(  Y!Ðsend(self, vaslue):
  õ"""Send a value into the coroutine., óReturn next yielded6 öor raise StopIteration: 5"""F )  
 ñ @abstractmethod ðdef throw(self, typ,t ‘=None, tb	 
Ð RŠ €an excep‰ ? inÔ K if• @ is ˜ ^ e_if tb   1typð     Pval =î %() I ?noth  3 �val.with_J†eback(tbD n 2vals _Qclose_G0GenÎÏorExit insidâ:try ¼.Ç	P ˜ «) ( ,OŸ  #EpassJelset ê åRuntimeError("Ô™ ignored p "")k@class†Q__sub ×hook__(cls, C• `if clsêC<“ @r_check_` ðs(C, '__await__', 'send 1 	 ¢'-rH õNotImplemented


w ¥.register(ò A)


¾ a Async¤�ble(meta ¢=ABCMeta):Ô__slots__ = (¢œ__aiter__Gª s 5torM w È �fV ,blý"j"« "P e!__¦ �_getitem ¸ °icAliasc ð 	¨ _a® aze3"""š ¸ $  ¬  •… 0whe ˆhausted.¾9 É
4 Š ï
 ï. J.ƒ /orN ä P__",  ­ ñ!(ƒ ¿	«(Afrom¢D ”hronous g|IW¸,v§ {À       returñn await self.asend(None)

    @abstractmethod ¢async def /  : ‘, value):"  : ’"""Send a ¡ into the ? õhronous generator.9 óReturn next yieldedC àor raise StopA†  It> 6ion? 5"""K . Ü bthrow(Ý 1typâ =A, tb	 
î R› ÿ an exception inò ] if,@ is ª Ž ’_if tb   -5typ?  µval = typ() I ?noth  3 �val.with_?†eback(tbD n 2valŒTQclosex`G1ÿExit inside coroutine:try
òç	W ¦ Ë) ( ,€ «  6Epass/Jelse€ ý áRuntimeError("™ ignored ‚ "žWclass› •Q__sub ×hook__(cls, C¢ `if cls
E[ ¥ ˆr_check_e òs(C, '__aiter__'  «  ò   '3 8 ay
 ò'vrz úNotImplemented


® ¡.register(;_KA)


  �ble(meta ¢=ABCMeta):xÔ__slots__ = (Vô Yö œ�while Faç¾!m @ƒ J,V ¯Ð ©2"__² "\ ®!__  �_getitem ² {icAliasdDtor(� [#D[' 8 "  ™ Q fromY Þ =@ Whey‡hausted,(—  Ž's é  E ¡� V ,__‹ • - Î3?torÎ'Î 4 __/__6ä &or0Ðbytes_iteratoór)
Iterator.register(bytearray_i >)
#' ‡callable& % †dict_keyJ $ _value& Oitem% 	Olist� 
! oreversn 
OrangÚ Olong& /se� ?str° 
?tupb7zipB ‘

class Rã Qible(qò
ble):

    __slots__ = () ñ @abstractmethod( cdef __,¡d__(self):  H ¶while False   £yield None] “ Z 1sub ×hook__(cls, C` ˆif cls iÍ 
i âreturn _check_a hs(C, "¸ "  6E__")¿ = ô NotImplemented
@2Gen??tor?	+Nnext'B"""R¨ @the $  Æ` from  gk .œ ñWhen exhausted, raise StopÍFtion- 5"""9 Õ  ª`.send(†ä(  2 !, …ƒ’"""Send a _ into´ å á #ed6 /orÁ ê E¢Qthrow›Q, typÄ =ö A, tb	 
Ð Ra a_0cepJ? inÔ K if	 É ˜ 
Ã_if tb  Kù5typâ  Pval =î (ÏI 1not|
h 3 �val.with_ì†eback(tbD n 2vals ÖQclose_G&ÏExit inside Ð £:try›  {.Ç	P ˜  ex«) ( ,Ÿ  #Epass4e£ê åRuntimeError("¸ ™ ignored p "Gµmb  '/__ÎV 
»Í!'_à€__', '__a  |  ë  'Û 6 ^ 	 ðclose')
        ôreturn NotImplemented


Generator.register(g ñ)


class Sized(meta ò=ABCMeta):

    __slots__ = () ñ @abstractmethod( ñdef __len__(self):  C   0= g : 1sub ×hook__(cls, CE ƒif cls i± ^ b r_check_\ cs(C, "“ ,")Ž .~ ¯ Container5cQ s7, xÕ _False4Á "£ ' n!__,�_getitem y(xvicAliash±Collection(s¶, Iterable,vv
d Îs9‚ ?Jqiter__" 4iP_Callð  
-˜ ô """ Represent `7 ð[argtypes, result 2]`.9óThis sets ``__args__`` to a tuple ³ ôing the flattened``Y !``Xæfollowed by ``l `l 0Exai6: `� ÿ[int, str], float]``� c 4``(0 / )^  ^2"""Ò zó4new#€origin, ñ Y2tryL R   jùcls.__create_ga(? š  - úexcept TypeError as excR õ import warnings=  A  .	 ù (f'{str(exc)} ')  -  1f'(ÇÇwill raise a† ÿin Python 3.10.)',L DA capW£  r 	Œ
] @uB©	9 'ðif not isinstance(§,��) or len f) != 2: ¢ …(�    "Ð must be used­ [4d, ...]5'].åt)B, t_æ! =Ij (if½ . T(listÆ u ˜ !gaS " =å (4 T) + (e ,‰!# ðÒrelaxes what 2 @ canÒ ¡on purposeË ™ð things like
    ð6    # PEP 612 ParamSpec.  Responsibility for whether a user is using
E   ð	# Callable[...] properly* ðdeferred to static type checkers.
B   Uelse:    ga_args =   óreturn super().__new__(cls, origin, ; !)
6 ödef __repr__(self)i aif len !._p Ð__) == 2 and .  0[0]Ô †EllipsisE  ® — p )ƒ " ô(f'collections.abc.@',  0   ðf'[[{", ".join([_>Ë 1(a)žKa in§ ¯:-1]])}], Q {D 
ß  -16 '6Nduce8 “* =y ¾ €if not (Z ) Q  HŽ ó  " € = list(  [:˜ ,E[-1]f r_>ô GenericAlias, ( : 	Õ sgetitemÖ  ,  † Ñðed during TypeVar substitu¹",  Às the custom! Uclass£ A# ra<Athan* qdefault(s.³ v object gaaçµ ¯ d  $U = ga¨ Pt_resn C	>tí]d7 R (# $, G Ë{y
�º3objnB"""RÏ F 2ƒ() of anÐ, special-casŒ F òs (internal helper).êûCopied from :mod:`typing` since yò ðshouldn't depend oª’at module�1"""- øif isinstance(obj, Ä×  Ç Ô  ñ ?  Ñ 7  ifú 2.__~  __Œ¯'builtins'tñobj.__qualname__k „ 2f'{# T #}. 4 }+ æÒ E'...- 1FunØ 3Ö ; † ¥  %!

ARQ(meta ¢=ABCMeta):ëp__slots!# (Þñ @abstractmethod|U_callï*áŽ, **kwds¦ RFalsee @{ N 1sub Dhook{CI `if clsF…¸___ ss(C, "_ª "lâNotImplementedŸ !__‡ _1 =  S ( ÀricAlias)


ñF### SETS ###


class Set(Collection):

    """A set is a finite, iterable container.
/ RThis P €provides$ ð	crete generic implementaj �s of all@ òmethods except for __ce ps__, __| ä__ and __len__| ño override the comparisons (presumablyU �speed, as* z ñsemantics are fixed), redefinek v Qge__,6 @thenC ³ other operÕ ñwill automaticaly ¡llow suit.> 2"""fâ__slots__ = () 3defv b(self,c !)::  ›Pif no™‘instance(… ,Ê'  + ´return NotI|(edI 1lenf @) >  J E UFalse<  ¢€elem in § Ÿ  x 1if  ¨ nÂ 
"  & ž 
Y  ITrue1t__ª H{   Ó 7) <y  .~"__u	´g¤ a¸¤  ¬¤ eHO!if8 -
D
o
ÿX�
4 Y c 
! X/eqOé X!==!à )µlž ý@T|Afrom Œ@(clsš¶ô'''Construct an ) r"ù F P any Z J c inputV IHMust\2is ‹ 1 ifþž  él ¶or signatur*Adoes±!acÜ � tG î  x  s   1'''ì   <icls(itn?and»Iz -f („  m ._6|QvalueZ
 ií !  9 » 1__r¸ Q = __
 è ×¯isdisjointé"'RÏ  a 0two£òs have a null intersÍð.'
        for v÷alue in other:
  Dif v Jself  ) Åreturn False;  QTrue
 °def __or__(G ,l )O ñif not isinstance(Ž §, Iterable, w áNotImplementedk   ðchain = (e for sÞ 	y  õ %s)6 ¶  ¡ ƒ._from_i} (Q )Ì 0__rÉ # =Ò  â ?subã ;SetÞ  ô ¾  " R? = á   W
 !inQ F j  NëqV@rAã~B! Ë	Ax›	ëd�‡Ê # -/2 | ! -tú 1__r÷ ’
 “AhashF cð """Compute the # ç’of a set.B  È!No' ðat we don't define __: 1__:»0all: Bs arS  ¶.Õ¤But if you? ay  &  8 ¥ type, itsX g shoulÖ c ×this function§ T ðmust be compatibl¥ Geq__) A¨ ‚ought to. €re equal¥ �they contF "6samÝeoðs, regardless of howOyi–F, anÅ 
4  ] PorderA   ] @; soN Are's_EmuchMqfreedomÆ __á 5 or8°.  We matchC × algorithm us%!by ñbuilt-in frozenset‹º5"""y 0MAXA–ys.maxsiz°MASK = 2 * % 5+ 15  Š2len† öh = 1927868237 * (n + 1„Ph &= W 3  uxÌ ÷Ø ¦Ahx =P&(xB  ‘ ^= (hx ^ ð<< 16) ^ 89869747)  ç* 3644798167
  •h &= MASK ÷
h = h * 69069 + 907133923" 4 µif h > MAX:&  e 2h -^ E + 1 . \== -1. ¦= 59092371n ò+return h


Set.register(frozenset)


class MutableSet(Set)^ b"""A m ð set is a finite, iter4 Á container.
© RThis W €provides$ ñcrete generic implementations of all@ ómethods except for __e ps__, __| 
 alen__,8 ôadd(), and discard()“ ðo override the comparisz ±(presumablyl �speed, as* Y ðsemantics are fixedh ðll you have to do ð redefine __le__Ž D @thenQ ³ other operú ñwill automatical‡ ¡llow suit.> 2"""\â__slots__ = () ’@abstract91 @def ³self, valueÕ ] Ùrdd an e….a     ¤raise NotI¤edErroro ts hRemovev ’  Do not s  � ôßion if absentœ  ÷ rg (‡ !If† ”a member,� A Keyú 	„ "ifQ4 0in j 1 >  Ï = (˜   0 ..   ¾ 1pop» 
®RÊ »bpopped‚ A.  R­k  6Zempty± 1t =¯Z l  ‰ :try¸ � µ = next(it)* ‹PStopI÷ ´
; 
ó ¥ from NoneC ö  …   © e Rclear³ l 1"""`@is s$á(creates N newæ ùators!) but effectiveù ¦while Truej  ™   ¹  —v
4 FpassÅ q__ior__Ç  4Ø Ùó j in itF v  Â" { +  	e ?andf ‡ D - iã á    P ”    s xÙ Aif i- V ×  ÙÔ ;elsxi‘ö isinstance(it, š —  iÞ j  ._v ˜	Á - p
 ! ÙÀin self:
     üself.discard(value)
$ ]else:  & > -ad: preturn  
9 Ðdef __isub__( V, it)U �if it is3  d fclear(› “ Afor À j in itD H ê 	° ò:
MutableSet.register(set)


### MAPPINGS ###


class Mapping(Collection):û â__slots__ = () D"""A3  ö ða generic container Ñ ñassociating key/á Qbpairs.N RThis ‡ €providesH UcreteY  implementa� �s of allL ámethods excepty À__getitem__,¹0ter
 ³and __len__| 2"""… ’@abstractN Y öJ ù7keyúâraise KeyErrorL  8 6get0 ç, default=None> 0'D.) ðk[,d]) -> D[k] if k0D, )d d.  dC Ps to G !.'¥  :try1U[key]* $° 6 ¬ Ì #__×sþ
€  #y VFalse« ·Ö FTrue� AkeysjW1"D. Sòa set-like object f •Ða view on D's£%s"€ n ‚KeysViewd x  ^y  z 5 { OItem| H}  ~ nð . w VGx E__eqWotheruPif no‘instance(" ,)+  ´_DNotIÛ,ed}2dicG."q()) ==  ]  ˜¡__reversed¯ &3


ÜmíPproxy|' ì_Sized#'_= "',s  ìe__init" ð  .: 3 = " B •d•$1len C ‡| Crepr| s ; a'{0.__á Ð__.__name__}( † Á!r})'.formatg ^ 7  " =¦""(GóVAliasF/O@, Se.ÞP@¡ X % Ú ðfrom_iterable(self,s it):
  ñ return set(it)
 þdef __contains__(self, key9 Pkey i@ ¸lf._mappingF CiterB = °yield from \ : ñ
KeysView.register(dict_keys)


class Item& "(Ms  2 @, SeÛ Ä Ó__slots__ = (Ø @= amethod% é  † _§ Cableë #%Gitemç Ðkey, value =  v  z6try„  :v =U[key]0 ú except KeyError< ÄVFalse2 ?lse' Cv is• ror v == ¶0forð
g Ü(ü 	ÝÒ  Ä¾ä "åV9æ ÂCollection):µ íÜÅŽ£Ô ž Á?if Z
  - ²6Tru± ÆÇÃ  ›B¸ Œ†6


^†"‡0Mutiq{	Z"""A 7  t£a generic [0er Ç €associat: Akey/… r pairs.äQThis Á� providesH UcreteY  implementa�s of allM÷#s J y P__getux__, __s 3del > _" ( ³and __len__š 2"""£ ’@abstractl 9 Ä[ `ä ‹UraiseãS ¡ S L ô__marker = object ¤ 6popI ¤, default=4 [ P'''D./ ñk[,d]) -> v, remove specified) ,×òthe correspondingu.% öA  If5 ð is not found, d:D øed if given, otherw1)  CdU 5'''a s `wœ+ $n$if r \Zé  ‘ X  è Ì C  e¯1del
› C @'Â ²Æ¯Àpopitem() ->ö$ (k, v), remove and return some (key, value) pair
  õ as a 2-tuple; but raise KeyError if D is empty.; 5''' Etry:  [ õkey = next(iter(self))# úexcept StopIterationA „ •from NoneC Î 0 = Z U[key] ?del  

1 ƒdef clea£ … 2'D. A) ->{ C.  R`‘ll items ˜ /D.
¦while True\  "   ¼ @.popL (�
8 Fpass» aupdate_ö, other=(), /, **kwds)= c''' D.1 ˆ[E, ]**FÝ UL " DÕ €mapping/¿aable EWF Â ÁIf E present  hOð.keys() method, does:0 ö for k in E: D[k] = E[k½ % U olacks U 
Z vã S   PIn ei#° case, thisØÂfollowed by:  0, vI  F.™5s()« Q þáif isinstance(†2, M@� „ ÿ  ey^ ( Ÿ     Ð" =Ñ É Äelif hasattrk "n"j >q  sºÄ QË ¯Æ C  ­o( F   ¹£setdefaultÞ =/7'D.0 Qk[,d]þñD.get(k,d), also set› =dûPk notå Då]¼¢  ½ éË/ 3 = µ 9 R  P

Mut‡W`.regisZðdict)


### SEQUENCES ###


class SequešðReversible, Collecx"):OÓ"""All the op”ós on a read-only sL .4 ÁConcrete subm ñes must override __new__ or __init__,å P__get`1__,:r__len__`2"""b â__slots__ = () ¡@abstractm_O  S WindexVI ÜP <  é!__9 2 Qi = 0b  ÏèÞ	vžiß I fyield O    ei += 1p ?± ¿À    return

ð    def __contains__(self, value):
#   �for v in      if s3  ( "== 
)  - µreturn True\  aFalse
 • ƒreversed• Ž iŽ # ¡(range(lenÀ '))-  w Qyield¼ 6[i]d Qindex2 ò �, start=0	 hop=NonR'''S.5 !1, [0  óop]]) -> integer -- Û afirst 9 2 of.ê  � °   Raises VvÂError if the+ ò is not present.Á ; ¢Supporting¼ ð and stop arguments@ Øoptional, but{ ¶recommended“ 5'''$ #ifY †  e zart < 0çf = max‘" +E J, 0)Z  opŸ  ß Y /opX eop += å2i =_ [ Rwhile1is Z  U! < 
± :try  ZvS 0elf0   ò 9 iŸ   €except I„ô… Ybreak5 i1 r87 ?XcountÛ2'S. Å´`number¯°occurrences 5 Ü isum(1 ' ÄvÝ2 
€)


SequV ÿ.register(tuple)  ?str ö  memoryviewi ôclass ByteString(z "):1ñ"""This unifies bytesä 
 SarrayuðXXX Should add all§¢ir methodsC2"""Y ö__slots__ = ()

„ õ  c /s) ~ Æ tMutableÂ Ë r  jB"""A© ` opera
ôs on a read-write s�» `Concre !ubA`es mus†Ðovide __new__Ø‘__init__,™ø__getitem__, __s 6del 0len#  ±ƒinsert()gA’@abstract``  ßW å^Çì"eÝ W ¡ W P &×  5, ¢ Sþ 	Ã  ?? bbeforeF à  #cappendÇ ƒð):
        'S.apðpend(value) -- ap   á to the end of ³sequence'
  ðself.insert(len( "),A !)
' ’def clear :  ? 2'S. �) -> Noneƒ öremove all items from Ss 6tryD  H ªwhile True    � e.pop()w úexcept IndexError6 Fpass¹ reverse»   8 ¶ *IN PLACE*° En = † úfor i in range(n//2)‰  » Q[i], 	 ˆn-i-1] =  &i]° 0extÒ 3 †sW 3'S.! riterablö  Þ3 by	³ing elementˆ < ã "ifòAs is¡ 
Ê Os2istns� 
v
' 
;  É .–'(vQ Ó  0, iÈ8=-1ç 1''Sõ[ ]` M`‘nd returng2 atJ õ (default last).±‡   Raise9€ if listö `empty Õ �   0out8àG &''7vÏ§ k 1delF¿  ° vï-žï" \«`Àfirst occurrÓ « % « ò V + ò  *  å ¶not present9 ä Ì  ®.é )¶ˆ__iadd__É ¸< ¦= ? # `


Mut×S© .register(¨) ðbytearray)  # Multiply inheritinglðe ByteString
# This module@used41map-ðold Python 2 names  >3new 4 Din
#*  3  % cpickle` ". n Dneedf 3ke $ ô	streams
# generated withU `2 load Û” 43.
Ä �is a copyÐlib2to3.fixes ð
_imports.MAPPING.  We canü 3
# 7 � and use@mappCPdefin·  here, beca# 3 CusesË .“ Pus, t]bcould .  mmbto be { eÇócursively.
IMPORT_¬ A = {?ó'__builtin__' : ' 2s',   ÿ €_reg': '    PQueue q	  ÀSocketServer s s $ ¢ConfigPars$ c p $ 1rep@   4lib� ±tkFileDialo” Òtkinter.filed A otkSimp, s . ÐColorChooser'ð: 'tkinter.colorchooser',
    ÙCommonDialog'.   d . & 
  XTkdndE   < htkFont f  ¨MessageBox$ m 4box² ¹ScrolledTexN s t V ¸TkconstantsU  ( iu %tin 8ttk:   4 V ¢  markupbase _ ; a_winren
  QthreaA_  Tdummy I: '_ % Pbhasht tdbm.bsd‘ tdumbdbm     n# K g 0: 'I 4gnu. �xmlrpclibK  t.client" ÷SimpleXMLRPCServer+ s d ChttpK   I ðhtmlentitydefs' : ' . 4iesq pHTMLParÓ$ p h QCooki‹g  @ c 	ˆ  %ja$†BaseHTTPÐ I 
Î Ptest. r_supporœ   � qcommand‘•subproces� 1url¾ ñ rurllib. ? Qrobot r$  * > 2€ u.reques¬6anyçPq_abcoll\  	 ðxections.abc',
}


# This contains rename rules that are easy to handle.  We ignore the more
# complex stuff (e.g. mapping the names in 4 Æ à and types modu !).” $es… €should b Pn befv  im–R  ¢ ñfixed.
NAME_MAPPING = {ð('__builtin__', 'xrange'):63 (' s  w: Wreduc: ‚functool;  < ¸nv !sy6  6 funichr6 ¬  8 $od« 
ä _str')8 Dlongn  6int8 Eiterû Fizip6 8  p 
8 /ma8  8 Ufilte¨  ; 	Afals)('’ <  A @zip_' ~;): A 	 A €UserDictb…Iterable D Ÿ %  À,
    ('UserÁList', 'User ú): ('collections q,
    (/ dString   ?  A pwhichdb>  ; 9dbm 0 a_socke« qfromfd'/  1 Ãmultiprocess¨ BConn× > # &.c  8, '. V 2 `  ³ Pk Z 1tex¿ ( T Cfork± _PopenR p _, }   $')S Qurlli]òContentTooShortErrorQ $ !.e ï *  R ©getproxiesH RrequeL" @ Ïpathname2urlB 
$ D šquote_plu„ Pparse  > 	{ 
9 H(unT  $@; 
" v   x  8  4rl2	= ru$ D cleanupB " @ iencode? û $rl < �5
»  : zretrievx 
> # 
B 2	OHTTPô =  ?URL<  ñ,
}

PYTHON2_EXCEPTIONS = (/±"ArithmeticP "l `"Assere
 ‰ttribute �BaseExcep0 A jBuffer( ´ytesWarning' pDepreca:  9EOF> ¢Environmen*B z »FloatingPoi+ kFutureh ÔGeneratorExitU )IO| 4Imp¡"  L aIndentÎ 
@ Index <Key ÕboardInterrupŠ iLookup, ZMemor? :Nam”€NotImple/)ed? *OS yverflow PendingžŠReferencv [RuntiŠ  
*’# Standar› ð is gone in Python 3, ðso we map it to Exception
    "StopItera #", ªyntaxError vWarning Kstem(  4xit% 9Tab" IType ËUnboundLocal picodeDe  /En ¼ !UnH ŒTranslat~  Ú KUser JValu; ! ÄZeroDivision® q)

try:WqWindows !
e‡B NamT # ’pass
else ø	PYTHON2_EXCEPTIONS += ("J þ",)

for excname in 8 P ò NAME_MAPPING[("„ dions",? 0)] b ibuilti ø

MULTIPROCESSING— 1= (ä ¡'AuthenticQì 'Vô 'BufferTooShort bProces tTimeout> á Š é bmultipi ¿î   ‡.contextà

# Same, but o03.xOô2.x
REVERSE_IMPORTaá = dict((v, k)4 `(k, v)¢
+ ÿ.items())
assert len(V A) == 
B )… äƒ 
) � 
)  	   Non-mutualmŠpings.

¦ ’.update({,ÂcPickle': 'p
 *±_elementtre Pxml.e ".E T -  FileDialogI Òtkinter.filed ( OSimp* s 
, ð DocXMLRPCServerY ‚xmlrpc.s 	T FHTTP) Khttp' ?CGI$ ò# For compatibility with broken !ps savedBðold Python 3 vervsX ½@Dict· `collecÝs^  ?Lis 	QStrinP@  pwhichdb^ 4dbmV 3 ”IO':  'io c  5})
­
@_bz2e   p_q 0: '  �functools,   g, 1: '  N 1 
  ,
— Õ
¬C('__²__', 'bases&S): (' s Rstr')k &('e  ‚StandardÛ: �@  ®Í5, ' 9 	› Ð,
    ('sockeò	t', '_socketobject'): ('   S ð+Type'),
})

REVERSE_NAME_MAPPING.update({
    ('_functoolsD breduceZ ¸__builtin__ ,9 ðtkinter.filedialog& RFileD Ÿ  7, ' )H HLoad.  ë  <, '" P GSave@ œ  " P Hsimpê S ì 	 9, ' ð Ðxmlrpc.server3S
 rHTMLDoc{’DocXMLRPC &  ž N 8 ñ DocGenerator'):³ð[  3 ` @ ßRequestHandlee 8 j Ç b 0 Z 	2CGI÷ Ç ; p Hhttpà)OHTTPl 	- & ¿ A  : k ?CGI.  # e  b s ƒk< ”zñPYTHON3_OSERROR_EXCEPTIONS = (�ò'BrokenPipeError'Ô Ú'ChildProcess ÿonnectionAborted  _Refus5 YReset:  .ZExist†   zNotFoun� I<rup™ ÉIsADirectorya ?Not ©Permission1 iLookup eTimeouÀ ÿ)

for excname in �*3[(' M  )]Á`'excep‹  2'OSŽ 4)

i oIMPORTýlModuleI¹ P ½ 1SImpor;Q)
"""ÉÀnal classes 7ñ by the gzip, lzma and bz2 mË qs"""

iM ø io


BUFFER_SIZE = io.DEFAULT_ ð # Compressed data read chunk size


clasðs BaseStream(io.BufferedIO ñ):
    """Mode-checking helper functions."""
+ Qdef _( ó_not_closed(selfL  P 0if  . d     ðraise ValueError("I/O operak B on 7 } file")w can_reau 2noty    Wable(• } ô io.UnsupportedO{ p("File E �open for I ?ing‡ _writeý   C  ! ˆ 2 I ˆ Oseek‡ 	 Æ ‡  1See…is only 3! " R 1"onËsåV? !ifx5 Î ®  °The underlyÃ > object¯ Bdoes� " � |ð
class DecompressReaderY<RawTÅAdapts the d2 Åor API to a 4 he 	j¹ Ì·return True q_init__
S, fp,w ð_factory, trailing_e{r=(), **œ W_argsc  r •._fp = fpï »eof = False ópos = 0  # Current offset inŽ  7Aed s“¾  P# Setsize of. ñ once it is known,¥‹SEEK_ENDŒ I I= -1e >ave’!õ  and arguments.P A# If5 Uôcontains multiple × ws, eachA ï û will need a separat³w. A new'orN %  AalsoQ Ðed when impleÀ  ±a backwardsÇ&()Õ Ëý=r 3t 	.  + +   (  êBor =”_k =(**T íQExcepuÓto catch from§ b asignif÷uinvalid� #ôP dataa\ignor¹
% =7 +C ý�c-á ” V= Nonf ²rsuper()(ð  W  eõ Z 8 0elfŽ.( <  &Ainto– ð , b):
        wðith memoryview(b) as  , ‘.cast("B" Pbyte_ 7:
  õdata = self.read(len(, )))-   [:'  < P)] = 	 ) ureturn ! 
 Adef `  j ¦, size=-1)� !if F < 0  © P  8 ¢ Rall()U   bif not< "orÉ O_eofE 1b""Ž  9  µ õ = None  # Default if EOF is encountered5  ( ñpending on the inputÑ, our call to ðdecompressor may« L Û 1any@ 0. IS ñ	is case, try again after@ y åanother block.P ªwhile Trueü  Z ß_Ž .# 1rawU A = (q
4 qunused_:%ory  :  > !fp³Ë(BUFFER_SIZES 8 Ã} 
¾  !   ]breaks  # Continues¶next stream =   ’ øå �_factory(f  ? (**A Z_args % ?try¾ 3go .‘ (^ cexceptãïtrailing_errorv 3# T& `ô  isn't a valid ›#ed4¾; ignore it? ß „;elsn ( raneeds_/¯  ˜?�B š PraiseáE63("CŸ@ed f>�ended bef Þ0 ?  ‚"end-of-° marker was·_ched"Ñ > e ´    O.!ifˆ
ãX o 
+ Qeof =r	–  ãÊ9pos# úÜ 6 gpos +=> ï   2  ‹ ý�# Rewindi½u`beginn)!of  4 ãØ �!_r> ç‡† –fp.seek(0´ ò UFalseÐ   ¹ ;= 0 Þ%or oZH  ¨ ˆ  c ð, offset, whence=ião.SEEK_SET):
  õ## Recalculate offset as an absolute file position.; æif whence == i^ ]  d Epass3 /el5 :CUR5 ˆ Ó= self._pos +� L :ENDL ð# Seeking relative to EOF - we need rknow thî v's sizeì  Ê #if�   J < 0h  #  wh+µ ÷read(io.DEFAULT_BUFFER_SIZE 5  	*  w  *se‰ ðraise ValueError("Invalid v C for¹Ò: {}".format(Ì5))
bó# Make it so thatƒ1 is*ð number of bytesF@skipa Fward>$if: <C:posµ 4•_rewind()ƒ ,elÞ -² ðRead and discard data untilîQreach½ desiredØ Åh >çP } ä?minè,ö )Ð  ×aif not™ 
  Ubreakÿ   ‰ p-= len( £freturnU�def tell(VnB"""R1  é{currentß5""" ^ `"""Sha7psupportì` scannaPdocumS Àtype declara5‘s in HTML›X
 à.

This moduleSAused{a found9 `  ­ ³html.parser3 Ô.  It has no
z  Ñ‘ublic APIm ashouldr1be d °directly.

î 1
imË Pre

_µ òname_match = re.compile(r'[a-zA-Z][-_. ±0-9]*\s*').2 B ŸstringlitG ù(\'[^\']*\'|"[^"]*")D 0comH\close„ ð--\s*>')
_markedsecc, @]\s*  / à
# An analysis¶ XðMS-Word extensions‹ðavailable at
# http://www.planetpd shð/xmlarena/xap/Thursday/U ïtoXML.pdf

_ms® ª @del Ž�
class P÷$Ba2""" b base % ðwhich provides some G4on ¬qmethodsä!byPSGML/”1ž k!s.! ‡ TŒ__init__X_Œ  __D£ ¶  E   ŸR“m¡�    "Ü upà .I Á must be subj 3ed" Ÿ eî ôð, message):
        r÷aise NotImplementedError(
  ñ"subclasses of ParserBase must override e; A)")
? ñdef reset(self):  W   º.lineno = 1 ¦offset = 0F lgetposG ð"""Return current T Â number and L E."""d r2 ƒ !,  , t ÿ# Internal -- update] ñ  This should bej ð# called for each piece>ðdata exactly once, in orderm   CtherG ðwords the concatenationI 1all óinput strings to this? Afunc0 Ÿ {  T qentire B .3  ´ð qg, i, j¾–if i >= jÑ ÕYjG  !awì =`r  n­Cs =  ³.count("\n"s + 2if . 
r · F G +0 B  � (pon hrindexo B # SÅ‰not fail? ` %Å = j-(pos+1)$ Oelse   2 @ U+ j-i: : p_decl_o@char´ /''—p‡ . "ar(nvuse by ³)Ú3 a 3 S7, iß#Ð Ó€ome sortnh ;±r"HTML ai _Á# deployed,"ƒqonly be¬@docugB typ*; #cl“ ó ("<!DOCTYPE html...>"Å . ðISO 8879:1986, however, has mor, ÐxP3 ¿ r syntax›ösÒ  <!j  ŽvcludingÎp# --comº '--V ¡[marked sef] 0namYö ó	following list: ENTITY, æ §, ELEMENT,@ øATTLIST, NOTATION, SHORTREF, USEMAP/ @LINK2 , 
 B, ID 2USE	 eSYSTEMa u �•j = i + 21  þ$rt­ñ[i:j] == "<!", "unexpectedù †l„%ifH Rj:j+1J &>"qµ£Smpty }E <!>’  $ ;' +G_ `in ("-© "ê A R# Staâd ® edFö buffer boundaryr< @or j+a ) s %   ¦ -ê`# A si¥ð, practical versÝcKÐlook like: ((O|äålit) S*) + '>'ƒn = len(Ú™Ð2] == '--': #—comment
  ñ# Locate --.*-- as the body of 7 óreturn self.parse_& 5(i)` õelif rawdata[j] == '[': #marked section0  — � ÿ[statusWord [...arbitrary SGML...]]­ [ 
gWhere Y `is oneé ñTEMP, CDATA, IGNORE, INCLUDE, R © ð%Note that this is extended by Microsoft Office "Save³ �Web" funý àto include [ifæ Ù and [endif].‚ „ý _X
‹ðse: #all other declara€@ eles^  ! ’type, j =éç_scan_name(j, é™if j < 0:B   j !ifw  V  @"doc "7 T_ _« ¥chars = ''I Qwhiles n< 7c =q0  YAif cv >p   P# end w isyntaxE  ,  Îg mi+2:j]& ì  P   ô ahandleú (e I #   Jelseñ     á# According to·´HTML5 specsjús "8.2.4.44 Boguò H   ## Ì*!e"‚9 �5 MarkupÊ*:opeÆ G   #C 5, aU útoken should be emittedÜ =   `# CallÖ qunknownÿ provides more flexibility thoughM fH g¹I + 1ÙDin "\"'F Am =   óstringlit_match(>, jÔ�if not mØ‹ @-1 #yomplete•  ' £jm.end(a ‚ c ³ ÿ%abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZä   þ – ~ zÔò  Ç jvG _== "[’  #cPGdõ Pa sep¥#e l ­rA¯ ¨ Ó O _] �_subset(Ã 	!   Ë  d ø ¢ ð{"attlist", "link    œ."}. Q À# must tolerÆ°[]'d groups_ àa content modeÿl in an element declaration
   `# also5 ñdata attribute specific; @s of ?lisS ˜link type„ € subsetsq  !   s¥ 	 1  † ¢  › W s S ðself.error("unsupported '[' char¡ (%sH 1" %  ³ )§ ]else:  q
j \expeci ¥"[ W S s 5"unh %%rÐ g ` % rawô:[j]t Žif j < 0Ï …return ju  ñ-1 # incomplete
  õ# Internal -- parse a marked sec“ð*# Override this to handle MS-word extension syntax <![if  ñ]>content<![endif]>~ 2deft _r _r (<p, i, reó6=1)è  = % . O  Éeassert7øi:i+3] == '<![', v@callÉ ÷ ƒ %)"T  – ƒName, j w ö_scan_name( i+3, i  œ‡˜!ifb Z  É°{"temp", "cò 	 aignore
 Qnclud r } ø ð	# look for standard ]]> o%ngË  + smatch= ñ  Ý óionclose.search(U,Û × -el²  if�    _ndif"™ ¯MS Office ™ s› Ù;€'unknownptus key•! %@k ŠGion'sHi+3:wqif not ?
}Û%-1h#if»
)  @@ †.start(0^ šµ ® _	Š[Œ  � s M 0endK ~ Ò0comh OÓlength or -1 × ¡terminatedG ›= ”@I  Ø  È ‘A4] !‘:--' ¶e‡
©‘ &)'>C = _ Ï43 ø : 
† \Ï3&à_comment(rawdaÓta[i+4: j])
  ñreturn match.end(0)
 ô# Internal -- scan past the i ósubset in a <!DOCTYPE declaration,L g 3ing@ ‚dex justT ôany whitespace follow- Ptrail A']'.O òdef _parse_doctype_‰ ‘(self, i,ƒ ¡startpos):6  ñ  rawdata = * .  ƒn = len( &Uj = i' ¶while j < n[  _ Cc = < 5[j]0   ºif c == "<"4   s8 J:j+2<  # Oif s@  ! ù# end of buffer; incomplete‰  ,   ’= -1 k !« !¬   < = updatepos(ðmv, j + 1; 0  8 ðerror("unexpected charDWÎ(in %r)" % sQ @if (l  2)Šr :o L4) >øn BIP:j+4]ä _"<!--“ ¢_þcomment(j, report=0B · !ifÉ0•    )j(  ~continuc@namej_A_ E2¢\ — _== -1™ • ¾ g 1 no˜ð{"attlist", "ele Pntity
 1not«/"}k Ví	2Z8 íß  ;  �"unknown°3/ %  Ø l „# handleZ€ividual . sz ãmeth = getattr1"N1" +? m  g C  Y÷* Â/< YÀ
U%el&%ç Ñ# parameter e¿ž referenc€1Ssì1ì* <'ifl;5 À    j = j + 71
  éelif c == "]":  & Šj = j + 5   þwhile j < n and rawdata[j].isspace()P  : T "ifQ 8 'ife ² >²   b   �return jÓ   ÿself.updatepos(declstartpos, j)4 þerror("unexpected char after internal subset"H OelseÝ ¯ -ižQ	Mh ö 0 ò %ï ò F % cö õ# end of buffer reached^ô  4# IAð-- scan past <!ELEMENT ¨�arations3 ðdef _parse_doctype_element(½ A, i,5 Ý’`name, ? *  ._p _ (4 j  6iŸZ== -1ÄÈ  &   õ# style content model; just skip until '>'] @1 = �    if. 6 in/:]‡ : �.find(">"Ñ	Â¯ ^ woATTLISwoattliswž ç  �–7c =Aj+1]×  ‡Û( &   * S+ 
ü#³€a seriesøñattribute descripºÊ; simplifiedÂ@#    Êö [value] [#constraintÜ  ¶  , .jø 7 È:< 0}   î 	/ a 4 ;e  P Ö2 (3  À# an enumera` Ö; look for ')3 b   oif ")"
 '    ðƒ!)! )   F  Ø   c 0[j:�À	 4  • 
a    gif notßó $   jÁ, incompleteËÀ            à    return -1
  Yelse:   ðname, j = self._scan_ ù(j, declstartpos); ùc = rawdata[j:j+1] Žif not cp œ Þif c in "'\""5 Rm = _� ãringlit_match(ƒ :, jŸ  Ú Nif mK    î nm.end(6 & 6 º    #   [ _== "# 'if€/] '  ^ ù # end of buffer©     ‚    !O + 1%	 ? �if j < 0Šw j” SL>'>'‘ ­# all done� ¨  ò 
 à# Internal -- 6ñ past <!NOTATION>�arations4 ñdef _parse_doctype_not! (~;, iO¥ ‡4 k {Ë ' D  vwhile 1Š  [ ŸîŒ¿; incompletuÇÃÝ ¨ ©  6 a? åe‹ ¾  � {ù¡
 i |ëÐoENTITYÎoentityÌcrÛRi:i+1Þ% Fiè® ² # ¶  Ð \ª.isspace()) :    ® j®   ö  Qbreak�  (  T ði
        name, jó = self._scan_name(j, declstartpos)
  •if j < 0:   …return j zwhile 1& ci årawdata[j:j+1]5  J Šif not c:   d ,-10 ®c in "'\""5 Rm = _Ê ãringlit_match(ƒ 6, jÜ  f   Nif mK   ®j = m.end(6 Oelse6 º  C É# incompleteÊ Ïelif c == ">Ê  E Jj + x  Æ , ° Û ž   ã    ˆ 
½ à# Internal -- @0 a | ö token and the new positio # C, orK [ ò-1 if we've reacheD aend ofO qbuffer.8 Gdef º ï ;, iÀ™ù‹J  ß tn = len ç@if i�nK  0 rúgNone, œy tiW lsd[groupf K  ¸ \.stri qif (i +½ ?s))«  ¯  C  # WS-  w �.lower(),ÿ ‚².updatepos(~H', û  c , ù error("expected@Yt %r"–  7  #% Î[e : T+20])¬ðTo be overridden´ñhandlers for unknown objectsx  ` J(´  , Á)ðpass
from _weakrefset import WeakSet


M Pget_c×_(F A"""RMsãÁcurrent ABC . R.Ì 2The Ó is an opaque¸ P (supy ðing equality testing) identify "th…n @vers£h}  övirtual subclasses. ‰ bchange4ðwith every call to ``registF1`` yÞ Æ"""æPðABCMeta._abc_invalida=@_cour1


„  B  * V(typeJ     ¹ Pdefinï ò Abstract Base CÅ s (ABCs)ZÒUse this metaC �to createj€ABC.  Any @ canRd2„irectly,ÿñn acts as a mix-in Z a.  YouF Talso "F `unrela‚concrete5 åes (even builtL 1es)o 7 E  Ú  x '¼Àes' -- theseð, and their descendants will
    be considered subclasses of7 ñ registering ABC by �built-inD $is8 ñ() function, but, C ãwon't show up D £ ðMRO (Method ResoluK ± Order) nor¹ ! m" | �mplementa* ”s defined¨ |  ï Áallable (notD ñeven via super()). A"""
	 ñ# A global counter that is incr ñ ed each time a F3 is@ ‡ õ ed as a virtualp nðanything.  It forces@C ñnegative cache to»0lea¸òbefore its next useÄ Å# Note: this½ ñ
is private. Use `abc.get_[ �_token()`„ }  *�  externd` Á_abc_invalid‚_"2= 0>ódef __new__(mcls, name, base ñspace, /, **kwargs):z  x Tcls =›.J G F Ñ# Compute setosbstractM• ¯ u a  { {° I    1for9 ¡, value in Ð �.items(): ±if getattr(; t, "__isx âÅ__", False)}G  t  < m   s+ ˜    ±   b  ' a 
_ s` Wset()p E   — % =§ »NNoneØ Ó 
¸  s   £ `s.add(Ê j dcls.__" $Às__ = frozenË  s7 R# Setl“heritanceÙ%ryX]  Ï­ ry = WeakS & ,# ³X,  _version =u_Meta.j› ¦return clsyÌ 1er(¾§îC"""Rã˜ „ .T  ¢Rh œÁ,‘0allÔBsageç’decorator“ C  [    Pif noM1ins›(§ g, type­  / ó
raise TypeError("Can onlyÒ"er}6es"7if ¥` (clj_ Ý Ø À  # Already  sp# Subtla!esµð cycles *after* test< —-"aJ '";L ¥’means we N%X.Ã!X)Íi�rpret itgVno-op]Ðif issubclass÷(cls, subclass):
  ù2# This would create a cycle, which is bad for the algorithm belowN õraise RuntimeError("Refusing toa Òn inheritancen %")J õcls._abc_registry.add(Á ( rABCMeta, ôinvalidation_counter += 1  # I õe negative cacheL ereturn&
 •def _dumpŠ L—file=NoneMð """Debug helperî Qprint4EABC Í 1"""^  †# @(f"C›1: {û ³_module__}. pqualnam 1",    3H SInv. þ q: {get_è Ÿ_token()}?  Ü ` B in ƒ jdict__,0if % Ñ.startswith("¨" Ö   ò value = getattr9 ? µ  '   �if isins(9 Ÿ, WeakSetZ   3 % b = set1 V {u A}: {4 +!r‹érQ_cleaµ � @"""C ÓÏ  (=dûgæ &ˆesting).êWc .c )k  ¯s€ ( ~ 7 {  K  � 6( %_¨rcheck__Ø 
-�Override;â. ,l
& «Alinec¬  i 1ing„  ­ 	4 = J 1.__Ý%__& %ifÍÖ`
Øü6Tru`subtypÁ  (i g`    !” 
Y 0if  ¡
[µ_version ==³  Ý   Ø=and6 ƒ 	î 
u Ÿ h   ü FFalsý   °# Fall backÌ úb “.‚ H I_) ( /__» / 2any!3 !c)6cÎ @ Æ s)6< ð;"""“© b :cls“ ö(ot¢6 !, Œ 
ô3Typ 4'is0 ñ () arg 1 must bi ø'V0# CX ûalâ eÌÀTrue
       ó" # Check negative cache; may have to invalidate
  Äif cls._abc_; _; ò_version < ABCMeta& E Åion_counter:P  W 5# Ii K the” 	, } Ï = WeakSet()0 ­ =­ P ÿelif subclass in

Þ ¶return FalsG~ î R Ehookm Bok =a _!    4__( é úif ok is not NotImplementedŒ öassert isinstance(ok, boolM  ’Q 
;   }ñO.add�   ) Oelse? 
9H <9õif it's a direct˜Aª §ugetattr¬ ú, '__mro__', ())ª å � >TruØŸ ®ò of a registered F¦(recursive‚zfor rclc: *ry­  h sc á  ? Ø  ˜Ü  - à !‹  Ø sØ Ú[es__(° Û  B +  ® Û 0°No dice; upô‡j ÇFÿñ(# Copyright (c) 2004 Python Software Foundation.
# All 1 ñs reserved.

# Written by Eric Price <ep ðat tjhsst.edu>
#"óand Facundo Batista <f  1 ÷aniquetil.com.ar8 òRaymond Hettinger <p· `at rcn2 / pAahz <a ‹at pobox"  Tim PetersÍ ðThis module should be keptÀ‘sync withclatest¤sWñthe
# IBM specific>õ as it evolves.  Those9 @willf �treated
#0 ò bug fixes (deviH Afrom{  _  gòa compatibility, usa €
# bug) la ðbackported.  At tí @poin e´  U !stD @zingŒ !nds ‹ s ðbecoming fewer, small	  n ‘less sign ‘nt.

"""
Zðis an implementatioó.n of decimal floating point arithmetic based on
the General D7 A( óSpecification:

    http://speleotrove.com/u   i ú.html

and IEEE standard 854-1987O ðen.wikipedia.org/ /: _1 $

¢ Ù øNhas finite precision with arbitrarily large bounds.

The purpose of this module is to support7 usNðfamiliar
"schoolhouse" rules ð Ãto avoid som] ñe tricky representSP
issu6 ’ssociated¸ kbinaryÁ1.  µ `ackage¦  es ð ally
useful for³ancial appl½ s  òor contexts where users have
expec˜ Ps tha2Ÿe at odds˜   (v  inâce,
in À ú, 1.00 % 0.1 gives 0.09  5 I `ead
of ;— ('> F') % À0.1') return³ "e Ä $ed+Ð('0.00')).

Hð 2are—Pexamp²2of Ø Æ 
µ:

>>> fromU!im* 3setP¢(ExtendedC`)  ±7(0)‘ ' 7'1'    t : x'-.0123# $-0 ) h123456J  m b23.45e. (78X  1.2 "E+ -80; v.33') +€H1.27B >2.66 J2.347 ‡3.87') -I 08.4ú ö 42.2K Udig =, 1>`print( / t3))
0.3 ‚g¢ ).Q = 18 C K 31 §.sqrt())
1 ¼ &3) ÿ.732050807568877291 ò ** 123)
4.85192780976896427E+5¯ 9inf ù 0qinf)
Inyo :neg= ?-1)> , 9)
-B + 1 + c 1NaN^ 	 * > ¬0œ 	 ‘traps[DivÃpByZero]±i G ùTraceback (most recent call last):
  ... à.d q: x / 0f Cc = Ä(W"c.˜ ±InvalidOper½ š 4 �c.flags[( ")
' ”c.divide(+50),½'0)¼3NaN~} 	~Àrint(c.flagsþ[InvalidOperation])
1
>>> c.flags! A = 0" oprint(( *)
' ödivide(Decimal(0),  ù))
Traceback (most recent call last):
  ... dN .Ç _: 0 /¨ ñ oc.trapì ?NaNC› ñ
"""

__all__ = [
    # Two major classes 'Vá', 'Context',
 ñ# Named tuple representù! < T! 6 G ` Sfault  g WBasic …Extended  PExcepgK   M pClamped Ö  òDivisionByZero',¸ pInexact! 0Rou|   �Subnormal €Overflow 4Und @ UFloatú š �al condi½ ì that trigger ¦ R ¨  Impossibley , £0verÒ `Syntax& <  § 0finBðConstants for use in setting up¥  ò` ROUND_DOWNW  {HALF_UP 7EVE$ tCEILING^9 VFLOOR7 C 
g  05! · BFunc; · �manipulaµ c¤² 3set  j g Ulocal [ CLimicthe C O!Òcompatibility™ÐMAX_PREC',  ' @EMAXm qMIN_EMI FTINYY  : V ò ile time choice€enables ‰ qthread µ —0 (duòcated, now always true)  ÏHAVE_THREADS~ 'šcoroutine� c ÐCONTEXTVAR'
]_Qxnamea#__ g€sys.moduÙ òlookup (--without-ç 5s)
5 3= '—'¨ó For pickling
__ j S'1.70' uHighestÀ!ofH‘spec thiswPlies | Ê  `  ó# See http://speleotrove.com/™ É/
__libmpdec� ‘"2.4.2" #m  :4le * š ð

import math as _	  qnumbers   €sys

tryÊÃ  from colleV  |d£ \  ó Þ¢1 = ª. (¾  'sign dig ðexponent')
except ImpoðrtError:
    DecimalTuple = lambda *args:  ö

# Rounding
ROUND_DOWN = ' ' vHALF_UP  	  7EVE? "   $ vCEILINGD    VFLOOR   { $UP c 
µ  $ (05<   'ú ò%Compatibility with the C version
HAVE_THREADS = True �CONTEXTVA¬  ò
if sys.maxsize == 2**63-1ŠÍMAX_PREC = 9 ¬ " OEMAX" `IN_EMI_-D m9
elsem A4250 d  [   
M qTINY =   ~ 0- (¬  Î 0-1)Hr„s

classuñException(Arithmetic) )¥ ”"""Base e(  ? !.
ª FUsed ñs derive from this.& VIf an' & s' wanother qbesidesA ‘ (such asI òUnderflow (Inexact,ñed, Subnormal) that indicatI   ‘t is onlyK ‘called ifLƒ ðs are present.  This isn't actually uñ 1forD óanything, thoughÂhandle  -- Cf ðwhen context._raise_e  “ Š 0and‹ Y   Àtrap_enabler. `not seŸ PFirstAumenÝ Àself, second, <theO … e  More> ás can be givenÐ Òse being afteð “    �pexplana=I in Ø 0(FoÓoample,… 2 A(Newx�, '(-x)!'Ê ý lf._sign) wouldI Dall 9 2().z(å 	A ".)²ö To define a newwp, it shg  	psufficiZpto have  à‡ äºEð1"""# Cdef “ ›™ Üb OTpass
šŒClamped(] 0 €"""Expon› ðof a 0 changed to fit b+sŽÆpoccurs d O0alsÇ f eS ñ result has beenÎ Palter3tn ordern  Áconstraints ” €specificöBcret‰#re^5cAmay ¡  ( P 
Ž Szero “ `be out+ 8õ ~ 
h B, or[ ‚a large (Ö bnumber_ç «AncodÚhQ0can~5be ` bed.  I t/°latter caseF 8C àis reduced to ó4fit and the corresponding
    number of zero digits are appended to< ñ	efficient ("fold-down").I ð"""

class InvalidOperation(DecimalExcep $):3 BAn i. $ o/ ñ was performed.
,  Various baÊ òings cause this:$ ðSomething creates a signal 1NaNJ ¡-INF + INF „0 * (+-)  ) / Qx % 00   1% x ñ
x._rescale( non-integer ) ãsqrt(-x) , x >C C0 ** x (8 7  – "An Tnd is3ö  The resultÆ æJPafter¾ se8 ña quiet positive NaN,¨ e›P when/ \iBÑ, in which ca~} !isJ Talso i  ` ‘ but withY �original™,™aÜ  !alB Ðdiagnostic inEf ·ódef handle(self, context, *argsa * 0if  r    ðans = _dec_from_triple() P[0]._6,8  âint, 'n', True£ G   óreturn ans._fix_nan(� ) % _„%üConversionSyntax(6Ä `"""TryÁ toæ @vert0ly “ed string(±This occurs] Ê %al3- <  $becš !teúa" C°it does not‹  €  snumericQ ÈsØ 7.  ¢¿is [0,qNaN]Ñ%L @DiviJmByZeroo ,  % VError] _ by 0Edh A-by-/4if   }ƒa finite4"byZ Õ`attempZ0(duµ! a@ %de7#or ð a, or aM 0pow­* WAnegaÎ`right-= 2nd)b  ¨ @dend^L  Å Å ô eG ¶ I`,inf],&!reÁ 9 ] ‘exclusiveZ  or   5 s {0nds¸å Û Ais 1  	3dd å fL 1-0,  3  x r«‘_SignedIn­ y[- ]¼¯Impossible™0CanF¬à g ‹µ adequatelyaš =JÝ c 
2vremaindÀon had too mñ:any digits (would be
    longer than precision).  The result is [0,qNaN].5 A"""
	 ñdef handle(self, context, *args):&  h ñreturn _NaN

class Divn ôUndefined(InvalidOperation, Zero( SErrorS 5"""7 § Cof dS .Ÿ ò
This occurs and signals ih $-oi & i< Á by zero was¿ ñattempted (during ai ³de-integer, õ , or remainder _  ), M 3the-  ndYAalsoo sRðInexact(DecimalExcepiVðHad to round, losð ainform“Za q whenevYe &an" i_Bnot 5 @(than¡, it needeŒ "be�  edF Ë@scar  Õ[�were non-¾)Œ0if s pverflowžuš Pcondiý "�J ø°n all cases¬•unchanged2e iR[± may be tes0°or trapped)V�determinepqa givenq *ö (or sequence of/ s)‘p .7 ˆM;C€Já) ª¢.  Unknowne€ing, for“Empleë J$anbf  » ²  cJ�@is c³ µ &Q1s aÝ‘t checkedN aon cre˜CeithtÌ� exceeds z capability\"th lyêpconcret´rpresent^  orIu*°or unsupporÌ -1ing” Ñwas specifiedÓ Pese a #tsv  åA onl5Ú <K  ² Rvalueþ erequir$us` a¨DR/ed5¢Number gotE + ×Ó necessarily < ú5)b( !edR3 PAsomef #8$diR@from-ƒ¿coefficientRU¾ ­R(Àration (or sðequence of operations) caused a loss ð!precision.
    """

class Subnormal(DecimalExcepH $):, ñExponent < Emin before rounding.
) ô
This occurs and signals sb ð whenever the result� €a conver  1 orM Î ( iB ô	(that is, its adjusted e¡ Áis less thanH  ° ,± 5anyµ V).  T‡ Àin all casess •unchangedÝ eÉ Û ¡ may be te… ò(or trapped) to determine if a give” &or­ 6 sÇQyieldÈD7ÇðOverflow(Inexact, Rž&edÆ³Numerical o- Ü ¹'  À  ²ooÙ ’ nk(from Ð  nõ Æñ  not an attempt5QivideM õ by zero), afterºp, wouldz@grea  ïUÐlargest valuetK  caµ± handled by- ‘implement7  (ä 9 UEmax)¬¡depends on@  b mode:#Fo© �-half-up*  `even ( f+ @down- ± 1 0up,|¨ Bed),z < ´ 	,[œa,inf],J QwhereŒ × /  !  w   in¤Tediatæ 6.  Å  • s L êH l±finite numbÛ3at p€represen£i4G @currN•a, withÚ � F #qceiling¤ Si ¦e same as h Î  Q ú i K   
  é P1, or	 ![0U© otherwise(Rfloorq M 
)‰ þ … š I 0‰ 1‰ I¾#,  MM �will also;@raisÞ 	 3def%`(self,™Qtext,As, *argsR 0 $if" .�÷ing in (ROUND_HALF_UP,  BEVEN( @  1 DDOWNB 'UP|  < ñreturn _SignedIn‹y]ó  % !if¾ R == 0Ó    ¿ #==¯ zCEILING2  6 u ) @dec_€_triple({�, '9'*con_.
* ð Emax-context.prsec+1)
  Õif sign == 1:   ðif context.rounding& ºROUND_FLOOR0  4 ðreturn _SignedInfinity[b ]] ) ðdec_from_triple(* d, '9'*| Yprec,<  i 	 + TEmax-  8  é ð

class Underflow(Inexact, R× âed, Subnormal)Ó ä"""Numerical u9 Ñ with result ‘ed to 0.
  ñ This occurs andX7alsA Dif aA Bis i‰ - 1theE ô	adjusted exponent of the7 ñwould be smaller (more negative) thanJ  5 % €st value Pt can@ ¡handled by_ ðimplementation (> 5 L ñEmin).  That is,3 
yis bothÎ sQÁ ‡after an@will“ %a 8 t numbergA, if‰ Ònecessary, soÐ 6its-°is not less qn Etinyº cis mayHM Bin 0Õ î  {m¶intermediat¹  nd· ˜] þîIn all cases, d h ó @alsoø qraised.” 4"""²‘FloatOper“Ð(DecimalExcep¤¶, TypeError·ÀEnable strichðsemantics for mixÆfY ¤U s¨Il 3al Mÿtrapped (default),I 1 isÈ `permitÉ!in.j  ()V�structor, c‚create_då  ()I U±omparison o`ors. Bvpconvers´ bc* as are êZ2AnyžPrenceêaÈ #edT  C  is silentl)Bcord"qsetting‘ 
— ß wð flags.  Explicitá ¡ slD .û�P() or-  "'  doãG 1set\ u Â’OtherwiseÃÊÆù), only equality 2nx¹ a ^Op. All oj B!s Í %�ÛQ# LisÕppublic ˜ Œ Æ 2s
_³  s = [Clamp¡@DiviägByZero_"OvÕÍ¸ õ 3 UvalidPö,¯ €]

# Map� dilas (perlPspec)÷¨ R
_con& •_map = {C”›Syntax:In| 	¥ ­ ã ¯Impossible7  ê _fined6 À            ó    InvalidContext: ð Operation}

# V" ô rounding modes
_ _ ò = (ROUND_DOWN,  yHALF_UP 5EVE  �CEILING,
‹  B TFLOOR@ J j €05UP)

#  Î P FuncÆ  s    ù ‚The getcˆ() and s fb ó manage access to a thread-local
# current N ….

impor svars

_' _' d_var =5  $ .Þ ÄVar('decimal. y')

defµ :]à"""Returns thi  � $'sZ !.
' (If ô does not yet have a1 2, rP 8 Ta new ' f k  êN0 ós are copies of Defaultè .a 1""" 2tryÑ  D ‚  4a.get()3 öexcept LookupErrorB f$ =44  ^ W Cset(5 ^  * ˆ  ƒ' )w h"""Setg† 9. .ò %ifXJin (s, Basic+”, ExtendeÐs  ¤ W LW.copyï ! Ã.clear_flags 	D
del¦  ¤ q   b# Don'ãòaminate the namespace,#€ “(ctx=None¼ ¹{mQr for  py7 Y „supplied� ÖKUses) g( f if no ±s specifiedD 
æ\ ‡ Qcreatb É  •N A òin a with statement ' ³Ssin(xô    1 U †) as ctx= )   Ñctx.prec += 2u    `# Rest)¡sin calculä¯ algorithm5 u< Y ‘ision 2 gð Úr than normal: *` +s  #Y°vert resultâ3  S ¥© 
ëJ   ó ) Nc  Ä  P fromÁ
ï k ’General D“! ASbetic SLco
< +þ)8>>>…
• # hprint(¿ð.prec)
    28
  ð  >>> with localcontext():
    ... ¥ ctx = get   ©.prec += 2 ‘print(ctx  )  !30 � ’ExtendedC‘ � W � `  9_ / 
!28( 1""" !ifî �is None: û  ƒreturn _  pManagerê P)


# ð  Decimal class    â

# Do not subK Y òfrom numbers.Real and d. ôregister it as such
# (because� Qs are^ Òinteroperableñfloats).  See th) ues in
#x ùpy for more detail.

¨ s(objectÄ@"""FX “ing point  E d2°arithmetic.˜™ð
__slots__ = ('_exp','_int òsign', '_is_special'nÁ# Generally,Ã �value of Jñinstance is given byv  #  (-1)**_c 0 * r p * 10**„ % St  ] T 0 —ified by ˜ “ == True
; °We're immutzP, so ¡q__new__œ�__init__3 Cdef  R(cls,u c="0",  =¼p ÁÄ"""Create a d|ù .�  -  ‘€('3.14')  P# str¿Qinput”   4  P ð(0, (3, 1, 4), -2))  # tuple (3�, digit_ ¢, exponentÍg ;314´  g /in®  á ­ Ñ  N O •# anotherICD 8 /'3[ 0'  ZV  \\n_`# leadZ ÈPtrail âwhitespace oka˜
	3 % P# Not½!atòðcoefficient, self.Ò,ù@actu(¥ stored asÓ 4# aõ!raþ @thanXa½"of¹÷s.  This speeds upE  C"àPs to sAger"·"   # "Ïxversion‹ Athat·öused in almost every < Îwtion on†  ª Qis an� CrnalÅ:."as‰P funcJ G ¤hJ ­ Ðstructor stilJ "alJÎGs of@ å y Ž2 = ..ã)�0# FõŽO  RE™�sist on r§sSðwe can too.
        if÷ isinstance(value, str):
  ²m = _parser% ù.strip().replace("_", ""))8 Êif m is NoneR  ] ¯if context$  ( % S= get (i  ' dreturnS ù._raise_error(ConversionSyntax,§  >  ñ"Invalid literal for Decimal: %r" % 0))
L  ó þ.group('sign') == "-" `self._% I = 1F ?els1 	1 01 ´intpart = m~ Jint'&4if ( ois not™ù # finite numberi  (Lfracn   �') or ''1 Pexp =| (ž 3exp/ 0¦  b ê  inÑ pstr(int  u +j  	 l7 n   e- len(1 ˜ g ùs_special = False) ŒHdiagn  É  0if   áp » Y# NaNx     ¥ 	T  lb0')).lŽ'J B ”;al'á &  p  ?N= 'NÍ (     	B nB > A# in|y.'0Y } F$ � iô:TruóK + Þ�# From anÉ'eg XF;inte"if2_ >= 0
Þ1 Ÿ @ Ä
K  Z2absÓO( '(rother d4Ð-Y1„  Æ " =;U._expK ïE‘%   õ I ?int$ ñ +  	2 þ &Ârnal workingÂ B �_WorkRep		å   L 	 ä =ÂÕ.†' À._exp = int(Çvalue.exp)
  ù	self._is_special = False% preturn , 
 ñ# tuple/list conversion (possibly from as_( &()y áif isinstance(š 0, (I ,, 5)):g  ¬ bif len) j) != 3   $ praise Væ âError('Invalid§ à size in creat¨ Éof Decimal 'n  N  'Í  £ 2 orS y.  The  K öshould have exactly three elements.'- ‹ ã# process signy Cù test rejects floatsÓ †if not (3 Má[0], int) and ‰0[0]'L(0,1‡ Š g"gš RfirstO  L 2the2) "–  P  "Pbe anœ ÿeger; either 0 for aI ð positive number¸1? Gnega *."o é ._Ñ " =Ç 9[0]» #if ž2] == 'F'’³# infinity:- Ù1] is ignoredP  v Žint = '0”  5exp• 2• E Ð:TruÏOelse¯ d`idate ½`digitsË#1x # >= [  ³  B �  ¿ 
5 ¡Q0 <=   	 9C  G ú# skip leading zero %  "ifT s"^ O!= 0^  9 ( ‘s.append( 
D %   m    O SDseco� 4 „_ mustý \   ô "be composed ofPÌ V _rangeQ 0«lough 97 q Ëin ('n', 'N'Ò +   d# NaN:€Cformq�agnostic& 6 
*ó '.join(map(str,L n 2  : D - ) 	H ( *el³!2WD!# ™ÿ g­ –¿coefficient % ÌÐ[0]))
         øself._exp = value[2]
!  ) ýis_special = False- ]else:  G praise Vf òError("The third| P in t ¿uple must "J  N 	 ñ
"be an integer, or one ofP E ð strings 'F', 'n YN'.")„ preturn 
 áif isinstance(IŠ, float)ÿif context is Non, ! S= get (…  !._T!_eOFp ¥Operation,� *"à òct semantics for mixing­ ÿs and Decimals are� ‹"enabledõ $ => a.from_
Á  ?xy 	´ $ Fsign$   %  Fint % ?int$ ¼+  	2 ålS Type¿`CannotÑ¤vert %r to 2" %Õ)&Á@classmethodk Gdef $gcls, f.`"""ConY 2s aŸ _ 2a dŸP numbì‚exactly.h  í0NotX$at� �@0.1)| º  mtsame as+ �('0.1').¤  M ”Since 0.15 p   represent »bbinary«  S`point,‚M %�is storedx  „ {nearestS - …which isD W0x1.9 pap-4.  L› ´ equivalentJ $in<L  isÚ 0 ÷55511151231257827021181583404541015625q4>>>@kk V`p 0q 'Cq of'nan')- z ?NaND ?infD �InfinityI -Ž J -K ?0.0Ð  3-0'^ ©&""è
� f, ):&  €# handle  8f inputj ,  q° = 0 if f >
  â% 1Ù & k# 	 ÷coeff = str(abs(f‘-el  ,þ U �if _math.[@f(f)× Hnan(/ 1   º@cls(¡x À          ifû _math.copysign(1.0, f) == 1.0:
   % I = 0 Oelse+ 1+ ùn, d = abs(f).as_integer_ratio()- úk = d.bit_length() - P öcoeff = str(n*5**kC — õ#raise TypeError("argument must be int or float.")
� ðresult = _dec_from_triple(!, ‰ 7, -€ úif cls is Decimal$rreturn Y h µ  ( Bcls(, – ödef _isnan(self)^ A"""R5 ðs whether the number� önot actually one.è c0 if a, – 1 5NaN 2 s 5""" 0if “ ¬._is_speciü 0expµ…elf._exp9  n1if  V= 'n'Õ     7
'el6 N6 2j G 0ú L�infinityQ9 eN  § HN eQrVE+INF– -i- X!Fë y •<-=  ¡check_nans0, oWP=NoneüQntext ‡4É h P are n , Ù %al1(  CNaN Â 5nan*  Õ  £ñ Done before ope‚5ns.2  z  Ð Ï5nanº}q"if c 
�2C UFalse_ ÷/   Q ð Å X "orƒ  
‚  ‘o«¢  P c! S= get (p  $ t J== 2i  % pC !._|!_ex„InvalidOu0, 'Þ%', B  	 �y * }ú  Â– ^¥—  ¬ – ' $ P._fixd(5wRe ,     ' éÚ‚compare_ÆÀnans(self, oóther, context):
  õ-"""Version of _check_nans used for the signaling comparisonsE  "e_& �, __le__ t g egt__.
9 SW à InvalidOperat‹ Pif ei³ ¡ self or o µis a (quietD &orž ‚) NaN.  X  ¯ úNaNs take precedence over F  ( ™ ÓReturn 0 if n‹ oŸ 1nd …  h È 5"""� $ifg * FNonen u„c = get &()L !ifõ Å._is_special 
V 6  5 Gnan(ã u   rÔ s ì._raise_error(‚,Ï  :  ' p involv{_sNaN'I  î){ Belifý.Û «ÁÜ   ó  Û q¶tµ?Ú §´A0¬Ðdef __bool__(Æs3"""B@TrueE !  ‚nonzero;Ôbwise r˜WFalseƒ ’  apÐnfinities are]ƒsidered M .2ˆW  y 7 L —nt != '0'Ñ 1cmpÍ ,¡ 
Ô Cüe0two€ ñ-NaN decimal instancesÂ½ CÖ Es -1<k ,n œ 2 == C 1ß å" > ð .  This routine_ °€internalÂ` only.E © u
` — a_inf =Ü  > i˜*y(ÖI +  , Ñ . ô   
|  Î0Ç   š H@ À            ·return -1
  Yelse:   , %1
 ö# check for zeros;  Decimal('0') == E-0'): ºif not selfi  Zother ƒ 0H   ® 
�-((-1)**Q m._sign†  
m ì <  ¦ ; û ÐIf different X õs, neg one is less§ 1if e F ! <ù  x �'if- ( <H ; Ÿ ¸ ²_adjusted =H  (› )  .*  � , =‘  
” ‚ Fpadd€ À_int + '0'*( r._exp -G  ™  ÞŒ _D  .E  F R 
E ¸ G ¶  
´  u ÿhG �� F -F c  ¾
: $elŒ ¦" >CŠÒ Q Qse: #$C o Ñ ¾ S b{ 	)'´# Note: Theð standard doesn't cover rich comparisonsRl #: ðs.  In particular, the specificationw0sil� on C ðsubject of what should happenk ' a} ó involving a NaN.F pWe takeX q follow# rpproachþ#,  úÐ T PquietZ ƒ always IUFalseA '!=” s• A 6Tru@ o== or F  ª alÄ 1NaNÁ%al~  n‘validOper^Y, and¬  a  t À as above ifF 	 ¤ ú tr~d]¡  <, >, <=f >ý (þ #or³ 2ingì#” XÛ ? InÂ ± %ã ÐThis behaviorÛ  de| Ðed to conformpclosely ³possible toE t”Éò ed by IEEE 754.I¡def __eq__2,é,a ¢text=None)�  ‰$ ñ = _convert_for_“Àrison(self, óother, equality_op=True)
  1if $ õ is NotImplemented:$  + breturn,  ñif self._check_nans(N ¯, context)F UFalseF [ J "mpC q) == 0
& °def __lt__(& ,‡ e W=Nonej $ ø = _convert_for_comparisonJ 4Tans =i eÚ  [oif ans)(<(e(ÿQgQÿ>QgQÿ>Q\eY£B"""C"02 toÔB.  Rjòa decimal value:
 0`a or b±²a NaN ==> D, f('NaN'ÏPa < b4  	+ )-1* (==+ 	* 0) >( 
~ R 5"""ãŒ é“, raiseitš5 ## #P(NaN,ë 0) = " 1if nÀ._is_special^ C andU ' 	³Åq  3 ¯  Ç6ans« ž ™5._cã)* ßChash¹¥ s"""x.__ 0) <™  0(x)b› ð# In order to make suróe that the hash of a Decimal instance
  Û# agrees with5 ñ numerically equ? Çteger, floatE ñor Fraction, we followP £rules for P — ·es outlinedG !in3 �documentaP õ.  (See library docs, 'Built-in Types').G õif self._is_special:  ÷ !    Znan()  # Qraise[ ÑError('Cannot» ù
 a signaling NaN value.')e 'elg f ûeturn _PyHASH_NANC .se› W _…  ¾ X -Y 9INFY  $ /el]   r> = > } Šexp >= 0� Aexp_u“= pow(10,‹Eexp,è vMODULUS0Œ I Œ ‚10INV, -àU  ˆ ‚_ = int(0 uint) * \ %’ ç Qans =í#_ ó î  ª ! -[ - 0 -2+ : B= -1+ Aans
) Ádef as_tuple� uÑ"""Representsñnumber as a triple : .M  ¦STo shcðinternals exactly: †they are1"""Œ  ? µ T— .W,o „(map(intÆ A) Bexp)� Ü  † Pger_r·ä   Exä  Ó mfinite• ÿ§form n / dð R– > °pair (n, d)Ýw �s.  When °±ed on an inl yø  or³!, á¡s OverflowæP or VÌ  re>gtively‰ 4>>>º Ã('3.14').as_‡ þ Ü†(157, 50 	A o-123e5C  % 0 ?, 1H O0.00F 0> 
ä3Ì2?2("c3pconvertw0 to� C &"Î  • ^
Q  «
ª] Ièb ò 0if Ä 
f  !Ò w p# Find h ™ðlowest terms suc-bat absë2 ==´;p Æ# we'll deal` ·f lateršn¨E ›r#aÀ is an integWer.
  õn, d = n * 10**self._exp, 1( Uelse:  = ð# Find d2, d5 such that abs(C )S ú/ (2**d2 * 5**d5){ `d5 = -/ r 	a Pwhile\ ú> 0 and n % 5 == 0Š  Ž yn //= 5A   ‰d5 -= 1
 û,# (n & -n).bit_length() - 1 counts trailing zeros in binaryH ðrepresentation of n (provide± `is nonD ù 2ù Pshift  Omin(ª Y, d2)� 2if ; 3>>= 	4 $2$; 
) ·f << d2  k 'Jsigno nÙ ne preturn d? `def __9"__)@ D"""RRðs the number as an instancehµDecimal."""l ð# Invariant:  eval(h @(d))7d) • "E Ò('%s')" % str” ¬ 3str« û, eng=False, context=None)Ä ô 0strB ƒ 
$Ù òin scientific noI.  �ÀCaptures allø  < binforms!in(~underlyp p * ¸Ò = ['', '-'][„  ]% æ¦is_specialè  � ! 0expb:'F'!  % m [ Õ + 'Infinity'g  % -elL nL rNaN' + ¼ ;intS Sse: # ¢ Nx  | ¡ sV W #��of digits“ € to left d 8 po˜   9 =™ Q+ lenyf._int)ÿ°# dotplace L~   d  ‚ 7the¹ 	�  Ð + ƒmantissa/ p output I(Ð7is,G 0aft�Pdjust$  F `expone·  N  	Ì#<=À ™ ý J> -6*T# no J † require² V 
=fK œ B0not£[ _usuali2: 1É1 onU 

·~ ë 1int0·#‘ Aineeâ,Y½ a (+€+ 1) % 3ž0 �?engg  À
           ó dotplace = (leftdigits - 1) % 3 + 1

  &if0 U<= 0:  ! Ùintpart = '0' Dfrac @.' +! 4*(-| Õ) + self._int9 (elo u>= len(' )| " d+'0'*(d -> )g  º   º Oelsef $[:b ]S ó ˜ [1 :2 7if }%==g
€ 0exp^£ 
ûf context is NonÃ  ï ! S= get (j ³['e', 'E'][' ø.capitals] + "%+d" %9Ô6äreturn sign + &%+ vR+ exp0 ñdef to_eng_stringò,Ô =Ñ ûò"""Convert to a 4 ð , using engineeG ð  notation if anq Aonen%rneeded.�   E8 9has9 Pwhichdõa multiple of 3.  ThisÀcan leave up¥ #3 cato theø 9   ‚decimal ’uand mayJ qrequire6 AaddiÏ ðof either one or two trailezeros.B 5""" –x m¶__(eng=Truep÷) ž__neg__˜RöÑs a copy withº iswitchupRounds, 0it noreason¾ $if2šs_special+Sans =$ ³check_nans(Ð = 
õsH  +2ans  iha  d if“¡  é0  .r »ê!= ROUND_FLOOR• B# -D+P('0')† ,[  ¶-0'), excep^ Ä H# ine  } Fmodey , P ÐG_abs3+0 snegate(I R VT._fix›" k?posk¡, unless iÞga sNaNÞiŒÑnumber (if moZ�an precis+©$?�¨À      if not÷ self and context.rounding != ROUND_FLOOR:
  ø# + (-0) = 0, except in1  I Ymode.? Qans ={ µ.copy_abs()" Jelseo 0 €Decimal(³ %)
/ óreturn ans._fix(É " Pdef _a !__9 ,˜ d=True,õ f=None)t A"""RV òs the absolute value of» ƒ !If( ñkeyword argument 'ò' is false, do not„ e.  TheÈ ¢expression_ ¶ D  =F@ )J pequival` %to>  Mp5"""% &if~ î  ØEF â iô º_is_specialA £@ ´_check_nans�=• m  izsH   � ?ans�  Jsign3 { o_neg__w \¹ O_pos> Aš ^%dd^_otherY r 1 + 0 .è p-INF +  1(orWðreverse) cause InvalidOperat.oerrorsò_ Á = _convert_ ( r"ifˆ  _€NotImpleÁ*edjÿ > ³ $ifH@ n¾üc = get (Ÿ ï\ 2 or’ .qœ €ã i /anp0  ¦ „ —infinity(& #   �# If both¶p, same ¦2 => !as  , opposite ¶µ I   B $!=  ¨á “  J ­q�._raise_w (D6, 'y'6L 
‚   B™ • I Í ¡)  # Can't'D be oV herej‘exp = minËd._exp,!6exp¸ Ànegativezero¤Á¬é=é÷t
ƒ
ú"Pnswerÿ!0,´; `shouldÐ � ,%‹this cas$ ´ 1÷ · • ž  B:
Ž t      !À        if nëegativezero:
  ‰sign = 1 ðans = _dec_from_triple(, ¿, '0', exp)3  úans._fix(context$ ¥return ans; ºif not selfœ ðexp = max(exp, other._ #- ] z.prec-1d » / rrescaleC 6 �rounding8 À %p Á 
 â À . ¿ G€0op1ê€WorkRep(x 8op2 å  31, # Ânormalize(op ,¦%)
r hresultX S pif op1.h0 !=]  
Yõ# Equal and opposite^  ÞF Rint =E :intD  ' *ån/í? 1 ( õ   ¥ <é ¤ N È  o
© J Ð# OK, now abs€3) > 2[ * t _N== 1�u B ž Š 2' "op   ½	�Oelsej 02  j �# So we kÙ @the ¶ ,õe1 > 0.4 /elÚ Ö 	Ò V(0, 0<Â 
R ¾ Q# Now„ ­  « 1 Ÿ0Y ¼ 
 +!ò T9 -9 : (  I TU1.exp ‚Decimal(+  òêR €__radd__ì_
 ±def __sub__qÞ2f=None)B"""R: Ÿ" -1"""f  -š g �convert_ ( À  z Gö is NotImplementedl  N È > ²   !if¦ò ._is_special orŒ  
L 4 ¸ Â._check_nansš ñ ›« q :ansO   Ÿ  F#œ ð  is computed asó self + other.copy_negate()
  areturn* Ÿ.__add__(0  £, context= !)
C Ðdef __rsub__(o ,n 0 aNone):-  s B"""Rs f ! -{ 5""""  ±= _convert_ • ¸ "ifi ö is NotImplementedl  p à D ³  8.__¿ à è ?mulç  " *­ .‚ õ&(+-) INF * 0 (or its reverse) raise InvalidOperation.$0]$if p*nef5c = get (#p¡sultsign =ñ!._ ^ #if% Ôis_special or,  
… 5ans^ ¢check_nans9�B ˜ jif ansG   66ans•   ™ —infinity(Ý #   bif not° ]  " a +!._ñ|_error(÷0, '.-'Â M ƒ_SignedI™ 4[reu]Æ O._isÇ  ÂÆ 2C0 * Ê Æ ,Û 5expñ  êF_expò 3# SCõcase for multiplying by zero[¼ õ  tÈlò_dec_from_triple(˜  Ûr, '0',  :exp¶P# Fix~ 1in – Àthe exponentcÕout of boundsœ  íz “ans._fix(B
_ ^	¿Ppowerv %10r ñšnt == '1'� 	
l/ntF Õ    ?._iŸ ' êA ž 5=áop1 = _WorkRep¨8op2 %2X
€str(op1.ü ð* op2.int), resultexp3)
  õ	ans = ans._fix(context)
! `return"  Ñ__rmul__ = __
 + ódef __truediv__(self, other, V q=None):H   B"""R^  . " // E."""# A  l �convert_ ( Å "if; ö is NotImplementedm  q Ì 
# À   $ifª I *ne? Ç c = get (+psign = Í !._ ^˜  	i % Ôis_special or,  
 «9 ¢check_nansdÒ :ansG   	6ans•   #if¾ öisinfinity() andœ  W ó._raise_error(InvalidOperation, '(+-)INF/ 'K� u ƒ_SignedI· [€]Þ 9(._ß R À ôClamped, 'Division by 'x ¿ dð_dec_from_triple(™ U, '0'´‡.Etiny() 3# Sõcases for zeroesbif not™
Ä   *
 — ä Ú qUndefinî [0 / 0ß Û D 
¡ByZero, 'xA  , ø â ¥ 5expE  -ã U._expý  Ê •coeff = 0 ;els³À# OK, so neiŒ / P, INFp5NaN;  Q ²shift = lenV�._int) -  O +(™.prec + 1H  ¶   Â 1 - g 	1 0op1äqWorkRep<
P8op2! Æ
"  º¿ N>= 0ö,ñ, remainder = divmod(op1.int * 10**œ P, op2 
c ^ 5Z N c -d 
[ &if› ½ €# result– óùexact; adjust to ensure correct roundingd ¬ á 5_% 5 =) ' Ó < +=×^ - � ™ Àget as closeŸ Ñideal exponen Žpossible¢  +  ê � Pwhile^ 1 < j ?  ´È ð% 10 == 0:
           Öcoeff //= 10
 
 •exp += 1
 ñans = _dec_from_triple(sign, str(T u), exp)6 ò	return ans._fix(context)X ô
def _divide(self, other, ' :I B"""RL * 4 //,  9 " % T), to> `.prec  bision.t  ä ðAssumes that neiu  H 2norJ ¢ is a NaN,&  eis not” Âinfinite and& ¿  ; …nonzero., 5"""  4! =q !._ ^u  ( $if #isl 6y() Ë `ideal_¯Q 5expB Oelse0 1minM.@ | Ÿ ` texpdiff¯ Ãadjusted() -�  w  if(á  Q(._Å   [ Z<= -2¦ 7(o…'0', 0),q  ª   ª¥._rescale( U¦.rounding)§ if·é )<=@
˜ 0op1qWorkRep=E  � 8op2! 
"  Õ0p1.²`>= op2 
f I p1.int *£C**(o4 -3 
V éE 2E n  »O 
E Ñq, r = divmodr Aint,q :int, ³if q < 10**­oÉ Ë :/q)Î Ç 2elf,{Er), é)¾ð# Here the quotientž�too large.õbe representableUòÞ ñ_raise_error(DivT¯ImpossibleŒ ¾  '… ‚ `in //,Árz'jró@ans,DÂ6±_rtruediv__‡¿æW=None,�"""Swaps•/˜·b Es __P .¬* ±= _convert_ ( ¨  ÕEúis NotImplementedn 9h .ˆ Ø �= Þ«t L- Tp $ifƒ ­ É
F
c = get ( n¹À_check_nans(óother, context)
  uif ans:   Àreturn (ans, %)
 Ñsign = self._ !^ [  ( #if$ Êisinfinity()f $if: $  Ž Tans =¹ ö#._raise_error(InvalidOperation, 'divmod(INF, INF)'ë  M   ß Þ ´   Jelse§   2 “(_SignedIÒ [)],A  /  m´ —INF % x')ibif not"
‘   ƒ
  w -öDivisionUndefined.O0, 0*;û ‚ ðByZero, 'x // 0', I)I/Yx % 0Gõquotient, remainder¿qdivide(¿ 1  c._fix(Þ [!n  ;rdef __r�0__(½,Ýz W=None$�"""SwapsI/¦ R and l Ds __O E."""…) ±= _convert_ æ ± }ú is NotImplementedTm ª c  .‡ Ö = Ô?modþ p  .+ %… ô T… $if„4n(ï c = get (ý š Ë Â._check_nans˜	¡˜2ansV W i¯” Žû #eltK
!€ 
  ™ v »t  C �
Ï bä03Í
5[1]� 4  ' z r L ýÀrt_other(othSer)
  õif other is NotImplemented:$  + breturn,   ó.__mod__(self, context= !)
5 ódef remainder_near/ „ 6 VNone)� 1"""?  ‰ R?  ? õ est to 0-  abs(\ - B) <=² %/2@ L $if¨ ÿ &net  l ½ c = get (Ë    ¶ Á = _convert_ ( ç, raiseit=True5 `ans = &Ä._check_nans5 f 	¡:ans˜ x2ansW Œ #S õ == +/-infinity -> InvalidOperation
!if3 D._is0 (u U i • !._Ó |_error(X ,Y  :  	'§~ W, x)'*#½ Ô 0Ê !eiªy õ or DivisionUndefined� bif notJ 
F 
  ¸ ö C Z ú @x, 0ó    ;els‡  ” 	ý ‹ [ • 0• Cˆ[ÈÑ2 V\	qDecimalõ — ò “ans._fix(…	  F1 = � ö, with ideal exponent¢   _ a = min… . ,0 – K u 
5Ë ó_dec_from_tripleO ¢sign, '0',Œ  ` Œ Y ï ð
catch most cases of large¸small quotié sexpdiff¢Ó.adjusted() -å  f28 $>=$š.prec + 1ý #+  # Q+1 =>� */€) > 10**  f ÷ Ý
bØ¦Impossible3i¢ _<= -2”  � Y< 0.1‹ Æ ´ ¡._rescale(>²¡–.rounding‘ Í ³
n  both argumsÄÐhave the sameT%, …n divide¯ 0op1wqWorkRepiŠ 8op2 €À
        if àop1.exp >= op2 7:
     Àint *= 10**(  0 -/ )/ Lelse= *2.= b  = w = Ñq, r = divmodf Aint,e 6int( ð# remainder is r*– òideal_exponent; oth 0+/-Ö „ ¨ #Ê 
4 ÷.   Apply correction to ensure that@ Eabs(‡ P) <=  v 5)/2) ôif 2*r + (q&1) >Î 
%2r -|&ind  ‚xq += 1
O q¨ ò Ëcontext.precO deturn ! ö_raise_error(DivisionImpossible)_  Zðsult has same sign  ±elf unless v…negative› * €= self._  Šif r < 0¥  # P = 1-	 ,  õ  &-r– ðans = _dec_from_triple(8 ª, str(r), Ì-r“ans._fix(õ ðdef __floordiv__(¿ ,=,Af=None)¾ 0"""' 2 //) 5"""À  ® �convert_ ( • "if:  ¿æNotImplementedf 
½ > $ifš @ nsã c = get (ñ  V P Ã Â._check_nans¤ õ 	­ ?ans™ 9ans— T ·isinfinity(6 z ø /._$  ( µ¼ .ÁÀInvalidOpera£`, 'INF�FINF'·  H �  ^ ƒ_SignedI¬ [½  V" ^ŸÈ]ã 2not 
!ifú
 m Ë Œ ByZero, 'xÇ 50',O B  ¸ ž 
ÒUndefined, '0¡ MM… ldivideJ#[0CnroQSwapsa/R and z sÀ.ŒT”„ .I Y= 8Sfloats(@"""F ¡ representç	Ú n G?nanf �Ois_s   ¼ Ðraise ValueEr÷ror("Cannot convert signaling NaN to float")
  ðs = "-nan" if self._9 p else " 0   :  E  > @str(8 X breturno A(s)
3 ²def __int__/ J B"""C´ s‚  ¬ ð an int, truncatÆ ñif necessary."""W  † ¹ ¦is_special] ! Znan()  " ßraise ValueErMC{integerE'elƒ �infinityg �Overflowj @  o  r`(-1)**t¬	Šexp >= 0é ˜Qs*int„.�D)*10N 5expM î@ "[:Š ³exp] or '0'ó!__¾D__ =û‘@propertym  Areal“ œo ?elf7 Oimag7 “Decimal(0�  f Ÿconjugate4  É k  . ž__complex²›   (YT n P_fix_p W ,—Gtextá õ"""Decapitate the payload of a¶!it 0con@ ù/ =7Î¿  Óð# maximum lengthU 1 Àis precisionø�clamp=0,�=   &-1" %1." Cmax_O d_len =á .: % - \ 7  if� (: 0) >¦ I 
³( $ =E[len> -… ¡:].lstrip(… É  ² _dec_from_' l	F,c ,N�exp, TrueÚ\ ÙñíPRoundMVit isÍ êAkeepx q within  ¥.ØF ±s and fixesðexponent.  Does Ô—on a sNaNC –Argumentsm Ë 3 - Ú • instance¸~ØV used —- ‘%6# dm â É .{· Â . Ú  #sis +/-IÅ#; 9Ÿunalteredx : V  ò@zero¯$n °ð	 should be between Etinyßj `# Emax9Lð==0, and between Etióny and Etop if clamp==1.
  ñEtiny = context. '()  )op 'op Åif not self:3  Z µexp_max = [Z Amax,Š ] � ]: `new_ext €min(max(^ .  > ciny), _ §  t  � = !!=” 6 
™  ) ’ à_raise_error(C*edS  . óreturn _dec_from_triple— ³sign, '0', º 
B Nelse‚ T qDecimalK %)
#à ðin is the smallest allowable" �onent of# xresult,D …qual to D´adjusted()-dprec+1Y> `�in = lenŸ †._int) +X% -5 F <  if� a_min >ï
ÿ »# overflow:( B iff_ ©  C 5max]  ‘7ans’	ÅO[ ò , 'above Emax',V _¬
ž	E Inexact* \Round4Ü6ansÒ Ãõ _is_subnormal =ý !< tã i	/ 
Cž: ; 0# r’  ê r p has to•ny digits, g #$ <Ž 
i 3 � Z  ¤#ifp J < 0U   ž =T#1'éJin-1Ž D � 0z ´ing_method 
Upick_ …functionŠ 
�`changeE   W ,ä 
œ Ucoeffw Rint[:« @] or*	¯  •e >*N qtr(int( /)+ !if­! ) >�‚ B+ Kzeff[:-1ý  #   eÌvin += 1Ó  ò # check whether‰ ‚¡ing pushed 3exp­u±rVg 5 m ÷8•a è
2–³ ¡ !# Pò Àappropriate w€als, tak@care˜yrespect#>  Pñedence described in  4 Pifica¿	< KÀed and self_û is_subnormal:
  ùcontext._raise_error(Underflow)0 �if self_R  S‚ R changedš zInexactF Ä zRounded* ®if not ansp !# À Clamped on B Y to 0 Gx ? 
x `returnx 
F N` JK ð# fold down if cÂ ‘ == 1 and´õ has too few digits>  2 :  Ê._exp > Etop5Ÿ ÿ 6�padded =� Ð._int + '0'*( g -g <ó_dec_from_triple6 Qsign,S _a ,C ß a# here# ð was representableÙÃbegin with; ©#un—F  qDecimal} )Ì }ð r each of the r{òing functions below?2#  � óis a finite, nonzero a x  * Pprec * ðn integer satisfya Q0 <= # Q< len— [C#G � � ä ð	s either -1, 0, or 1, asK3low! ƒ ò1 indicates that¾ ƒshould bï Àed up (away ¦ Î † O   0D @trunb !d,³g 0allOÄ  q¹´ 3 A areo Ps (so3 ` value7É‹ -Ï  eE …h ïQdef _â_ps,„)à ©  """Also kn“ u µ-towards-0,¾ A."""â  7 €if _all_<sZ Í_  , ‘–Felse‚ # --1º !up^ Y 1"""8&s É0£ w -´ †#_half_n 5=+0)o @int[h Ï] in '56789'ó 1S/elUVì 
\! 5©á _Ø_D ›ù-ä úÀreturn self.ø_round_half_up(prec)

    def  ±even(self, & :&  * @"""RF ` 5 to ( `, rest 0nea E."""0 ‘if _exactw T S._intY e and \.  b   œ � == 0 or ‰ 5 [� ö -1] in '02468')›  9 •return -1S Oelse$ V qceiling½ ¸ R ûs up (not away from 0 if negative.)� FsignN Ä    Adown)Ø -9 : é_floorÔ  y Ö ztowardsÔ Ó  ÿ  × fO05upÖ  Õ Áunless digitå@-1 iß Lor 5Ã x«Ý 5int‹ ó �/5'ÇWR_pick±ñing_function = dict(ë KÄROUND_DOWN =á þ ," &UP  ,up XHALF_# B( 
m * r T 7EVE™ , Rž vCEILING£ ‘€ VFLOOR& á$ (05É  -" 	Y#__Ggn=Noneió™ ùCthe ý� integer,¹¡to a givenbbision.r žðIf only one argument„¡supplied, þõ a finite Decimal�instance‰ 	R.  If! Sis inK %orF ñ
a NaN then a Python excepSšis raisedI G D �nd lies ì0ly Í ´between twosl iì A ê $edNFQ withfR last®B2>>>$(¶('123.456')+5123h 2  ˆ-456.7893 O-4574 
93.00 b 
82.5- 2Z 	3, 4, 	8InfX ðTraceback (most recent call lastE):
  5... õOverflowError: cannot round an infinity0 2>>> õ(Decimal('NaN'))" ÿTraceback (most recent call last‹ _Valueˆ U NaN
a �If a seco£ @rgum_ ðn is supplied, self É ued to nA dº ò places using theÙ   �mode for ucurrent? †context.’ 2For-‚teger n,J († P, -n)‹ ð exactly equivalµ %toU  + –.quantize\g1En'))k € Æ123.456'), 0‡ŸF123' @ 2) @ ?.46C -D ?E+2B #-Ij Ç /37ˆ  g0È  AsNaNí  ·5"""P 1if C þHNone0”  # two-am‘form: use ÑÁî\  y ` úot isinstance(n, in ) ²  raise Typ;('Sì"to`  should beJ Wegrale M ñexp = _dec_from_triple(0, '1'š	¥ areturn=ŒFexp)4Z# one
C "if; º_is_specialG! yis_nan(
 ¯ ü 
*("’ 
" 5 ;els®  E	ÞL ÞR 1int¾r._resca4óROUND_HALF_EVEN)Ñdef __floor__6 Ù B"""RV a% " o(G, as7åP z#e ‰ 9d#, ©  V vgreates¢#in‰ñ  such that n <=; B.  I�  –á e Ã ^Îñthen a Python exceptio%]d± JÍËZFLOOROceil $  a=Rleast �ÅÀ    such thañt n >= self.  If
 ó is infinite or a NaN then a
  ðPython exception5 …raised.
% 5""" i] Õ._is_special:  U ! Šis_nan()  " ` ò
 ValueError("cannot round¨ )")U OelseI �OverflowL nyR Pretur !t(3ò_rescale(0, ROUND_CEILING))qdef fma. ÷, other, third, context=Noneí ø"""Fused multiply-adTR„ sª*R +Q ‚ with no`ing ofµÕ intermediatewproductF · Ü B and± D are� ‚ied togeÉ r  a òthe result.  Theö P operZ  isœ Qn addS   0 ,D  ) æa single finalÝ €is perfoÚ .2  q Á = _convert_ ( !, Mvit=True4K4  4 i £# compute W;^ � InvalidOõ %@f ei=	G  í @gnal¾ tBor iÅY  f•zero time¦yEf Ãô {
Ž a  ‘4! S= get (9  } ®exp == 'N'H rÀþ!._ˆ!_eÐ0‘, 'sNaN',¨m Ö n ?Y o  $._n nÜ  ¦RÙ BelifPC … D 
† F†  0if @ € � „	ƒ  >  °'INF * 0 iný'I > (‚_SignedIo"y[Þ dsign ^/  ]† M
 U 	b@0 * 	BÛWñ dec_from_triple� ._JÐ ^ other._sigOn,
  ðstr(int(self._int) *  Rother )N F cexp + A Uexp)
Ž óreturn product.__add__(third, context0 ñdef _power_modulo¥ ,Y ",  5 u=None):j ð"""Three argument version of _X V__"""› ° Á = _convert_ ( )W "if€ À is NotImple^ &ed{  zé > = ³ d  	e  f - Ë $ifKA *ne� hc = get (v ½ ð# deal with NaNs: if  Npe any s   ön first one wins,ñ# (i.e. behaviour forP  – ðidentical to that˜6fma “ _is_nan =  †._isnan($ `%  &  '  ( !ifg ) "orì :  
U= J== 2!  Ztð._raise_error(InvalidOperation, 'f'R B  	 $ * ¯²  – a•— 	J˜ b‚ ™  E/À $ P._fix�(ÎJ ù K % L 6± ,  að# check inputs: we apply same restric\÷s as Python's powTqif not n $Õinteger() andk  ^  À /is' ¼ ( ­ I rM‡  B  'Ü F 3rd	 Þ Ÿallowed 'J ¥unless allK Ps are/ !&s'xJ < 0Fç FÀw() 2nd arguÿment cannot be '
  ñ'negative when 3rd arguP µspecified')P 0if d umodulo:  n ùreturn context._raise_error(InvalidOperation,:  >  j'pow()™ é E0')
K `# addi_  al restric ñ for decimal: the ¿ aus mus0GlessG õthan 10**prec in absolute value* "ifJ õ o.adjusted() >= ? $R�insuffici v vision: <  î0hav41re L Œ z digits¯ñdefine 0**0 == NaN,¬õconsistency with two-— 5pow‚ý	# (even though it hurts!±‘other and¿Oself™Ró at least one of‘61stfN ¿ '2n¢¢¿be nonzero;ùv!is‰ èZ@compô@sign¼ eresult! 1if U@._is„*()R7 5= 01 Oelse#  Ž ._0 Ìsconvertbñ to a Python integer,Ð > 	 Ž 5 toq 2# Dõ1 ps (i.e.dcÌÐeir exponentsb  be¿0>)0o =R(int( )" ðbase = _WorkRep(� A.to_¤ Aral_3(2 r 6 ¼ 7 Ï ’Šd usingÜ [- — ( d.int %I** A10,  Cexp, %))& H  ;idrange(¼ K.expð N ! =]    , c /O   	% Q 5intˆ Tð_dec_from_triple(-Q, strá C), 0ñdef _power_exact�,ª(, ´  """Attemptú[ ¿!**� A 6ly.�  GimV s - { ŸažU p, aa i "an`  ©0ult”›¼ Z ‡ ,pB Jà of precision.ó  Return None if self**other is not
  õexactly representable in p digits.
, õ+Assumes that elimination of special cases has already beenC ¡performed:• R and ˜ ómust both be nonQ ;(   E ±be positiveA ùnot numerically equal to 1;] eB ò
nonzero.  For efficiency,0 À._exp should. “ ¥too large,F "so�10**abs(É < )gpa feasiPacalcul-F."""Sñ# In the comments below, we write x for# Qvaluel1elfù y “ %# & Ž 3  WG P= xc*« x6 ² by) = y ·ye, with xcO  ¡&ycpqintegerER diviá Wby 10+€# The maIQurpos¹ °this method!±to identifyá —*failure*€ pof x**yÎ?be ®¶ �as littleÏgort asG 1pos© P.  So]Alook>QcheapN’easy testâ> ìe§ L PilityŽŸ RbeingŸ p.  Onlyx7allF Sthesea Áare passed d� Pgo onæ AactuÆPcompu9**yZPHere'¤ a�idea.  ExÂ@s y }! rn alsber m/nàmî ˜ @n reœ’vely prim Pn>0. Çn(ç  to†C 
>ð
(at *any* precision), xc Æ A  ñ�nth powerDaL Ûk ® 5 xe= 	u€n.  If yO@negaL �then addi§V† a€ !eiã2 or 5, hence   O qof 2**n& F**n. 
  2  a "tÔðhow small |y| can be:!Qy=m/n°6bovŸ#h&n:U 
 P  (1); qxc != 1* ¡ UQresuls +beÓw_ ý@needÁ*(1/n) >= 2,mÿ 1lso  ´   <Š  F !ifÔ â<= 1/nbits(xc)• Axc <0 ,<=?  2*~ D|y|)v@xc**r 1< 2� × »#€  ç “2 (24e4p0, |xe|y ÷ R1, so  z �>= 1.  H,if³  # @< 1/D é £ ” 0NotOPat sinxÃ'ot¾°, at least É!ofü7and“  Ú ðmust apply.  Nowö |y| < 1/nbits(xc) iff |yc|* 3<
  ‘# 10**-ye' Šlen(str(/ –) <= -ye.6 
 ÷. There's also a limit to how large y can be, at least if it'sG ÷-positive: the normalized result will have coefficient xc**y,G $so\ à representableV n/  È0**p, and y pp/log108p.  Henc5 y* R >= pN  © ž iË ºnot exactly… '.
ª 4if o¤abs(yc*xe)ka  ´ ;-yeí ï!xeÎ 	“  ‰ 	Â» Similarly,ˆ P)*xc_>Ž pimplies]Â 	gÜ õx = _WorkRep(self)5 õxc, xe = x.int, x.exp õwhile xc % 10 == 0:  °šxc //= 10 fe += 1\y€ Vother� Pyc, y� y� y�  y� y� y� €# case w Ï T== 1:É!issÐ(xe*y), with  Ô  # requiredGbÙ… integer$ %ifX  "ye *= yc  Q Ddis now ! *
 Pye); • ‚ must beu 9ralM ¤e¤† ¨   +    if’<í  ¹return None… Pexpon =¹ 	#  V P.signH1H [ C - 	A #I>Ð is a nonnega¤ïer, use ideal D 1if B C._isÃ!()© ¡ é ¡ W _W 0 = J. Q*int(A Ø 2   Äzeros = min(< -K Z, p-1: Nelse#L 
o”ñ_dec_from_triple(0, '1' + '0'*; ,- )£	"ya\:Ù‚ ei¾g a powþ”# of 2 or   5Ýü	 last_digit†ê	ø ˜$ Îin (2,4,6,8)"ò# quick test for¨  Ž 2T  š³¾& -xc != xcO  ' _ó  #¿ xc0ð of 2; e is its «exponent
  ýe = _nbits(xc)-1
" î# We now have:  þ   x = 2**e * 10**xe, e > 0, and y < 0.9  ÿ The exact result is„ ó **y = 5**(-e*y)Œ €(e*y + x q  ð provided that both C  É  E ò are integers.  Note+ /ifN  � !>=pp, then ä pcan't bú pressedI  eÿly with p digits of precisionbQUsing~ ñabove, we can guard against large valuee /ye^  ð 93/65 is an upper bound for log(10)/ 5), so !ê  þ  ye >= len(str(93*p//65))-   Û n  0   ( j  -y  º z  q p65 > p*¿ Ç G   ë ÷ Bð the coefficientÀ  íK  5 inÿ.¿@emaxÏ Ã’st e such£5¤<ˆÑ: `= p*93p� +ifš 1 .))¡ u¿return None¦ BFind€ -Z;m1musd‡ Äñ decimal_lshift_(€nyc, ye+x7 x8 	@if eã É U or x ø  M  > 8>  F "xcßP¡elif last_^ == 5] #‘=– _5û` if xcÙ pa power‹ 5; ùuà# equality alleý way up to xc=5**26588 vq?*28Zðxc, remainder = divmod(¯N, xcÎ&if0 í  6€   Pwhileÿ 0% 500C �xc //= 5Õ  L _e -= @GJ5, u„@same•ic as i¹ k'«ð2' branch.  10/3 is an upper b«ound for
   # log(10)/ =2)." íemax = p*10//3 ðif ye >= len(str(0 =)):)  y Íreturn None
! ýe = _decimal_lshift_exact(e * yc, ye)6 x7 x8 	qif e isŒ U or x »  M  > û >  	 ™xc = 2**eÜ NelseL APif xc‡_10**p9 	}  ?J-e-x~ h  �ð_from_triple(0, ä†xc), xe)Åp# now yRõpositive; find m and n such that y = m/nï C0¸  m, n = yc*Õ Uye, 14  ae != 0q �ÿabs(yc*xe))) <= -yW	`c_bits™n	 :(xc‚ u cu 1u  2)*x@ z  ü  , ý ,(-üôwhile m % 2 == n	 D Î um //= 2<    n  W 5W 	 W 5W 5ðcompute nth root o¯×yŠif n > 1€# if 1 <à<(`n then �isn't anX Jpoweà�� nc  ò›ðxe, rem = divmod( n #  }Z /# ù using Newton's methodh0a =e< -(-_›ú//n) # initial estimatÚá?Tru Gq, rè ºc, a**(n-1)ï  0@if aKqñ   Ybreak³   ¶     Ñ "(am g + q)/! !  Pot (a—qnr 0k Ì <  ja™ µx`*th¦  •original * Ù ÃAmth ƒ
Ü* aif m >IÀ0//_log10_lbTÒ  ˆ 10 p, hencev G*m >J  p Ÿ `resultzðnot representable.
       ÷ if xc > 1 and m > p*100//_log10_lb(xc):
  µreturn None ¦xc = xc**m Ve *=  k O0**pR @ ö%# by this point the result *is* exactly representabl‘ r# adjus7 `exponeD ào get as close	 ±possible toc Wideal… < ,,•necessary! Astr_ý 0str+ ñif other._isinteger()f šsign == 0€ _v € = self. Q*int(= )f  —ú zeros = min(xe-A ‚, p-len(¨ ): Jelsez H 0^ rêò_dec_from_triple(0, P Q+'0'*8 Q, xe-
 !)
@ Àdef __pow__(Ã ,�, modulo=?‘, context gB"""R|  ; 2 **= C [ %@ "].g  ðWith two argumentsY Qmpute>!**62 Ohree4 ° 5 )r `.  For$à  y tB ` form,!   following²Àtrictions on ? ¯ f hold:Ñ z - all _ 0s mÐ1be Or¦# - " ¦nonnegativP - ei’3 or4 •(or both)` 0nonÊ¨ # -u" Ït öhave at most p digits,B À  where p isù§ precisionž�If any of* *seD°is violated Ð InvalidOperaft @flagn graised_ TIaof powð ); “identical\ ˆðthat would be obtained¸ co ] MC   w¼–unboundedP, but„ J fed morÍñ efficiently.  I* balways.h 6"""Y$ifÊais notÅ
rx.¿2er_« {À b»ï fÁ = _convert_ 8 y Ý €NotImpleµ/ed‰ D 	Â 4@ nÅ =é (¤ #} G €a NaN =>j ` is C an_ ŠÂ._check_nansØ    i¿sÍ 6ansË €# 0**0 =l r (!), x 1J †  x (includN¹+/-InfinityR Ì*
w !ifæ »  À         ret÷'urn context._raise_error(InvalidOperation, '0 ** 0')
  Yelse:   0retZ U_One
 ñ# result has sign 1 iff self._ õis 1 and other is an odd integerL J 5 5= 0 iO J== 1� "if[ C._isT *()#  À fif not+ Oeven(  , 
‹ 1‹   £# -ve**nonƒ i = NaN:  > k# (-0)) 0 3  Ò  P –ð[  B    'xñy with x negative·y7$an°-#. eó,B ùout doing any unwanted rounding†  )! == a.copy_| 8e()dð0**(+ve or Inf)= 0;  - -   = Uinitya ó d 
>3£J== 0!  [÷_dec_from_triple( BO', 0@‘SignedInf¬ [N ]ô :Infö á ;æ ;**(û .  d æþ ¯ 	 & D¸R# 1**/ñ= 1, but the choice of exponent¢  WflagsA @depetn9 / oL,8 aon whe–m  œD AposiÓ2, aí  `or neiF ; ²@ == /
[~ ¢¡ T#ä p = max(Á`._exp* Aint(° )z,v  6   D# 1-Qprec)@pevaluat–A † directl3 A   #©òdangerous until we knowD ! bsmall Ž ˆ  Äcould be 1e9 
+ k �á %   ¸multiplier      $elJ % > 
€ +   	N 0É ÛD WÈ %   4expæ È6 *  p ià+ <ÈÇ Z À1-context.prOec
   ùcontext._raise_error(Rounded)2 Yelse:  O @ zInexact@ . n  . „exp = 1-d Yprec
‚ ö(return _dec_from_triple(result_sign, '1'+'0'*-exp, exp)E ð# compute adjusted! Õonent of selfq   a_adj = .2 (P  & ÷  ** infinity is S “ > 1, 0 i 5< 1f #]  B -C 
<C >C Äif other._isD *()¼Cif (%  &` == 0) (Á ç ;< 05  •sZ0', 0 @O sSignedI5[Á]® åâ here on, the * ñ always goes through Gcall\¡to _fix at 0endçåthis function./ ¥ans = None Øˆ = False™ ð
crude test to catch cases` ðextreme overflow/_
 F.  Ibq# log10ƒ!)*Ÿ� >= 10**b“R and 
 ö>= len(str(Emax)l#Ú n5 B 
/  X  9 !+1U Fhencæ „*‚ h u+1), soÊ Â occurs.  Thÿ +e# for ê  vsimilarbÌ P_ý Q_exp_ C() +Ék „   Á«>¾5.ú ÎÂÚ  €÷ . ‚ +ve, ory"<  &-v v  # possibilÛ%of	÷  & .if¦Å u)X mÊ(, I &+1ø`í -í +í ÍIto 0ó vEtiny =ž   (ž -9 *B )-1†1try2an ³'Pwith Hvision +x0if ƒ!isñ
-  ¥apower_U A’ X 7 + ”ö  @ ois not]  $ ¡ ¹1‚  %    J =ð 1,½ S._int
 çÀ            ð    exact = True

   ò# usual case: in& õ result, x**y computed directly as exp(y*log(x))N õ if ans is None:  j ùp = context.prec öx = _WorkRep(selfT  < Ðxc, xe = x.in˜ I.expA yA ZotherB Pyc, yB yB yB êif y.sign == 1¼  „ †yc = -yc<  #C cor‚rounded Fà:  start with ú ™ision +3,Â ÷ # then increase* SuntilN  \áunambiguously n IableN ™extra = 3 Qwhileà `coeff,Ù Krdpower(y", ?A, p+Y 
\ 1if A ñ % (5*10**(len(str( Ž))-p-1))x  > Ybreakª   k   +Å 	  cò= _dec_from_triple(o_Ã&, y Ó )¶€# unlikeê ð , ln and log10,‚ ù ` funct§€respects † #vðing mode; no need to switch
 ùROUND_HALF_EVEN herzT ñ 's a difficulty%   w
'Ç'òPnot aPteger² ‹ 7theÁ¡.  In thisÙÙ  È PificaØ @ prequireâ  atç # I÷flag be raised (in spite of@ r ñness), but sinceH ’ Á $ á _fix won't doŸ G °for us.  (CJ¢spondingly¾  Underflow áçal should alsoF ®  P „subnorma>¡s.)  We ca„ Ðà E Stheseh @s eiOð before or after call Õ ,õ 	C Aat w¢ bviolat ÿ0ede!  Pignalõ –So we wra×  .` m à in a temporar˜M,< reÅ ¦ ewards.˜ #if ô Uca._isin[(¡R# padº€zeros upÚilengthÏú+1 if necessary;ß Ïi# ensuiR*ÓFwillp·  > 0if Qºans._int) <OY0expXwj + 1 -L   i   b}  ¬  tˆ S+'0'*j 
Ð H  H Cexp-9 ž 2  # Áte a copy ofNtcurrentv,—€cleared ¬rs/trapsÏ À       newco¡ntext = co
 —.copy()
  5new «lear_flags% ùfor exception in _signals:L  W P etraps[8 i] = 0
1 p# roundR tthe new« 	' ö ans = ans._fix(c )O ð aise Inexact, a\ ùf necessary, Underflowa R 0._rC s_error(I 
2iQ 5/¿[Subnormal]
	] ‹ Æ £propagate g@ to !„original& ; i couldÑ q# have Ì ²d any of Ovû %, º ,A ü 0, R£Õed, Clamped. J a needs› {correctE ñarguments.  Note that0 Porder–  Ø $Ks isC ù important here. ‹æ Š é	‡0 à, 'above Emax'<!s.ç
þÇLƒ> Å Æ   fÊ 5 QJelses MJ 3 `returno^ô
def __rpow__(self, other,†f=None)f �"""Swaps - /, ŠY As __L E."""Î& ±= _convert_ ( �"if{ 0 isOPImple_&ed~  j , c  .„ Ð =  ù Ö;ize* ó N ðize- strip trailing 0s, changeŠ th Pequal×0  e0« $if\ê nÄ¨ c = get (¶   !if|Ê._is_special!  Ó._check_nans(K  M   if
H   X2ans0  Sdup =„  ³Y 	Ê0dup¡ —infinity(B C W 6dupW  +jot dup‡ ,  _dec_from_�1le(c  D†, '0', 0� ³exp_max = [� .ùÕ….Etop()] cþ]£’end = lene 9int\   =¦ U._exp3 Rwhile Ðint[end-1] ==œ !cexp < š 
â   E+= 1M  # „ - ðreturn _dec_fromñ_triple(dup._sign,  ñint[:end], exp)

    def quantize(self ñ	, rounding=None, context !)::  > C"""Q=  = p so its` ðonent is the same a Pat of  .€  F ¡Similar toE ð ._rescale(exp._¬ ø
 but with error checking.Š  ðexp = _convert_otherL ã, raiseit=True � $ifá  ±  ò ã    þ c = get %()p %if/@ M$ =h . #ifþ Ñis_special or+_ 
™ Sans =7 R_nansì ¨ §  Ê jif ansE   `return ‘   i¬Ð_isinfinity()–  í. T < 3and° S =  } • qDecimalžñ)  # if both are inf, ii%OK’ >   B !._ _Dý(InvalidOperation,>  B  '1“‡one INF'Q#· ‰ð	should be between Etiny 	EEmaxv „if not (­ ' V() <=M <A < Š ¨ î .p'targetp ¿!ou¯bEs in+í ¹  
Èž”_dec_from˜ ) ™1'0'qçÎ „ans._fixf I ”_adjusted 
 
+ >‡ F
µ E. ¼  C'expSpÐ result too lz  fÜ0urr;'Á"ó -ª;V + 1 × Oprec× R
Ë hå°oo many digÕ ì& ¡ùˆ	 èø Ï�@len(Í W_int)È ÀÀalidOperatioOn,
  õ,'quantize result has too many digits for current context')
d õ
# raise appropriate flags"  if ans and Ô.adjusted() <Q e.Emin:2  ¿ k !.__ õ_error(Subnormal), ^ Á._exp > self 
M % 1 !=! 
 m vInexactk * yRoundedð	call to fix takes care oðy necessary folddown,!Ö ö# signals Clamped if5 '  X=VS_fix(4² `return! ±‘def same_ù0um(0„, other,�f=None)%B"""RH @True‰  6  ¯ 9 ‘ have the[ ¢ exponent; Ewise° � bFalse.“  UPIf ei„ P oper)ñis a special value,b ðfollowing rules SFused® S   * h ° Dboth[ 4 –infinitie§9 ;NaN3 = æ ,w ß  Ú   5"""- Á = _convert_ ( ,J0it=¸ Å!if¶T._is_"or^ 	Œ â–.is_nan()µ %orž  ®   ä % *e=  ª w; ‘$==§ 2expð ƒ�_rescale� ,20, rD<ingy) � so that	f2 is@ Apby padd"–with zero±Ðor by truncat$ ä@, us  ÄUgivenŽ H modªS“Eï 0ed j òout change.  Thisqftion i‚ ’quiet: itíBs no/ A use 0infè> @fromô §çA ý= r2çto (an integer¤h* =å ^ ¯{ fqDecimalÐk  ³!ot¼6 P_dec_Þ S_trip ._úQ, '0'UŽ  ï >ð 
X #ü î1wer•ÿ ³qè  éÂ ‰ 		0  4  öPint +½ *Œ  -›)Ï #k;’¥Ólose data.  I:— ð# exp-1, replace óself by 10**(exp-1) before rounding
  Ðdigits = len(9 ’._int) +  •exp - exp2 3if 5 E< 0:  P  3 ó = _dec_from_tripleX  sign, '1',P 9-1)< T 5= 0 ó this_function =’ Tpick_È  [ ]? ©changed = I Ž ,Ä „ Ucoeffe Rint[:“ …] or '0'X 5if [ := 1G qtr(int( ')+í oreturn%6 '!)
x Bdef õ ¿ uplaces,Ñ)‡ @"""Rç° a nonzero,	 ñspecial Decimal to a fixed number ofl Êðignificant figurl õ using the given| b mode.©  = €Infiniti4 �NaNs and ˆ 0s a„Çed unaltered< ¡This operaõñis quiet: it raises no flags,X u º binform>  „° wcontexth 6"""3 "f O< <=Ót ó ValueError("argument should be at least 1 in¨"[#if»4is_†aor not º =¦îJ  an« gt._resca]Òadjusted()+1-Í ê #Gñ can happen that!M  ‘s S  ­gonent;G èfor example whP99.97] 3 ñE.D W8  ›Ž ðs we end up with an extra 0b x  ¦#© ¾´; a second Í  Ý Ì &isw tif ans.Ý C() !Y 
‘t 5 s  / r
Ï2ans  É tod±egral_exactæ°s=None, µ ß se÷a nearby integerâ If*¤A is �¡fied, takeB
%  6§ v‰ 1.  ždmethodŽ ! o!ed�!InÓ £G $¨appropriat.¨See also: vrÀ, which doesoActly± usame as_ F˜ PexcepÖ atî < #n'= ž 3or µ f³$ ³check_nans(+= º Û|
H   $    
T ¡ð >= 0:
         ó
   return Decimal(self)
  pif not  :   6 ñ_dec_from_triple? é._sign, '0', 0M ú context is NoneT  S= get (? �rounding@  #= > . ¼ Qans =Ð Ô._rescale(0, ( 	n  , !- © ö._raise_error(InexactB „ 	& RÂ &ed& IAans
¥ òdef to_integral_valuW¦ =<,å  )¢ 1"""f ñs to the nearest T Àer, without ¿ N» a aed."""�  ê$ifi vç  ¶I#if³¦is_specialð  ¥  «ªÓ._check_nans(œ = v 4 jif ansH   ’    ( $ª._exp >= 0W < 
;els	/ R ¦ž#Þòmethod name changed, but we provide alsñold one, for compatibilityR y. =‡¢Asqrtì†
Z ƒÓsquare root oÍe0µ  ¡!e� … ãinfinity() and½ - = ; ò
]] †¥# exponentÕ �q// 2.  ¥…-0) = -0M  o /½‚S 
?³ „ans._fixl)% f •ù 1�NÐvalidOperatioNÏ §x), x > 0'j â# At this poin°õ represents a positive number.  Let p beOñdesired precisionÁ exL sÉ1 inyÈform c*100**F  ^( ct Crealy N 6 anŽc ˆ  be–qchosen º1at h Â(p-1) <= c < qp.  The“ C !(e� y À is sqrt(c)*°10**e, and  s(p-1)
  á# <= sqrt(c) <! ÷p, so the closest representable Decimal atF ðprecision p is n*k óe where n = round_half_even(t '),E t ¥integer toŸ Awith˜  A  ! gchosenF !in% æcase of a tie.  
 ò To ensure correct¦ °ing in all E �s, we useW > `follow- `trick:& acomput* À square rootÆ ‡an extraB wplace (< +1 instead»  &),œ GdownÑ � Then, if  p result„qinexactùÑits last digi h0 or 5~€we incre8 Š0 @to 10 6_  pectively;t Git'sÓ s rwe leavH ±alone.  Now­ RfinalÙ 7 toG !p °s (or fewer’ –  ’ ãunderflow) wilE B Ò!ly 2raiÀ÷ appropriate flags.
6  æ©,5of ˆ*   ° = context. (+1I äwrite argument½ �form c*10“õe = self._exp//2d #Å ó ð'ideal' exponent,Ob“dƒ $ mi‘*lyÄD.  l^ `numberS' s' 8c iTb31001at Ä P(l-1)Bc<F0**l™àop = _WorkRep(ã w õ µop.exp >> 1ô 3if  E& 1:  ­0c = ‰int * 10 `l = (lVIAint)X 7) +] OelseT O 
N !+1P ârrescale,‘at c has  !ly3 6 Zf qshift =' %-l 2if  L>= 0« "*=u" 3  u u = True î  p, remai:Â = divmod(c,W -X £Y  no; b 2 -=° AfindòUfloorè0 us+õ Newton's methodL  # 3 J QwhileÖ 
q{&//¡ ¬ @if n‹q,   UbreakV      … Rn + qí    _  H†n*n == cø "ifû
} #0�> ; 7!toSÛÚ ¿ y   Á# assert n %ºÂ ™ Ð0
             ðn //= 10**shift
  Yelse:   2n *1 -2  J +=  E ù)# result is not exact; fix last digit as described aboveŠ ßif n % 5 == 0¥ U+= 1
3 öans = _dec_from_triple(0, str(n), e). ö# round, and fit to current contex) $ = õ._shallow_copy()„ T 9ing+ 4et_ ö(ROUND_HALF_EVEN: ¾ “ans._fix(s    .J " =Á 6ingÕ ¢return ans ôdef max(self, other,Ä f=None)WA"""R? òs the larger value.N  LLikeS ô ) except if oneô`a numbr — s&PNaN (xwsignals9 ÂsNaN).  Alsoá %s.8 5""" Í  ð�convert_ ( Ø, raiseit=Truõ$ifþ  ¥    Þ ec = get (50if Kò ._is_special orY 
V 2# I@oper÷ °is a quiet    s¼  ™ 8@then�õ  ¤ #W ) ralways `)ed( Esn =® 7nan¦ G o r  ¹    ë nÝ nÎ  = é —1? k £ , � Š Û &   s 2== V  ¢ V Á W 
	� ¤check_nans+çæc92cmp' ˆ C ú ‘äSboth åÁs are finite%€equal in¿berical]	µ#ï Á` orderJ -jppliedˆ#9  If<  S€s differ n®"Ú¡ P with" H �positiveJ º ?minA 
U nega3 
O 
  	 ê¥  ! 0ame‰ ì` expon†pis used™Vselec� -*fp.  Thisi lyO CG öin compare_totalW O ô	$ ýÆ þ*-1�¾Ž, &  BQžùH Á/inÁÀns the smallÃer value.

  õ-Like min(self, other) except if one is not a number, returnsE ÷NaN (and signals9 õsNaN).  Also rounds.8 5""" z Á = _convert_ ( ö , raiseit=True)¾  if context¥ UNone:Q  á  S= get (@  ø ò ._is_special or 
V 2# I@oper÷ °is a quiet   2theG  ™ 8‰then the¤ #W ) calways`)ed( Tsn = ® Ynan() o . ¹   Qif snÝ nÎ  (é` == 1 ½  k >= 0(  , ýŠ Cfix(X
�  * s V  ¢ V Á W 
	� ¤check_nans+� c92cmp' ­  C ú î 4 Ôcompare_total= [ > *-1-3ansu + ;elsž% ó ÓÞ Yans._I ádef _isintegerµ)z B"""R›@ wheË§Z#n 5 u ¢0elf2 N  ÃŽ FFals¶6 ]exp >Ó4  «´ H #stb._int[ÉWexp:]%  W0 re,  = '0'*len( ´ÿ 2eve±ü  z  ƒ d  ü  /  ƒossumes . î= !or. !._ê é Ä  > é 2-1+ ò exp] in '02468'ò Ñ �adjustedÎ 3 & Á exponent of� ¼ ?tryÀ‚ 0 + S …int) - 1�Ù ÂÁor Infinity,e •is string2 )ŸTypeError~ 0ì Ÿcanonicalí sî  same Decim’Wbjectµ�As we do—°have differÖencodings forL ƒ½ ¡received oa € already3uin its ¯  M m¹ Sè 6í ],²=¯
ÁC6 £!to¿   kPnumerA'lyðIt's pretty much l×»Àre(), but alól NaNs signal, with Sing
  $ ñtaking precedence over quietF .0 5""" ñother = _convert_ ( õ, raiseit = True)6 ôans = self._compare_check_nans> vcontext7 uif ans:G  À `return   _ ^ S =[ 5 Cdef ) p_total(< #, Æ - f=None)~ B"""C¼ sË 2 to2 0 usKñthe abstract representations.
y  Á ðThis is not like 8 „standard— ¡, which us  Åir numericalI  value. Not$ Qat a Í ` order’ öis defined for all possiblª O ²  ­   ÿ=ýZ �# if oneö ±egative andú t  @posi µ, it's easyB !ifr ._Ú;  >;  ¦ ² #_Nm 8OneK  <  ñ; O K C … Ï  Ý@# le¾ °handle bothMe types„  }  úfisnan(ù� "  ,._# % "or‰  

& /==&  4#{ð payloads as though©Æy're integerÊ  :   Ò ‘key = lenOs._int),¹5intÿ  1   Ú _6  7  8 Õ  : <Ô :keyú  a    - ?ign  ! -â   Oelse> kB  ƒ 1elfê >° 6r 	 z ¸ ö FZeroÛ T  Ê M   ã �nan == 11Y » 	 + d ÌK À � 2� 7K � ƒŸ ,T ‡$À== 1:
        ùreturn _NegativeOne
! ý   if self_nan == 2:"  2 J B _otherC � l † 1 < K 
… } :  •   9 >9 	 ¶ k T._expp  
u  Y :ign  r Ž  U    Oelse. ¼ }  Á  
G Š \  – ’ À Ô aZero

+ðdef compare_total_mag(+,kö , context=None)´ B"""C9 s[2 to2 ð using abstract repr., ignor Rsign.~  ¿ JLikeƒ ð, but with operand's 6 D àed and assumedw Qbe 0.Ï  Q 5""" gÁ = _convert_ ( ö , raiseit=True)’ 1s =Ò ¶.copy_abs()Q " =æ  `)s.R#(o\ lS  c
NRÇ@s a x  2theú 0setê 80. ß q ò_dec_from_triple(0,Á D_int 4exp ¬is_specialš nCe � i\8ed.œ  ÐPelf._º7 ¢· 0 G   ý] 1þ  À Ä ÞÂ#of9%‰  ï   á L oë » <   ¬ �6 3expþ Be **� ì � ikL@ is O
Y c = get (¢ ¹  # … ¥NaN) = NaNY %an³`_check¤#s(C = Åjif ans} V6ans	q �-Infinityw 0u à3isi!  ()\/-1Z _v É   \ 0T 1T 1not;D Àurn _One

    ô# exp(Infinity) =  
  ó    if self._isi( …() == 1:$  , ð return Decimal(4 %)
" ð# the result is now guaranteed to be inexact (, Gtrue? ÇmathematicalH ðtranscendental). There'a " nZ E óraise Rounded and Is  6 ð---they'll always” 3 Gd asG a� !of× @callÃ U_fix.( õp = context.prec Radj =U™adjusted(+twe onlyÁ ð do any computation for quite a sm€ Hrang14of ^  å�onents---: ð example, -29 <=)    10X ¨ ´@defaµË R  Fort %erZ ßC ñindistinguishable from 1 at4 `given   ision, whi% 'orE Olargm ðeither overflows or ß ŽÇ@sign¿0  Œ´> len(str((å ºEmax+1)*3))æ#j Ÿ  ý°ans = _dec_ß õ _triple(0, '1',W ; -el— 1— -˜ otiny()› ø  �0f ¡ ` 5-1)> ¤  ;L< -p!ð p+1 digits; fin¯ qa will OÖ correct flagY¨ À + '0'*(p-1)  [/-p« 
O « -´/# ­ E9§ `+1), -® NÖ# general cas¯JelseHo?ƒ_WorkRepN ! àc, e = op.int, 5expg  &  if ïú  ! fc = -c¤  #fe¤@ly r¿#edõ¦: increase¶9 by{ 3# 3 çüa time until we get an unambiguousl? s .T	^ ™extra = 3 8;TruI Ö `coeff,­¦0xp(@A, p+M C .   1if 5 ´ % (5*10**(% !))Ø :   Ybreakž   k   +¹ 	 = ”o ½ 	%@ is stage, E bshould°Àðwith *any*
        # órounding mode, not just with ROUND_HALF_EVEN
  £context = 
 õ._shallow_copy()* _ + 4et_ (c : ó ans = ans._fix(i    .J 4 =  
 PeturnF  õdef is_canonical(self):0 B"""R3 €True if ! E is 3 Ò; otherwise r, bFalse.b  "ñCurrently, the encocðof a Decimal instance] ealways† l ó, so this methodq !s ž tfor anyR .@ 5""" £  1 ¡ ofinite 0 ý A� 	â ²considered J  \ itý 0neiQ² #in" nà O NaNÚ 
 ² ¥É._is_specialê P ì 2 î a ƒ ©exp == 'F'ƒ ?nan~ ïa qNaN or sNaN„ #Úin ('n', 'N')‹ 3ormø,¾_=None1a n@  number� E  Ý ¸} ;¯Rfª  0 ­ 
5 c = get „¦ �.Emin <=Ú0.adî:ed(&q²@uiet«å 
3n3osigned6�negative�  j  µ1(s F  alIµ& 9N"ubq	± sA «u›$ < ½	¨AzeroÀðzero; otherwise óreturn False."""
   ô	not self._is_special and ¡nt == '0'
: ðdef _ln_exp_bound(= !):  Z ñ"""Compute a lower ( ò for the adjusted exponent ofm Uln().I óIn other words, cV £r such tha¹  7 õ >= 10**r.  AssumesI * € is fini› ±nd positiveî % F!= 1†  2J #Å €0.1 <= x ‘10 we useÛ ñinequalities 1-1/$ Pln(x)- 5x-1K Radj =÷  La + lenL–._int) - -  if6ä i mp# argumE;Ž ï23/10 = 2.3 asŠ eln(10)�  M ˆ ïtr(adj*23//10)Ž _<= -2� V<= 0.Â `  �(-1-adj)e Ñop = _WorkRep­ àc, e = op.int, 5expË -L== 0ž 11 <sU < 101  œ 0num�Ptr(c-H&-eo    4den  
 50num) @0den (W  <  n #Ë`== -1,#  C ” % V e2tr(– C - c��l9 #ªntext=None“Rs¦õnatural (base e) logarithmŠ	öQif coY  A \ 
X S= get "()Ÿ  <õ # ln(NaN) = NaNå 0ansT|³check_nans(B = o Ù*ns| );ansp @0.0)¹1-Inóyw 4if ôL P_Nega: ; Ê   Ï  " iËC_isiy (ˆ 1l A B d 1¾ &0.§[  Õ O_OneP KZero
nÏ õ
) raises InvalidOperation{ b `._signh µ ™!._P |_error(U ,V   	0'lnx$a © y value'B`result€"ir¶ õal, so necessarily inexactz D' }ç HprecS°correctly r 2ed � ¡: repeated‹ 0cre_ > ¥ision by 3› p# until¯ôget an unambiguous[ Cable] 9 Pplace81p -Ì.Žð) + 2 # at least Ãp+3 places
  µwhile True:   ócoeff = _dlog(c, e,; )( ñ# assert len(str(abs(= ©)))-p >= 11 1if  ¿ % (5*10**(; J-1))”  ˜ YbreakQ Ñ U += 3 1ans¼ òec_from_triple(intœ [<0), ® 2, -K %)
H £context = 
 ö ._shallow_copy(‰rounding+ 4et_ ö(ROUND_HALF_EVEN: ¬ “ans._fix(i    .J 4 =  ¨ ¢return ans¼ ðdef _log10_exp_b� W(selfRñ"""Compute a lower ( ð for the adjusted exponent of E .Z 5().€ ùIn other words, find r such that7 F0**r@ vAssumes, 0 isE i� ÷ nd positive and% F!= 1E 2"""þ  (r# For xl   ó< 0.1 we only need aó !onò uinteger× Q# par÷ ò  ý #),… Pis coµ �directly k H @ ;1x. •  †  <= x <= 10‘ 0use8 · inequaliti¢a# 1-1/.  ‹ x)8 px-1. Ifá  Ô bhave |§ Wx)| >… (A Â)/2.31 > 0. ; 0< 1w n8 V (1-x, RRadj =É U" +ó·elf._int) -ê if?~
Ä#B  0£  ±ÃVdj))-;Q _<= -2R ÞR 	K-1-aU  op&rWorkRep B àc, e = op.int, 5exp � L== 0Ž 21 <ä :< 1ã 0numBPtr(c-ù&-eæ 3den  Z231*c  0numn +0den ([ !<  5+ 2§ #†a== -1,þ<Â' <¬ < =• -z v c+ e - o P"231" 1& v‚ ),4Z=NoneyR° ð`e base•logarithmg	Ñ8Ž0is S 
y'c = get (Ë"# › ¥NaN) = NaN&‚ ´ °._check_nanÆo =M � ý*ns )‚ Ðs P0.0) ……Infinityz Rif noO P_Negaù: ; ]   Õ  % ð if self._isinfiçnity() == 1:
  Àreturn _Infi% 
 ô# log10(negative or -' õ
) raises InvalidOperation? ßif self._signy ‘context._P |_error(U ,V º  '´ e of a ¹ ~value')Û Ÿ10**n) = ·  `int[0]¹ s'1' andÏ   "1: ‚0'*(len(é šint) - 1)bù# answer may need roundingÖ Óans = DecimalR oexp + b  : Lelseo Âresult is ir•õal, so necessarily inexactI  NÑop = _WorkRepƒ )  àc, e = op.int, 9exp"  A ÒFprecs ` ²# correctly ­ ¡: repeated› pcrease B (isUF funtil ç ´unambiguousZ Jableš @laceb"p-®)`_exp_b�I()+21 ›while Tru` ƒ Pcoeff,dF (1, pc 
3 . ‚# assertÉqtr(abs(C ©)))-p >= 1{  5 1if # ` % (5*©j? ;-1)q ?   ]breakY ¦ Y += 3 €ò_dec_from_triple(int¬ j<0), s 2, -O \ÿ3 = 
 ö ._shallow_copy( 	+ 4et_ ö(ROUND_HALF_EVEN: ¬ “ans._fix(i    .J " =ptù2ans¥0defñbø,½ W=None`Q""" R3às the exponentr  �magnitude  ir's MSD.d  –7The» 4 Ðinteger which·  Y µ!of‚ Pmost dÁificant digi�   0 (a© ðough it were trunclK ³to a single? þ±maintainingl I Ú 4thai 5andH Ôwithout limit5 ¨  Ô %).2 5""" qPb(NaN“5NaN ð Ð °._check_nanD<=ï  ift
r¶  ŒeD  w ë
4 Y c = get (ì²  +/ µ E+Inf¶ 3isi^(K • ~0b(0V  ^ Q, DivhByZerof 1not�
½ Ðreturn contexó t._raise_error(DivisionByZero, 'logb(0)', 1)

  ó0# otherwise, simply return the adjusted exponent of self, as a
F ñ! # Decimal.  Note that no attempt is made to fit\ gresultŠ Ainto @currl …context.$ Tans =k (ˆ .¢ 5())' Á “ans._fix(H ÷ ádef _islogicalF %):< B"""R bTrue iï  À #a 3 – operand.G”For being$ ð, it must be a finite number with a signP%0,~ )anjð0, and a coefficiÂwhose digitsc eall beE  eiÓv 0 or 1=5"""# × !._„ "!=- QP_exp   æTFFalsj 0for‰ 1 inZ._int7 !if! 0not% J'01'  [ p  …g·Sfill_‡º#, ÝP, opa bÍTdif =" ö .prec - len(opa/¤ Zf > 0œ  opa = '0'*H +a A#el6 <6 Sopa[-› y %:]<  N – b– b– bZ – 	 6 ?opb– qFuoC_ands3zW=Noneuò"""Applies an 'and'2²tion betwee0ÝM  's'Kits.¦C € g 
¡ S= get (æ Y[ Á = _convert_ ( !, .0it=c5 0if ®')N  > .Aû  u H� 
•€InvalidO@ w  # Ü  :  ¯Ú ²Þ# =l 0 5 , Bint,Ú”	h 0mak e•f°clean startÉezeroes� ®ð = "".join([str(int(a)& @b)) 0a,bë1zip´ Vopb)]Öò_dec_from_triple(0, b 0.ls A('0'sc'0', 0Á  �iÓ’ÿ ‹ I'  # 07f1 ì  Ò 0œ Oxor(ã  C'1'*ª 6,0)û L  1  àor(self, otheró, context=None):
  ó2"""Applies an 'or' operation between self and other's digits."""
H 4 ifc @ is f e  $ € c = get 5()
‰ [ Á = _convert_ ( ç, raiseit=True5 aif not  ñ._islogical() or > 	 
• dreturn¹ !._g ô _error(InvalidOw •# fill to: EprecË Ã(opa, opb) =œ  0 _Ÿ þ , Bint,ZY._inth †make the•,‰õclean starting zeroes� ðresult = "".join([str(int(a)| ñb)) for a,b in zip´  ³ '])G ò_dec_from_triple(0, b 0.ls A('0'sc'0', 0Á Cdef ò P_xor(Eè Ž/xo�ÿÏ^�Ymax_mag‹�Compares�Àvalues numereply with ù ir sign ignored‚× $L#$if[�s_specialŒ   
s# If onl nd| ±a quiet NaNx‹   pnumber,n 9 ð#+0ber) ralways n)ed( %sn%fisnan(€ G o ¹    ë nÝ nÎ  = iÐ Q == 1½  k >= 0(  , � 8Cfix(‚
�  * s V  ¢ V Á W 
	� ¤check_nans� >c9ò copy_abs()._cmp2 à.copy_abs())
   ²if c == 0:
  õc = self.compare_total(other)
+ > *-1? aans = . , Oelse&  g R óreturn ans._fix(contextt Àdef min_mag(8 ,d #, ' f=None)f B"""CÁ ðs the values numerically with õir sign ignored."""» É Á = _convert_ ã, raiseit=True¨  E ½ @ is ™ ˜    ³ c = get (@  ã ò ._is_special orñ  
V ð# If one operand| Àa quiet NaN   
Â   pnumber,n õ  ¤ #+0ber) ralways ¡)ed( $sn0‰_isnan() o r  ¹   Qif snÝ nÎ  „ iÐ  £1½  k ¯ (   � º
?   s 2== V  ¢ V Á 	–S   	� ¤check_nans+çæiÒpy_abs()._cmp2 4.co R Y ³A r»²	³£next_minus¶¯ R ®ôlargest representable’ð smaller than it¹ 	´ &)ÃW _Éº  	–:ans¿6ans. y YÐ_isinfinity()ÏD= £_NegativeI. ŸJ �I ódec_from_triple(0, '9'*Ê U.precIx.Etop()©M=lœéH ö
_set_rounding(ROUND_FLOOR,+ m§_all_flagsO @new_~Yx5if ) !³ƒ% = b ¯.__sub__(_"(1'•iny()-1),I  ö à > µ/pläÀ
           ã context = get S()

  óans = self._check_nans(* = )0 uif ans:  G `return X #ifU ÿisinfinity() == 1< #_I% Y A -B ódec_from_triple(1, '9'*Â d.prec,w.Etop()' % =# Vcopy(ù ! ÿ._set_rounding(ROUND_CEILING-  ÷ignore_all_flagsQ @new_x4fixxJ 5if ) !©A% @• b ¬.__add__(_$h0, '1'•iny()-1),I  â @ de¥  xt_toward(t u, other[ f=None)» A"""R7ñs the number closest to>A, in ¢direction c s^ .pÂThe result iS L Årepresentabli a å `(excluÓy Q) thaJ � &ñunless both have· ñ same value.  If õtwo operands areƒ ðnumerically equal,0  Ú  a ˜" o_P with' F qsign seCb† a $of?Ø5"""B ¸Á = _convert_ ( ã, raiseit=Trueÿ E $if8  ìë   1‡u > 	†¥comparisonf2cmpÌ 	N ) := 0½ r©.~_FE 8o ,= ©k…next_plui� Šelse: # ’ 1g  NJ 8minK , ñ # decide which ‚ \Åb usingŸ P5ans9 æ(._½
“!._L ö _error(Overflow ®  'ñe¶ » ã'E Aans.�? m œ Inexact* RÝ&ed* #elÄadjusted() <ð_.Emin2UndX ¬ ŸSubnormal, Ø À   context._÷raise_error(Rounded)
  ñ# if precision == 1 then we don't C ë Clamped for aB ùresult 0E-Etiny. ¹if not ans:  „ ‘context._d § j %)
/ `returnC  ódef number_class(self, N f=None)m A"""RA Às an indicatì  ofê  C @ of F .b  � 3The `is one# ùthe following stringØ EsNaN¸ *   —-Infinity" x-Normal MSubn GZero% + 5 +\ +‚ 5"""W i‡is_snan(E ‡"ä 5 q5 7NaN4 Bnf =pC_isi(š@if i$ 6= 1É„ É U 4 -5 €	5 ÷|is_zeroó Z_signŠ Ž -ŽU   Oelse1 ¿1 $if½@ is À
; Úc = get 
.Å s<(' = ÌÙ W­ Þ 6  ’# just a ÛÐ, regular, boFÑ9, :Ø ~ Œ?ž x+ "â DQradix=@"""Jª 7 Ðs 10, as this�pDecimal¨ ;.   3(10¿g Qotateh , other¬! r8 `d copy} ±, value-of-J x times.‹ M$X ±= _convert_ ( ,sit=Trueä  5ansÒ¤check_nans5 „d  ifÎ
åC2ans¢ W "if1¯._exp != 04 ` 
H±InvalidOperð	X “$(-8   r <= int³ )  ! ˜ ¬ " 	Àx ÷  Å.õÒ I / g#`s, pad¾„necessarWÀ  torot = in£t(other)
  õrotdig = self._int òtopad = context.prec - len(6 F 2if . E> 0:A  c * r = '0'*$ "+  ( %el@ <@ 4 ![-D 5:]
> p# let'sU Eate! `rotateÁ ; „torot:] € ![: ]2 òeturn _dec_from_triple(Usign,,  Ü  v 0.ls= €('0') orþ ,cBexp)¾ ¡def scalebc !, œ,qf=None)OA"""R¢ sJ õ& operand after adding the second value to its exp."""À $ifg @ is j i  Ø õc = get (¸    « Á = _convert_ ^ç, raiseit=True5 5ansj¤check_nans5 f 	V:ans˜ rB ansD Œ "if:�._exp !=D4 ` !._ž ð _error(InvalidOLFtion~ ô liminf = -2 * (> dEmax +=	4 sup =  4 ƒif not (p T<= in§§ <= limsup ó • Ó öÍ¿isinfinity(Z qDecimal™Â O 	šGï' +Ó - L dd._fix] à då)Ahift� (0a s7 ¡ed copy of  ,A-of-¶o timesÿ·-„¾ j" ÄV#Ó0s, ä Ì …ecessary, Ž QË5ŒÀg[-topad:]

  ó # let's shift!
 å if torot < 0:   ) Ñed = rotdig[:) ]% Oelse3 q + '0'*8 7 
\ f õ[-context.prec:]
/ õreturn _dec_from_triple(self._sign,,  [  i 0.lsA €('0') or  ", L Bexp)x ð# Support for pickling, copy, and deep { ádef __reduce__š )Á  ñ.__class__, (str 3),)x I  X G  ©"ypø Æ) is Decimali  ú m  Ñ   ñ # I'm immutable; therefore I am my own cloneÌ  6 E ± ¯ 	­ 	_ø g, memoþ · %öMy components are alsoÊ ­ Â# PEP 3101 sÛ . ò _localeconv keyword argument should bð# considered private: iU�provided0ñease of testing only.° àeformat1�specifier`h=None,›  VA"""FF $ að instance accordz !toä egiven h .å ê6The ï 0 a L 1darÒ 6mat& `, withX Ó  F  Ñ Õ described inm2.  ¨ 	Ðtypes 'e', 'E &f'¼ 'F g G !n'i1'%'þ¶ped.  If  l0matZ Š  b  Pomitt‹ ñt defaults to 'g'ô a Qdepen& onO D AvaluÀ’‚capitalsÄ ñ 6"""D@# No	a�ays that]4he – €not pres[Ethens #� (re�ðt least one digit after) " dúf point– ‘# We take% pliberty‰Qignor±his requireá7for… R3---Õ€esumablyQ  reBm_  su 7hat<  ðat(float, '') behaves similarF  o ô$ )¸  ifY ý » ü
Ôˆc = get (… Ž Ù¢ = _parse_‰ _ V(
 
RùL #é1al ‘s don't c�@boutÑ vrecisioÊ#ifM"isƒ ¡ ± ­ § 1ignË )X ß abody =: ×.Zabs()(  { ðpec['type'] == '%':+
  ¹body += '%' ðreturn _format_align(sign, 3 …, spec)
4 õ.# a type of None defaults to 'g' or 'G', depending on contextF !ifX  ['K Q'] isM :!  ¾  z " p= ['g',\ #][O ¨.capitals]  "if¡  isí ð, adjust exponent¹  self accor¡ %lyw ˜ =1—  = ð= _dec_from_triple(U "._; Rint,  Yexp+2Gðround if necessary, tak1  	 Pmode d M theE' = . Ñ ³precision =r %']& 5if   Œ?not� zin 'eE'¹"ú “ (_ A+1,  Eing)�  6 /ela ?fF%b …escale(-e c ³gG' and lenÅfint) >ã ~ #~öial case: zeros with a positive¤…can't be!ò# represented in fixed point; r &mˆE0e0.;  c!otˆç —rexp > 0 5peci Öu 5  CSelf._o ((0ê p ó# figure out placemw Årdecimalº 4 ¥leftdigitse  ¡ +”0 *‹ù ã ˆ1dot¶ f = 1 -}  % Nelse; / Ø= F +gG ¤ ?#<=áP _ > -6¹ 
, | ñ 0  3nd Ñabeforeiiafter , &ge¡G 5if :< 0¶ Êintpart = '0ÒFfrac 4*(-E 1) +F._in‹Ÿ# + >ru  H   +� $*(B -F
ã› µ LÝ h $[:b ]cõ  Àpart = self.ó_int[dotplace:]
  ôexp = leftdigits-$ 
# ñ## done with the decimal-specific stuff;  hand over' GrestD !of Ñformatting to _ õ_number function; zreturn ' ò(self._sign, intpart, frac
 Pexp, ¡ ò	)

def _dec_from_triple(: ñcoefficient, expon
  9 ±ial=False):‹ ´"""Create añ instance directly,&àout any validaÍ ,C nü 1liz ð (e.g. removal of leadòzeros) or argumenG²conversion.œEThis/  ñor *internal use only*.} 2"""7  :ò = object.__new__(DÕ),  # ]0 = * gint = 9 MH 3is_T Q  8"alŽ Þ r Ó

# Register � € as a kiY2f N#ô(an abstract base class).
# However, do not rQ  itL  Real (becae Ps are.  
#L“eroperablôPfloat^ £"s.ˆ .\ =0

# ‚ Context˜     !

× # _N ‚Manager(º—m m  u òto support localc& #()>P  Set]@copy Û 2 Slied . p in __eSP__() á ØAoresß Ã…previous
? 0xit> 1  ‡ {•1_in  þ , ‰9 Ý  )   . ( =) .¾ (¶S ­  8 G csaved_d c = get C q   D | h  % ·! ã ˆ ö  C ©, t, v, tb‘ 
g 	œ )üûôAainsÄ   f3:�ð J  2 Îpprec -  iS  (=  pin rounŠQ, div P, squ%rroots..	( % -3 â type (how you - ±traps - If  `[excep`] = 1,Ê n   $ ie s àraised when itúÏðd.  Otherwise, a€/ueE âsubstituted in$ flags  - W[ )an‹  e !, & ¿ bis setC ¦ @(Whe�  È ‰ _ ù 0_en[r· 2set6 ðShould be reset byÈr ­up õEmin -   MinimumÆð 
    Emax -   Mðaximum exponent
    capitals - ñ  If 1, 1*10^1 is printed as 1E+1.5 +  YIf 0,+ !e1) Pclamp[ W echange� ñ
s if too high (Default 0)< A"""
	 ðdef __init__(selfk óec=None, rounding EEmin "ax G ¯ 
 ý &  ®  Sflags Ctrap J –_ignored_8 %):- r# Set dà ñ
s; for everything except ; Z and N ,H Óinherit from 1vContext›6try|  í Kdc =. T } šNameError: Bpass† H  }@.preO  2if  `s not ’� else dc( f : «% =¶  iF   
J  æ1 =  #if >   ! : !ax:  ax|  Em : *ax: -& =5'if F  4 J =p † y nE �+if 5  v
¶n
EU = []‡  ¤3 
D 	ˆ    =
 b.copy(Û LAelif5±isinstance() g, dict> . Ò  ! =  á((s, int(s in  !))Y P_sign×+ û B " =. 	é —!isÞ5   – .˜Tkeys(� ,Ï Æ ô ? ô  ô  ô  ô & " =yô l@set_ö“ger_checkv name, valu —min, vmax«Ó. ,inÒ’raise Typwð ("%s must be anÛ€eger" % w 8úif vmin == '-inf'“   ¡ ! >œ 
  „x V$ ð	y ðin [%s, %d]. got: %sƒ („  î ô )˜ Ü š ™ <À ™ !_d, %s™ À  else:
      óif value < vmin or ƒ> vmax:
(  praise V4 ñ Error("%s must be in [%d, %d]. got %s" % (name,a   2ax,e %))_ óreturn object.__setattr__(self, B  w !)
6 @def ' É_signal_dict- &d)¾ ðif not isinstance(d, 2 $  ã Þ NTypeÝ "a j 8  × d¿ pfor keydv  R z  ­ s$  ( z 6Keyy !isµ a-/id~ a 
… ¢ ~ -»d· ¸ß · Öame == 'prec' µ 4 !.R ä_integer_checku 3¦, 1, 'inf'³(el_ OEmin_ ( '-] ?, 0` /ax` (0¿ �capitalsc +1¾ _clamp\ D‹rounding_  � otûuX_( __modeA "# C½` even šñstrings to have consistencyK M ý# among various implementations.1 v  ¤: invalid µ  µ  4mg v @9 
¾`flags'½ (0OtrapÑ; : ˜å 
g ’_ignored_p ŽÂ ø   KelseG `ƒAttribut‡�  4   ó"'decimal.Context';0 ha6 ^A P '%s'z à 	„0del& 	cØ‰  í0canL«be deleted^ ‘# Support|ð	pickling, copy, and deep × Ès_reduceŒ † jq = [sigP `sig, viø  �.items() Î]V  %< À sig, v in só
elf.traps.items() if v]
  �return (s) ¥__class__,  ' ! aprec, , ƒrounding EEmin .axA 6 ƒcapitals+ áclamp, flags, ¨ 1))
} Ádef __repr__ž !):  ‘ õ"""Show the current context."""( Vs = [ì ²s.append('C- (Ð !=% D)d, Ô 4=%( U)s, 'Q  }  'ð 0=%(  : AEmax  ax ç 4=%(   I  (  /)d#  b% vars)‹ Anameà @f.__ â__ for f, v inoYú& ð=[' + ', '.join(S  s) /]'v  tv tv Èv & v ¥� ™ &)'+aclear_Ê *	.’Reset allkˆ to zero,<:lag<F  ÷ùd [ \] = 0ƒ × ƒ 
" ƒ * ƒ   ƒ ß_shallow_copy…  îCs a )  ) R from1Tnc = *û  /º    ÿ@/    Uä G H ‚_ignoredõ£-'ncšOdeepuâ ê  € .³#()3' ; . k _9A__ =BÁ_raise_errorX,qð dition, explana ê = None, *args´±Handles an I _  x !IfÌ à 0 isƒ
° ", Ös' õdefault response.ø òOtherwise, it set1  X ,;  n,ÿ7"or?  Ä@  N€_enabler‰ 1setJ !re N Pexcepì :.  q ¥ O 4he ­ °value after™ @ting’ ‘Á €$r = _conj•_map.get( ‡Àif error in ÷self._ignored_flags:
  ð# Don't touch the % 	# ðreturn error().handle(Z •, *args)
0   .B !s[0 U] = 1 qif not % Dtrap% “ 2Theo òs define how to |  § …mselves.\  Ô ª Ÿcondition® 0# EÕ ðs should only be riske   copies oft … contextt #Ë 
`U = []# CraisÍ €(explanaš 3Cdef > B_all¡[)A"""IÁQ all ]1, i’ ay are d Fd"""v ³i` 9 ”(*_signalµ‚ "  5 1, * † %s†  \ñ÷mutate-- This way,YaWa leavei…originalÑ v# aloneï ¦ Ù1 = ; r+ list(Ñ )S - ÇSregar1U QStop ^1ingº f "ifÇò  and isinstance£ À[0], (tuple,� )… åb " =B &[0k1for 1 in ê2 b.removx ’ð # We inherit object.__hash__, so we must deny tÐ ×aicitly\. v = NoneUQEtinyMÒ A"""R­!s   ÿ (= Emin - prec + 1)Ú 1intJ ., Ý 1 t !op) s òmaximum exponent~ /ax~ , ~ Ñ_set_rounding‡ j, type� ASets<* $ .Å  ò! ,>Æ@ AcurrÅ ‡previousí… [ ö  Often used like:m ä$ =—f.copy(K #Qyou d9Rchang¶@callC  À #®aBp occurs¥ IWmiddlØ€ 
F†ROUND_UP‘ Sval =ŠÀ_sub__(othere°=‘ 3  .[ |  » ±Áill make it % @ up o‘that operÕž	²{¤ A 5ing> ! =£ àv  5   £ãcreate_decimal]ðnum='0'):
       ò2 """Creates a new Decimal instance but using self as context.

   ð"This method implements the to-number operation of 
< U  IBMw �specific) F."""e Tif is— ð (num, str) and  ð
 != num.strip() or '_' in %):o  w areturnÒ ù._raise_error(ConversionSyntax,7  ;  `"trail%por lead ¡whitespace¤ "K �underscor”öre not permitted.")4d =9 ,š=ª)o Âif d._isnan(/@len( Rnt) >bprec - _clamp1Lð	diagnostic info too long°FNaN"¿ ¬rd._fix(Û Ü Qdef c½"_d¶±_from_float) 7, fùì ? 1 a A ùArounÌ{  aá4>>>ŠB = C.(aD=5, S ¶=ROUND_DOWNì ; .Û ö3.1415926535897932B À"('% ' \ —  ÿ traps=[Inexact]7 “ $÷Traceback (most recent call last£ X5...dØ.— f: None   3   .È f) �   # An Ý  �åi e 8  p# Apply¸ ?   Ê� 1# MsT  œ3abs†aã A"""R~?ãabsolute value,'ndcI4 Ñ is negative,• `result  v@same«·  Bminu›  Ñ Œn?  ßnd.  OtherwisX é  N  ` Bplusž ã
W # ,  †ƒExtended.)¸V2.1')
 s G O-100H  H _101.5I  K -L //-1 1åaa = _cÑ0t_o×ð(a, raiseit=True)#
  ñreturn a.__abs__(context=self)
( €def add( �, a, b):  D B"""RD °the sum of  Òtwo operands.I  0 Ò>>> ExtendedCl .] õ Decimal('12'),  u7.00'))p  !19  Y *E+[ 1.01E+4^ 1.02 ` 1­ 2¨ &3'½ ¤ V8), 5/ ì E 5< 0� 5"""Ñ öa = _convert_other(a, raiseit=TrueŠ 2r =$Šdd__(b, ' Ù  öif r is NotImplemented- $ a ð TypeError("Unable toU  � 0 %s þ V" % bŠ KelseQ rd ­d_apply°­î¡str(a._fix$ )è‘canonical 7, a> ësáDsame¨w objectèöAs we do not have different encodings forL pnumber, ¥ƒreceiveda € alreadyeuin its ²  M m‚ m- (^_('2.5a Š ;!if×  isinstance:R 1ïƒ µ requires aG as an argu;&."ø»%a.@ (·dompareµ£C  às values numerç'ly2IºTsignsÇÃ¿2, aD ô representing eachî2r('-1' iU H  ¹0lesB¿an zero, '0&   5 orN ƒnegative5 Oor '^ `greateWa )t uused inN Rplaceä $atº  B ~! c/Pison â2ead+ …e actualG Ö D9The?  ê ñen effected by subtrac9 *fsecond… 5roma    �first andœ "n 
 v‹PaccorQ 7 2 cresult´ L x Hon: œ/ ?is ›% P ¢ š
7  ™6¬…eª13º'-1ðX ÀContext.compúare(Decimal('2.1'),  3)
   &0' ÿ	>>> ExtendedContext.compY 60')E Z '3± 1± -/-3¯ X  H a-Y O1, 2G @ y/1)I ,1Ö 2Ù	’ 5"""Uöa = _convert_other(a, raiseit=Trueà …return aaBb, ctq=self)
W Cdef ƒ€_signal( �, a, b):$  ÓB"""Cªñ s the values of ò
two operands numerically.e  A ôIt's pretty much like{ ò(), but all NaNs ‹ c, with 5ingŽ $ `takingT ñcedence over quietF ~  z<c =~Q   +	ñìá	·Q M¼y =ðc.flags[InvalidOs™tion] = 0Í oprint(0 l 
7 c?NaN?( ‹ #17 ¼ ì OsÅ ¦4 ( 	¶ xí …-®²-¨C  } ä ¢Ww©?tot¨– us-ð
their abstract representaF0ðThis is not like the óstandard compare, which use their numerical
   value. Not$ õ)at a total ordering is defined for all possible abstractO õrepresentations.
 ó>>> ExtendedContext.¨ _r ÷(Decimal('12.73'),  e7.9'))N  6-1' d @-127c d a :P12.30b «   c P0d 0'#´ (, '?.30d ‹$d ?NaNÅ íF1, 2ˆF 8 /1)O 21×2Ñ5"""óöa = _convert_other(a, raiseit=Trueì ‹return ab"b)�4def$|õ_mag(self, a, b):v B"""CNðs two operands usW ÿQ ignoDGsignJLike� ¤, but withb 0's 6 D øed and assumed to be 0.¦  (/
,dpy_abs#
 Rm°s a copy ofmÇ Ô 2theÎ 0set¾ 0µq }O'2.1 ü L /-1Á  M &-1n¥ »0	µCpy_d(°�3  object}2 •iô   4P 0-1.nR   T Àmal(1)
     ó   Decimal('1')
  5""" öa = _convert_other(a, raiseit=True8 ereturnT 1a)
G ñ
def copy_negate(self, a):  t A"""R< 1s a+ ñ of the operand with asign iŽ 2ed.`  B ø>>> ExtendedContext.t è f01.5')µ  "-1 – T : U  T 1D  -œ8a¡ ^Ÿ:, b¢bCopies†Tecondž0's 9 1 to —first oneŸâIn detail, it (ì8 ò“Tequali u )s’ z Å > (ý• '1.50'),½_'7.33(* “ a "'-7 a FÂ  -Ã � Ä /c 5_1, -2ûj/1)L /1§/-2,/7“�b’Udivid.�» ' 0sioã a specified c$ > %de ü '40.3 ž^ 2b^ 6 7^ 5^ 2½2ýø
´ 1V /10W (0.¤1    V :8.0ÆÀmal('4.00')
  ÷>>> ExtendedContext.divide(Decimal('2.400'),  S0'))
D  V1.20' ] +10\ 1 D t 1Z /´ � Ì ´  :E+6] 1.20* ` O5, 5ù R/5)G *5ç5ãŽ 5"""Ø öa = _convert_other(a, raiseit=TrueÛ òr = a.__truediv__(b, c~V=self+ õif r is NotImplemented:w  ƒe ð TypeError("Unable toU  ‘ 0 %s LV" % bc KelseQ �eturn r
g Bdef P_int(  v, a, b)6 A"""D6ñs two numbers and rM ñs the integer part of rresult.l  Ï ‚€ Å 9('2€3€4
X  i'Y 3± 1± /0.Z .V10, 3É�  ?10)L . � „ 3<˜ <-_floor=–?mod9R!± (a // b, aŸ T o8ž{Å	}2.À` 4Û` 	` F8, 4ÁN -W  À('2'), Decim£al('0'))
  ÷>>> ExtendedContext.divmod(8, Decimal(42 ( F'2')# 
W 5"""c öa = _convert_other(a, raiseit=True� ‚r = a.__ƒ r__(b, c— V=self* õif r is NotImplemented:v  à d ð TypeError("Unable toU  � 0 %s Ó V" % bc KelseQ �eturn r
g €def exp(™ F, a), A"""R+ ’s e ** a.2  •  r=c =vVcopy(} ' Á.Emin = -999s A Ž.Emax =   ’ Ð ¸('-Infinityô ,0'p 
= 16 ¯.367879441@ 	iu 5 t ¯2.71828183s Ÿ.69314718H 0 H +8
 • ?&10Uõ §22026.4658x %$Z0 a.n 
�  —4fma— , D�ð a multiplied by* gplus c°øThe first two operands are= @togeÛt, using !y,“  ·”the thirdD  ¾ then added‡ # åresult of that> ¨ dcationf ðadd, all with only on¯ Çnal roundingÌ  Uî +¨3Ó5 7'22Ò` -a -3a ™888565290» š1557.9693 ¿-86087.7578Ü ß1.38435736E+1è 1, 3, 4 7&1N/3)G *3J »çŽ †«‡ A cª¼ �Äis_canonical–�   iúe%= !; ?bwise r WFalseâ°Currently, Nðencoding of a Deócimal instance is always
  ñ"canonical, so this method returns True for any DeR %.
A õ>>> ExtendedContext.is_X (3 •('2.50')):  Y  5""" ”if not is¸ 4(a,z %):'  Â øraise TypeError("{ ´ requires a? ö as an argument."� ð * a¾ )ê ÷def is_finite(self, aŒ A"""R0/àif the operandw: €; otherwµ p WFalsePA« þ  ? ²considered J P if i$@ neiT #in" n´G NaN^ ®2 «D O-0.3ïD 0A 8Inf„ m*D ?NaND %1_îÑa = _convert_ ïÙ0it=7 E 4¤´
¡ý£!< ¥:B I�G -È ÇF É!F Ë
Å ºÌ%f 
Î?nanÉ!õ a qNaN or sNaN;)]|	× ‡ Æ
B ‡Ì	‚ -Ö ’B ÃJ £ ¾_ormalÁ#n<  numberÂÀc = ExtendedóContext.copy()
  ý>>> c.Emin = -999 ^ax =  àis_normal(Deci v'2.50')\ KTrueO 6  @0.1Ey : OFals; 0q 7 O-Infn  ?NaN6 15"""ða = _convert_other(a, raiseit=>E –return a.BcÒq=self)
V Àdef is_qnan( Q, a):  ïB"""RG  \ ñ if the operand is a quiet NaN; ‘ bwise r5 ^.i  O  ;„Extended^} E ’ C x ¼ A sB „ Æ
5 Ç1¦
¹osigned»!�negative¸'| º+E 8-124¼C 	ãB 8>
½vy -8 	n ô1d ö¯& O Qaling³»%s‰ ,	C y!
… ¼	’É „ »J¤ Å#uby s= ¿Lc = {Ù Àc.Emin = -9939
  ü >>> c.Emax = 99 ðis_subnormal(Deci …'2.50'))E UFalse S : ˆ0.1E-999> ?Tru= 0w $H-Infs ± ?NaN9 15""""ða = _convert_other(a, raiseit=F ™return a.Qácontext=self)
Y Àdef is_zero( Q, a):  ëB"""RJ  _ ð if the operand is a : !; � bwise r0 ,.d  J  ß’ExtendedC‡  œ  > "	¨ r ‰ ? a‚ X-0E+2»† Ã» 	0²	i ÷1[æ/lná	sÚùnatural (base e) logarithm oüÚLc = \Vcopy(à   3Pin = Í	Ü  M/ln!Y ¨linity'o < :1.0	@ 08 
¨2.71828183= W 0 F 
1Ü> ¯2.30258509> 
C+Infâ ã E  T7ln(—0 ð j.?ln(W_log10tk/10kr² (n n? O.0014.-3î
< V< ½Th¶ 	¿ ¿0.301029996| «À Decimal('1'3)
  ö
>>> c.log10(Decimal('70')#  ¶1.84509804' A Ÿ+InfinityH  ‡ 0] { -4 14  0¦ 5"""l öa = _convert_other(a, raiseit=TrueM ƒreturn a"ácontext=self)
R �def logb( Q, a):  _Q""" RA ñs the exponent of ”magnitude âoperand's MSD.`  I ÂThe result iK Ôinteger which ` ’ y õost significant digi— † 0 (al @ough® D ¥ ó were truncated to a singleO ùwhile maintainingG Cvaluù a� óand without limit5 ý   ä ) ƒ’ExtendedC¢ °bÑ/25Ò2#F .G jG O0.03-� Ó *!7Í 1¥1N/10; ú ¬1/b(«„ical_and²:, bµ`ApplieýeÛ 0  `tion '¢Ò between each ¸Isœ »< õnds must be bothZ hnumber4 v ˆ ¸ X0'),  ¹ »Y $1®õ² 1² E
Y ²  ²  *10g?101z 10* m;111¾ ` `À †110, 110âÀ Decimal('10S0')
  ö#>>> ExtendedContext.logical_and(Decimal(110), 1101<  ?'10S T110, < R S 5"""² öa = _convert_other(a, raiseit=TrueO ‰return aÓ Bb, cê q=self)
[ Ddef ù i] ( Q, a):!  1A"""I ñ all the digits in ‚operand.S  2 CThe  ¤ must be ai w number/ �	– :F'0')ê  1 åV 1V 
èV – ´  V &"01 ´  ] ‘ñ
W8001N –6.–$or’:, b•qApplies„Åvòtion 'or' between each Cnd'sÀ‚±s²Kbothµs4 ¶	%orD ²ú  (X ÂX ?1')° 1X .° 8‰³  1ÊÁ17 	a _ 0xb®/11µ� ¥ µ  Þ¦ 6?or(®xÀhe logical oðperation 'xor' between each o ó nd's digits.

  4The øs must be both logical number4 ó>>> ExtendedContext.. ø_xor(Decimal('0'),  )x   Y $?1')Y  &1' Y 1² Y 0² 0² "*10gO1010  l:111 G [É?110P110, 4 K 0s « O110)T 5Ÿ Ü § ¨ 5"""´ öa = _convert_other(a, raiseit=TrueP ‰return aEBb, c\b=self)³€def max( …, a, b):t ð"""max compares two valuesÅ erÏrly and s Ps theP GimumPIf ei´ � is a NaN1 n õ general rules apply.Š O= Qwise,, €Ts areŸ 0d a qough by' ¹ F 7  ÔP.  If# yB 5numÍ Pequal – `left-hâ = %ndM ’is chosenx µe result.  ­  G ö (closer to positiveL ¡nfinity) o— jq s,j Â x� Öp)'3‡2Ï3.	Q -µŒ3S /+1.xS 	¦ 7÷ ?NaNS 7ù F1, 2aX2; - /1)D '1k2œˆ 6(Àurn a.max(b,ð context=self)

    def max_mag( �, a, b):  ! ð"""Compares the values numerically with òir sign ignored.b  E Ò>>> ExtendedC… .v åDecimal('7'),  eNaN'))‡  &7' W  ?-10W  n Y 	V1, -2„ ™ /-2š /1)J -10/-2-	” 5"""á öa = _convert_other(a, raiseit=Trueâ …return a²/b,J/inFUmin cJ/woJBand o mwminimumJPIf ei° P oper0 €is a NaN‚n õ general rules apply.ú O= Qwise,, F Ts areŸ 0d a qough by' ¹ F 7 �tion.  If# yB Pequal – `left-h² = %ndM ’is chosenx µe result.  ­  G  ö (closer to negativeL ¡nfinity) o— D two+/s j ª5in(ç3¦2M
Q zÉ/'3S & æ  U 91.0¨ 1U & U ¡4oin(1, C1Bã  >D %8/298‰ 7/?in(3
}a!inv × 8%   /
W -/Õ ' Y }±	Àontext.min_móag(Decimal(1), -2)
   6'1' ô>>> ExtendedContext.min_mag(1, 4 6-2)4  	I 5"""j öa = _convert_other(a, raiseit=TrueM …return av Bb, c‰ q=self)
W  def minus( Q, a):  Ü @"""M ò corresponds to unary prefix= ² in Python.W  ? ð-The operation is evaluated using the same rules as subtract; ˆ E ª  a)N acalculO : @('0'Æ ` whereG E '0'K 1has w €exponentz  Œ h 'ndÃ Æ%us_'1.3'Ä- y J 2 Â c J 1<  -•L.�__neg__(ItultiplyL:, bOm!  	 ries two'7nds{PIf eiã  ô a special KßnÐtgeneralJUpply.2OG Qwise,, çVs are‰ `d toge* 8 e('long# cÉp'), resÉ  ngøða number which may beS= %asO  casum of‡ tlengths 8 }  g" 20™  ”O3.60¤\ 7Y 2f³ 90.9Y ?0.8HO0.72´ ] /-0\ ?-0.@6543ð Å' € ß4.28135971E+1&O7, 7M 9
/7)J -7è 7è4” a&Ý = a.__mul__(ª N  @if ræNotImplemented± $ ð TypeError("Unable¸:! %Æ,V" % blDelseQ À      returnñ r

    def next_minus(self, a):  ! ò,"""Returns the largest representable number smaller than a.b  E õ>>> c = ExtendedContext.copy()l ' Í.Emin = -999 \ax =  V Ð ÆDecimal('1')h  40.9 ' ‡ F oE-1007L  	µ œ B-1.0 3Z   4¦ �InfinityM 9ó _E+999Q 	125"""ö öa = _convert_other(a, raiseit=TrueW rZ7 a.mc=‹)C¥/pl¤‡¥Â¤sÏ [£1«
D $-1†ea $-0 ­ ë£W ¢2¦ ¢
-£¡ ¢1¡3t  	dtowardF?, bI3@closPòto a, in direction M 7s bIÂThe result i‘A ‘Afrom·Ufirstööoperand (but not#   )Äd !in — E Ÿ  dsecond= r, unles  Q as haveK EsameF Wvalueá  ‘*Gci» (U1'),  28W® T Š[ ã˜­ 3· 0· . à2')
        >>õ> c.next_toward(Decimal('1'),  c0'))
   $.9 ' />>U iE-1007[   ^ - y Z B-1.0 3^ ] 0 4» J0.00Z     ú - X 
O0, 19  1ô /0)D '0Ü1Úˆ 5"""ˆöa = _convert_other(a, raiseit=TrueÛ ‰return afñb, context=self)
[ àdef normalize( Q, a):  {5""" ò reduces an operand to its simplest form.[  ? òEssentially a plus: õtion with all trailing zeros removed from the� gresult_  �’ExtendedCÝ .¯ X?2.1‘ ^ M ?-2.š+-2~š ?1.2Ï/1.O  ?-12œ _1.2E+R  "12W]qS %Q 0@6�  6> 9/4¿umber_class7R…-aindicaô ofÒ 8   LØ3The# dis one* `follow*vstrings©u  -sNaNÎ;  - ‰Infinity# è  2SubB GZero + 5 ,+N\ +‚ L  tLc = +Vcopy(å' Ê.Emin = -999A Ž.Emax =  n§ºˆ 'ž '] D ®
A ñ ? À_class(DecimÓal('2.50'))
  •'+Normal' ð	>>> c.number_class(Decim> Š0.1E-999B OSubnE 
> OZero~ -º -: ¹ -¹ [-1E-1„ >-}-? ‰Infinity@- Â9NaN?   9 -* 9  : s* :  ; 	?123¢	5"""> öa = _convert_other(a, raiseit=TrueJ Šreturn aÝácontext=self)
Y �def plus( Q, a):  3ñ"""Plus corresponds to unary prefix; ² in Python.T  = ð(The operation is evaluated using the same rules as add; � @ ¢  a)H acalculI 4 @('0'¹ ` whereA 6 '0f1has l €exponento  � b 'nd¸  ’ExtendedC/.~ 81.3W
 ¼ H -I  J &-1ð† 6-1' >.�__pos__(9Dower:ú, b, modulo=NoneJR§0s aB zp; 0 of5 #to8 ˆ if giveIðWith two arguments, compute a**b.  If aqnegativ5n bBðmust be integral.  Ÿ²result will õexact unless b isB : A andN< 1is ¨e 0canI ¡expressed Q 'lyG ÷ 'precision' digits}ì Ohreeî (ï 3) %-`.  ForŽ ` t; ` form,! p followwprestric–@s on ? bf hold:Íz - all _ ,s XI E - b 4non™! Àat least oneJa or6 Hzero2 \X  " zðhave at most 'preócision' digits

  õ"The result of pow(a, b, modulo) is identical to t0 C óthat would be obtained by computing (a**b) %X U withA Òunbounded pre© P, but} C ðed more efficiently.  I" F Öalways exact.á À>>> c = Exted åContext.copy()> ' Í.Emin = -999 ^ax =  õpower(Decimal('2'),  63')c  &8' x E -F -G 
F -� _0.125‘ 91.7Ø 8Ø ¯69.7575744P 0O ¿0.301029996Y 32.0 Y ‰Infinity_ /-1V 0M "0L 1L "˜ Ä „&) sí -î -O ï $M ð , ñ !2‘Í T ‰L [NaN')R.�3r
.1Ö15 ³ÛV -W 8» ­ á	-U ‰23E12345£ i67E189 %  67 \q1172983
1q?729 \2
h _65537Z  Å…O7, 7ö  Ð823543')
    ð    >>> ExtendedContext.power(Decimal(7), 7)
-    †'823543' K 47, 7  N 24  ''1I 5"""o öa = _convert_other(a, raiseit=TrueM òr = a.__pow__(b, modulo, cÙ V=self/ õif r is NotImplemented:{  î i ð TypeError("Unable toU  • 0 %s É V" % bc KelseQ �eturn r
g Ðdef quantize(ž v, a, b)4 A"""R3 ð s a value equalt €'a' (rou¼ò), having the exponent of 'b'.n  Ñ ÃThe coeffici!  1 `resultñderived from thaD  # ‘left-handº  L óoperand.  It may be � 4 usŒ @currj    @sett 0(if­ O eµ Pis be" ñincreased), multiplied by a positive ® é uten (ifP  µ T &deT o �unchanged>  ’ ?%isN valready~Brigh )tqUnlike ¾  ‘tions, ifo alengthÃ žPafter$ ‡ .H ` would|Bgrea0 Àan precision? »n an Invali¿ Š  Ë!di
 "is\ Õñ This guaranteesp, unles Here  0n e#M ,z Loí jEof aû xValwayoågf@Alsož k8¢will neverê õ Underflow, evenj�° ÷	is subnormal and inexact�  w Nv'2.17')†'0.001')5K(+ 0a '` _ 1^ 2] /O1e+0\ 2º 80E+�wI-InfØ�Infinity¿  .  qh 2e =NaN&ÀtendedContexõt.quantize(Decimal('-0.1'),  c1'))
   6-0' ÿ>>> ExtendedContexZ 
X ?e+5[ E t ^ »+35236450.6g /-2g ?NaNÃ e Q<217Â „O217.‡_  0!) †4 =/e+¼ _.2E+2�`  Þ^ F1, 2Íã1ž /1)I ,1:2u’ 5"""œöa = _convert_other(a, raiseit=Trueß †return aûBb, cµq=self)
X ¡def radix( :  ‚"""Just I ôs 10, as this is83, :I  4 Ã] ™ xÔç r b 3(10b « �emainder¯ y, a, b)µ Rù  © 4e r. ò from integer division. º  Th. @sultÝ t €idue of   4 ¡dend after Åoperation of7½calculatingp  @Âdescribed foŠ 3de-™ P, rou]N qto prec® ð digits if necessary.  º 0sig… –  reÆ 6, i” ”non-zero,Ü @same� Dthatá �original ê 	6is ï  will fail ® S Pcondis^ Ö Q  oÖ (x  is¥ %!onÈ Q 2twox ‘nds wouldx ," O æ¤cannot be ‡7ed)È  $238 & … [ )10ôZ  X -Y À'))
        ó Decimal('-1')
  õ>>> ExtendedContext.remainder(4 †10.2'),  &')E  & \ 	Z ?0.3\ ¸  93.6] 1] ?1.0_22, 6ý  4B 0?22)K - � O 6“– 5"""�öa = _convert_other(a, raiseit=Trueã òr = a.__mod__(b, c*V=self' õif r is NotImplemented:s  sa ð TypeError("Unable toU  � 0 %s Õ V" % bc KelseQ �eturn r
g Edef ¿`_near(¤ v, a, b): A"""R9 l ðbe "a - b * n", where nÌ Àthe integer O @est  Qexacts  Ö ô	value of "x / b" (if two; Ñs are equallyH  E n • even oneM ñ is chosen).  If% `result‘ E  !0 ðn its sign will be K  Rof a. ¬ ÓThis operatio7 `fail uó ? P same� di# Ds asÉ • divisionc @(tha™ M, if& " oä Q  x  nds would x ,s O ½p cannotÒ ·calculated)È º
ûDY('2.1bO-0.9Äa )10` 6Â/-2^ 3¾ » -¼ ^ 5_ :?a 	{?0a D-{ Ê V3, 11Ý¯3(#,3)P Àcimal('3')
   ò$>>> ExtendedContext.remainder_near(3, Decimal(11))
9   6'3' 5"""! öa = _convert_other(a, raiseit=True8 Œreturn a} Bb, c— q=self)
^ °def rotate( �, a, b):  Ÿ A"""RQ 3s a) ‘d copy of, r times.N  2 ð The coefficient( Ïthe result iH    •digits in{   I  ðfirst operand.  p `numberk •places ofG Þ 0ion{ °taken from ^ àabsolute value?   dsecondb ,I Awith7 R �being to qleft if 
C 5 isE ´positive or9 aright ÖGwiseKS­HV'34')W?'8'X"40 `] )12] 9]  % à V y3456789] /-2^ A8912/ e '0d b  ‘ É 0+É Å  Î É !13 6, 1Ûõ 0K 7 6 )T 1L zÐ& ¨ ×/ÏÏsame_quantumÕ <¶4twoöbs haveÌÇame exponent� xÕðnever affected by ei¨C 1ignño. ×Oì	â ÞY'2.17RX0.001ñUFalses Z +	Y  FX 1	U ® %9Inf- F­ 1:7, -‡ð True
        >>ó%> ExtendedContext.same_quantum(Decimal(10000), -1)
  ETrue />>J B $, Q ?-1)J 5"""V ða = _convert_other(a, raiseit=� E Šreturn aÁ 1b)
N ñ	def scaleb (self, a, b):  Ñ A"""RB ñs the first operand after adding òsecond value its exp.j  M ~ Rv'7.50')G'-2')P'0.07* ª ] "0\ „ Z +3Z FE+3' · F1, 4) ú O1E+4A 3 /1)J -1‘4Ž” ­/Bb, c€=žµOhift³0a s( ¡ed copy ofßg times˜ð The coefficient(  í®result is H    edigits'!inI  	60.  p `numberk VplaceG "toµ  x ¡taken from[ ƒabsolutea!of u•,� Bwith!  1 be¦o oleft i@ & i‹ Òpositive or t9 aright t�wise.  D´ Red in* ‡ ˆare zero} ² )348[4Œ  
\ )12\ 9\ 0T y3456789[ É!12- b 1Îa  Ž •u7 ý/'+ŽÃ ?890)8 ?, 2à  L ä6 /8)U &Àtext.shift(88 ó , Decimal(2))
   '% F800' 5""") öa = _convert_other(a, raiseit=True8 ñreturn a.shift(b, context=self)
U �def sqrt( Q, a):  ˜ ô"""Square root of a non-negative number toY ² precision.^  G ò#If the result must be inexact, it is rounded using0   ¥-half-even– —algorithmc €>>> ExteC Cä .Õ X/0'nfD -E   ž F O0.39� z.624499ýQ 1-öó 1Þ 1• 1ˆ‹ .#1 $/1.Ô I 7Õ Ÿ2.6457513Þ Ý ¯3.16227766,2ª�.4142135B  _G9
 !/ eubtrac!:, b$Rg äñdifference betweenËÏtwo operands¶n ÇF.3')6O'1.0ÖO0.23‚^ 3æ0“s^ 2¼ _-0.77½ O8, 5F ý /8)I ,8—5_’ ¤&Î = a.__sub__Ä a  @if rHæNotImplementedÌ $ &ó TypeError("UnableÀ R0 %s |V" % biKelseQ úrì Jðto_eng_string(self, a):
     ð"""Convert to a string, using enginee ð notation if an exponent is needed.

R   E8 9has9 Pwhich? õa multiple of 3.  ThisM Àcan leave up¥ €3 digits €the left9   õdecimal place and mayJ €require * AaddiÏ ðof either one or two trailWzerosÚ ƒThe opersÁ affected by\ wcontext7 Ó>>> ExtendedC rto_eng_r"(Dº µ('123E+1'))· 0'1. %3' O 3O N +;-10O _.3E-9ž "-î 9-12Q  ð !I7E-7N ?700ž %7‰/70æ "0H †0.00E+3'25"""î ba = _c– _o›ö(a, raiseit=Truešreturn a.N‚b=self)f ¤def to_scis  U, a):z  s a numberg scientific í$ 0  ._Ø ?__(ü ÿ integral_exact( QRound\1an 1 'erÜ AWhenä1nd Ö• negative,% Qresul# sEsamek#asd  §quantize()]ƒ  Rgiven Pnd as\ I  ÿc-hand-“ c, 1E+0' k right    X •precisionM  of\ k  ( Á setting; InDc3ved flag·Ðare allowed i4"isX  vä0e rm g@mode taken fromˆ — Óˆ±âU)2.R 'KS )10S  º U .W Bð1.5'))
        DeciÃmal('102')
  ñ>>> ExtendedContext.to_integral_exact(Deci= †-101.5')A  Y (O10E+X o1.0E+6³ '�7.89E+77µ  &?Inf[ —-Infinity» 5"""h öa = _convert_other(a, raiseit=Truee�return a› cµq=self)
^ Hdef Ä`value(! Q, a):$  ÿñ"""Rounds to an õ2er.F  " ñWhen the operand has a negative exponent,% ‘result is Esamek �as using ¢quantize()X Gtion Rgiven And aN I £left-hand-“ c, 1E+0' \ righ   ¸  Ä •precisionM !of� J D ( õ setting, except that no flags willK  be. €.  The rV î Amode‘aken fromq ´i‡Ãl?2.1t�S ?100S  ç ¨ O100.W B…ÝÝ7Y Ý8Z À-& À% Ä  ÝJè )Ý#Bñmethod name changed, but we provide also- ñold one, for compatibility+. =9ó

class _WorkRep(objectHó__slots__ = ('sign','int','expû #  �: 0 or 1u #n :   qexp:  N© iS’or string� Ö __u#__Í%=3 Ž  ´1if   xð None:
         ÷   self.sign = None
   ~int = 0 <exp5 þelif isinstance(value, Decimal):E { )  ._ $ ‚ 2intP n._int)' � J 5exp" Jelse{ �# assert¬  _tuple^   › 1 = _ 5[0]]  /(  1   Ÿ A[2]
A Ðdef __repr__(F #Òreturn "(%r,  Q)" % ( ³,¾3int
 �exp)



W ð	normalize(op1, op2, precÍg D"""N& $s ' ð to have the same » òand length of coefficient.Ë ñDone during addition.å 1"""  ifc .M <�  
 — tmN1op2,  Vpother =5  
Ç0 1 
0 2“ Q# Let½ �= min(tmpt ` - 1,  Áadjusted() -Pision  )» a# ThenÐ png 10**¾  to> G has#òffect (after roundingH nD ôany positive quantity smaller thang ±; similarlyã Ñ# for subtrac^P  So V)/isG ¢ we replacÜ”# it withh à.  This avoidsÚ %€ @gettØ’too large`tmp_le:qlen(strb �ø A "  .$  P=u +¨-Ÿ: ˜B - 2T ï  "+ O  E P- 1 <íS >'× =/ +  ) ‘*= 10 ** Ë X G \ g +   =}  r°F0

# ñ Integer arithmetic funÁðs used by ln, log10,“  l€__pow__ E ð#

_nbits = int.bit 3gthìdaö_lshift_exact(n, eé` Given?  � 1s nf 3e, ¸ 2n * Reit's a.  , | î°The computa‹` is de# ed?L!  95p powers?1OÓunnecessarilyZ _>>> _Ð B3, 4B3000B . d00, -9 C)  #ë sÉ øœfn == 0>h Ù?e >" : *E #1_# 8"stP divi' * _1str0  Obabs(n)ô   1val o _n¸ ·.rstrip('0'4 Ç  Ü ÚÐval_n < -e elôTse n // 10**-e

def _sqrt_nearest(n, a):
    """Closest integer to the square root of the positive + �n.  a isK ÿ	an initial approximationQ  m.  AnyP G ñwill do for a, but| c¦ rn Q  P of n( C ñfaster convergence V Abe.
! 1""" i6 P<= 0 m  
  ðraise ValueError("Both arguments‡ 	X¥ should beÚ 2.")r 1b=0r Æwhile a != bk `b, a =ï ¡a--n//a>>1/ ƒreturn aÆVrshifÈ1x,  ÌaGiven ŠÍøx and a nonnegat¾< #, d a!stw à¡to x / 2**, ð; use round-to-el pin case�La tib²b, q = 1 <<¬ b, x >> l  ðq + (2*(x & (b-1)) “q&1) > b)5divÆ ú Æ !a/X b’ç"s;É Ç Ê � iEÒ 
áq, r = divmod(… ; 
È r¾ öilog(x, M, L = 8¾ I|9!M*4 p/M), wi�bsolute e”  b�Aable„  ¿ �erms only“3x/MópÂ"s !M<� c DM * “ b.  ForÌ h00.1E0x/M  10’p differ†A bbetweeh
b  © zòexact result is at most 22q G Au 01.0n u .w D q15.  InC bÏ ½s¨ Âse are upperW G  kB; itG’usually buÐmuch smaller.Z] ð# The basic algorithmŠ  â àfollowing: letP 1p7 0unc7F  log1p(x) =' p(1+x). \ n 3x/M  1p((x-M)/M!  We¬D  W GreduX     F @1p(yF 2m  @/(1+2r(1+y)))-  ñ repeatedly until" ²  ê 0 (<@B-L iv4# aÃv\ ®  F. €y we can¾ Z ÂTaylor serieh£# expansioQ ™ Ì à~ y - y**2/2 +	 ò3/3 - ... - (-y)**T/T:  ° truncatingr0T sØ@that? TÑ benough…C who|‚# computôÐis carried ou\  aÒm•Ñfixed-point aSetic,‡ æð real number z be— çrepresented byçÐ
    # approxöNimation to z*M.  To avoid loss of precision, the y below
    # is actually an integer approxi\ ð2**R*y*M, where R isO G `numbern Preduc’ ñs performed so far.
. qy = x-M µ# argument 9 o; R = R =  ' 0
 ñwhile (R <= L and abs(y) << L-R >= M or,  ø j   R >+ a>> R-L+ %):*  ­ ò_div_nearest((M*X %1,% S  •M + _sqrt7 ¶M*(M+_rshif µy, R)), M))L bR += 1*ñ# Taylor series with T terms1 óT = -int(-10*len(str(M))//(3*LV yu ? =  H w æ BM, T” ÷
for k in range(T-1, 0, -1%? Yk) - :ˆ  *wð à jreturn& 2w*y! ódef _dlog10(c, e, ps „"""Given® s   ÷p$0c >¥ pÎ¶0, compute áö aåƒ10**p * u * 2e),T  anU olI @erroîG ðt most 1.  AssumeBat cA  *ònot exactly 1."""¦# increase¦a by 2;´ pensate ƒ@this �dividingz à# final result "10pF2e Uwrite� Aas dš fÙ beitheróQ#   f6O1Qd 410,A$ A<= 0$ '0.& .˜ AThus¸ Pclose¥r1, f = § Dl = ·c¯  pe+l - ( R>= 1)É @if pÙ«  n@M = ¥pw   •k = e+p-f Aif kÒ 7  ) 2c *< k* Lelse% =ž!c,p #-k“  J Plog_dA@ilog«RM) # #Õ< 5 + 22 = 27i  2  103 j˜_digits(p8 1. ` ¡ C d� 	 "10¬Ž àtenpower = f*M�  {Q 
ä  =  [ 0² :2.3} O 	Ñf	¸ 20.5®Ý p N + dC E0)

î Aì!ä (�âKIâH. Thö	'isüdµ#K atqð end with a diviñ	sion by 100.
    p += 2
 ñ# rewrite c*10**e as d ðf with either f >= 0 and 1 <= d 310,F o" <" '0.$ ð.  Then we can compute n ƒp * log(| )M )as Bd) + #*f1 210)Ì âl = len(str(c)A °f = e+l - ( T>= 1)î ~  approximat#to`  � 3d),ú ‘rror < 27˜ ‘if p > 0:  Iki 5p-f Aif k)%  ) Ac *=b k* Lelse% ñ= _div_nearest(c,4 �-k)  # eŽ  ofx‚0.5 in cÖ  b ó# _ilog magnifies existing9  /  õa factor of at most 10— rlog_d =N ‚ %p)€ ¤< 5 + 22 =
É 1# p¡ v: just g e the whol
  ˜ Sby 0;ž m< 2.31† 0á #5P ·f« p*¹,10º"11&Fif fmWextra8–abs(f)))-� ì"+ *  ù> nŽ0in ’ñ_log10_digits(p+7 Ð) < |f| * 1 =
 Þ B  after divi¡,	@|f|/E 0 + ìF< 10 §  J f~ @_ten¶? f* ˜ V_ 0 F 
Æ  X  
$ 
  Ý ¥ôin sum < 11+27 = 38é
ö v < 0.38Û G jreturnn +2 _dÆ À0)

class _L‚ò Memoize(object)´A"""C$ $toG�, store,Îòallow retrieval of, Ê #1the” €constant} @(10) ¡.302585...ã5is & Áis needed by@ ÅDecimal.ln,   ´  1exp‘  ±__pow__."""C ódef __init__(selfá  ­  .¶ B= "2š ò0929940456840179914546843642076011014886"g a 2getG b 7, pe ð"""Given an integer@= 0,@ ´`floor(¿$p)”.^  § ÑFor example, ´ p #3)E  s ¿ ¹ 5    #›2areÅd±ða string, for quickŒ0ver\1 toAA º !in’0cas‘ôat we've already+‡d enoughA  ;> Hd• ÷	should always be correct= ð(truncated, not roun'3to ÷Ù ­ †<r  Àraise ValueEC("p z ðbe nonnegative")

     ðif p >= len(self.digits):
  ð# compute p+3, p+6 r9, ... 2 û; continue until atC óleast one of the extra? ¹ is nonzero7 $ 9= 3 ªwhile True¨  ° ¬ > ¡ ù	, correct to within 1ulpY  A ±M = 10**(p+@ =+2)$ S þ = str(_div_nearest(_ilog(10*M, M), 100)@ #ifø ![-d ¢:] != '0'* q  ™ ]break 1 , +#ó# keep all reliables ð
 so far; remove trailing }s` ¤# and next�D 	% 7" =  õs.rstrip('0')[:-1]2 ¨return intpõ[:p+1])

_log10_` _L ÒMemoize().get ó

def _iexp(x, M, L=8·q"""Givef qegers xÉ  “ð > 0, such that x/M| sm*±in absolute± Pvalue9ýaR ñ approximation to M*Š á/M).  For 0 <=E  b q<= 2.4,÷b ‘ error in `result‹ ñbounded by 60 (andG Àis usually m¾ ² �er)."""
" À# Algorithm:“ ´ ™ óz) for a real number z, first divide zG ‘by a suit6ppower R¶2<7ó|z/2**R| < 2**-L.  ThenA z 2m1(+ A) = Š 9 €) - 1 usx Û s TaylorE Rserie�#  pexpm1(xO ²x + x**2/2!
 03/3
 2...1  � Now useh‚identity   W  œ Am1(2Y d $*(
 Š xR timesg Ç psequencÜ ¦ ú ,g M  b(R-1))A,|  &)
 $).ÑiFind R¯ w0/M R y[ ôR = _nbits((x<<L)//M)D U Oñ.  (2**L)**T > M? PT = -’A-10*
Ãtr(M))//(3*L¿yd êBx, TÚÑMshift = M<<RR  liÛ range(T-1,w#-1¢ rQ #*(J c+ y),  5* iÌ ‚Expansioi f kf Rf  g F � $(kÈ� Ry*(y+0  { ·3M+yydÌsc, e, pn C"""C'.an"1 *Z1e),‚ñ p decimal places of?Ppreciç 	R5s6ÐUd, f Å:ë ·0-1)d  o  p,þY À  (d-1)*10**ñ	f < exp(c*10**e) < (d+1) ò	f

    In other words, d ú is an approximation toO awith pG ñ
digits of precision, and $ Ðan error in d% ñat most 1.  This isG  al ñ, but not quite, the same as M ñbeing < 1ulp: when dF  = ð W(p-1)/ °could be upÊ ¢10 ulp."""	ò# we'll call iexp» $M N €+2), givu Op+3 ó  ~ dp += 2U ò compute log(10)U Vextra*° = adjustedaPonent&¸V 3 ñ= max(0, e + len(str(c)) - 1)( �q = p + 0 … Pquoti] Z #/(— B) =  U(e+q) 1q),[ p# round Adown ±shift = e+q 2if  Q>= 0:  fc e   Oelse'  //Ã-)  » ò , rem = divmod(U ’, _log10_�D(q))÷ `reduce5 °ainder backü†originalƒ� ^ ñ_div_nearest(rem,NPZ ��in resul­_4s< 120; ïPafter¯ s < 0.62k Yturn l B r  p)z P00), ý ! -Øò3

def _dpower(xc, xe, yc, ye, p)Nö"""Given integers * ˜yppresentÒâDecimals x = x xe+ ° Ry = y  g Ö�x**y.  ReÎ €s a pair»w ò(c, e) such that:� U£b<= c <gp6s S  (c-­@e < l T < (cÂeK iÂ¦ eÂG –pÃn ºcÙ º(»9c‡ =ówe can only guarantee[@< 10À“WBsumee  xÿ qpositivÆOPequal1g  y& �nonzero.€ fFind bº²bUd<= |y|´b: 5b =’Óabs(yc))) + y§#xjl`@(-p-P ,“ Òp+b+1 places 9 ÷d˜a pointi €lxc = _d»Õ= $# ž¡product y*,  { ;yc*~ 0+ye p7 “ J| ÷"e-â Üp�  U  8 ª 
Ý( 	ñ5  æ"**ëÃ 0if . 	C   °Tfer ax Rð isn't exactly 1; this makses it
  õ*# easier to compute a correctly rounded result in __pow__B õ*if ((len(str(xc)) + xe >= 1) == (yc > 0)): # if x**y > 1:B  ‹ õcoeff, exp = 10**(p-1)+1, 1-p* Oelse8 Sp-1, 3 
/ 	c ð_dexp(pc, -(p+1),  i , ñ = _div_nearest( U, 10)(  ° Q+= 1
 sreturn ( ôexp

def _log10_lb(c,[qion = {7   ð'1': 100, '2': 7	 à3': 53, '4': 4 v5': 31,6 P6': 2# 7? P6, '8	  , 9> "})/E"""CÞplower bÚ@ forw *£ 1(c) ñ	a positive integer c."""x ’if c <= 0Z  ½ ðraise ValueError("The argument[ð should be nonnegag "."S€str_c = Kc TC100*eW_c) -H[6 p[0]]

# ð Helper Functions   ¼áconvert_other( !, ñ óit=False, allow_floa v?  9  
‚Decimal.2ðVerifies that it's ok'  us|ñ an implicit construÓ .‹(If{ t is tru�  0 @versjQfrom   q;  this? pis usedÕ1theÿóarison methods (__eq__ and friends)º ¤isinstance å #} .f 8 >int4 M \ iù  Ÿ M ð O .´Z ˜ Þà4Typß`Unable¨0 %s « 2" %ñ® Ã€NotImple+ed_@for_€�b(self,D Ò, equality_oprÕ ³"""Given a y  ‰ A ·ô a Python objectT ” ò ýa pair (s, o) ofM bs such£“"s op o" Dsequivalç"w  !  ."M nyU  b6d{ ïoperators "op"Z* z ,Þ [ # òP  with a Ra&al(À(also includïsb#H¡op n/d <=>  *d0n (=nf E)Es, d>)§ð# A NaN or infinity canáleft unchanged§ ñout affecting the*#; �] iH“_numbers.ñ Àl):
        ÷if not self._is_special:
    ð = _dec_from_triple( y._sign,0 ; 	 sstr(int8 ÿ
int) * other.denominator)M ³ Eexp)| areturnÍ ¢, Decimal(` Qnumer^ 
/ ñ # Comparisons with float and complex types.  == !!= 5 G ; 1 ò	numbers should succeed, ™ `ing eiï ã True or FalseJ ñas appropriate.  O+  \ s H P NotI¢ qmented.@ áif equality_op° ¢isinstance3, _¡ .ý Alex)( "@imagê 0ü # =£Drealk [ >)< Ócontext = get («
¯ 7  0. €.flags[F— Op¾�ion] = 1†  * Oelse< Ú_raise_error(C _`"stricð mantics for mix²Ù s)Sæs are enabled"Ô æ
.0D …/ + 
É,Ù@


# € Setup S›Rfic C[ s   ó

# The default e` protoé„ used by_ °()
# Is muté Ô, so that new> õs can have differentb ’values

Dr ¶ % =a Çöprec=28, rounding=ROUND_HALF_EVEN³ötraps=[DivisionByZero, Overflow, Invalid1< P6=[] aEmax=9  Ain=- 9 §capitals=1 €lamp=0
)]öPre-made alternate&o^Athe eðfication
# Don't change these;  ’rL0be ‡0 toa0ect" Fse
#f  »' ðreproduce results ŒÍ$ i@„ `s
# ofR œ �.

Basic³9²&UP#°0, CV 62UndÖ²Ä¿)

Extended¨ $Zl ‹Acrud@pars ;/ngŒð#
#
# Regular expresÎ ñ
^ ·3ic f p.  Addi7!alûm!s:Q q1. Unco Ìð two '\s*' lines<ðallow leading anö8d/or trailing
# whitespace.  But note that the specification disallows 7 ð in
# a numeric string.
#
# 2. For finite" Ábers (not in Ñies and NaNs)r pbody of #
#4 € between 0 opŒ qal sign=  ©  ðexponent must haveŸ ñt least one decimal digit, possibly afterc "  point.  ThE ðlookahead expressò2'(?=\d|\.\d)' checks this.

import re
_parser = re.compile(r"""   0# Aì Bð  consists of:
#' @\s*
 @(?P<ý p>[-+])?  J# an$@, fo¶ò ed by either...K   > È    Q# ...à¹ber (with aP H)I ¦P<int>\d*)F @   #Žuing a (uöempty) integer partJ  \.ë AfracN ë #Ò ð  , 
K EJ 1exp4R?\d+)N K I5, o/|œ @Inf(×yG é /náy?  Ž  ÃIal>sB ? (Ñ!lyéa°e6NaNs 
 #K¦  g Adiag?
' Èˆ - `nosticÁ o%)p\Z
""",Ë�VERBOSE | úIGNORECASE).match

_all_zerosûT'0*$'& »_exact_half& 5'  
# Á PEP3101 sup^@funcò s    
#× ? i_Qis seP  ­ñ e little to do 3 mDB‘
# class,†ðcould potentially be reused or adapted for oƒ@ purWePythonþR eDpat want} `implemÖ¡__format__bAP 4mat© er  ¡  ³qs like:/ ð  [[fill]align][ƒð][#][0][minimumwidth][,][.preciæƒ][type]
Èƒ Šer_regex½ Þ`\A
(?:Ž ‰ y D>.)? „ À>[<>=^])
)?
%  ’  ¤# ] calt>\#  KSpad>0 ´ `>(?!0)ÚJ ñ thousands_sep>,2 :RÙ 5>0|6 !  P<ê  >[eEfFgGn%† ðð|re.DOTALL)

delãPólocale module is only needü @0'n'§	¸g re¨ í îGcode¬ quQqhappily˜@out Î@so wVð	don't care too much if lòocale isn't present.
try:
    import l& Bas _ ‘
except I  RError1 ÷pass

def _parse_format_specifier( ,O ¢conv=None)F @"""P> ò and validate a <  M !.
¦ ý	Turns a standard numeric0 ñ into a dict, with theD òfollowing entries:\ q  fill: ð character to pad field Ñminimum widthQ ‚  align: ð
ment type, either '<', '> “=' or '^'9 s8 ( +# -#  # p o Ð: nonnegativeã €eger givÎ ) 	™ ð
zeropad: boolean, indicat1 1whe  â % 1 s� ðthousands_sep: str6 ¥to use as   ± separator,ß » ¤grouping: 
  ¨8 s™   3mat~  g Cd by” : Üdecimal_point™ Cfor !  ! 5 ŸprecisionE
& Ê  ©?  Ò€: one ofK"¶s 'eEfFgG%'5 6 1""" ?m =%È_regex.match1)9 €if m is ˆ 0 «±raise Value�A("In;A6S: " + ™)ëQ# getÆ   aionaryq w_ Q = m.¸  (:  "Ðpad; defaults` 5 Ä `.  If .  @Adingb #Ð ¡requested,…  x= kâs should be ab­ ý , =t  m ›  [' !']_ B    ! â  ['ž „pad'] = ~S  ais notƒ•E ¢"if<   Æ ÃFFillT¢ conflicts¼2'0'K =  R" in ˜  
= "if¯ �à ¤ Aç ÜŸ    £ Ÿ ' …Ü" =Q =õ# PEP 3101 originallyû Sd thaã¨ï ¾ Z0#`ðleft;  it was la÷SagreeF aright-Fòed makes more sensU#|Ž -ñs.  See http://bugs.python.org/issue6857.ˆ 	ô j •
 T$>'»x <a handlc2'-'„ ð, '' for positiveñ
    if format_dict['sign'] is None:$  ( % a= '-'
# ò# minimumwidth defaults to 0; precision remain]  | ‘not givenF 	e Q Ÿ'] = int(" 	qor '0')J × ‚ Ü  w à . x   )ÿ q P type@@'g' “ —G' then añof 0 makes littleµ ð# sense; convert itA€1.  Same0 d Áunspecified.C ‡ Ï« V == 0Ñ*  ·   º l I  vn 'gGn'H 	s $ 1!ø%determine thousands separator, grouping, and decimal! 1andâ ñ	# add appropriate entriel³ - å H== 'Ä Æ# apart fromt  s,& ñ behaves just like 'g'^ û %="  if _locale×  a
A! =/ .6 (Ö q Ó NB_sepÁÞ 9 ð	raise ValueError("ExpliceD ý  „Õflicts with "ò  L  C"'n'–nQ ›cr: " + _ Î ±%['Ë 
 9 ‘ 	D H2W&[' : tn_point?  D 7els#šú	½ 'jÍ ‘ = [3, 0]’  ™	S · S = '.´Tretur®çs

def _A `align(q, body,Ò)º@"""G¸ñ an unpadded, non-7 ðed numeric string 'C 'Þ S ®    !',Ù J  /  J Ament�o>g=the5œ  	 r É€ionary 'nñ' (as produced by| Tparseë  ' = ").°"""ñð# how much extra space do we  � Aplay&?Z ¹! =™ ([' '¬Efill      =  (*(; R - le•)  X)ˆ2T  U ðif align == '<':
    ðresult = sign + body + padding
$ pelif al  q== '>':   > 0 ( +H ' > => | E  † > ^> ³half = len(9 A)//26 ›  [:1 ]¢ ê [ !:]? Gelseä òaise ValueError('UnrecognisedÑment field')
D rreturn !ñ

def _group_lengths( Bing)k ô"""Convert a localeconv-style - ñ into a (possibly infinite)w °iterable of+ òegers representingJ  6 … .­ 1"""> S# The´ W from‰ D()['† ó
'], and the input to thisF ðfunction, should beÕ 9ist˜ Qin on« 4the; Pollow© ²three forms"## ö  (1) an empty list, or f2) non  u ppositiv° tB+ [0ðq#   (3)J , “¡.CHAR_MAX]s t ) yðtools import chain,|1eat( bif not�2ingÕ «,[Ž 1j‘[-1] == 0p ì m) >= 2E w \T[:-1]…  B-2])0m _ì e „ _ Ü 3u3 Ô atÛ 7$öinsert_thousands_sep(digits, spec, min_width=1<I8  8 ° separators	 4F s stringù Q � is a di²äary whose keys¿•include '_  — '”þ �; typicalš1t's#Z2arsÜÚ ‡ qifier u r_parse_(_ µ  ¤ ¨ ‘word argu‡Bgivex sminimumí € h’ À, which will£ GQed on¶ ðleft with zeros ¿ƒecessaryŠ DIf n ,5  + =Q adds¨‰xtra '0'[ !to<Pavoid earÂò.  For example, $ŸÒcommas every 5ê ø¢ '123456',Ê 7A=8, )„ r'0,123,) 0eveÔough that hasC9ù  1: 0sep<Kpec[Í*%  "']{ Cs = þ�for l in. 7–if l <= 0   r°"d Ã Àth should beÓ positive")
  ó2# max(..., 1) forces at least 1 digit to the left of a separator
H � l = min(O Alen(9 0s), `_widthb 6, l| ÷groups.append('0'*(l - > 2) +‚ fs[-l:]; ^ $ = E:-l]Ô 2minr U -= l cif not2 F and› e <= 0:*  Ô Ubreak 
S ben(sepŽ Felse: 7ax(Ä S þ $`return�ò .join(reversed(P ð))

def _format_sign(is_negaûr, spec)² Ð"""Determine * ñ  character."""
¬ 7if @ 9  !‰ 1'-'' Aelif\  ['J ­'] in ' +'2  � % ; CX 'É jnumberË Òintpart, frac
 <expã F
2 a C q, givenÑó following data:ñ .‘: true if. @ F is N ÿa falseË ’ P: strW $ofp that must ð‘ar beforeY Ñdecimal pointH Ñ I 
¡come afterF > òexp: exponent, as an intege± ƒð: dictionary result² �from pars  õIÛRifier%�This funB Q uses„ "in/  ioq 5 4 to`insert¼=4s (û Q™—thousands, o ¤1matn  i/	 ù  �add trailÑ 0'%'A >   2typ¹   zero-padî“necessaryD Afill™ ^align" - ’ / =~C%if¸1 or,t['alt']0 ! =  0_íE'] +# U †exp != 0U  æ ‘'eE‘eïð = {'E': 'E', 'e
 e
 G
  g
 @e'}[8"['O p­ò  += "{0}{1:+}".
(e ,�Â'G g == '%• N 5'%'× |  ¦8pad$œ%qminimumv#']SX )  «’  ÄsO 0 Õ ØÂ_ S_sep(  xï)¼ Ñ’C(~ ,” ·+œ C P)


# ð Useful Constants l Pernalsp only) *  À###

# Reusaÿ"ble defaults
_Infinity = Decimal('Inf')
_Negative# -$ (aN: 0NaN: GZero w0)
_One 1_ 
 ä-1)

# _Signed{ ´[sign] is i° €w/ that  
/ E = (Ú -, Ê c ñConstants related to the hash implementation;  0(x)„ ¡based
# on0 Preduc& û of x modulo _PyHASH_MODULUS
 p = sys.l a_info.7 Aus
#j p values“ Àuse for posi�c and nœBies, 5ansl =INFh 5inf   NA¾
ˆ 1nan�¿ P10INVõ  pinverseè $10é   _primeó D œ= pow(10,( M - 2 P)
del#»
"""
Python• ‡  } "io‹ !e., ¤
import os
 4abc Ucodec Terrno Estat y‰II À_thread inst 2of  0ing¡ õe startup cost
from 9 H ð	allocate_lock as Lock
ifæ ñ.platform in {'win32', 'cygwin'}:
    V `msvcrt æ psetmodeO _ R
else1  „ = None
à "io¢ $ioH ó(__all__, SEEK_SET
 3CUR
 ó END)

valid_seek_flags = {0, 1, 2}  # HardwiredÃ á Ñhasattr(os, '` rHOLE') ¦ S ….add(os.* )þ ' 
ADATA×ð6open() uses st_blksize whenever we can
DEFAULT_BUFFER_SIZE = 8 * 1024É Pbytesð NOTE: Base clasY ð	defined here are registe÷ Awithà"official" ABCQ7 ðin io.py. We don't° ð real inheritance though, becaw. `want
#}/ q CÍ¶ s.¿ aRebindCð compatibility
BˆÛingIOError =   > @Does­ !IOÑfinalizer logu Qexcepþi $÷ose() method fails?
# The - `s igno1´silently by™ @reletðbuild.
_IOBASE_EMITS_UNRAISABL¶(`ñsys, "gettotalrefcount") ore±P.dev_4A)
# ß 3Àcheck its 'eps' arguÿ?
_CHECK_ERRORS = � q


def S Pfile,œðe="r", buffering=-1, encod  š", s = ï ñ‚ newline á closefd=True,d !er 1):
4 �r"""Open { ðreturn a stream.  ðLRaise OSError upon failure.

    file is either a text or byte string giving the name (and  ApathG 0if  N an't in Àcurrent workD Çdirectory) o4 !toG �be opened‚ ¢an integer¦ «descriptor; 1 be> íwrapped. (If a5  isÉ `en, itó ¡closed whe« C Pretur€ —I/O objec+ ‘, unless :  fdE âset to False.)T1modTÃan optional Játhat specifies". qn which F‘ Ð. It defaultsp 3'r'1 Qmeans6� for readh  Ê ^ 0. OÝP ñcommon values are 'w': @writ: q(trunca Ôf5 al_ yI ²exists), 'x@ àexclusive crea÷  §Qa new‹ , 6"'a.  ªnª M (ý òon some Unix systems, â :@all ¨  » Pppend ¥   PP Baregard±  ��seek posi¦ R). In÷Ðmode, if enco� 1 isP &no¶ú" uDàis platform de™ went. (F’1andL  À  h1raweÐs use binary ‚ (Vleaveˆ $un5bd.) Thñ‘available8 Ï:ƒ=  	  $³ ñCharacter Meaning -  	  $N  Ò ‘ Ì(ú)) "w'( ) S/, »Rfirst: x: ¢&e �t l ç HS 8 a8 "  %, ÈŠö N2it .N bN ô t …ü +" Š ba diskh  – 2upd¸(¨ e sË >UB �universal¢2linEÂ (deprecated2 9K.å 4TheÊ¶ Ea'rt' (Ó  Ç ½  0). E+arandomH qaccess,1*Q'w+b'sÎfBto 0t,>lF&'r9  L+ uwithoutR0on.wîo @implÃ ?Ûrn ~ q `FileE#{`] HŠ`PythonÒ {áuishes betweenãæ ed[ ß &J!s,Ðeven when theð underlying operat
 ðsystem doesn't. Files  ðned in
    binary mode (append; ¢'b' to the òargument) return contents asH  yt\ ðbjects without any decoT ’. In textR (\ ò default, or whe“ r't' is � /edˆ ,œ † !of �file are“ ª Òed as strings6 b¬ 0havê ¢been firstª Ped us aE °platform-debent enÑ  µ +  Ë –specified  ¡if given.
K 2'U'û °is deprecatž ònd will raise an exception in future versionmðof Python.  It has no effect4  ð 3.  Use newlineI 11rol� 0uniV $al! sŸ ® Pbuffe5Œ1n o’ Òal integer usœ1set|1 qpolicy.e `Pass 0{ vswitch ' ñ off (only allow”�A), 19 QelectN Ç B > `usableø ^`), andL® >L @indiwN ·ðize of a fixed-s Schunkª p.  Whenay " i‘ç]Ó>  IP work/0 foï "s:2* Bƒ ¼s½; – !s;m§ õ— Ò  ­dchosenÆÑ heuristic tr!‘to determ(he=rdevice'Ö �  "block n "R@fallÔ òback on `io.DEFAULT_BUFFER_SIZE`ý`  On m‹€[õðtypically be 4096VR8192 ¦Clong’ò * "Interactive"L6( fG´ich isatty(¯ss True)$Juse Jˆ.  OtherT  &  "¿pdescrib±2bovb   r Cƒ « #"is¯atr namj T   E%eü  e6 ®  V á. This should 2"be€iS ' $e €H  «£É {“endent, b£, `suppor–#bycb can bð ±passed.  Se¢ a codec71ule Þ @listTN a s Prrors­aZ¥d that OVs howSe9  arÎ!àbe handled---t(�10not]k(inb . ŸG '} !ctö‰p ValueEr “j#re½ Ú  š K Ú 0Non¤ 
 ª)÷ T� 'ignore~  J T ps. (Notq1at   ×Ðencoding erroð:rs can lead to data loss.)
    See the documentation for codecs.register  ‘a list of4 ‘permittedJ ñ	encoding error strings.
 Ãnewline is a � controll4 ãhow universal . ñs works (it onlyJ pappliesÌ átext mode). Itç ñbe None, '', '\n ðr', and '\r\n'. - Z Q ¢s follows:¬ ä* On input, if�  » [ ¨   … 1 isP ñ  enabled. Lines in.R ¥ 0end Ÿ #orž ª H ðthese are translate9 !toÚ   before beAqreturneä3theB Ðcaller. If itÂ  À D  ¹ `, but °G  enÙs‹ i  c 6 un¤ p £has any ofH  iòother legal values,mq d  í  t^nô !byBSgivenK _.  ®  ¨  Ê ¦ îOoutpï Â  «à characters wrøn� þ šòhe system defaulOð  separator, os.´ 0sep/F ù Â  ª%noú –°takes place4 š ¥ –J g % Ê l FH  ³x¶Ð€closedfdª aa bool’   aFalse,œpunderly§ñfile descriptor willj òbe kept open whe4/ 1is X ñd. This does not, !a * 0namcQ µ  ÷Àmust be Truex0tha-#seÌ 1TheKQy crepM ie �n-inheritÒ0 �A custom¬ !erÓð be used by passë a 8 P as *Ù 0er*Ä ž k yˆ Qobjec½tPobtaié!bya 1ingð a € with (*< Å*, *flags*).‚  !1 anÆ ?G œ(Ê 0os.¾ Ç q resultÝ@func6ñality similar toP D  ;)A M 2() ƒ   ¬  è �whose typ(rpends o eñY Ñthrough whichg�standardÍ  × rÍ`s such½ 0reaÈ Â; bpperform¶WgPpen()ßØ toQ #n ii
 a ('w',– 'l0'wtxr `etc.),~ï °TextIOWrapp�p f J j abinary§RL ðed class varies:Ý ä Ð binary
    mó-ode, it returns a BufferedReader; in write binary and append ¯
    modesJ W? !r,: ‚in read/S  6 5 K ƒ qandom.
 ð#It is also possible to use a string or bytearray aÎ `file f 1othH    ,  È  † ƒing. ForD 1s SL �IO can beb Pd likh  O F `openedaa textã n 0yte B K d .h 1""" Pif no�instance(‹ q, int):"  †  Á = os.fspath% ) A Q(str,6 ¿7nt)O ð
raise TypeError("invalid h q: %r" % c  È ,YU  - U   U b¡<ingþ ¯ 2 _  d Pencod!isiANone±v( Ö 1 {  z  [sÜ k x & v / t  r  Z€s = set(  !ifÁ1s - °"axrwb+tU")T2len, 4 >  sÓLValu) b †   n PcreatmP= "x"E  s¨ŸK= "r ®[ = "w ‘S a 5updo + ¼K= "t ‰K= "b Vif "U }5if Ù !or5 ‘ #or/ Ž 9  º¼C   U… €be combiuÀwith 'x', 'w 0a',¦B'+'"` Q âimport warning\   .	 Q("'U'ú €Ádeprecated",Œ 0 
 D# BionWZ 6, 2u ½ATrueD "if  oUù õ ¬can't have6 ¦ sat onceè r+X d+{+z?> 1y  Å  /W{  —(ò 9  � ý1
3musø €exactly �!ofÖ Ž T«[ Ì �  Lô ÀeError("binañBry mode doesn't take an encoding argument")
    if binary and errors is not None:&  * Àraise ValueE' #("9 p  # sn �newline o . J Ý 
`bufferU== 1:Ù õ import warnings  .	 !("« D ( Q=1) im0supK Ted inW"P  E "7â, the default R ÿ size will be used",D ‚RuntimeWº 2, 2Ôÿraw = FileIO(file@  `(creat øÎ"x" or "") +l B(rea<_nd "r+ 
6wriV w+ 
VappenX a- 
7upd¯ +, Ú  òclosefd, opener=  esiQ= rawè 6try	 â_… q= False(  ¸ +	C 3/ 1< 0DÆraw.isatty()\  A , E= -1X   { ?Truz ?< 0W ùDEFAULT_BUFFER_SIZEh 	ð  y   àbs = os.fstat(À  5Àno()).st_blk“	H ¡except (OS¢, Attributù  e 6pas[  7els^     e8s >    CbP  6 ›!ºsinvalidr í â  l 	Q ,==s  6
Š : �return rj	4‡  ca£rhave unÛ ºed text I/O� 
r 5 A = Bÿ €edRandomÅ,Þ ý ž Uelif û4or °5or �c oWriterc 2J OReadJ 
"Cqunknownõq: %r" % ó Š# =“ÄÀ” = TextIOWr+r,\,@,�*, Ø•   Y “   .! =Å  • �`À    result.cƒlose()
  ð2raise

# Define a default pure-Python implementation for open_codM ð# that does not allow hooks. Warn 5 “irst use.l dH Åtests.
def _T ñ_with_warning(path):³ ð"""Opens the provided file 3 ð
 mode ``'rb'``. This func· A �should beŠ ad whenL ñintent is to treat !co As as? ñexecutable code.
  ``£ 6`` ^ Àan absolute  * Wp Ásupported byf ¨runtime, t° @ can©  H!edi €in order¥ eÐembedders mor• ¡ntrol over¢ !s.> 	Palityð  ±’ o@currš @ 1"""H  im¿  Ÿ .	 …("_pyio.Ða() mayz2ing!",R � R 9bing, 2¯@retuK1penÂ, "rb")

tryp 8 =  þ
except AttributeError4 �ô


class DocDescript? ‘"""HelperÍ�builtinsú �.__doc__â <èó_get__(self, obj, typ=Noneç 	ï (?     "ã (ð,ìð
='r', buffering=-1, encod  Q ", ´ =   "e sr “, newline c!ù fd=True)\n\n" +ƒ  ‚ Û ) •cWrappeW3""" 5‚Trick so< V À won't becomŠ³bound methoªCstorRas a —Avari“Á(as dbm.dumbŽ)wòSee initstdio() in Úê/pylifecycle.cç¿* =ø"()À Êð new__(cls, *arg 0*kw
 Ë ä (& 
}�In normalWre¥, both `Un�2Ope '`sj& ¶�he
# sameTFect.F % 0	s6 1(OSXb, ValudEpassJ±IOBase(metaQ â=abc.ABCMeta):a`"""TheG£tract baseò �rall I/O pes, actX@on sÁQms ofºPbytes2ereòó public constructor*$“ _{s dummys×Cmany¡ “!atp tderivedš È ‘ñride selectively;ýp
dV`repres‰aÉ,0canµð be read, writtes seekedÌ !EvÝàough IOBase doñXes not declare read or write because
    their signatures will vary, implementations and clients shouldC ðconsider those methods part ofb ý interface. Also[ H ðmay raise UnsupportedOpera t when o sX Ay doè / 2 arÖ �called.
X òThe basic type used for binary data!Dfrom&ñten to a file isJ Ñbytes. Other  Ð-like objects Ã accepted asp argume6Atoo.J àText I/O classwÁork with str” ¾  Note that Õ ting anyZ ð
(even inquiries) on a cloä dstream¼ Úundefined. ImØyóOSError in this caseˆ €IOBase (sits sub¼ $) `the it±ñor protocol, meaningù Ê 3an O :d can b< Ðed over yieldñ  W Plines˜ aG Ü 
› Dalso‹ ° :keyword:`Za` statÑ3. Iâ 0exa,V 0fp õ ?1aftÔ@e su6Ë J I 0 oB 2te:o! ðopen('spam.txt', 'r')1fp:k  |1fp.‘p('Spam Zqeggs!')# 2"""R P### IBrnal ### fdef _u*Æ(self, name)d 4"""; :^4an è ex­1ionM i.ˆ  ¯    ˜("%s.%s()‘Qed" %Í  =  ½ 1.__SP__.__È #__Ð )ó  	@Posi 	AseekG a, pos,0Jce=0`Changee pM I ¡ !  te N r   õp offset 3. AÜ  k G ò0pre
€relativeA  X v p indica# #by° ‚.  Valueq J  « ü!ce`Cintsj  `* 0 --‘n´ (h ”default);² µ j@zeroë‹ v6P 1P |current(J  3abe negÚ ã0* 2? 0endû� 5 ®is usually9 DSomeuÂng systems /€ cu Z�vide add™a± 4Ç€Return ati 4 Ànew absolute¹F ™ ñ U.g"i"’ …Atelly
j‚ 
`
lÃ ‚  t X(0, 1x 0run>| ð , pos=None):
    ñ"""Truncate file to size bytes.

& @   S €defaults& õ'the current IO position as reported by tell().  ReturnP  ? 1newm . 5""" ²self._unsupO 3("t« "")™ ò### Flush and close ### Pdef f (J %):Y 2"""5 ÷write buffers, if applicableû ðThis is not implemenÞ Ñfor read-only‚ ÿnon-blocking streamsÝ 	`checkC· 5d()  à# XXX Should t} r< 4‚umber of¢ Ä bten???ö !__’d = False   A f œIO object�method hap effect9 5 @Pis aly�d !ifO š.³ ¢ u:try   0 Õ0  ofinall2 b g = Tru__del__ òDestructor.  CallsÐ 8().¥¦ f ~«  Úúexcept AttributeErroræ �# If gettC? p fails,ÿn › “…probablyb  À# in an unusËö state, so ignore“ / ](  "ifê d™ '  ú	_IOBASE_EMITS_UNRAISABLE9 	äJelse' £# The try/&I å rin caseûis called at programþ ðexit time, when it's 0sibáõhat globals have°6bee  
¡# deleted,ÞtM  é—!()‰ a might£.&;nce� `there'0 thÕñwe can do about such@ Duresi  P,noØ } aend us±0we Aressštracebacká¤ Ü –  ~
œ  Bpass% všInquiriesp@seeksQ  á a bool indicaå0whe#Ö Ò øorts random accesŠ"IfÚ , n 3(),d;"ñ() will raise OSjÓÌ€may needÕ •S test\ 2 õ†  `_ÎSª, msg=None“Internal:  UåQOperaI"if’z í  [^’ O) (t  Áð raise Unsupportÿ edOperation("File or stream is not seekable."
  `if msg@ �None else !)
A €def readT q(self):  \ ñ*"""Return a bool indicating whether object was opened forR Bing.d  L ‘If False, ø() will raise OSError.y  r‚ = O  ³ x_checkR¹ ,Ö =ä 
Ã “Internal:n —UnsupportnP if fpf† &""p#ifŠ4lf.) (t  ï Ù k ÙJ Ù9OwritÙ; R Ù  ð e() and truncat é1WÉ é9 ´  "é) é/J é5‘@propertyÄ  oclosedÎ  :Íò .  True iff theÿ’has been * ÀðFor backwards compatibility, thisa$a Œ ,#  e3eÝ
 x2.__u åCÎ úqa ValueVÛa  ¡  Õ† #  ( ÍS P("I/Oï«$ o0EØ�÷### Context manager ### _eÑ#__àÀ  # That's a| ¡¡ reference Ä :"""W @ment¯‚tocol.  ê s ø
 (an instance of IOBase).2 ) .ˆ£)n µ # 	º 3xit¹ w, *args7¢ RCallsš-()Š ¹(Ö FöLower-level APIsGÀ# XXX Shouldü se be pres@even5punimple(6ed?Ç  (#no~ò ,�s underly& , ³ descriptorX t)` �àxists.

      ñ<  An OSError is raised if the IO object does not use a file descriptor.
    5""" ðself._unsupported("8 Qno")
% °def isatty(, !):  H ð"""Return a bool indicating whether this³ ò	an 'interactive' stream.d  N K PFalseÛ  it can't bÅ ˜termined.~   ™ õ ._checkClosed() r£ X n ð
### Readline[s] and write Rs ###(  ú r( ü —, size=-1r!adF l  a J á of bytes from«õ !IfS  "òspecified, at most C @will
 � °Size should gan intT2The‹ ?"at@ñalways b'\n' for binary1!s; EtextC !s,Â 0newÜ ðs argument to open­ „ uš`to sel“ ¡ 1 L Š Ï(s) recognizÙ0# FŸ ðackwards compatibility, a (slowishK Ò&() Pif ha¼rÀg"peek"¿ z ènYkahead(  "    =Ù  f.G &(1e %   !if€0 -   '1 Un = (= ö	.find(b"\n") + 1) or len" �  ¤_ >= 0}  d Rmin(nÎC ž nž JelseL 2ã iê;NonP ³ 6= -/ t :try…  5 9 `_indexšRize._ %__¿  ( ñexcept AttributeKO YB Typ! @(f"{b 0!r}¢ ZcZeger":±  x  > š ˜ 	™1s ="Warray  whº< 6< 0öAs) <
º bb  Ç :(Ê
£ �b>  § Ybreak1‰res += b ó if res.endswith›O PÈG(resX�__iter__žxÐ # §n__nextI  {  i  
Æ 	PStopI´6tioÐ  5 �  {  sË p, hint=éÖ * ! st!4 !À       hint ñ2can be specified to control the number of lines read: no more
     @willM  $ 1 if@ ðtotal size (in bytes/characters)Z ;allJ õso far exceeds hint.# 5""" !if ² is None or U<= 0:&  ¤ õreturn list(self) Un = 0 Ë E= [] 1forþ @ in ; 
Y 1 €.append( Z  x �n += len  qif n >=² 
T  9 Ubreak„ ¿ Anes
 �def writet sÔ ,§ &s)M @"""W$ ! aú  n/  ç ßrstream.R  v ðLine separators are not added, so itn`usual @eachX  O \ ž  L bprovidTAhave… _ 1 at%?endß næ._checkClosed(] |  p  –  sö  } ;  zò
io.IOBase.register( Ò)


class Raw  :0"""9  &  z ð raw binary I/O.”ø Q# The&�() method/ñimplemented by calling( ó into(); derivedF j Àes that want²qsupport7 ¢() only neab A  …[ ñ as a primitive operation.  In general,V 2 J  ê€ efficieˆ 1han, #()8°# (It wouldÿPtemptÞ ƒto also E an ¦ � 3 ofd ® €in termsT  0(),ãAcase-`latterUa…‚ suitablŽ#é S, butK¦ 1leaêô nasty recursionh • Qa sub‰† doesn'tÀ ’ either.)! �­  w,ð:=-1‰Ru Rand r‹!upÔ q, where= ß  � td ÓR8 sH cyNð  object on EOF,� !isÕ  G 1setÓ�to block ” 0hasÖ@data–  Ì “%if¡  g u Í E= -1m / <� 0.n 7allÝ1b =Þ `array(?Æ.__index__() ¼C ½b `
¨ ‚ Á ª †del b[n:ø& �+(bê °  z ä Runtil� us	ƒmultiple7ÿ3 �  9resñ Ä ªwhile TrueÂ ©=�?ö(DEFAULT_BUFFER_SIZEF  d  ðot data:
           bbreak
  µres += data uif res:  * õreturn bytes(res) Jelse, Õ# b'' or None( F n   del ö adinto(self, b)N r"""Readw  % ó  a pre-allocate ñ-like object b.
\  q R· @s an> ó representing the number ofc rn õ (0 for EOF), orM  Ï 1 if9 l ñis set not to block and has noW   W .H 5"""  ô ð ._unsupported("-  ë "")È  $_write!W ” Àgiven bufferv  á ŸIO stream     i ðten, which may be less thanh ¼ alength=# iæ  i eã õio.RawIOBase.register( Ð)
from _io im#… FileIO
" 5  ±)


class B"ed] ( "):W0"""s  +  ñ:Sed IOLs6°The main di]¥ence with … ! i!t! Â‘() method/ßes omit~ásize argument,90doe:ñt have a defaultE Pimple+ @atio‹ at  0ersî u  7#()µ pIn addi, ,“  & o † « ray rais¯BÈ¤ingIOErrorôpunderly<3rawX ù qin non-ÿ1ing­ Amodec   œ Qy; un¨`their C Ðcounterparts,;²y will nevexx {× �A typicalashouldŒ�inherit ;a¦š 
Gâ, but wrap one¿ ¡+  { ¼ z °?=-1¡  ô«  upŽ + T KAere  i‹Í  ¤IR Q&1ed,B „’ negativeÂ F Y A y Rs allrPuntilÀf BposiT  ¿  â k  Í 'i´ ac; ±', multipleÑ -s6aissuedeatisfyG  l  K A (unb0EOFþ ðreached first).  But’? � v âas (XXXt Îðpipes?), at mostß . F  ¬ o2be ¬ „pa shortEult “ 9y� ² ‡imminentpzRempty› array onžR|/s ydÏ  U ì  \ðmoment.
        "C""
  ñself._unsupported("read")
# @def   1() ±, size=-1):  D Ñ"""Read up to  ñ bytes with at most oneH õ () system call,F Rwhere> ¥is an int. "± 1² Cintoµ b¯  ¤  % ò a pre-allocated¿ ò -like object b. ð L  ò(), this may issue multiplë sõthe underlying rawÕ ð stream, unless * ÷latter is 'interactive'~ dReturn"  represent]  B ’number ofÆ tÈ (0 for EOF)K ñ	aises BlockingIOError if‹ 
µ  ­ u has noÃ @dataã z Lmome´) r·  D ._= y1(b,  {1=Falser " vÁàbuffer *b*, uswpÆHÃ8TruGj y$, pðif not isinstance•§memoryview*  üFb =  5(b)á  £b.cast('B'Ë 3 i@1  9= †1(len(b)Q Oelse4 3 @n = G  ] ‚ €b[:n] =  ’n  ç_write2W Sgiven\w!to #IO%c÷ ™ n  ten, whichóSalwayQengthÆbiw _ Â
Ÿ °is full and¨ P á0canPaccep»!re8å	 Ð   dJ å e™adetache[ß€Separate¬ :`Q from â  Ú Ï'it AfM }4raw=  ÂRbeen ‹  edÅ#e K Pis in…unusable/_state’]  ú Aio.BŸúedIOBase.register( ¶)


class _ \Mixin) :´`"""A m! ` implePation8C  t ð with an underlyú2ing raw stream.

    This passes most requests on to the underlyi@ A  ItC ñdoes *not* provide implementations of read(), ‘into() or@ �write(). 2"""™ ðdef __init__(self,½ !):&  º    ._Ñ = 6 €### Posiw  ð 2###  O CseekK ×pos, whence=0U Snew_p@ 1 = d Araw.; 5 )‡ 9if 5 6< 0¤  ¨ ñ raise OSError("J ô) returned an invalid y "^ ' 	b Ð AtellÐ Á 8pos¸ # O  ife  ¤ 6 ¤ 7pos› qruncateŸ ,u W=None© [Ö_checkClosed(§  ¢Writable()]  Rq# FlushœÍ°  We're mix÷ðbuffered I/O with lower-level ,À‘# and a fS ðmay be necessaryñ synch both viewÎ bcurren— ¢file stateÍ  Ì ] Ã ‰0is 
1Ã‰¬ ÃXXX: Should Jðbe used, insteadm Ñ  § V
F ‘  directlã t¯?% y¾  " C(pos‹ l‰ BcÅ pö  C ø"ifV0 dú +SValue.C  ‹/  b \ .Ÿ ( a ì0 ~|   5ais not  O : ™ :tryª  Ú # .´ ¡BlockingIO¹ Ò or BrokenPipÌ E etc^ ?   q ¼    ofinallu  2  ò § ò odetachó nÀ t W0 al·"y \ ,ed{»  ; 6 šð ¶   ! =r g2rawß TšInquiriesN ï
 M ÕC   ( §‘@propertyu  <raw'E  ¨ Ž ; vd> 	œdD 2namÅ  $ @ ?mod@  $ ð

    def __getsó tate__(self):
  ðraise TypeError(f"cannot pickle {0 ñ.__class__.__name__!r} object")
N ®def __reprf 0mod7 = = O �module__D  • ?cls, @qual . 6tryÍ  ?    h   X ò except Attributð 
< ó	return "<{}.{}>".format(¿ #, œ )U ?lseD 	 ƒ O={!rN ,% Fö	### Lower-level APIs ###dmfilenoÈ» _Craw.& V  œoisatty8 & A)


óò
 BytesIO(BufferedIOBase):‘ 4""" ð I/O implementation using an in-memory bP ! bN B."""H â# Initialize _ € as soon òpossible since it's used by __del__(–ó# which calls close W b= Nonex  c__initµ ,  Aial_© =+ /Qbuf =Ä SarrayZ  x*if: @ is H A 
" D *+=. QÁª ;buf xpos = 0¿ OgetsÞ"ifqd‡ úBValuF("__J 2 on= d K"] é %© °_dict__.cop¬  T@getvZ oB"""Rª1theH!s ) ñ  (contents) of  $S  x  ,    Ø � Ô ó³ .ƒ@2get˜! Ô pa reada¨�and writ JviewÖ .× 3‘ Ø { † ¼ Ý  ! Ù fÒ� g.clear‚super().c Q ,s Ÿ, size=-1|  6 º K _ from´ Ê  Z!isü
	 } U = -1”eÖg † 9 `_indexq@ize.K7dex  ( z ' ‘‹{b  jLIWteger� ; ±   àsize = size_insdex()
  Åif size < 0:    ù= len(self._buffer:  B <= . :posP ¥return b""g Ýnewpos = min(L ,J ! +¥ | $b h – [u 2 : W ]g  =  • �ytes(b)
 ‘def read1ù ,{ F=-1)Ð ñ"""This is the same as5 .C  A"ê h Š  [ (^o Swriteo bi  ž }fclosed�  ` ñraise ValueError("F B to / f file"5÷if isinstance(b, strl T 4TypS bcan't Y 0str] `binary= 7eam_ ðwith memoryview(b)  
¸ @n =  0.nbwP  # S‚qof any  Å-like objectQ|if n ==©\0( TlE_pos 0if  >Ô
¡ â# Inserts null‘ � betweenðácurrent end of  ki  JQ# and 3newA†position$ * ðpadding = b'\x00' * (© -© Í : ã C += J ˆ   [‘ V @+ n]l &  5= n WnCseek¤×pos, whence=0D° Q ? on¯:try˜°pos_index =É"._ %__´ ò except AttributÅ
E 6â�f"{pos!r}Íçnot an integerÜJelseH  0‡ … 
R¬ ƒm Îš Ð‘negative )>a %r" %#/,)› 3lif¯ • 1Ë '6 Zmax(0z6posf eJ 2J ×  +½R [	´unsupportedÇ vø¢¯Ì ·Atell·¨& B ¨z UruncaÙ�pos=Noneˆ 'P Œ `0is i �À    pos = se“lf._pos
  Uelse:   :try   òpos_index = pos._ )__; þexcept AttributeErrorM ’raise Typ! ú(f"{pos!r} is not an integer")a ® � — • (4  if² O < 0Š CValu‹ ð"negative truncate= öition %r" % (pos,)c `del seWÅbuffer[pos:]¶ `returnE 
 Ðdef readable(8 )– "ifJ fclosed  ä 4ª ‘I/O opera� 2on 7 g file.8‚ FTrueƒ Owritƒ lOseekƒ d�
class B±¤edReader(_ ’IOMixin):04""" * braw[, ðr_size])+ A e for aéò, sequential BaseRawIO object.; û
The constructor creates a§ [ •the givenc A rawa£stream andŒ ¡ H. If  jñomitted, DEFAULT_BUFFER_SIZEK �is used. 2"""©  Â ÿAit__Â,| 	=R  èA"""CÞ c a new˜ !edÍ Ÿer using ä  8    ›     !ifBEraw.g{  # K!OSžñ	('"raw" argument must beŒ  Ÿ#.'Ü ; #
	ir,<=‚‰ Ôdinvaliº [Ê /.v# =;ã¦ ¥ ' p_reset_G_buf ó ad_lock = Lock(æ  Þ 5  û Þ=rÌA 
ax  - C   .–  Á -""¹  ad£F = 0X  ” � ,W=NoneX 0"""œ c bytesW R¸ —s exactly% ñ  of data unlesstpunderlyƒfraw IO  [ñreaches EOF or if7 Ácall would bXqin non- 5ingF Amode� Þ ˆs,td until]  ý )^ H Y œ å ] ð ot None and siz—e < -1:
  õ$raise ValueError("invalid number of bytes to read")@ °with self._ [_lock^ Xeturn$  un& ‘ed(size)
L Bdef B  Æelf, n=None)T ñnodata_val = b""?  Î Pempty Áues = (b"", = # Xbuf =‹ 5buf  po7 Ì 2pos�  ^ ÿ# Special case for when the'p is uns7 Ufied.j @if n  � � or n ==–‰ 2setFbuf(y ” ±if hasattr(. `raw, 'ˆGall'4 -   TchunkCraw., X  + 2if . !isE�   rÝ�buf[pos:]Î  Ö ë ) OelseC +y 	C ‹  Ÿ[k ¡]  # Strip„‚consumedªl � €current_pI = 0[ Ÿwhile Tru   ð# Read until EOFß   9 () would bÐ
s w nk
(n Å0	 	Ï  y   ]break 	
q+= len(D 
Y A  �s.append% üc"".joiH  s)$¤ AT+)#, [ œat most nÕ@avaiÿ ¿ pbuf) - ¾� # Length² ™( àable buffered =«Š1<= ) 
pÁ# Fast path:b :  ¾UfullyY T  =�· ™ I+= nŒá Íepos+n]" c# Slow{  jQ from… cstream’benoughA are�,G #or* "an¿Pccurs¢Æ 7 = s[ Âwanted = max|ac6, nO_`J < ndd �(] C  Q�$|/ =J  M   © #Î’more thanNR only$~ „<N#¹OBhaveT5nnRin(n,`  2out	ˆ^ Ðself._read_buñf = out[n:]  # Save the extra data in “buffer.
  õself._read_pos = 0 areturnX `:n] if € else noT Q_val
/ �def peek(O ¡, size=0):  i A"""RN "s � ñed bytes without advancing¦ ’position._  C ðThe argument indica@ òa desired minimal number ofb E; weˆ ðdo at most one raw û ó to satisfy it.  We never 6morE Pthan é .Ì _ï R5"""p  Þ + cFlock × a O _C0_un& 0ed(W ) ` ielf, ng`want =
2(n,x £ )— h Q= len± bbuf) -7 ¯ 5pos4 1if 7 !< f #or := 0Ò !to= " =J � ! -4 S   @currÒ. @raw.’(F ´  - 3if 0 
s   B < 0_bu
 [ tpos:] +L 	� K M =buf\ µ � 1e,-1aads upƒ2izeµ,
¬øead() system call.j$# aL P.  IfK 3leaø {& iŒ,$d# onlyú¿¯À.  Otherwise5 9 doI!if, < Ö …9 =Y+b`ª
Y1VX *  ±ƒ–    1min˜,=)¿p# Imple» â d ¡into() and‚  01()•ó	not strictly necessary (Ç`# coul6 Cly oÕôase class that provides an iz aQqerms ofÝ # Š P1()).Àdo it anywayžAkeep�[_pyioX L psimilar/  ' v (which=  ± Óe methods forI °performance¡ Rsons)]B µ,T,' d] þŽto *buf*ZSƒ  í`# NeedÍ ðcreate a memoryview objecth´type 'b', oD pwe may ×pbe ableR bassignî  1it,1sli(itC ò… n~ Àject.
      ÷  if not isinstance(buf, memoryview):
  Wbuf =  / )" úif buf.nbytes == 0> …return 01 O  4 ¥cast('B')
 —written =1 úwith self._read_lockd dwhile < Q< len¥ :Y Ð ð # First try to Q à from internalÎ 5fer’ 9 Pavail0in(` ‘ hbuf) -£ Epos,† ,L 1if O 
Æ  Cbuf[Ì : +/ ]] = \™ 7 
‘ [ Jpos: P L 
* 2 +=¬ , Ÿ % %if›%==ü  Í _breakºóIf remaining space in callers¸ý  is larger than¶ #é,€directly oT E %ifÇ % -Ý >¿buffer_sizeä  Þe@raw.�@into°ö]3 ¹nW  " ;m # eofµ    °nbðOtherwise refillý  - unless we'red  ^PÐ1 mode and alä ý y got some data: #elÞ (. 1: ® � È   0 J€_peek_unOed(13  7 #† A# InÀ  “Ä   Â�as soon aý _ haveÏ i«)adÈ ·� Œr/û  �def tell(ì Û , !_Br¦edIOMixin., ! -© 8 =¬+ªO6posg Aseekg !, Ä‡whence=0v  Ï F€n valid_: j_flagsè  raOáValueError("in2  \  ? 6ue"òï‚ J== 1o  ãRpos -jú ¦	 8 -= O Ú ±  s h 2setVJbuf(# ®odclass ¸|Writer(y )¿D"""AÞQfor aròeable sequential RawIO object.ÒðThe constructor creaðtes a BufferedWriter for the given w ñable raw
    stream. If' b> Â_size is not: ñ, it defaults to< ñDEFAULT_BUFFER_SIZE. A"""
	 ðdef __init__(self,y ', g =F  !):>    !if… @raw.½  ¼ (  # ñraise OSError('"raw" argument must beû  > 2.')œ  ; _.ŽIOMixin.­ )‹ ¸ V <= 0¨  N ‰ RValueŒ ƒ"invalidð  W"Q  .S =) €x ' _þ ûe_buf = bytearray(M & Ãlock = Lock(î  Š C  ŠEqreturn h 
i*< e9 7, b< ðif isinstance(b,Q 4TypQcan't‘e/   to binary 7eam#Bwith™ Û 
v"if! jclosed  – ev 3 W filet  5 ñ# XXX we can impleMð some more trick
å try and avoidµE rpartialì s aif lenR.Ü bbuf) >Î Ó ÷# We're full, so let's pre-flushËÉ.  (This may€ ¡ ³B1QingIO¸ v¡charactersŸ –ten == 0.s C   9_z 0_unL 'edš # 0bef6=ô 	˜ M £ îš.extend(bw    ’ Q 2 - q 	Z r)>try‡ Ù ¯ ü 
 ' |except iOas eX ­ ) q   'gve hit]�. We hav!ac� #a ¯	6 I  #ÉïÃcut back our·ý-  �overage  - -ôƒ ù3-= U + › 1 8 ![: k]M )À(e.errno, e.I �,$:ten±d Ž 6tenXttruncat[‡pos=NoneC�© ˆ e_a5À      self._÷flush_unlocked()
  ù if pos is None:  '   û = self.raw.tellB greturn# Ñruncate(pos)
Q Adef † (I )f Bwith: p_write_¤   �  2 !._> Ä X   0 b "if` jclosed[ ñraise ValueError("g B on / f file"1RwhileP ° :bufT :try  Ä 'n Cé 	.E d  0 €except BQingIOŸ X Á dRuntimÃ    «ñ should implement RawIOBase: it "B n  "E Bnot m ”  G Oif nLB (ˆ ßerrno.EAGAIN," "H! cå     coê 0te USout b?J", 0`§ ]> lenˆŸ or n < 0n!OS�(€ 2()  ûed incorrect number of bytes%<delDF[:n]+e ÈÈf ò _BufferedIOMixin‘, / +Ñ W Aseekð ,ó§, whence=0f #if  R�in valid_: j_flagsÑA!in2 F v\ÿ  ›	ü  £
T  Ì ð  ^  § á „Ö" ô ” E4rawÞ (« T Y © ¥ »ð
# We have to release the ƒ and cal†ç() (which willH öprobably just re-takK `) in c] F ÷ has been overridden inO  a subclassÓ  ’ ‚user set©G ñto something. Thi3 . GsameO ±behavior asß C�eation., *_# mayg › ’BrokenPipêE etcL  qŽ® ¡zfinallycòQ  õãR()


(„tRWPair( ]"):rc"""A b®q readerè¸Pr obj+’together.6 3 (  "N 
C Dput G 1 toÀform a sequeñTntial IO object that can read and write. This is typically
    used with a socket or two-way pipe.
)  O &erQ ó r are RawIOBase s€    1 @able3 B ˆ  ðrespectively. If the buffer_size§ ñomitted it defaults toI ñDEFAULT_BUFFER_SIZE. A"""
	 ð# XXX The usefulness oh óis (compared to having two separate IOE S s)� €questionÁ ñdef __init__(self,u2er,t(r,Õ =·  !):j  ‰ã"""Constructorb    Æ ‘argumentsu ­ y¢ instances  /      cif not• .‘(v  & ðraise OSError('"( Der" u � must beH ÿ "')g > d Ý r.  # d  ( d    A .d  \¿ aer = B)’edReader(¯ 	k)V:  T 	: W"r( : ;  Ú X Ö ”7=-180if   FNoneÇ  A= -1L   qreturn Ž  X !erÏ (* Ls Cintow bq B . bC Ô @ $ ¬(e(= Cpeek<  š /=0� / 7ize€  Þ 1D 	7Æ 1	J 
1Î  ‹  KŽ Ê + Ê  &?  $ eJ+ ? _flush{ 	< ( 9 \close9 ;tryd1elfn2er.2 õ0finà1   è 1   ylisattyu ® ) )%ÎÆ  ‚@propertc a £ da 	I ) †


classìdandom(ûÁ, "): C"""Az A€nterfaceïrH @ accsstreamsm icƒ¡ creates aù
ü for a seekø I ,PÑraw, given inÚUfirstOñG õ :ÀIZE.
    """ñ0

    def __init__(self, raw, buffer_size=DEFAULT_BUFFER_SIZE):>  B õraw._checkSeekable() BG ŸedReader.j 8 OWrit8 q  Ì CseekÈ ×pos, whence=0± #if à not in valid_: q_flags:N  Ü   ñraise ValueError("in2 F v "¼  Fg.flush	1if  š_read_bufe p# Undo  y ahead.„ Hwith@ JlockA  ª a  � Ë .o ˜pos - len vbuf), 1¸ à# First do the I , pn empty ¥  0, s- %at® B# if& !aw? P fail‰Ãe don't lose_ö ed data foreverô  ± =ñ Ð Ï´ b_reset:buf˜ m :< 0Pö#OSó 	Ä() returned ‡positionÿ$ F posbAtell|
‡œ wäH B
J sKelse½ §  ; }; <  /�truncate� ,µ Z=None§  !0is  
h   §] ˜R# Use 1to 3eadýîê › )Q )´ £ œ 
µ    ¶  A= -19¥ – Ey “ Cinto— b� è` 	F ô pÛ Ã 	Ôb G Â 1¿ b /-1Å 'I d  à  ',G (PÇ _ ƒ‚ "h & †± t )� C   9 ³™
ö ð


class FileIO(RawIOBase):
    _fdò = -1
    _created = False Šreadable Nwrit šappending- Cseek- 3NonX `closefm QTrue
m ódef __init__(self, file, mode='r', 7 =5 �, opener=V !):C  É ‘"""Open a> a.  TheC ð can be 'r' (default), 'w', 'x' or 'a' for ÷ Eing,U  ò   ± exclusive 00ion8 û o  ¸ P willp ) …ed if itR òdoesn't exist whenÐ d� p 	\ E; itU Ptrunc°Q C  .  A FileEi esErrorF Draisš 0 al÷ yQ š s› Ï Ping. g ïj¸  … impliesM Ñ rso this‘�behaves i®àsimilar way to—°. Add a '+' tÈT ôto allow simultaneous¼S and v ¢. A customdruþ bó BpassÒ Acall¶Bas *i!*.Kpunderly' ç¡descriptor ¦   ¦ ±object is tå°btained by e  H ` õ	 with (*name*, *flags*).J ˆ â must return a8í Œ (Ì 0os.`  É R aresult�ÐfunctionalityR�4to H g� 5"""G 0if °–._fd >= 0� ‘`# HaveÂ¿ ö û  +f first[  5 :tryF   h I .fd"  & 1os.  D ” )©   ofinall^  Ã 4  · sinstance(° w, floatt X LQ Typedð('integer argumenë²pected, gotD 'œ h ,inf 4 …    | |if fd <z  — DValu˜ PnegatÂ G 3Œ Jelse]x "-1ª X Pif no×Ÿmode, strQvalid‘: %s' % (> ) ` 1set P) <=  �'xrwab+'e ç /inf Psum(cƒR'rwax   ’ `) != 1‡  ú .count('+') > 1"iM§ âò  exactly one of; e/o/£"e/A) 'Ö g	 '… Ùqat mostQ iplus')š Ï"ina	S ðself._created = gTrue
  ýself._writable = " òflags = os.O_EXCL | UCREATM õelif 'r' in mode:  n g Oreadg 08 R wR 
¹ ­ º [TRUNCh ah &Ü ŸappendingDdAPPENDŒ ™ 
�  E+‹ 
E	‹ ] " D Band  5 
¸ý|þERDWRM Ÿ< O < GONLY> s#
k !WR/ 0  ögetattr(os, 'O_BINARY', 0)E noinherit_7 K = (6 ‘NOINHERIT9 5 orh  ­
 ; qCLOEXEC9 )7  h Zs |= { “ æowned_fd = Non„:try6šif fd < 0  ” îif not closefd   $ ðraise ValueError('Can6 4use: ö=False with file name'Í  H   Áif opener is¶ s Õ 0os., (P !, ~, 0o666X ,elü n   K t J C  - ÿisinstance(fd, int)¨  4 4Typ€expected8 “eger from÷   D ¢    g #OSƒ‚Negativen¯descriptora  (%fd_ T   ó 
eî sos.set_	 vû+ V ÅW$ ='	~ rfdfstat :(fd˜Ë \ 0if 8 “.S_ISDIR(H @.st_&«@ÂIsADirectoryJqerrno.EK ,   l  	 1treF !),•
Ê ò except Attribut,gË# Ignore the-  ø H or w ¼ í# don't exist. Ipass ´`blksiz·¦`b, 'st_ Àe', 0)
       òif self._blksize <= 1:
  
$ ù= DEFAULT_BUFFER_SIZE
5 ¾if _setmodeN ù# don't translate newlines (\r\n <=> \n)R  � S ú(fd, os.O_BINARY)} ® ¹name = fileH ò Ÿappending¡ ú#For consistent behaviour, we explicitly seek to thf  ® �# end of„ ð (otherwise, it mighX  Ÿe only onG ù first write()).Ï  i >tryÄ   @os.l¢ 0¾0, SEEK_ENDZÿexcept OSError as ¸  S áif e.errno != 	 .ESPIPEƒ  4 Fraisk 
. ÿif owned_fd is not Nonƒ  ”os.close(/ 
Ë 
j  S B= fd#Àdef __del__( )ˆ ³fd >= 0 ands !fd  œ  : ˆ d@  ê ù import warningsª .	 A('unV da%r' % “ Ò,), ResourceWI ,I  i  âstacklevel=2, 7 =¡ 
  ³ (.ŽgetstateLQ Type`(f"canþ  piq ! {S À__class__.__sÙ__!r} object"j Nreprf >  : • = '%s.%s
.] �module__	˜ @qualb &__î…
ÆÒreturn '<%s [!  ]>– ­ ‘| i " =9  * ø’ AttributVy (z `fd=%d BA=%r ‡   rŠ U ò  (Ÿ ,€ _( G  K );elslŠ  Ç  „  E   A /=%Œ  @ }  C  _G )&ÑcheckReadable
¢ €Ñ #_r% B k` UnsupŠñedOperation('File[�open for D Ming'‚ EWrit‚ `, msg=�Œ  › / Œ ) D Œ  Ÿ  , œƒ 0"""*� at most$ ‚ bytes, À edÊ ð.

        Only ò6makes one system call, so less data may be returned than requested
   óIn non-blocking mode,6 0s Nd Rif noU âis available.
B 1  Rd Ð an empty bytŸ Æbject at EOF- 5"""9 ÿself._checkClosed() @Readr  “if size i¤ "or E< 0:C      j rH 'llG ?try/ 0os.- (7 A_fd,^ � ƒexcept B6IOErrorK  C
“ @def V 1allY )0 0"""å B alliÅfrom the fil�Red as^.S  â Âpas much9 æis immediatelyÉ,ž  K /oròëb1bufëõ= DEFAULT_BUFFER_SIZE» Êápos = os.lseekq.Ê¶0, SEEK_CURÑ þ 2end2 Ufstat2 P).st_‚ l  - 0if 0 f>= posÉ    µ  & -% E + 1C A/OS9 Fpassß�result =øWarrayÀªwhile Trueƒ rif len(< S) >= ‘ 
' 
ª 2 ¨  "   ? ƒ += max( ,“
Unº Â-• 	c ¾ t Rchunk’ 7‘:, nd MŽ
 Q i€ N  Ybreak—   AÇ   !t ¥ 0: #Ú!chhe%ofÀT j ª _Q ÿ ÀýsÐ OAinto:, bS@Sameù‘RawIOBaseÕ0 ().ˆöm = memoryview(b).cast('B'iU=I(/&m)!  ê   )  qm[:n] =ÖTnÉ _writeÆ W Y b to€ number @ 7ten_Only )1notn§ µ 3L ë4Theh #ofŠ „actuallyz  Š× _ed.  • »i) v �e would Ž3À       self.ó_checkClosed()
  Rself. ‡Writable Etry:+  2 òreturn os.write(? Vfd, bT ÿexcept BlockingIOErrorI QNone
b �def seekS ö, pos, whence=SEEK_SET)C ð"""Move to new file3 bition.Q  ¯ ðArgument offset is a byte count.  Op3 Dal a+ u Á defaults to   O ‰ s or 0 (U �from starg ‹ ,p õshould be >= 0); other valuesW Aare [ 0CUR[ @1 (mÝ brelatiæ @currÉ 1poså "i aor neg* &),U "ndU 0ENDU 2U  cend of³ uusuallyL ¥, althoughT ñmany platforms allowµó ing beyond the X aZ )�ÐNote that not@ " � objects 	  †.v 5""" áif isinstance(%Wfloat ©¡raise Type{À('an integer–required'´É$õlž ¢ ._õ� 1)v ÇAtell% – 1""" @) ->‹ C.  CÓ½BCan É !OSÇ   fë!ons $>(s.!È #"0,,8CURÈ Sruncaæp, size=±
× T& úÌ ¡to at most4 qsHSize`: áB æ2as bed by DOThe :  çpchanged% –v ð É C >Z* "ifì 0is #ª � q 1 = B Â ÑSos.ftB4Y 2 �a fcË3 
�ãS Kw!A 3 d6@ can„qbe used[1furŸ�I/O opera2s. 8 •() may be¼ ¡called morÕ�n once wi60t eõg!if ” 
0w E b­ ù *fd3  "   1os.R  LF  0finå< ssuper()=  ò lQ 
jbTrue i@ÿ supports random-accesœÞ p  ÁJHX í Ðexcept OSErroKr:
  ùself._seekable = False' Oelse9 6Tru8 zreturn ^ 
W €def readp (! )] 0"""G ñ	 if file was opened in a8 ‘ mode."""N  Ï  E õ ._checkClosed() 	‰ w ‰ Owrit‰ ! 8 eŠ ( @  x Š  ð /no RKâthe underlyingÿdescriptor (an integer)#&fd� oisatty�  ž Ž  ² ÿ is connected to a TTY devic¥7os.y R._fd)“ ‘@property× Acè/fd¢ %�will be > Bd by
 (2	3+ ˆ  Œ…  0Str¥0giv - . ¹#if"vcreated	 × ·
  # « Q'xb+'    ´/ . %elh šappendingi   ˆ aˆ /abˆ h ‡ <
¦  ö à r‡ r‡ íU òwb'


class TextIOBase( "):ª0"""  ' Òfor text I/O.!  Th2E ñprovides a character and line basöpterface\astreamè Q ` There‚�no publicŒ‘structor.)  o	  6 Y®š, size=-1|ÁRead at most" ™ rs from ƒ 1, w{  E  € |â  ‰I 1 ³ýbuffer until we havef !or bit EOFÃ  Q "If* òis negative or omitted,Z 8 ó  9 > ds”S   "   BÐunsupported(","€ < ve=
7PWrite ísªÍ?  &x h y ttruncat| Špos=Noneƒ T% &bto pos¦Àe pos is an “int."""
  ñself._unsupported("truncate")
' Ðdef readline(0 !):  B ð"""Read until new% ‚ or EOF.?  ' ðReturns an empty string if) ø is hit immediately.b   } ­ ™ ­ odetach«  I ðSeparate the underly� ±buffer from ñTextIOBase and rÇ 7 itÛ QAfter- H ’has been ’ 1ed,) V  ö Uin an– ïunusable state] ‘@propertyW  ¼�encoding ùSubclasses should override%ø BNoneÔe ûse  pLine enƒ ÷s translated so farKQOnly A.  !du2 ð ªçare consideredE Ó  �Ü _errorÚ E P sett“ !ofÞpdecoderzeã ž • 2io.2 ˆ¦.register( A)


ÇÒ IncrementalNŒDŽ (” 7cs.!  Íñr"""Codec used whenõ Ù õa file in universaëñs mode.  It wrapsd–another i�  , Z 0\r\0d \- Rto \nL AalsoK qrecordsZ„types ofh s a1unt0  Wµ ¿ 1ith? oð=False, it ensureS !atX ¼� sequencešBed i ƒone piec—­ `�__init__û,é 2e, B ='÷3ct't ‹˜.W C  )Ý  @ æ % =_e# $ =  
 ªseennl = 0 pŠQcr = B  ÷ R õ Âinput, finalkä #t  & a (withy€eventualÿtö a previous passç 1if ê u r¢ Ž‰ ‚output =h É Oelse) T .\ (¥ Ë Ñ ‡  (y "orû 	— r"\r" + . Ÿ  # ˆ U 	l   #{€ain last. :¥5notô SFdataî ð# then readline()ó is sure to get \r\n in one pass
  õif output.endswith("\r") and not final:0  7 1 # =: Y[:-1]! õself.pendingcr = True
# õ# Record which newlines are read) Ecrlfg €.count('Ë '')$ "  P') - > ' I n' º Ñseennl |= (lf	 §_LF) | (cr UCR) \f   * 	@ VCRLF)1if X štranslatef!ifÂ 
  ] €.replace¸–\n", "\n"  2 K I G Û creturnóÅ 0def]`state(Ë )d Ý pdecoder�;Nonã  buß5b""f  ® …flag = 0 >els9 #, (  y .g B.get� ' U<<= 1Q � £¸ � |1 ý 2bufw  sq  ‡ !, } 2 " = „  0 	$Qbool(­ 6& 1¿ ¬ â  I —MQ & .— (‚ S>> 1)€ »\reset¸F „ 0… = FalseÎ ¦ #‚ “ D_LF tq_CR = 2_ _7B = 4u‘@property  È @Ë µ(+,.  Ý  & .r"  [ "’6 �r‘8 V   F Ç !)[™±ò	]


class TextIOWrapper( bBase):EÂr"""CharacteÎ ‚ð  based layer ov ° BufferedIO@ ¡ object, b .N @encoëñ gives the name of  Athat Òstream will bE¹Qd or 0 0ed �Ð. It defaultsÍ`localeè‘preferred0 Aing(“)• Árrors determ_ ˜  strictnessž : Ð‚ €ing (see§ l ¾²cs.register‘ "S "w �� can be |� '', '\n 0r',å Ç . à qcontrol:u Phandl‹ 1of ™K€s. If itY ð
universal newlines is
   ô enabled.  With this ð, on input, the line ð	dings '\n', '\r',
    or ñ\n' are translated to, ò before being return 1theB ñcaller. Conversely‚ 1outƒ  q ; is[  ™ asystemD qdefault¬ ñ  separator, os.¿  ep. If new  O ñany other of itsG Àlegal valuesý %at3 qbecomesG Awhen @fileU AreadI band it ò &un\. On á c ;k !.
W !Ifâ p_bufferQ°is True, a H vPflush{ �implied §   I õwrite contains aç ¡character.( 2"""z ò_CHUNK_SIZE = 2048 Ó# Initialize ˜ € as soon ñpossible since it's used by __del__()k q# whichÇ ss close W d= Nonex AThe Ç ô_through argument has no effect her  çm  e. 0ati« RlwaysQ  åR 0.  f X pis presc ConlyJ qso that	ðsignature can matc\   !of)  C ì2ionhòdef __init__(self, ä`, enco{=ý ƒ, errors  �  “  ì=¢ing=False,ä 5 %):=  } ƒ._check__ ( ¨ ^ %if—  i š B  ! :try   Ê   =˜tdevice_ (ð .KFno()m ; ðxcept (AttributeEñ, UnsupportedOperÌÍ  ;   2pasá    Á  % Å    ims b localÄ   e¬ I% ¨  , "# #  ÇK ð may fail if Pyth‰s;Ubuilt§ A  C­ = "ascii"' Oelse† = … Ô.getpreferred (<)| x Pif noá”instance(+ [, str„praise VX•("invalidGu: %r" % k Õcodecs.lookupn ¥)._is_textJ
è  msg = ("%rª ´  a / j .; /`   "us!t `open()\òhandle arbitrary – "®ï Lª ð  † Ý Ò ž H –= "strict« Ò“  %s‘À            ð    raise ValueError("invalid e ƒs: %r" %  )
4  ùif _CHECK_ERRORS:  & ácodecs.lookup_R ( 5s)
- ò self._buffer = 	   deK ó d_chars = ''  #+ ò	 for text returned from 4 rJ 	�_used = 0N Òoffset into _= q  b Vread(¶ ð snapshot = NoneG Ainfo“ äreconstructing� k state• ²seekable = X @tell5  .' ‡ @has_  Á1 = hasattr(I 9 1, ' '¿ óconfigure(encoding,ê¥, newline,«  Ñ   ·9 Ówrite_throughà³def _check_P ˜ ^ )4$ifs r is notR1and ³isinstance(J W, strA  œ Ï5TypÎellegal[ DtypeÔ( N 6),)Œ  ‰ @in (ß‘, "", "\n r ?\n"… 	T† vp‡ Ð )5› É$, ¡=‰ F A  °
«‰=False, ± Ê  w $._w % =‚ a " (   	   XØ ¸  e õ  €b2cratioŸ,.0/ Ð±universal =#e  * €translata&  ev   . nQ ÿM 3N !”- M p or os.Ž<sepÓ   P: =  ] n* =Í[ r# don't ö a BOM in the middle of a fil”#if†p …î   ©() x„positionÁx.Ç­ * 5if - F!= 0    >try   ‚ B_get–�er().setQ&(0¾ ,   �except L~ÞX ±# Sometimesôper does<Uexist Z  Bpassl#3‘is eitherÇ,ûða tuple (dec_flags‚xt_inputÀ p# where.#  ¨ ®sNðd (integer) item½  Iª #´$ne^ G Àchunk of inpó`ut bytes that comes next after the
    # snapshot point.  We use this to reconstruct decoder states in tell().
M óNaming convention: Q  - "‘ ö
_..." for integer variabl¬ tunt inpÃ C _charsC ®  d 4 qacters
K òdef __repr__(self)¦  ñ	result = "<{}.{}".format( ñ.__class__.__module__,T  <   d 	< µqualname__)> 6try‡  K  ! 1 = =   * úexcept AttributeError< Fpass0 :lse æ P+= " [ V={0!rì   ™ Dmode™   i ™ : [ ™   ™ treturn Í ² " encoding7 >½ )‘@property¿  ! ì	h ‰_% E  �sC # A ïline_bufferingI 

+ Q ßwrite_throughP 
	* O › H 
# A  YCafigure8 ?, *6]�=None, e) 0newð Ÿ=EllipsisB  # >; 	Ø  Þ‚"""Recon     t(ðstream with new parameFî ¤ñ This also flushÃ"e ; .Y & 5""" 1if "._Ÿ�r is not ó &  6   Tand (* 3 or @  D  + =, D) + ðraise UnsupportedOperaÈ([ 4"ItO €possible/1setDµ  or? ˜3 of  w   "˜Ã first read"¬ ! 'ifñ  -
Ó  þ — !  D Q¼_ 	Ú e,	8 …'strict'4 Aelif¿²isinstance(W ,ì `2Typ´“("invalidÚ s: %r" % ü Ý 
nÀng = self._e“ncoding
  Uelse:   óif not isinstance(e5 j, str).  2 ô
raise TypeError("invalid 9 u: %r" % %)
r  n úewline is Ellipsisd n! å= self._readnlC  ccheck_+ ( 
i  f  _bufferingp ;Nonþ $ s 
 z ÿif write_throughS 
# R 	 Ì uflush()g  ˜_configur�ep3s, ï ,3  — 
Á ,· &Ðdef seekable(t ëi šlf.closedŸÿDValu òI/O operation on 7 v file."Ù creturnÖ{  �  è� 7 Ï.+ Ì  c? + ? †  .t ! Î  P_tell^è_× a\  I …  A and’` = �:try’ ú. £   ofinall2 € è(0@prÎ!ty_ š† Ä ˜ ) ÓG =namjE   ' C  |  E/no| ) Å  ; oisatty; ) ;  "¬ 7, s 'Wà data, where s¾a,'1 u@m 8 to87 4
¢s›˜—Rcan'tû0 %s` @text© eeam" %®  ²  às.__class__.__“&__üælength = len(s �haslf = t!._Ù Ãtranslate orü
Ÿ)ó•"\n" in s— 2if P  àQ  `nl != I 
 às = s.replace(  ,‰ ¡ &nlÁ Ã er1 | » Cget_ ³°# XXX What %0e wPjust «Eing?× 2b =2er.J Bè –ž &(bž W_A@(,ð or "\r" in s):
  Ôself.flush()
  ý_set_decoded_chars(''$ ånapshot = NoneB 2if E A %r:  d 	 g.reset~ áreturn length
9 °def _get_en�  r(B )U Dmake 0 = $ øcs.getincremental; .- <ingÑ & 8 = T p †._errors3 ª  � R +er±  A ±  ±  ; _ 	±   «  / « ‘ÖreaduniversalB —B F = I7�NewlineD	#r($ ,ß N –translate, 3 = 
 Ì j 9  ñ# The following three methods implÉÊ an ADT for Ÿ.G Bext b ´ed from the„ ñ is buffered here until# cclientG ðrequests it by call— @our ö B() o
  #()ª … °@ !, La"""Set� 
Ñ ¨ A."""”  : C .' =S $ 	Ÿ_used = 0Ÿà ] @, n=Ë
¡ ÏAdvance intoª Poffse V ³ � ° @if n— w 
’+# =m/­ [` %:]G Oelse? F F + nI ± 0 +=–(– ík„Ž ÿjrewind«�:, n]R* WÉ	QJ < nðraise AssertionE"("š Oö  out of bounds"Þ G-= nN a_chunkå 
â  ¿ƒRead and} ô n°:  � FdataµBª 8 "er] H  U :‡PvalueN0TruÜÀless EOF was¹ached. lBH 0sträÏis placed in|@ (re! , ·ts previousJ ‡ )i Pentir=Bput ê ƒis sent O‹ —r, thoughI @someÓit may remain¡ Ý0, yJ6o b‹ð# converted.

    ð    if self._decoder is None:
  óraise ValueError("no 2 5")
, N ztellingF ð# To prepare for & õ(), we need to snapshot a point in theb  ’ À# file where Š Ò's input buffË fempty.¡  ? Bdec_" ,: Š_flags =».getstate()| @Give” !is¹ @know… ære was a validÈ Æ C Flen(† ð) bytes ago with• ‹€ W (b''© )Î á# Read a chunk% Àode it, and ‘the resulJë…d_chars.œ ½šhas_read1¿\_k .G.- (] ¦CHUNK_SIZE9;elsQL K 	pof = noÏ 2put� Ã “Ú ¥ Û. (| V, eof¨ Â 3set3 I  ¬3ode / #if« 
/M °b2cratio = ö| 1) / ( œ I c :/ W 60.0àÄ [�  At¬ž,ˆ ‘Cbefob â,g F#I 3nexŠ ½$be GQ " +™®r H Ð ÷ = n”Ñ«
C sareturn2eof
ñdef _pack_cookieP¢, positionX ÷*=0Ö  ’  ™±_to_feed=0,§Á_eof=False, C ! vskip=0)ó# The meaning of aï ” � is: seek9š !se¢k#R!r °  -  X  , —> „  ¥  !,  GthemJ Ainto¶mrn z Ó 1 as 1EOFl ,  n Ù D 	ñ ÿ `actersâ  l[ dtö.  For most simplÉÙ $s,ñwill often just give aÒ @ off G(F' |EP<<64) 	Ì…<<128) |Ú õ(à P<<192= Tbool()c)<<256ƒk.unmgbigintFrest„¢ = divmod() 1, 1ª ‘ / ì0  . 	ã 2 À
        neeód_eof, chars_to_skip = divmod(rest, 1<<64)
  ñreturn position, dec_flags, byteH áfeed, bool(neef )g 
R ñ def tell(self):  i pif not  ¦._seekable  # ðraise UnsupportedOpera” ó("underlying stream isQ K "Ñ 	k  Œ ?ingj “OSError("$ @ disŸ ÷d by next() calld È fflush(y C" =è pbuffer._ & tdecoder% _ *  ä rNone orQ ”_snapshot 
× #if' @ !d_
$  iõ# This should never happen.†  (   •PAsserŠ2@pendŒi W text9 
W  0# S•õbackward to the Û ð point (see _reaÆ Funk)›   �e_inputOH Ê pÙ† -= len(4 )• €How manyÿAodedDùacters have been used up since¸ ?q v},ç Î  › H 1 !ifm i±:= 0·A# We‡ én't moved from‚  :( mÝƒ Äpack_cookie(ï	PStartãg *Áwe will walk‹ rÚ Q# foræÿ	until it gives us enougho Â °saved_stateÅ9A.get T<try00Faso@arch…   an acceptÚ  sß 1p, closeˆ&ou»  >�# current—  R›Aale: ,ÿ . õ() has a large overheadG Àregardless o unk size; ^1antY`number" Asuchq Ks toL Ðbe O(1) in moÿ 1itu¦ “s (commonoÑrs, sensible @`˜ �Actually,µæÁbe exactly 1S`fixed-­  Ó{cs (all” S8-bit  ñ, also UTF-16 and +32}  _{a = intLQ._b2c* */� º = yack = 1Œ aÅ !  Ù. < C  Xwhile0 >— * í4r.s—H(b''W
   3 1# DÌ J ÿ˜emptative˜	¼  6 "n ¯ q  à(next_input[:sëkip_bytes]))
  ýif n <= chars_to_skip:'  6 þ	b, d = decoder.getstate(U  .  Y Oot bL  " ñ# Before pos and no ¨ Ä buffered ino o => OK˜  L �dec_flags¡ & 	å _ -= n+ _break æ# Skip back by¬ aamountÉ ÿ reset heuristicG  h— ‰ _len(bI)  n == 1K Oelsecð# We're too far ahead, O ½ ]a bitQ  N $ œ  /ac ! =\ _9* 2Z § <  ›I = 01  ‡ jsjP(b'',ì9))
4 ù# Note our initial start point.,  _z=€sition +Â  ’ .  am	$ *ifE^ == 0› —ÿ haven't moved from the®  õ
return self._pack_cookie(Ë ,A AFeedf WA onepð	 at a time.  As we go, nL9theå é# nearest "saf² 2" bÏ Ê Àcurrent loca[E "(a”@ whe£ heÖ W@ has{ Ehing\›, so seekl`# can ‰ "lyü L!reŠ`advancU this� )w0_feà
ˆü need_eof = FalsC7¼ @d sil `‘`÷ ~~i Pfor iñfrange( , Înext_input))UÀ +%
z !+=R ‰ "r. (a o[i:i+1- fœ† rB Ÿ
™ ‡2# Do ‘ is empty&æAis a   R  ¬1 +=s	¸ '   ­ # µ @d3 ^ 8,^ ,): A¶O, 0,
 \3 >²À      break
  gelse:
  ñ## We didn't get enough decoded data; signal EOF to' ]more.M dchars_< r+= len( "r. ý(b'', final=True))F °need_eof = "   :if i < ~to_skipå  ê ðraise OSError("caò ùreconstruct logical file position")
€ ð# The returned cookie corresponds!ú
the last safe start point2F Â self._pack_O (r  ¼ C R_pos,N ô_flags, bytes_fed, 5,^s*ly”ñr.setstate(saved_ ú ‘def trunc @elf,f=None)M Å fflush(s  if+ @ is . -  Ó Rpos =ü Gtell6 ubuffer.€ 7pos— pdetach(| ‹ "ifW < ~ SValue. ‚already ^ 6ed"Ñ  j .æ : Í _ Ã3  ! =	 ê 2   nAseekÕ ,`§, whence=0ç  * �_reset_en­$r(µ&  k@"""R(  ˜, ñ (merely useful for proper BOM handling)"""˜  H   +trB  T  "orŠ'_g¥ N; Áxcept Lookup‹
' $ ¹# SometimesÃ @doesÅYexist¦  6 Ipass  ¤ì^ != 0  M Ò (0Ç $ `  .®(Á  «jclosed{ £ (B on . ¨œcif notq C;ablðS ðUnsupportedOperaçð("underlying stream9Q  ekK 
k ‘Ê == SEEK_CUR¾  ¤U‹ 	›ð	do nonzero cur-relative Û s�  H`# Seek¼ !to#`currenvÇù should attempt toa# sync: ˜Q with U 
Î) 0[ ÓëCelifÜK?ENDK+ÀdOperation("÷can't do nonzero end-relative seeks")
  ºself.flush( ±position = $ pbuffer.D ª(0, whence3 ( ÿ_set_decoded_chars(''( énapshot = None– "ifu I )r:  ¿ l h {r.resetÁ _ 0_en‹ $r(Ð 
‹ treturn  g #ifâ Z != 0 ôraise ValueError("unsupported7 ’(%r)" % ()&,)x ¿if cookie <[ 6neg½¨ 1 %r] H ] ÐÏ ð# The strategy o_ðek() is to go back t(  af- —art pointG °and replay * `effectP Qread(ïà_to_skip) from' 5re.C ðstart_pos, dec_flags, bytes9 ùfeed, need_eof, R E = \I runpack_( %)
) o# Seeká 
Ÿ  ë° Àcç$ ã” pRestore 	@oder•its state=+ sŽ­ IP== 0 œx 
·	 2,elt0 orš £  	Œ\ 2½ < } gr­  ¸ A.setW((b'')Eÿse(S vq + Œ d �
¿ Ð# Just like _Ê€_chunk, �	£ddave a x � ” Rinput? O X (éS : >Ä  %   ) , (x @0A = p k# Skip‹'ofd kactershf len(³ 1) <6 ÷“ y i#OSfÝr9Ålogical fileÝ‡w z_used ={ -5M Ž   / 6 Adef Û ä p, size=Ð)c  ÷ ._checkReadableÿ x0ize‹ 8 7  q  O U = -1Ielse$ À try:
        Ðsize_index =  "._ 5__
% ù
   except AttributeError:#  / ’raise Typ! @(f"{U ù!r} is not an integer")? NelseQ  > š ˜ (6 pdecoder Telf._ Aor s 4get 7 !ifé J < 0p ù# Read everything.¡ ¬result = (^ ¹d_chars() +2   › . A öbuffer.read(), final=True)ã  > n sÌ n /''( `napsho¨ INone� rreturn É  yp# Keep š ò	ing chunks until we haveC ÷ ¢acters to _ 
5¬eof = Fals‹ MÞ ªÞ  ù
à ¢while len(Á 2) <† 1and[:eofÑ >�  zj  Õ _Ò  )   Y = +=A— ( -† 
¥ cdÁdef __next__ú)¦ ” @telli)DlineÞ ¸   ¶ !if÷   R  Ç V s
" x  {seekablªÓÑStopIteration×  i î  ‚ 
  ì ª  U ,£=‹÷  ƒ ¢jclosed½ CCValuD"Q b from 0 W file> N 0izeb h 
O  HQ = -1   µ ð:try5  '  9 s ƒ?ize�ä ò # Grab all the wöd text (we will rewind any extra bits later)Æ Ý  °_¨)ù20tarx0‡ GMakeƒ ðr if it doesn't alÝ € 6istt Ú A×
¢ � 'r(‰ ’pos = end	  “ F g
Q  Eã  ‘ Ptrans	
$  å P# NewUs areÁ 2 öd, only search for \1 B   ™  G Ð.find('\n', sA
P - 0if 0 ,>=±    ê  ' &+ ë   Àbreak
        eelse:
 	 ùstart = len(line)
' þ	elif self._readuniversalM 4# U @ newL ù search. Find any of \r, \r\n, \nk  • ñ# The decoder ensures that4 ú are not split in two pieces¸ M ð	In C we'd look for these: €parallel” }course.� Pnlposñ ine.find("\n", 5)/ .cr/ r/ 3if 2 N= -1R Ä 3if … $  ( ý # Nothing found›  $   º  Ò ï   / * 0# Fd À    2end½ ?+ 1’ ]break x= =ú Š }lone \rF 	‹ l‹ ‡ <­§‰ Ó 	„ Ò „ &"==… ? + 0‰ r‹ 26Gx O v v Še# non-�s | ƒ¶Á.nl·0if 1 O>= 0Þ¾  ' ++R  ôÌ 	›  K@ize j A andJ  ¦ ) ?siz¤ |   ¡  # reache< @gth  	e |  ! l @ end(ù
seen yet - get more data'N WwhileŽ_chunk()) Ý (¾~d_chars(    
  > Â #+=’ Iget_o (Þ>0end÷Ifileî  Ž ÚsZ *''\ , `napshoF>NonR areturn}¥ ñ 	é>Ò
7 =  Ádon't exceed X À# Rewind _deó&coded_chars to just after the line ending we found.
  ÷ self._rewind_deK P(len(= 0) -@ Epos)7 areturn\ ¡[:endpos]
 ‘@property pdef newG  s(l !):  ~ D   .{ $r.- I if  ó else None


class StringIO(TextIOWrapperb 0""" ð I/O implementation usòan in-memory buffer.Ã ðThe initial_value argu@ Q setsV Àof object.  6 ¾ ã 4 qis like7 pone of š ± â's constructor›2"""Œ  A __Ž !__A,› D="",bS="\n"ÿ  adsuper(&,P%).N ¡BytesIO(),°  2  @encoH�="utf-8"9 ÿrrors="surrogatepass? W= ‡ô# Issue #5645: make universal¢s semantic» same as in“ü @# C 9 òion, even under Windows˜ !iÓ1 is’Ô   ·õwritetranslate = Falsen *ifÈ K ?notO   o àot isinstance(œD, stô ~  °raise TypeE})("6   m% be= 1 orw  , � E{0}"¦ M  ».format(typ�  `vname__)§ ? 
À &  vseek(0)1getpá ½fflush(G Å1r =ðZ æ „ D_geto7 bold_st«C A.get '  Wreset :tryÞ0  Á .mÖ Ö), final=TrueÉ  lW H  r.‰ ® (¸ 0c__repr10#yR tellÚ @its @ E. Indë�# that's A
Yfdetail*#
– Þ.e®,ÿ O9  �dõ … ;  S ª ,ch+ â# This doesn'tOvsense o
ß OÒunsupported("X 0")
Á ü �s used byrÀ site module°ñadd custom builtins.@ 
� o~ dð
s are almost immortal andð
 they keep a reference to ðir module
# globals.  Defining" @m in S site- b wouldT †too many[ ós
# alive.
# Note this means s 1 shG ”also avoiR RhingsC  }  itR ž ó6

import sys

class Quitter(object):
    def __init__(self, name, eof#  '   . ! =  <  Peof =2  S CreprS H ðreturn 'Use %s() or %sg�exit' % … k !, v Geof)X CcallX ·, code=Nonec ñ	# Shells like IDLE catchŸñSystemExit, but listen whe¿!irj  Ù õ# stdin wrapper is closed.# 2tryE 0   Asys.6 .+ (¸   jexcept. EpassL fraise Ÿ (Û $)
¼]_Prin½1""" âactive prompt àps for p7 ¤ñ license text, aý 1 of„ ñcontributors and.ñcopyright notice."""
/ ÒMAXLINES = 23 ÷J ðdata, files=(), dir	 ³¬oú/__r __V 0 =  ’  f6 €lines =   ‡  V    ò[os.path.join(dir¦   º X   Z0dirw Í d (    , u  1   (s]3Qsetup÷fþ!__Î 
:Fw  ï w  ~  à sQ Ê º ¤with open(6 Ê, "r") as fpA  0   ‹ wfp.read    Ubreakº   Ž OSErrorW 	' if‹ö
* y ç   e  H2¶.split('\n'ê( ‘cnt = len—.…)¶àD Ó[ .ifM 2 <=ãL
Ñ äR "\n" [ Ç Z Oelse9 3TypdPto se`ae fullq@ext"ná  I,)*2ä l›‰ ä ~‚= 'Hit Ré ‡Pmore,é0q (Z )õuquit: '« Ý eno = 0 zwhile 1ä ° l icbrange(L ",  * +mð):
               òprint(self.__lines[i])
  ùexcept IndexError:  % Ybreak Nelse(  a ano += r ‰MAXLINES:  P ­key = None `while ! !is" f B Êinput(promptÕ  $   !ifL ÿnot in ('', 'q')U  1  z › L  ==C B )ó

class _Helper(objectu ñ"""Define the builtin 'help'.
ðThis is a wrapper around pydoc.+ Ð that provide*   ¢ful messagX4wheZ  O �typed aty ðPython interactiveN 3mpt„ €Calling X +()6 rš starts aG  2 ‘ session.Ð 	L qthing) ™s_ A for” p” /! '* 'C 2"""Ádef __repr__ØW ¼Áreturn "TypeZ !()\ å  ž Q, " \š  6  2"or4  :  . r about  !."8 † Ccall† ÷ , *args, **kwds• bimport»<  p ª Ð(? ñ
"""Strptime-related U íònd functions.

CLASSES’ðLocaleTime -- Discover¥¡d stores l#  -specific e € informaT ¦  B  RED ñ Creates regexesRÀpattern matcÐ` a str0ñof text containingO  õ  p “
FUNCTIONÄ €_getlang~ pFigure ‚wó  @uageÑ ber Aused•  PÜ s s@ F PCalcuFsi‚ pstruct K@esenb!by “passed-inÕ 
�
É <  n   yÔndar
from re  0ompÕaD"_c % ¬IGNORECASE rescape >  # @dateŽ h (  (     _	 ,|  ! Ydelta2  7 	1zon�  _  1 _   )™ t_thread˜  al(pte_lockn   _ 0

_ ‘__ = []

c	(P,#  ôˆcurrent bset to<m … 0le.S ( „LC_TIME)¶B¹SAŸand handlM H ¹!todZ„ATTRIBUT² “�f_weekday­Tfull  ÷names (7-item liséa6 ð abbreviated weeókday names (7-item list)
  òf_month -- full  2 &133 õ; dummy value in [0], whichM T  öis added by codes as ¿abbreviatedz ,z o Ž  z @m_pmë öAM/PM representation (2î ® ÀLC_date_time; ðformat string for  / Q % L G “ B  j  ¯‰  „  % 1zonÌ õdaylight- and non- …savings / 
X „A† of setsý @langú ²Language us…instance�Ctupl0A"""
l ñdef __init__(self):  lò"""Set all attributes.8    POrder‘ Àmethods callrbattersÅøependency reasonA °The locale Æ ¾  isà À at the offsƒ  nd õn checked again before° àexiting.  This°ó to make sure thU Í ‘ were nott ewith aO 0mixÝ "in› Ërfrom moM  n ïÀ t @wouls•st likelyN àhappen when usäpthreads !reL  G3s a#-dCtL Afunc[äwhile another ? `hanges1C  Ol%e ; %inO iB  „’till runnR`Properr » ç  ï åI ðlocks to prevent c‹  1  c *Œ  Ü  Z Ee isL {  &ø  h®@is dyÀin case some AdoesË¦think abou2"do† iROnly ;ppossibl‚ s‡Es ifZ Æ e‚¸ Ú5did°  EPtz.tzµ atˆPan isY  Ø õprogrammer, though,J  siµu µ ev Ðis worthless ° ou)!at5œ á ¤   ×.ap = _get (A  __calc_weeÛ Å a í  é  'if« A != ¦  º   Ü praise V=rError("Z{Qed duQ âQializ”"þ !if^0.tz�j  "or ðdaylight != selfÇ.daylight:
  ñ,raise ValueError("timezone changed during initialization")
H ö	def __calc_weekday(self)f `# Set  $.a$ B and f  usf Áthe calendara  ¬ •# module. J 4= [0  ã ð_abbr[i].lower() for i in rÎ E(7)]E | E OnameE Ù %= › h # m  D_monthB!f_" @a >4 < í  4)1354  F 5	F ¼  4U 2 3 = ö ._am_pm.  C by €ime.strfã2().P aõ0The magic date (1999,3,17,hour,44,55,2,76,0) is not really thatº #F ò#al; just happened to have used it everywhere else  aI Dstat� §was needed þ  ˆÒ0or °  ðg(1, 22‰ é  ú �_tuple =   @uct_ (ö 
)›  I [.Ý  d(=  I YQ"%p",] j )ŒB ÿÀ K ŒN ‡–  - Ç P$ ,M  2, &  • ü¼ #™ ­ 
)Usû+22ù M&€because µ—amount ofk ðoverloaded numbers;Àminimized.  wPorder²àwhich searchesºL v£�s withinr ’format stŸ s R± important;f—liminatesK ðpossible ambiguityl 0 whN 0omeb Æg representss TÕ?:û ¤Ø ºfNone,  Ê' 7[0]l bcbå ? 1? x? 2? X? ðreplacement_pairsì Ñ('%', '%%'), µ.0[2] EA'),Ã  f / ![3- BH sH aH À              ó
(self.a_month[3], '%b'),  am_pm[1 Pp'),
4  p('1999'; Y; ' y !22 H@ !44" M0 !55 S !76 j> !17" d0 !03 m  » ÿ# '3' needed for when no leading zero.; "('× wi !10w EI')]/ ñreplacement_pairs.extend([(tz, "%Z")v Ñtz_values in ’…timezoneL u  Å  tzH U %])F   ðoffset,directive, q((0,'%cË Q1,'%x
 •2,'%X')):@  v @currÒ àformat = date_± [[  / s pld, newk 
^  3 ð# Must deal with possible lack of localº )foœ > €manifestÁ itPð as the empty str ÿ(e.g., Swedish'sJ  p ðAM/PM info) or a platp returnO pa tupleŸ g O  y #s z °MacOS 9 havA  C ô ­ Ž('',''))|nif old5 û ›
 .|#(o� > ð# If %W is used,2ún Sunday, 2005-01-03 will fall on week 0 sinc®#3 Ðoccurs beforeY � first Mo^  4 Ÿü year.  OtherwisP $%Uœ 
 9_} =  q.struct• ((ža,1,3,1 j6,3,0)û pif '00' @ f	 (&,Y f  <©U_W = '%W'÷Nelse«- U- H? = Á–'11', U_WÇ  çE.LC_F 	š0•) 	$ 1$  	$ 12]
á ¡def __calce ·2Z# SetÎd by usìv.tznameÌó# Do not worry aboutüQility'3ime9 S[0] =ñK [Ã Q# andµð.daylight; handl€ atì@strpã ƒ :try° ftzset(lúexcept AttributeError8 6pasQs£  ± L @" ¨ $  & Bno_s,€= frozen˜ ã{"utc", "gmt",r[Á[0].lower()}¾ À     if selfÇ.daylight:
  õ!has_saving = frozenset({self.tzname[1].lower()})= OelseK 3 T Óimezone = (no| &, ˆ ò)


class TimeRE(dict)k ð"""Handle conversion¶ ñm format directives to regexes."""
¹ Ðdef __init__(� ó, locale_time=Nonej  #ò"""Create keys/values.J    ð Order of executŒ Àis important” ø dependency reasonA  ˜  I   (if‹ ï      ª .© ( =, Ú  ' “9  Lð  [(š0bas‘0supæQ   .0{  m ð# The " [1-9]" part2thew! iƒrmake %c¥¹ANSI C workL ñ'd': r"(?P<d>3[0-1]|[1-2]\d|0a   29]|n :)",? f? Íf>[0-9]{1,6}' H' ‘H>2[0-3]|l ]\d|\d. I. ‰I>1[0-2]Œ 0 G0 BG>\d % j%  j>36[0-6]|ñ 5ë ó õ  	 ÿ   ] m] m² M0 M7„ 	 S'  S>³  �/0-. U. 5U>5e4à \  w. wƒ -6]Õ u" nu>[1-7" V" Vr 6y 0# W¡ð set below by us:'U']y_ yØ¢ ð#XXX: Does 'Y' need|Òworry about haùless or more thani #V© 4 digits? %'Y… Y…  _‰ %'z% `z>[+-]% 2:?[¬(
 B\.\d"]?)?|ZH AA': :‘__seqToRE,‚û.f_weekday, 'A')‘aB aB aB BB ý f_month[1:], 'BD bD aD bD pD �m_pm, 'p> Z> 1(tz0tz_]Bs inmà.Ž %	  `for tzL X ð),
               h'Z'),
 ¥'%': '%'}) óbase.__setitem__('W',  g ÿU').replace('U', 'W')G 	ñc', self.pattern( òlocale_time.LC_dat K 
xK F 
XF  ™ 1))
@def QqToRE¿ ñ
, to_convert, directive):0  jB"""C  ð a list to a regex string for match aG .w  G ÖWant possible- `valuesS Òbe from longef õ shortest.  This“ Ãprevents theT ¢ility of a\ e occur� !a i ¥ that alsoL Sa subÇ ? hlarger0 £should hav¹ õ ed (e.g., 'abc'L Awhen Xdef' @ Abeen· , )!5"""I ”@ = s&d( °, key=len, 	†rse=True» �ð 'inàÔ ‘#ifä Z!= ''    Ubreak’ Jelse$ †return 'ÿ ñ= '|'.join(re_escape(stuff)(  ™ º C å(?P<%s>%s' % (˜ ò 8gex1 † 0%s)* @ u ì©,~ :matÛRÆ 8  /  ) ¤cformatå«@Need³“make sureXÀny character�ö
at might be interpreted aËy ²syntax are 1dn £processed_œ  ¼¥@# Th‘ ƒb() callM  s  š ÇmisconstruedK $asä� ò.  Cannot use re.© ’ since weÇto deal withL ­ ÇÕs (%m, etc.).( _¨ ös = re_compile(r"([\\.^$*+?\(\){}\[\]|])"	c  8 2gexF Å.sub(r"\\\1"ÿo ³whitespace_Kmentz _'\s+'f  = q  '\5 q  le­ þ° 
S €_index =ŠAmat. u('%')+1À  ¥ 0"%s "8 
< A  ¢ +[:– ?-1]G  %[L K &]]Z ‰ àformat = formaót[directive_index+1:]
  òreturn "%s%s" % (processed_format,  !)
4 õdef compile(self :  V B"""RV a+ °d re objectO @ the åmat string."""A ” 8re_j “.pattern(� ò, IGNORECASE)

_cache_lock = _thread_allocat ò()
# DO NOT modify _TimeRE= £ or _regex Ðwithout acqui§ ¹ i  i ª
# first!
H "= W ñ()
_CACHE_MAX_SIZE = 5 # Max number of s Ées stored in† 
“ `= {}

†ò_calc_julian_from_U_or_W(year, week_of_ 0day    ²starts_Mon)»Á"""Calculateè J[ Ñ day based on R  K  ½  Ë 1and- !ofÊ   %  , G� u _R ñrepresenting whether^  3 X L vassumes! I s’ 0SunP Qor Mo
  (6È%0)S£_X  ) °= datetime_	 .c1, 1).$ !()u ñ# If we are dealª 1ith† 5%U W  (9  ” s), it'sL @easiã Áo just shiftJ ƒview to É  beh  =¸ R * I  l . gif notZÏÎ ‰A ù ( �+ 1) % 7L  0 %H = ( 	, `# Need´ `watch #Qfor a‹ r 0 (whe,r Ä  +0 is¹ x #Ú p same aà àpecified by %UÎ2%W)ó  ý �_0_length¥ 27 -„è Ó i¾V == 0e01 +Ÿ N ¤ Felse9 qdays_top ! =ó ’ b+ (7 * T ï B- 1)S f
y K 	ˆ 
äSV(isoÕ 
  $, 
 ?dayÎ�ISO 8601š , Ë Z 2dayx &    ¥0artyosßF 01 ¿ / € containÓZ4 JanN  z€s range ÂB 1 (W )^27 (ý$1corÑ<on Î 	 t°, 1, 4).isoˆ ‘day() + 3Ðpordinal? 0  ! @ * 7!   *&- i 8 $# : m`e negaX £ð0 now, which meanÎem ðitpreviou�calendar}d %ife 6< 1vz +ò 
ð1).toordinal()
     ó   iso_year -= 1
  pordinal �datetime_	 (/ £, 1, 1).to+ !()= ereturnV #,  À


def _strpN P(data ñing, format="%a %b %d %H:%M:%S %Y"):Z B"""R] ða 2-tuple consisting of a Z ð struct and an int' qtainingJ  the number6 ðmicroseconds based on $ PinputO  `  O 1theA ¯  T."""
 ÿ index, arg in enumerate([ð  ]Ú  tðif not isinstance(arg,c %  ) umsg = "H)l ðument {} must be8 ,Q 1{}"œ  ;   òraise TypeError(msg.Ï (» 1typ} 2)))× òglobal _TimeRE_cache, _regex b Rwith  R_lock¶ t qlocale_�=H . F  0 ÷if (_getlang() != & . 5 or.  2  [ |.tzname/  1 Œdaylight3  z	2 = ø †   k.clear! Ë  Hlen(X ö) > _CACHE_MAX_SIZEm… îP  ‚ ÈR.get(  Î M š 7 
n :try  6 /  f -�.compilek  9 Q# Keyœ ¬Ãd when a bad(á is found; canï¹pecified asP# \\,Šðwhich case it was a%‘ay % but ¾ùa space after itK fexceptž nas errú ð bad_directive =% ‰.args[0]P  í  if× / n= "\\"V  . Z *"%Ü $ 0delr j LS ValuùP"'%s'JZ² 2in ½ " =" %L  h  (� Ò²)) from Non:7 0# I)è²only occursí }„ 0str~<is î �H 5õ 0stró%b æ õ ± ùÀ[: 3] =5  (˜ h.matchò^Z6und½ µ  Þ @� %r doesÚU � ? %r©
| À, format))
 ó   if len(data_string) != found.end():
  ðraise ValueError("unconverted C õ  remains: %s" %: A   . q [m 1])
6 ³iso_year =  ANone ñ month = day = 1 0hou+ ñminute = second = fraction = 0* btz = -6 •gmtoff = \  _6 ð # Default to -1 àsignify that vÁs not known; €critical/ Qhave,‚ �# though  è pweek =  4_of÷ ”  h_start² #8  Âand julian d­  edz  I ` so as  · Ral ne ‚calculat[#É ›  x  X =V (³@_dicŒ  `.group !()? Afor  r_key inT4 X.keysZ²# DirectiveEö	explicitly handled below�±#   c, x, Xo  \  &  2 õy making out of other dk 	9 IU, W ð    worthless wiµtuaof thex1 'ifí f== 'y'¬  œ ÆAint(0	R['y']/ $   €# Open GN¡ specificaÃ Ròstrptime() states€Ea %yŒ G ’ w « Prange´[00, 68] is  century 20 Bwhil F   #[69,993 2190U (   "if®Z<= 68   !+=k 	® Oelse/ 	g -elkYkYkG  GG  ›² ,= ¶GK mK ³H mH BH plocale_	1.f_^ i.index\¶B'].lower()dù  bf af bf df [dHF ùG HG IG IG  Â@ampmV ÂÔ.get('p', '')n	Ü1# I0Pre waÞ  AM/PM indÙùor, we'll treat this like AMH 1if ~ ˆin ('', ‡am_pm[0]­ ®   p# We'reîðAM so the hour isû correct unless we're
  ÿ
# looking at 12 midnight.*   0 ==.  AM	 mhour 01 1if  + :  ‰   < �elif ampm\ þlocale_time.am_pm[1]L 0# WÞ ð	 in PM so we need to add« bto the’ ’ #$Onoon   ¥  12w "==^ -12Z !6¿ +  > 	�group_keyi :'M'> ÿminute = int(found_dict['M'])I 	*S'I osecondI  SI fI 8 = ‰ 5f']ˆ  è B# Pa˜òlways return micro… snös += "0" * (6 - len(s)Ý  U ƒfractionÀ s D A² ¨weekday = m#f_ i.index]§A'].lower(ˆ j  aj aj aj wj wÐ <3if ê  b0 !  ) 6ÊOelse. E-= 1/  u² u² ‘ c jc Tjulia$¤jb ¬ Úin ('U', 'W')ï  ˆ ƒ_of_yearzV ¹‰ O5if   r+'U§  % �# U start¸Êek on Sunday + † _4 / =ª<# Wd /Mod ò3[== 'VÕ 1isoç(/'V~ K zK zbzbAif zYZ9  .�gmtoff =tÌ J 1[3]M :M   Q  Ž Êz[:3] + z[4:î "   !if¸jz) > 5F   q 5] != 'q , 0msg	ð
"Inconsistent use of : inÿ {found_dict['z']}"
  ÿraise ValueError(msg)2 ýz = z[:5] + z[6:]* þhours = int(z[1:3]N fminute& ?3:5&  fsecond& ž5:7] or 0Q ¢gmtoff = ( P* 60  T) + (o  Y » F ¡_remainderì 8ä  ó# Pad to always return micro] .^ ü_padding = "0" * (6 - len(ˆ )ñ “_fractionp9 < +  v S ýif z.startswith("-"):Æ  JT B = -
 % ¢ .  7 úelif group_key == 'Z'{ ð# Since -1 is default v¶‘ only nee’ðworry about settaUtz ifn  Â ð# it can be someth( Úother than -1ÁTrzone =  aªZ'].lower(R2forŸ Q, tz_© ðs in enumerate(locale_time.  ] q #ifp     B O 
" ×   p# Deal ÃR bad g  ”up where n € names a )he! J   á# same and yet: �.daylightŠÿtrue; too ambiguous toK pbe able9‚tell whaS Û Ehas [ savingsI @if (Ã 0.tzÁ 0[0]3  1]² = +  Å  Û Ñ† 0noteï("utc", "gmt")—    _breakj Oelse£ 8 tJ=  # [ Ô“the casesÍx1itiÊ"izÈê# don't assume1 s �ÑISO week/year„ 0if   ×Né Diso_    Õ 0if !  G 6 !orW 4day 0  Ö p"Š d ðdirective '%G' must¡BusedÐÊ  " N ‘ N  V'% a› J = ¡('%A', '%a 0w',„v'%u')."ô�if julianö *ú pDay of · $j'J ¬ àcompatible witÿh ISO year directive '%G'. "
  	0"Us* ÑY' instead.")2 Ñelif week_of_Z ðis None and iso_ q is not :8  m : 0day   5     ðraise ValueError("¿ P ¿ ÿV' must be used withÐ ?theº aÕ  › ‹ ¡('%A', '%a Äw', or '%u')/ × Oelseé %ÿ is incompatibleì ›« `'%Y'. Õ		 ;ËAleapûÁ_fix = False "ifm¡month == 2h b  9« ’= 1904  # �is first m U ñ of 20th centuryq  _ " � 2TruŽ «] � s 10

J 0# IØ` know $w!of E  àPwhat Ã  !at5â, we can figur| Q# out< fJulian5 eÎ .u Bif j ¢ # z  d D	~i  F à_starts_Mon =  „@ "  Ÿ 0 ¨Í E   ¢ ‚= _calc_ Ð_from_U_or_W(  Aday,è  G  ¸ v = Ï a o  Aø 5   ;  ð @  7 ,pÎ  V(E '  
  O É F + 1Œ 	¹	ˆ ^ <= 0 Y -= 1yéP= 366š°calendar.isÖY)˜93659 h 0+= C Ä	– 
_P# Can© @pre-Èð ulate datetime_	 r() sincÌ¢change in Á} $# ? 1ion{ðthus could have different vËA for
 ë 'ofI gR  °ð # Need to add 1	 cresult¦  U `  º ÿ!1,|0K -=ð  1 !, ¡,¡õ).toordinal() - \¬  �   )2B J1, 1< +ç S:Õ€Assume t@iU‚y botherã sincludem � @ (orhit wasŠ ‚sed abov � à/week/weekday)ó it will be accurate.
  õdatetime_result =   	 Õ.fromordinal(5 < 	 ï(julian - 1) ++ 
 Y t  	 ô (year, 1, 1).tol %))C  ! ˜ ª . $ _month%   & ?day$  1day" pif week% �is None:  ç  ½ f s, day).* (À `# Add í ‘zone infoT ñtzname = found_dict.get("Z")
" €if leap_ç F_fixŒ ð# the caller didn't supply a / ð but asked for Feb 29th. We coul2 d  Ú Q# useR @defaqof 1900< Ácomputations@ 0setQçback to ensureM @thatr Qruaryw b is sm® æthan March 1st†¶ =w þ }return `,k  ¼ úhour, minute, second" Ž", ž@, tz  }ð , gmtoff), fracã  _ °

def _strpÄ_ P(data @ing,%òmat="%a %b %d %H:%M:%S %Y")µB"""RÐ añ struct based on~Pinput ping and í Tforma A.""" t« † ™ ” A)[0]+ L ¼ .z È Att[: ü_STRUCT_TM_ITEMS])ø  © + @(clsè(ÿclass cls instance,¿& =¼# Œü’ = tt[-2:=Bargs t:6] + (,á#ifG ç;not8xtzdeltav H (±"s=ˆ É:cro Šn  õ2if ² ]    ,tze  r(� õG 7elsàB : s+= (tz,­cPcls(* ð)
"""Thread-local objects.

(Notqðat this module provides a Python version of! tO Aing.R !
 J�.  Depend7K9 K ‘you're us´‘there may�
 faster ¡ðavailable.  You sh0Ð always impor· 1e `… `…  &5
 `£ _`.)

 ©D ¢managementä / dÐ.
If you have—!a ^  @want€1be ‰      C ð , simply createñ0
a thread-local object and use its attributes:

  >>> mydata = 5 )() Ï.number = 42  
  ñ

You can also access the S -ˆ Û's dictionary~ 0.__ r__
  {'t j': 42}u ' ð
.setdefault('widgets', []¾ *[]5   ÿ
  []

What's important about90s iÆ a Aeir 'Aare
Ö D to px. If weú - Ðin a differenG  �û Plog =” ˆð def f():
  ...  ò items = sorted(ª,.  ()ô 2 ±log.append(  ? ^W = 11k 9 	( )'1(3ingdq& = !.T„�(target=fƒ  h* e.startf Ejoin  lo] ÷[[], 11]

we getH \ñ.  Furthermore, changes made in~o ™  
don't aff B R seen+ è	œ	åñOf course, values you› bfrom aîvä, including a ¸
€ó, are for whatever© � was cur2|P timeÒ ? &  ²  o< £at reason,— ‚nerally ù wëÔto save
theseÅ Aacro¯ O @s, aõÐey apply onlyë Î­ ‰ py
came ø %.
þÙcreate customÐs by subclass O G  @ MyLÁ(" 	½ Žõ :ù__init__(self, /, **kw<  R  A�update(kw¤N qsquaredM D qreturn K � ¡** 2

This beq0ful:0supk °w�, methodsŸ
¼ `ializa `.  NotòQat ifÐ¤define an ê A õ	, it will be
called each5	‰ Ó@usedøpa separ³Ú0.  Ã `
is neÄ!arüž eZ á	Ð`.

Now­ 3we 
ã[% =æÂcolor='red')G pwe have=å hD � 
 }aÌaitial Q ,  1
  h ½3delÿ. c
And aZ� that ope#2s oU ;\ / G‘4

As bef—   @ ~U œbÀet=f)
  >>> óthread.start()
  >>>  Ejoin ó'log
  [[('color', 'red')], 11]

without affecting thisK “'s data:
a  my º.number
  2 b ôH
  Traceback (most recent call last):
  ...
  AttributeError: 'MyLocal' object has no a(  È ð)

Note that subclasses can define slots, but they are no  ;”
local. T Äshared acros sú `  � (< Æ   !__o b__ = ' '6% =? °	OO = 4P Q  ²P

So,Ê q separaý  Ê ¤ ÿ# =½Qing.T'”(target=fy * >

0s wbewe seej 	¹ p
  11

�Bdel  ð	
"""

from weakref imporf ¤contextlib  ámanager

__allS!["só"]

# We need to use)!s m  th  Ëemodule2
#  å may also wantS Aur `r !` ú�, if supÂ Afor  ðs
# isn't compiled inD  † `e`i @.  TYð
creates potential problemM  �“ circularrs.  ForêÐreason, we doy Um Áing`
# until+’bottom ofÖ�file (a hœpsufficišàto worm around: /
#¢  F).  v Îôplatforms on CPython do have06
# 2!3he ± 2, ax Are iñ& 
#ž Tn, so ðs introduced by fiddlþ †Porder )€s here w< ¡anifest.

ç! _Ø@impl£b  """A –W  _-* ­ dicts"""
0keym!  	 0 Eargs @lock #__#!__4 Âá __init__(selfl c 0  #³@ keyýq2he é'0�  k? ðWe keep it a strÔ  ¡ spU /@make €unlikelyÓ   h ¡ë  M ¦# a "real"o i  · .§ B= '_2inga.  h@.' +† 2(idê  ¤ ^  ê R{ id(Û ”) -> (ref  ‰5) }�  ü P = {}ŒX@get_ n ç p �"""ReturnaØ· EAcurr'NP. Rail1Key¶ Enone| �$d. _ 3 = M ¨   2  r~ ¹ B[id(7 ð)][1]

    def creóate_dict(self):
  ð"""Create a new $ õ for the current thread, and return it."""G Qlocal< E= {} `key = s E.key P $ =a _ %()" ’idt = id(  Adef m ÷_deleted(_, key=key×  Þ a# WhenÉ 2 ƒimpl is 9 �, remove! g µ attribute.Š  J  B= wr ª    #if# _ †not Noned #   3del( !._�u__[key]l  Ý a Þ idt=idtÞ 3  | Û ü Ø
Õ P# Notþ aá is@ ±suboptimal Ô    ûÅ object gets®  Ó û)# caught in a reference loop. We would like to be calledE ¡as soon asŽeOS-lev.Ú ends insteadÅ Ý  ™
 ˜  Û —cl) .Ã`s.pop(r¦ !wr   =ã C,†¡#, œ,ø×/   
 Ð � C� Q[idt]" ; ‰   . ¤´  ð

@contextmanager
ka_patchÏ ]#=îe.__get!__* A, '_Y  __. 'Ë 6tryðdQ  A.getê™ÿ except KeyError3 c�6  i€args, kwAmpl.ƒ   õ # __init__(* b, **kw¢ Qwith ” ; Flock ßB.__sñ ì ‰ ‚__', dctK  � Òyield


classO »__slots__ =* :N 
· …ø _new__(cls, /, ¹ R  o @if (Ò q or kw)Š 3 .ñ  ãÆ Ô ?   ¡raise Type|à("Initializati|Ðrguments are /¦supported"ø  f "½ #  e2 = &  ý …   ¼" =Ö  Ù
@ $  ¥‡ = RLockE è ®Üš,ïX #�@needŠfnH"Çbnticip!of© » %# lSbeingÊ,N ñmake sure we don't 7 it? ö again ourselvesÉ‘  ë Ê v3˜Gnameôàwith _patch(seglf):
  ñreturn object.__getattribute__(self, name)
8 rdef __s& 	! w, value` !if: ë == '__dict__' daise Ar aError(i ¤ C "%r¢  � S í is read-only">  % Æ Ð.__class__.__Ñ 5__)+ ±with _patchó Å  ˆ %ÿ 	'0del° 	'[  Æø  


from th¬òing import current_ ð	, RLock
# Access WeakSet8 ðough the weakref module.
# This codeð	separated-out because it ðneeded
# by abc.py to load everyth› òelse at startup.
¼ _y » 2ref TtypesÑ óGenericAlias

__all__ = ['Ì Q']


Žò _IterationGuardÏ ðntext manager registers itÓ1 inA! iK `ors of ß#-ð container, such as÷  ©ðy all removals until> 3  N cexits. vðtechnique should be rúPively¸ œøsafe (since sets are)..Einit+ i´ 4ñ# Don't create cyclesŽ  © .; y = ref( 	ËSenterw h 2w =7	: (3Aif wProt Noneº …   2w._Žring.addV¨ rv ¯  \‹ Ÿ, e, t, b” 7Hs = ˜ Ž  ± !s.e©    §Jot sâ   ¡w._commit_= Uals()Úì6 7	âPdata=:â  . ~toA f qe(item,ž@ref=ß 8 )H  �   G  lf# º  !if@ Á% ËÍ     j •._pending0.ap ® 
}  <  aN  ‹.discardB n 2 = p eÍ€# A listðkeys to be removed#
  ûself._pending_removals = []$ õiterating = set()  õif data is not None:  h e pupdate(* !)
 µdef _commitz (, )? ln ¤ C  ^ tdiscard)  a . $ vwhile lX 9 ˆ(l.pop()– _î ,__Ž rwith _I
|onGuard$  Z ð for itemref in Ô .˜ 
€  *  & $ =- U    !if ] %   Ð# Caveat: the4 õrator will keep a strong reference to" C  0# `˜  ` until it~ ÿresumed or closed.< Pyield måN_lenN¡return lenD"6) - ˜	£ƒcontainsY ,u ;:tryp@wr =ý (Ý ¿úexcept TypeError5 ¥ UFalseñ  )wrÞñ creduce› • : ñ ñ__class__, (list E),),i ’qgetattr! Ñ, '__dict__',n»"ad’"ifˆU
ð ¬–.   Ì.j 1refN,\ Ae� Bclea¸ Œ >f Acopy.v |Â {% »  " 8 ® 4„;Tru¨ õ £ > l!lf¦	»?Keyº  G draise   ò('pop from empty WeakSet')  º	`  † žšt I d&z§Om ªœ&‰ Tn Š  y, other€?Àfor element ·in other:
  ñself.add(element)
 Àdef __ior__(# ,< )=   �.update(X )9  [ preturn " N ¯differenceQ �newset =8 f.copy(S  .E _{ 
/ ‘ ¦__sub__ = = – Q  ¶ î 1__iL ð ) < "ifÓ ö_pending_removalsM 6 = …._commit# G 2 isŒ>  §data.clear8 Oelse, ÿ àref(item) for 
  9ŽáÏintersectionã8 ¡.__class__o n 5 if  ~ Q__andÎo Ð Ó  > ÒP Ò  < ‹.Ò, ] .´· Š(ssubset†~ 0 s B__le~3 zO__lt-ù s 0 <   tmap(ref�|PissupOÅ 2 Ç gÇ 5 É gÉ >É O__eqàif not isinstaJ,0"v )MbNotImp¶!edì \  =R/t(l¦symmetric_;X¤O ‹ß Ê¬ V Â 0__xt b –  ¥e 	 û Sù  A.__i` ð   & < ð4G Â:		àref(item, selfó._remove) for item in other)
  Áreturn self
  def union( ,0 :  4 1 Á.__class__(ed sa 	8  e st ‚__or__ =d s ©isdisjoint@ x "le™  .intersect« Õ f) == 0T �__repr__R )K    b.data)8 Ó 0get2« å ð)method(GenericAlias)
# Copyright 2007 Google, Inc. All R ñXs Reserved.
# Licensed to PSF under a Contributor Agreement.

"""Abstract Base Classes (ABCs) accordingQ àEP 3119."""


Î"ab= Â sfuncobj°"""A decorax ´indicating 7  8 "s.!ðRequires that the  a#ñ is ABCMeta or derived from it.  AF, ? Whas aA 	3 K ‘cannot be> ýinstantiated unless all of its¶ ñ are overridden.D >The) °can be callZ s nyY  æ anormal? q'super'+ Õ mechanisms. U 3`() mayU uïbdeclarÉ `+ô
properties and descriptorbUsage:‹ �MRC(met…=7à $   @o › È      %4my_" _# [, ...K  3 "..J f  UT.__isH G B2Truõ >/ 2


À 3  8 ( � ¬5 2`Deprec/w, use '$ „' with '€ {  ' e6eadä 0Ý 	!  Ir__init_u,$CableÃ  , b  - - k (), W > )=bstaticÃ ( | ?6 @% Aº}$y(	 92 /ie6" y28B
tryÖcð_abc import (getó_cache_token, _abc_init ¿register,
  0 ³stancecheck9 „subclass �get_dumpI breset_p Rry, _ ž ñs)
except ImportError:“ €from _py‰ ! i   ABCMeta, u A ß 1  ò	.__module__ = 'abc'
elseV » H b(type)  0"""_ $ ðfor defining Abstract Base C ±es (ABCs).
  A ÒUse this metaG Àto create anx A.  A	 „ can be P%edG ñdirectly, and then acts as a mix-in ^ a.  YouJ Ralso e%erJ òunrelated concrete9  ½ ¥even builtP 1es)s 7 I  ê  € †'virtual· Ps' --¥ sã ¯ i:åscendants willI  be‹ wsideredF 0 ofE Ã vQBC by ¨ H $is9ñ() function, but0 
G õwon't show up inH ð	their MRO (Method ResoluO ± Order) norÅ  ×&ho¨ implementa. s/$ed´ „  û Åallable (not„ ŠÕvia super()). 5""" ódef __new__(mcls, name, base ÷ space, **kwargsÜ ŸTcls =e .K ‡  J  •NY(cls) Pretur s º  2 ,ù¢ C"""R™< a l $F\  � Rt sú€, to allò@sage¾aþ¦ decoratori G m  Ë í ¿ ˆ  ä G__in2"__í  í �Override n$is) (	  , `.™ 	+ �p ž , ž  ž ) (	 ž + r ž  )ž  E'+ ˆfile=Non¥ ™ð """Debug helperêBprinû3ABCF-ry:' 1(f"Ãg: {cls1#}. @qual]a__}", ‡   
êL û Inv. counter: {œ/()C (\ ¦Ùn‚negativeÍd= 	" Àe_version) =÷ _get_dump(cls)
  ù	print(f"_abc_registry: { °!r}", file= B Tcache?  < ‘negative_8 E 
 N %�_versionV  ^ 	* õ ú  Idef %a_clearb:&  @ @"""C T the cù (for debugging or testing)."""A e_resetžc 
" ‰ 7s‡ , …  9 ƒ ñ 
class ABC(meta ’=ABCMeta)¡"""Helper  ð that provides a standard way to create anV a usingê Áinheritance. %ð__slots__ = ()
"""StuffL ñparse AIFF-C and Çðs.

Unless explicitlyŒ áted otherwise,²ðdescription below is true
both Çc  'si !Any !-C{ A hasX `followü structure.Ö,+-  +
  | FORMO O|
  , d<size>* %  , 	1 X  ] CAIFC/  , | , p<chunks_ , 1 .6  O °  	    i  ú 3+

6
40str1"qÐ" instead of  qC".

A ž � consists ò	an identifier (4 bytes) ‚Ped byŠ5ize ù,
big endian order),0  Ì°data.  The pð	 field does not include
+   !ofù8€   header.

@ ‹  Ü ¿ 0typr1�cognizedAFVER 3  <Ôp numberê  €-C definM ³document> ( Ponly)BDMARKI #< ±markers> (2¡ )Glist! Ø Ú2  <5 6 ID7 Ø, must be > 0+P<posiG>g	 L ’name> ("pí"$ ICOMM­ channel®  <Í °sound frame$ óD �Qsampl& ø <  Gâfrequency> (10ó, IEEE 80-bit extendeda  @floaÐ` pointÆ   i s �R€<compres© )ô<human-readable :of = Àpe> ("pstrinÁg")
  SSND
  ð<offset> (4 bytes, not used by this program:  4 ¯<blocksize6 ñsound data>

A pstring consists of 1ƒ ³ length, a $ ðof characters, and 0 or 1
³ ó pad to make the totalF ð even.

Usage.

Readw ðAIFF files:
  f = aifc.open( Á, 'r')
where( ¡ is eitherd @name³ a `or an >  Îpointer.
The ð must have methods read(), seek  ä ñclose().
In some type)Qaudioj Qs, if’ ƒsetpos()S  ° Ê ,
[  Ðnecessary.

TípreturnsÏ sinstancè ¡class witho `followKcpublicX O°getnchannel‘ D -- W anumber:Ä ' s (1 for– g    mono, 2 p stereo„ø getsampwidth() ^   1le  1 inOÿs
  getframerate3  Ç ’frequency0 n1 ¿ 	c Á ' 4 @comp¤ c —   qressionÄ� ('NONE'Ù ŠÝ  .  _F `human-)�able verQ *of5 ? m   /edw Pparamð ® a ‰ ddtupleª ,`of allÆ:the Pabove| s @ordeÚ�getmarkerf  V1getN@listO    s> " Ž í;Nonk ù€re are n#rkî H @(id)† d   ¼ñspecified id (raiseñ<errƒd  @ AdoesPexist® �2(n)Ò é¢at most n !  Þ ·‘
  rewindà ¡   Ã 4cbeginnf  6  ceam
  è1posÞ  Ö; Ø ò position
  tellk r  u‡current - s€1--  , (gpit unus‰)äD é>{ ,A ! Pgiven² É )Ð¡# !ofqsÙ i ½0ati÷ :@noth&Qto doÜE eactualÔ L FŽÔ 	'ð called automati @y wh¦ 2he ø ð
is destroyed.

Writ† ÆPwPY0wriëð, tell(), seek()ðR, and
close().

This returns an instance of a class with the following public methods:
  aiff()   �-- createR °AIFF file ( Á-C default)
6 c6 !-C8 ð
  setnchannels(n) -- ” `number¯ ! 0 ›sampwidth0   1le  * ›framerate*    ( n €  ‚ ! . �comptype( `, nameñ    Â  * €ression -  ¢ Û 
(  ü human-readable 5 u ¿params(tupln Aall # Òeters at once; Ïmark(id, pos¯ àadd specified / 0 to¨ P list�  ‡s
  tellÕ^€ current`  itì ‘in outputæŠ (usefulö  inê Abina3 Š0setj  ()PRwritex€raw(data 71-- " r audio ) Ñ€out pathÎ upÈ 
z ²‚header
 E > d 0and` 2ch ^ å Q ‚¨ /--* , ¢ =µ
You shouldé`beforeB h firstÏ qraw or
&á Ö.  The total _ à does not need bes ð,
but when it is    7ácorrect value,‡ M 0havr 2
be�ed up.
IK @bestL ¼ Jset É�, perhaps\Psiblyd 
#û  n 
 us
`raw.
WÑ  n þ ¨ 2beeC Ðten, either c& ? P(b'')Z¾ ()Á 6pat€sizes in’  ð.
Marks can be added anytime.  If, @re a !ny…±s, you must„ Üa after*¼  .
è  mÌ » Ë  y putomati yÛÎ(ó 
is destroyed.
1í‘is openedq ¼ a extenê '.2'• 3 ŠYoX5wisF £  i1ten«‚ R9

aged by Ù m (�@ aifs	 · b Yô.
"""

import struct „builtins ðwarnings

__all__ = ["Error", "B"]

\ `(Excepâ)KP  pas? �AIFC_ver1Á= 0xA280514073# V 1~ E�-C

def _(ð_long(file):
    try:#
  ñreturn struct.unpack('>l', file.read(4))[0]4 dexcept0 aerror:  P  raise EOFE ð from None

def _L p_ulong(\ )9 2try	 B � L� F_short� h� 29� "H� FJstri¯Álength = ord8#11))4if " 6= 0Ù¡data = b''' Melse  N C R Z& 1 =V gummy =«15 × v ø%

_HUGE_VAL = 1.79769313486231e+308 # See <limits.h>±òfloat(f): # 10 bytesÄ cxpon =Ø¹W) # 2% 0sig$ 12 Aif e5 <# -$  % =- �+ 0x8000C ehimantv N v 4v /lo& � 4== X $= < 	ibf = 0.ƒ (el9 f0x7FFFÌ * q³ 
ì
Ü q- 16383(  ú  > (Œ c* 0x10 # +™ Ã) * pow(2.0,!I- 63÷R3* fÇcwrite_¡3, xy!f. (üú Ü9x)); u<  ˆ< ïv  p: Ü;  ; ·3, sí ˜–(s) > 255°´QValue¶"("=  êÓeds maximum p œ"qD0B',3(s)& 5 Œ Ò+ zb'\x00'ˆ‹±import mathC_if x ]B gƒx = x * t
¢>"= íR 
uÂ!  O ±4   FG 
b fž¾=¿ ‚.frexp(x" B e>$Q4 or 9 V >= 1 "!=   €Infinity 1NaN L   Ðexpon = sign|‡0x7FFF
  ©himant = 0 -lo Welse::  ‰# Finite@ ‚expon =  y+ 16382" #if 8< 0W é# denormalized3  r f˜ ±math.ldexp( ,N )1 ‚ à   i| sign; U > = h *32e (fs“ Rfloor“ 
' iBint(4 
! r 2 - / /, { $Í{ ù _write_ushort(fD @long À ³  a ð)

from chunk import C  ¤ollections önamedtuple

_aifc_params =  ((' )',¨  ñ'nchannels sampwidth framerate n ¡s comptype	  i *')€ .H õ.__doc__ = 'Number of audio l á(1 for mono, 2 ‰stereo)'× .• W rSample ­ ‹in bytes9 ¹  Ä 9 Ûing frequency6 ð 4 Ä Y n  9 ÁCompression <q("NONE"î ¬AIFF filesò  K  bK ñ("""\
A human-readable ver] Rof th›p a
('not²  <ed'z à""")


class AM \ :/`# Varih ñ s used in this . $ * uThese v0 �are avail? 1 toŸ óuser though appropria�# methods+f   _)1 --H Aopen:U with9  º �(), close	 ’and seek(‚#ôqset thr‡  6 __ŒC__()K Ô _Ñy nÍ1 ` ÷ e 5getO i Rg  e - c Fe <C per£ + l›3Ô  , …q ˆ  ~q  + lzÒ I c  (W R%-Cïv'vP' if # 
Û Àe getcomptypð)e() method
    # _compname -- the human-readable AIFF-C & Ãression type>  D q  avail. qthroughI 0get6  . u tmarkerst   As in8 Ÿaudio file  = Ðers() and get )()¢ ó s …_soundpo€ PpositÛ 	ƒ cstream4 ê 	Etellã g, set 		A Psetpo¬ ’   ° These variLós are used internally only:0 A_ver‘º« dnumber,  de�q  Ñô
or from builtin module cl9 °comm_chunk_ B Q1 iff¬QCOMM    has been & = Faifc2   ding anWæö_ssnd_seek_needed8 ŸÀed correctly.*k   P A for… eframes
a ­ Á-- instantiaùCof aÉ QclassE  BSSND i _W !iz2s qof one   ˜  8  Š 
3 _ @ = N$ ò # Set here since __del__ checks it6 ñdef initfp(self,)û ì   .1= 0l  sconvertx   " K= [] S È   5 O0= C!( y ‰ "if9@.getbÖ() != b'FORM'Ê  + Ðraise Error('F ð does not start with 9 F id'c £formdata =k  c&(4!  ifÊ$  }  %} K«õ /el= C= 	1Oelseã  Ù 8 orÝ ˜ €£ " 9‰ f† zwhile 1‰ 5 n&= ¾  “#tri   f ïJ  ¯q * ¡except EOFÒ
  ! Ubreak¦   Y  %Ê5	( T+  Ñ ƒ” Q œ   âÂ(g 
­ - j
B ~  ~ 	™9 	Ì  z Udummyô  ¯ /(8  O 
³ö M ¡ ð FVER':
          óself._version = _read_ulong(chunk)
*  Qelif  ùname == b'MARK':'  , Z  O OmarkM H f.skip(f rif not > Qcomm_' ˜ 7 or Bssnd 
} òraise Error('COMM± Ã and/or SSND ¡missing')
¾ Ðdef __init__(� F, f)\ ÷if isinstance(f, str  ô ðfile_object = builtins.open1 F'rb'ê  1 6trya      { .‡ 7fp(R 
: nexcept= 1 g.close\ ]   "ó   JelseH ð# assume it is an Â  [  Þ  alÚyE  I 	¸ 	TSenterU3areturnì‚'ex‚W*args4 e Ù  # ò User visible methods.   ßQgetfpÜS ‡  ._å � lrewind1 „ _€ñ seek_needed = 1i Ö_soundpos = 0U ¾  E …  x ! =…  G   "ifz!isý;Non¯ J 4 0 =  †  ?  Y 
  	Ltell× 	» · Ïgetnchannels; 
& 
< _frame: $ 	8 Ÿsampwidtht 
& 	< O Orate< 
& 	< comptyp; % :  u 
 :  % `

##  “3getˆ9    Ã	™$ 	r _param[g_aifc_# .Ê"),u5getE1(),* }  r L Ó`F nPsD  	hC    '()G0getJ-eré aif len6#._$ )�0ØH	# Ò < 	\ P [ H, id±0or  Ber iÄ| 
v  8dŽ . :[0]   a† " {¨Ê ¢ {0!r} doeøexist'.format(id1Rsetpo-ð, pos):
        iÁf pos < 0 or ÷> self._nframes:
  õraise Error('position not in range')1 H Psoundd =_  ñsnd_seek_needed = 1
$ ‚def read† (L #, ” )• #if¯ sJ #  ¿  ? !._$ `chunk.t &(0¬  % xdummy =Q -  ˆ *(8- Ò X ã *< µ 1izeË  \   il
™   E  Á p �  a ++ v +  % 60j $if'Z == 0o ¥return b''0 Odataõ q Ù ‚Àconvert and U 
z   g + ( J Ý M‰ R+ len4 A // µ._nchannelsÒ  T Ý –sampwidth“ 0 ¨ —#f ò# Internal methods. %  ¼‘_alaw2lin§ ,)@impo,audioop=  ³ p a .D  � G, 2)` u` 0D `  _adpcmÁ  ~£ot hasattrü !'_M gstate' ò º# first tim.9 f = Non$ ³ &  =Á + #2,žT éÄ ùa_comm_™Ï  Ç „ ˆA = _9 bshort(. â- "+ Olong* •N = (X P + 7)8b a £rate = int; Dfloa“ ý Ãm <;û@bad - 1le 2öM M T# of ÊN /Í 0sizÍ  ] ¾	Š Faifc{vÑDEBUG: SGI's £@edit¡roduces a å  u 5:-(U  > PkludgŒ v  iÂ  ]ó¯ J= 18{  * A 1X   �warnings.	 2('W :� QCOMM ]  ^ ' :    .  " Y = 23c ð#DEBUG end
        ñself._comptype = chunk.read(4)
$  É#DEBUG start ©if kludge:  7 Òlength = ord([ Bfile` *1)a  1 3if 4 Ž& 1 == 0U  ( % =. =+ 1} p  6sizÝ  +? ; « ªseek(-1, 1® 9end> Q0namt _Lr_string
H 6if 4 …®!= b'NONE'ü . =. OG722.   *] snvert =m ™adpcm2lin½  0 .eld þin (b'ulaw', b'ULAW')�  ? o  ; n an An  ; n s¥  · ð
raise Error('unsupported €ression ž'¾ < ó qsampwidî2V,elr .  W  O  ¾ì3 S  % FUb'not� Aed'
0 Adef aPmark([ ,Âžn Rers =+ l_short‹p# Some óðs appear to contain invaliQunts.}  © ö# Cope with this by testing for EOF- :try5 " ´i in range(ª ½  d   /id¿  $   &poè /lor ( W<� + 0if V 0or 5 
Á      ?# s>Ehave+ (  „# dummy ›Rconsi6/of2 a‡  it‰Q0 and� ? ''/  #.__ .Ðpnd((id,E ,; ~`except­
ä òw = ('Warning: MARKd“s only %sÏ þ%s instead of %s' %¤ A(len±¦ b), ''   	 1 L^ 's',N  ;
Ÿw¶  s.	 ó(w)

class Aifc_writð# Variables used”Ï/ #w •# These v0 0are4 `r settC € throughGóropriate methodsD "of._   _}Á -- the openŽ\?  ´ �(), close	 @tell ¨þ #g5setŒ  T Ð__init__() meðthod
    # _comptype -- the AIFF-C  �ression  ¡('NONE' in# )@  F Ñ  set throughE 0setA  9 P() or! ¼params() me€ 5nam€ ßhuman-readabl� ~ 5”nchannelsÿ ônumber of audio   q I ð žsampwidthr “bytes per|  + /lez  & Q z …frameratk : ïling frequencyl C l n* V ¡written to6oheader„ [ ‚ @aifccàwhether we're r  ò aÆp-C file¢  ƒ 
 Y ÆK, reý	= Eaiff-   ° These varièós are used internally only:0 A_verŽ
¨ ¸,  } ý  Ñ   Êô
or from builtin module cl5 Y # •h Y »Aactu¤ / E †datalengà@size?  Œ Tx!es� j ÿ_I \ Ê J Ž � _Ü`= NoneìñSet here since __del__ checks it
6 òdef __init__(self, f)† í÷if isinstance(f, str  #  w ”_object =p`s.open1 B'wb'? -   #trç    { .‡ 7fp(R 
: fexceptž = 1 z.close(8  ( Rraiseô     �# treat .¸` exteny”s as non-Q"ed¨6 >   ñ if f.endswith('I '  ( Þ _LE = 0C JelseÎ ð# assume it is an Hœ d al/½ \   ` >)æ  Ú   ,E œ   .5 B—  lt= _AIFC’&   ù û4!  òu= b'notl=ed'+ @nverF Ä s	B«  c À    self._frÓamerate = 0
  ßself._nframes written!  Odata olength;  `markerv +[]‘   8 ‚aifc = 1Ã ñ# AIFF-C is default
N Àdef __del__(ç !):  6   ˆ.close()- ^enter/ preturn 6 	. 3xit- , *argsc 
# ò# User visible methods.   ¸ Laiffµ !if‚ ®vÖ  Ú ðraise Error('cannot change paåtrðafter starting to M 1e')�  H  ì #._j0ö   ™ w1™ @setné Anels¡ %,  —EZ&if„ O < 1«�bad # of­ Ä ŒÎ & =V  g 
õ  ÔH Ž hnumber�  A t— %._V ’ Ãsetsampwidth’ 
� ™ … Š?tenž ×( ÿ”  ’E or • O > 4w  £ , 1le Ô Á    & =U g
a ŽH �  $ ‰ œ , ˜ Œ 1setn œ 
— Û !œM„ _ <= 0ÿ  Œ-  Â Š   5 =  þ gþ 
ó Š< ‹ $ ‡ ˆ*  – Š  ¶ ´ 
‘ „(Àe parametersó after starting to write')
  óself._nframes = 
 
! sdef get (, !):  > preturn  B  _ 6ten? ±setcomptype@ $,  
 GnameT /ifP u y ðaise Error('cannot change paÉ Otersü %if�  D ñin (b'NONE', b'ulaw	 eULAW',ø  ƒ  4b'a. A. ‡ b'G722'Ü  4 r» ±unsupported‰ €ression -£7! =,  $ ’ ƒ "  O"   ˆgˆ˜ 	È E \ ]    O Â: 	 % `

##  : `setverÓ 9 #,  !):#  ð D  !   5/, ñm '… $ =� %1setAs°  ñ ngñnels, sampwidth, =Trate,?Ü H
  " =žsZ Ø ý    ý íÖDsetnj(
 µ5set„(
 % ž(
 % ã !   Ð(	 Ù)AgA9!ifb‚Ò 7 or Ä 
 ¶  ¾2allaeÿ7setDäb_aifc_×ä%._� ,z‡  � Ü .   Y.    4qsetmark� ±, id, pos, & ó ¦if id <= 0  #	 H ÷er ID must be > 0 if\ / <E PpositŽK =L  v°isinstance(² w, bytesú¥  . § 5 ©  for i in rÖA(len"._â +s)a ð== self._markers[‹i][0]:
  ýself._markers[i] = id, pos, name1 ereturn 	@ ™.append((C 1))
/ pdef getl (7 V, id)’ @for  `er in ! ˜ %  ¾ ƒif id ==. × ¦ " ~  : Óraise Error('l ÿ{0!r} does not exist'.format(id½  1ersÀ ¼ aif len µ )£ 0» — 6NonY 	ñ 1AtellX n 	2 ænframeswritten9   e 1rawC g, dataI !ifô °isinstance(!  , (bytes,  garray)5  I ' Ñ = memoryview9 µ).cast('B')s× àensure_header_› @ten(3 J )/ Î ! =P A // ¿ Ó._sampwidth *!–nchannelsC #if zconvert‚ S * =" ½ ³ Pfile.ª ` Ò ©  ! 5tenR  #+  ]  † ;  +ÿ ÒÏš  W ø V ¼ —  -  ¿ ! U or \´  ò 3 P ulength 5   J 
m‘ b_patchû(QcloseÉ ]¡  @ is +
U þ� :try  u r0 Õ n Â J & 1Q  * ö# quick pad to even sizÆ %   ~  ¾ =gb'\x00 &   * z … 5+ 1ë 6  neÁ/s(Ô Ë + ãa  ƒ ç =  ™ = Iö 
 :   kfinallÏ@# ProÏt ref cycles í! =2	! fž —	 Ž   9 .¤µ#; ò# Internal methods. ©_lin2alvÑmport audioop=  þ Ø .D  ‹3, 2…  E` u` Àioop
       ð return audioop.lin2ulaw(data, 2)

    def _ Àadpcm(self, # !):   $ dimportJ  Óf not hasattr; !'_I gstate'D  H  ] .  u = NoneQ  w /, &  Ä _ Å . )N   U ë óensure_header_written¼  + Gsize· iä ” snframes5   Ü #if¹ ð	comptype in (b'ULAW', b'|	 A Aalaw LG722,T  a} šsampwidthx  (   % E = 2
     ¤ L _ != 2Q Ðraise Error('1 1le € ð must be 2 when ñ �ressing 't  x  `'with / , /ö or G7.22 (ADPCM)'Ì B 
‹Žchannels½ 	¹ $# ) ¬Ÿspecified\ 	 í ê \  ( ©^ DOrate^  T , ½ 
û –ØÊúUinit_­oõ
ëJ  $ ÂQ== b'�
¬ ' snvert =ùE%elrT   û û_  7 ^  S^  W^  7 0	Q ”  , Colength8ƒaifc andó !G_NONE'G T 	—ö u q._file.� w(b'FORM¼
[D º' =Ã A // ù5._n%*½  ÜŽ  $ù] < N ½P ?& 1!" k >+ 1U  Š
K p –‰ ¨ = ˆRƒ –  ///	< ô  b   f ü  4 Ðelif self._coûmptype == b'G722':
  ýself._datalength = ( �+ 3) // 4? =if . >& 1h  w * == 5+ 1e :tryI A Rform_® T_pos F µfile.tell()C ñexcept (AttributeError, OS	 )` ENoneS Bcomm~ z gwrite_˜ C’ 2Oaifc  Ç R †(b'AIFC'= Fí & KFVER& _ c_ulongŽ  3 :, 4N ( lvversion4 Oelse¶ F� K   .– w(b'COMM" † mƒ - YshortÛ h –nchannels2 t£;pis not àÕ qnframes+ f	’ m’ G �  #co£ñin (b'ULAW', b'ulaw	 A a È¸€ 8t ¹6 ¶ Çsampwidth * H 6 Ofloa~ë Fratez ~ò{ D  ùz KstriÔ6 7namz  	yGSSNDyœ Ossnd„¸ |+i 7 0[ 10)
±Cdef % â 6&, z P®�ñ  = 18 + 5 + lenP  ._·
� ·7if 9   =-  K  Ž{!12â   Ü	R %18*  . 	F 0 'pG4 + 4 +µCmark� 5+ \G  b   $‹ h+ 16 +x7 greturný À±patchheaderj®;curÀe.tell()
     ðif self._datawritten & 1:
    �length =0  9+ 1/ R Pfile.S ¥e(b'\x00')& Oelsec 9 8if � Ž ¡ Uand \0 Â ‘ ”nframes =6   ¤  ÷ : Cmark_ J== 0º ] î æseek(curpos, 0ï  † ereturn™ 6  Borm_j _E Udummy€ µ 6e_f0 (y V  Šœ  ø b _U bulong(+  × ,ó7  % ?tene OssndË i Ä O + 8c d ° ¤ ' ´ ~n =W
' Bdef ¨  þ1ers)üaif len #._$ )] ù –  GMARK A = 2‰  =Bfor c 3 in� s‘  ) Aid, 9cname =5 H  # _ 	 +Ç  0 ™) + 1 + 60 è ! ?& 1ã  W H_Yƒ è Ú    =�  x5+ 8– O Sshort€¨�[ C9� &idq  ) ù ?pos* Kstri}y 

�óopen(f, mode=None�!if @ is   if hasattr7 '8 '4  Ÿ     P = f.	 c¡  q = 'rb'& t qn ('r', \ ÷Â Aifc_read(fñ )el: w: (wb– : #; 6Ñraise Error("ž …must be � 0, '` ðor 'wb'")


if __S __É¢'__main__'5¤import syså !no ’.argv[1:](  :1sys ð.append('/usr/demos/[ó/audio/bach.aiffã fnž< 1[1]i Rwith ßnKv') as fm ÷print("Reading", f‚ °nchannels =! E.get ð())
        print(ó"nframes   =", f.get S())
  öprint("sampwidth-  /  [ Frate/  /  ‡comptype‹  . <nam.   . õif sys.argv[2:]:Ó  Ú Ggn = ] ô ÆWriting", gn > úwith open(gn, 'w') as gc  ) Ág.setparams(b a '   ~while 1D   Ñdata = f.readJjs(1024—  *   pif not 5 O  % Ybreak÷     sg.writeg  F 
g ôDone.")

import webbrowser –hashlib

 .6ð"https://xkcd.com/353/L pdef geo: ó (latitude, long ‚datedow)Ù ¥'''Compute6 ñ) using the Munroe algorithm.
ñ 5>>>/ ò37.421542, -122.085589, b'2005-05-26-10458.68'	’37.8577133 b544543[ 1'''c -# ã A426/ @h = á ƒlib.md5(Ó ò, usedforsecurity=False).hexdigest( ñ6p, q = [('%f' % float.fromhex('0.' + x)) for x in (h[:16], h[16:32])]Š Ê`'%d%s   N wYp[1:]~q ñ))
# Author: Steven J. Bethard <s ".b `@gmailåð>.
# New maintainer7ðof 29 August 2019:  Raymond HetƒRer <r $.h Y ñ

"""Command-line parðlibrary

This module is an opšßse-inspired cB b that:åÁ- handles bo	ô tional and posi �rgumentslð- produces highly informative usage mes 1 0supZsÎ 1ers„ ð dispatch to sub-ë 0ersã €e follow  å d simpl^ 1exa  Ê ° sums integY  = 2
 Ð  z €e resultw sa file:� a = arg #.Aú qParser(  Zpdescrip P='sums … !at ƒ  ÈqV sr.add_a[ U 'Æ °', metavar= à', nargs='+', _U=int,� „help='an�  Ù  be?medy ð--log', default=ocstdoutp �FileType(,ƒ  ª Pa where  should be „3ten”  Ô # =. s  3.loÅ@('%sÖðsum(args.integers)ð<)
    args.log.close()

The module contains the following public classes:

I ñ- ArgumentParser -- K ñain entry point for command-line parsing. Ai —  R ñexample above shows,Š Sadd_am õ() method is used to populateK  À  g ñ er with actionsŒ  op ´al and posi b  s.È nL  „ s€ Rinvokƒ rconvert° Qrgs a F 	ãinto an object£ ¬ttributes.aEErro`AexceÂ @ rai ,byŠW Ys wheÇ €re are eO sv )$'s&!. q sa Fwhil[ W  : 	Õ  [ ~caught “  luemitted*asgmessag €FileType[‘A factoryÄQdefin† Ðypes of files¯be createdarinstancF r  Í °typically pùEd as¼  þ Ptype=Q … © = Î„ Ì  'Qbase RÑ  V&er‚T| »&ar„€selectedi œ  
ùstrings like 'store_true' or 'append_const' toÉ c Ë 	¡. However,® garE �customizaK 	a as, subô nA5mayJ 1be Ü"edŸyX0 ¨ )°HelpFormatt£ ‘RawDescri( JText € ¹ ‰Defaults'  ¼g ½ef5ichA Pmay bäsœaâ 4œ _þ Â  ±&thÙ S¯ ruø*. ‹ iZ d¨ ,€ ü R=Rawÿ Q tellb‡M 0not¢ achange! ff q Ø help text,] 8 Ç Fradds inK 0ionñ&utIÔ mo|  m Å.

All other‚tin thisÆ ¼ :€idered iU ¨žðdetails.
(Also notÚ +at` ±L
‡re only
j ($asÙPnames6 /0API  û 3ter)  s is
stillƒs¹ /an¼ ñ.)
"""

__version__ = '1.1'
__all ð[
    'ArgumentPaý	rser',
    'ArgumentErro IType ðBooleanOptionalAc K @File2  ¾HelpFormattp �Defaults% ‘RawDescrih # OText pMetavarŒ   ”Namespaceª 
È ´ONE_OR_MORE! „OPTIONAL dPARSER vREMAIND „SUPPRESS! GZEROS ô]


import os as _os !re $re "sy# ósys

from gettext C   H 3, n $

… d = '== T=='

Ï   8?'
Ÿ   7*'
  2+'
ó   eA...'
õ    ð_UNRECOGNIZED_ARGS_ATTR  ÿ	_unrecognized_args'

# = 	á
# Utility funjßs and classes@ 
) ñ _AttributeHolder(object):ò"""Abstract base^ ñ
 that provides __repr__.
4 5The ñ method returns a string in the f:m  rC¾  ‚Ç(attr=name,  E...)f   » òs are determined either by a³ a-levelJ 2 àp_kwarg_g Qs', o3 pinspect§  ¤ pinstancÕ @dictè  ª 2"""ð 5defð S(self< % Atype^ 0 =    !._ !__Ê  (  … es = [] AstarU = {} afor arG r Q._get' (} Y €.append(­R(arg)I &  O  p, valuežW #sY 0if 2 Ü.isidentifier$  [ Ú � °'%s=%r' % (C u �  8 Felse    [: 2] =± 5if # 
> ˆ @**%s‡ 8 ‰ ·€ '%s(%s)+ (Æ¾°, ', '.joinN_¿')) –? PœZ Alist3.__]mitems(G  * E [2†Rcopy_A  , 1if  w is NonX‡ q # ¼ E p module1 �used only 'H'n q_const'ˆ2# a�,"  itF DneedH 2wheþdæÄ� isn't a .J ”Delay itsÏ ªPspeedž!upE²common case8 "ifmõ )  T ö  ð[:]
    import copðy
    return copy. Ú(items)


# = ÿ
# Formatting Help$  a
class - ±er(object):r 5""" ± for generaU �usage mes ñs and argument help strings.
K òOnly the name of this ‚  	 ñonsidered a public API. All7 qmethodsL ¢provided bS F Ware cG pn imple‘ Ñation detail.C 2"""˜ ñdef __init__(self,   p Oprog  ±indent_incrf /=2%  @max_P_posi‡ ?=24'  Âwidth=None):™  ~ Â# default seË …, ¦ 1if  @ is @ º >   Õimport shutil4   5 = ò.get_terminal_size().columnt 3   7 F-= 2§  7 ._&0 =  i  )< =  2 6} = min( K  ¦  Cmax(» M 20,€ k * 2))† 1 =`ï Bcurrÿ K = 0> _level   ac_Ë alength$ = qroot_se+ 2 = HS §í² • : O É ñwhitespace_matcher = _re.compile(r'\s+', \ASCIIv ¯long_breakB ‚n\n\n+')~ ±
¿!==## ò ^3ËL èC @â )];$ $ +u æš 7 æB+= 1Ú h  deh -h @asseÃ[elf._¦ �>= 0, 'IŠ€ decreas�elow 0.'® -® :_gý7 Ï 	  Y`er, pa”, headingÀ  ]fŒZ d  + ' O  DX ! h $ =r # R = []� ]  Å w ‹˜ # #× ló3ed G	f "ifŽ­ ais not�
z V Ö z Rter._Y (@ % Djoinã, Àjoin_parts
   ðitem_help = join([func(*args) for   ,  � in self.5 Fs])
G B  if ùparent is not None:(  4 E ùformatter._dedent()
* €# returnI @hingc ùthe section was empty6  if0  £ Ø ~ V ,''o @add a Oheadp Onon-t Ó 9 ý ÂSUPPRESS and! 0curC0_in" =; /
! 	þ  ^e ú= '%*s%s:\n' % (7 R, '',[ 1 
Ð?elsº + > = ? ?@¡ñ-initial newline, B  m)lpÃ Ÿ N ƒ(['\n', 4 ,Ö ,  ]2�def _add_ö(‹,·)  $._	¨ Ï–.append((ð)_ ?# = ¹ á# Message buil:smethods = =  ¼ cstart_� À ô ½ (­7 ("_SG ò RF 8lf.Dd.vI7, [óX „ 9 [ Ü 9endÚ Ñ ŽD  Œ  .Y4 æ� 
: p  Ctext   s 0if  Ÿ	¢ šp  ^ e#._ : 0, [ “ - uŒ  1, a"ðs, groups, prefix=t 
« 1 ¬ Î ˜!= * [ 5 2 É 	G  ýÃ È Pargum¥ ? i 
® Ø .Mÿ`:M     ð# find all invocaÐ.    Fget_ qk ! 	â 8 Zs = [K (< ))]3  é2sub è Prˆ5ed_! sE 
Œ ¸ | R€ F _ 7   �# update'qmaximumòy length± h _ ø  = max(map(len,Yð))
            acøtion_length = invoca ÷	+ self._current_indent
  ! !ac7 6maxO Omax( ,C N   [ ¦ ))
: ñ# add the item to ?lis¤ 0dd_' • rformat__ 2, [	 ]b 0def\ ¡_arguments6 ", & 5s):ˆ 3for 3 in
 s  Ò 5addN (G l ?# = d r# Help-¯ Ãting methods ; =  Æ 9 Q_helpÄ »   # =äqroot_seÉ.5 )K  È 0if 3 
Ý   E ñlong_break_matcher.sub('\n\n',> O  S >   `.strip, •') + '\n'z areturn@  Ú •_join_parž  _G (ng£> 0''.2  ([' [  †   Ð !  Î  P 1 0if ( B and	 ø is not SUPPRESSS_YQusage�!,  Z÷, groups, prefix¯ i  Š is None‰0 a = _('T 3: 'b à B# ifl  ? �specified€ Ve tha3(  É k _ # =O Á% dict(prog=ë_ { Pno op&´als or posi Ðare available’ 0age¦ Pjust M }(elž  š x § T{ª !'%  O)s' ¯ ¬ Ø­ ’calculateª ¯_og = ™ ÇWsplitLHfromN‚  / Ç I= [] �  Q 
 [ _ #ifò.i -
ë  *   $ ¥als.append   ;elsÝ µ E 	Ý Â# build full™ 	& Ž¾ !s_<	0  2 = 0 (× ( +ˆÊ
ñU  ø ŽsH   sh[ìg ]·sDa# wrapîQ  ‚s+ �it's too ‹	½ ðtext_width = self._÷width - self._current_indent
  ñif len(prefix) + áusage) > text_L ):
7  B �# break . ý into wrappable parts3   ½_regexp = (   W ÿr'\(.*?\)+(?=\s|$)|') [) ]) .S+D )V Bopt_Î þ= format(optionals, groups6 <pos6 Oposi8  n  ðs = _re.findall( % , % “ x  , @ 
� @ ð assert ' '.joinë _P F) ==y &8  c 8   ± 1`helper\+Žing line*�def get_ 2s, À", ®}=None):   E7 _ = []  #ifb € is not i h l a_len ==� _) - 1| OelseM ò M 1fork1 in sZ  ê1ineª 3+ 1ë ¹
êA and•K ö ’s.append(§ & +M �)t :   # …& ´ ^j  7  Y š à ˆ* ] +^ . / +ºB y #s @s[0]s ?@[0][Ç:öareturnÜsž…  ogöðshort, follow it with wä` *Vù prog) <= 0.75 *] � Í   =U@ * (á ]¨R ?+ 1i if² Ôµ' =n[X 6] +> {p  Á 0extÁ"osˆ J  el…- µ Àrog] + pos_pÿarts, indent, prefix)
   _else:  - ý lines = [prog]
( P# if  ð is long, put it on its own E : x ¶ ß = ' ' * len(Á 	pì r = opt_ R+ pos w Õ @get_œ !s(8 0(!ifŠ 0 _) > 15] ƒ †.extend(ˆ Ä Œ � C û C É Ú! +¦sâ2joiÄÍs into usageÚ   µ@\n'.3 (b )R #ˆq with '1 %:'I óreturn '%s%s\n\n' % ù,t L ñdef _format_actions_M s(self,  –, groups)©b# find   ices and i(4ify< 2 in& sŸ M p v = set(�`insert*%{}3 2forF O Œ  Ã:try   tstart =‹ .!x( !._ † 6[0]‚  ; þexcept ValueError^ zcontinuÀŒ0endè � +ý~ … 
‚  † $if¼ [Ì ‚:end] ==? ¢  C  :Ç;8  < ¥ #R.add(J ©  . cif not› �required• / Ô  — ô- 1 
0] +Ö[õ #  Š" v Q ?= 'O 0if Æ3in 7 ­ ± « ]ª 1N ?= 'M ó ?if q/(Ç 1‡ ]âO q-)ª (À inserts[endŸ] = ')'
   ÿfor i in range(start + 1, end):4  G ‘inserts[i] 5|'
* õ# collect all actions format strings- ¥parts = [] ’ ,9  š £enumerate(M &):n  Œ õ# suppressed arguments are marked with Nonef 8 ñremove | separatorª P 	; #if¡ þ.help is SUPPRESS3ä €.append(… )K  Š 3if Qî.get(i) == '|'M . |n.pop(iM ,elO  ÑS / crproduceÕ<rg Ê ™ z 4not opý_+ Í ódefault = self._get_ ð_metavar_for_posiJ #alõ  eH mS_args1 #, X )Ø  ¶  # 00t'sm�a group,à ¸p the outer¢ 5    9 7 _¢ë 0  § 1[0]ßq[' and  "-1 ]ó ?  ) " =0 _1:-1]Ë 1addµ ‰ Æ Qng to Mlist| W sŸ  #$# û �first wayT ainvoke[ ë 	vbracketä ¼ Nelse5  / =7/[0é !ifx Ocô	al doesn't take a value,w.is} #˜ Í-s or --longà .nK µ0H  G  7À kusage(N . q M½  µ s¶ FARGS»   À u ‚ 1y¡w M  ÄÊ  ‚ 5  B²'%s %s' % (| Y ,Øs Smø‚it look < %alÚ •€required73in ê60if . A.5  «  "in)òÖ @[%s]Õ   ¶Oð# insert things óat the necessary indices
  õfor i in sorted(inserts, reverse=True):0  7 ãparts[i:i] = [2 U[i]]
' ¡# join all€ øaction items with spa‡ °text = ' '.9  ([+  � 0tem  u 1 ifE è is not None])w ñclean up separatorsG ö	mutually exclusive group
õ open = r'[\[(]'Ë Sclose ']) ´ ð_re.sub(r'(%s) ' % K �, r'\1', ' )N   6 = 5  6  5 h 6 `%s *%s7 (m > )? s À\(([^|]*)\)'2 §  ® y.strip(fareturnÛ # Þ  2ext•Àdef _format_* S(selfUÀif '%(prog)'ì *   s  ! =Lq % dict/ =O !._: …  , Á_width = maxt . "- 3 öcurrent_indent, 11¤ �/ *1 m ò U Bfillç  „ ç x ,yÞent) + '\n\n' %® ",  y±# determinex’required ê 1and µentry label¤ ‘help_posi…Q= minf "._f õ_max_length + 2,9  z ê  2 	W > •  � 
xŽ < 	*  ¹E - 2¯ @ ƒheader =¹~ `invoca	( 	Ø0no v ð; start on same lu bð add a final new ~ !if“V .G Ã%up” ~$''ò_¾ V  S   —p%*s%s\nÿ2tupJ ) s# short=W nameË  	
Ï |pad two�ƒelif len"y C) <=Z Ôß "Ýí A-*s Z ï  ê  «P_firs@0Clong± ns	ÂOelseÕ "´ Á   Å  ;¯Ñ bcollecÒ piÓ1 ofö"¼à
        partsó = [action_header]

  ð# if there was help for  4 â, add lines of" EtextC #if* .> :  b   _. ð = self._expand_ (a )2 n 3 asplit_ (8 Q ,Š j_widthB óparts.append('%*s%s\n' % (indent_first, ''D Z J[0])H    2 inl   Zs[1:]ä  è t ± @posi€u  H ())„!orePa new •€ descrip; õ doesn't end with one:ƒelif notŠèP.ends, j('\n')· 
³    ’ Âare any sub-°sQtheir… as wellŽ  :2sub/  ?ûRiter_„5ed_! s  A rformat_X (A 
Lõreturn a single stringœ  Q Qjoin_	( •Ydef _m p_invoca‰(; ,iT	�!.oµ_} sÚ „default àCget_ €_metavar~ _6$al"Æ  t+ ,H   < cmatter7 #, ^ :)(1ã9  Jelse´  I< … @! Oñ %al¨Ðtake a value,T[mat i#D ‡-s, --lo¦  Xªnargs == 0•  & ™ @.extî}Õ -   ²  ª s« T ARGS°  	•: t €ªò6ð I  	UM ©$rgJñ	œ  A  ›f G #inÌ7k @ o]As %s[	T ', ¨ ž B tP', '.€z�ÈsÝ ,
„D 1 is;NonÑ2res„
1 1R choicesM !  Rs$Bstr( )ù   	
Q ]n ’ P'{%s}V#',#A ` ÁkÔ àdefault_metavaCr

  õdef format(tuple_size):   ' ñif isinstance(result, / *  . rreturn ' 	H JelseZ 0 X 2) *\ ‹ A W ¬ À  ¼ _ ÷_args(self, action, default_metavar« %ge 0 = 6 .& P Oter(H “ #ifl  .n { is Nonã § = '%s' % | 5(1)L ,elN º== OPTIONAL5R O[%s]T ÊZERO_OR_MOREX (/ =¤  ®sif len(, j) == 2G  & 	£ ‘ [%s ...]¬ : ù  /  i :A  ì @ 9/NEä ™ %%s˜  W —2—šREMAINDERù \ E...'á ¡ OPARS@ 0— .�SUPPRESS– “ ‰:try7  —[Qs = [½ãfor _ in range ü%)]ð  : þexcept TypeError\ ¢raise Valu" ¢("invalid Lv q") fromV	` kƒ '.join(¬ )bÄ¤ C LF L¹expand_helpL;Pparam“dict(vars‚), prog=N  F 9@name<Rlist(F W  52if  [, ]OÓ - 9del. Ü l shasattrŒ t P, '__~ ;__'ž  u 	Ÿ =€ .8 ‰ Ï ð .get('choices')Ø 1notÕ
# @_strö,Üp[str(c)¨  cDˆ T &]]l¨   7 = ] £ ³  ú  4ing×# %è (òiter_indented_subg
�@^ l 7 $ =H_ © P‚Attribut3
=Fpass0 jÐself._indent(7)
  úyield from get_subactions(( ñ self._dedent()
D ðdef _split_lines(% ñ , text, width):)  p   0 = # ò._whitespace_matcher.sub(' '? w).strip„ Q# The[ ðwrap module is used only for Õmatting help. ð# Delay its import, ` speed. öup the common usage of argparseI =  Ï  Š a ereturn¢ . (& 4Pfill_ 2@, ind:7±  • ± ,Û  ¿ ‚initial_¯ = 4 ªsubsequent7 P † »_#ng"•o .1 ` D ðdefault_metavar_for_opÛ/alU ©dest.upperñ] Oposi_ ñ


class RawDescri¢ pHelpForÊ9er( 0""" A mes«f. ñ which retains an J  æFin dg "s.4O> þ1namöRthis ™  	 ñonsidered a public API. All5qmethods0±provided by F  ar[G n„plementa4  d° lf2"""˜ ` —,‚''.join(–0 +  ñ	 i¨.¼  øs(keepends=True))™@Textm’® ¸ œ n!ll·F�‘Aý— óug@ArguD¶sp	 bSadds   values toÑi hc‘ o ß # 8 = ³ð if '%(default)'÷ not in action.help:
  $if ¡default is5 ŠSUPPRESS/  : ) ùing_nargs = [OPTIONAL, ZERO_OR_MORE]k  < o  op’ ´_strings orˆ T <in h Š  R  Ó s += ' (1 4: % E)s)'„ preturn 1 ù


class MetavarTypeHelpFormatter( ){ 0""" ¤ message f. ò which uses the argument 'type' a   ‘ my û value (instead ofA qdest')
4 AOnly Bname+ 2is É  	 ñonsidered a public API. All7 qmethodsL ¢provided bS F Ware cG pn impleÌ a¯� detail.C 2"""˜ “def _get_á _Ý R_for_èƒal(self,åQ À–¡ 00.__á /__^ @posi™ ` $_

# = A
# O¡ss and AÑs0 
Ê Ã (	ð  þJ  gBNoneZ	  _'el/ .G/6 • '/'.joins 2 )T  §ï@in ({ $, ù´ › Î .9 S   ¯P  6 M s±Š¡Error(Exce§­ p"""An e à from creating` us	 &anŸ(V al K").zBThe  §žDis ew  Æ ñP, aug-qed withÔ "in(‘ion aboutŒLÿ  that caused itZt_init__AA,‡û  ¨ c.Z ‚" =š•Ÿ 8 Ä $ =Y Ø x‚ o ?if r  0is I£ b c = '%(i &)s›(elø
1 Ð % %ÜÛ  )séM  Rs d% dictu =± 5 , r  y n 9 	 )F• G™0tryŽ top°vert a commn5linyQto a  o ¤ ^pass
¹A
# AåÐ classes
# === ð!

class Action(_AttributeHolder):
    """Informa& ð about how to convert command line strings  ñPython objects.
Q o  ð are used by an ArgumentParserE ö represent the iŒ N `needed( p2 ³ a single aI ö from one or mor¡  1theH Ã Õ. The keywordI Ò  ƒ Á ±constructorÅ AalsoK Tall aLCs ofb” instance
Kb ô "s:" w@- opq_O�-- A listQ ® -q) xQwhich‰  H   ñshould be associated with this a ž 0 ‘- dest --@namet  û ×  qAhold”1creS è8(s)Ç UnargsL PumberN 	Â ¬us that ° 	Æ  pñumed. By default,Ù? P willç +  •	M Uvalue0 `produc[ q Other  ’s include	  ð- N (an integer)
wsumes N0( \ 1s a¾)‡  P V- '?'A @zero« ²Ù s5 *5  à6  £ /d � +L  y +K BNoteÀ *ñdifference between+¸™B=1 i÷	ä žeéÇœ»`, whilÓtýf ,€ ivtaining,ïS 	 S0  tol_Ad ifâ ŽÁis specifiedî i ó  ( @usesø…@rakes noë . 5  šùQŠ 6notŽ 	× @typeL “A callablÃ`acceptµO‡Ý,Ô 	²`returnËed "edÂ !. I ýSdard  | s·,H,N Qfloate  ]Aplexdáuseful example\Esuch½ ºs.  If NoneP 0strh i	 achoice A·  ¡Z Ï ‘` allow)0If Vj pafter a·  £H` has b;» 1pappropr�	
 & 	0 ex“5ion©0rai9Pif itÞ  ‘ Da med Þð 
            coÃllection.

  ñ- required -- True if the a+ ð must always be specified at' I  P ðcommand line. This is only meaningful for opˆ 3al 3 -3 	L ™arguments­ Ahelp© 1he  àstring describ ¼ = 	< tmetavar? pname toÕ Aused—  < › 4's ‚ ] withì ~  . If None,& õ 'dest' value willc !as!  z .í 2"""‹ñdef __init__(self,   U ™ _ò s!   x   anargs=  U _const odefaul Otype; ochoicew uo=Falseµ   _\ É %):Ô  7.%# =j6
-  1  ==t 31 =  
 11 =  
 /R 9
  /0 =  
 , U 6
 ,% =¬
!  ,! =
 )3 = 
 m`get_kwpH ŸUs = [M  ƒ'Z'´ô >) 8 :  + -   õ  ]Ó �return [(î ‘, getattr ,  !))  1 in &s]@Áformat_usage6 A\ � '[0C d__callðr parser} bspace,C*s,Ä÷àraise NotImple3ÅedError(_('.e ó) not defined'))

class BooleanO‘Aö( Ô �IúÕ 
? u- 
 7c17_ &TÙo 9
1 ® ß N ‰.append(3 )t /   *ifp.starts£S('--'³ +  À  option_strûing = '--no-' + option_string[2:]
  _# ™s.append( %)
7 øif help is not None and default :5  s 6 s+= f" (- 3: {
 6})"c ùsuper().__init__(H 	™ +s=¿ ,, Pdest= 
 znargs=0 Š = 
 Ptype= 
 ƒchoices= 
 ”required=	 
  = 
 ƒmetavar= zúdef __call__(self, parser, namespace, values,õ=£)Œ*if  @ in R .Y1  ½‡setattr(m 4 \		> Ã.startswith(Œ)Ê Áformat_usageÎ Ÿ ñreturn ' | '.join! � ð)


class _StoreAcæ( "):K4C ® 
i × 

s!  á 	T8 B Z4  Qconstw  _  d f go=False{   m= o Ž1if ë Z == 0praise VsrError('* Pfor s•! a–þ	s must be != 0; if you 'UZ P'haveYhÒ"toS ,T rsuch as M Utrue ˜  @ may• õmore appropriate')™ 2if + ìé ¿!= OPTIONAL0%r Ñ Rupplyb 5' %L € â,ª	’Ü ×ß 
@= 
 Ï 
 Í  
 È 
 Æ	 
 Ä  
 ¿ l64y–C”›JÀ            ¬  const,
  Ïdefault=None  ßrequired=Fals! Ohelp= qmetavar %):| Ðsuper(_StoreC— õAction, self).__init__(1  ´  op$ š_strings= 
¹ Pdest= 
 znargs=0 = 
  
 	 
   !)
Ä Ðdef __call__(å ù, parser, namespace, values, Û <wetattr(8  Q .ï A.Í ¢)


class hBTruegy():§ } V 
Ö  †
� s!  ‰ ö 0  GGI!  OIá HM`=p 
ÿ ã  
 à 	 
 Þ   ¸w¹qð ÛÏ ¸&á ¹Sq 
~²= 
 â 	 
  µ= ºcAppend¶ dQáÉ¶ ù `
ß åOtype choices 5 x  @1if ë V == 0W « praise VJrError('* Qfor a–! amþ	s must be != 0; if arg 'º W  'ò are not supplying theÂ3 tok ,O  5 —  � @ may› @moreL ¥ropriate')Ÿ "ifÒ1 is‰  ÙC andð!= OPTIONAL:
     ó2raise ValueError('nargs must be %r to supply const' % OPTIONAL)
 I õsuper(_AppendAction, self).__init__(-  4  op$ š_strings= ,+ Pdest= 
 © = 
 § = 
 `defaulL  
 Ptype= 
 ƒchoices= 
 ”required=	 
 Phelp= 
 ƒmetavar= !)
î Ðdef __call__(:ð, parser, namespace, vª9s, 0q=None):G  \÷items = getattr(@  Y .L 5 4 a_copy_B ( )# !.aã(‰  sl 
J ƒ

class (CP-( ():8 ´ 
B å 
s!  ç ¾ 4        N  ão=False!   éŠ  ë ©	6;S0© 7	 
U   
  £ ˜.6%RCountúXé6ÊÑ ÄbÛ  
u¢®Ž?cè‘"f 7 !is«ß ® 5= 0à�ð count + 1)


clòass _HelpAction( ñ):

    def __init__(self,     op9 �_strings!  ßdest=SUPPRESS  Ofaul# 
µhelp=None):� gsuper(¼  , ¢ %).± +  ¬ 
§ = 
– ±    ¨ !de 
 znargs=0 ·   )ODcallOù parser, namespace, values, £ þ 8 p.print_c %()ï  ±exit()


clærVersionâéAva « 
	 � R1ó"show program's w À number and û ",	/Š1!  Ò.á =ë N>b  Cq Q$ifz @ is ˆ‡ ª ? { A ³formatter =òe._get_ ¾ £.add_text(O â_ÿ†message(: 
 Ý, _sys.stdoutD  +&ASubP”s)LßChoicesPseudo)  ?èp, aliasä º¨ 5 `metava* 1! =3 J " $ifA 
‡  > ó+= ' (%s)' % ', '.join(y  4 csup = P /._ì  <	– 6sup{	¼Rs=[],ÿ Ó  , ö = &  ‘   É = 	B‘, ;z  ¼_â   » ¿	ïrequired=FalseA   ñ æ  } �_± p_prefixA5rogz! ²»  "  * ðname_parser_map c= {}
  öself._choices_actions = []
$ ñuper(_SubParsersA'  , = µ).__init__(1  \  opK š_strings= ,+ Pdest= 
 Ênargs=PARSER ¯ =€ �._name_pš J_map+ ”required=	 
 Phelp= 
 ƒmetavar= )sdef addl (~  , ~ `, **kw¯ %):Ú õ# set prog from the existing prefix, 2if @ `.get('5 ¦') is NoneS  X( [$ á] = '%s %s' % ’  ._> _a Ÿ ¿  > `aliaseáH c.pop(' W', ()- ò# create a pseudo- � to holdÓ Œ DÏ ' C' inÙ 
Å   # = „   %')C  ­ [ •! =o2._C¬P’ Š(…Ç ,� 
K  ¬ç‰.append(h   »a@ and0 it  5map¶ % «  u_class(#. •  ¼ S ¿[  Ø= z r# make  ó available under ü U alsoa #fo  ˆ" 
‰ƒ + „ creturn„ ›  ‚_get_subsˆ
6 l mkE q_call__> ,d Áù space, values, L=#m  # =3 5[0]4arg•  '1:ï¹ ÛL ã@ if CUestedM "if• ½ ¯Ìnot SUPPRESSiQtattrªÏ  : í µ 	€aselecthŒ z :trya   & FV b ú except KeyErrorQ  ÏW = {'; #':˜I 
4 ¤  'âÁ': ', '.joinÔª)‡ 9 ô msg = _('unknowg7 %(‚ 3)r °Ds: % €)s)') % ´ # T áraise Argumentæ Œ Y, msgkd A alln`remainªmas into  ZÂi ó	# store any unrecognized©As on: �object, sI a×&to>s# levelcà can decide wh/ �o do withN m: å ñ# In case this subÍ ð	r defines new defaults, ó we parse them
  ð# in a new namespace object and- qn updat9 — originalA 8 0for1 � relevantq 5ts., 5sub- ð , arg_strings =+ Aser.£ Ç_known_args(& u, None)O  o  key, valueÉ Xvars(f ¥).items():6  ù ‡setattr(Ž I %)
, (if¦ 
D l A ö).setdefault(_UNRECOGNIZED_ARGS_ATTR, []¾  ˆ gˆ < ˆ).extend±)

class _E âAction(_Append ù ódef __call__(self,q,÷HPs, opI �=uü QN = g¼  Y \.destª4 a_copy_ (  å Ñs ° l ; i)

# = �
# Type %.es  ?@File) (ø3°"""Factory iÅcreating fil"Rtypes/ÔInstances of R � are typiz°y passed as  e=\�uments to9x1Arg P­Pr add	 ¢() method.t „Keyword 3 s¦Â- mode -- A eb indicÄ 0howp Ì i ðbe opened. Accep• !he’  ª  BsamelsÄ ¡he builtin; a() fun„ó�- bufsiz‹ 1Thes  's desired @fer " 	y  m 	ˆ ty Pencod²7-- z  o 	 	s è oerrorsr	z Y#dež 8 *ou {e handl”‡2"""/Einit %P='r',‰ …T=-1, © û", ¢  Pelf._A ! =m¼ ›_ø=[   e % =p " R=� Å  PÅ à› #À… specialfõ "-" means sys.std{in,out}x $if-f== '-'P ò `if 'r'hâ  ü 
"  & ƒreturn _d %in^    elF wF ;outG .se{ £msg = _('aDÀ "-" with moûde %r') % self._mode
  õraise ValueError(msg)
' õ# all other arguments are used as file names5 Etry:  p ÷return open(string,”  tbufsize Pencod+ 	K  O  × e· %s)& ‘except OSÐ  £ eŽ �args = {'»  º 4': – 'N U': e}Q  o ñmessage = _("can'tÎ D '%(F q)s': %(A 6)s"‘  @ gAB4TypnX %^syÐdef __repr__(å )Á ½   Ò/>¶ #kw+ 4[('K'-  B), (ó s P]J  H ð_str = ', '.join([Ÿ �(arg) fo1 inÅ 0 if • != -1] +H   ð ['%s=%r' % (kw,: R   V Ë H v Æis not None]ƒ�q'%s(%s)m Btype]0.__!__~ së o)

# = ó
# Optional and Posi Parsing@ €
class N8ópace(_AttributeHolderóñ"""Simple objectm0stoD$ a3 "s.²I* £¶equality by( ¨² vò!s, Áprovides a sm k è`esentaá . 2"""q ªCinitªB, **¯Á  ñ ! bÌÐ   0setË Ž,¤ ", E [7 ]%eqk —h !ifü±isinstance(" ,g-  y 5Not:!edâ  Avars› Q) ==  W 	– …containsœ 7keym i 0key½“_dict__

0_Acb"sCK 2er(ó/):lª  ®  adescriš, Ïprefix_chars  à�_default#  Pconfl· Uhandl¦ | msuper(Å rC).__&73  —³ 7 =  À /�   =+�° 
1 í 8 =  
) Ô < =  � ³ Ð# set up regi"÷¨ _  d};   Jê
ˆ  1('a !',Æ‚, _StoreÓn 4 À, 'store', _ãStoreAction)
  ñself.register('a P', 's. ¡_const', _= C B EtrueA ?Tru‚ FfalsA F ‚ `append~ A
 9 þ ? ÿ Acoun;C	 { @help² OHelp5 pversion8 V ; pparsers; BSubP > 3extbE
 9 `ð# raise an excep~õ if the conflict handler is invalid@  S_get_% 5()
 "# ° ­5age 6  ks = [] o‰ †_string_) ({}^ kgroups; - _ \ ùmutually_exclusive- O ¯# defaultsÀ  *= ˜ ðdetermines whether`"Õ õ" looks like a negative number~ # _ P_matcO ð= _re.compile(r'^-\d+$| 0*\. 'ˆ‡ `or notÞ@re a 2ny ˜ �als thatŸ ž ~ • #¦ üs -- uses a list so it can be shared and edite.Dhas_[ Ù „ r ?# =   R!ra±bmethod
6 Edef L a, ñ	ry_name, value, object):l  Š6 Pry = 8 #._ sies.set
( N &{}É [c 3] =e Ð š T yO(g Ÿ o Y=None¥ Mturn¡ [{ ä a].get(… ,á+:
ƒ´# NamespaceC ¯ accessor ŒR    Cset_Ú sÿ ‡**kwargså  .( ƒ.update(' M ±#Ås¢ !s =ð any existing argumentskFplac¤#&• previousè !on "Q with fnew on> 4forýi“šsVà    if action.ûdest in kwargs:
  óaction.default =) [ Ast]
6 ƒdef get_+ p(self, ` )W Bfor ;  u  # "._ | #if( .B 1 ==J F and “ ¶is not Noneh Æ kreturn3 ¯  "  ‡ ¸ `s.get(u ,T ")
ß ?# = N ó# Adding arguments s ; =  9Dadd_; :*‘B, **›E1"""9  Ã 	9 ¶ ÿ..., name=value, ...)1  opÞ›_string,  I  † V À# if no posiS  al
ös are supplied or only one is 8andI ót doesn't look like an�  ¬ wparse ar D K �chars = ëqprefix_ " À t¶ por len(�){1x‘rgs[0][0]q1in B 
u ¸1rgs1 '�'éÃ
*  ¾praise V§aError(3 `twice 5pYc'Õ L d ä _‹5 _ (UÜ ? ó# otherwise, we're aÓ|Õ| 7;elswj 	ˆ X/al† ˆ �6 wa(¡, use the ütr-level+ ’ Cif '? '©” 
€ �Ðy%']F  "ifu"in8Û« + a [y ] ‹  s[p 
` BelifZ °b  Õm G ÞRcreat?q� object,«—add it to`0 U_clasDC_popº (– ”É¸t callable(F Í >dunknow¹™ "%s"' % E &,)m ] # =w“ <	m @an er ¸ SA 1typœ }º   U_funcÝ€registryn ('  #',ƒ . 	 ®  + Y $%rž A  ° 5if   7 ðFileType:
          ÿ6  raise ValueError('%r is a FileType class object, instance of it'
   ô' must be passed' % (type_func,))

> #‹ @an e‰ ñ if the metavar does not match  I @ õif hasattr(self, "_get_formatter"):,  t :try    : .8 3().E ù_args(action, None)R pexcept 4K_ mp"lengthLè \tupleî n{ ".rreturn ° Badd_— ž ) Adef  Órgument_group*S `, **kw
 & S = _A8 G7 ‹ i ‘s.append(Q ,¼   © òmutually_exclusiveJ ³ ¬ M; E: 	µ 9 ® p º _dù © �Sû# resolve any conflicts� dcheck_ 
Ì ž#ÎB to ` ks listD  { | Á.container =D‡d Qindex`- 1 by¶  opù° strings itp~ Bfor " _" 3 in¨ . s7	" Ì)s[ 3] =P ­ 1set« @flag2 _7 © ö
look like negative number½ %!if>$._Z _Z _¤1er. (‘  p  !ifÙ=hasO A +al< <   9 CTrue :  ˜I jtcreatedf     ¯| °s_remove­ù› < "s.3 
ÙL  B”S sT  :¡# collect Fs¤VtitleÔ ?™_map = {}®:  ¦¤ 1 h"ifg .T  3 	 ,  ] 
Ó 50msgBQ('canµCergeZrs - twoT ö s are named %r'ª F   4 [ "% U’ )6 � [é * ð] = group

     ó   # map each action to its group
   _+ E= {} 2for) ò  in container._K _6 5s:
0  N c# if a7 ûwith the title exists, use that, otherwiseD Ãcreate a newL �matchingP � 'Ë  „ "if4 .w 0notÁ  µ  ë :s  7 ! [à D ò] = self.add_argumentL (H L =B ,' pdescripš-  3 óconflict_handler8  )— Þ ‹½s	Vtheirc	¢  ü+  <É ñ ÿsA&  \[:  6U	£ V# addcò's mutually exclusiveÔs¦ q# NOTE:p4dd_1 _1 ¯ ² ever gains‡W= andF r=]ðn this code will need/bÂæpanded as abov¸ 0  /Ÿ.— ?Smutex± kÕ uƒrequired † h! Î Ý Ó Þ ç .­ ` 9 ü3all£›ƒs0 orši�œ 
˜ v­ d¸  ŸR.get(# ,×1)._Ù# :Ðdef _get_posi¨ al_kwargs(¢, dest, ** ) |„ke sure �@ is �†specifieˆDif '& 'fP O  ˆ˜msg = _("+ Ôs an invalid œ ³ 5s")5 I óraise TypeError(msgð    º 6rk ? W sù§ zØt least one i�ealwaysú  2if Û † 'nK!')úin [OPTIONAL, ZERO_OR_MORE]A [ j6Tru�f )==W  
¤ 'default'„ ^ r Ù p# retur?†e keywor�!s Ano oîv string1< Rdict(� [=`6 _6 3=[]¯Ÿ! Ðal_kwargs(selàf, *args, **kw
 C):
  õ# determine short and long option strings2  _ U = []  8 _! 	3forX A @ in “ ’  ™ P# err+  õ that don't start with an appropriate prefix�  K jif notu 0[0]x Rself.3 j_chars…  >  › R = {'Õ *':I ,k  1  'X =': l }; ómsg = _('invalidk �2 %(„ ])r: '= x :mus" Û ˆacter %(– M)r')H Àraise ValueEƒ(– %£))
. #™ s�2ing“3twoˆz Xs areVO ¹ Ù ƒs.appendï  
ª kif len" A > 1¾	O /[1ì½ ‹ ð # infer destina0ñ, '--foo-bar' -> 'foo_  Z2'-x xÄ > 2 = œ`.pop(' v', Noneú !ifi 1 is 
® ;ong~
$  l Z 
% ! =š
 6s[0× 8 OelseN 	€I  � ! =Ê 
s  .lT-p(+ ‰ Ñ G �  ®D  =*–required {�s like % 	Ó 
�  j Ð ÷.replace('-', '_'3ð# return the updated keyword_Vument- Rdict(,3=o ,)s=Ÿ sv °def _pop_ac™a_class^,l S afault=iO2 ” '5 ­ ¹õ _registry_get('5 	 ",  £ ±get_handlerž ž1funÈ ó  from conflict : �š _6 “_name = 'g _= b_%s' %œ : J 6try �î bgetatt³ ,‡ p ò except AttributX
S ·ûŽ `resoluÀ  v•:·³À % self.confðlict_handler)

    def _check_conf" ò (self, action):(  , Ð# find all op ts that 9 £ with this  b  : " _5 …als = [] 3for0 £_string in~ .3  %s:4  U .if7  » .i 6 _É =  A 
– ? = > [Š ½  H   
L ©s.append((7 ,+  3al)… A Ò# resolve any( Eictsò "if = Ñ � àÏ %geô%()O  s 3 (*¦ s¦ +>,i_error2? dicting})»ômessage = ngettext('Š  ý2 i: %s',¶  º  < s= Glen(| ® ( MÚ = ', '.join(¥ 	° íi? "in
^]° ñ raise ArgumentEž×z%D Ö á	–ãÄ  Í moÌ%llm ÝÖ |iHŽ Th ?theh  �  , R0.re¨ 
§N 8 J.pop; c, NoneP >   P# if ¢ Û£now has noÁí", Ž € it from4 	Ã #ä °tainer holdR)it# oif not? š 2conV "._‚ 	´)


class _Y�Group(_A$$sC@ .+s_init__:d €, title=)�, descriN ‡**kwargs3Q# add@missö “keyword aéQs by Ç   lp Pupdatx` ¦.setdefaulB# �-'Õ$— /? Éprefix_chars;  7 Í _— 	;  ? Qsuperm ô  (¨Àoup, self)._“_init__
  Qsuper ×(description= Å, **kwargs)
7 õ# group attributes Ñself.title =  
 _: 0_aci hs = []X §share most] û with the containerU �registrieR % &._ 1 € .  + o__ 'ng¹ 9 # G {default¡  - òhas_negative_number_e  alB \0  ÉŠ 9 
5 ¥ð_mutually_exclusk � a S ' ¸ƒdef _add(\ ", K%):s  1 = s°(_ArgumentGI , 6 ().H 1 )A  " .>Œ.append(+ creturn„ ¦ oremove©   

B x £ 2 £ £

class _M}E|	'):¾ §#__a¡÷, required=FalsetË k tX R t_ % =j •: ' =¢% #if®.n : â”msg = _('� ´# aJ¤s must be *'Ê  E öraise ValueError(msg" Í ¡ Â_Ô •s” WË¼ Ì ‰ˆ”Parser(_AÓ¢Holder, _A«C{aò"""Object for parsing command line 3ñ s into Python o4 "s.Ù„Keyword † s÷ñ- prog -- The name of  Sram (=Ö: sys.argv[0]p- usageB A 1mes : öauto-generated fromQL R  yof whatž 'doc- epilÏ  ex4@llow2 ×Ã U S-^@entsy ¨vs whose« p shouldþbcopieduðthis one
       ô - formatter_class -- HelpF   ófor printing help messages
  Ñ- prefix_charI ó Characters that  ø optional argumentD Ÿfromfile_M  , Ås containing�  – Oaddil € €_defaultý DThe  Pvalue"? al® ðconflict_handlerB 0Str%bindica0bow to $  ¬ 4 ö Aadd_VÑ-- Add a -h/- .× -Œ �ow_abbrevp £Allow longZsm 2be # ÷iated unambiguouslyM Áexit_on_erro¾ óDetermines whether or not A®pParser : es withO  sI @info@ Rn an  Roccurô A"""
5 ñdef __init__(self,  H  Ÿprog=None  u‚ adescril# Oepil^ 0par�?=[]{  8=50  ÏO='-'#  û» ¼( ¢!='�€ …O=Trunaiy$  P% "):ì ÑPsuperï1 =  (U , $).-  9 (Ö O o�=€- P 5 ] )ü #W1setTo³0if î@ is ñ:ÿ  < ÷= _os.path.basename(_sys.argv[0]p  J.5   M  :1 =  
 2 = 	 
 ÷  =A/ Î/= ë
; Ž4 =  ! � %  
) 	” Ø ô¡ f Pgroup�@elf.  
X C_pos_s� 1dd_& F(_(' æ;'))A Ü-al?  = 	Asubp‹ >  0Ë ç# register typ¤ð def identity(st‡ring):
  �return st  õself.register('type', None, identity)
/ ÷# add help argument if necessary) õ(using explicit default to override globalK _$ )G  Ð_prefix = '-'q  "n  ¹_chars else 5[0]I 1if ë @add_¿ 
 Õ (9 B
Š T+'h',Ó ž @*2+'[ -',= saction= 8 ž=SUPPRESS1  H Ò=_('show thistmfÝge and exit')œ0par•É s, ½ s™ Cfor * #in
 s _0¢container_È "s(; § %:tryA   y # =e .äŒ  ( þexcept AttributeErrorO ;pas8 >lse' Ïi „.update(Œ 3?# = %ò	# Pretty __repr__ method < ðdef _get_kwargs(� �‘names = [i  þ   ['prog;l'usage pdescripR ü formatter_class üconflict_handler   í z B@ [(À ‘, getattrÝ  ,  0)) W  1 in "s];0‚1# OÙ pal/Posiä    ddK‚R  � Ø ’subparser�B, **Ÿš%_- q is not
i Ö .e¨p(_('can' åhave multiple G âs² 0theAser ¶ "  Ãbif it'‰ qpresent. 8Å C.setà"('è  Ô§- if 'title'¬E X or '^ 
û 9 R = _(9 S.pop(O Ñ, 'subcommandï  ¦  ^ @  ƒ)brœ=Ô-q_group(¢  ¡+K  (
Ð Y %_p„sÉ È  # «Ås¯¬ ¢"of·Œ¥, skipping¸3# oê¬‘with no "Q #:"Ó9 3if vBget(7ð) is None:
        õformatter = self._get_ 1()
'  ¹positionals0  0_ac! s9 Vgroup4 òmutually_exclusive_" 	n † ±.add_usage(¤  &, v 2s, @ J, ''³ ökwargs['prog'] = V 
 õ_help().strip()
ƒ ò# create the parsers ß â and add it to! ElistG : V_clas3pop+ (¨ 3, '0 Ç t =… 2  opj_¸ ¢ngs=[], **G 0C_subW  ._LR ( 	ó areturnÒ þ dv û Ø * D 6Hdef `  } ,8 %):: #if .Ã "  o = "._" ?als¹  (   Oelse> "@ 
Ì  ‚ ¯sƒÎ < [	 �  3forî 3 inc+ s0 ]_ “ × • S3notÄ ²™ ?# = ð `# Comm@Ñline argumentf¢ing methodX  |ä_ð¥,^ ñs=None, namespace À / * vÓG RknownM # B ^ ±:rgv{ðmsg = _('unrecognized‹ é Ws: %sÝ üë`error(= ö% ' '.join(argv)p l � ¯  O Ò ü À Ps is &
È #´ …s defaulèasystem Ð À    ”  ÷ @sys.¶ E[1:]!   # make sur`!atQ Å are mutable< ]  X s³¡ Nâ± built fromW$erÅ W R &ifÿ ï5 = [ 
  3anye 1 thÑ ¶en't presen
 œLP.dest¤  ‡ŠSUPPRESS, Ò µot hasattr(¿ �ð.dest):
          ÷if action.default is not SUPPRESS:
. 	 ösetattr(namespace,K 'st X %)
I ó# add any parser { õs that aren't present6  fo) Äst in self._7 
£ !ifÀ <hasž Zdest)-  Ñ È   * ,f [ ]Ç ¿ ð the arguments and exit if r eí eerrorsÐ "ifa  - A_on_ 
ž :try  ¯ oRrgs =G _� À_known_args( %, / )z  F ƒexcept A¸ Eœ l ù	err = _sys.exc_info()[1]K  O ‘Â –(str(err)p Jelse\ • ,:Ä z ?if ã û_UNRECOGNIZED_ARGS_ATTRö ž.extend(gÆE Ò  ó <dela9 µ freturn”ÿ Ndef Å Y& ˆ_stringsÒU€# replacn#g + Oþ  file reference„@from$ Ô_prefix_chars
;Non¿4arg� Areadx_M _N ƒ) 	9ñ
map all mutually exclusivÀ J toA` other' L# @y ca-¥occur with  ×�_conflicte%{}  N¶mutex_groupU“ _“ " sm þ6 _d  [ L .1  s  7  w  i,ø #ex!  { ¯enumerate(H Ä N Ü ‹ ï C.set!U " J, []É	J  ¢ Os[:i4 ji + 1:1Afindù opt‘ indices,6�determineÙ ñ;…_patternIp# which v an 'O'mi‚ _  Mne 7ex,>  4 A4 Ã›, or a '-" U '--'F b ¢ È 7 = c&Â  ß‰[B& Ps_itep   ¾^ s¯?4 
= L "):[ð         # all a÷rgs after -- are non-options
  ùif arg_string == '--':#  . $ ý_pattern_parts.append('-')5 8for] 'in ns_iteri m IA')
n ð# otherwise, add them 5 to ã 
þ ¡# and note' òindex if it was an 4	m Nelse¹ ) à_tuple = self.$2se_ 6al(F-#ifl C ois Noni   "„i = 'A'�   ¡   Š îÙ_indices[i] =} R  < t Ot Û !> ¸a# joinx°pieces togeÇ ¶Bform o“ i sj   '.N b  „)tsx �converts" t 5¡ppropriate€then takŸ  TcC� aseen_a sõ&t(Ú ½non_default) G 1defd " (R ,  Sument±$s,¦µ =!)‹u @ Ss.addL –  Ë2argX Rvalueº  ¯Bget_ 7 ƒ I J p# error41thiRZ 0 isWÒ allowed with¤µ previously J  » ó €s, assum–Sthat Ô   "us±ZI Ã ù don't really count as "present"4 º Á Ý.i 
l ·  µ _å | 5  tconflic l _ Us.get‰+[]ê I   4if 2 @ L ˜ Â  D   Êmsg = _('not¸/? %sæ  <   ¡@_nam _L (¤ 
‘ @  sraise A£E_ ¤ %j � «8|  ™bwe didñceive a SUPPRESS ,	ó # (e.g. from a ú
° 0Y h‘ ( , &@spac¯ê yäá Q# fun# ­Å 1Às into an op�tional ac	 #
  àdef consume_op õal(start_index):
,  3 ¤# get the . Ð identified a 1is ; 	8 . ƒ_tuple == p_stringj Wices[x ]> µ ,7 æ, explicit_argU d ¶ ¥ by addiç N  al° Ó Psame L ˜ 	ƒ ÷ # (e.g. -xyz is0 ðs -x -y -z if noB ù s are required)J Pmatch³ êument = self._ 	2 ÿ =Zs = [«while True­±°if we foundž Š
™, skip itr  : #if- ï ]None:#  ' óextras.append(argÖ
Ï
 8   wreturn øJ + 1¼ ( #ZPthereŒ %anú lG‘, try to G ž­ #ñ2's â? s; �only this; %ifr  ¹ … Onot  1couß’  7 © (Ín, 'A')ê î Óa single-dashÈ Ý and takes no³ I 1argv s ¯parse moreS  Ns ou	K  ofVc tail  KL‚ @char²ãqprefix_ .  r3rg_91= 0ã f V@[1] {1in H ” ² h5Ÿ~+[]N)¢ J  i _:*[0„ (  	± ! =© ) +B? 	Knew_Ú q[1:] or}F ‡ ƒ uals_mapc J_!í @   #ifi1 3 in X | ? _ 84 [„ D B ö < = ý ?els¬ V    ms0¥_('ignoredœO %r' D sraise AaUError^ ` %U  üëñexpect exactly on�Ã, we'veö â# successfullyðed the option; eïxit the loop
   ÿelif arg_count == 1:)  < ÿstop = start_index + 1/ ÿargs = [explicit_arg]. ñction_tuples.append((a ,£ Qs, op$ �string))L obreak
 €# error ÷ Ã double-dash\ À did not use:D Ó  ˜ _ument( OelseNômsg = _('ignored (U O %r'å ‘raise Arg� EÖ / \ %Q  y)#µthere is no0 � ï, try to match#9Ral's ™? Qs wit7 £ following$ s1Ž ßsuccessful, e½
\Ÿ§ðselected_pattern° É s [T :½ 0 >( o”�g Ö`  +G—, �^ ~ ® ¦  F ª Mc/_ P# add!! O¤ al7{áist and return$ <‰at whichß #! E 	T `Yopped1 rassert )Ü 	! 3for G3 in = ²Rtake_a Ó ‘	w ï  Ž{Þ lpof PosiÑ€als left3ð be parsed; thisšgmodifi÷ æ# by consume_pE (W  ‡elf._get. Ñ 's(Q# fun% ‹ Aconv[3rg_cf into ] :Î?defš A4)a#5‰ as many asl Ysible\�…_partialà  a ½  	: Š! =gß 
ð¯ ö pî +r ˆ (<s, i f ¾±# slice offñ°appropriate‘ & ½Geach	Ð #[a|QÀional and it÷s args to the list
  °for action,) ð_count in zip(posi 7als 9s):C  N d =B ÷strings[start_index:  ! +' i ]I 	) Q * ) Rtake_º ( £ 9s)
+ ±# slice offPÓ ð that we just parsed and return/ K Í  5 @hich!  P "' û  ß ™s stoppedB Ph[:] =  rlen(arg‚:s):” è ˜# consumeŽ Ê #Op¿ð alternately, untilú Ehave¢ P# pas)Qast o? × ( ¦extras = [£ ˜ E = 0, #ifE _ JicesBBmax_l ' �ex = max(  A )c OelseO %-17 Ywhile˜<o ‰ :l íp9anyt‘preceding4nexDw  @   g  ð Iin([-  1 x  »  ¯%3 2if 2 (>=û ]No f O != ² 
x < Ò@_endðÉ¢_  (5¶ J  # only try½ŸVPal ifÈddidn't÷ #9 #Î0 du§ ” =ingC (if­Û >, Ê è 
ôG p  8 vcontinu¢    ó    k 	l #B ]d allrwe coulŠwe're noH# 9`Sof anûr,W �re were D )iuments“ i!no�¾  pg ž L 	ŒÌÍ I  ¥ “s.extend(L 
+ ' 
t_ C 4 4 -!al¹ Y2arg ê
p
u ¾UÐal(start_indeSx)

  ò # consume any positionals following the last Op > Ästop_index =I _E b(start" 	u Äif we didn't9 A alll ðargument strings, åre were extras‚  Ã.extend(arg_5 [œ ):]| ‘make sureq °required acÝ sf @pres‚ €and also¤ Evertx #0 ò  defaults which> Ônot given as Î ´ s _s E= []Z 4for\ „in self.) :%  ¾$if(  p , /en+ 	/ .€ 
O  $    J @.app\C_get b_name(¾ )))•  B Oelse\ P# ConHº >ð now instead of dox�it beforeb  f `# pars( bà to avoid call co 2funßK rtwice (ÄÀmay fail) if{ÃB wasÙF, bu �  `# only: !it0 Pdefin`‘lready inT  COspacÝ 3if `.#0is è0Non¬dÉ  …  isI4anc¢B ,PO) an< …hasattr(� ,©_.dest< m  is getN 	)$ Ä s: 
,ü  <   6 ±Dvalu	Í ´)<if ù
Ÿ S �error(_('!�5areH �: %s') %® ¬', '.join(z ™ /# °€groups h2Ane oœ ¹t  N*  xÄ ñ_mutually_exclusive_" sñ 1if  / ] ÷ ^ . L )S  ›  º¶Cnon_é;  ? VbreakÃ    #u#no²ÉÁused, reportxÃ 8   ³O = [ L  P  #@ +P.helpV †SUPPRESS6q À   msg = _('+oÃÀarguments %sÿ is required')
   õself.error(msg % ' '.join(names))
7 ñ# return the updated & �pace and õ extra arguments? = 1 !, * sa ðdef _read_args_from_files(¢ ,P ¥_strings):T P# expy o Ñ referencing A - 0new] G U = [] 7ford 7 in "s:¤ ? # . aregula6 ê ‘, just ad±m back intoElistn  J gif notg  ƒ 1[0]  0in . Ð Ö_prefix_chars
 R   å ³.append(argø Ñ 0  Õ!plÀ²CQ withÆ  ‚ z contenÎ NelseŽ >try  w Q Gopenš €[1:]) assý<  @ Ð sÈ    ª - ClineÖ\ .m€().split 's(YC  K  F ’qconvertT A 0_to sÓ   P  X  › ×««0 " =6Y N -:ext-s<  except OSE5¢öerr = _sys.exc_info()[1n Ë  L‚str(erru€modified"t Vb
è¼ `± ƒ c·R [N  ]M `_matchñŠ §RctionL Ø‡_pattern!# = R Sathis aC  7Carg I >n#9 Iget_ (J Ãu =h. (0 ¶ ò  ­`# raisé °ion if we wsp't ableº bfind aæ · "if  –;Non/‹  Ó{7  {   3 � _('expec|5one
='),2 ™OPTIONAL:6 �at most > ­NE_OR_MOREA ?leaB }Ž  [(= ã C.get¡. § í  ,/sg*   Q wgettextÐ%s argument',/
  ÿ	'expected %s arguments',8 øaction.nargs) %  	< sraise AZ bError(- u, msg)
. ö# return the number of• … matched1 / Alen( “.group(1)U Qdef _ _Ú ã_partial(self,·  s,f õ_strings_pattern):j ò# progressively shorteª Í ðs list by slicing offÊ D Tfinals ò until we find aÞ . µresult = [] ð for i in range(ø } ‡), 0, -1³  ÷ _“ 4e ={ 6[:iU  ( ñ À = ''.join([a._get_ã»)”  ?    « ~  ° 
 sˆ ]=  q = _re. (Ž ”	y "if6Æ is not Noneµ— K�.extend([7ê ) §   §  E;s()¨  N _break±ÿ¯ S ecounts² ¯� F ¢€parse_opQ™#rg�Ôó# if it's an emptyk ò, it was meant to be a posiV … !if*a_ 
0¤  I¢  ÷ w ð doesn't start withd _refix�  0[0]{opK o_chars—  ,; ppresentY    a(r,_’ 7 � ”ˆ_4 š  ? = 2 [\ 
xnD ð,Ë‚ð's just a single +_acter€  ‘ o) == 1n'`beforeéG "="}o0'='h‰ 
ƒ ÓzP, expVtÈ È¾Ú.split('=', 1Y9if F  o ¥
€  ÷—Û	c 
Þ D â	. 
× íðsearch through allËbsible % es ÝS ýÑÀ   # and allñ actions in the parser for possible interpreta+ #
   op ù_tuples = self._get_ Õ(arg_string)
= Õ# if multiple† amatch,Š D  9 å was ambiguousE rif len(+ ‰ e) > 1:#  ¬    £ ²', '.join([ ™ 	/  3  ), * à, explicit_arg7 )])K 0argw "{'% 6': 1, 'ï Ces':d )s}> •msg = _('ú ( 3: %õ ‘)s could K 1 %( Zes)s'Š �`error(W %‰ s�¤exactly on“X  ed”’is segmen	• is good,´ §# so returMdÝ& /el·/==¸Ø3, =ý   ¯u f! k!itD not found QnS õ, but it looks like a negativeº �# number,+  ’°meant to be/i'al0 `unlessÐere areT -J -k · Ò #ifL‚ _. _Ý!r. X
ð0if è ó\_has_H q :als8 JNNoneBÿcontains a space	a`if ' '/
} Ãy ¸ja·!al¸PthereŽsno suchÕ‡Ý$isÞp(thoughÆPmight¿sa valid< © B subK¦ ,C@&, ¸ Odef   ŽL)¸result = []w©ñs starting with two prefix charactersfGonlyÿ €split atˆE '='  7    œ .K _ " #ifé 0[0]% 4 an0 1 Ü  WÓÊallow_abbrev" & !'=&o\þ)  - # · —,A .v('=', 1Í F   Oelsed ‚V % D  	=   ]¾ J  S„: _‚¦  J ›.s_g 8 Ð            aðction = self._op ‘_string_a )s[ ?]
  btup = 5 ), 5 ï, explicit_argB õresult.append(tup)
, ó# single characterc ÷s can be concatenated with their argumentsL ¯but multipR ãalways have to 	M L …separate Celif� Ka[0] in» [s and e1] not" :J  jo”Šprefix =; 	* df = Non”  J TshortäP :[:2á4 Z “ 'F[2:]§ h $foœÿ  Ú a
ð  B @B == Š { ¾ 9  = ‚Ô/Ð
Ž 	‹ ˆ   Ò    .p.startsÃ(ð )ñ hë !#¾öuldn't ever get her JelseÞ 1ðerror(_('unexpecÛ ~Š: %s') %	8`returnY collE Vtuple+ ¶Õðdef _get_nargs_pattern(ž ,í—#ë€all exam[ £ below, weF€o allow %@'--'Ÿ� ð# which are represenô `as '-'] Cthe … _› |. ¾  i#û �default (À) is assumedáDbe a`/^ 1if R  4  = 
§ È = '(-*A-*)'� ó Pzero  neö •N  î�OPTIONALm ?n ?moro ÏZERO_OR_MOREs O[A-]â 0oneá s ?ONEr As €any numbvs… È]bÀgs == REMAINgDER:
  õnargs_pattern = '([-AO]*)'
( ð# allow one argument fo õed by any number of options or. sL Qelif u � == PARS’ ?-*A• °suppress acq b, like\ /=0q �SUPPRESS>-*-ø
 others should be integerß /se\  %s^ ò % '-*'.join('A' *½ )zÓif this is an[%aló  -- 2not£%edø #if% .��_stringsž š�.replace(§ U, '')^  B	, " =½ <  '; < Ó# return the z  	\ ?# = = ø# Alt command li¬‚parsing,%ring fre¾Crmix@ ^ = @def H  e_õ 7 0ed_=`(self,ëñs=None, namespace )r / * @v = 7 .R ]knownX . M } Û6rgvX  Žðmsg = _('unrecognized– ¯[s: %sÀ� `error(= C% ' �Vargv)p ” � º  Z è 6s a7 Â stNVextraa#­ ñ `# posiú`al can� ×!ly—¢U with76s.  G areM Rfirstâd6 8allc ú@s derÒvated.  The '¦ 'P 0areánS @.  IË ò¡rser defin¿  ÂÂincompatible~ (thž tc assumc�(e.g. use*áREMAINDER, subZWrs) a• PTypeEò t vraised. 
 ø s(' 'ô 'ó@settI©±§default toH p(�is blocksB addÿ o'att 0 to# H �  þsNV_get_ _§Fons(ËRa = [   f¡;7 in~ m g  n& .ì Bin [¸%, s%]]­  0 
›i |!('œð:ƒ  ¸M‡  '&“ ’=%s'%a[0]¢ @ðif [action.dest fñor group in self._mutually_exclusive_" 7s
   for action: ! .( _ Gs if" @posi. Yals]:J öraise TypeError('parse_intermixed_args: B I in'C ˜  $' Å EÄ Gå 5')
8 :tryˆ Âsave_usage = 1  Z 5   'if/ Š is None\  '   ñ# capture the full e  O0useLe@ mes‹ 
u C   ©9 « bformat¿ i()[7:]¸  5  c › f Ns«  de/ Gvate|‘  ) 1on.Cn¯# =ü. �  ‘ ## O = 0' \ H ¿ = SUPPRESS, 	ˆ vdefaultŠ  9 	# g 	ñnamespace, remaining¢6¿Qknown (,v   z )M ÜRremov†WemptyâÕ values from t s  ¸ Åif (hasattr(* ,×Ndest«  8  and get@ 	_==[])¢ F ¥ 0war†�s import  °  2   ð('Do not expect %ss%s' % (p ¾ , )Ê ?delÂ 		Š 0fin\Ñ ¢# restore é â0bef yexitingN  Ð ûÞ e ¥1 `  d 5  7  	9 #opìT_get_ "(T]!# P Ds.  J  s aren't n ùlly required, but”  É #xóy could be, so make s”yQ .; 
h� Ê h  ’ ‰ d ; $ � = False,  � w »º¥ À       groupô.save_required = group. /
   
# � = False+ ñ$namespace, extras = self.parse_known_args(remaining ,J „   t )E ‰finally:  C ¡# restore • Àr values bef }exiting7 ðfor action in op
 >als`  d ) S# =; 
{d j c 8P_mutuÈ ±_exclusive_" y  x  	òw #w Pusage¼ * 5 ureturn vê
" ?# =  Vm€ conversMsmethods = = ’def _get_²(« ,Zæ, arg_strings)– # ¹ðeverything but PARSER, REMAINDER= 0s, ? ñp out first '--'z  Ô#ifk  .nÂ@ not§[M ]~  8 /tr… ­ €.remove(m 
Ãqexcept 3ZErrorY  ] Bpassz  #˜ Ñ ñument produces a default when¿ xpresentã  Ö � J and÷ º== OPTIONAL�  �
&  § ¿Fcons„  ! Oelse7 Î ½  9 áif isinstance(h Ö '     ã ŸV(»,
� 7  tr._check‡1 � #h -â='*' on a posi;À, if there w æno command-lin\#Ì`s, use/ Æ ì st is anÛoN ‡ than NoB oelif (ÚÀZERO_OR_MOREûÍ  û  4 .ä`¥ §  €  — Ù"û	² ­`singlel8/orM0 Gu jGlen(C`) == 1N
I@in [,P9D ,-ä � ÈF Àring)
        ñself._check_value(action,  1)

' ò   # REMAINDER arguments convert all2 1s, N …ing none@ Relif ] –.nargs ==S :(  p | B = [Ÿ <get�  ) for v in� ˜_strings]¯ OPARS¬ 2but° õ  only the first� · [ ´ 5 ò  ñ Bó  ž9[0]“€SUPPRESS’ð does not put anythŠ!inÛ �namespac–V á  l ÿò other types of äÉproduce a liV/se^ ó;  B
b    _	XRretur4â"edà# i Vdef _¬ l ,ò,¡¦)—  -€_func = /  ._registryH  ('  'D . 	 )� !ifô�callable(+ Y m   Òmsg = _('%r i(4 'N  * sraise AéUError F %êd ÿ  6 # J1 to|±appropriate; ¼ 6try E �result =' b D(arg>m Ÿ AType£ ps indicd e³ sf eexceptÑ 2 
{  !” = getattñ y0'__ ‰__', rep )= !ú	= str(_sys.exc_info()[1]* g	•´ `s or Võ Oalsoú (? ,<   á  0ß" {Á : W 1, ''':}  ù7Á_('invalid %É")s{A: %(C /)r­ ’ 	M¿ §â�wãž ¶”4S>À must be one% öhoices (if specified&6c) ¹ND #an˜  ¿., ‹  `Ðargs = {'valuÏe': value,
   ó'choices': ', '.join(map(repr, action.% 9))}E òmsg = _('invalid ( A: %(s ð)r (choose from %  n Y)s)')K òraise ArgumentError(}  , g �% args)
5 ?# =  óHelp-formatting methods ; = Bdef 9 Ñ_usage(self):  > `ter =  e._get_ (Õ  G.addM .X ,> ã sœ q   i ö
mutually_exclusive_groupst creturnÁ Bter.… c_help(<â   ] á !# Ë  m  w ò Ou �# descrip¨ 
‹ AtextÉ.,  ``# posiA aals, oL òals and user-defined qg "‹9 inØ s? n œ �start_sedî3 f.titleÙ
8  _Ô >3 	Ü  1  q  9 acsq E _R S E A 5end° 	Ahepilog |!erý¬  h.' 	:  determine �(q e aboveT Ý’ x àF   ñ ter_class(prog=  
 ¦ l— !# jOprinh8  „5 ·, file=None¯ !if @ is  J0ile€¡sys.stdout^  ³Æ _d 5mesËô x )u ê –  Š1  • Uw ” Ç  #, Õ ¡   
1N
 7 ƒR5errR s.write(` ;%7 _# Exi,  }2exi¨¥, status=0é „ ƒ 
ã ùÀ_print_messaóge(message, _sys.stderr)
   Ñexit(status)
 ódef error(self, E !):  < 2"""!  ƒ: stringA  #  Prints a u� D õ incorporating the 2to   E andj  ž "s.˜  W ð0If you override this in a subclass, it should not return -- it
C     peither e õ or raise an exception.‰ 5"""   .pá _Þ (I¾ ^óargs = {'prog': 6 Sog, '8$':ÿ }]  ’ �(2, _('%(@ 2)s:”4: %Ö�)s\n') % j $)
¢ "asè 2~~~8ðThe `ast` module helps Python applicaî ñs to process trees of¥, ¤ ðabstract syntax grammar.  h   it÷ ñ might change withK Deach‡ ‚release;Òm© °to find outž q ²tically whaï  Ltcurrent”   looks likÖ€d allows%ifó Sof itb<An Á  ð
 can be generated by passÄ Zñ.PyCF_ONLY_AST` asà `a flagU � ð	`compile()` builtin funcz ~Aby uR - @pars+ I ' Hfrom"v°result will¨ a½ ¼Ñobjects whoseK $ es‘ inherit V È  ¾ (/ed
Õ „d into aÏRcode ~ w Ú û H-in á | 0ddiâqvarious¶%er3Ps areðvided that make work™g P Ç„s simple¬@main·  enl  / *  
g n^ iÓ™#in4l i6 ˆ =0asyô1use^ òrface for librarieK ²  ­   t Ì1ithop›bñ(template enginesM 0exaÍ 2).
æ`:copyrJ 4: C P 2008®âArmin Ronacher×”:license:µL .KPimporæ!s
 S_ast  * ¤contextlib  Ómanager, null 3 Denum- ðIntEnum, auto


x÷ðsource, filename='<unknown>',˜Áe='exec', *,` Õð  type_comments=FalsE óeature_version=NoneÌ3Pmzz  ¸oÌ‚AST node1pEquivalb3to ú(3 ­ ¡ ), )B  PaZ	¦ @True/�get backÅ  ] Å P wherçepÅO À  g làPyCF_ONLY_AST
ð    if type_comments:
   ñflags |= PyCF_TYPE_COMMENTS$ öif isinstance(feature_version, tuple)O û major, minor = 0 ñ  # Should be a 2-@ .j  Ž qassert F U == 3 J =d   Melifk vis None› B !-1? ¶# Else it sœ òn int giving theo  ù ‚ for 3.xº ðreturn compile(source, filename, mod  k,s  ì  _œ = ó)


def literal_eval(node_or_string„1"""a pSafely ) àuate an expres· ; b or a = € containì �a PythonG 4 d.  The0 "orD ðprovided may onlyJ qsist of6‘followingO Z Ç  M  ucP s: óings, bytes, numbersbò s, lists, dictsE se Ñbooleans, andó•

Á ú 5,w : �
 ‹ = parsejÏ ='\!')Ø d Eyk 	
| Q.body\  øð_raise_malformed_- — R $ å ValueError(f'1 ® orð `ing: {B 3!r}Á e ¼convert_num\ hif not
 @ A, Co t)N b9  .v… )3 án (int, float,%7lex¸  yá  $ f y a  	º @signÁ Ç D ¡, UnaryOp)9 û.op, (UAdd, USub)± @operp<= _7.  º   #c  b [  . ì #+ L ë     7els×    3 -3  ¨   @½Ž ´ òY~  Y�  �^;, T8 * © T(map(³ ,¿b.elts)¶  / Y GListÃ  ) X  AW &/SeV ?setU (OCall¡func, Name  	   # 0.id'Q'set'Ç�àargs == node.k÷eywords == []):
  Åreturn set() ûelif isinstance(node, Dict> aif len  –.keys) != kvalues3  | ð_raise_malformed_a F „  ( � ðdict(zip(map(_convert, 5 v ,º  6  6  š )o ó ¬BinOp) andû .op, (Add, Sub)å tleft = ¬ P_signç !umæ .  |  ± Irigh3 n,  
- 
ž M í, (int, float)² D ›, complex­   
R Z á ?Add-   1 › | 1 + ` …Jelsen :   > ->  <
% Vñ_or_string)


def dump ð$, annotate_fields=True, include_attributes=False, * “dent=None1"""å R5 a ¿Qattedk ò  of the tree in¡ð  This is mainly useful; L üdebugging purposes.  If±  A òtrue (by default)ø s 2ed ¡ will show‘ QnamesÆ , ý �  .‰ t f 8 iresultb qbe moreYaact byK PomittÓ ²unambiguousl  ‹ E.  ArÑ such as line? bnumber± ñcolumn offsets are noto6ed 5tkbwantedäp can beõ@ to W?  inò kÒa non-negativ– £integer or,\n òtÀbe pretty-pr2 Âd with that _ ã plevel. \  (]Ó� selectsW asingleò  representation³� ì_Œï` #=0¸ s âß  C | 
ž5 Q += 1¤  6   ó prefix = '\n' +Ç 1 * 0 	+ 0sep( ,) 
b 'O    Ç ™7ASTé  ³ ’cls = typ¼4    0arg )[]l Pallsi0 = 	 kC˜	' 1foráýn
g „ >try   �` = get•Ï 6
Å  , fexceptKSErrorW À            ÿ   keywords = True
   ocontin  ôif value is None and getattr(cls, name, ...)$ :c ‡ *„ ó, simple = _format( mlevel)w 5all2   Â  1 %if.Å òargs.append('%s=%s' % (� )‡ OelseO > 	“ °if include_paibutes‚Wnode. _ 1for›O in .  >tryG     ž % =û S üð  0 ±except Attr· _Error_ € L „7 N k 
ç h W `&=  l5 O+if] @len(•n) <= 3aâreturn '%s(%s)­<°_class__.__¾Ã__, ', '.joiR p), not ^ 	–	S U ºprefix, sep\ FFals� elí¢sinstance(`Zlist)Õ !if–    
  P› N[]',í Q%s%s]ž Y2x, U@[0] LxIJ)), ¼ X Arepr¸ )| 6° iÛ 7ASTÚ ¡raise Type)ð('expected AST, got %r²  ø -._½… CPndentŠ ¼²  ƒ i& W, str…  ’ = ' ' *  Å â  … ð)[0]


def copy_location(new_! Q, old
 c 1"""M ÄCopy source 6 ð (`lineno`, `col_offset Eend_  P` $ U  „) from *~ d* to *– á* if possible,LÝ # .R ¯  ý ^   '‰  )�    “      ¨ ¿0ttrK Ÿ Æ� l ² ! J  î­”S À, attr, None7)
  ñ# end_lineno and ñcol_offset are optional attributes,, KtheyN ù#should be copied whether the value is None or not.A &if% 5not) (&  À 0has� ¡(old_node,ž )˜   Ð.startswith("ä "ù -):S 0set: G(newS ,’ > treturn " ð


def fix_missing_loca/ s(– f 1"""n ðWhen you compile a & ` tree «  1(),2( ¦r expects ªQ ª�£ for every^ Àhat supportsW €m.  This‹ raŸM ðtedious to fill in J ‘generatedN ps, so t> ¡helper addV !seƒ!Q °recursively reññ  already set, b Ating™  | *@s of L aparentƒ È.  It works c ò J @at *X*]~ «A_fixš,K&, D,þc  Ê {Bif '% '$ j  ._:û 
Y!ifõ ¯ - ,? U  Y    ! .^ # =¤     Jelsec   2 @ 7  ±  % µ g\'? ,–)= ÈŒ ƒ 1 ' =W”  µ Ë 	: L ?  Ó �Ó  QˆC Œ# ' =,Š É 	: É  ?  É  ò  Í   C ¤5 ¨ ¤ ã 
º " = 
 G  MPchild6Qiter_ l	/ p   ­$ ®u @  yb, 1, 0 
É3odeÅ“increment&3n=1GI)  œ¢P numb
@	 qof each ø  Þ ï¡ ² E*n*. `useful@"movW0de" pa diffeL y e aÁeþÀ    for chilód in walk(node):
  °if 'lineno'# öchild._attributes*  1  0 ` = get* ( ,I ˆ, 0) + ne (  H R"end_G "w 	. Vand (2 - :z P  ~ Õ) is not NoneL ÷  … ¶ .X '=  À preturn 7ø


def iter_fieldsN1"""j Y ñ  a tuple of ``(. ñ	name, value)`` for each    ``f .\ !``O @thatÎ Àpresent on *' !*. v  N I    G Á6try  yª 6 ,Ì < ,” )b  * „except AZErrorM Hpass!^_N &	¡ll direct 0 gs5ä #, ÿ R, all– s 2are. ¥  # " Aitem@ Ö + Alist ’ <�6  ‹ä Òif isinstanceÚ[, AST^]¢  ; /el=  œ >  Ï Ì  Œ • 
m M 
K  - ‡  *   �  & ¥Ñget_docstringÈ´, clean=Tru"^REthe 4 Á  Bgive!1 orrg if no+ "caàbe found.  If =  �Ò provided doe¸7havk �s a TypewNñwill be raised.
 AIf *Ã *1`È `9Ptabs 2Pexpanj ¡to spaces ;�ny white M y0canf ñuniformly removed fromÀ psecond Ì€ onwards} ( 
h Í> þ ù, (AsyncFunctionDef,  QClass wModule)-»("%r can't C1" %0@.__cP P__.__ö"__èž 
Q.bodyê ¬  ™[0], Exprˆ "p . " =r  N A[0].û]
¼ , W, StrØ Dtext@ s4 =6 !CoŠ/t)¯ r ?, s[ ! _ &seeöÏ "if" áimport inspectC  h¸  .�@doc( h[   ‹`_splitC×s_no_ff(sourc…S!   aÉ �ing intos`s ignoÂ Žam feed	ðother chars.

  ñ0  This mimics how the Python parser splits source code.
    """ qidx = 0 ¡lines = [] Pnext_ Q = '' `while 4 b< len(W !):  W 3c =l B[idxH   L E+= c/  J E+= 1 õ# Keep \r\n together þif c == '\r' and‰  • € . &n'¡ � 2'\nÜ     ” w  inw \K  •s.append(å )³  Q  H 5if  � N 	qreturn # ú


def _pad_whitespaceŽñr"""Replace all chars except '\f\t' in aR a with F $s.bresultµ  È Pfor c4 a· ! V   5 E 	öOelse& "' Žï ? ð Bget_| ƒ_segmentó ó, node, *, padded=False˜c"""Get— ? 1 of3*V ð* that generated *W 1*.
³òIf some location inform  (`™‘no`, `end7 Ácol_offset`,H "or#  !) Çsssing, û FNone{ *Ù ** q`True`,» RfirstÄ°of a multi-� ` state&Q will| #be!ñ  to match *Ðoriginal posiè 
06try» Æ Rò  Ÿ  ¹ 1 or”. ê  C $Û 8 ¦    Â Bno =F  -* Y  %  ) ~ )  o  <  w 
 - AæAttributeErrorÏ ¼6 £  T_‰ c_no_ff»+0if l    õ =Ñ-noX  !  s[ `no].enÐ6()[º :G  B].de$ Ž #if Z  X]ing =O g m  :_ Ç 
ÙZ "'' ­=„  t +è d  c :Ã  as“œ  í  
 	@ ä 7 y !+14   2no]«   Ás.insert(0, » æ  ôBlast û�''.join(& )ºPwalk(M“NñRecursively yield«¡descendantþst Úðtree starting ató *node*
    (including ñ( itself), in no specified order.  This is useful if youM ðonly want to modify k sL ñplace and don't care about the context.I 1""" ñfrom collections import deque" btodo =  ([m !]) `while  :  í   ! = ’.popleft(.    , ð.extend(iter_child_5  s( ), QyieldÜ ò


class NodeVisitor(object)z Í A0 " v$ b base ; ¡that walksòabstract syntax tre9qcalls aÐ G 1fun’ for eversd found®% ómay return a valFPwhichÔÁforwarded byŒ `h ¡` method.
| » Sis meòabe sub �ed, withD  1 adiS !orK X sY ¢Per defaul*  À sæ  / � s C1``'' a_'`` +U ƒ � name ofƒ  / ÷.  So a `TryFinally`“e a wouldI 2be _4 Uòbehavior can be chang:`overrií G  ± H I@  If_» &or} Rexistè až B (µ³� `None`)Ú ‘`generic_J `_¡„d insteaºD{2use< ´`ÉÀSapplyÕ sÑ D�s during• ðtraversing.  For ta3%al‹ Ó  (`o ±TransformerÂ !atL ballows51icaî# 2defS (¡,c ¿1""" 7.w  f4 = +! +? 1.__,P__.__0!__k  4 PÃor = getattrw L  , … .}®ë=; Å 	5 V  ]
Í `Called–²no explicit0
	ù  f¬,î ‰Ü ×§ ô   Pif is6Qance(qT, lisÏ $   _ @itemW * 
K ' 
S  1 W, ASTð *  ]‚ ‹mZ ! *elQ z R J ( )ˆ` Ÿ_Constant‰4 " =. !Atype5P = _cF ,_ `s.get( G@0if  ? i=*ne< [Bcls,Ç/inc  N/s(K 
$Àvalue, cls):/
   Àtype_name =  % Ubreak 6if 6 Åis not None:"  h ömethod = 'visit_' +7 	* :try;  ? 5 òor = getattr(self, W )A þexcept AttributeErrorS Jpass8 +lsµ  z êimport warning2     .	 B(f"{“ ñ} is deprecated; add Æ ¹_Constant",  M 
 D? BionW :, 2ì  1 breturn] vor(node%   .‘.generic_‡ ( ð	

class NodeTransformer( Vª2or)<1"""° 1A :3 ':`$ Q` sub @ tha/ñlks the abstract syntax tree andL ðallows modification of Ã 1s.
# AThe j ž ±` will walkd 0ASTS A use õ PvalueP 1theL ù #or6òs to replace or removA 1old… _.  IfS O  ß 
S  õ ``þ1``,8  Ë ® #beb Òd from its loõ 
Àotherwise itJ œ ad withN rë Ù 0.   a may bÃ ¡ �originalÌ õ in which case nü ±ment takes y@Here† Æan example t!çð	rewrites all occurrencesu ?r lookup6�(``foo``)xò``data['foo']``::î2   FRZ ANameŒþ),  ÿ2defü_-  ê,ñ ¸ $  ,¡Subscript(&  6=L @id='§ â', ctx=Load())­/  dslice=Û(E  ý?.id2  R ! <ctxˆ )@Keep·Bmindq mh½óde you're operating on has chi¿s$ Q musta  eiaÆS. r@ cÓ â:Ñ):`=`P   aod forJ  Í c firstB1For‰ 	  Q@part„a collecóPstateŠ1s (Baapplie¤1allp $ V )b‚`ay als×Qa lisl  ™ Bs raþ 1hanN Âjust a singlR· qUsually<Rú0likc'isµ c w = Yourª1().ž l + F  ·	TÒ J º ]±field, old_X Qiter_ s^ ¥ c   aif isih5ce(: À, list):
     ønew_values = []
   Afor   r in old- :(  , áif isinstance(6 o, AST)/  3 % Ò = self.visit8 )a  2 $if� os None\  . �continueO �elif notº  ^ =.extend½  5 “ 
R ?appR ‹f[:] = 8 	ê Þ ”6 ˜ H Jnode“7 — >1ew_4 i’	€delattr(* ~, fieldN ?elsÑ<set? ,ö  P I preturn  ð>


# If the ast module is loaded more than once, only add deprecated methods " 
ì aot has‹ !Coëct, 'n'äð# The following cL0is Gñbackward compatibility.±ð# It will be removedr�future.
% Àdef _getter(1t  UE"""D¶ T. Use&¡nstead."""D  - r% C .�_ s_ ,C f 2 " = : 
ã.n = property(« 2, _U ¦,  q, ò
class _ABC(type):l ÷_init__(cls, *args¦ écls.__doc__ =  Ž ^ )Dast.–  ¿0ead/0o ÕTcheckx  + w n ! $, [ + …FFalsž`if clsù _c^_ú sã:try  N Ç! =¿ Ô   þexcept AttributeErrorF 
”  D ˜/ () '  � (, Ó ¯[cls]) and= ‘A ‚_not.get2())^‚  ©  M0.__— ¢Í!

ï2newW Z@, **¸d Ì0key¦ I0if  ¿ nË!._êÃ°# arbitrary0 ðword arguments are ac±e: poEðg ¦.index(keyý ðif pos < len(argsG):
  ñ<raise TypeError(f"{cls.__name__} got multiple values for argument {key!r}")X öif cls in _const_typest €return C ð ant(*args, **kw
 )E %  Ž pew__(cl+  ( 2 ´
class Num(W a, meta S=_ABCõ ò _fields = ('n',m 0__n] 0 = 	 
N ?StrN sN _BytesP 8DNameì W  × +__à Ellipsi• !)
�Cdef 4‘í$s o   „èo(..., .  €A = {½ ñNum: (int, float, complex),  £Str: (str, º@: (bÂ 0: (ãÃ(None), bool; ô " @...)B (}
› K_notŸ  D ) * AnodeJ— ÁÏ  * 8: '� ñ',  # should be before intá ¬ 8   0int 2um'&	 1	 s7C'Str6 .1: '> z  4: 'D',
}r“slice(AST­ð"""Deprecated AST  ÕD."""8 aIndex(> : p Use th2dexÒñ directly instead`  tí~ÑÍ! œ AExtS× Ÿ `ast.Tuq� dims=()’ 	J `(list(. y), Load4 a

# Ifðast module is loaded mCöthan once, only add d¢qmethods" @
if Ø�hasattr(ƒ 0, '€ '¦ñ# The following cods  ]0bacdž¡atibility.¢�# It willÞpremovedpwfuture.¥ n Ã_getter(selfy  Ø	].0elt¸
  , Ù B .% b sb ,Pi 6 " = > .¡ Ð = property(_ ² ",  ^ )R“Suite(modd 	É &ð  Unused in Python 3ð0."""

class AugLoad(expr_context):
    """Deprecated AST node c8 û.  Unused in Python 3X _StoreY >_ParamV 8ñ
# Large float and imaginary literals get turnñ Ðto infinities0the ø.
# We unparse those* Âto INFSTR.
_	 ñ = "1e" + repr(sys.‡ ô_info.max_10_exp + 1)³ö_Precedence(IntEnum² P tabl† `at oriÒ  Èbfrom p²rgrammar¸ óáTUPLE = auto()UYIELD  %  £# 'yield',	  [ '5 OTEST4 Ð # 'if'-'else9 blambda5 /OR3  5 "or$ /ANŒ $ 2and% /NO}  I 2not% ?CMPo @# '<› >  == > < A!=',ä   ä n7 Qnot i
  is 5is  6EXPï P B  
T B# '|´ !BX$ ž% C# '^# "B# '&# OSHIF! ú û >* _ARITH&@# '+Ò -( OTERM'  q*( @ / % "//8 OFACTÒ 1# u€f B, '~3 FPOWE9R# '**$ OAWAIá Cawai6ATO¶ 
„Ódef next(selfU d 2try     re ' 1.__K!__6 « $   ÿexcept ValueErrorG ÷


_SINGLE_QUOTES = ("'", '"')
_MULTI ÷'"""', "'''")
_ALL *K 9, *@ KU¬Ór(NodeVisitorø “"""Methodã"isûð recursively traveí an ?Ið output source c8@for )ôabstract syntax;�Ál formattingD æis disregarded¥ ¥ __só, *, _avoid_backslashes=FalseÎ  �®” A= []g  buffer    rks = {}9 ¿type_ignore  «indent = 09 ´ / =É  œ¡interleavel!,  ‡, f, seqë ð"""Call f on each item in seqó, calling inter() in between."""
  pseq = i$ Eseq) Etry:  , pf(next(% & úexcept StopIteration7 EpassH Jelse Pfor xœ :seq  t ¼ @     Qf(x)
 0def½ ò	ms_view(self, traverser, )Z C"""T ñ and separate the given *items* with a comma, Áappend it to}  ‹  8 ¥buffer. If= ±is a single„ À sequence, a  iœ\ K Ùwill be added¥qif len(™ f) == 1Ò … Ó r# 6[0]£    ¦.write("," �* wáleave(lambda:  B ? ")e ‘Ñmaybe_newline”
‚0Add!   iÃa isn't‡Àstart of genT˜ed source¸"if” _ 
® 7\n",Afill’ š, text=""› àIndent a piece…  ' 
ÿ€, accord^!to³ ucurrentËiG h level» ž 
$“ i »3" *é T ! +¹ Ó -  8 Ô 
Ñ AµÑ � G.ä(õ c á_j r?k  € "._) F  ‘@property# ¶+ M G ñ value = "".join W %m fclear( qreturn J ”@@conÒ vmanagerƒ Alockc ÷, *, extra = None“ S"""A B  C  ¸ pr=#he£ bX Ps. ItÌÿ ,ñcharacter':', increasesFâ6@on eº{#de' »   K / 2xit„É B* isÒ  ]rdirectlˆ J ò�ed afterˆ ecolon ª .v 77(":T"ifI’ž ¯9Ì U += 1n Uyield 	( -(  Ü`delimi° S_, endÙ*¯expressionÞ *e #* à¿É#s,b@exitEaQ*end*ìÎ  ‘é YR + (  Ø à

    def deliómit_if(self, start, end, condition):
  &if    preturn G –.delimit(N )B Oelse: ánullcontext()
0 ódef require_parens§ ÷precedence, node¢ ö"""Shortcut to adding 1 ’ related Q 1"""k Ã  ’"(", ")",Ý Fget_O ( ' >b ½ ,  ± 9Y Qs.get^ E, _Pð W.TESTb sŽ b Ÿ 0, *¡ s!1for41 in sŽ B .ˆ [A 7] =â ž á Óraw_docstring¡ 4 t …"""If a ' z � is found‹ Àthe body of  ¸ *¦|ameter,§KthatQ ò, None otherwise.©  ÜñLogic mirrored from ``_PyAST_GetDocSÁ 8``.õif not isinstance(ˆ  W  è À, (AsyncFunc/YDef,  QClass fModule�) or lené. Z) < 1“" Ü }  y ! =G7 5[0] ´  . g, Expr• À [ XvalueY 	U !Co@t) aÉ(  .@  Wy  % ¥ ì NÏtype_commentM " =�_2 fignore5q.lineno` e .& ; Ñ   Œ é e~Pf" # E 3: {4 &}"» �traverse³ (ifB � k, listŽ ›@item % 
‰  °žl  , LZÂsuper().visiL:  Q “ò
"""Outputs a source code ä {", 0verNAbackpUn asta0(usðast.parse) will generate an AST äQvalen´û† ¦ #._Š 6= [ì  5Ýq"".joinšE f_writeÂT_and_R _“: %Fif (Ð:Ž Ã
” é¶ y N Ã ô O ò61:]) ý Delf.È `ð

    def visit_óModule(self, node):
    õ._type_ignores = {  &  ².lineno: f" { i.tag}"1 Bfor  1 inq .a , }
 † ñwrite_docstring_and_traverse_body(½ 6 [ ‘.clear()
$ ÿdef visit_FunctionTypQwith ‡ ÷delimit("(", ")"- $ ±interleave(j    rlambda:M Ó I , Ñ Š@.argÁ sG À  R o F e -> ")*  O ƒ.returns@  OExpr [fill(Y õset_precedence(_P c.YIELDÀ [value; 
” " · ’ _Named— �érequire_parensˆ RTUPLEˆ ¥Â BATOM9 s.target ¬  y f 3 õ  + ' ¨(:=¨ oImport¬!"i' f � ˜‡Nname7� OFrom‘ Mfrom� B." *Vlevel9"if m¡•2A  ö.$ < ð   /" SoAssign£  ,nsë  2 F )" ]< *Å0if b²_comment :=‰2getø BHeD `?Aug¹  ú # ~ R" " +¸ abinop[ê ð op.__class__.__Å__] + "$•?AnnÇ ©85_if; Vtãðsimple and isinstaVÆ ÷  , )�
ß/  &:ƒÀ   self.travóerse(node.annotation)
  1if  evalue:   öself.write(" = "5  Ftrav` D !)
E ðdef visit_Return(N ,l )g   �.fill("r' e š 3 ˜ OPass– ]pass"Ó _Break< b& = �Continue@ c) C _DeletA 8del¶mñinterleave(lambda:  èR, "), Üµ�.targetsoAssertÍ a' � e ¡Ftestf6msg2ã± q    Î 
W =msg· oGlobal· g' · F§ CNnameAoNonlocŒ n) Ž JOAwaiÎBwithòrequire_parens(_Precedence.AWAITð è™0("af ¹ïF
ñ?     øUset_p� 
™ 2TOM˜ .b h >   B 
:* aÒ_Yield;$RYIELDŒ $yf $«OFrom(S\ fromRttôVpraise VýðError("Node can't be used Õaout a » attribute.ŸB„&> €Rµ XD àfill("raise")
  óif not node.exc:
   Šde.cause    ðraise ValueError(f"Node can't us
   ùwithout an exception.")k ereturn ×self.write(" +  ”traverse(¶ K ² ; S HfromX  Ï ! 
\ ù !)
— àdef visit_Try(- ,7)  §.fill("try·    gblock(4 z Fbody× ‘for ex inr –.handlersz F &ex? LorelÉ– ´   µ  T ¹  # A 
7h € PfinalÚ ¹  ƒ " l; c † #L  n ÁE†HFË´O;typd2  Å  
( A &?namW 	/as¹v  A W =—  4�ClassDef/æmaybe_newline(‚  ¾EdecoÀ  ¯rator_list@B
 E d Ç Dcª B " +-ðdelimit_if("(", ")", condi " => ‚bases or ‹keywordsÀÑcomma = False- ñ   û eø M 
ï  % 1if B    Ú Þ¦ 	`  !  ·; V j = Tru—  7 X �eK  
¸ ÷ f » tí_Mô _docstring_and_	_ýY6@Func#_f' q_helperL }, "def"S _AsyncX +aC  ^ …  íÐ, node, fill_£suffix):
  õself.maybe_newline() ðfor deco in node. ¦rator_listF  M J †fill("@"D  �traverse(E    def_str = < _¡ ‚ + " " +v Ename” g : K Qwith   ÷delimit("(", ")"ñ � Ú FargsJ "ifz returnsé  ¿write(" -> í 
] G ` ª Áblock(extra=» ðget_type_comment(B )Á _„ ô _docstring_and_fR_body< 
<àdef visit_For(k ,ä Z   à._for_helper(""( G _AsyncL a0  R u  † ,y ~  .'( O ú õ {.target# 1 ("Ïµ>  Fiter< ®2
Ÿ  ža oforelseð ¬ ï  (" ¸   › Î    ß  h )Ò/Ifƒ (ifï[  7tesvŸ @  
ñ# collapse nested ifs into equivalent elifs.æ ñ QwhileÜ.é ‚ and len a) == 1 ¨isinstance! {[0], IfQ �( =] 5[0]z  ~ Ô - ˜ / 

3 % 7 # g 
H ;`final 5¡ itW¢lÈñô  
<8@  
4u?ith íðinterleave(lambda: self.write(", ó"), self.traverse, node.items)
  Bwith( Áblock(extra=9 ðget_type_comment(@ 5)):<  C * c " q.body)
& ðdef visit_AsyncWith(2 Œ K   €.fill("a*  ˜ "¨ ! òinterleave(lambda:» Ÿwrite(", õ vñ_str_literal_helper(4ñ, string, *, quotelñs=_ALL_QUOTES, escape_special_whitespace=FalseR FA"""Hl P for 3ingi  Ž  s, minimiz a !s.J  œ òReturns the tuple (© @ 1 toZ ²e, possibleÀ  ,&s)K 5"""W  	l w_char(c¶  w ó# \n and \t are non-printable, but we only ¡ Em ifb F d 1r is Tru3 ,   cif notR f ’ ºc in "\n\t"û B r/+ c‡ cAlwaysY Á backslashesR Zotherã  iactersK àif c == "\\" o5 et c.is(I• À.encode("uni	 _P").de  l7ciif> Â  7 dÔ 4â= "".join(map( ÖÔ)·#_ã2s =,ìê  ifa"iO l 
qM ![qêq:  1if  c_MULTIS]t / /= M  ,#inÖ£ R NY 
Ã @# If» reçun't anyI&`, fall6 m usuErepr¼  •@# onJ “ originalèR. Try8 2e aoR from z,K Áe.g., so thajpuse tri º R2doc1 Œ  0 = ¦ 0 " E — = next((¶ • 3 ifÄ 0[0]ÒqÃ&:[0]P xy ‘[1:-1], [M 	‘O	h# Sortö ø
prefer '''"''' over """\"Ë Ï ä¢.sort(key=—P q: qÅ +==.;[-1Ê bwe're ê
w �we'd need×Ò @ a fõ
ÈÀ quote, escawpe it
  ù if possible_quotes[0][0] == escaped_string[-1]:<  G ¾assert len(H )F 34 
X  i ß:-1] + "\\" +†  Q kreturn" ,Ñ 
0  def _writeÐ ò_avoiding_backslashes(self, ï Q, *, ö_types=_ALL_QUOTES)@"""WU 6 ñ literal value with a best effort attempt to „  � A."""­  Z‡ „ 0 = £ .Â j �_helper(/  =; )X  ( =á 5[0]$ f -F(f"{2 "}{g } &")bó visit_JoinedStrRGnode4^ 6"f"š #ifß špbelf._f‹ m  g ,C bbufferðrb > Ý Hm 
.E 
> sñ  N ÿ# If we don't needÚð globally (i.e.,3 Aonly2 w#< ðthem inside Form7 dVUñs), it's cosmeticW špreferredM 4useó whitespace. That isJ =  €  3 ”P ðfor cases like: f"{x}\n". To accomplish thZ öwe keep track of wha|’# in our eÀ corresponds… ó A and@ ( � àConstant partsp bthe f-&,B Sallows² r5ly.I � 6= [ ø Ð0in e. s–Åmeth = getatú"§ Ë I(< ª).__name___ E " É« �.append(k³Q, isi$ceN  &))r Bnew_F  ñ ñGs = ù' k $_c|#inÐ
 # Repeatedò°arrow down £@list¯?”p  k9	”		; ?  ,0 ¦–_special_>5=isò 	6 Y p ]£Á %  ¶ = "".join(1 $ Š­!b À}{quote_typeñ}")

    def visit_FormattedValue(self, node):*  .   º.write("f") Œ_fstringJ  D !, ; qbuffer_B r?   _str_avoidJ ±backslashes‘ .A ¼ u ‘JoinedStr) º !, T Á Pfor và 1 inÝ . sã  ç Åmeth = getatQ "k ‘" + type(< ¦).__name__Ñ E " ‡ rK �Constantµ 
¡if not isi- 0ce(Sº W, strá  z araise ÇtError("g •s inside .À should be aK Ging.Ùâ ' =+ö.replace("{", "{{") } }] ˆ   �¶u4™J '"{ž ¢unparser =� d")(?_<V=Truež7 õ.set_precedence(_P Â.TEST.next()LoE 0expx L E™* 0if - °.startswith<´Þ õ" ")  # Separate pair of opening brackets as "{ {"ƒpif "\\"Ø n 8 †¡Unable to m . A "f-Ê¸ ·ession part{°  j 	é ™aconver6 Z!= -1Œ  R= chr4 P  º 6if  zn "sra"V  , æ eknown Ñ L æ = Ñ Ff"!{$ É…Ade.f'Z_spec‚ A '":% X L:] W
- .�  Á  ç?NamÝ` (id²R B_doc±Ê �f.fill(Æ9«kind == "u»5 _ 7("u> ,ª ¦€, quote_šþ s=_MULTI_QUOTESÈ cxA È (ifn ÷, (float, complex)0  éð# Substitute overflow´ðdecimal literal „ñ AST infinities,¤ E   P# and ! -  0 YNaNs.& 6	  B Dreprt   À      .replaûce("inf", _INFSTR)
  `.repla) £nan", f"({- %}-
 *)":  ù)elif self._avoid_backslashes and isinstance(value, str):‰ @ ’write_strJ 8ingM > y /seF  E S(repr1 !)
k Ádef visit_Co�  t(v g, node� ¤ ! = . ?  6/ifÍ  Htupl@  ) Bwith÷delimit("(", ")"i  )    † ±.items_view– !._Ç #_c« !, Š ý "if  is ...
G"...½,el6"ifì ºkind == "u"M ¥ ” 7("uO  ± (V?€?Lis|8 [8]84ònterleave(lambda:t§  p, ‚traverseí_.elts– AComp€) ­š p 6elt¹ 1¢for gen inz¯generatorsyP =gen¹ G> /Ex½ �Wm Ã½ L?Setu{}¸ Z?Dic¹ D:key.•Ô/: |
ú *q?ßcomprehension/TŠis_asyncØÒ     Û ¦	4 .  °set_precedek%_P b.TUPLEÓg.targe�< 
A# � ´¨ > z 	£EST.next()€ qiter, *\6ifsëK 
‰  , !  õ �if_clauseˆ D ]Àelf.write(" wif ")
  ñ
self.traverse(if_clause)
& ðdef visit_IfExp(. �, node):!  J Pwith  ý.require_parens(_Precedence.TEST:  > 9 Uset_p- 9 r.next()@ S.body OtestÐ 	 ª 0 %  �write(" D i D OelseZÙ Ç  orA ¤  ™… ' z›?Set™!if«V.elts¯ u³÷delimit("{", "}"Ø )   ¢òinterleave(lambda:óR, "), ´ Ü  } Ú  è 
‹ ñ# `{}` would be i ñpreted as a dictionary literal, and Ÿ   Ð# `set` mightF Ûshadowed. Thuý Ð ¸ }'{*()}'î?DicT w< �_key_valuï{ir(k, v=i &(k ³  J ?(":<: v   7 € Pitem( v  ‰ 0 =  	$Êif k is Noneƒ X X# forlñunpacking operator in! és {**{'y': 2}}d J ²see PEP 448V metails* +**™ K ! C@EXPRwZ @ N  „  ‹Õ$ ê7¹ Ê3¡ Dˆ  ¾a, zip(úCkeysPssL  ®_Tupleû (û)ûÄ ‘tems_viewN *� ÝÞ ð unop = {"InvertÔ~X !No 0not @UAdd + 0Sub "-"F C  N [  {"A (: SFNOT,  *~" gFACTOR! +! -! }bU‘O2= Ù [É@op._cåss__.__name__]Æ 9 
Š D  [+ = Ú	ˆÀs(operator_p÷recedence, node):
  ùself.write(operator)! ñ# factor prefixes (+, -, ~) shouldn't be se@ ,ed? Ðrom the value
 úy belong, (e.g: +1 instead of + 1‚ 4if › %_pÎ ¥ is not _P z.FACTORá  ì å :" "^  7set[ 
 =.‰ /ndC  �traverse(e( ‘binop = {  ’ ¶"Add": "+", 0Sub - @Mult * $at @ 0Div, / !Moi % QLShifW (<< R (>> PBitOrZ | !Xo ^ !Ant & TFloor¡ 	¢ 0Pow\ *ã !}
5‚
@9+":ûWARITHL-  *  GTERM? @ / % +<<  WSHIFT~ />>! |  7BOR? ^ X & 7AND> /Ý *;CPOWE 	»ðrassoc = frozenset(("æ)?ðdef visit_BinOp(Šg¤q  =   .[dñ.__class__.__name__]< c: 
CE  [, > Bwithr ïrequire_parensµ   ¶2 inK ½ _¦8lef†/ =÷b.next(A g  Origh>  7 Oelse† $	H  L  ½ 	? ’�. 
ú < 
z% ãDf" {ì}
Ø Š  ‹ & î jcmpopsÄ Eqø(=='2Not ! L®* 0LtE? <( G( Ð>",
        "ÓGtE": ">=",
  0"Is *is 2Not I not n n ANotI Tnot i !}
e ñdef visit_Compare(self, node):#  ‹ Pwith  �.require_, ýns(_Precedence.CMP9  = 8 Uset_p, 8 r.next()? €.left, *„ !.c— eators)� V ‘traverse(,  8 
% ò for o, e in zip' 3opsi ] í  ^   ¸ ²write(" " +úcmpops[o.__class__.__name__] + " "ƒ J ¬ "e)|ð boolops = {"Andº�and", "Or Aor"}ó ) ?3  , (: �pAND, "o=  -ORíoBoolOpì@operp" =ñ ~ !s[c/opø ¦  é < 
¬ IG  [- ] @  �õincreasing_level_9 ‚ • 1 ”nonlocal M a –  )    / =6 ‹	= Á ÂQ  V
ÿ; 
Â ï W] 
§ =Df" {0 >} "¹ òinterleave(lambda:ÙÛOs), sÒ s.values· ¤3�Attribut5û 6˜HATOMa 9: 	5ƒ " ñ%# Special case: 3.__abs__() is a syntax error, so ifÕI %#.  n $ñger literal then we need to either öxthesizeD ðt or add an extra space: fget 3 Ÿ .8 Ãif isinstancÂiA, Co ot) and% È  »t=Ü	� .¥  a].attrëOCall/? æFfuncÃ9 
å
!  delimit("(+)"ò Æcomma = Fals— ö  ýÚ :rgs@ $ 1if A    ¦ N,ÜOelse; V j = Tru– X Ðtraverse(e)
   ö	for e in node.keywords:
" 
 Žif comma    ýself.write(", ")? Oelse; V } = True7 X Átraverse(e)
" ðdef visit_Subscript(* ,Å )h  ) ÷is_simple_tuple(slice_value*  Å ñ# when unparsing a non-empty = ñ, the parantheses can be safely�  J   À# omitted if7 û re aren't any elements that explicitly requiresL t ð(such as starred? ©ressions).9 ‰return (  ž ™isinstanc0, T$¿Gand 9J.elt¢  T  % !noà (` belt, S« !) p ltrQ 
w ì Y  ÜÀ.set_precede¶ %_P R.ATOMü.Øï : @ã" Qwith '  delimit("[Ã+]"<if KP Æ , µ ¡items_view¡.‹ ® < M
ü .¦ B (} ms j   F «*ª eBEXPRM eˆ …®�Ellipsis™ C..."? Sº< !ifûf.lower ˆ
6& rú :U ?uppU & U = Ostep‘  o  ­  A ?arg	Ì !>arg” ¯annotationš ÆZ 
HH ¡ uá§ \firstõÂ# normal arg= @ ¢all_args =èqposonly +   0 pdefault0 ä[None] * (len(I @) -  %. 3)) M  Q  ·findex,»õin enumerate(zip] $, @ G), 1|Ë U, d =F b   1if 
—   z = Fals',e‘À           s÷elf.traverse(a)
  Yif d:   s3 šwrite("="2   S d! ÿif index == len(node.posonlyargs)p e, /")
“ P# var7 ô, or bare '*' if no Ð but keyword-g õ arguments presentP 9 2de.V  T    kw8  h 
ž Šif first   … = False_   Nelse0 T+, U * 
² Y 
Ë Ú J.arg˜ › 
L ¾.annotationW  / — :´  !   % 	ƒ _ 	ÑªC¤ “ò for a, d in zip`- !, ƒ ¯kw_defaultqqÕ 5 ! 9  =$ 4dw‡ :arg§�aD*" +b>argg¿ 
» )^J&×
V :£def visit_](< pœ «arg is Non© 6 .“ *‰Ô+ š p! 	E 
Ö ]valueË oLambdaÊ Qwith J ýrequire_parens(_Precedence.TESTzlf Ý[ 
¥  –
R% .Á Uset_p‘ � _.bodyZ  
 % î_alias"€ �  Fnamee 
s 
œ: U" as òa- ¨ ŒOitemˆ 
Ë Îcontext_expr“  op‘al_varsš > ×k Àse(node.optiôonal_vars)

def unparse(ast_obj):
    br = _U" 1r() ereturn" e.visit? 
V Smain(L ¡import argj 
F   _   .ArgumentP� òr(prog='python -m ast'� ; c.add_a4 õ('infile', type=U ñFileType(mode='rb'), nargs='?',‹  ð  ¯default='-%  help='the | A to › #; > s _stdinº 	€-m', '--¢ $',< o='exec} “choices=() a 'singP'evalU Pfunc_/')ë Æ òspecify what kind of code must beÜ dÊ 
@-no-o @-comËsÐ ÿ
True, action='store_falseä › ð"don't add informaC a aboutî n "  -að--include-attribute¤ 
– ?tru• 'H  H ÿ such as line numbers and 'gwÿ 'column offsetsb
iÆ Ddentî6int83ê in< E¢of nodes (°  õsspaces)‡  +" =ý!r.à v2s()È@withÛ"s.‚ 
 I â €source =Àƒile.readM0tre X (( ,O @.nam7@rgs.!à_ò éAs.noå  rint(dump(f #, ³_³?   ,  %    �))

if __’ �__ == '__è2__'ì   ñ()
# -*- Mode: PÀà; tab-width: 4  
#õ*   Id: asynchat.py,v 2.26 2000/09/07 22:29:26 rushing Exp? ÓAuthor: Sam R  <) ÿ@nightmare.com>

# = 2€
# Copyr_ ˆ 1996 by‚ %
#  æ  PAll R: ¡s Reserved0  Permission6ñuse, copy, modify,J3dis·à this software ¡
# its docGááfor any purpos(  ³ <ðfee is hereby
# granted, provided t àQabove� õ ðnotice appear in all
#! "ieô; BbothE  Ë 
; n_ Eis pø =
# X 0sup= ÷	Ù e     ” ¼USam
#	!no¹àused in advertðising or publicity pertain ð4to
# distribution of the software without specific, written prior
#O ñLmission.
#
# SAM RUSHING DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
# INCLUDING9 xIMPLIEDA ð!OF MERCHANTABILITY AND FITNESS, IN
# NO EVENT SH€ š ð
BE LIABLE FOR ANY SPECIAL; óDIRECT OR
# CONSEQUENTIAL DAMAGES 4  ðWHATSOEVER RESULTý ð	FROM LOSS
# OF USE, DATA= ðPROFITS, WHETHER IN AN ACTION. �CONTRACT,Ç �EGLIGENCE; O0 ƒTORTIOUS3 `, ARISv 0OUT@ OS ¿ "NEV t0THEŠ  I �PERFORMAX )F „_.
# = 2ð

r"""A class support|óchat-style (command/response) protocols.

This@ 5addE ` for 'G "' H 5 ó - where one side
sends a 'k a', andìdother ! ƒ ð (examples would be
 @ ¶on internet© ° - smtp, nn f aetc..)Ã ñe handle_read() method looks atŠ 0inpkQtreamÞ q ñurrent
'terminator' (usually '\r\n'-  ê„le-line Æ "s," .' 
2Rmulti& Ðoutput), call”¶self.found_n 0() ñ Áts
receipt.
I  ñ	:
Say you build an async� client u� % tÉB.  Aô cstart
w`connec‰,R ‘'ll have ˜ ’ r set toÛ °', in
order qprocessP u @greexð.  Just before issuú �a
'LIST' à 0you  j im Hr.  The ?3 ? 
> ðwill be accumulated´ j €your own‹òllect_incoming_data'
@) upÐ  ú ¶¤n control k Àreturned to
ŽE- byÙu FÞ q €.
"""
im Â±ore
from co© Sions ! ‚deque


×ñ_‹( ñ	ore.dispatcher):
    """Ê!is$rbstractÙ€.  You mšqderive z 2ú 1addL #woFs¢ 
K!()äò  é G #'0se êñoverridable defaults
& ô
ac_in_buffer_size = 65536 ?out   á# we don't wanK!enf  Å 0useAPencod$by} `, beca  Pthat 6P 1sig© j`pplica2Q bug + Àwe don't wanñt to pass silently

    use_encoding = 0  ’'latin-1'/ ñdef __init__(self, sock=None, map
 !):G  ` �# for str` õterminator matching)  M ó.ac_in_buffer = b'w J  we¯ ñ a list here rather than io.BytesIOt õa few reasons...j ô# del lst[:] is fastD ÷ bio.truncate(0)4 lst = [2 Ð Pincomú  : BË rtoss thÔ !of ÷"simple producer" and replace it with• ña pure deque, whichH ð
original fifo was a wrappŒ %ofB ¥ m _- =N (ü Ðasyncore.disp·?er. ÿ)å  '„collect_S_data4  % raise NotIþ ñmentedError("must be  × in subclass"q _r ù š �.append(– Á F_getµ ¯ d›Q.joinÑ .J 5 c	e 5[:]w†return dl ffound_ W s "3<setd  , u j a"""SetFPinput-rimiter.¯  Á0Can•ta fixedßð of any length, “°nteger, or #…5"""àif isinstance(� ,S )ýE¦\ Š  .  � ù; Delf.Ã’/elh 2inth I :< 0_ xRValue‘'²ðnumber of received b�  ®–positive' È  e i=yS / m  2E > à# grab some mo�ata fromÆ  1et,np# throwJ!to 4 ’Tethod( QcheckH ñ ™   1if ´`, tranî  onc . £next state3 à ´handle_readÝ “ Å*ryw Š1 = ï Arecv2 	V_size^ñexcept BlockingIO®
U vu 3 /OS+  y ² e‰k  ± K L 
Z ¾ Â . ÂBstr,÷ Á• "  + Q À     # Contiònue to search for self.terminator in ó ac_in_buffer,
  ò # while calling+ ócollect_incoming_data.  The/ GloopD ðis necessary because we might read several K +Ÿ E õcombos with a single recv(4096).
, ³ é Ö :!  Ý �lb = len(( )( Œ " =ÿ Fget_ (/ vif not   
v  z G# no! #, Py it all~  0 ¡ $ 
t¼ > i = b''f öelif isinstance(¾ o, int)Ä gumericÉ 	S  { ?n = 	žif lb < n_  > ÷ +B û  (   n ø ì M- lbã Oelse¿ /J[:n]G “   — Ã  M[n:]š > Ã ?= 0( _foundÙê ž# 3 casesÂ# 1) end of W‡ matches� exactly? %   Í, transitionÆ ?# 2m ¿some prefixf  .$th1 h  3h AdoesôÞ O anyn ` ­0_le@ ¢ %Tindex®)W.findÊ;  "f > ^!= -1 B#§ Š º  .  F� ?> 0P  & ð# don't bother report] b Ïempty stringd B p(source\¾subtle bugsä  .   4D![:’*B È Î¥q# This G R Th/ifwð# is changed here.
          ÷	self.found_terminator()
#  ]else:   ö# check for a prefix of the S ; Òindex = find_: �_at_end(˜ ×ac_in_buffer,M Ÿ  ‰ 1if Q § " o != lb(  , Q# we Ö ñ , collect up toâ ¶ Þ  F   Ë : î_incoming_dataæ 1[:-Ä ]ã  O   S = =  [K /:]ž _break ï  C# noêoit allN  4 Ÿ ý F ù Ab''
w ñdef handle_write_)ç=  initiate_sg): Oclos:  2 Apushd  , Îj ðif not isinstance(!  , (bytes,  ÷array, memoryview)A  2ðraise TypeError('D ñ argument must beL ±-ish (%r)',
 ?  2typ‹ )cGsabs?3outrU_sizeO aif lenÈ @) > 6 Z l   Öi in range(0,0 ,/ ß  4 ’ðproducer_fifo.app™ ì P[i:i+i ™D è  êþ Ìd_with_� Ú ¾ r - 7, v }readablp�"predicatƒ°r inclusion_ X8 u se”5()"u P# can�1use¦0old°S Ñ, it violates Sclaim´E 7set‚ method.2 ¾ # return (ê ›?) <– V–B 1V  Â »!8 i ¦ §rP or (- —connectedèùž_when_don­áautomatically . ó this channel oncˆöutgoing queue is emptyº„ 	Ÿ GNone” 
S 7 ¡RwhileL À_fifo and se÷ lf.connected:
  ùfirst = self.producer_fifo[0]* ù# handle empty string/buffer or None entry7 qif not h 
{  † ?del{  * "ifD 1 isk L  & Ç ¨ ‰_close()Ž  $   yreturn
 á „classic ™ behavior/ 4obs8rac_out_Y_size* >try® bdata =Ô Z[:obsnÿexcept TypeErrorA O.morë 0if h =  ,ä óP.appeä0ft(8 <OelseN ÊŠcontinue~Ñif isinstance~ ,dR) and#Îuse_encoding„  ° „ = bytes?  Ô2 )o ¡# send the"°unum_sen, ? h 
%¸/OS¶u¡eÙ¡ � G‚ ü  b < len™  – ¦ ‚)= 5[0]žû :£ 9 -Ò# we tried to“¾some actual›³def discard{ s(_ä õ# Emergencies only!ê + c.ac_in>  >%''  Ñ—incoming[ = 
<¡clear()


@„ simple_% :€ µ �__init__® ,å ', =G=512Å l ß  ¢  8  Á u�ƒ(  p  - U !if(  .U 2) >fP 
,Uresulÿ 4 ![:? 2 
!  ) (  [ 4 V Râ n Ã   h! Z -  1 f  p  Ö  
c ð$

# Given 'haystack', see if any prefix of 'needle'„ñ8at its end.  This
# assumes an exact match has already been checked.  Rˆ‡@numbJâf
# charactersC �ed.
# forX  W: ð_p_a_e("qwerty\r", "\r\n") => 1
# f_p_a_e(ó"qwertydkjf", "\r\n") => 0
# f_p_a_e(%  	% ðj<undefined>

# this could maybe be made faster with a computed regex?
# [answer: no; circa Python-2.0, Jan 2001]
# new py ö:   28961/s
# old  Q18307  re(   S12820 2gex ð$14035/s

def find_prefix_at_end(haystack, needle):
L ƒl = len( A - 1 ôwhile l and not ? P.ends 2 C[:l]K O #-=B òreturn l
# -*- Mode:   ñ,
#   Id: asyncore.py,v 2.51 2000/09/07 22:29:26 rushing Exp; ÓAuthor: Sam R <% á@nightmare.comÓ= 2€
# Copyr_ ˆ 1996 by‚ !
#œ  
 PAll R: ¡s Reserved0 ñPermission to use, copy, modify,„¢distributež€software ð
# its documentatK áfor any purpos( ¸ñ%out fee is hereby
# granted, provided that the above� õ ðnotice appear in alâ`copies� ; Bboth
  Ë 
; n_ Eis pø  
#d
X psupportó	Ù   pname of…%
#	 ² beLd¤ pdvertisM Àor publicityƒ @tain Uto
# f B!ofj ö >ð
specific, written prior
#O Ê.Úð<SAM RUSHING DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
# INCLUDC  9 xIMPLIEDA ð!OF MERCHANTABILITY AND FITNESS, IN
# NO EVENT SHG š ð
BE LIABLE FOR ANY SPECIAL; �DIRECT ORûóONSEQUENTIAL DAMAGES 4  ðWHATSOEVER RESULTº ð	FROM LOSS
# OF USE, DATA= ðPROFITS, WHETHER IN AN ACTION. €CONTRACT NEGLIGENCE; O0 ƒTORTIOUS3 `, ARISv 0OUT@ OS ¿ "NEV t0THEŠ  I �PERFORMAX F„O.
# =2ñ=

"""Basic infrastructure ­ ð hronous socket & bclient`  pers.

TÁ Ðonly two waysF`have aÐ gram on a ÿ le ñcessor do "more
than on[ðng at a time".  Multi-threa0proR m3"is!pimplestþÐ
most popularŽ  � ‘do it, buSr|ðanother very different technique,• ±t lets you Ñ `nearlysy Àadvantages oòf multi-threading, without
actually using( Bple + ¡s. it's re$ ú'only practical if your program
is largely I/O bound. I& r is CPU ô, then pre-emptive
scheduledƒ @ arec  bably whatv “ ðneed. Network servers3 @
rarŠ ACPU-Š Ä, however.

” `operatù ð system supports˜ £ select()  °call in itsá ð
library (and nearly # 3do)Ù õ	you can use it to jugglehð
communication channels at once; dož aother ã Pwhiler„  NÀtaking
placeŸ ±the "backgr‚P"  Alîñgh this strategy›  se÷  trange and’ Áplex, especiù�at first,Æ  isf ðmany ways easierÝ punderstJ ¢ntrol thanò ‚ edÑ 4Àming. The moöñ	 documented here solves
n !of—�difficultE �blems for1, m' Àtask of builôp
sophis»^ üigh-performance nDðnd clients a snap.
"""

im# Uocket $ys Dtime …warningsD ãos
from errno Y ñEALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET& €VAL, \
  @ENOT °, ESHUTDOWN$ S CBADF@ õABORTED, EPIPE, EAGAINI áerrorcode

_DI@ ùECTED = frozenset({Š {  y k ª  ®  E¢ �})

try:) s\ð_map
except NameEŸ ! ñ  = {}

def _strÃ R(err)) S  w ©return os.* s h R(Valuj ¡, Overflowy ,„ \  S  ifË z  =y     t  Q[err]r  €"UnknownL ñor %s" %err

class ExitNow(E3ion� òpass

_reraised_Ä ƒions = (6 ñ, KeyboardInterrupt, Sý " )< 'C(objZ 	7°obj.handle_' �_event()Å s  „ Ÿ /  [ "(� _write� ( ‘ Q\– Oexpt• Q Ž ” Ð, flags):
   s try:
  ö	if flags & select.POLLIN"  ) ÿobj.handle_read_event()F ?OUTG _writeH ?PRIH OexptG 	(Ö XHUP |ç :ERR _NVAL)l Scloseö öexcept OSError as e8 öif e.args[0] not in _DISCONNECTED+ ^eN c   7elsX   ‹�  ¢_reraised_¡ Fionsm  µ  V ƒ ó
def poll(timeout=0.0, map=None' if @ is  Q ñmap = socket_mapv - % “r = []; w e +  ë °for fd, objBólist(map.items()‚  *   0is_P  Ê  ¤4abl¬    0is_j  "  "  f G ¢  7   ¶r.append(fdö  @# ac
3ingî �s shouldù4be k ×  7 ii Bw an(  ” I  w H @r or¹ w: e:  if [] == r w f ód.sleepþ
÷ ureturn
Ô `r, w, Àp (  , Q Fout)3 Þ Ùr·  ï=VM.getq"ifq V  …continue›    O(obj 6 @ e€ {€ @… Û2ÞÜ’# Use theñ) support added to êp moduleÏ¡Python 2.0„õ"* 1  ;
W#I  ñ in millisecondsn  îB T= intâ R*1000Å Õ0ste.½ . v¯ ’§…L"= û  �   ´.†u_     9 (|=Ÿ*INž5PRIä  4 |À
           ñ if obj.writable() and not Ëaccepting:
  ùflags |= select.POLLOUT( 1if ' > Ðpollster.regi	 B(fd,- %)
D Er = *  	 •(timeout)# Efor ; Z in rm öobj = map.get(fd:  Ð þ Š is None:    …continueo   @read0Ve(objµ    3± 2(  €# Alias º ôbackward compatibility

def loopð °=30.0, use_g p=False,× =¹ q, count )Æ  if Ú òmap = socket_mapm%if\  ‚hasattr(Ü0, 'v '[  Ø   D_funð !7elsD# i « ™ Pwhile´ À  e   F 
õ #
p A Â f ?> 0O  j  : =Sò - 1

class dispatcher:Í �debug = Ž™connected F	 , +inC <los 0add ëg óignore_log_types = frozenset({'warning'}( N€__init__Ó!f,/P
 Þ= #Pself.:
G    
”  1 q �fileno =‚X  !if¤ 
¾ð# Set to nonblock)1jus ‘make sureZÚcases where wÀq# get a`  et:Em a P qsource.i Š    0D.set% (ó
Lè @set_- 0et( ^'  ü(+Tr`ó# The constructor no longer requires that theÆ 	® ¡# passed bG ’
Ñ :try[æ  Ûl ¾  3špeername(Æ  exë OSError as erz R  if €.args[0]Ÿ÷(ENOTCONN, EINVALw 2  ±# To handleç  ÐÏ¥ got an unI	E  Ç *etü  ±A 	œ#   Ò    ©c  Ñ`brokenæ ÿsome unknown way, alert¥  ÇAuser¹ƒremove i™   ´¯(to prevenF  * 3of ‰ š +s)ÿ À       self.ÿdel_channel(map)
   Uraise Uelse:  / ñself.socket = None
  Ðdef __repr__(% )8  status = [ ý.__class__.__module__+"."+ ±qualname__]e  � 1if ( Óaccepting and 6ddrv  - z ö.append('listening'ý $elR ŸconnectedD 
& D B ±addr is not
I :try ¢  †%s:%d' %Ñ ª  /  exö › TypeErroï  " 
ó  ‘�.œ )M ðreturn '<%s at %#x>w ¢(' '.join(H Q), idA &))é5addJ �`, map=ö# à.log_info('add®‚0 %sp  $ •  ifI  B L 
-Rmap =E_map3mapWsfileno]& ® ø p ® #fd8 "._H a • !€if fd inÏ 
Ç Iclos"d:A(fd,ï µ à0delV 6[fd Ö ¸ –rcreate_´Ë’, family= ä.AF_INET, type ·SOCK_STREAMÕj > P_and_2 # =P A 9 ^  U-4(< * ù + ÷.setblocking(False  v%etÆ 7ock�s Pelf, P çÀ   ¿ 	 ¯  d ý· .(‰ ÿID   ‰ `reuse_om=ö# try to re-use a server port if possibl€3À  0 Á Aopt(�     pet.SOL_É Ý ¾_REUSEADDR,8  * 0get
  `   
O : z  : v ]) | 1@ dä/OSâ BpassÚ?# = u ð# predicates fore3ectåP# theœòre used as filter- @the GAs ofg3etsW 0to Ÿ  á1selS . ª =å  TŒreadableNÂ7TruƒHwrit- À        retuÿrn True

    # = 9 ósocket object methods. U =� ñdef listen(self, num):U  ¯   Â.accepting =Ê     ðif os.name == 'nt' andC F > 5F  , unum = 5Z qreturn a Ú .ˆ  ‚ � Cbind› Maddrœ `ddr =  [ 	F  % )Z wconnect] <ess` % ¥ed = Falsef º    er˜ % ß , @_ex(Š  m M 0if 1 õin (EINPROGRESS, EALREADY, EWOULDBLOCK) \9 !or9 ‘== EINVAL�•
‰“  � 75essN  ©™ š §0, EISCONN& 3 S   uhandle_event()h Jelse© ðraise OSError(err,ë ·orcode[err]Ì£Ëœ ¢# XXX can Õ ¡ either an1ö ess pair or NonÛ:try‹  µ ,4 ) =³x Ç x,Q Type¸ 
H ‡ 	m e2 è k as wh  if ‘.args[0] &0, E”pABORTED4<GAI£ §~   {  Ÿ	ÁZ%se´Gdata’ZkresultV@ : € ’ r 3  @ -?
¢h 0c   .el†"_D^ECTEDH 	÷Gloseï S   ”l +  eArecvñß, buffer_sizel	 RjE ? 	ô pif not 8 Þ P# a cÖ  d ùection is indicated by signalingY  Ï  @ 1rea>  di= ,½0havOš )¹0è 8  ^9b'' ñ_ î . ]P# winãð	 sometimes raises ENOTCOGNN
  ùif why.args[0] in _DISCONNECTED:-  8 ýself.handle_close()$ ©return b'' NelseQ araise
) Bdef T  f ),   ñ.connected = False4 ” Ÿaccepting >   ·del_channelÒ 1if | ûsocket is not NonÉ 6try®  “   : .× 
+ ex² ° OSError as‹G £ � €in (ENOT¨w, EBADF. |  ^�# log and ñ&_info may be overridden to provide more sophisticatedqG gH K @warn ðmethods. In general,h  3�for 'hit'  : H  @ A'logŒ '*  ™ prmationD a  - e(0logE .4@log(m—, messageðsys.stderr.write(r ä: %s\n' % str(5 )R – 
W €, type='£ 'd !if "in2pignore_ß  5 sØ�print('%sŠ  ˆ (% À ‹ l¡read_event” 
~  ý .
k %#   ÇÃs are never ñed, they "spawn" new¦H#< AthatA ; 	) ‹ ´ y OAelif&& A 
± t :ing   “ @ f ( 
c(  B	Œ Ž-  Û  —l  1 ‰Rerr =þi@.get
 @opt( ãet.SOL_SOCKET,R–.SO_ERRORº 0if L J!= 0û Î1¡(err, _str  )D  œ ¨:ý  9Q;TruP  ÝpQx R ÅÄ5# A¯ñs shouldn't get a ^  ó.z  ù  ñ# We will pretend it di; jhappen0 �Ý @ „X †Ð (ÚOexptE## w# )(pcalled x here mightÊ an:Por onÐ7À  # socket, ó
or if there is OOB data
  °# check for& õ error condition first. ðerr = self.socket.get
 @opt( õ et.SOL_SOCKET,  u_ERROR)I  ifj e != 0:  “ Ñ# we can get ¶ @whens ðect.select() says thatµ Û +anI PexcepÅ 'alÑ  on3 š 2 Psince R  ¥ ñor, we'll go ahead and clos, K @likeË òwould in a subclassed handle_read()È »received no– 	° $€C ‡ (YJelseR. qexpt()
a 4defˆ õ() )< ônil, t, v, tbinfo = compact_tracebackM  — ñ# sometimes a user repr method will crash.€  3 6tryq    „ _6 == • 0 Ó3 1'<_> "__9 q failedÞòobject at %0x>' % id&  P.log_ð (w   ò'uncaptured python Ž Aion,ð
ing channel %s (%s:%s %s)l 
M  Q ë ,h   t v –= )* 'Ý'' / … .K+  5 )   )2'unD  ê0com
þpriority event', 'warning'€ S b  - U Rwriteá1 e ¸ . W @conn„ J ¯ 0 [  ac±³ 5paiu" À1if   ¯is not Nonþ> @ed(*4 ‡   Ü ½h, addrè Lock.u 0 VR þ U  K o  k‘h. W  @   I © O
# - 7 
#às simple buffeðoutput capability,1ful€. Àclients.
# [uð	more sophisticated usage; ¡ asynchat.	 _ ]Ì À------------- ö

class dispatcher_with_send( ñ):

    def __init__(self, sock=None, map
 !):- 1 X .8  3 )-  Q ö.out_buffer = b''y  w Biate�  - i 0num Ut = 0Q  Ì .Ü  ?  ,  r �[:65536]“ 	3 d &:]ª Áhandle_write'© @ 
Ë ):  3 =abl6 ²return (notµ ñconnected) or lenh Ì U ñ Gdata� "ifN Vdebug¶ º¨  log_info('D ñ ing %s' % repr(L +0 + 3 žb 
/# ³ Á
# used for ä oging.
d ;
ócompact_traceback(gòt, v, tb = sys.excR9 tb_Q = []0if ãõtb: # Must have a X '  ¡õraise AssertionError("( Q doesM bexist"p †while tbì‚ @.appó(_  c ÿtb.tb_frame.f_code.co_filename,, ( Bstr(X blineno˜  n   ) 3* Bnext$0# j¡to be safe„ bdel tb"  ž `, func , f 2 = ç 3[-1hñnfo = ' '.join(['[%s| ]áx3Cx in: ˆf 2), í Ó
”lose_all(q, ignor c=False( if@@ is M 0map;‘ocket_mapñ  Ð� @list\ “.values()N  L6tryG   0x.c� (d‘except OS>Z as x3 úif x.args[0] == EBADF#  Z Apass™     #elÊî 6 Â7 Œ 1_re "d_ Jions;  7 
" | ðmap.clear()

# Asynchronous F.`I/O:
# ðfter a little research (readðman pages on variD ðunixen, and
# dig„À through the£ñux kernel), I've determined thaõñect()
# isn't meant¦ do| a¸ Àus file i/o.ò.
# Heartening, though - reading linux/mm/filemap.c shows that ñ	
# supports asynchronousD ð-ahead.  So _MOST_ of the timeq ðe data
# will be sitt{ ðin memory for us al– ñ y when we go tof   it.
#
# W– ôother OS's (besides NT)¦ ¥  Ñ Ñ i/o?  [VMS?]A  Regardlessœ Áis is useful† ñ-pipes, and stdin/stdout...

if os.name == 'posix':
    classr ‚_wrapper    � reÐ ñoverride just en‹‘to make a? N 6 qlook li asocket¢  [€purposesk’Gore.; ÐThe passed fdâ ÐautomaticallyÆ …dup()'d
5 ödef __init__(self, fd)Æ  ”   T.fd =B <fd)B 3delA = 4if @ J>= 0Z  ^ 0war¤ s.	 q("uncloÂ ‘ile %r" %A ², ResourceW1 ,Ä  F  - =} )+   .e (Ç Crecv[*argsË `return °) R.fd, , 
Asend"  
ù K Qwrite* L 0get	1opt( À, level, opt–Û, buflen=None³ Aif (.  » E Ðet.SOL_SOCKETð	 FV 	1 o_ERROR/ 3not€ {  L ç 0e òraise NotImplementedError("OnlyÇù	ore specific behaviour "J  c  &"i\ '."ç º0 = êK ƒ0 = ´
Æ& 1Ý Ö<Õù b  ¥ A K 9.fd  Y = -1 #os§p ä!no™ y 2 h P ¦¶dispatcher( *):ö _, map_D .5  Œ7 |ponnecteRATrue¥  #  :try+  <3fd.ø 
T ñexcept AttributeLD  	j x@set_V (d k  €# set it‹�non-block¿:mod² 0os.F ! (WFalsew g % k  y g¤! =U�  B .¸ !no¹ðlf.socket.fileno(7)
  ð(self.add_channel()
#! /usr/bin/env python3

"""Base16,  "32 Ò64 (RFC 3548) ðD85 and Ascii85 data encodings"""

# Modified 04-Oct-1995 by Jack Jansen to use binaK x module= °30-Dec-2003= ÀBarry Warsaw> ”add full ¡ ˆ supportD `22-MayD 7D ðGuido van RossumH † ðytes everywhere

imK 4 re
 dstruct · á


__all__ = [ð# Legacy interface exM Âs traditiona¶ A2045p&64DE 'S¡e', 'decod
  b¬   6 ×# Generalized€ œfor otherf 2b64U  P 6b64l 7b32 $32 h G'b16 )16 #Ó (/  #A !85 Ø 4b85A 8 'a a 8 ¡# Standardd 7 #'s _Ù  i 0 Ô# Some commonR ðalternatives.  As referencedDoó 458, see threadN Âstarting at:  ð2 http://zgp.org/pipermail/p2p-hackers/2001-September/000316.html
ÖŠ'urlsafeÜ  	Û A]


¡_types = (  ,  ±array)  # T àacceptable as Ý!ryÛp

def _4 rs_from_f _ø2(s)ç pif isinh“ce(s, str  º 2try(     ’return s.0('a'¿ ex� @ UniüE_keErrorH ’aise Valu Q('str€órgument should contain only ASCII charactersx Å õ ?Í ¼ Ú	Ú  ñmemoryview(s).toG (Ü Ø  uÏ rË  ;("aÃ Abe a¼ós-like object orÐ "‘  ^ "ð, not %r" % s.__class__.__name__) à` None
Å a/ù ]2use$ µ!o ý0alt] s=K :2"""ÆO theÇ  @s us\ u  bOõ ð !.
ç #OpFl é& ƒ Q ðof length 2 which specžAs anM ñ  alphabet 3 « 1'+'ð7'/'3Ö.  This allowI `pplica›  Yae.g. g‘`te url­°filesystem Íu£!s.‘  F Å1d =’ n°.b2a_base64jðnewline=False)
 ó   if altchars is not None:
  ´assert len() Æ) == 2, repr 2 ñreturn encoded.translate(bytes.make u(b'+/',€ !))C 
? À


def b64deP &(s1 =ª ò, validate=False)» A"""D1 ´ the Base64“  ‰ ñ-like object or ASCII string s.
� …Optional¥ ¯ must be aF  of8Qgth 2N ñ which specifies› ñalternative alphabet used instead of) ±'+' and '/'M  ´Tacter¬  The resultÊr†Ted as¬ í ñ.  A binascii.Error1 !aiv f^ ð incorrectly padÎ%Ifv ; y  (j¦default),   ð that are neither inÓ i ænormal base-640nor$  y  L ñ discarded priorM !to4  ¬  Æ‹check.  ¯ PTrue,) use non-w³ N ¦ e inputZnN	=.- 1""" Qs = _ab_from_·r_data(sât’K Œu  ¬© « s d !, ª iü � 3óre.fullmatch(b'[A-Za-z0-9+/]*={0,2}', sœ ® rn†`('Non-
ò 64 digit found'7Ò4 Ba2b_-  Y(Âstandard_b64�(v A"""E“¹ @s us1 ÂC 5f™¼ – ± +± ÃO¾@with¾ ª ‘Argument Ì°2to „ 6.  è É 2is Ä R!® GL Z b  CharÒ2#ot.ï ’M   . �ñ B’_urlsafe_;_§ la" =7¿ub'-_')
< Q < 4-_'X
| º¬AURL-°filesystem-Á ¼ðArgument s is a ð0bytes-like object to encode.  The result is returned as a
    b> 9 / øalphabet uses '-' instead of '+' and '_ K A'/'.	 1""" n B b64� ò(s).translate(_urlsafe_ _ ¤ion)

def ! Pb64deÐ A(s):Z A"""D À áusing the URL-¡ °filesystem-f „ Base64 Ý !.
I  Argument saO 	MÁor ASCII stre "o � .]M aN ]ðA binascii.Errors ‘raised if¾ TinputL ñ incorrectly padded.  Characters that are not inA  ÿ ï qbase-64L ô ,2 aa plusÑÑor slash '/',S ð discarded priorS1theN  ‹  	ScheckG ff 7 p 
3Qs = _Òb_from_k�_data(s)€  # sH, 	H ã‡"  I A


#"32,Aing/  Û Àmust be doneZµPython
_b32æ ñ= b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'3 ±tab2 = None 4rev ç2b32ßEÁÔ	”"s ñ Ô!32Öå Ât1�pglobal Æ  “  q# Delayh àinitializationí QPtable  fÃwaste memory@ ºAfunc7 ñ is never called& %ifv  ô 
È Ÿ¡b32tab = [é €((i,)) f | ¯ u]N  5    Å  7 Qa + b1 a1 P  A b ;   ‘R "ifDsérance(s,½T_typev y  ~ AviewÒo¸ žPleftoÿ Á= len(s) % 5e Q# Padiðlast quantum with zero bits	snecessab4if T 4 † s÷ µ'\0' * (5 -' ‘)  # Don'ÂQ += !� e1d =Û barray(µ kÆ v = int. : 3 Åx  cicƒrange(0,ó 3, 5¨ 2Fc = P ò(s[i: i + 5], 'big'„  + ¢ C+= (t °[c >> 30] +"  #-a1 - 10Œ   ? (@ °20) & 0x3ffI ?  @ 2@ 1@ 2@ 3@ cx œ  € 3@ 4@ P# AdjŒ j5anyãÀ partial quañ
nta
    if leftover == 1:   ñencoded[-6:] = b'= '! +el9 29  49 7 37  37 6 46  16 4 Óreturn bytes(Ë À)

def b32deÜ ò(s, casefold=False, map01=None)e A"""D. Ã the Base32 Q _ ñ-like object or ASCII string s.
1…Optionalq ð is a flag specify/ ð whether a lowerž Á alphabet isK ñacceptable as input.  For security purposes,µ `defaul@  æ “ ôRFC 3548 allows for o§ @mapp‘ "ofC ðigit 0 (zero) to Ž ÿletter O (oh), andI 01 (b1 toD !eiõ  aO pI (eye)O ÆL (el).  The§ �argumentG ¼  when not Å,]£ies which O  l dÕ ´1 should beF 0pedã (K V 'isT = 0ÇPlways;9 G  $ l O·   F Ÿ³  ^aÔ 0RQ1 are� ¬Qed in< þc 3resê ed$a©¤ð.  A binascii.ErrorÆ @raisY f¿ ]   ðincorrectly padded™i#reœ $n-©A ûcharacters present´  d1"""- áglobal _b32rev s# Delayæ €itializaE ”!toÃwaste memory@   Q func7  Ãeèacalled& $ifu  è  ö � Ž � = {v: k×@k, vÈ  enumerate(& ù !)}U Qs = _zb_from_n�_data(s)# >†n(s) % 8s „œ4('I}Bing'E €# Handleøâ @2.4 ¡41one“3ing6mÏ‚will be z“ #,Û ½Á 1mapŠ3¿[.  ItA#V  ³ P Ï.i  if˜  01r¨  A    ¥²assert len( Æc, repr u  ,  ˜€s.transl»£Q.make â(b'01', b'O' +¤ )j %if¸ª O bupper(' °# Strip off« C s 	B@righ°RWe nehQcount "pa—#; Ñbecause this ¹ðtell us how many nuÏ ì ­aremoves ü #\ àend of the decñoded string.
    l = len(s) ps = s.r" bp(b'=' ppadchar 8l -1 ñ# Now decode the full quantaR  âd = bytearray(U ¢b32rev = _
 / ófor i in range(0,m Q, 8):"  ¶ `  ¬ ¥[i: i + 8] uacc = 0 6try:  >  d cd G 
  ! B ( ‚<< 5) + £ &[cg ú except KeyErrorF ñ raise binascii." õ('Non-base32 digit found') from Noneµ 7 += acc.to_?“s(5, 'big˜‘# Process{Élast, partia„Åif l % 8 or Ë0notö {0, 1, 3, 4, 6}Ç Ã �IncorrectI 4dinŠ  if %3anddO MU= 5 ** î  º  ê 
 —ùleftover = (43 -L À) // 8  # 1:Ë !3:Ô •: 2, 6: 1l ZP[-5:]ýTast[:[ ßareturn±#s(0 ñ6)


# RFC 3548, Base 16 Alphabet specifies uppercase, but hexlify() rX rs
# low# a.  TheX ðalso recommends against Ðepting input Z ð
# insensitively.
def b16enŠ#(s-A"""E !C�-like objÅ@s usZ  Î 016 ºý aÿ ) -1"""G# ßâ 1s).ü (-‘ ?1(s,¸ ¦fold=False¡ D=‡ Å d‚ 	° ƒor ASCIIÄA s.
’ …Optionale £ is a flag™yç –whether a�$ aÁ!isK  acØrable assñ
.  For security purposes,Vpdefaultr Ú “  ×3res 3 edT [;  A* K Ad if• s i| lyC Ë .f† µre are non-Ñ  Žáacters presentL  in1 Ú  Ø àh_’_¼T_data!%ifcÜ 8 sû «ôif re.search(b'[^0-9A-F]', › ' å ý ('*16'¬ I4 &un~p

#
# As185 FAing/Ç °ing
#

_a85 ³ q 22 =ƒ�_A85START´P"<~"
 1END A~>"
m1_85b Qe(b, S  2„æ , òBnulsö Sspace Ð# Helper funcÌ ¦ad šb 	1if Ãs%1ancˆ âV_typegÀ  b = memoryñview(b).tobytes()

    padding = (-len(b)) % 4 $if :  0 ô b = b + b'\0' *!   ñwords = struct.S ²('!%dI' % (` ó // 4)).unpack(b‰ Pchunk> ð[b'z' if foldnuls and not ` Q elsen  Ž  5b'y1 Rspace3 / r== 0x20 = �(chars2[. Ë// 614125] +e  ( 85 % 72+ R k% 85])L 2forÍ !in "s]�qô 6pad}2if '€[-1] == +    ³ u[0] * 5ƒ "  v O 3[:-� òreturn b''.join(8 ñ)

def a85encode(b, *,¬{ð=False, wrapcol=0,$ Radobe )¹ A"""EJ  ˜ð-like object b us�qAscii85— a/ * .@ 2†   iñ( optional flag that uses the special short sequence 'y'+ðinstead of 4 consecutiv8 ba(ASCII]ñ) as supported by 'btoa'. ThisN pfeature—  Ê	-  � À"standard" A# ^3ingÚ N ‰ Ñtrols whetherÊ `outputÉ ñ
uld have newline (b'\\n')Racter� òadded to it. If this� Ón-zero, each Z K ñ will be at most3 Ü Gmany` 5 lo· ?pad³  in²  isŠ ¢a multipletRbeforëR NoteÈ 6 f° implementaìa alwayX s<aQ>con:Y ³&teñis framed with <~y1~>,ï Pwhich,!us: ƒµ
‹ ./ 1""" ±global _a85J, 2! q# DelayO ’initializÔ pof tabl¹o
³aste memory= iÅae funcñ is never called& 'ifu  Ã BNone‡ <œ A = [Žp((i,)) °ñi in range(33, 118)]U 	: 2;  (a!7 a7 Y  J b nˆsult = _Z9 .Qh, TrueyH1if ñ× $re[ ²A85START +  Á $if­4 pp= max(2�V B% 1ßÚ ÿ [ t[i: i +[ , 0  W00, "? )c ; Ü  I !if8 �  Ëð) + 2 > wrapcol:
      ôchunks.append(b'')
 òresult = b'\n'.join(/ $ œif adobe:2 ±+= _A85END
 rreturn P ò

def a85decode(b, *, foldspaces=False,[  ò
ignorechars=b' \t\n\r\v')| A"""DN ð  the Ascii85 ena òd bytes-like object or ASCII string b.© † ñ is a flag that specifies whetherj ð'y' short sequence auld beú °accepted as ò
rthand for 4 consecutive û " (– ñ0x20). This feature isQ  not supporV !by‡ À"standard" A‘ú 3ing× a zcontrolÂ Ginpu¾ Sis inE GÁformat (i.e.„  – àramed with <~ Õ 3~>)o ­ õ ! aˆr � 0ain} Ö¢acters to = P fromÜ q  ¥ 0shoQ @onlyB¡tain whiteC M ,– ¡by defaultJ w _s all7   Í 3The¹ rÊÐÑ sT1"""h Qb = _x_Ê _ì_data(b>0if ß`b.ends[(Fæ˜ñaise ValueError(s    "¼¤²s must end ®  3  "y r {!r}".ú† g É  : ¦if b.start¹ [START»  ñb[2:-2]  # Strip off < /“ bmarkerî [ 7elsb  E  D ’ # € We haveEÀgo through tE`stepwiV so‹h6s+ ›l·#ð alÀÞ– q ppackI =Ñðuct.Struct('!I'). – øhd = [] _p3 = " �$ Fcurr2   /   , P_clea2   H  gxÐÂb + b'u' * 41 G ´°'!'[0] <= x  % 6[0]$  (  V � &(xó  pif len(" j) == 5:  # qacc = 0‘    �  = 7  ' ; P85 *  š+ (x - 33„  * ?tryC ^¿  ˜nI(acc)D  ex«ÏeYT r'n¢overflow')À2NonP ¤   ð ²(… `elif xC0b'z“
{ 0if 7 
  Q Œ vz insidð5-tuple')
         ò   decoded_append(b'\0 C')
  õelif foldspaces and x == b'y'[0]:*  1 zif curr   ÷raise ValueError('y inside Ascii85 5-tuple|  9 ¤ Gx20\ 0 ¬ úx in ignorecharsŒ Á# Skip whiteÒ 	¿ …continue JelseA É DNon-Ä ñdigit found: %c' % x)
O presult 9s'.join(Û lðpadding = 4 - len(I 3if  Œ ô# Throw away the extra( r  ?v 	 3[:-J ]# rreturn   

U eî0low�  ð` is originally taken (with permission) from Mercurial

_b85alphabet = (b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
µ  ñ&b"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~")~ þv = None 2 4dec  
def b85enõ 0(b,Kr=False)vA"""E ð bytes-like object buÑbase85 format)_a2 - .IÕ ^Qtrue,ÄPinput  ¥1ed fÐb'\\0' so its0gth$ Ña multiple ofÎ4h qbefore Ë Aing. """]pglobal  ", 2) S# DelUóinitialization of tables to not waste memory= !ifË Afunc4 ñ is never called& 'ifu  Ì  ¤f üœ A = [m`((i,))[  ik " ^Ê	8  år[(a + b5 a5 ó H ³ H  E °_# )$)
5Ê&(b*D[
-Ž"ed£	=Àor ASCII strvb!3The™ "rªled as P ü ß 1decnÑW P!isr
Î  0= [çq] * 256š  ¹ €for i, c¢ enumerate(váV -     ¢dec[c] = i,Qb = _*_‰_‘r_data(bE S ^@= (-_qb)) % 5ˆ  ? b.P'~' *ú Œ  ou´[ ppackI =©ðuct.Struct('!I'). 2 Ñ  Î €range(0,´g(b), 5Ê Pchunk‚[i:i + 5b  á  ac–0M   6tryN   b 0E 
    A   a* 85 +mðdec[c]
        e÷xcept TypeError:
  úfor j, c in enumerate(chunk)*  5 þif _b85dec[c] is None'  + ¢raise Valuw ù('bad base85 character at position %d'œ  G  ñ % (i + j)) from… 	9 |  :try£ õout.append(packI(acc))0 e1Žstruct.e4_ Û × €overflowM B� startingç Obyteã 8% iÖ • òresult = b''.join(out° ¦if paddingã / 	 3[:-# ]N Rturn  ð�

# Legacy interface.  This code could be cleaned up since I don't believe
# binascii has any line length limitations.  It just doesn't seem worth it
# though.Š ¤e files sh‹ 0opeŠ 0in r ðry mode.

MAXLINESIZE = 76 # Exclu� the CRLF& 3BIN% (4 à//4)*3

def enþ ã(input, outputA"""E ! aš !; & C and) D are› ¼ A."""|—while Tru52s =B P.read‘ Ÿ â †if not sä  QbreakW   [ Ãlen(s) < MAXG 
5 no -< v  V z n{   
   us += ns“ lÿ=
 P.b2a_F64(sg ]p.write(3 ")
„/de„	D „4 w 	‡  (¤   
O
 \ “î 4a2bî  8 M 	ñ "s)í _EÓ_type_check(sp	¿äm = memoryviewG²ãg as erêðmsg = "expected Œás-like object,aõ%s" % s.__class__.__name__Ôüj C(msg°1err& ±if m.formatU °in ('c', 'b #B'Ø  2˜ (™ asingle  “ elementsœ rí¤ i  A  (� ,Ù øÛ i Ò –ndim != 1¾ ƒ1-D data² d ¹ & t · #À

def encodeñbytes(s):
    """Encode a  ¤tring into ð  object contain ámultiple linesI ñof base-64 data.""" ñ_input_type_check(s) ±pieces = [] ófor i in range(0, len(s), MAXBINSIZEµ  ¹ ÷chunk = s[i : i +' Q  & e ð.append(binascii.b2a_® 164(H )“ òreturn b"".join(>  )


def de(%?D -?O!Ž µ 4a2bµ s” ñ# Usable as a script...¬ Smain(.�"""Small  „ programŸñimport sys, getopt�2try  E�opts, arg®% . ò(sys.argv[1:], 'deut'LcexceptT `.error© 6msgY  > `stdoutÉ‘ys.stderr‚  y ’print(msgS  ö"""usage: %s [-d|-e|-u|-t] [file|-s-d, -u:¿\ R-e: eú†(defaultf %-t 3and; " sÝð
'Aladdin:open sesame'"""%Ï &0]K   bexit(2 cfunc ={ Ž  ù@o, aü k îif o == '-e': :  $ d$ «^ 
$ u$ Ât': test(); „I "if  P[0] !œ '± Pwith (" p, 'rb')úf'  ”  Î 0(f,z ÷¢out.buffer'Felse1 -  JSstdin) < «¿ @ s0 = b"µ ¡esrepr(s0	%s1£ð0— - 1- 32 =#- 1- 2- @assep0Øðs2


if __name__ 0'__¨#__W  à()
"""Debuggerh0icsÂ
¿tfnmatch 4sys Àos
from inspÅ1 ñCO_GENERATOR, CO_COROUTINE VASYNC" p

__all¡ Ð ["BdbQuit",   Õreakpoint"]

Y F_ANDY €_FLAGS =n #   | }  ~ s
class y !(E[6ioná ñ to give up completelym
G ÷"""Generic Python dc!e v !.
þBThis Ð takes care oPtails ñthe trace facility;< “a derivedA €should iž �ment user$‘eraction.7 °The standarƒý• ð (pdb.Pdb) is an exaN ­ @e opJ ðal skip argument muñRst be an iterable of glob-style
    module name patterns.  The debugger will not step into framesB ôthat originate in aV  ¡matches on€ Gthesk C ¡Whether a X ü is considered to_ scertaing C ðis determined by the __Ø  __•   ^  Aals.8 A"""
	 ñdef __init__(self, skip=None):#  0  . p = set( A) if- ` else 2 
0 ºbreaks = {} fncache òrame_returning =W ?  « scanonicª @fileë © A"""R>  + pal form/ .û  Ø `For re$ K !s,C= ñ	is a case-normalized (on˜  H   Ð insensitive l ñsystems) absolut dh.  'Fn e' withG ðangle brackets, such as "<stdin>", generatedÞ inãcr D ±mode, are r	Âed unchangedý ±      !if¯  J• == "<" + Æ[1:-1] + ">" 7 _ ) � <*3lf.íP.get( g )- 0if c4 
a  à = os.path.abs H   ‘ 0  ® ›( x  0 ÕŸ [› 4] =;¥ ê E > Ž!re:elf‚€Set valuÿÀf attributesËPreadyÝbstart nIing.’¡mport line*Š  a.check (Ö Ò 2botò= ë    à_set_stopinfo(´,c)Ö €trace_dik$chk ™p, event^gò D. 1 a ? � function}å "edè¡s based onkS “FThis?  isW`talled? Ðb )cs. Its’ e D ;newª ¥, which isE ¡usually it<ñfault implementaç ådecides how toB Fä€, dependÜ 1typ"P (pas P5s aI �string) \ �@boutG�be executÞ/  ÉQ 0can‡ª followingn [@: A    2@code2 go±  toJ n  U @call> ø¤     ôQr anoö\ Ublock¶ M  t eÜ Õ   Ë	i ðor other code blo÷	ck is about to return.
  åexception: An  Ú has occurred2 ðc_call: A C func= 	g 0be " 8 € :  i  1 � 4 waised aµ %.
Û õFor the Python events, specialized¼ as (see. Ådispatch_*()K µmethods) arÙ $  a C\ Eno aWtaken� ñThe arg parameter depends on{ ‚previousO r5"""Š õif self.quitting:  ÑEu # None "ifR ¯ == 'line'6 X ÿ  (  (fª 	I  àI  ( I ,ÿ N º P * R 9U - X üU dtrace_I†%c_r J .G ô print('bdb.Bdb.± ò: unknown debugging?‘:', repr(J)É� ˜ý þ Ddef ^ _X k", ^Œå"""Invoke user�C and¸ _  @for Q ¡ l!IfRÂ uer stophÒ!nt: 1, is ©  C › .€ ª @). Rfœ BdbQuit � ÷6set®Rb €�continueÊ  [iü†is scopeF ô Å R_here¥B) org Xbreak TÓ  wñ  " Õ 8: rõ , êù Oêÿ› ï# V ï&is/ < ñ  (ñ/bdñe°# XXX 'arg'_�no longerd�µ1botÓ +  øà:
            ÷# First call of dispatch since reset()
  ñself.botframe =  ù .f_back # (CT) Note that this may also be None!Q qreturn X dtrace_† ' �if not ($ ¡stop_here({ B) or= §break_anyw %):F  Å Ñ# No need to n £ ‰function- š  4 %ne ‚# Ignore5õevents in generator except when stepping.@ "if¯  È Â E andGúcode.co_flags & GENERATOR_AND_COROUTINE_FLAGSÜ ¯ %Û I Puser_òAV, argäŸ õquitting: raise BdbQuitÇ n $ &deO_- À,ë v Á  """Invoke Ÿ  �> ¯ Cfor  …!.
x  æðIf the debugger kJs onì> 1, iy > %_ X(). R $v is setäRÔ x�continueÒ 0ing>)VscopeF 5"""• s  Ë þF"==Xµ  _ ¹"  6» F ‰ e £
 ?.f_¿( ] š ‚Ã ' :tryÛ   5 ˆ o Z G )   -  j,  ) ofinallo  à	n 0P m C# Thð issued a 'next'åö 'until' command( ; g    ”	  _ð   Ïlineno != -1DP_set_, Pinfo(Ñ ,·$§ü 	ü?ionÿ?[ Ì8 ü$ ÿŠ
Ã8# Wt` with @/;/¸Àn in a gener÷ator frame, skip
  ñ# the internal StopIteration excep
 ü(with no traceback)G ñriggered by a subiH qor run @  k ù'yield from' statement.N �if not (µ ù!.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGSJ ê Ûand arg[0] isæ  2 mNone):E ¥self.user_Ÿ ,X 
 u 1if 3 õquitting: raise BdbQuit` #� 1 atˆ
`or Gen�gorExit�Awhen2  “ M Áhas set stop>t in a gG  �÷issuing a return command, or aM ¤next/until# ¨ 0lasd ½ d  Ûf Pefore¡ O 9íaelif ()²  �¼ s
  R  g   0 
# 3. S /9n (—,•)-Š  –)%ë ©\ ‚¡_dispatch
$ ñ# Normally derived classes don't overrid“£ following< ±methods, bu‡€y may ifÀñy want to redefinC 9  i!!oftpYò nd breakpoints.¤ pdef is_‚¡ped_moduleü",  H_nam|""R @True� &   mý aes anyÕ@ patÄ!."œ  (ifX  ø Ü“:  # some  "fPhave ‚ sB  F {UFalse 4forq  ý˜ Ù 
8Qif fn© . (Ã ,B Au  ù t 	‰   R 7D_herJ9R D   Pbelowâ …r£$ Ð  ÍWstackNa# (CT)åD  $Ànow also be ]d, see œV_callíB  ] Àformer test L <  • tÊ ;@remoÇ (  H 6 q ª\ 8 �l¸ ñ.f_globals.get('_v<__'É	pY  †F  ­ f  € û Êlineno == -1&  V g  ] 3.f_F ">=X x  ý 6x Àstopframe:
   Äreturn True
  aFalse
 ñdef break_here(self, frame):!  ; F"""RN P if t. ò is an effectiveI òpoint for this line.l  K QCheck   È or function> 0andf i] .‹ ÷Delete temporary6 s3 � ¦() says to= 5"""I °filename = õ ‘.canonic(ü ´.f_code.co_( ): 4if  r not inB Gs6 ï 	q     ú Bno =h2.f_ a  _  [{ ]i Q# Them0 itÑ w has no °, but maybeÀ- s {  Ÿ r# first  Fof a£GwithR v set by   Qo M É ì X2rst 	~ !ify /noý  i 	jR b# flag
vok to dAE. bp* A(bp,- 6) =Ó(o,– 8 Zif bpŒ õ.currentbp = bp.number6  ² Aif (ž  î5bp.Ôz (   S Õdo_clear(str(T )š * 	÷Jelse£ & 	a 7arg‹ ?mov}ãÑMust implemenð derived classesö„get NotI' vedError=¬_raise/ Q("subV š of bdb m} Ò 2)")…ñ@anywÇõ!xÎ7%'sÉ FÎqY¿ ;# DMâshould overridÛáuser_* methodsv#ýÃgain control² / Hcall`, arguÃZ_list
QCalle¤Ðwe might stop³ /.ÄBpassÃ r  þr c rwhen we_ "or~Q at a’d éf ",  [_valuæ× t a( P trapë í 0s PexcepÒ
v �exc_infoæ nWG p ð_set_stopinfo(selóf, stopframe, return   Ãlineno=0):
  ñ
"""Set the attributes forI eping.
- !If G ð is greater than or equal to 0,S n/ @ at 3 G 6  † ¨ =.  o "-1W J Udon'te Eall. 5""" Pself.Y ! =2  
# 1( =?
' õquitting = False #Y  ì áno >= 0 means:   é /no@ $-1> æ 1 Ù t Ú  ·ð# Derived classes an àients can call­p followØ qmethodsg #ÏRaffec&@stepc stateàdef set_until(– !, `,ú{no=Nonew�top when}  ´ U with *no_ 4Òcurrent one i   Èpreached‚Q È Ê Tfrom 6 ’ .#n aname "¼ "Ö‘borrowed > 1gdb	 i #ifÐ  '  Ó I   Å Bno =ü 3.f_ 5+ 1C   ._- ‘Qinfo(˜ 1)¿Y vXD  afƒ  o ‹ of codeè òIssue #13183: pdb skipsª "s D hØÁa breakpoint0urunningÅ  é¶ep commandsv‘# RestoreYòtrace function ië qðer (that may not have beenHh  Šòperformance reasons):râé#U™ i¡1lf. _8 
Àš _$  & 7 1 u.f_back¢  ÷!ifE#er:  b Ô O 1.f_
q  > & } 3 •_dispatchu D  � ,  :Anext:aA o˜ * ß ©�or belowÈRgiven+	Wˆ  /‰ t‹ ¿ Ö‚ #if— !f_õúco_flags & GENERATOR_AND_COROUTINE_FLAGS‡È U, -1)|Oelse> +x
ÑÚ"¥art debuggäaw ?ÐIf frame is nðot specified, debugging starts from caller' came.
  5""" õif frame is None:  -  ¡= sys._get •().f_back+ Åself.reset() Rwhile] U  ±.f_trace = >  •_dispatchE  …   "bo} " =S 	" —  � ‡set_step   Ô 1sety (d  „ !)
d @def > �continue+ )Ò ò"""Stop only at breakpoints or when finished.S  Õ ø If there are no7 ,p    wAtem ˜ Á function toªÐ�# Don't s” oexcept– ç  ” _í  > Ainfoí .|,x F, -1æ@if nŒ û s T #Ý Ó; run without¸µer overheadŒ  < 	¢ �w   ö ' � + ŒB andC ó¼ `
¾  < 2del0 ³	¤  " ‰  & =AquitL90et  tº�attributeáGTrue.ò Raises BdbQuit Ø !in)Anextï < $a G¿_*() method.ò í» ŒðÃ  á ' dreturn)  �
  É  = ¾  5ys.h 7 Yà# Derived clasß  š@clie;3canÑ �he follow%Í s] #í ¨manipulateCƒ.  Theseý "s ½ 3 an: ðerror message if so[  c ¢went wrongð  0all.BwellIa# Set_ñ2 prí!utŒ R linep@ile: $no@ CT YQget_*6  ¯kto seeJ KcbetterÁ µfor bp in BqÀ.bpbynumber:¶ ‘bp: bp.bp¢ #()Q•s –±, filename,´ ðno, temporary=False, cond=À,ƒ    � @ ! åWa new¡ ¿ t :X #If‡ P doesÏQexist6 t® Ø Òe Ÿ T/   should be8�canonicalW m2 £ 4 ( ‘i.t· ’cache # I 1as Ÿµas possibleé  ú & =6 @.get a �i À     if not wline:
  ð!return 'Line %s:%d does not exist' % (filename, B 5no)D ÷list = self.breaks.setdefault8 &[]4 #ifG f 0in E 
—   Œ.append(s `bp = Bl Hpoine * ð, temporary, cond, funcÀ „ ø QNone
Í ²def _prune_È (Ô -, û © @"""P1  1 � Us for4 :‘ .b  vAì 9 of4 ðis maintained in the Bdb instance an ©  G   × class.  If aY J %noF blongerçs- W ,� ðn it's removed from J ¬ . 5""" /ifF  Í0.bpûd î  ‰][�"].� !ifV 4 
W 8del¸[ ¯ RcleargDeleteƒI® 	0 £were set, £ÿan error message`Œucanonic‚ú%if *(in
#ƒ 0'Th– iare no® Pin %s#€ ñþe  ko 	i†n 2 at¢ p Ù “#t² ä's only one bpâ a§Athat,ª º c# pairøf íŠ us entry-  ï[ Åæ £ J][:]ñ Abp.d36Me(¢¼
Œ_K - £
É¸“pbynumber½Farg)� 3"""°	5Pby it0dex3	Ø Q Ó u@rg i3 _validº6try”  ïàVget_bÅ  ¿ yÑexcept ValueE  as)
L vstr(err6y0bp.|P, bp.&C [ y@all_6 :s~  …£ ƒ"llaG!inš 0 
lnÍ%À""
        fó	ilename = self.canonic(f 3)
  4if  r not in2 ubreaks:(  / ñreturn 'There are no ) `points= U%s' %S ? €for line# ’ 7 $s[| ]j �blist = B† ] 0.bp 1 ,O ]a     e  bpc @ 
S  ! Æbp.deleteMe(8delô c ] ù QNone
r âdef clear_all_Ì (Ø )u A"""Dm Ø all existing0.M  š �If none wZSset, t ñan error message.€  3 5""" i? tÆ ˆ  , M º'J D	|ŠbynumberW Zif bp  n g .+U = {}s � 
^dget_bpw \Z, argaR’aVQ by iŒ0dexÈ 2ybpÈ {°For invalida € values  Xf the\ rdoesn'tÎ,Â €aise a V; E¯§
:arg5r@ > &('µ  ± ¦ expected'¹:tryH + `= int(-¢ gexcept¡ 
9 � ¸Non-numericb æ b a from ¼ û  — ,bpËØ[P j¨ QIndexI¨ )ð %d out of range�f )¬  Â1 isÂ l ²%d already Rdh vÚ"bpé 6Ø ÖÓÐ/noàaTrue iŽ re® 	ñ ³G :e8no. ° 1 
e and \Ý  ën  fÞA- 	÷ sø  92/s ê [ � D­s£MPmpty K£ü :-=_ Ýÿ0no]¨![]À def get_filóe_breaks(self, filename):
  ñ
"""Return all lines with 9 ¥points for< %.
< YIf no) £are set, rT Õn empty list.9 5""" ” 0 = ¥ ”.canonic( )* %if… 2 in. ¦ sÏ  Ö | N   [M ]M Oelse7 "[]á ¸def get_allE;j 0Sthat .í › m ð# Derived classes an  iePcan cŸñthe following methodÒ @# to® ð a data structure represent2   “ack traceÉè Tstack(?, té É± of (frame,20no)‘	^ Á Ta sizi  ›£List startf�originalà  £ W ö if there is one;ðSize may be numberŽ 6 ös above or below f7 …ê F = [ o ² Qt.tb_N  z f"At = ! Anextx Ô pwhile f0 {not NonYp �.append((‡0.f_j6no)Þ K  â H »!ot‰ 
„  ' k€   Åf = f.f_back x †reverse(j ñ i = max(0, len(' V) - 1# Ô tŒ Ô ­ ,!Þ ?ô 8¨ rgÃ 2, iM Òqformat_ d_entryÛ ·~ï, lprefix=': 'ñ0str˜"inX 0ionl4ut ôc R ‘0Theè1ck   w  VaAµtuple.  TheÂß ƒ €contains '%al, Pfunct   èI Òor '<lambda>') 0inpÀ @rgume q bvalue,�  Ö n÷code (if it exists)û kaimport%PcacheUprlibš G Æ % i¸$ - 0.f_‘ D.co_çÉõ s = '%s(%r)' % Vr *  ˆO  C
~Bs +=Ìv  ' « X4 "~ù E'()'< bif '__„0__'T /Localèv0! ð['__return__']
   ¦s += '->'
 !   €reprlib. E(rv)" pline =  �cache.get ¡(filename, öno, frame.f_globalsD !if$ :U   w ‘lprefix +! v.strip(9 ‘return s
: ó(# The following methods can be called by clients to use<  a debugger  ó a statement or an expression.8 DBothc �given as9 Qring,7 Ò code object.¬ ódef run(self, cmd, @=Non5Qocals )@"""D¦ a š ðexecuted via the  �() functª «  Ud r defaulñ__main__.dict; ly 	" 6 ò  G 5"""S $ifº @ is ½ ¯  , timport f 8   Y % = 0.__‡ %__(  “ _ ¯ =… 8  Zg.reset1áif isinstance(w7stra – Ãcmd = compil%  "<{png>", "_"…Ásys.settraceÐ. –_dispatch* :try J † 
,4 êexcept BdbQuit? Epassð kfinalla PquittR= Truð è   	½  ½) AevalÔ ,ú¥0–
§ ] §ÿ	–ÄS¹ ­³[}3ctxZ‡êð"""For backwards-šñatibility.  DeferÎ R().žQ# B/WÌ2 2Y 3 �  T#isK á@more69ful(Uinglesm
ë ñ  ™÷, /, *args, **kwds†çY  ÀR ö‘result of d  ýŠ  ,   À      self.rƒeset()
  ñsys.settrace(self. –_dispatch* ¥res = None= Etry:  Q $ öfunc(*args, **kwdsF êexcept BdbQuit> EpassO kfinall` ¡ æquitting = TruŽ  � 	Ï  ¬ z ñreturn res


def set_í "()ˆ ð """Start debuggc `with a¯ ñ instance from the caller's frame."""¾ PBdb()U^ ó


class Breakpoinù 6"""  $ !.
D õImplements temporary b? ð	s, ignore counts, disabl³ 1andC r(re)-en ó, and conditionalsi € ós are indexed by number through bpby  L !byf  ð(file, line) tuple us‹ ñbplist.  The former ÿ as to aA  ) lx ^"of	-A OlattA   c … of such¥@s si¬àthere may be m1Tthan ÅRA perÂ ‘When creaja|ð, its associated þ Òname should b“Áin canonicalý `.  If . Èis defined, ` ” hit willI ã@ed w“  pQfirst­  ø AthatV  Ùñ is executed.  Ac÷È s alwaysB  ax .0  É	  # XXX KeepÎ@stat©üÑò
is a mistake -- this meanÈP# you{not havƒy active^€next = 1Ô  0# N  bp9 beBigneêgP = {}, ( #Æ�#noŸÝ Ð0= [,à] # Each entryK  e or anZ s1BptC n  u   08 @unusØî€for markF/an;  Beffe’¥ .... see  "() ¹�__init__°,€~,-q=False,ó=Ç ,$ z ó ½ U—=( ¨  }jeded i¿ Ö [ 6	K _¤_‹Pable_@z Qile =Æ  C 0# TE!beíbq
H!™ @ Y   
 9=
#  ! =%
 8,edcq iz:= 04 h 3=Ð Þ< ‚. U += 1 q# Builds@two í\ ,� Èq.appendøð if (file, line)÷ in self.bplist:
   ð[file, line].append( )1 Oelse? @ = [; !]
< Âdef deleteMeS F A"""D ñ the breakpoint from  µ ð associated to a ¬ :« .c  Ó ‚If it is6 8astO ðin that position,, Calsoš sª  G  ˆ ‘entry forL m  !   6"""y �index = Ü .. ,r ¡ ? ±.bpbynumber". ð] = None   # No longerº þ › B   [u s].removV( bif not„ ö/ x Å k smore bpí Åis f:l comboO  , ?delP   àSenablˆ f q"""MarkFÜ2as 0  d.I `   ß  v = Truea ?disb 1 c 
GFalsd qbpprintÈ`, out=•)Ð P" Ñ ÷output of bpformat()�`The opl alL ø argument directs whereK uis sentyÀand defaultsø€standardO Eput.) F if   ½ ¼  bö out = sys.stdouj ø .Í ,gV=out)ˆ  ®
òReturn a string with in`ion ab�  a2/ rincludeÑ2  4µ, temporarybstatus¸ ðA S condG  À0timf ò€ignore, �' 7hit´ z .˜ 
}€disp = 'K% '´ V) Gkeep) "if‚"] ; w+ 'yes ; d 0 8no 0  re(Q'%-4d7“ó  %s at %s:%d' %ñ! , L ,×  o 24ô  ·
ñ  £ ö+= '\n\tstop only if %s›  7 ,‚N ßP   Ç next %d hitT  V   ' 
T p   J > 1   sss  ®  + 
* ©Ðalready hit %ód time%s' % (self.hits, ss)
  ±return ret
 ±def __str__3 !):  . ""R, õa condensed description of the breakpoint."< g ' ¨ %s at %s:¡ �number, ® Cfile ¦line)

# - 0endt Bp f class! 0


Ï ócheckfuncname(b, frameÙ $""× rTrue ifÀ ò should happen here.!ŸWhether a) ¡depends onÊway that b (‚ówas set.  If it  P via ó  Ä ž . !is` qsame asg ` Rone i{ å Y  ± %, [ fthis iM eright . 0and� Eit ià ñfirst executableµ .� """þ�if not b.I  r Q'# ¼û M   ›ý "!=Ã0.f_&noS  ) W 3at Spwith a  statement Ý  A ¥  Ã  M   #- @inedú Òcalled: don't¤  . ëUFalseG   dG	¥ 1setó~  (V %ifì €code.co_ ? !=SAIt'sra» ´ �, but ra½²µ	
v È É u# We arc! N7 	ì__k  ­«V# The¤ áis entered forÞ11stÂ]  ” FZ  i7 Y6 Mr# But wô  Å!at˜ Ù ë õ
 Ð
# DeterminesZ šecñ an effective (a )kX 8 ­"
#… 1of "  ¢s, BP or 0e Anoneb (g J¡ h whichX ¥0is ? :>  » óto be acted upon5C5P only… pwe knowM NsM	Þ P locaŒ.Ø … ¦F^ <Qtrigg? Ì€a boolea¢at indicathÂL ÷	ok to delete a temporaryè } € (None,  )Å ¯!noM ˆmatching=  
·possibles =ù€.bplist[G,Ð]6  `bÍ7 ;h enYd Ð    continue
  óif not checkfuncname(b, frame):
'  …continue õ# Count every hit when bp is enabled- µb.hits += 1 ~ jb.condm p# If un õ itional, and ignoring go on to next, else break^  µ Qif b.4 Ze > 0d  !  -™     ó    k I #~ Qpointª ðmarker that it's ok¯ ùdelete if temporary²  b preturn ‰UTrue)! { c# Cond#E bp.,  I 0# I01e c©Àapplies onlyŒ 0tho6 pt½s¾Vre thâD …¡ evaluates> :rueo >tryQval =: (é^¦.f_globals flocalsð  €   nif val\  Åã %   & ë "   /# õ    ‚   ¹! #©É ?#  x oexcept1 !ifU@ faiC@mostC €servativÉ (i¬ystop on ” 	¶Òregardless ofj:’.  Don't ¾G  Íà, as another hzto user+ } .CFalsè `None,  )


# -  P testæ   ó-

class Tdb(BdbÎ1def� £_call(selfc, args&  Ÿ  " =°.f_code.co_ Â   :  … = '???'" °print('+++ r !',' m & ’ Hline’ Œ i+ t " 7cac¢t °¥ 'Pfn = œ.canonic(Q @filel œ Œ & =“ @.get 3(fnR0.f_ &no òF ?', :  u a, ':',k ‚.strip()B ;5=‡, retvalEl   Eurn'% 
‰u:ionQ Ÿexc_stuffT 6 6', + Z  O_Dset_`@()

Á Sfoo(nS £    *R, ')'ë Âx = bar(n*10 , 3barÏ ced', xV  , aV À'bar(', a, 'ñ)')
    return a/2

def test(): ‚t = Tdb(* ðt.run('import bdb; p.foo(10O ÷"""Macintosh binhex compression/de ò.

easy interface:
3 ÷(inputfilename, out �)
hexbin& ñ"""

#
# Jack Jansen, CWI, August 1995.# ñThe module is supposed to be asÄ Qatibl @poss ú. Especially the
# Ñ ñ8 should work "as expected" on any platform.
# XXXX Note: currently, texðs appear in mac-6 F %llF sG pWe seem½ lú ða simple character-translateM `python: 4(we² ô	probably use ISO-Latin-1r 0butò  Š ~ )D Å  Ou óroutines are too� :> y « @hold k0letM Âs in-core. SM…be fixedn AIt wg`be nicg ð handle AppleDou¹ 1 atÁ ñunix
# (for servers 0ingÑ sÉ ð
I don't understand what hŒñns when you get 0x90 timesÉ ñ same byte on
# Ô . `resultn ó code (xx 90 90)È  ]  arb¢�terpretedŠaL ñescaped *value* of} `. All T ars I'v	n8pto igno‡1his*@ty..Ñƒinascii
 ¤contextlib $io
 $os
 dstruct ¤warnings


 .	 T('themjãdeprecated', D BionWF ,„ ¤ òstacklevel=2)


__all__ = [";2","ñ","Error"]

class  £(Exceptionáópass

# States (ßòve we written)
_DID_HEADER = 0 €DATA = 1? `Variou)n'ðts
REASONABLY_LARGE = 32768  # Minimal amountj  ‡ 6Arle-Âð
LINELEN = 64
RUNCHA} cb"\x90ÛTÊ /  ·‘no longervô-order dependent
RFInfoÞ îÓ__init__(self n  å.Type = '????'� Creator QFlags+S!geÄPinfo(Ôh f 1 = “ dÁwith io.open, Ò, 'rb') as fp¸    à# Quick check Ë ¬ 3¨ òdata = fp.read(512Ç ? €if 0 not ( Y   ™ .þ FTEXTþ ·fp.seek(0, P @dsiz+sfp.tellÍ Pdir, ” ñ = os.path.splitÚ Ž    ò.replace(':', '-', 1% ¤ %  Q Qnfo, s 4, 0Ù 2BrsrcË Üð, *args):
       ñ pass

    def read(self, *args):   ¦return b''/ _write0 
Y Bclos* S # ð
# DeprecationWarning is al� ðy emitted on "import binhex". There- ó
no need
# to repeat the wP Àat each call# ds  edM  ascii func„ ó s.
@contextlib. €manager
(„_ignore_F Cion_j (á Dwith~ ts.catch# s$  X7 „s.filter "('c o', ''," )šòyield


class _HqxcoderengineÁ@"""W¬P dataÿ  & ö in 3-byte chunks"""áƒ__init__ä3ofpÞ  º  (¥.ofp = ofp�  h =. +    ?hqx ölinelen = LINELEN - 1‹ l C ‰   1 = f  +í —   _ 1lenÐ . G€todo = (  ) ™// 3) * 3C c  [:4 ]  | ˆ [$ :% aif notœ œ   aM @h ;   } _	 +ä�.b2a_hqxæ ü . –_flush(0)u   w, forcew–first = 0´ Rhile  5<= i— 2) - ë
 !laN > +) a é Fofp..a [= :J –] + b'\r'å =  j	` D 0 = F   f 
u 	â+
ß B · « :¬ q  b1"if £
^ .Å Ô  ’ !in2Á  z R $1  ë Å  2delÁ  0°1RleŠ°ARLE-*  ´ßsuitably larg¼F�l,» D ~&if   ú) < REASONABLY_LARGEÒ,0rleh & =ûriÐ_hqx(self.datCa)
  üself.ofp.write(rledat    q = b''
9  def close(? !):  Q 0if  .1    ÷with _ignore_deprecation_warning(F  0   �  z ñinascii.rlecode_hqx| j Î  6 � Ò    Â = 2del¾ òofp

class BinHexË  ö �__init__} ÷, name_finfo_dlen_rlen, ofpÎ  $ !, %  , &  , ' / => Kž õ_on_error = False ÷if isinstance(ofp, strw   of}   =’ :  Âp = io.open(' f, 'wb' ( … 6Tru„ 2try +    VHñb'(This file must be converted \« 4.0)\r\r:| @hqxeø @_Hqxôarenginì 
¥ ñR = _R , D .  ycrc = 0"if¥Š is NoneÛ  ß Ä Š_Info(W   Þ! =å	[ ¢ õ   _7 I(³0c  Pstateê ¥DID_HEADERN jexcept¸ iªJ
  ×  ¶éÓ Vraiseñ£  Ð ý© V �nl = lenÈ Á ¦if nl > 63+  } e   Eä`('Fileÿ — too longdÁytes([nl]) +?0.en ("latin-1" Ub'\0'Ptp, cI¿S.Type¶ ….Creator+ 
U 9 Tt:.tpy F /crš‘ /crF Âd2 = tp + cr… /°# Force allðpucts to]DpackZ¥big-endian• Cd3 =2 .+ T('>h'VFlags¬-d4, Bii', ä  Ë6  ½ ýP + d2 3 4‚  5.E(, :  Rcrc()ï om Uá6 Éb1crc + ¥ ;crcj  ðX  ' n  ƒ  \ k ð # XXXX Should tÙ•be here??à # ’ T'\0\0D	” 4 9 :< 0`fmt = ¬h ;elsœ% Hõ Á ×ð struct.pack(fmtã, self.crc))
   Q = 0
  def write( �, data):  4 "ifG östate != _DID_HEADER&  * ñraise Error('WritingN û at the wrong time'‘ bdlen =i  a- len(‹ Š  Ÿ "._«    À `close_ Å ¿  V O!= 0´ ’Incorrect¶ ñsize, diff=%r' % \ l.rlen,R— Kcrc(Ú 76KDATAuQ_rsrcY z<y C 
Ã � »B ¹‚resourceÂ Â Â!½ Ezis Noneþ areturn	 „:try  
E < I  
I M , 	QCœ
 3 _ <¨ # V "¬©-ÿ	´"´ O ï ¸kfinallH. ˆ=‡s L 4ofpý9ofp 2delØ Aofp.·@()

Åó binhex(inp, out5""" �filename   `): cre�( ð-encoded copy of a + 1"""˜ °finfo = get    s 6È qBinHex(* k )µÀwith io.open4 æ, 'rb') as ifpxÑ# XXXX Do texf ñ translation on non-mac systems™  H›while Truæ0d =c Â.read(128000±  5   õ if not d: breakQ    i65   ~6â iÈ à —‹ä Q ž š 
–  } ’ þd—   “ Di!Àclass _HqxdeßTrengir"""Read«1vian( ð in 4-byte chunks	Ï  t�__init__z,dw 9ôiÖ :eofC›  §, totalwtdK ¢ Ðat least wtd • ðs (or until EOF)ž  |   0decÔa = b''³    : =d  #
 À    # The loó'op here is convoluted, since we don't really now how
  ñ# much to decode: tM ðmay be newlines in õ  incoming data.F åwhile wtd > 0:  d ðif self.eof: returnk  @ 	(  = @= (( é+ 2) // 3) * 4'  8 " =S €ifp.read4 )& # Ø Next problemâ 0notæ ûa complete number ofB 2byt@whatV@pass7ða2b. Solve by yet anoDA Floop1 
¥ CJTrue@ * >try   ÿwith _ignore_deprecation_warning()8  < 0decMBcur,Oðeof = binascii.a2b_hqx(% 
^ >   Ybreakç   fexceptH I3]Œ  IE 0newx ê1Š 0if Ç2 d ðraise Error('Premature EOF on« žhex file'` ˆ  + 
 	± J$ =Ù$ +
 9cur+  Þp= total c- len(@ 
{ ×  A andç L	W  xä !�T  def close(l A  .t P)

clB_Rle=crenginÁq"""Read*A via@@RLE-gUr"""
o �__init__r _, ifpw    = 4  ï Ž  pre_bufferº+'' ?ost ð0‡ L X ,Ëƒ  if ! >® ! &.p[ ( ˜ P_fill— â4 ì$rvåT o[:wtd]Î 	R V[wtd:2 Ù&rvÞ ”  8 ß   .K +" ý% ¼6+ 4Æ æ "  ê»  ¦!‚ f% I + \h  l   Ãr™ÉS 2½  4  O " SP  ¿Ð# Obfuscated Þð  ahead. We have'³take care tA—À ‘# end up -ðan orphaned RUNCHAR lat™nnÐ, we keep a csouple
  ñ# of bytes in the buffer, depending on what gend of? 3 Ç looks like:! p'\220\0 ¢' - Keep 3s °: repeated  Á (escaped as 8\0)I ?% D 2D Øsomething-elsã ƒ  ; Eb  K :� I .k ?1 ƒComplete« ÷ sequence: decode all: Àotherwise: kê 1¦ \ , òmark = len(self.pre_|õ ;if  ô[-3:] == RUNCHAR + b'\0' + | ãf  5- 3~ /el\ 1\ J 	2J 2J ¦ R +(-1ú 
L Žpass # D” 
, !=  E- 1
Ë úwith _ignore_deprecation_warning()I œ3ost¹# =¯ 5+ \`  ‘  Âbinascii.rleFL_hqx [:¢ ]o 'n  [1 ":]Ñ ‘def closeX º G Bifp. P)

cl>bHexBinâ  = �__init__@ W, ifpE ÷if isinstance(ifp, str!  è Òifp = io.open% F'rb'Ò #p# Find r Ÿial colon6—while Trud k  chj –fp.read(1c   ’if not chÝ    úraise Error("No binhex data found"K ñ# Cater for \r\n terminÄñlines (which show upË`n\r, h6ð  € #< 6 astart �*\rs 0if Þ =é.r'Ã vcontinuñ \ 5 :4  Rbreak( . 2hqx¬B_Hqx’arenginÛ� ;T = _R¼* E - ucrc = 0ø B _¥‚header()† q  n7lenM�] º)  # 
X m ^1crcX > ,š6crc¡ areturnì… �checkcrc‰ „ Bfilea óstruct.unpack('>h'^ › ç2))[0] & 0xfff/ÿ F § T'\0\0K 	© ÿ# XXXX Is this needed??ý a 	| À    if filec÷rc != self.crc:
  ðraise Error('CRC e ð, computed %x, rea	 ': E D % (_ µ, filecrc))/  Q = 0
 Pdef _W aheader> )š Clen ² & &(1M Zfname word(lenr Jrest$ S1 + 4 2 4V £ ²_checkcrc()§  ä 0typo  R Q[1:5]À   ¡creator =  65:9 Pflags� ðtruct.unpack('>h'N¶st[9:11])[03 ‚ dú 7 l7 _11:158  r8 B5:198 À q "FNNV €Info = F (+ %.CB  ".TA H F+3wž @stat}²_DID_HEADER"  @ ?9G, *n="ifì= 7!= > c Â	ýRåödata at wrong time'ù Jif nA  ¦nÅ V   bmin(n,ˆ  ÔE NelseE î  ) "vrv = b'tü while len(rv) <‹ 0 Brv +u 7#n-0 € j  ž  v F - nz †eturn rvk`close_qm/Q n	¬ 
1Tdummy¿ é * é Ò œ  , FDATAí  XQ_rsrcì ]
=A ›
¦ g è A¡ … 
B Ÿ�resource ‹:	¨! D?¨ ) .ç   ‘ P ) ®n_ Æ"jVkis Non6r¦‡ :try=e � 
  	C
ñ.2  . »     kfinallz . ` ¹ ¥  3  Bifp.ù 0)

ó hexbin(inp, out5"""  V ú   ñ) - Decode binhexedà"""
    ifp = ñHexBin(inp)
    finfo = ifp.FInfo ±if not out:  * 4out( QName
 öwith io.open(out, 'wb') as ofp= ñ# XXXX Do translation on non-mac systemsU  n ¦while TrueE   d„ ²read(128000É     » …d: breakQ   ²ofp.write(d5  ö Âclose_data()Õ d Y_rsrci Fif d” `ofp = ÿ ) y u  Š ß {  :   ä  1  „ è ã ù ±()
"""Bisec“ò&algorithms."""

def insort_right(a, x, lo=0, hi=None)ð"""Insert item x in list a, and keep it M óed assuming a is .� If> @s alçyI  a,‡ ] � to the ‘ 6 of cmost xF  OpÒ ñal args lo (default 0)‘ &hi Ðlen(a)) boundQ ÀPsliceb at Ábe searched. " `lCbE' %l1a.ir(lo, x)[4 [`Returnš À index where— W ubT?R qvalue i…áuch that all exà[:i] have e <=ü Ì  Ea[i:$  > x.  So iÅÂpappearsR  º %, qx) willM Î  ju9Afteró ëÞtì_ ifL2< 0ö ÿpraise VI°Error('lo mÂ !beâ’negative'Aif hq >G Rhi = ‰%vlo < hi'  mi¡¡(lo+hi)//2,  ‡ À# Use __lt__1matÐpe logic} y.�(…in heapqD ¶�< a[mid]:§ U= mid  Pelse: !+1 rJ"loÕ0?lef/z �  Ì�2eftOA_- ” S,ˆ-	4 ,Àx where to iñ6nsert item x in list a, assuming a is sorted.

    The return value i# àuch that all eL õa[:i] have e < x, and L Ea[i:# ð>= x.  So if x already appearsR 1the¢ Q, a.i» �(x) willN  Ñ just before 2 weftmostT SthereÐ ñOptional args lo (default 0)² &hi Ðlen(a)) bound^ y ðslice of a to be search3 22"""; if` A< 0:7   praise VI²Error('lo mÂ ñ  non-negative')4 Pif hiqFNoneG Rhi = � ' Rwhilem &hi' ñmid = (lo+hi)//2,  ‡ À# Use __lt__Ä 1matÐ D 0gic} .
(…in heapqD �if a[mid]í:} u= mid+1" Pelse:À   Jðlo

# Overwrite above definiŸðs with a fast C implementa B
tryå Àfrom _bisect% ñort *
except Importg. @passx @Creau sliases
? "= 	 �_right
iný 2 = 	  À"""Interface9qðibbzip2 compressioZðbrary.

This module providesÚ  ²iL ò, classes for incrï gl
(de)Y V@func
/ €one-shot¸, !.
‹ð__all__ = ["BZ2File",  C± #or $Dek   ² /€   "open& !   d/ Á"]

__authork ñ"Nadeem Vawda <n  .v á@gmail.com>"

Ã„builtinsÄ m S as _ _ !
iÑ4 io
 $os
 _— 2ionS  thP Ô7 SRLockp D_bz2l 6BZ2X, BZ2ó


_MODE_CLOSED   = 0 0REA   21
#Öó 2 no longer used, PWRITELa= 3


î l  Ž(¾ Ò.BaseStream):H`"""A f00objêG Ü Âtransparent …0öAl € can act^@a wroru€an existW m ¡, or refer€directlyýsa named› cn diskp 0NotŽ%atx ´ û‚*binary*9 € - data ¸1 iso 0 ed¯ Rbytes ( | A ten shouldŽUgiven1 .H "”`def __g�__(self,†  É ,¦0e="%*,Î‚level=9)D ÃP"""Opc s-| * %If^  Åsa str, É Âor PathLike ÙP, it ¿ sl F  �  o mšú  Ped. OßAwise? a| Ð
        objeð$ct, which will be used to read or write the compres  ƒdata.

  €mode can@ q'r' for@ òing (default), 'w `(over)Y Eing,F "'x Pcreat; Àexclusively,‹ "'a! ñ appending. Thes{ F Àequivalently� Ðgiven as 'rb'„  x ‡and 'ab'Ê @If mÍ  is®  , ” uor 'a', Tlevelï õa number between 1Š  _ �9 specifyÐ  E= %ofN ñ ion: 1 producesjUleastH xRion, U U
8 HmostY Ù 1r',g Ñinput file ma- ¢ õconcatenation ofˆ ymultipl	…streams.% 5""" ð# This lock must�PrecurÔ÷, so that BufferedIOBase's@  $ðelines() does not deadU v `self._ ¥ = RLock()G  ›fp = None Qclose LFals æ= _MODE_CLOSED÷!if� U(1 <=wáe<= 9):k  (ôraise ValueError("Ù3 "Iì)")q ‘ ¡in ("", "r +b"k % V= "rb� ƒ    _càÓ EREAD¦ 4eliÿ a w] w] w] UWRITE^  � ‹ø “or = BZ2CY4or( Ãš xš xš xš gaš aš aš Z/se‚qInvalidô�: %r" % (&*,)w°isinstance(0ûname, (str, bytes, os.PathLike)�öd×_builtin_openK  t ï+ž6Tru�!  9 ! =Á Úo3whasattri "Ø ")O  pN¿ ü f ‰ ˆ4Typ	W &(a [   ± `{ object§ ßÐw = _compressûion.DecompressReader(self._fp,
  6BZ2. ðor, trailing_error=OSE )9 O Ñbuffer = io.B #edp 6raw2 _else:@  �pos = 0
 ‘def close¬ )0 Â"""Flush and" ¢ the file.;  Ò ñMay be called more than once without Ò 0. O D 1 is€  E € ðd, any other operatioI ñ it will raise a Value.C 5"""  w  +FlockÓ  l #if úmode == _MODE_CLOSED+  / ereturn[   >try( W ?REAU   F   Ë.(º !   /elX ^WRITE†  4 Y rfp.writÖ$._—@or.fÕ.()m = . y = None ofinall  V Å è /fp¹  * ½ *  } > ¶      b _ šfp = Falsà  &   * '	&	 *   . Ð€ ) 0@prÎ!ty odp ÁTrue if thisi2 is{(d.á•È  l  ¯/nol  RÙÓñ  descriptor for ¡underlying� 	ƒ ï ¡check_not_Qd±	¤ 3fp.‰ )› rseekabl£
y� 1whe4�supports < 9ing“ r Aread\ )¿® �.<  Œ 0  * Œ 0was§1ned1 B ’  M /._%j‘ :   Ì´  S   " B   9‚¡ Apeekf_, n=0¢ ued data`advancdæ@posiügrAlways ãñs at least one byte ofW q, unles" 6EOF àThe exact numbbf9 T  edl¶unspecified; z[À:
          ÷  self._check_can_read()
  ý+# Relies on the undocumented fact that BufferedReader.peekI ðalways returns at least one byte (except ûEOF), independent• !ofŽ ©value of n  c ß b› “ 1n)
) Adef í  ±, size=-1):  þ 0"""Ë a up to  Ñ uncompressed° as fromˆ Rfile.[  > "If3 ñis negative or omitted,{ À until EOF ieached.� R&Rb'' ií  e  ,  al» y'3 5"""? Cwith FlockÙ  Ÿ  õ ÷B v (+E 1(Q F&à, while tryingoUavoidË 0mak �multiple={aunderl; €stream. ºs»aH €'s worth5@data] Ô  Y¬Ê‡	t½CiA:< 0»¿õize = io.DEFAULT_BUFFER_SIZEï  * rE .Æ1ÇCintoÊb
  ¢ s % / b!  `numberZ-  k p (0 for+),Cå  « +(b¬Clineå  öõ a '  È ôÀThe terminat°1newF @(if 6@ent)e¦retained. &µDnon-†�, no morebnQXqwill be
@ (inA%chE 0cas4 eÆ 0may, i¾Plete)!ƒ]Qñif not isinstanceC £t- u* shasattr' 0"__ÍKx__"/  3 ñraise TypeError("Integer arglª expected"ž Ä! =.b yE ÚÚ _ s` øf¢siô 0canÖ�specified7qcontrol‘‹ « `ðd: no
        furñther lines will be read once the total size of .  & #
  ñ	so far equals or exceeds8 .' 5""" ðif not isinstance(d u, int):&  ` * shasattr' »"__index__"/  3 ùraise TypeError("Integer argument expected")l  „ " =· b ($ ú with self._lock©   check_can_#< ™ SeturnB pbuffer.' TÛ !)
‘  def write(V g, dataé @"""W ñ a byte string to¢Rfile.H  u Ru s `numberËÁuncompressedE sq Ñten, which is‹  C ±always len(Š P. Not!Pat du& Î Aing,i  „ … on diskG 1mayöqreflect)  P z ÿ	 until close() is calledC�MÊ Ö =” 4or. ò Ä  9  ”R._fp.V * *ed` ' fpos +=<	J rœ  þ�elf, seqPseque°!ofÉs4}pseq can%ðany iterable yield€Œs�ñLine separators are0add|aetween P9tenÇ € @ý
V_™âion.BaseStream¶[0 zCseekw`offset aÊ=io.SEEK_SET‹PChang!e ùPpositv V  4„The new   Þpspecifi$y l qrelativU1the A 9 bndicat6  whš Ò. Values for   f:  B €0: startÿs³ (default);€ Q mustžb° g‹ „  F p1: currFE š 	' f2: endk a : &ve¨ 	­/ewO€ ¯ }pis emul¡, so depen—o] €umeters,ª  this opera¯ ¡ÿbe extremely slow� ú ¤ ' ÇAtell˜
|2?˜
„7À self._lock:'
  ù	self._check_not_closed()% 2if ( ùmode == _MODE_READ:)  Y creturn1 »buffer.tellT 	' ð
pos


def open(filename, q ö="rb", compresslevel=9,y óencoding=None, errors qnewline )­ ô"""Open a bzip2-Y 0ed y ñ in binary or text† !.
q 1The&  Ÿ ö argument can be an actual# ñ(a str, bytes, orF ðPathLike object)  > �existing@  Ð to read from“ QwriteG 'to–  +’ R"r", @ "w wK "x x $a"• „"ab" forþ  Q ™ 0"rt0 w  xt1 B "at- ! þ  bdefaul73 is€ „and the  wÐ ' 9Í Fƒ Ðthis function* pequivalz!toU bBZ2FilÓconstructor:  SNa). In g Bcase[ ¬ ZU Å Sl s must not‡providedÍ #4, a‘ Ý±is created,] pwrapped…!anå¡io.TextIOW ñ r instance withþ «specified ± A PhandlU‚behaviorj  0 en93(s)¯ 1"""4 `if "t"†  8 ß  b    Àraise ValueEƒ‘("Invalid@�: %r" % (Q ",)aIelse] À  æ Q Ò! f A†'> '�rsupportMÒ } "|  M #if.p $ ç sn <!is£ ß = p Â0bz_í ! =~¡.replace("Å_ö=š+D .=º) 1çÅ({ ,¶3s, ë ª
&R A ;— \(data´ 9ýCI €lock of 3 G ˜², if given,æ æñ number between 1º¿Pincre%al¸‚ion, use… %or
qnstead.¾ˆ �  ›1 ( 
#  .   ð) + comp.flush()


õdef decompress(data):
    """D À a block of $ !.
$ ÷ For incrementalJ æion, use a BZ2I ñor object instead.I 1""" Áresults = [] Qwhiles –  š ° , =Z !()3  # 6try0    reU : . ñ 7 êexcept OSErrorB 3if ž 
  ^ ñbreak  # Leftover² ò is not a valid bzip2 stream; ignore it G   Nelsea Praisea ™ ÷ on the first iteration; bail ouS ³ ¶.append(res%!ifŸ J.eofx t QValuev 3("C'"edà �ended befÉ  ‘ Å Ç  ‚"end-of-ö marker was reached"�  f# =R€.unused_ ­ð return b"".joinØ  8ñ)
#! /usr/bin/env python3

"""P á interface forH�'lsprof'  Ailer“ î ²atible with* " �' module.X �

__all__·p"run",  0ctx
 òProfile"]

import _p  T s as _py _

# _ (–
# Simpleð  

î�run(stat´ , › óname=None, sort=-1g– ƒ._Utils(Ô /).N I )r 8ctxu Áglobals, loc † /b 6• � Ç ‘run.__docå 
runctx(  Ý.s
class ‡(Q. r¿ ô}c(timerä  Cunit òsubcalls=True, builtin )è…Builds a!ÅQusing specified _ 0r f1ionKÃ The default  iO Bfastq Ð-in one basedàAreal+ A  jacustom `  <  ˆ  ÚQgers,$  ã A canûbŠbfloat ª y1 ða scale (i.e. how long �7@ger G C ò is, in seconds)˜  ¹ `# Most  	þ Palityi² ß  ¼? p# This ƒÑðonly adds convenient and backward-«–smethodsŒ Ü`print_Þbs(selfÀÐ ìàimport pstats
  €pstats.S ñ
(self).strip_dirs().sort_$ ( d).prin 0)

G „def dump( ±elf, file):   $ åimport marshal  with open(0 Æ, 'wb') as f;  ?  š s.createf )D    X .‡ Ç .´ 7, f¤ 	@  R     –.disable(\  snapshoö    . T  entries =  A.get• _  |U = {}Ó °callersdict?   #  Å information5 @for s Ay in	 :iesFÑfunc = label(+ V.codeï  K#  €allcount  0# n€ Âs column of BÊ (before '/'P cs Anc -” Py.recC X P ^afterO Ctt =J ¡inlinetimeœ �   # tot   & + cD Qtotal2     Q# cum D £
¸ @  Ý ¼8[idh1] =¿9ers� [£' Àc, nc, tt, c o 7 P# subk $#ifE D ' Æ  ˆ +)  or‹ 1y/y.V  1 :try–    8  erô
  G1subd ²]	:   ÿ except KeyErrorg ontinueF o , Ý1 à4 Â/ Å- «- ®, 1if ·$infFprevŽwU  X`nc += 3 /[0z & c& 1& %ttL 2& c& 3&  º ! =-c1™ò# The following two methods can be)òd by clients to usp# a pro›r  0 a ­Àement, given³  Rring.}  1runŽW, cmd…__main__y î4 =  0.__ ! breturnPÀrunctx(cmd, '  ð!  ^� À, globals, l“ocals):
  Õself.enable() 6try#  * òexec(cmd, globals, lK 4 kfinall8 _ ;dis` preturn  
A à# This method 
 ñore useful to profile a single function call.D pdef run (Z ,% ÿ, /, *args, **kwü ­  r (I u  ú -  ¢ ‘__enter__¤ Ž }  Ð *D 3xitC ¼, *exc_infoN yO
# _ ( 

w £label(codei Ñif isinstance S, str  ¿ ‘('~', 0, =   ¡# built-in¦ Ë s ' ò sorts at the end–Felse“W  O @.co_Bnamea  –rstlineno  # /)
2Smain(é ‘import oså )sy Xrunpy  Rpstat# ãfrom optparse @  OpP r8 ²usage = "cPá.py [-o output¡_path] [-sG 
 ðm module | script,Á] [arg] ..."] { Hr = w (s = †' €.allow_iÈ€spersed_a‡ = FalseR a.add_oË Á('-o', '--ou… “', dest=" !",9  ±help="Save ' <'  >"8 ªfault=Noneš o so  Ql   i ¿ðrder when printingw òstdout, based on ¹ .S¿g classP "de™ &-1Í €choices={ 8ed(@ .  <c_dict_> )Ó mÉ mÖA", aÇ="store_true� I1£ a libraryJ¹)cöif not sys.argv[1:]{#_8 3 cexit(2K (ü0s, !D) = @  Ù ú s?  ; n A:] =. �  e»³ that we're ¥ñmay chdir, so capture>�absolute ]#Ó Y5  lrstartupI ifŽSions.t ’  pÜ % P= os.k @.abs þ " rif len(6> 0R z à   ï Brun_  @(modÖ,ú_
 @='__�B__')ÜÐ        globsk = {
  ö'run_module': runpy. ,0 `modnam- yargs[0]# } Uelse:  v @prog; ? = ; ósys.path.insert(0, o 0dir9 (B )))Y •with open! Ú, 'rb') as fp†  Š ôcode = compile(fp.read(), b Š, 'exec'i _globsG¦__file__':D 	¥  x 0'__È & ¯'__main__'e ‚__packagQ ONone% acachedO $ ‹:tryprunctx(!, Õ !, A À options.outÐ , Fsortðexcept BrokenPipeErroro:excl Á# Prevent "E6 ùion ignored" during interpreter shutdown.? �stdout =¬  âexit(exc.errno¬ 
…òparser.print_usage(' rreturn   ð

# When invokedÖ  ªØCram, @ the  (ôr on a script
if éF == ê M ñ ()
"""Calendar “  	fš ‚€

Note w‰  ¨a(sthese c7 As to† BonesD Ped by! ð(1): By
default,( 	; °have Mondayâ  Í `first   of0 Ø week, and
Su) `last (3 ÀEuropean conåÑion). Use setP  D Áday() to
setY  j B (0=‘ B, 6=r ô)."""

import sys „datetime  lo Ê _ ó
from itertools C ñrepeat

__all__ = ["IllegalMonthÉ4",  uWeekday × "˜"Ø ò  E `isleap
   @days ! mt [rangeJ   Ó    5 !pr   	 Pprcal ) "! gm! 3 } @abbr 5day    	I © / HText HHTML LŠ
& 	M ! 7  €header"]ƒ-ñraised for bad input (õ!stQparam= % ¡details)
e•b= Valu¢	Y /s Z Œ
class I(F )È deèÑinit__(self, g  ñ  . " = 
: 3str9 2 ‹"ê 9 önumber %r; must be 1-12" % _ *

¸ ·Àrror(ValueEróror):
    def __init__(self, weekday!  %   . $ =! @ 3str? 6 ´return "bad3 ð number %r; must be 0 (Monq ‘ to 6 (Su H" % y ó,


# Constants for months referenced later
January = 1
Febr 2B N‚ £of days peG � (exceptY 5 ñin leap years)
m4 Â= [0, 31, 28 3  51,   ]| ðThis module usedñ Ðhave hard-codÂ Rists Ÿ B andå ð names, as
# English strings.  The classe°llowing emuò% a read-only version of
# that, but supply localizedp q.  Note( ð& the values are computed
# fresh on each call, in cas; ë ’r changesc €e betwee% alls.

¾ % _� _Ü!:
e às = [datetime.	 ð(2001, i+1, 1).strf Ãiƒ rt X(12)]H ò	.insert(0, lambda x: "")m  gformatÛ˜   =o 8mat> sgetitem7, i< @funcË D Ú "[i¡  maif isiç·ce(i, sliceA  % \![f´.‹ )Š   fù e T Belseð =   A ( 	D Ç 3lenÃ  : ?13
¶ 3day´$# † (¨bwas a í.‘P Î »×Ú×87)]­ 	Äô n ², ³ ° 7@AFullV”abbreviatì sã`s
day_r( =“‘day('%A')   B   0a')ìj Þps (1-ba	±arrays!!!)
 ~   T('%B'$ ‚ $ b„ 
.Þ Ñ(MONDAY, TUES	 CWEDN BTHUR 1FRI RSATUR
 U8 B) = YP7)


0 is&(&*B"""R ATrue™ # Ib, Fals Fnon- A."""f R ‘ % 4 == 0¹e € % 100 ! !orU  & !00( –  W  ®ð(y1, y2):
    """Rò eturn number of leap years in range [y1, y2).
  ñAssume y1 <= y2.""" ry1 -= 1 2 rf ñ(y2//4 - y1//4) -  3100 b100) + 4 ð400)


def weekday(¡ á, month, day):t B"""Rk ) ñ (0-6 ~ Mon-Sun) forÞ = q (1-12)D   531)Í ñif not datetime.MINYEARó 0ear   AX †  $ ¡ ‘ = 2000 +r a % 400§ >  	 Ó .Ä (ý ï ’- û 7andè±days (28-31™ !  « 
î…  ü &12î àraise IllegalM–aError(- )[ oday1 =Á1# n” 0= m [< ]
 Ð == February Ë  is«
)@ W ¯M 6_B 1len. Þ 85 t !“Q_preva ^  "if¥ ¾ 10¥ %a-1, 12#Oelse$ ² $-1Ð Onexts ¤t +t s +s óclass Calendar(object?úcBase c#  2 b. This ð  doesn't do any‡ñmatting. It simply’ €providesx�a to subO "es r *  ó__init__(self, first7#=0£  �  . ) =- ` # 0 ='°day, 6 = SuC
k 8getA r b Hi _) F % 7F sF  
¸ T M  
· X 	n »= property(² +, } )?  HCiter8sÚ  q D  ^0an 2 @atorËA oneÚ AG k`s staré‘ with theR M ¢configuredŒ G ä  w  ¶i�¡ 	Î Û )lf G + 7K R ‡yield i%� Æ I ƒú ,B � N  ûe#Rwill ~  h N 	 
avalues×, 0alwŸ ž òate through completl‘s, so it 2 ^ P  ] €s outsid? ðe specified month.
        S"""
  ñfor y, m, d in self.itermonthdays3(year,  %):9  @ ð yield datetime.	 (M !)
* Idef O (b /, T ™ HLike; ôtes(), but will | ð y numbers. For ³ � outside‚  ¨ Òthe specifiedÊ   $da> e is 0.1 ‰ qday1, nY == Yrange:  ' °_before = (= " -Wõfirstweekday) % 75 Ì áfrom repeat(0,Ê J )* … › 6+ 1' † Pafter…  s.~   -^ 21 -× � Q Ù2Ú< ;Û#, 6 è _tupleú Þò& i‘enumerateß 
	,å .1, iýÔ 3h !7¤ T$) 5f Can b&Pused ü  ÈsE: ofâ þ,fÛ*±, m = _prevÐV0end& " 1lenÓQ) + 1³ Q& 0Q(end-˜ ù_, end+H 	Í=75, dG  W  ² Anext¶ Ø ¶ 1!s_× ß ³ 
m ¯4¯M¤ @_of_¼�  ‰Ã »0 1i, í@, d)Þý	
;	!, %
‚2+ iwË  X¹{�calendar7 ðReturn a matrix (list¹  ðs) representing a ómonth's calendar.
  ñEach row represents a week; ð entries are datetime.	 v valuesK 5"""W  ! ñs = list(self.iter‡  q(year,  %))7 �return [j ñs[i:i+7] for i in range(0, len(H �), 7) ]
B 2defR Tdays2ì  (, q :/  ´ R} †a matrixRing aZ D.z Á(day number,j µ) tuples. D$ âs outside this� L  œOzeroŒy‹?ys2‹yŠ/ys‰ˆs C ×;%:D ªÝ:�width=3)Ä
!th­a;  ‘specifieda ready ñformatting. The rZä  i Ë# ob 31s. >Å  ñ contains up to « «'4 0 ñ between 4 and 6s e  �] 51-7   ×'¡gobject{ î¶  [M  ¬ 
ƒ •6, i« - ™“January, 	 6+120 ]g c! [f [*é( "),P	î –  íV +AÅ (similar to× Œ 5tes·S)). E?0in ˆÊ J°< 0 ÊP ÒM? = ÷< Õ ÷‡j ¶ãöÀ:
        ""3"
  ñReturn the data for ñspecified year ready õformatting (similar toP  . òdatescalendar()). Entries ij Ðweek lists ary ¥y numbers.I %Da ñ outside this month8 Fzero1 &""Ö $ Us = [P  ð Qself. 6day¢  ´ I, i),  	i± ó range(January, 	 6+120 ]: rO[e Ás[i:i+width]<P r0, len(( 1), & ô) ]


class TextCD	 !):j ë 2Sub- 4of # P that2 pu_ ˆð as a simple pla‹1extP ÈüÀUNIX program@ d u . `def prÄ(Q,4   Å ¤  p 3     QPrint‚ Pngle 1 Ò (no newline)e  * 6 p6 g .y 8 @(the q ¥, end='')
  - 1day< a, day,t 	  “Lr  ,D 0ted> Ÿ  if V == 0ö  R  |!''�   Oelse!  a%2i' %C  &  ð# right-align si1`-digit+ sV m’s.center(D *8’ sz 7 	Qa strø·š �' '.join Á ”@d, w ‡(  d)g ¥ Í È  = tÈ" C  C_ nameÒGV >= 9! › 5  Ø@day_ ˆÞ  + Eabbr+   q[day][:o ]ÄaheaderKù  Á2 a 2 `aÆó ” ­ 1 tir M Ç ‡A.ite	 O-()³Þ ì ¶ qtheyear2 W    th _=Trueš
 ¤ ƒ#ed b Û  „i ±A[the °Rif wi{ M í : Á"%s %r" % (s´  ¢ ö8!prm ü =/=0ð 2F  'sŠRë *7  + ¶ ð , themonth, w, ñl), end='')

    def formatmonth(self, theyear	  Á, w=0, l=0):8  < 5""" ‘Return a / õ's calendar string (multi-line).7 C Õw = max(2, w)" l F1, l @s = « .¼ _name(º  û 7 * (w + 1) - 1E  .r¡ (p( µ+= '\n' * lˆ 9s +s ßweekheader(w)E @for 9 2 in¿ .Tdays20Â r v‰ (U  7‰ 3 Ò r³s	 ú0w=2þ·1, c=6, m=3– Å@s a G a /c!F2, cÅ¥colwidth =ü0* 7 Òev = [] Æa = v.append T(repr””).center(^ ¦*m+c*(m-1)„  a(t*·1
¼ » (÷ *€(i, row).‘enumerateš.]7'm)› þ#”sG @thisT á  ! … Rð	range(m*i+1, min(m*(i+1) 613)Ú  6 Þ    … K § ž4k, Dz, False]  K   kº ¥ 
& "a(a  Â1ng(| Y c– W ¼ †¾    ~ 3 s€ (#ÿ¡ number of*s„ ·cheightþ�len(cal)/ 0cal3 <	é Mj éA .  “      C _    „if j >= ” &  . i t(”   OelseC  [  0[j]
9 c = 0 ½=  Û !Y P—''.join(vb pr±T  SU^PrintJ.pp$ Y  [ °ð, w, l, c, m), endô='')


class HTMLCalendar(	 ¡):
    """ cThis c% ñ returns completeC q pages./  7 	 a# CSS h ñes for the day <td>s$ 4css! à= ["mon", "tue 0wed 0thu 0fri 1sat Qun"]
D h 	hh ö_weekday_head = ‚ N ´ ñs before and after current monthŠ L 0_noç 1= "	 "Z < 0's � 
C  ¥  /thH A  ? = < Ïyear's table‰    ˆ   ‡ `whole % O 
’  0= " E 0deffÀmatday(self,"#, ¦‹�  R…  a, R as ao R cell† &  Š    !if, B== 0Þ    # woutsideÌ    ðR '<tdÌð="%s">&nbsp;</td>' % º .ÿü  B Jelset T %%dP Q 3es[])Q=  3 ,d  9¿ - C?rowB±s = ''.joink C.for¸`d, wd)É# ( %inŠ 	÷ ‚r>%s</tr<Î 	Í  Ä  qHnameÌ  V/erÏ � hØ˜ h˜ (¹  Æ	â)esGB[dayšQ_abbr ¤‘ ?Ô + TaÙ ¥!"(i¥Bi in³Citer Es())ò «¦ wÔ ~ Þ	  `, with _=Trueö 4  Q ï %if_ 
b­P%s %sž(W _W A[the ]¤  ™ ö ªH  E 6 D 0ÿ <th colspan="7"^ ûc_p  =, sN uÀ
        """#
  õReturn a formatted month as a table.- 5""" ev = [] Æa = v.append 1('<C õ border="0" cellpadding Espac õ lass="%s">' % (N  ² �self.cssc% _ª %))" ha('\n' 0 Û - ñname(theyear, the `, with =	 V ¿weekheader(3 @for * A in “ w Þdays2calendar– %):Ù  û !a(: Í  M ( u % 1'</ƒ>
& r±''.join(v)
z 3def  4   3Wdth=3¦ X  7 W2 of`sa'Áwidth = max( 8, 1ÿ. Y ¸{ Í 	j yñ'<tr><th colspan="%d" ·Ü¿%s</th></trè Í ò	t _m†þ ci`ó range(January, 	 3+12³± Ù #ðs; ‡this rowö   "= Y “i, min(i+£ '13…  Q aõro   Ÿ md úsÛ ! 7 d7  ù? ,mÕ »[False� @  [  q }	Ç. Opage"t, css='é ¿q', encoGNone”Eàcomplete HTML € H%ifl @ is o 
~Š ô = sys.getdefault ("öõ?xml version="1.0"… ÿ@?>\nÞc b  —ñ!DOCTYPE html PUBLIC "-//W3C//DTD Xõ ð1.0 Strict//EN" "http://www.w3.org/TR/xF 17  !-s4 P.dtd"ˆ 
}  .   >ead Pmeta u ò-equiv="Content-Type" c p="text/Y ð ; charset=%s" /R % %‰  if5 °?not´  &ólink rel="stylesheet" typeq ‘css" hrefsÐ />\n' % css)#
  òa('<title>Calendar for %d</ é\n' % theyear)8 š/head>\n' Lbody °self.formatH (P Š, width)A /B z'</htmlY ñ
return ''.join(v).encode( ñ$ing, "xmlcharrefreplace")


class different_locale:à Ðdef __init__(º ",  )   ;  . # = 
> Senter? 7 5old: y B.get ( vLC_TIME s+ ', – )Ž xÌ W*args” X · @L6STextC>( e 1"""RThis yó can be passed aA€ name inoò constructor and will ñN Rmonth aeekday> s? “specified\ `. If t‚ h‘ includesM 4an 3À all strings… �taining p ˜ #be› "edP Ps uni‹.  	 \ bfirstwÄ $=0lS=NoneA qX.žB 0#ifû @ is N ¾ Q $=  ”getdefaulŠK Xî ØÂ 14dayÝw Mwitht1 Kð  £ "if V >= 9G      .€s = day_ a    3elsÏ    ' 3 Iabbr3   " =GY[day] rl % ![:·1].cç( q1 / â ,ÕAyear	  !   th H=Truô0 Ú Z A[the 
È Up S B Á"%s %r" % (s­  ›  KsWTHTMLC æ  M ì &WÀ      if locçale is None:
  0loc 2= _
 ².getdefault %()0 Rself. 2 = 	 
 ðdef formatweekday(, f, day)p ãwith differentq * V ,  £ 0s =B ¡_abbr[day]l     òreturn '<th class="%s">%s</th>' % [ 1css !esD L, s)µ ‘monthname2 ‘, theyear	   , ¼   W=True¨   Ô S _p A[the 
Û %ifp > ô    b'%s %sä ¦  › © ' !r>#¤olspan="7"/z 2A</tr7Ðs


# Support×ô% old module level interface
c = TextCalendar()

firs	@ = cT  

08set ( aøif not MONDAY <= $    SU $âraise IllegalW‹ZError^ H)c.N 
] !

  Ö Æ  Ddays 0
prï  
  aheader*   1
prZ   ~  / " 
y  ¡year
prcal !pr Á¡pacing of > � columnsÒbmulti-  3  \ ð
_colwidth = 7*3 - 1P °# Amount prRd by ú S()
_sr 1= 6.  €# NumberŽ  ' Pes be$n— 
ï `(cols, Š =”  , > Ding=n +@"""P” )s Û O t:forê As"""
Í (+ kstring€ v )))§ - ­ R¾Bs a E  –Ómatted from n  en!ed5in 3.Á q *= ' 'Ô ÿ ‘.join(c.cK  Þ X)v A c iS  ñ 
EPOCH = 1970
_ A_ORDŠÁtetime.date( ð, 1, 1).toordinalþÝ ) tgm(tupl.�"""Unrelaä ðbut handy function to„ cu! ` Unix E Rstamp5GMTò  ³,Øfñ
, hour, minute, second = ‚ 2[:6a ¾Ë 	L 
Î 7 - +Ž b q  Œ T Q*24 +ƒ  †   % S*60 +›   ž    * "  " ¿Ç  ‘ 2“main(argsô!im¢�argparse9 
  iàargparse.ArgumñentParser()
    textgroup = p á.add_argument_  ('' d only  "s'A Ahtml% A  ' A  [ A 	y (ž  ¢ õ"-w", "--width", ötype=int, default=2 ahelp="3 ó of date column (/ A 2)"M É ˆ lˆ _linesˆ 
1ˆ `number‰ = æ for each week‘ 1‘ s‘ spacing“ 
6“ 5 ö  between monthsŒ 6Œ mŒ G ‹ 
3‹ 4 † per rowƒ 3ƒ  B(cƒ (csžíº="calendar.  )¡CSS to useœHpage ¡Ly  lod ü | LNoneõ -  u  bex bd from‡A andŸday names� e� Zencod� 	/  ‘ ooutput{ t{  ™ "b “choices=(   "ã,")*‡  V   (D @ or + 	£Gyear{ ¡nargs='?',W F q 2  ¸(1-9999p Óq 3 r 112,ž6{ ¦ voptionsrý  µ s(Ú a[1:])
+ 3if . .r \5not ú:0  N ãr.error("if --< ô is specified --; Ò is required"N H £sys.exit(1� F =|  , Q ¼ ý#==#« ß   ‚ qcal = L˜SHTMLC(y = ² OelseB 	< / d Ò Â     4if   ' 
b   = 13get¨ ª M  optdict =  (" =	 d, css=ñ1css¬ À     write =ó sys.stdout.buffer.write
  õ	if options.year is None:!  ( 3 °(cal.format* àpage(datetime.	 �.today()I Õ, **optdict))M 'elp _monthq ¬ c s¾ öparser.error("incorrect number of arguments"«  ø  =bexit(1 (el\ Ë [localw qcal = L ÒTextCalendar(- = Y  m 
]   B 	< / ]0 = d4(w=…width, l Vlines9 · ‚_ u["c"] =$uspacingÑ § + m+ ] s* w yišresult = lhl go K © fa 	 K  (L   [ l( =¹ | IŠencoding®‹ 	 .& e‰  6ing À d 
w 0( (Z ò)


if __name__ == "__main__"”   (Gáargv)
#! /usr/üÿ/bin/python

# NOTE: the above "* "1ðOT a mistake.  It is
# intenÍ@allyQ E  i Benv m °".  On manyf0tem< û (e.g. Solaris),¨  v ÿnot in $PATH as passed to CGI
# scripts, and?   Ú @defaá di‚±ory where PÅ ²stalled, soH À ð would be unable{ CfindØ ñ.  Granted,
# binary inN aô	s by Linux vendors often% ‡ 5n
#y õ .  So let those: Àpatch cgi.py‰ m àtheir choice
#\� ð	.

"""Support module forAô (Common Gateway Interface)Zt.

This9 0defÚ' aÊ‘utilitiesW 0useó 4CGIC 
Àó î .“  €²History
# - ð	
#
# Michael McLay startô‡   ñteve Majewski chang%   ”Ç  %�SvFormCo¨ADict, ð.  The multipart
# Ãping was­PpiredÚ °code submit— ðby Andreas Paepckeð'.  Guido van
# Rossum rewrote, reformatted and documen ¡the module ñHis currently
# responsible for its maintenance.
#

__version__ = "2.6"


# Imports
# == À

from io im ð StringIO, Bytes	 ÒTextIOWrapper0 ô collections.abc= ƒMapping
L 4sys o
 Âurllib.parseM Remail rJ PFeedP# q $ tmessage% M d Dhtml dlocale €tempfile1allü["MiniFieldStorage", " §   	 æ_multipart",
  " `header. @test °print_excep- lnvironG /  * –directory 1arg+s? e[  _u+ "]÷°Logging supå
ÿ€===

log"V = ""Ù ñ  # Filename to log to, if not empty; Žp = None;  object>   0 ñ	

def initlog(*allargs):^¡"""Write ay þ~ ƒthere is  » !.
5 ñEven though this funª . ecalledp ñ), you should alwaysE 0uses 0();  : pa variau@that `set eiŠ  Ý Ä ? ( pially),  do9`(once Ý   ³ ñ	 has been opened), or toE n5 @when… Á`is dis† #d)ð ¤The first  œ a`mat stÐ;w rFn	+ Qs (ifn …any) areF s¹  ­ %� árator, so e.g.2  ë µp"%s: %sŸa 1b")  awill wÀd"a: b"Q þ ó, followed by a newlineØ !If´ `global fpÙ  w 9D, it¹b"Pl‚ @hich; P data>  � ?tenc _  û } �ile may l Ud 1givQ € ' ÎP, in 3 ndÍQe.  T� J r!beD Qworld+ ÚS!!!  þ  U ` can'ty  W 0ed,Ò ? 1silC (sik%ñ no safe place w<@we c÷C  en†s error ib1"""% ƒ  œ 	 p  if™   ¶ © UpÌ .6try       =a n( sile, "aB # <@ OSE› 
? 2pas¯� B o  h!= G¡ FelseA  š  Ë€— (fmt, *—ÞÀhe log file.ð6  See initlog() for docs."""
    logfp.write(fmt%args + "\n")

def no; @*all !):7 ð"""Dummy function, assigned toV P when	 õging is disabled{ Bpassc Pclosef ^ C @ theC U file8 `global ,   	 p›  Ò �ile = '' !if' pº õ v !()$  q = None Tlog ==)

  1  Ð# The currentk ò �


# Pars \s
# =  ) òMaximum input we will acceptRàREQUEST_METHODYòPOST
# 0 ==> unlimitedC ²
maxlen = 0k�parse(fp=æ Ó, environ=os. ñ, keep_blank_values=0,ð pstrict_I öing=0, separator='&'Ã õ Áe a query inÎf m+‘or from aàõ (default stdin)
t @Argu1 �s, all opq6al:" "fpœ  :R “pointer; Z a: sys._ v.bufferC ™ B $ : z 1 diæ7aryM 5G =à: flag indicat�whether c c5 inï  ƒ ð percent-encoded¸ðms should be treaå#asG  –Ings.F bA truec ‚ res that7 S PretaiÀ)asE § `  íP_ fals` C  ê 0are#èbe ignored andÑ  if*Ry werˆ   Önot included.s › ‘p atr ƒdo with ºk error2#IfÔ ({ç #),,  ¼ „silently¿ 
s!Ift2 @raisVJEr 0 exÎ8ionÄ Cp: str. R`symbolº 0usei E Ÿ Ya
‰ DMs@ & ôPif fp: Ffp =!`Á# field keys¨Å(Å –  �!s)RreturD È 2ingLQ# an Ì ¼ €is requiüPto deä ôP byte "adbself.fØô if hasattr(fp,'N q ! d = fp. ‹Felseë   %l–5-1'ñ âp.read() must Ó š J Àif isinstancJó , TextIOWrapper  � Q)fpkiQ:t 'Ç'‚¦ �[- ]· @GET'e Á   # For tes_Ðstand-alone
 ó   if environ['REQUEST_METHOD'] == 'POST':
  õctype, pdict = parse_header(I õ CONTENT_TYPE'])= 1if @ Y ÷multipart/form-datah  o creturnd / 3(fp€ Å, separator=
 n )elp ñapplication/x-www-x «urlencoded~ Þclength = intÜ hLENGTHÞ  ³ äif maxlen and C > G ,   óraise ValueError('Maximum content † Pexcee¥ à  @ Óqs = fp.read(o @).deÑ (Ø 6ing3 Jelse… A  ''L  ”# Unknown� -ýÎô'QUERY_STRING' inM
e qif qs: l …qs + '&'G  w  D	Z ]. ÕÏsys.argv[1:]j &E ^ 
~   =¼ ñ   # XXX Shouldn't, reallyž š ì ç 	
¥6if ª ï L  É é!""«  s‚ ë ™qurllib. ð_qs(qs, keep_blank_vÜ s, strict_- Eing,ˆ  Œ  ¾=	 ï_

def%	@ °="utf-8", ek¸s="replace"Z B'&')T@"""Pß {� input.
½ ’Arguments. bfp   :" Q file% ( : .aionaryKÀaining otherº ¡ameters of 1entj XI Å ½ ¤: request  rÚ ñ handler, passed toD  gÂFieldStorageÈ Rf8s a¦ �just likeŸ  seØð): keys are the fJ Á names, eachd ï  iO @listÓ  ¢s for that9  . For non-, !s,Y 0 M 	G  AAngs. "Êð # RFC 2026, SecÝÅ 5.1 : The "ºp" bound�adelimip Ë aalwaysU ò# represented as 7bit US-ASCIIy G =$[' $']xr'ascii'wñŒ ð;– P={}".�4at(Q @  ç‰Message( P.set_—(i  2try• òA 1['CRÀt-Length'] =ñ pdict['CONTENT-LENGTH']
    except KeyError:   Apass ófs = FieldStorage(fp, headers= ´, encoding=	 0, eR "s= ,M  Z õenviron={'REQUEST_METHOD': 'POST'}, separator=
 )A ò return {k: fs.getlist(k) for k in fs}

def _par> Bm(s)Ú òwhile s[:1] == ';'  ˜  è Bs[1:  òend = s.find(';'ƒ   H    ð> 0 and (s.count('"', 0Ud) -  '\\ V) % 2{  S  M m B F + 1v 0if & ?< 0; Vlen(s- f» V[:endÑ yÇ– f.strip(, û Rend:]<;_ÝS(line@@"""PVó a Content-type like!.
©R©¨the main c/  1 a —óionary of options? 1"""G @partž Ía';' + – $ akey = * “.__next__Ý ûQ = {}*  %p%- Ei@ ç=ç|if i >=p@name2 D[:i]Lc.lowerw  Ð  Bvalu* Ei+1:, Œ      0if º+ )m 2P ![0§ -´"´ A   " 1 =  V[1:-1õ      $ ø.replace('\\\\', '\\')  ®''" D P[ ]J Í —Bkey,oÐ


# Classes wf{sCO
# = 0

c7 X Miniw:X@"""Lm ,b ðuse when no file uploads are possible.Y³ ó# Dummy attributeï0ileà q = None+  d ó  n     _Ð}pdisposiæM  4 ‚ "{} Ú@_iniå`self, ¯ ,û§ «ò"""Constructor from … 0 d 1    Q .  =W ÿ  	B !# 6 ‘StringIO(- )µ prepr__(. 
¨ , printable * `esenta.	¢ rX"Á(%r, %r)" % c Ç  J4lf.Œ [<W ßÀe a sequence•1`s, reaÝ` multi=£/form-data±RThis º€providesB�ing, typ  # s °ed on disk,ŠL more.  At 5òtop level, it is acceÄn@b, whos­ðkeys are the fielòd names.  (Note: None can occur as a fiel) ð.)
    The items are either a Python list (if  ñe's multiple values) orG 0ano#   F` ú Storage or Mini àbject.  If it'” asingleG o €, it hasv ñ following attributes:
.  ð :%  w  ñ, if specified; — Awise8 Hfile<  : �; this i• ~  >Äclient side V s, *not*˜ !le— � on whichÛ %isA ²stored (tha‘temporaryP ò you don't deal with)Å �þ  àÒ*string*; forC �uploads,Á y ñtransparently readÚ 3 ¡every time� qrequestÒ l F òand returns *bytes*ž  �  
 ‚(-like) ßS from à  £ � ` vdata *a"V ! ;À ÝAthe & 3is ?Pa sim–þ ƒ Btypeƒ €content- ,–fif not,6 Ð_options: dic
  �3of  3  Ö � a BlineT pdisposiJ $: ,  ” + ›  correspond*© ~ §headers: aÏ ’P(someðòs email.message.M  5aÚ qsubclas1Qreof)Õ 0ain| c*all* u ‚  d1 4is = �able, mos€ ­ I€purpose mPverriÏ x   Qmake_P“) method,Gñis called internally to come up8G  qle open" x ¶  É€writing.0is n s¯±possible toD oš e°Áefault choic¹  ”S !llNus in a ÙD  directory z `unlink5 @themÊ@soon áthey have been¸ 2ed.W2"""L ðef __init__(self, fp=ä,ˆ ñouterboundary=b'',A  Ê ³environ=os. Ñ, keep_blank_ Ps=0, l`ct_parÁ/=0L  Slimit| @encoÎÿ
='utf-8', errors='replace� �max_num_·sJ õ separator='&'):Ã  """ConstruZs.  Read²óart/* until last partH û ãArguments, allê#ali "  fp  :Ý1 por2; d	ò: sys.stdin.buffe 8 (s‘used whenB^Ò b2GET�6 vCan be ë   ð1. a TextIOWrapp·er object
  S2. an ñ whose read() and õline() methods return bytes
K uheadersY ":  ó dictionary-likej ¥; default:B  ; ötaken from environ as per CGI specr ôouterboundary   : terminating multipart # 	i ö(for internal use only)^   –   :‘ GmentÕ É C os.6 G òkeep_blank_values: flag indicª �whether &  & 9 in¯ ðpercent-encoded forms should be treated-G ‰strings.F bA truec ‚ res that~ S aretainT 	E 
` T  TheÌ_ fals` C  ê `are toÅ Pignorq (ndÑ Éif they wereG Önot included.s û ¯ct_parsingp atr ƒdo with ) k error2#IfÔ &(tç #),,  ¼ “silently ¿ 
s!Ift2 �raise a VEr ` excep#Ä plimit :™d§ ly·  � ´ Vts ofç/R-data,+rto exitZ Ë  F  '�loop whenê ched. It iºe differencxpbetween–l P contžalength8 d @numbtf,0 alv y™   »ß5ing/:e  Z §‚ handler!Pto de . 	_  biy  s m>  P Mustu © @same;  pcharsetÓ þ	N  4 $ �page sendB   |$ (`type :0ù a http-equiv orM rð max_num_fields:÷�. If set,Ù ùn __init__ throwsG	\ 3!re¡ mobbhan n \  ì@d byG‡se_qsl()}5"""N õ… = 'GET' ]self.Ü= =  
3  œ  =ši 
- 
: =  
- �separatorU  # ôif 'REQUEST_METHOD' inÓ
„ó Í[: •].upper()_ öqs_on_post = Non5 ifShod =I8 or ZHEAD'†  ² ÏQUERY_STRING°  žDqs =Î '['8 ÀG']
        ð    elif sys.argv[1:]:
  Gqs =# ]! Oelse3 )""* G ñqs.encode(locale.getpreferred ù
ing(), 'surrogateescape')M ú fp = BytesIO(qs ÿif headers is Non¢  ! þ= {'content-type'Í ñ"application/x-www-form-url½ Eed"}¨ ‡ ƒ 5  m ÿif method == 'POST–  è# Set default Ã P for 6 ð to what's tradi¶ %al   k   ˆ [O] = ï 	N þif 'CONTENT_TYPE' in environXx 3 [M 
y l ÏQUERY_STRINGl ôself.qs_on_post =— )['E d Ð oLENGTHf Ò plength'LÔ Q r Kóif not (isinstance(c þ, (Mapping, Message)))dóraise TypeError("@ ¢ must be mF t or an g J of ¾ ) ‚"email.m€ .ˆ "�vr =•3_if fp£: å œÅstdin.buffer> ## % r.read()Ó €return b+ åEûfp, TextIOWrapper:Y \ = fpw ¦€hasattr(^ '” }') and  _line'®"fpÖ ÷ be file pointerc ”¯ 
õ  –1ingñkcoding!   áe	 ? |6âouterboundary,c9o'4 Ì ž,Ü5%s'‘  Ì   % –(H «).__name__k	& 9 =  Û „ _§E = 0„  @limi$ 8 •# ProcessoadisposYÞI c `, pdicK V"", {ç ¾´ ) E _ƒ 6
ÒT bparse_* (6 Ë\ ð])
        self.dóisposition = cdisp
  Pself. ! 0_op( šs = pdict) µname = None @if ' B' in4 :  e b  ! S [/ ]& " Cfile& _  c 
% g  'k €_binary_  : =  bis notã ¢ ö# Process content-type header& 
 ÿ Honor any existing; ñ.  But if there } F n  ö, use some sensible defaults.  Assum�ð # outerboundarya P"" atp  ± level, butV  th¬ ˆnon-falsJ õ	inside a multi-part.  Th€ ! fó p inner    p ·text/plain,Ú  o / ¢ / ñt should be urlencodedg $is XcatchL ðogus clients which erroneously— Áget to incluÄ ZK Ò. 
   See belowQ ¶ what we do¿Bdoesð/ aï it happens� b×t�Z æn't understand–  sÁ ÇÀ s‚c­,œ Rarse_* (6 )['U %])ý Belif(­Oÿor method != 'POST'{ 
"W", {}a /se: 
€'applica�Æ/x-www-form-%'Q Ø  ø  ò  k  ë _ã [

Ÿ F é*  Z 2$[' 2'].Áf 6ing  w  Ü(rsž=' ž Eb""
0cle%-1  ö  alengthü K -W:try Ë X 2intõ : [[ ] 7 þexcept ValueErrorZ Epass­  4 `if maxÈ Aand y > > Wraise` ”('Maximum¨ ™  Š Veded'` =i ˆ Plimitî ¼ � := 0Œ L . K L  (st”n% 0don‡0; 1if åC == *Àation/x-www-÷form-urlencoded':
  ¦self.read_# %()# ÿelif ctype[:10] == 'multipart/L # ø(environ, keep_blank_values, strict_parsingq /se¢  * Qle()
Ÿ Àdef __del__(Æ )7 6try  í     .file.closC     úexcept AttributeError= Hpasss ^enteru preturn k 	. 3xit- w, *args©  - 
˜ Û ?repg  B"""Rj Àa printable , áesentation."""I  â r. ò"FieldStorage(%r,  e)" % (.  2   š Qname,Ò ¥  Ç	‰i	  ¥y.keys(): dgetattë  , g $!if Q != 'w v[raiseÁ(D Õ &ifÅ 
Üç fseek(0‰ o & == * % C = û list is not Nonâ	g  + ¹ ,el,  F ' ã |ugetitem7keyY`"""Dic0ùary style indexingB? ›  Æ  | 
G„2Typ@ ("é L  ž"V¥found = []½ @for ¦ " i=.g 
_ !if" .Ö ƒQkey: K €.append(A f  3"ot" 
J © 1Keyè(‰ qif len(X )g 1< I  &[0Á ¥�* �1get¢	 °y, default=S›ôget() method, including| lookup¹4keyY
Î ‹ ÜF[keyÐ  Õ r¡sinstance(,  , ™¥  (   î 1[x.(  Ñxu  
X ,B 0 E •1 o :	__first_ EAthe 7  ~ Ÿ receivedHgˆ ;[0]	 (  8 5 À        else7:
  ñ return default
 ödef getlist(self, key)8 R""" R8  $ ñ of received values."""K  j  if@ @ in M G   / ! = U[key]6   áif isinstance(,  , s �  (   É 1[x.( ` for xu  
X Jelseˆ B 1 F 7 3 q ]5Akeys2  ð"""Dictionary style¬s() method, %.å { is Nonª õraise TypeError("not indexable")A   J á(set(item.name   n &))È Á__contains__Ð  Õ 5 Û S7anyÖ  ==XÝ Ü 3len× §élen(x) support¨]!en .ú
CNboolh !ifìá0Canäðbe converted to ` .ð  ”  úÕñ read_urlencoded$ 
 Internal: , P data#1queº@ring_*ma#qsÁ@.fp.: [ v.length�0if Ç Ñ—qs, bytes‡ ‰ãVJä£%s should y7 µ, got %s" \ö @  "% “ ð fp, type(qs).__6__)£ Ê Pqs.de#4 /Bing,¸eus3 Ðªqs_on_postY²qs += '&' +A ) ´ aâ= urllib.parse U_qsl((  Ø  4´±keep_blank_±s¡ pstrict_E  ¶ 	= Ì =B  ", Õ  á ,8 âmax_num_fields( 
  } rparator #se +u  •� = [MiniFO ÂStorage(key,>)e Ì „ŽK ³skip_lines(çQ @Clas™ Bþ Ÿa_multiÞ�, environáP	K¥;""",°a part that· it¢  i   	<$ib0Õinnerboundaryr)dvalid_ 7(ib�  
	&1'In4  4  9ƒ Àart form: %rÃ' % (ib,))
  åself.list = [] 1if  µqs_on_post:  : òquery = urllib.parse Y_qsl(,  0 M ,^ ókeep_blank_values pstrict_V Ming,N ‘encoding=W  ƒ, errors  < Ómax_num_field, 
  … rparatorK #se 7Ô  ;Ð.extend(MiniFW ÑStorage(key, Ú f) for  A in D%)
Þ rklass =H C "or 0__c %__9 ¤first_line> pfp.read ¥() # bytes0 öif not isinstance(B ,, )ïpraise V¤EXò("%s should return7 µ, got %s" \n  + 1% (¼xfp, typ‚ ¬).__name__§Æ _Ù w += len¸ Hð# Ensure that we consum õe file until we've hit our inner boundary¾  wh1 i .�ò p() != (b"--" +™B A U) andF  ha Ã	I 9ªPropagate æá into the sub SÖ appropriatel8 ¡
 ¡ -ifh snJNoneU
B " -ÓÞ  VÒ…;TruB  ! er = FeedP„*r(¤phdr_texÞ5b""¦  �U   Odata‰ * a 0+= 6 	c  ! m  ;
 %   Ybreak? ; c 7 3 ## `takes ¬Angs,‚3	a l 	Vq 
KY d.feed(" r.decodeÌˆX �Ä å `headeræO gclose(ì & ñ# Some clients add Content-LengthNSpart Q a, ignoô)emä Sif 'c= l= '}8 T4delU [9 ]­ § @limiZ Û 2 1is  Belse0* - †	¾ ä != f 2½ þ , ib, environ, Nð
                 õstrict_parsing, limit,
  	 ¡self.encod/  ñrrors, max_num_fields,  ¹separator)
V +if0 Ù is not None:+  „ 
\ ] -= 1$ Îif part.listB F Elen(5 )S z ?< 0\ Àraise ValueEò('Max number of « exceeded'-Òbytes_read +=Í  	� /  é q.appendÅ 
À rdone or�O 2 >= �length >Ù Ubreaky u ³skip_lines(Ã @def ´ _C0le(' )%Á"""Internal:( ¢ an atomicã 5"""c *if• =–  ] .n zbinary(õ  	£  ø  ;elsX, K Ï  (    ³file.seek(0é ðbufsize = 8*1024+  ñ# I/O buffering ) Àfor copy to O 0Â  n 0
( h data.- 9 .X  ËPmake_ Dtodo  ëm >fbwhile  ‚ ò  ‹ U !fp�P(min(2 ù-Q)) # vw  A   !ifñ°isinstance(W ,.  ,  fò"%s should return? †, got %sZB  !% ¶‚.fp, typŠ º).__name__)e C |Ø ° L Â - ê    F  N ©>= -Ú ' 
‹    9  òS.writ¸ j —" =Ð&- ¨ ) � R }¾'   until EOF[Ùouterboundary£Ð_Ä�
 p 	Å_% @ = B0IO(BQstore2 asã ^ û sÇ  ä % ®^  St¨_ 0as 
1ngsV Sother²] Ë 	í Ì  RI_to_. —« 
= 8eofe"__å 3 «*ne© š GSalway&,dð string"""
     ÷   if self.__file is not None:
  
( ú.tell() + len(line) > 10006  A _ ] =k Amaken )()c  - Sdata ( “ Ÿ.getvalue.  [ p.write(> T & M ! =Û w Ö abinary– 
Â Å# keep bytes7  ª V  × | " ;elsAõ# decode to string- O .2 (k ’encoding,E‘errors))
F �def read_† �s_to_eof8 )Ï Á"""Internal:.  . á until EOF."""O  ‘  wh1?    1 Ÿ0fp.s   Ÿ(1<<16) #(?_/ 6 +=4m  \ !if{ P 
u   ™done = -18   Ybreak 1 "__ T *ßouterboundary4	; .€ DÅ"isd"as#: d qies and}õ ends must be convertedJ "to= ö for comparisonsl ³Snext_f ²y = b"--" +1	¬ a 9las3 
C +C . QdelimY (B  aÕ_lfend = True3 õ5= 0 Y  ÂŠXlimit‡,30 <  1<= Y )
 œ ´E… ÓU3if � Û>\r"þ ì ' +c	f j  C Å  !if0 Á.startswith(A)‚ç{  ÔCppedƒ   !.r ¹  î6tri0 )= z_  ¢ Ü  L  ­ 	L  QP X n o; 	Y= Ð;W\r\n" T   = E" 	G     :! =Œ^[:-2]!  ´ & r D /el‘ � À            ð    delim = b"\n"
  pline =  ^[:-1]! @ast_ Ù_lfend = True' AelifB ù.endswith(b"\r"):'  w ð# We may interrupt \r\n sequences if they span
 o 2**16I  Ýbyte boundary  ö rö 2LFals÷ .seâ y w  LV âself.__write(oN +^!)
æ �def skip• s(0 i@"""I[Anal:' ; Õs until outer5 l¦defined.""¯ pif not Z .2 f2 or ;donû areturn¡  èUnext_7  }R--" +> 	T 3 l3 
C f+ b"--¤ . —Qwhileª
¢ 2 " =‡ pfp.read u(1<<16)Œ  Ã ÿ  e s_' € += len(/ 
) /  
m F  /Y = -1a   Ybreak K ›--") and õ n  atrippeÔ Ö .s (³  { 1if  / )= s^  6 ±   L  ¬ ÏL b X n W  k�  yG'\n'*Ÿmake_file) ÒOverridable: Á0 a í  0 & …  A . — @The  ö	 will be used as followsï ‘- data isL •ten to itò†- seek(0Ÿ2  ‰ P from1 2 | ñis opened in binary mode forž  s, Atext B    @othe& HeldsØ ¡is version]  s a tempor^ ó  >  š 1ing” $Eing,_  ©°immediately€ðetes (unlinks) it.  È õtrick (on Unix!) isG Athat v gcan stnà, but it can't„b"anç �process,° "it¶Ðautomatically@ Àdeleted whenr é  `is cloá"or Ãthe current \ · terminates(ð
If you want a more perman:  Ø ,  õderive a class whicho¥úes this method.  \ ðvisible temporary file
  ó,that is nevertheless automatically deleted when the script
B ð  terminates, tr0 õfining a __del__ method in a derived classE Ñwhich unlinksf õtemporary files you have created.
= 5""" ðif self._binary_= :  ´ preturn `   $.Ti µFile("wb+")1 Oelse? 5+",>  o   ‘encoding=›  ú, newline = '\n')


# Test/debug code
# = ó

def test(environ=os. )­ ‘"""Robust( C CGI¶ó	, usable as main programNðWrite minimal HTTP headers and dump all infor#oB �vided toù # ñPHTML - b ¬óprint("Content-type: text/html‚% ŽÓsys.stderr =  "ou‡2tryø  m m ò = FieldStorage()   # Replace with other†Res to*QthoseÇ  K € ²_directory(Š  �arguments  … ( 3 ¨» 1_us· Š  ó#f(Þ �   `exec("
 o­ óexception() -- <I>italics?</I>X =  R [g(f=fU fÌ p("<H3>W)pfollows1a0õ, not an actual ~ X:</H3o gW " ®¶ ×  z �1>Second[¹@a sm„Ðmaxlen...</H1k -rglobal    Q = 50 -­B ÜB_-   bÃ=None, value #tb	 Qlimit 0if 4  í 7 ³  E C, tb�@exc_èi¾±t traceback{” !  \T% à (most recent i last)Nflist =Z .g¡at_tb(tb, È Q) + \s  ë.  . g_only(Ô “Ÿ €PRE>%s<B P/B></ U" % (_  ±ð.escape("".join(¥ v[:-1]))) !     )z bdel tbæ† _4ïD›{Shell 3  � ë †Ð."""
    keysø = sorted(environ.keys())
    print( Â"<H3>Shell E1 ºment:</H3>") $DL  for key in !s:\ ` ü"<DT>", html.escape(key), "<DD ¨ Y[key]§ 6"</s º B
defÇ `_form( )� ð"""Dump the contents of a % Á as HTML."""°  . # +cForm C^ 	'oif notBP>No‡ fields.\+- +]ò  + ":", end=' '» ”qvalue =~ eþ   T["<i>"Q ¡repr(type(> 0)))_ 4</i?  Ó@ ; p l Ó¯directory(Ôuurrent % Óe û  ßC9 ”Working Df 	À2tryHÜ ãwd = os.getcwd3àexcept OSError 7msg5 ^"  �ƒstr(msg)äLelse; / 3pwd* Ê ')
û@argu¨s($ ¼ ‡  ÙäCommand Line A5 	÷ : ˆsys.argvH	~ ²d_usage‚ ~`a listx'  ¨ ð variables used by CGIA	“Œ  ¡ ½ oThese F ócould have been se´ñ
<UL>
<LI>AUTH_TYPE éCONTENT_LENGTH $ �DATE_GMT  RLOCAL @OCUMA 2NAMR D 3ROO3  1URI5 òGATEWAY_INTERFAC9 ÑLAST_MODIFIED( #PA“  	 U_INFO “_TRANSLAT+ ÁQUERY_STRING% ¸REMOTE_ADDR 2HOS•   IIDEN 4USE1 0QUE’ BETHO� uSCRIPT_ë mSERVER 2PORS   rPROTOCO1  °SOFTWARE
</©ðIn addition, HTTP headers së!byÎðserver may be pasD in 
 ðas well.  Here are somEmmon…v names:+ y b_ACCEPÐ  ¡CONNECTIONX V fPRAGMA SREFERV!  d1_AGzï ô""")


# Utilities
# = âóvalid_boundary(s
‘import reOð
if isinstance(s, bytes):
  ð_vb_pattern = b"^[ -~]{0,200}[!-~]$"
, Qelse:
   
7 6 ÷return re.match(8 ú, s)

# Invoke mainline
# =  % ò,Call test() when this file is run as a script (not imported ðmodule)
if __name__ == '__y 2__'Ü c ð
"""More comprehensive traceback formatting s Python~ Òs.

To enable¨ } a, do:
Cœ r cgitb; .1 ó()

at the top of your[ ô.  The optional arguments tq c() areg pdisplay±¶ - if true,È s,  & @ed iXÑe web browser® alogdirF G =setF Pwritt™o—sM Áis directoryL qcontextM €- numberæ  ûs	 PsourczdQ showdqeach st~ArameN ˆM @ - 'Z À' or 'html' m ArolsO`outputL îmat

By defaulË @but Lasaved,G  T  Á Qis 5 ¶ A
and 	b  ˜‡ P(for 8QwardsUàatibility with> `
origiÖ0use	â:P)

Al£€atively,Ìñyou have caught an exce “ Bwant\ Õ @ it
� `you, cV…¯.handler()d D %  Ý ða
3-item tuple (etype, evaleÐetb) just lik!e   Û ðsys.exc_info().
Õ� d –#s V�as HTML.
�
Atinspect tkeyword  žTcache $os
 Tpydoc %sy @tempV 5tim> vtokeniz Ò

def reset()HB"""RûPa str)Bthat% �1CGI§j `pa knownçRte.""zDð '''<!--: spam
CH�nt-Type: ù/ôð

<body bgcolor="#f0f0f8"><fo
 ÿ  size="-5"> -->= *A /g => < ›  `object
  blockquote €pre>
</t8  	 n À'''

__UNDEFç2 []# #7òpecial sentinel £ ×`small(aÛ G2extè R  <+ A>' +�c + '</ ®
C7 '?ostrongi , j  k À''

def greyð (text):
    if     ð	return '<font color="#90 Q">' +0 ` + '</# !>'H NelseE ñ'

def lookup(name, fr clocals† ð"""Find the value for a given 8 1 in  ñ environment."""‚ %if) \ �  1',   s[X ]< Ÿ ®.f_globalsE  'É * 
O à'__builtins__'¾ Y ( " =S 
F ¬  ¥ ¶Dype(; `) is t #{}S '   . Ô  !   õ" 3', 
 % ) 
ç  ¥if hasattrŽ ,‰ˆ  , g ?get; •. ò None, __UNDEF__Ró scanvars(reader�Ú{ ñ"""Scan one logical line of Python andž2 upys åvariables usedb q ò, lasttoken, parent, prefix,B r = [], ·  (''Á  
 ßt±#, L ²start, end,¥  ñ g Ñize.generate_- ö ç  P   O 2 ==Q  6 áNEWLINE: breakT, 1AMEb @ not´êkeyword.kwlist8&if w :'.'! l % ¡ U È,  0 ý$= = %> )Î  6   ¡’.append((• ° F¥)A × S VwhereÖÆ!q� 	‹ 3 P �  el¾ ¥ GÈ =oB+ '.x ¨   )" =„� Ù ) # =©'O á LN Ž Ø ƒð html(einfo, conF#=5“B"""RHða nice HTML docu³µ describingä•tracebackneÐ1, e�, etb = p � ãif isinstance(-  3 ƒ    6   0.__ñ!__? “pyver = '	 Ùðsys.version.split()[0]ë$:   `executG @date' ime.ctime( . (ã@headi „<body bgSbf0f0f8S`pydoc.R./ Aing(_  Å a'<big> A%s</  5' %% wstrong(H ¡escape(strÀe))),
      Q  '#f ð', '#6622aa', pyver + '<br>' + date) ðT''
<p>A problem occurred in a Python script.  Here is the sequence of
function calls leading up to - `error,U   PorderE yp ñ.</p>'''

    indent = '<tt± ñsmall('&nbsp;' * 5¿   </& : ±frames = [] `record òinspect.getinner* á(etb, context)3 Afor  ð
, file, lnum, func, linesÉ 0dexÏ ` :: » f6     H à = os.path.abs ( t  %   Alink÷ €a href="# ñ://%s">%s</a>' % 9  Öñ doc.html.escape )R Oelse‰ g %?'¸ •args, var	 ›kw, local>¡argvalues(&o  ý ½ U !if7z != '?'‹ . 0in ’�strong(pyÔ 7uncÔ  &W ª"<module>"^  ' b 4+= úfformat¿ ê 	 ó , J  B þ �=lambda  @: '=Å ¾ Qrepr( "))Õ E €highlighÜ%{}d °def reader(m =[ *])Ó <  …[0]] = 1D  _ ±try: returnªPcacheò ·Î6[0]· 9 �finally:ìX[0] +[ 0var@scan (« ,&%æ 0row0 ð['<tr><td bgcolor="#d8bbffÍ0%s Ò`td></t–%Ë  – t('<big>å  'ƒ0k, Ý)ä + !if5xž{not Nonû1i =Þ " -* 	n  ô $ Ó  s{ b mnum = ˆà(5-len(str(i))•  ^º  H    ®  k Óo  '  Š  Q q=&gt;%s3 1% (—s2pre¡(9 4 P    œ�.append(  `ffccee '</›N
3 M a     ‚ »  Â D° OgreyiÞôdone, dump = {},< È  °name, where"0lue¼ 

·0if +    S :WEinuej  R   [( ¿"ifOÅš__UNDEF__h  F "if‘ à in ('global',ï 'builtin'):
   ðname = ('<em>%s</em> ' % where) + strong() )C Belif+ ¿ == 'local'j 
O /se> 
– 
• þ .split('.')[-1]¤ ð
dump.append('%s&nbsp;= %sç Ø ú
, pydoc.html.repr(value))M /elž _  %P + ' N‘undefinedU5')
>Erows’ q<tr><td}€td></tr>š ðsmall(grey(', '.join(m )˜ VframeM ñ''
<table width="100%%" cellspacing=0 Bpadd  border=0>
 > 0>''ƒ 3'\nx  ² )Â ôexception = ['<p>%s:NÞOð escape(str(etypU,	‘  @ –]A Afor q‚in dir(e @!if  A[:1]žÁ_': continueB  l 5 - =Pgetatµ ! ,J È…\n<br>%sb#\ncbindentC !, P L°return head8nÕ }' o  ò'


<!-- The above is a descri�òof an error in a Python program, formatted Opa Web bîðer because the 'cgitb' modu^Pas eniò d.  In case youL °are not reaeR this… `  , c ¹  a òoriginal traceback:

%s
-->
Žm  Æ )> .ß _:", 'P, etbIñ
def text(einfo,"Sext=52B"""R¦qa plain. “ documenttÆbing a givenÃ A."""¥ û	| 1 = q  Ôif isinstance© .ÎC  6   0.__û!__? “pyver = 'ã'"£ys.version"@)[0]e$:   QexecuñG 0dat`time.c ( . (û©P= "%sÞ G" % à MPver, O ¯AwÒblem occurred± ¶a.  HerË ñsequence of
funcsscalls lXQup to è,U  ; Ò  yp .Fƒ_ ¾Iòrecords = inspect.getinner* E(etb - °, file, lnuS unc, linesŒ 0dex’ ` Ë 3 ! =: ð and os.path.abs (  �) or '?'š ã@args>r	 Akw, r
» Àtargvalues(fsrame)
  •call = '' õ if func != '?':  1 . ain ' +( 	  < ª"<module>"C G õ+= inspect.formatargvalues(args, var	 ¹kw, locals,q  N   B ? �=lambda  @: '=ª ñpydoc.text.repr( 5))
M åhighlight = {} ðdef reader(lnum=[ *])Ó <  …[0]] = 1D    ð
try: return linecache.get p(file, [ 6[0]œ 9 „finally: ( +[ °vars = scan (« 0, få2æ 0row0 Ã[' %s %s' % }  Ú%)]´ úif index is not Noneõ 1i =” " -* ; ¶ !orç " iï s<  # 0numx@%5d ‡ i@  !  ¬ À.append(num+*š.rstrip()% / iG ¡done, dumpÒ6, [Þ ð for name, wherek0lue­  F
¬ !if+    S ¥: continuej  ~   [S û"if‹Kš__UNDEF__h  F "if‘ Ò == 'global':  y j 	€  > %el@  ¼/? ê ! +N æ.split('.')[-1 F    6{ '%2, x /, M
”;els2Z  M û  + ' undefined'«„ �\n'.join(š ýès' @%s\nO'2  Géôexception = ['%s:Ástr(etype),   /Bir(e À - =Pgetat[ ! ,|¾ � 	Á pR" "*48 ¥Ë L@headD) d  À'

The above‘‚a descri°of an errorì ða Python program.  Her8 �
the origžñ traceback:

%s
''‚“  æ_’ r", OP, etbÞ ¢class Hookaò
"""A hook to replace sys.I  `hat shÞp sÃ ‚HTML."""é Îð	__init__(self, display=1.Pgdir=ë,æpext=5, ž s xw="html" ] .\ $ =f   f# send:sÝ b¬‡er if traM  lož  u	 H  [# logL  µ sJ ¾Àone
        ô self.context = 
   ô# number of source code lines per frame
0 P qfile =  ûor sys.stdout  # place to send the outputC @orma’ f	 
 Ðdef __call__(j à, etype, evalu Atb):,  ‘  # Ÿ.handle((*  )W &  2 ·, info=NoneL   ! =  Ô @exc_ %()r 0if C .¶ ¦ == "html"” ˜  ã.write(reset()�  " @ ater = ê R "==P `) and [  �  ½ƒ Æplain = Fals˜:try„ 0doc£^@ter(É ,½ Ö pexcept:™  õ# just in case something goes wrongŸ  A | ó''.join(tracebackä _o Pion(*– )‰  = à BTrueÀ  ykdisplaì  ifv*in 7 Š `pydoc.Nº.escape(docv  - Ú3ile· '<pre>' + G P+ '</ :\n'< Nelse{ N D 	> : 6 ð'<p>A problem occurred‹ña Python script.Y ‡0àlogdir is not ô
ª ñsuffix = ['.txt', ')2'][‹ A—]`  0ñ(fd, path) = tempó0mks (Z = a, dir=R ’  K ¿  áwith os.fdopenn q'w') as{
É  1   „ wå‘msg = '%sAains¤"deG0ionáthis error.' %å 	û Ã‚ ^ QTriedEave   æ%s, but failed^ 	_ ¾' g'¾'q Sô  0€%s</p>\nº ?msg­! È 1+ 'T V  ¤| Wflush'r pass

| ëcHook()³
ïsenable(×B=1,  Ÿ,¤rext=5,  
â"""Install an v  Âr Cthat9 s‡sBRHTML.`T¤óptional argument '” À' can be setÁ0 �suppresså 
"thŒ	ì ý�browser,Ñ'Ý S a`ectory] 3cauÚN s 0be Ù0ten  õ¼are."""@ Šàexcepthook = HÃook(display= ’, logdir= ?,
  ƒcontext= ’, format= ö)
"""Simple class to read IFF chunks.

An ¢ (used in C ñs such as AIFF, T ñRMFF (RealMedia File
F{ û)) has the following structure:

+- ÿ+
| ID (4 bytes)   |& Gsize( & Gdata1w|
| ... _ @
Theˆ pis a 4-Œ  ¸  ¿ ò which identifieÞ rtype ofG!.
? ¡ ðfield (a 32-bit value, encoded usS ¡big-endianö ³ order)
giv_ K !ofI0whoÂ °€, includD  d8© ñheader.

Usually aÔ-¥  fi> ponsists³ ²one or more¿ @s.  ÿ Ñproposed
usagÞ  d Cy Aádefined here iQ°instantiatew  `ce at
> Pstartv Beacho B andˆAfromã 6 €until it  AchesD ²end, after Œea new 5 cGe Š ad.  At[ Cend
I 
p, creatAF àwill fail withÌ ñEOFError
exceptioncpage:
whWQTrue:¡2try	  j\1 = ;(w )% H  X 1 Qbreak# ; ¸=.’.getname(C x  o ó/  á (nÀs2  " pif not ) u   Apassx   °# do someth  3 Þ�interfacù Ô S-like;fpmented @ Pods añ � ù, close, seek, tell, isatty.
Extra4 õ skip() (called by@ 1kipu Z0endX  55),
+‚ (return¬ ?Z (ID)0 × ƒ__init__ƒ ¿ "Ðrequired arguÚ E, a ÷ – object
(�a°‡Ace),é L o=*alL 2lagÐR
spec[pwhether  ±Ù JP alig{Bon 2ö“boundarieÀ€
default™t1, i.e.6 ."

–Ddef a(self,ã ,8 =ßR, big¬  ó rr=False)L  B`import95uctX Y .Ad = 4 
 Ü " =v  H D  # #to ’to word ( &) O &if¯ —  S @strfrU= '>'0 3elsÁ $   ( <( Ã  þ! ="A  §f .ö)(4€1lenbà.chunkname) < G4:
  åraise EOFError :try( õ2self.chunksize = struct.unpack_from(strflag+'L', file.read(4))[0][ dexcept@ ew 
k 
“  [ U NoneB Úif inclheader< § 
¸ ò - 8 # subtract C Y >  à _¹ E = 0 `offset g ó etell()8 î ¡(AttributehA, OS	 )¿  pseekableFFalsø Oelse0 QTrue
| Àdef getname(× i à"""Return the " � (ID) of �current íA."""P  3r6  O  < 	o  <o  " j   7 j Mclos× rif not ž  ! d,Â Ó . Gskip³  kfinall  1 € Jd = plisatty /if” ëBValuó("I/O operation on l  \"W‹ ¡ ñ : ú , pos, whence=0ýðSeek to specified- ip Binto ê.Y  ö wDefault)  s 0 (startÎ,)0 IK µ 3 is˜Öð , this will resV ain an 
C  y€ DB1 : t
3Ÿ«R("canb'ek‹#ifhZ == 1A Ppos =6" + È]Û )elA 2A j F A !ifa a< 0 or >l + 
S Õ bRuntimvK Ý µ.J.ã+Z 6, 0ƒ-  Š Ð ç £ # |ÆB
 k .Ž ˆ  ÉÉ  ,  7=-1‘ 
¡ad at most" b bytesv  F—"If&  is omittedv negative, p  \lH5end^`
[èQÀ self.size_r÷	ead >= self.chunksize:
  ¥return b'' 0if ( J < 0,  O " -`   ]_readH >! � 2 f *Sdata • Pfile.„ (Ž )Š   ¡ .  `+ len(J 4   8& =f É Uand \f "  é malign  († = J& 1)ú Tdummyž Ì 1•  ¹G – u  Í  L 9 ç ã 
± �def skip– ˆ ñ"""Skip the rest of ¸ .;  … ðIf you are not inte. Red in0 yontents@ ,@ ñthis method should be called so thatH  @ poiK 'to@ ee star  [next ¥ 2"""í  ² Ðjclosedyòraise ValueError("I/O operation on 7  � "WU {seekabl\:tryh  ˆ ná­  ·æ  0   Á# maybe fix ^Mment& � " €Ýú s ^    – ]n + 1V o ÷ .å K(n, � ? %  Ì anY rz	 ‘except OS†<Epass1 \whileý< \
D  æ ›min(8192,* †æ â 	œcn! !if
( 
v  ? b1EOFÚ ð 
"""A generic class to build line-oriented commKb°preters.

Iq � construc0 Qwith ^W BobeyI€ollowing/ 0venÙ s:

1. End§ å ëñinput is processed asD � ¶'EOF'.
2. A¡ Ps par- !ou–AeachÍ ° by collect  Z0preÌqcompose3�of characâ FPident  -xmber.
3u P`foo'«  dispatchedIa[±'do_foo()';Á 3do_  G ã  as³ Ða single argu] %1sis± �remainder, Å  ©€.
4. TypÙ ‚an emptyõ brepeat8Dlast)ñ.  (Actually, itõ'  “ `I  a €', which # overridden$Qa subéð.)
5. There is a predò:efined `help' method.  Given an argument `topic', it
   calls the commandC _& ¥.  With noA s: ± lists all ) sK w* d‰  ˆ ó_ functions, broken into up to three@ Q; doc¡  edL c� ðs, miscellaneous W 3 †, and un9 Ã ws.
6. TÔ ò'?' is a synonym foré :'. * !*  � - Pshell7qf a do_ i0 exp.
7. If‡ 0pleø  u …enabled,  ng  lðs will be done automati” y,z  â 1comN Ang o\ : @args_ : !byÉi[  / €e_foo() •J  ñs text, line, begidx, endidx.   V 0strM ñ we are matchingI qgainst,ýPreturx" qes mustV nz Q it. l  U t’Qurren{Rinput  (lq Tpped)• Þ˜ „  =  ¯  nn™  !en+pindexes $  ß 0 be% • àd, which couldm@used�pprovideÖ Pdiffe™  › @pion dep� sng uponF AposiÛ m V€is in.

u„`default‡@ mayw  overridden} �interceptr Ó h« €there
isy3do_g` eh Ú s 
d  that haveo ] u ódata member `self.ruler' set@”haracter `ádraw separatorêAs
innÉ messages. 7`empty,„ [ 0  7 G n# #t ò sA�"=".

IfO Pvalueœ QintroÉ1nonX 0 whx ‚cmdloopT a  p`ed,
it  pr›qd out o±PerpreÙ qstartup32is u Þ@
vias op(%al; ¶  6c‚ #()„ ØcsdÃdoc_header',   Band
ó 	  –= s“ ` € |›0's
Í1ingCN" …ó€
2 ð respectively.
"""

import éó+ng, sys

__all__ = ["Cmd"]

PROMPT = '(Cmd) '
IDENTCHARS =? ô.ascii_letters + Pdigit ð '_'

class Cmd:ã€ """A siN  framework
P writ1 ”-oriented˜ ³1s.
K BThesPoften_1fulL 0tesMðrnesses, administraP tool ¼  prototypeD"at lam`be wrað in a more sophis#ð ted interface.
ö
    A Cmd instance or subclass ðis a line-oriente1 ‘terpreterG óframework.  There is no good reason toS Rtiatex átself; rather,K Ðit's useful az Rsuper“ …of an in}   ð you define yourU L rn order| Pheritx ð's methods and encapsul– daction !.
G 1""" ñ prompt = PROMPT ñidentchars = IDENTCHARS ±ruler = '=' plastcmd  Áintro = None" pdoc_lea³ #= v   h RDocum…òcommands (type help <topic>):² Vmisc_= ÒMiscellaneous1 0 s/ *unm U o , !noq ’= "*** NoO Ron %s| °use_rawinpu41LÐdef __init__(©ð, completekey='tab', stdin= 1out !):& ¹A"""I¶N¡ �ƒ  ? `The opìaal argå ' '‹ 'Ã0the¿dþ` name ƒ… /  2pkey; it‡Paultss > ¸Tab key. Ifé 5 isF 1not� 4 2rear QmodulL‘available/ ÷N 5ionJ ðis done automatically.’í seu estdoutG àspecify alternÅ -0outÐðfile objects; if Å 8 2iedÊ hAsys.Íh  pout areædc , g  #ifŸ H ý "  <[ =, À Oelse- 	† i8n  — o  % p 1q / r 3 ¿ Õcmdqueue = []¿  $ =ì #Ä GscmdloopFL& òRepeatedly issue a È‘, accept Ýr, parse`Åitial prefix— Boff žAceivAput,Ù€dispatchö
C X Pssing< mM I @mainìoZ f ô�= !1preþ )  4Ielf.y ´0 ¬ C
:try  ^eimportüd     S Dold_W  è¸F.get (¢  :   ) s) U Q 6 ª‘_and_bind .7 ekey+":1"G Àexcept Impor›tError:
  Epass :try" úif intro is not None"  O Rself.( =0 R   6if " > östdout.write(str(2 y)+"\n")S astop =� 	 Qwhileª  " l ‹ cmdqueuÌ   ± bline =µ * j.pop(0†  , ?elsF l Îuse_rawinput’  D   {   • G nprompt“ 6 ¯except EOFü)   _ Y'EOF'S    é   ¯
Å £ 7 oflush(Ï ¢ 3 pin.read 5 !if@len(* )� Æ  # ? =  % 	 " G   î.rstrip('\r\n'Ý  $ kbprecmd¨ ƒ Ð) /on) @postS  =  , l 
‚ L % GloopFnfinall0 ÐC and(›ompleteke7  Ýtimport Éö  =  c.set_cg !6old 
Ü  ; If 
~ Cdef ‰ î 67ð"""Hook method executed just before the comm u& icñinterpreted, but after3 Û 3 q`genera]  I rissued.¦  Ý 1"""²   areturnâ! Ç þWelf, Î š aË €dispatchœ Ÿfinished.†   j † !re^ NH‘once when1cmd= )p{is cally À 	ø 6 s 6‹about top�Ž @arseµPP" ï  '  A&o vAnameg a KÕng containing�  rÑarguments.  RÀs a tuple coóntaining (command, args, line).
  ' p' and '$ ñ' may be None if the7 � couldn't fparsedI 5"""U  d ! =4 ….strip() aif not :  � areturnu ,  H $ Aelif7 ª[0] == '?'A  . Â = 'help ' +- ?1:]C !C úif hasattr(self, 'do_shell')m  ² q ! r  ' Nelse= ï ài, n = 0, len(k D±while i < n·  p[i] in · õ.identchars: i = i+1"cm B[:i]M[i:]®¦ 5 * 
M £def onecmd, † &Á"""InterpretCðargument as though it had been typedÃ �responsef  A!to@ rprompt.~   DThis¬ðoverridden, but sh¬kõnormally need to be;\ 3see] Ê )P@postØ ö) methods for useful execution hooksRThe rÅðvalue is a flag indicat�”whether iaL %of“ ’As by› * $er× Gstop	|
«" =® ¡JŽOQempty= ƒ`if cmdã  &
ß< {defaultw  !laf‰ÿ æãZEOF' ] ; (''9  “  ×‘ ¤:tryy  r«func = get$ o6cmd  . þexcept AttributeErrorU ž  M &  ‚ R(arg) …Ÿ 
‚ Called whe* +  ºeƒ
t  ïlI o >  Æv�it repeatÞ e ÞA nons ¤Ü { Ä"if¶ D :cmd3	 ì .€.- | + ºoBinpu—. ® dprefixõ €recognizþÙ  °prints an e€ messagetI ß s Ë ð.stdout.write('*** Unknown syntax: %sñ$\n'%line)

    def completedefault(self, *ignored):)  - õ"""Method called to=   an input ^ q when n Õmand-specificL u b_*() mV Òis available.   w  By§  › À, it returnsq §empty list/ 5"""f , 2 []N î Snamesì Otextò  do � = 'do_'+ \ ð a[3:] for a in >R.get_a ò) if a.startswith(T )“  	Ž Zstate}Rú ô the next possible…1ionˆ '¨ '@If a%  ‹ð has not been entered,U n# 
€ against 4 c �  ÑOtherwise try0all, = P_<com6 >  geEst oiUions.G¯1if ÷ V == 0x t Pimporý ada?   @orig R = re  ‚  ™_buffer()2   4 = 9 {.lstrip%  ¤ped = len(- 1) -  D 
V lbegidx†  (7 R 	Œ ?end6   6 2if Y >) òcmd, args, foo =•Pparse¶ ( 
»  6 `if cmd|*''}     µDfuncR   :	×  0 OelseJ ?try  7  W g sgetattr'  q @_' +­ Å  @ ÿexcept AttributeErroro ½e 	Ö Ò  2 ± 	B 	@  Ñion_matches =? D (½,F,ã", î ?é_ [V]Š !_Index M FNone8Ó e ™d# ThisÄ"us@pull°base class É�s‰ ð# at a time dir() didn't doë6yet)–  '  ‚ 1.__W /__Ë S_help5*	° ž t"seî.Á X±(2 nDopic0 ?a[5ï	Û  ‰ '  Å � F[0])n è  s(¬ 1| t… ì (doæ 7argä U'ListMÀe commands wðith "help" or detailed  % w “ cmd".'
  uif arg:   °# XXX check y syntax# :try4  8 ðfunc = getattr(self, '� @_' +K )E þexcept AttributeErrorW l  p Kdoc=m %dok ‰.__doc__s  7   nif docl      ¼ ú.stdout.write("%s\n"%str(doc)Ê  3  mreturnv í  F Mpass@ ’ 
  nokŸ % (arg,)£  ›   ´(Í Jelse�names = c Aget_ 3  ² @cmdsnY = []»  @undo ¯ I= {}2 @for d 1 in s�  o !if t[:5] ==c(  ,  e [P y[5:]]=1l   ks.sortÑ ú # There can be duplicates if routines overriddeï@prevZ F = 'j � Ü 3Ü  ÒÚ  r )  z ‰continueÿ     ? ! =X$ @cmd=Õ :[3:â A    if\ ¶ sŠ ,¶.append(cmd€ I  1delÂO[cmdw Kelifs § )ÿ‰ 0£ âÒ <N  ªkleader· Áprint_topicsW.0 h0 0,  x  Z15,80QD Umisc_E Plist(ºŸ.keys()),J àK #, D RMdef Ê $, ‚  7 ,Ë Ælen, maxcol)¾_Ú YY P"ifÊOrulel Q 
 9 t * len(b o �columnizeàsÐ /-1+  
À U\n")
0G  }  , ¦ð, displaywidth=80):
     ñ"""Display a list of strings as a compact se  columns.

?   REach  € is only: @wide ¥necessary.2 CD ö* are separated by two spaces (one was not legible enough)J 5"""V "if, Eist:  ¡ ùself.stdout.write("<empty>\n")+ freturnÜ 4nonð	= [i for i in range(len(5)F  u  – ¡isinstance1 @[i],g%)] ) n 
Á ðraise TypeError("t 1[i]ð aH 6ingœ &%s‡  ö% ", ".join(map(str, ê )Î usize = è ®  := 1­ n¢'%s\n'%strü '0]b  ™ v    õ# Try every row count from 1 upwards‰  ’Vnrows–&1,± )� �ncols = (½ +8 q-1) //  V  ‡ €colwidth0 [¨  1tot Y = -25  � 6col� r †  C ^ I = 0B    F  ú iž F   - 1i ='+Ä M*colQ ( pf i >= û 
   _break@ x	Zist[i: Ò Dmax( �xó 5 " …s.append3 Nq +=k}*+ | T 5if , 2> dÛ/ ó ï B /<=C 
? Jelseg ¸ 8)	ZI = 1 V = [0lOtext±  < —MiI +š ™        1 Õ	  Ó #xawhile " A and J[-1]‹ K 2del-   	i ! óJ )w  s[col] =Q   e.ljustÇs" 
± ""$" —a  ‰ð"""Utilities needed to emulate Python'ýð	teractive interpreter.

#ð
# Inspired by similaô%r code by Jeff Epler and Fredrik Lundh.


import sys átraceback
fromI 3op ( òCommandCompiler, c
 "_c ñ


__all__ = ["Interactive ˜preter",  pConsole i0 F",
  "d ¡"]

class U ` := ‚"""Base * 8for. t !.
+ CThis( ñdeals with parsing7™ ¾ ñ state (the user'sD ðnamespace); it doesn't P O Àinput bufferW ’or prompt E $ €file nam g    ` ó is always passed in explicitly)Ï 2"""Ø òdef __init__(self, locals=None)( h0"""structorG   âThe optional '= ð' argument specifies 1dic* Qry inÐ  C QwhichFò will be executed*õefaults to a newly createdD Z ›pkey "__p__" set> B"__cL   î5keyD `"__doc /  ë  6 °   #if) r ( +  F = {… :‘  , p  : B }‰  ‰.C 	 
 ð; = o&()Ù“runsourceÚ $, -1="<OÀ>", symbol="Ð<le"úÌè’run some N  ` Úÿ2A�s are as e¼ (• 8òOne of several things can happen:Þ  + 01) |Â  …¬incorrect;r`() raiauAexce·ñ
 (SyntaxError or Overflow q).  A s"  ø �   ° prdO@call˜ Bshow< e^ —() method#2Ç  qmplete,pUmore å •required;N‘ returnedUQ.  NoGBs| 3|  L  z BV aª€ �object. �S%is¿Õ0run$ A() (öG ðalso handles run-tim¥2s, ±B¨SystemExit< ü ` value Tr 0n cèp2, FalsOŽQother ‚s (unles© Ùa7}  I A g  žbêEd toÒ ¡decide wheg  to F@.ps1hpsys.ps2˜ç• EnextD Gline°�:trys X1 = g ÉBile(¤òÀe, symbol)
   óexcept (OverflowError, Syntax QValue 2):
7  ‰# Case 1 ¡self.showsD eQ ©(filename)+ Õreturn False
 ÿ if code is Nones 2.  Š H 7TruG � 3* ™ 0run] ( � A ‰ Ddef ,  9 ,”  Á"""Execute a † object.É ‚When an dÀion occurs, R $°traceback()ð •called toµ ¥display a + f.  AllV Ãs are caught ? ðSystemExit, whichf ‡reraised« @A noÊ óbout KeyboardInterrupt: this\  È 2mayÌ i Âelsewhere in.  b`, and . Änot always b­ e.  TheC ý €r should& apreparÈ deal with ic5"""@ :try,Aexecéqflocalsö˜ $
? %^ - 
" Çÿ ? . $, 
=Ü
PDìBthe = >¢ that justur»T›†doesn't /Rstack5¢ because t¡* 7one EIf a›  $�given, it rstuffedÛeuinstead%@of w¬ 3wasm „before (ƒ ô Python's parserEusesF À"<string>" wCò reading from a  )¾ ‘The outpu® ¢written byh  §e(), below7 	=`ype, vêö, tb = sys.exc_info(5  Àlast_type =  º  I " =Q  Ì A b  &if„ 9 \  €Ž
� # Work har5 ¨ y† correctO –»t  @:  Ämsg, (dummy_µò, lineno, offset )é F.argÇ E 6 B
À  # Q# Notµ €format w§ °pect; leave…Falon* 7   ;paso +ls0 ' 0# SÁ¿ ri)Ó 		 . »u(3 ö $ G   $ifepepthookì 4 "__8  *__3 �s7:.73 �ion_only(<Ñ™ À     self.wróite(''.join(lines))
  Uelse:   ð2# If someone has set sys.excepthook, we let that take precedence
E  ú# over self.writ 
V ñ(type, value, tb)
˜ ðdef showtraceback(N )µ ò """Display the § 2ionž âjust occurred.S  ž ‘We remove5 ÷first stack item because it is our own codeD ‘The outpu%  à gten byð —(), below7 1"""Ú  ‡  Rlast_ý   „b = ei =‡f_info(Å6 $3 = ; j 6try4 { 5 = 5 ….format_Bä(ei[0], ei[1],R †.tb_next€  N $ifž % 8 ™ _P  9*__ƒ  9  Î¥ ' ©  ­:Q ±	 "  Ô " Ò #lfinallzñÖBNone™ ì Geäj, dataêWE— a stringU Œ ba² mplementatO As toŸpstderr;A µubclass may$`replacùis with a different iZ | Ñf ÕÄ 2


n ÷InteractiveConsole(  cpreter÷ ð"""Closely emulat� Ñe behavior ofÀiW � Python  L « RThis ‡ ¡builds on s ‘  2 ñ and adds prompting%Qusingr �familiarW1ps12  Aps2,  in bu?¬ ,K  ìƒ__init__ïplocals=â, filename="<c*#>" ‡ £onstructorâ    	 opü2al R P arguð  will be passed&th”W8g ¬ i Òshould specif™(& )Ó   ¬ ¾ *pstream;s§  õf up in£s‚  J E   º .`�{ –  • % =s  ! RresetÇ(”  ( 
œR5 ).´  5 .X V = []»3actcbannerqexitmsg 
s 	(Àte the interó
active Python console.

  ôThe optional banner argument specifies the …to printC abefore# °first intery òon; by default it: 3s aM D ¡similar toH 2one+  edA  ~ DrealÇ a upreter,C ffollow1 @currÅ ðclass name in pa ö heses (so as noÌ  to$0fusÐ qis with’  x õ -- since it's soˆ close!)dexitmsge  … messageS p€ed when " `ing. PØ  Àempty stringBŠsuppress@   a? a A. IfP  ‘ i
æ given or None^aÆ� 4 is£ë 5"""v Etry:  ousys.ps1 ÿexcept AttributeError3 � = ">>> ] 2] 2] 7...] ñcprt = 'Type "help", "copyright predits"*ð "license" for mpinformaX%.'” #ifø = `í ³elf.write("± %s on %s\n •(%s)\n" %R  W (c�version,  @plat‹  , Õ Ð5  s| !__-P__.__1E__))k %el¿ ·  ¦ 0" %�(NB 5= 0S zwhile 1O 7   !ifX
*     Ppromp±ñ s    Oelse; œ 7   Ž   qline = 8¢raw_input(‹ 5 *   ë?EOFå  !   L  >\n"F  % UbreakB    â u\ Ppush(¹ 
[ � �KeyboardI¿Nrupt3F ¢ 1 µ 4 Êresetbuffer(}  ¾ ¤ i—*
A'nowÄ à€%s...\n'‚Ñ;Ð M ýZ!= ''ð ¸ ì '× U / )@Adef S + !, YD ‘"""Push a  ˜ ¬C7 † ? p should“Ð have a trailÜ 0new# ;G1may  Í W  Ãðnewlines.  The lóine is appended to a buffer and the
  ðinterpreter's runsource() methodI ¹called with< ð	concatenated contents of% p "s R @.  I 'is|  diA as that6 @comm£ �was execu[ ±or invalid,% Ë G òs reset; otherwise( M äis incomplete,¢ G °left as it � Qafterr lS TÕ.  The returnC Avalu{ð 1 if more inputE°required, 0 Ethe V UdealtF hð in some way (thÃ  '`e same¤ «5).
= 5""" Rself.-.(s )! ì× = "\n".join(4 ( Ê !=  x Ø, †filename5 aif not:r  vG  ²œ (4 P4 Ó �def raw_G� Æ, prompt="")X £"""Write a æaread ah#¹!ed Q does­ qincludeôÀtrailing new7.Å AWhen# `user eBœð	EOF key sequence, EOFErrÁ‹s raised‰ `base i›Òmentation useP Ðbuilt-in func ƒ ð	); a subclass may replacÁ "is±@a diú&enb
p ’ >Œj tP)



“6ðact(banner=None, o ª  Slocal qexitmsg ·ð"""Closely emulat¶  1ñteractive Python n ¤¬ TÀa backwards áSatiblD fo©I¤U bConsol81.  Ñ¾  ­ ¹pspecifi²°it attemptsM`importY � 9  !p module" 0enaˆ 1GNU  ifX ˜@vail  Í @Arguý�s (all opê@al,  pdefaultU  e"):x‚ -- passäå .: ¨c ª  ¡ 8 Ÿ U  º7/s D  E × B z A ¬ƒ__init__á; šµ `•cº/ =¦  (– ¡ !ifué iØ æ -I .Ú % =2 r Felse/ 6try  Á  N Ú3   �except I÷
8  1- � ŸÏ#, # hPif __Rò__ == "__main__"T „ ðargparse

    parser ð= argparse.ArgumentP �r()
     sr.add_a  ñ('-q', action='store_true',3  7  ò"help="don't print version and copyright messages"} dargs =„ ‹  † sœ  if½ õs.q or sys.flags.quiet:‹ ±banner = '' Oelse  ANone  ’interact(9 ð	)
""" codecs -- Python C á Registry, APIÌ  ê òers.


Written by Marc-Andre Lemburg (mal@l Õ.com).

(c) C°CNRI, All Rð
s Reserved. NO WARRANTY.
¡ ô

import builtins …sys

###« ¦ & ¢ statelessá A funÖbs

try&cfrom _f ¡*
except Iv ³Error as wh5 Áraise System ô('Failed to load the­ } ñs: %s' % why)

__all__ = ["rgÀer", "lookup
 @open  En� PdFile 3BOM I_BE"“s"BOM_LE !32!   &32 &64 !64 Ô / S_UTF8G   )16 4 X  P D '328 „  8   	8 w@Info8   	 PIncre»"al*  De#r¢StreamRead[  ·  	x  + ! $ " ] Agete™Œ Dgetd„ f "geti³ ' 	r 
$ 
= r³ }getwrit° T  :  
  '     	y €strict_eÔs8  gnâ ureplace# 	? ¯xmlcharref' 
œbackslash& l "name 	c �  £  ]ñ€Constant Ð
# Byte OrderŽñk (BOM = ZERO WIDTH NO-BREAK SPACE = U+FEFF)
#4àits possible bN  *ðng values
# for `/UTF16 ‘32 outputB ð	little/big endian machin= 0

#< 0-8
¤ F ô = b'\xef\xbb\xbf'$ B16, L H 4 L³ = 116_  A iff\xfe= ‚ : B:  : Fe\xfw /32w 1UTF¹¯ n @\x00 v  < v 9 m 1  « u !ifÔ jo·B== '÷ 1':
3 cnativeAness  ã1 =  ÀTF16_LE

   ö # UTF-32, native endianness
    BOM_UTF32 = ±_LE

else:
% E /16E ? (16 8_BED ‰  > ù$# Old broken names (don't use in new code)
BOM32_LE‚ #LE B B )640 ?  0 864_0 !32Ê ñ
### Codec base class‘ ñefining the API)

 - ÁInfo(tuple):R2"""F ðdetails when lookD !upG  Ô Ôc registry"""JaPrivath ð to allow Python 3.4 ‘blacklistJ Ðknown non-UniW … #6 csD · óstandard library. A more general mechanism toB ôreliably distinguish test encodings from otherq ãwill hopefullyK @be dFfed forÐ 5   ñ See http://bugs.p÷ ñ .org/issue19619, ”_is_text_Š ô = True # AssumeŽ @are ) ³  byŒ Baulttòdef __new__(cls,+ Pe, deOô, streamreader=None Dwrit —  v±incremental� !   Z M  øX E =*, ã # d i qself = {.Á (y Â 
½ %))t  P .Œ ! =‹
 S # =
 Ð # =3
 ø E 8r = 5 ] 5  
5 ©–# =¸ ) Ò)  ) .ifƒ€ is not í ‰  =³. =D a preturn : ‰prepr__( í- á"<%s.%s objectL? Zõ %s at %#x>" % \h  Ÿ   S 1.__¼á__.__module__,… 	 @qual=__,I .   A, idW )\Q""" D÷s«‘interface¹ “statelessS3rs/Ö"s. ¶ QThe .ä Re()/." á() methods may,õ different errorµ Phandl@sche`€by proviÀ– 0 `s argu·u. TheseA 0str? Pvalue& Se preÍè  ¨   ') ð ct' - raise a V4 E� • ¡ (or a sub„{€ 'ignore= 
 š ðcharacter and continue with th„e next
  Ã'replace' -  ô with a suitable ö ment character;D L ÿ#   Python will use the official U+FFFD REPLACEMENTD ÑCHARACTER forB ðbuiltin Unicode  _cs on@ òdecoding and '?' on en .2 þ 'surrogateescapbprivatn è points U+DCnnF 0xml3ref? JRUJ €appropriP 6XML† <  R fñ reference (onlyÍ )ˆ •backslash‡ 9 - ˆ " 2ed ó P sequ] sJ FnameE – J �\\N{...}G Ø Ä 5 ðThe set of allowed values can be extend ñia register_error.
G 1""" 2defôñ e(self, input, , Âs='strict'):7  å P""" E'!esubobject9 Kàreturns a tupl‘GutpuL2   5 ó, length consumed)Ÿ  h   ‡ c defino  ` handl¼Àto apply. It( �aults toÞ  C   Ç 7 g  Qðmethod may not store st‰!iné ùCodec instance. Usef ÁStreamWriter€öwhich have to keepX \order¯ Bmake– â e?entµ  âper mustù‡"toè de zerocÙ  	´ ¬“ an empty˜ Z Žo¹ Qtype )isE —situation¢ a àraise NotImple0edE�U „Œ„D¿O„C9bn×cprovid‡ Pbf_geIdbuf#Äbuffer slot.ý \Sngs,  Å s¤y memoryC ð mapped files aræaPs®< �  7Bthisp f ‰  @s+S–0Rea& æS*e SÀ The decoder÷  must be able to handle zero length input and
  ðreturn an empty object of the out5  Étype in thisE µsituation.
 5""" ñraise NotImplementedError

class Incr ¢alEncoder(t !):E M /An+  ! e3 sÅ å ðin multiple steps. Th»  Í 1canT óbe passed piece by	 !toü V ’() methodC © L  ½ Qmbers: TstateCG ð
ing process between calls¬" Ae().K ë ðdef __init__(self, e3£s='strict' Í5   aCreate® — instanceª *  òmay use different€ [ Ñ ¡schemes by¹  | `provid  >° Ð keyword arguüQ. See) module docÓ %ngH ‘for a lisŠPpossiÙbvalues( o ÷  #.r =« ¥  buÉ R = ""§ c} ! ,#ß, final=Falsed¥s1  T H 0res~#ngN±  Ü  � Qresetýˆ R! u É rQ | 9Aial Œ
� f _ 1get b   S 1cur4 	ß*erb  À   & 0oss ,ž Ü 1Set%w 
B ÿ‚have beeß€  edÜí h    @‚B.ed	( ²  ?  G ‚This subÌ/of¤0can upa²Bbase3 ï· i
Ø2r i�âì…keep somh«Ain aáînA.ª)‰  "B# un¿ d4°that is kep¹A   .Ó 
Á_ __ ËÉÑµ� €Overwritˆ#isã ÜÇbes: ItY[ ¹ ’ #÷ z(�,oõ consumed) tuple8 ÷p 
Ë ”À    # encodeó input (taking the buffer into account)
  Ãdata = self.) +D # ô(result, consumed)1 _2 €_encode(L ,K Öerrors, finaln ’# keep un2 dj a until¬ •next call~ š  = c [ˆ %:]& rreturn ª 
 0def 0et(C !):  ö ÁIncrementalE¹ Tr.res( '  6 F= ""V ŒgetstateY … 9 For 09 s9 !, E ™ 9 = 1 or{ gclass º  Desƒr(objectE 1"""¿ /An+  ! d3 Cs anwóin multiple steps. The 1canL óbe passed piece by	 !to²V ’() methodC © L  wQmbers: ÿ 1 of G  ²ñ process betweenCs to¿ 1().K ë  æ�__init__�", |“='strict' ú5   `Create­ ¢ instance.¼ 0  *   may use die2ent ` handlÐ ¡schemes by¸  K `provid  Ÿ¯ Ð keyword argu�Q. See module docÒ %ngH  for a listFò possible values' o ö cr =« sä  I…×,Âo=FalseJ‹0 R and å’ ì ª— Ñraise NotImplœ0edECœ £ËÛ RÄ1Ç r5 a 2ialQ
€ K ú Ó
a d S @currìÃ)er4âis must be a (/1ed_¥Ñ, additional_J Æ_info) tuple© 
6 P bbytes X �@tainj Athatà  5werÈL % À have not yeª  u†onverted† ¬ � °non-negativCUteger 0repÀ ntŸ  Aï  ¶  °qWITHOUT‡ Ghavië!edá€contentsA 
Q.  In$ 	ö‰  ŸSafter5), û)Î ¾ƒ (b"", 0o D% §ãD 1Setª M3N±bˆ Àned by getstóate().  The effect of
  Psetst# õ(b"", 0)) must be equivalent to reset().: þ"""

class BufferedIncrementalDecoder( !):C  ?  „ ‚This subJ >of 2 @ can‘ òused as the base3 afor anT i€ " d� 1 if0  Ý @able× ñhandle incompleteI âbyte sequencesô ± ódef __init__(self, errors='strict'â  Þ Í .< )w  2 B# un­ ðd input that is kep˜°tween callsÁ , (A  “ !.b’@ = b¦ X ·  _4  * ,e Ä w, finalÂ Ð# Overwrite t¬Pmethoœ ¶bes: It8[ U Ô òand return an (output, length consumed) tuplƒ ´  raise NotIœ Y0edEl
[  Ó p ˆ0Ã i=FalseÉ , œ � (takingÖ into accountPpdata = -W+D …  ¨ ‡(result,É 1 _[ r L ,K 4­ n m# keepQuntil¬ Anextþ~ š  = c [Q%:]& ~ª @× C +¶ ( S  6 jgW $ Z Ñ# additional yP infoß…always 0_ ² Üg  ¡¼ ¼ e ,O 	l oignores g  = _  ç �[0]

#
# 4pStreamW i"d  rReader „ðprovide generic wor] 
#TÙerfaces whichÌDto iÚ  new encod–õsubmodules
# very easily. See' ²s/utf_8.py @ exaQ r on how±iD tdone.
#²Ä Õ †(Codec):Y£s#çEÓ""" Creates a"^ ¢ instance.`  0  U 5ñbe a file-like obj¦1penØ  };ingA œ¡may use diŽ"nt˜ ã5ing­  ¢chemes by ½ v Y˜Ð keyword arguy.s› D ó
parameters are predefinedK $  2 - Óqa ValueÌ  (ÁM; iÄB' - 
 ‚characte‘Ñcontinue with  Ànext
         ³'replace'- 
 ô with a suitable ñ ment character
>  @'xml 3refF R' - R[ Q úthe appropriate XMLD L 
  V q º reference.8 ¥'backslash{ | " šed escapeC 
s  @sequp sq Fnamel / í ƒ\\N{...}n  K 	z ù(The set of allowed parameter values can be extended viaD æregister_error¬ 5"""( âself.stream = 	 
 = Bs = 	 
  def write(A ¢, object):  ù P""" W"  s á! ð's contents enco¶ 0to D … ¦ Pdata,; Psumed©  · B ([ ,F ¥ )¥  ‡ [ ±  L )¨ Æ SlinesË ?lisÉ 	Ðconcatenated ,  £¡strings toí G ˆ rusing .ƒ )æ ¬ " €''.join(a )® Qreset© lR l Xðc buffers used for keep… ò internal state. ¤   @Call% ñthis method should ensure thatæ  I0 on o C ¡output is  ²nto a cleanr ,C ×sújendingD Áf new fresh i  |qout hav  0o r± Z wholºƒ ‘rrecover| î Bpass AseekdÀ, offset, whðE=0):§ ®g .2 
, ƒ#if? “ == 0 andW  Q  <U åö³__getattr__˜  i,‹  :  * = 'pInheritUc otherå`s fromÌ€ underlyfß i 4sreturn h ˜ Ä , Ÿ 	À et¾ DD  ö c__exit- r, type,óG, tb>  7 s ñ.close()

###

class S×ÄReader(Codec <  ^  P(tr� 'in� ,  ='í4ct'L  y í™Creates ax a instaœF 2 U P mustÄ³a file-likeLQ open¸0rea » A  !á @ mayì0 diø “P handÓ
 ðchemes by providing the erro÷rs keyword argument. These
  ùparameters are predefined:
( û 'strict' - raise a ValueError (or a subclass); `ignore; 
 ñ the character and continue with  KnextH £replace'- 
 .  y ditable  î a F “backslashE  ˜ RZ P ! úed escape sequences; Th Õt of allowed R  v ùs can be extended via’  register_eK. 5""" âself.stream = 	 
 = Bs = 	 
 ìbytebuffer = bX p_empty_‘% q  Vtype(×  “  ¡ I 
† 6lin† BNoneL°def decode(X ƒ, input,É =y%):N �€NotImpleí!edˆQ CreadO �size=-1,s
 Pfirst� w=False)íQ""" DŽ ±s data from‘v ¤ ‹ ºpreturns# ¡  aòresulting object.�      \¡s indicate? p numberM Ðde points or ÈKs toi  � !. ó Ò) will never › R moreÌ `than rÌYsted,G Äbut it might: €less, ifÝ ðre is not enough availvÚ  pÙ þapproximate maximumí 
Ž y0or !toå B for21ingÕ )erC  xñ modify this set�1as � dpriate@ Rfault³	F (-1Ì �  ø£€ as much °possible.  	G iì toh€vent hav"#toÂ   huge file0  $ - Kstepn5If Î ¡Qtrue,SPa Uni?Ï!‰ happensœ  af† ”J  à terminator in —@ onlP ¥ 1rst, 	M #beB1ed,< 1res% e ß§Ðbe kept until) 	K  c call ù+()ý  ñ method should ušbgreedy-ástrategy, meann*haZ$it?  D ËÓÿ asVÝ ž	ª 4Pition½ å Pencodm  +  Qgiven©, e.g.  ifD  op@ 5al ;  enB ù"st;$rkª~E À  on the stróeam, these should be read too.
  5""" ð# If we have lines cached, first mergeU õm back into charactersI €if self.D ubuffer:  x   8  " =/ v_empty_ a.join(. K )K  … = None
$ !if¡ Zs < 0… ñ# For compatibility with other+õ() methods that take a\  Ë ù# single argument  Ë sß 'iz” #] ` untilp0getUò required number o¼ ]æ (if available¬while Trueß 5canW 0est ásatisfied from  £ b  �?Á ?,>=@ þ Sif le¢ I C B) >=v
“  2   Ybreakg #Úneed more datf Q>izeÅ O 0new1  g upstream.ë(' ) ;els%  ? 7sizj - ð# decode bytes (thosWvmainingWúlast call includedŒ ²  L :3 + � 	aif notRN>try' 0new¢#s,Â dv œ 5Ö (– ,�jerrorsµ  except UniD
E( ~ as excv "if; ¢  R˜ \ +  ² Ï[:exc.start]¾ ?  Œ  ù z a.split  (keepends=Q
ý ? ô0 O)<=1×  . ]raiseÆ †0  # ‘ 2 unî dw:rthe nexg	g ! àV=;[E   9s:]2 P# put|¸2s i@ 7 "	9 k  " k  +=F    Ü #m‘re was no� Î	R í^
ð¡à àReturn everythŸŠwe've go¦dresult@ ¼ Í 	— é ´5 è## ’  ºR m st>  4˜ ![:7 
Âðself.charbuffer ð= self.charbuffer[ Ss:]
  áreturn result
 Ðdef readline(@ ò, size=None, keepends=True):3  M Ð""" Read one < ó from the input stream and v 1ther  ?   Ödecoded data.Z    ‚ ñ	, if given, is passed asŸ À argument tou 	Y  Ï —() methodZ 5"""( ²# If we havÀ ‚s cachedÈ ¡an earlier,Ä ? õthem unconditionally "if‹ ‹:  à    ¯  $ &[0ª & <delG # aif len¸.I j) == 1s  Q q# rever5 w ` mode;ñ might need moreš	¸ E Šnext timÏ   @€ã 5 ½ 0 = |	x eif notŽÚ  ? ! =‰`.split %s(¿lFalse)>™ , € > € ½ •ize or 72Ž  ,    iv_empty_J& ^E $isÄqwe callP¶() only oncE`while i
à   s  � (  ] a, firsë  €  W!ifÀ
L   � ñ we're at a "\r"– Ì`extra Ô Ñacter (which 	` K !beB 0n")Š geQ aproper�€ ending.n /isK  ðtemporarily exhausted—§ @ YwrongZ I ð if (isinstance(>,Ž)Œ  .ÒPwith(û  ))ã\H /  H  _bytesJ bK n ' u # +ð ¾(¿1=1,hFs=1) 0 e!+=À	˜   sè	 >)3  "Ninesš   1en(T ?) >1 � 0# MAthan! 0 B;{…”‘is a full 	ˆ  K   #(Ò  _ Ês° @     ( ! Û  L #øÊ sremainib¤ 0   | 5-1]Õ 0NÕ  5  : ( Æe 0 X ð         else:
   ÿ(# only one remaining line, put it back into charbuffer
M v  self.( ! =L ls[0] + E ÿif not keepends:%  ~  ¤ _ `.split $s(9 ¯=False)[0]B ]break  C ƒ0withend\  » ( :out+ ‹ !if t !0 \ P: # Wœ±ally have a4 M end™  €# Put th5 s¿Átogether and\ ÙQuntil) Ÿnext callQ Ô v_empty_í`.join(D¯s[1:]) + \Q  ¦ 
 Q J 6 !ifº E%Oelse\F ‹– Ið# we didn't get anythVò or this was oury9tryX  ñ data or size is?Non´  CÚ: žÚ«é qif read£ n< 8000R! E*= 2é areturnÇ
 "deL  Ÿ  s(,û Phint=ø ,ür=True):8  FÁ""" Read allS ás available oná inÍastreamq  9    Ž qthem as_6st.a  ( QLine ðs are implemented usÞ q codec's de
 
&amethod§A ’ncluded i¢ Ëlist entries|  a 	°, if given,Ðignored sinceæ  —  *© efficientë ´way to find° @trueH@-of-{y 5"""> �=¿ Ñ%() < " P)Fß1setÛ½@setsÂ  7"c d¡s used forü ´ çinternal state®  £0Notbat no ë¡ repositio×õshould take place.È  A T�§Àis primarilyý en¬ato be Y‹to recovBfromÿ ° XerrorÏV æR.byteï G = bt  uÂ 1  ÅO àNone

    def óseek(self, offset, whence=0):
  õ""" Set the input stream's current position.
6  = aResets9 õcodec buffers used for keeping state.= 5"""    .r .± 
« )) rs "()ˆ Ádef __next__è "):  �  × aReturn¡  & 0 de¨ ±d line from õ .› ' != ¢ @read (‘ !ifI J w rs  + º ð raise StopIteraJ¨ Á FiterÁ  E   I  } - dgetatt0 u, name,j  9  * = ö
Inherit all other methodsrunderlyÁ Âª h ‰ÑŸ 	®/enî 4exiÜ÷, type, value, tbÃ %s `.close"Á###

class SÑ€ReaderWrp) %   instancessow wrapÈ us whichvÐwork in both )` and wi g modes8ðThe design is such that one can;•Àfactory func1sn oQed by*  Ó¥c.lookup()1 Ð to construct) A Þ – ò@# Opj 0al b¤ibutes seti Bfile äQbelowT Pencod%¸= 'unknown'³'inÅê", �", �ü, errors='strict'®@Crea� aÌ ¯Ñ k ” must be ; Ë-like object2 
• : ŒA or Ze— v Qprovi MY,¸ ï   i›face resp† E@ hanqg'diÉósame way as defink1theŽ ˆ   ~ p /Ù ˆö + ?# =þL   ÕCer =·([¶- ù - } - ø# =8 s L˜, size=-1rgp  * 0er. (+ p   ‹I ONoneK 7 ?izeO  sP _hint=T s¤  6 Y Æ7Àtream."""
    ðreturn next(self.reader)

 Ádef __iter__ !):   :  5 - Qwrite* ‚, data): 1 .( r () (  q  SlinesI OlistI 4 . N BreseÛ C  ¶ ë ." )Ù  … r   � Cseek— ÷offset, whence=0C qstream.2 
, l sl  ,  #if[ ¢ == 0 and G  ‰ , q ´ „__getattÅq, name,Ô  =  * = 4ó#""" Inherit all other methods from the underlying i 5""" ?h S.0 Ÿ ‚#T ñse are needed to make "with SfR¶W~ðr(...)" work propŽ O__enÐc__exitýÿ, type, value, tbòõclose()

###

class§ Scoder Q¿  ñ instances translateG^�one encod\Qto anƒ.Ý  Æ€They use5ò complete set of APIs wPed by% � € ðcs.lookup() functionniH @ment2 wir tasku ±Data writte/  ×  s first deh Ad in¿ ~ i“@mediñ Ñformat (depenì  ‡ Bhe "?  " E !c)EthenG … Š0 us;%ani  ° …providedK K ½ì  InûAdire%ì  i_"ad­ V � e "a ¸�  å Ó è!edä ´!to~ ccaller– T@# Op±0al ëaibutesûêñ file wrappers below‰  ~_W±= 'unknown'  6    G__in$ÅS #e,ô,ë ", Z~ ü errors='strict'{@CreaÓ aL<ewhich ­±s a two-way«     ³conversion:fe\6pÙfrontend (theD  4€ visible"K(’ÕP)) whsã Úû 	J ¦p Dbacko ÷#inD)î Á   tYou canì se objectsŽ "do?hparento À transcoding÷s from e.g. latin-1 to utf-8 and back.

  ûstream must be a file-like object0 aencodeN !de ; `adheren ðthe Codec interface; Reader6 	} eWriter} ùfactory functions or classes providing theF SÃ c   ] † ks respÏ °Error handl[  is done inf ð	 same way as defined for ‚  q /‰ si 5"""/ Sself.u"= 	 
 b"= 	 
 t"= 	 
 rf=o(^ 0, eå *s)- w|"= · - B # =K C@def s (Ô ², size=-1):  dpdata =   .* !er (+ �  & r, bytesó d4  (! F ‰ < preturn " w • Hline™ HNone› !if± @ is  :¸ T | Oelse8 ô Tsõ Phint=Þ ù  +`”Ø  " �0`.split4ös(keepends=True)ª�__next__µ ¦ R""" RÜ Q & ó d S ê  SinputI.j Ç 0 = ; _ {/erè >Î  ÏÎ  K  ¥ Á- €™ ,¿þ  » ‚è  m .d r 4 {  K2Llist… Á = b''.join(  '£ QQreset#˜ Ú º " Ó Ú  j ³  AseekN ö, offset, whence=0)Èu# Seeks• propagatedÞ@bothÿù0ersÓ q si  ð#0Òthey might ne= Ð  > "irÅnal buffers.> Ä à ³ 
­ í Àwriter.seek(ñ!offset, whence)

    def __getattr__(self, name,   $  * = "):G  # õ*""" Inherit all other methods from the underlying stream.i 5""" sreturn h ˜ .0 Ÿ 	À Dente¾ ,):D  Ô § î Eexitë ÷ type, value, tb>  7 s ð
.close()

### Shortcuts

Q ‘open(file6ð" mode='r', encoding=None, errors='strict', buffer! $-1I ErOpen an@ 0ed \ 0 us2 AQgiveng R and )ô ða wrapped version proviˆ Â transparent] bing/de¦ .# Ê�Note: TheL  wiÙ¡nly acceptÒÕobject format‰ ¡defined by% ðcodecs, i.e. Uni  : s; Õ most builtinE  & ñcs. Output is also  p dependÍ  › ¥usually beC l was wellç UŠ«kÐs are always ÝÁed in binaryx² $rdefault§ þ § Amean¶oH Ísin readM « †  1 ‘specifies3  Pwhich^ €to be us²  or% D  ` ä u0 ma ; to÷0ine9 —Ð handling. It  Ò sU 4to · … €causes V8EÙ • 0rai— –in case aÌÇ ” w occurs« 2 haù Tsame Ea' &Uf() API’¿  ’ #-1±  G  V a´µu ` size Bó `   ìm%ed oÇi!es¼Pxtra UFibutŽ.H±allows quer ß Ø( V. ThiŠR  o‰±vailable ifz vT was I6d aD “parameterÝ w%if ^ @not ºf\@'b'  iƒmq# Force• Ä!of_!
?K ÿ" = Q+ 'b' 2 = s.ƒ`<)4 »  · š µ ä6try äinfo = lookup(wW  qsrw = S«ÁReaderWriter“  , ? & Ó)er w+ üU V# Adds«àsimplify introº6tio?6srw==ªÿ  ¨ æ 1srw ðexcept:
        fiÃle.close()
  ðraise

def EncodedFile(file, data_e Ping,   ñ
=None, errors='strict'):
[ ñ""" Return a wrapped version ofK ñ which provides transparentD  ¢ }  rlation.c   0Dat_ Åitten to then  ® a is de× ¥ according] 1 Zgivenì @ andM !n � $ed] xunderlyF h QusingÖ !ñ. The intermediated U typeƒ ðwill usually be Uni® ð  but depends on‹ ° specified " 'csñ Bytes read from/ — 5are £  ç � ´passed backó ecaller	G 	Š IÛ �Anot d0, iÖ `faults_ F U1 ma< / QefineÞ " Æ handling. IY Ì 4to —kÑcauses ValueE¹ W 1be Åd in case anE   Ür Xoccur{ äré*ed{gobjectßõwo extra attributesg .˜.ÂI-@reflV  éB  parameters`   ’same nameŠv @ canmuë5forD Pintroh g  by PythonÄ Dgramø 1"""3 ií  :   
Ã =Ó & ø áinfo = lookup( xªH 
&  
& Ásr = StreamRõrÈ ? .1 Ú ,�  ³  g ) sY  e#er @writ 's¶ W# Addî m€simplifyl~ +sr0+sr=vJ ‘Ð sr

### Help2for<j÷2get!r( 8ingÆL•1 upx{ I  b‚ # 5{ †  J2its  per funcY/R~Bs a f ”† b ’  ³ Hƒbe foundD Šv × Ç ïè ìè E^ è a{ è ð	incrementalencoder(encodñing):

    """ Lookup up the codec for ñ
given encoding and return>  B ðits IncrementalE+ òer class or factory function.y  ; ƒRaises a‚ ÑError in case~ x õ cannot be found} ¦ ´ ös doesn't provide an iš Æ #er� 1"""G d aer = l(  #.=  !er2 $ifK ‘ is None:  Ó rÓ Ð O $ =@ —

def getj  deÎ r8 ªEDi ª�ª ª& n3if  ª&@ ª_readežEqStreamRc ˜K[—s‘ ô OwritLWc xô  þ ( Rator,Ò`ing, eÇòs='strict', **kwargs)'y* UE ” !es`input J ‚ngs from 0terw 0 usA /an‚ N Ž ¹† ñ are passed through toW ÇFpconstruÇ. Â  ;
Ã Ã(† H  eâ 4in % L0outþ =\2er.X (3 )B  ' 2if * :   Syield , %  O ‚"", TrueR N  	J ² ¬ *‚ Á P  Ð´ (@ é|À and kwargs ñ.are passed through to the IncrementalDecoder
    constructor. 1""" d% v = geti=  ñ(encoding)(errors, **kwargs)@ ñfor input in iterator:  x 0out #= P . (3 B  ' 2if * :   Syield S %  O ’b"", TrueS O  	K Ð
### Helpers Â  charmap-baS 7ñcs

def make_identity_dict(rng):
� ?"""" @ -> / )  Î �Return a ñ ionary where el³As ofÅñrng sequence arel  C @mappôì‚mselves.b Ñrf A{i:iÛ i™Grng}Ð ÕQ_map(’0ing Ø ´Creates an 0 � map fromÅ  90ing ƒ  ¢ °If a target p" !inÖ i   ö  occurs multiplâ `times,0  5 $atL  is7 ý ñ None (undefined  ¤,)@caus{  ½ €xceptionmÌ  untered byi  þ øC 0durB ptranslaA ç °One exampleW �re this h Ðns is cp875.pã3ich s^ ù } PacterÂs\\u001ai Óam = {};  ­0k,vÔO ¸†.items()?qif not * m  £�m[v] = kQ   Oelse#  h& U!m
:
â handlers

try? qstrict_  ¢s = lookup "(" "£Rgnore + i + oreplac,  - 0xmlÏ3ref c ) A Ÿbackslash@ ( ? Oname: # A")
eŸ! L+EdLð# In --disable-uniŸb build!1se jŠ *@ misù¶qÏ_  º 3 />  #  ü  Ð
# Tell modulØdBhat Ê þ ñcs probably needs¿žòs
# package
_false = 0
if  XeimportÓsÓaTests
, _¤ ó__ == '__main__'ðä# Make stdout “e Latin-1«³ into UTF-8 �3ys.: 0= EX…edFile(s 0, 'kân-1', 'utf-8')àÐ# Have stdin òtranslate Latin-1 input into UTF-8 õ
    sys.stdin = EncodedFile( Ò, 'utf-8', 'lP ð')
r"""Utilities to compile possibly in ðlete Python source d À.

This modu5 ProvidI  wo§ ð	erfaces, broadly similari ôthe builtin
function~ ñ4(), which take program text, a filename and a 'mode'
and:

- ReturnŸ ° object if o @comm3 !isi Ô   Vvalid: ONone3  	 + ñaise SyntaxError, Value Â or Overflow �  a
´ ?   e@ * (2  ˜ R Qcan b
ô)duced by
  malformed literals).

Approach:

First, checkÒ ¾ðnsists entirely of blank lines\
1Pents;= ñso, replace it with 'pass', becausefÕñ-in
parser doesn't always do& ð right thing for cse.

C€òthree times: as is,s 0\n,œ  ð\n appended.  If it·  Äs8 6it'ò& BilesJ  ôL €,
we exp>Emore6 Î   (Ðeither way, wAmpar	
Ø¤we get wheß ó > \n*'\nx h  ­> #s
M ` same,&Ù isTpken.  Bâ5  5 �different˜ 
Ë !NoFðuitive; not even guaranteed¢ñhold in future
releases; buºps matchïhú ôiler's behavior from6ð1.4
through 2.2, at Q tõÔaveat:

It is|0e (j  ž °likely) tha{ #e \Qstops Uña
successful outcome before reacra ndô  ;í €this
casm@railX `symbolï y…`ignoreAsteaE  þ * "anÎÐ.
For example³ñbackslash followÃ‚ two newq!ma^   ð
arbitrary garbag‡p@will‹ ‘fixed oncrS API MÁer is
better«es 3intš *$:
1_ðBand(,i", 1):
m¥‘s a singlþ[n¤@mannûÓescribed abovß ( A $r(R ’Instances“ ¢ðlass have __call__ methods id¶acal in‘ Psigna¦ ¸›Î ;’  ½sH•@ i t� containâ2 __�__ statemdF  KJ ±'remembers'°– ùs all subsequentÝàs
    with theñR statement in force.

The module also provides another class:

Compile():

    Instances of this * ñ act like the built-in function coG  ,
D ðbut with 'memory'š  8 ôsense described above.
"""

import __future__ àwarnings

_fea Ös = [getattr(1 �, fname)„  ˆ  2for  … - D.allP _7 `s]

__ __ "Ò Ã_command", ",    ñr"]

PyCF_DONT_IMPLY_DEDENT = 0x200Œ  ð# Matches pythonrun.h

def _maybes p”ƒ ð r, source, file­ ¡, symbol):í €# Check ì + ñ consisting of only blank lind´ 7sC  ;    &C ³.split("\n"g  ¿ $ =F v.strip(p!if A and	 ¢[0] != '#'§  @   Pbreak	  ñ# Leave it alone• Felse; #ifö  U f"eval"  K ¸ � = "pass" ‘ # ReplacZ •0a ' '9ú¢err = err1 T2 = NŠ pcode =        « 6try�   . "r(™ ¿ ; öexcept SyntaxErrorJ  ª Ÿ 0# C7! s'  a after–PfirstÖ =Z –# to emit/ (g WU�, DeprecaÅ À) at most onL G9s  .c‰ _ ( ð.simplefilter("eÕ "")É  P 	.   2Y	30 + €: : >G as 7% Ö‚  Óuµ‚ ?\n"„ 1 ` e„ 	!ifZ÷ ´ PreturZd  Pif noä1de1gPrepr(´T) ==  2“ 7 QraiseÛgfinall° A õ� ³ « ½. /, $)þm  ÿ \G ¤="<input>"ÿ„="single¡Cr"""“  a
 H (Ñdetermine whe€it is inv 0let5 +AArgu:¨»1 --c  ùpng; mayiótain \n characterS­ =  opb%alÂ³ from whichÞñ was read; default­ •  À"
    symbol÷2 -- optional grammar start symbol; "single" (default), "exec"
    ¡or "eval"
 ñReturn value / excei ’s raised:' #- ) ða code object if the command is `plete  Qvalidg @ ONone7  Qincom9 /  ~ ð  SyntaxError, V¤  Â or Overflow ‰ aI 1  sC   eD * (6  ¤ V ócan be produced byD ñmalformed literals). """_rFp_maybe_Ë Dile(	 ó, source, filename,¸ô)

class Compile:V °Instances oc Y( ñbehave much like�built-in}1ileE @func2A, bu©y”s used to, ò	 text containing a futurE ñ
statement, it "remembers"ßè ðs all subsequentA ¥[ s� Awith« Q ¤ in force.Dòdef __init__(self) ¼  ò.flags = PyCF_DONT_IMPLY_DEDENT¨E CcallE |_  ÓDob =(°&, Š q, True)à  ¤ pfor fea< Ý _ sg  & !ifAbob.co_Ò &7 .Qr 
8  < | ? |=5 Ž ’Ú f ¨mrb ?"""nl"__Oñ methods identical inp Bsignø X ü l ;÷ difference$1tha’"thfiísB
�"__Ÿ __�†  ‰J '«'«<l g¬,­Ë$ =Ü/()£¤="<input>")=àh Cr"""Ë —„ Ôðdetermine whether¾6is f.Œ  V@Arguãsë    w V ´string; may”Ò \n characterë ? ç A ¸ £from which¡ was read;] B  Ñ & ý	f  y5 orG m   õ + â ‹" 	D ð None if the comómand is incomplete
  ñ- Raise SyntaxError, Value Â or Overflow ¤if the comV aM 1  sG   eH * (:  … Z ÷can be produced byH õmalformed literals). 5""" àreturn _maybe_ß “ile(self. ð2r, source, filename, symbol)
"""Conversion functions between RGB ¸ ðother color systems.

This modulesÉ —vides twoJ ‰for each= ð ABC:

  rgb_to_abc(r, g, b) --> a, b, c
  abc" Crgb( " / Ñ

All inputs ª "ut pre trip› €of float¾ñrange [0.0...1.0]
(with PexcepQ of IT aQ, whiÄ  +ñ a slightly larger Q B).
I‰ qoutsideP Rvalid! µ may cause f sc"in& o½ É.

Supported8ñs:
RGB: Red, Green, Blu�ðponents
YIQ: LuminanõCChro A (usj ¿pposite ´`o signe¨
HLS: Hue,C `SaturaC
HSV   1 Mð

# References:
# http://en.wikipedia.org/ O/YIQ# AHLS_xo_space/ )SV/ Ó
__all__ = ["n“yiq","yiqY$", •hls","hls i5   &  sv& $sv& ]÷ BSomegðing point consta–ñ
ONE_THIRD = 1.0/3.0 SSIXTH u6.0
TWO( 2( 1
# Ö¾p (linea¨Ambin±sÆ@RGB)D ð: perceived grey level (0.0 == black,ž   Pwhite7 SI, Q:‡ Th°#
# There a  Q €at many %Go- Â  in0se ãRulae.K C one£ is library3 sIP from? D FCCi  ä ¤NTSC.

defU5yiqU:Èñy = 0.30*r + 0.59*g	 A11*b! i! ñ74*(r-y) - 0.27*(b-y)  q  #48   E '41  Ž’(y, i, q)� j � �# r = y +ƒA27*qŽ p41*i) / q74*0.41  27 8‰ 6# b: A74*q¬ /48: g: -` '30Ê 1Ê  |     ¢ ñ0.9468822170900693*i˜ ñ6235565819861433*q+f  Bñ478764629897834*i® ó63569107918738019 Ù ñ- 1.1085450346420322q #1.€ ²284064666*qª ðif r < 0.0:
        r = 0.ñ0
    if g < 0.0:   0g =  Lif b  b  Xr > 1@ 0r = @ g   ` %1.€ b   `   ð%return (r, g, b)


# HLS: Hue, Luminance, Saturation" `: posi ô in the spectrum
# L: color lightness
# S sI õ 
def rgb_to_hls† ,¥maxc = max ô 1min *in ð# XXX Can optimize (D +1 R) and - K Pl = ( +) 6)/27  ! = c�  ¼0x0.0, l,Ç0l <×5, s] 2axcq " / �  Oelse0 
@2.0-š B 4 rü Ø 4-r)T   g  g  b  b  Nif rø ‘h = bc-gc„ !elØ & „2.0+rc-b* â    ‚4.0+gc-r    •(h/6.0) %Öfhd!s
'0hls'Crgb( );@if s± 	dB lB lµ >if ¤ñm2 = l * (1.0+s)* 
—# c+s-(l*! ñ m1 = 2.0*l - m25 r ø(_v(m1, m2, h+ONE_THIRD),   -( )î - #ueê `hue =  +!if  < C RSIXTH­öm1 + (m2-m1)*hue*6æ M  Ÿ·É × ` 2TWOË ` (( U-hue)l V 1b#SVbW, Value^I ô  ("purity")
# Vj%br€Cj%sv9Í  cjv- Ã?if ,1v)   ÜÛBs, vî7hsvÜ  òÜ	0v,  9�i = int(hp") 
aassume Á) truncates!1 fœ. 1- i `p = v*	3 - êq "*f!t  3 ð-f))
    i = i%6
ð     if i == 0:
   áreturn v, t, p & 1&  q,) 
& 2& p& tL 3&  O 	& 4&  • 9, v& 5& qv, p, q& ð4# Cannot get here
"""Module/script to byte-compile all .py files to c ó.

When called as a F ówith arguments, this S ñs the directories
given@ 2 Ñ recursively;0 à-l option prevV “ it from
, xng intoZ  ¢ hithout� &if‹  ß mð s on sys.path, Â <out] 7subº P.  (E¼  d  gh’ ðshould do so for
packages -- ð now, you'll haverAdealr  . òseparately.)

See § C py_IO ¡details of'hactualÃa5.é¤
import os
 %sy  „lib.util! m  dstruct  Pcmp

‰² functools N ‚ partial  X4lib óPath

__all__ = ["× e_dir",  c   F Ð"]

def _walk/ ò
(dir, maxlevels, quiet=0)"if ò < 2 and isinstance: 0os.� CLike3  ÿ°dir = os.fsv  + )G0if Ee b  / ñprint('Listing {!r}...'.format> ? 6try6 Rnamesg qlistdir* h æexcept OSError4 Ð  „ p"Can't P ‡ "„  - { ![]n  b.sort(¨ @for  1 in sl  0ame0Ö'__pycache__'"  a �continue_   AfullR W UP.joinò ,c y  +  b o¬�0.is@ ¥ , dyield  n eelif (A > 0þ‚ !ƒ 0curæ  $pa L  g  µ Ž V 	® Tlink(’ )° 7romÃ- È=¼ K- 1,� “ 	 ’= )#TfS ³=None, ddir ¾force=Falsel #rx& ^ £=0, legacy0 �ÿmize=-1, workers=´  qinvalid–S_modeW …*, strip� î gprepen° Ólimit_sl_destG @hard|b_dupes� ~G"""BÚÀ all modulesð# in the given directory tree.

    Arguments (only% â is required):' @dir:/ !  Q K áo byte-compileT ñmaxlevels: maximum recursion  õ (default `sys.get! ‘limit()`)K dy  É x ñ	hat will be prepended to  Cpath G »    file as itè · ´d into eachÏ 0de + .@ Rforce‘if True,   A €ation, egòif timestamps are up-to-datRquietM  full outpuÍ ñth False or 0, errors —qwith 1,�  Æ  )no> 2  alegacya ­ ‚produce  P pyc $òs instead of PEP 3147 K poptimizû 0int˜ @list-  ù Ôs  -1 1 ofE ¬    Äðinterpreter. Multipl™  1` leadsºm a,edK  �s²None • ¿pworkers‘`numberÊ “parallel & i qinvalidß ¡_mode: how\Î@nessB  Ö  R�Scheck² RstripÅ1par; y ã Qleft-  ² from sourcvƒ‰ ÛB 9   D �beginningˆ �original¹C s, appliŒ  ‚ aafter } 1dirj yð_sl_dest: ignore symlinks ×1heyÑQpointu outsideê  h  qdefinedŽ g @hardR „_dupes:  � duplicat- !ycÄ s2 1""" ò
ProcessPoolExecutor = NonW0if . Ö1not d and (æ 	 $or68dir !):m  À Àraise ValueEŒ‘(("Destin+(s P) cant ‚be used °  C  0"in5bF ½£ 	— "")Ú  ¥ ; =‘ ¼ $ Ý =  ² 8úF < 0Y þ '' @mustw@greaG€or equal‘%0'´ / F!= 1W 6try  0# Oyðimport when needed,§clow reÕplatforms mayÑ E 1fai� H )it  aóconcurrent.futures . [ ? �except I  
À ç 1= 14  iföçsY ¡2 ? = ûF ßñ= _walk_dir(dir, <= ,g =V à)
    success ñ0= True
    if workers != 1 and ProcessPoolExecutor is not None:9  = 6# I? Ÿ== 0, let@ Rchooss  : t =~ !or] \ OwithJ S(max_? = c) as e« :C  i •results =  ù.map(partial(compile_file,9  =  Pddir= �, force= C Ñrx=rx, quiet= ? rlegacy= : ”optimize=	 > ýinvalidation_mode= P PstripN	 > `prepen‰= B élimit_sl_dest= H ú hardlink_dupes= )K  †)s)‡0sucŒs = min(Î , default=È1 7elsš@for N 1 in s!ifÎþ(/  , JÓ%, Ÿ¾ ‡ S  =	 &, Õà	ÇÕ
»Ê
J #¤3Falåsreturn  j

def orullnames=Yx=F  ~ /=0… v1 |?=-1,  �^ 4*, o t— 	‘ ñ  _%  6Å )-ƒ"""Byte-A one–!.
[ óArguments (only f u¢required):,  R:  thF W to b_ T  È:¬  ãagiven,2  directory ~”d) to" ? :  [ dm . í_ !ifM¼P `, even ò	timestamps are up-to-datßM  Þ � output F0 or[qerrors # æ)no> 2­ %À:    if Trueò, produce legacy pyc paths instead of PEP 3147 ð
    optimize:  int or list-  Àation levels @-1 f&   1 ofE  I  0theI ðerpreter. Multipl™ C ¤leads to m ŒcompiledK ôfiles each with one¯ • .7 qinvalid °_mode: how Ž àup-to-datenessÚ     Ówill be check€ ástripdir:  par	 G ± Qleft-  Ð from source § Q‰ qprependB 9   D �beginningˆ †originalC s, appliŒ S  aafter } 1dirj ðlimit_sl_dest: ignore symlinks ifþ ±y are pointu outside¸  e  qdefinedÑ [@hardS „_dupes:  � duplicat. !ycÅ sš A"""
	 0if 
� is not NÂTand (É 	 3or *8dir !):N  £ ñ
raise ValueError(("Destinú 9 (s P) cant •be used "C  G 
 „"in combF n£ 	— 2"))Û @succOa= True] Ðif quiet < 2 ç  is|÷ance(fullname, os.PathLikeØ     =!  fs;5 )_  ?    P.base & ' d�=m« † Q/ 1os.W AjoinB , ^ î %if|™G À _5Ds =  t.split(_ 2sepÎ  ‚c5  5 	 Þ1  ¬ ²  `  ¨s‘ 0, o u in zip~1 ,¬  – E  û = "==F õ     “ �.remove(v Š f*8 + /ift  Íâ!isã Š  DÎUë …OelseE Î ³ ç4 e,I D = [ ]ž°# Use set()!A\s…& Rorted) acreateè õ  è@ a duâministic orderA v B = sF  s  Ö%ifßïÈElen(*  Þ0�#"H/ofÉ ÿd bytecode makes sense˜AonlynmÛHthanÀation level"ñ
)

    if rx is not None:   õ	mo = rx.search(fullname)! Vif mo0  4 åreturn successc Ølimit_sl_destn ö and os.path.islinki [ ‰if Path(H ±).resolve()¾ "in% ©   †.parentsR ­ õ opt_cfiles = {}Â ¤   ¤ @for > €level in GimizR u šif legacyŒ    > | [ I D] = Ñ e + 'c' 3 ;els`    if} _A ^ >= 0l  ' Wopt =* 7  1 _ * 's  :   ª ù = (importlib.util.cache_from_source(²  ; 	 Þ ,Š  1¦ation=opt)k2  } s' l  Ã ÿ 0 ? = À ¢ � !� Ðhead, tail = Hb[:-3], E-3:]* #if' z= '.py'¾ !ifíOforcú /trX  =Pmtimeí ¦nt(os.statÅA.st_! â Pexpec+üstruct.pack('<4sll',?ÕMAGIC_NUMBER,Ô  ƒ  
?0, ‚  \¯X£š.values()#i ¡with open(@ ÿ, 'rb') as chandlD ? Pactua². �.read(12) : 3if 02!= ? ž  1 _break)» 8 k   ïexcept OSErrorƒ Ipassz ]^quiet3 øprint('Compiling {!r}...'.formQ
• ÓQindexø¬ðin enumerate(opteÞÐÀ 	Ö ‘ok = py_cÁ #e. !, H 0, däo, TrueÃ$  Âe¾Ó @ qinvalidm_mode= 
[Û 1if MA > 0T@hardNT_dupeøÀ              òprevious_cfile = opt òs[optimize[index - 1]]
7  0if B �cmp.cmp(O *, _ ÿ, shallow=False):N  ` ’os.unlinkM )- + q ˆ 
; òexcept py_compile.PyC
 ÎError as err� ¡success = ¿ � Þif quiet >= 2?  Ô sreturn J B $elD ? ²print('*** « Â úing {!r}...'.format(fullname)ý  … Oelse` ž', end=''@ Ñ# escape non-“ ýable characters in msgß Pmsg =\ò.msg.encode(sys.stdout Ming,:  ·  e®ÿs='backslashreplace³  z  v /dev é Ü J(msg Aq(Syntax‰P, UniY  !OS	 )Ll Jîaàe.__class__.__µp__ + ':„{»®if ok == 0k 6oŠR
def Nòe_path(skip_curdir=1, maxlevels=0, forceÅ,ô/=0µ dlegacy( O?=-1,  ôinvalidation_mode=Non#ƒ"""Byte-¡ ð  all module on B ³ !.
8°Arguments ((  w bonal): Ø °: if true,  ò current directory (default True‹	0:  ± recursion !4 01 -:
5fordVdir(), R0 D0 \ b- ]   Ô3 "-1� —9 !r_Ê z1""" p 7  û 0dir¯¬aif (nox0 or Í2os.Q) and¢�:  Þ3/ <vcð'Skipping current Ódirectory')
  Uelse:   ¤success = 
 ùand compile_dir(/  3 Mdir, žmaxlevels NNone Oforc  aquiet= 4 rlegacy=  ”optimize=	 # ýinvalidation_mode= 
5 <dreturn#Ò


def main()O‘"""Script Á program."""*ñimport argparse
  5r =  .ArgumentP% z1des] ñion='Utilities to supZ óinstalling Python libraries. o c.add_ah �('-l', acñ='store_const',  *=0   �default=Nàu dest=''8 ñhelp="don't recurse inÍ bµBies"{· pr', typ¿#t,| L ?ion| ó('control the maximum‹ i; É1. '¦î  �'if `-l` 2P`-r` xÿons are specified,I Qthen B ÿtakes precedence.')	f¾Ttrue'd'& ò rebuild even if timestampÏ  upoOdateO
q‘ @counIÓš 6Y!ñ'output only error messages; -qq will rÀ­'ê
F � as well bÑ  	b‹cBuse + ä (pre-PEP3147)i¡d file locšsd
ód', metavar='DESTDIR', 0ddi	�Éj$('vyäpprepend •  paths for Æ /inÏ>-C± tracebacks(ain run ³' '; áin cases where¸bsource9/is– ¿unavailableUs`YSTRIPaQstripeW}€part of h uQleft-e R from ,ðo source file - fÿ
or example buildroot. '
  
ÿ'`-d` and `-s` options cannot beA ñspecified together.'))w ñ4parser.add_argument('-p', metavar='PREPENDDIR',  dest='prependdir',H Â ßdefault=None,& ðhelp=('path to add as prefix  $÷to source file - fm/H ?mak+ÿit absolute when some part is removedr(by­äpäSxäƒREGEXP',ßr ¿Askip{ðs matching the regulaøŸpression;>9 0expu�searchedÓ!inW _full qof each� “ considerN pcompilaQi-EFILE+_flistß×"ll½ AilesÑÀdirectories H _ed in  �  Ó ( 7 × n°if "-", nam— rµßad from stdin
C e_%|4�nargs='*&³zero or morÉ ÷&y£ — „; if no Üps givenèœsm!toµðequivalent of -l sys.‚
ñ -j', '--workers6y /=1¡type=int, =S'Run Ð 0allí¢currently'ÆqinvalidÉ _modes = [	 .Öñ.lower().replace('_— > ¼ n B  ’3py_� W.PycIn QMode]ÜJ-› -P ø choices=sorted(; Ö )5+¸('set .pyc =  x #; Ñs;Dà"checked-hash"G nÿSOURCE_DATE_EPOCH@À'environmentÿ
 variable is set, and '
  
ñ'"timestamp" otherwise.'))9 ñ8parser.add_argument('-o', action='append', type=int, dest='opt_levels',L ˆ ð help=('OptimizaS  5 â to run compil _with.Ò pDefaultý -1 which uses of ? ofO ÿPython interpreter itself (specified by -O)7ôe', metavar='DIR'+�limit_sl_:.ð'Ignore symlinks pointing outsite of the b Æ	P-hardC g-dupesÔ¯store_true�  ¬ $='D _D ê#'Hs ñ	 duplicated pyc files')
? sargs = |  ~"s(Î e- (  / . F 1if  1rx:V  •import re # T = reE ( � I 	¦f == ""Z 3 " [ None� `ecursiPQs not# F 3maxþ=½ 0 ± Oelse- > 
t ‰  ” D · ! e= [-1]@ 2len# )ú 1\= 
Z ·¤r.error(("ù¨fÿÐbytecode makeºQnse "ð  ³
 °"only for m�than oneÛ ;.")À@ddirwÄ (i Î \strip( "or�0preì A )ù p"-d cans  be†1d iÔ6binÔ£ -s or -p"³ ‘# if flisÆ€providedÖ‘n load itw ›+ ƒ 6try  A 9° (sys.stdin^ ï 8 `=='-' \4 opñ z)) as fL  P  �@lineÍ    # ‘"s.&(4 .d(a +  except OSE-
n â šquiet < 2  ? qprint("= P readd Q A¢{}".formatËÚ @ ?   »return Fals±qinvalid¬G_mod€1ivl  ¬+ ó	.replace('-', '_').upperÈ y 4  ø#y_=W.PycI� TMode[w ð]
    else:
    ð    invalidation_mode = None

 ásuccess = True Atry:	    öif compile_dests   @for  ? in' 	 + ðif os.path.isfile(9 )P  )   eif notS / ³, args.ddir Sforce 5rx,¸  F  	H Squiet= olegacyA W= M ‘stripdir=—  @ `prepenB  D ‚optimizeB ¯opt_levelsB �limit_sl*G 	 J âhardlink_dupesK 
 9 óÓBFalsÔ   Oelsew1dir¥S, max�lÔ¨G €H §s worker `ª¼(­¥ ‹ ªA  C ¹.	¥‡ 	 Š 
£J 
 ·$sreturn Ú1Ê) ³ o(3Ž  !, �  ã ¬2  2 f)Ë ö	except KeyboardInterrupt¥'if1F < 2  Ö´print("\n[i< Bed]"^  !  ôò

if __name__ == '__main__'g  ex×@tatu( k  � # "()d @sys.& ( !_s+ Ñ)
"""Configur~ ÈÞ parser.

A c ð consists of secµó s, lead by a "[ ð]" header,
and followed by "name: valðlue" entries, with continuations and such in
the style of RFC 822.

Intrinsic defaults can be specified by passing them into
 Ð
ConfigParser{ ðstructor as a dic‡ Úary.

class:
3 ñ-- responsible for pari ¿a list of
   cy !urè @ fil î bmanagi© L Ñed database.
L `methodŒ  Y ”__init__(ÿ a=None,½ s_type=_ _Ð ñ, allow_no_value=False,Y  O  ðdelimiters=('=', ':'), comment_prefixe # ;;')A }inline_1 › ¬strict=Truy `empty_< Bs_in¢ s)  Æ !se–­='DEFAULT'| aterpol[€=<unset>½ AnverÔ  %):ö `Createt“r. When `u ð s' is given, it  v…ialized P>!  }�ionary or r£ñ . The keys must® Ç1gs,… ›sŸ $ €appropri¬  lP%()s N nge ÷ * � È 1ictÉ @will~ –used to c	 .Ä ˆ qobjectsè �â “%s,  op:sÔDin a# ,ÓP  Ä  H f ÷ ½ �¾ 	!as; seuB subF£that divid{Ofromt »z Ý ‚  z 6EQs in ï ï2. C^s¿H �indentedeª BHnon-® Š` l0ct`×‹ ‚er won'tw 4any +ï ðduplicates while read® a ]°le source (;,&orG ¼Q). Dež JÚ wH \ : Ý w), each¾v Bmark‡0end¨Aan oÂ. Otherwise,¬7nalC s*pa multi? 0 arµ ptš1parä ;3Ñ 
äÊ  º É Ù #),_ ©5outÊ X sw ‘accepted;Õ Q pres–ÒPthese^4Non¦Þ_&À' is given, Àthe name of  óspecial section is
   ' ñ,d accordingly. By default it is called ``"DEFAULT"`` but th nN ðbe customized to point	 õ any other valid‹  € Õ. Its currentL ñvalue can be retrieved usingÖ ó``parser_instance.· _è %``M ðattribute and mayU õmodified at runtime.
3 ð When `interpola9``given,`shouldJ Han I) † subclash¤ € It will7  us} sÎ àhandler for opn  *%ue� ¡pre-proceswŸ ñgetters. RawConfigPõ objects don't doL  Ž@sort!	â ©, whereas I „uses an Æ 5 ofL YBasicþ ð
. The library also providE ç ``zc.buildbot£ùinspired ExtendedT ¡ implementŠ¨`conver¥1 di  – ç • each keyÍ ’represent• ž $ua type e F= ¦Ais a'6abl²³ ²@ sƒ�from str o1des @datao f. Everœ >  ter gets i4€orrespon¼  Ñ*() method onV $ ¸ ì & œCxiesS 5s()) ¡Return allR cc!ur‰	Éƒs, sans 'R 4has’(^ \ 1whe ®aX Texist�  K J ,-R 9  Q " i	m ± ) sc [ 1lis:
	6 Á Ç  <èZ �read(file ps, enco»X=Noneh  ad« ½u@iter] Ž = d�4fig‡ U 2s, Ï b5 , P.  A 50le (    Êšáallowed.  Non- ” ( ¾‘are ignor) 0suc•`fully â e ³  _N 1(f,  ~ ð !onkÞ Ý al Q Ô.¨ v   b Ãs} f. ;´�is only {…in errorB ðmessages (if f has no `> %' D,’½p`<???>'P T )ê_# ( ß
=a¿0 I  ¹( oionaryK Àguration froñm a dictionary. Keys are se “ names,
  Rvalue" 7 ¡ies with k= 3nd & õthat should be presentL Uin thj A. If Gused” C typ< ´rves order,  sN 0and? "ir‡ @willu ‚added in8 6. VÁ ÕautomaticallyH ñconverted to strings.
 Cget(@, op5ñ, raw=False, vars=None, fallback=_UNSET)@  DƒReturn a[ +@ for½ nd[ ð.  All % interpolaq |N Sexpaná  Lr^ €@, baLohÀdefaults pas @intou M Ãconstructor N„ DEFAULTo ” 0ddi‰ °al substitu …s may beN Pprovi› Pusingi   `!ñ' argument, which must«öFwhosM ðcontents override anyQ`-exista ß H`ž`' is a5 inš ‡ ,“ *T fromž 0is ‚ó-inös÷PLike @s), but fÿQto anè6gerz Ofloa| R j y |booleaní÷ A l ç (currently caûñinsensitively defined as 0f xqno, offF‹ Àv1, true½qyes, on( ‚True).  �!s 8 @ or  
TitemsÊúà$If, |sgiven, —äa list of tupl6(c =@lue)œ ©Ceach Â á�. Otherwiÿ ^ 	L Ç _n H a_proxyv  n  €, includYCSECTsremove_, Z R  `E filè[Pall iÏE`X ¼W j_ 1 Æ %u Ÿ ´ s¼þY 7Setµ V ? ðwrite(fp, space_around_delimiters=8K W0 M �configur¾` stateÍ@.inií0mat²¨`` Ë d   (ã î6), ƒ D pbetweenøsoè :ð surrounded by sý'paces.
"""

from collections.abc import MutableMapping+ ' ÔChainMap as _ 
D ”functools %io
 9ter o% $re% %sy ò
warnings

__all__ = ["NoS» ðError", "DuplicateOpÓ  
1 &
  ;"No5 ™InterpolaK 	 SDepthf 	M 	& Missing_ 	oSyntaxJ 0Par=  # "M É cHeader 	‚ `Config> eLSafe :Raw 	B 	Ä  ^\Basic « "Extended 	L kLegacy" # "Æ PProxyb “Convertery)",F °DEFAULTSECT. ðMAX_INTERPOLATION_DEPTH"]

_default_dict =  
? C = " ?"

I ñ  = 10



# exceS‘ classes
  z$(E !):° r"""Base, X for gM 0s."‰ …ó
def __init__(self, msg=''S  $    .message =  n   ‚ .E !)
' b Creprb Z xreturn a 5 Q__stro"__; #

û 
~(
S ò"""Raised when no s©ñ matches a requested oY
? _ ñ  óí %'Nj “: %r' % (; 1,)) < ç  $ =œ 
 fargs =? % )ù e¾ú  	ac � is repea÷ òin an input source.t�Possible+  ti~€s that rUV thisDñ are: multiple cre°Î u:ð the API or in strrparsers¡	¡  found moreu an onceN  ±  R #le· Qfile,R  ng_  fqionary.2 Þ	€,ü Ñ=None, lineno í0msgñ �Ðñ), " already exists"]u  â#ifW  r@not ^ œ    HQ["Whioaading  ","r(š)[  < #if© _  ' c °.append(" [ß ð {0:2d}]".format( 'no < :D"É) e†K(msg  Ðsg = message
  celse:
  õ
msg.insert(0, "Section ")& öError.__init__(self, "".join(msg)+   #.sC #= 
 J  ‘ource = s	 
 ’lineno = 	 
 ƒargs = (W ,B ,- ð)


class DuplicateOpÍ Á ( )ý ñ"""Raised by strict parsers when an o< á is repeated i Sinput| !.
£ ðCurrent implementax   rd ²s this exceR Oonlyf  QfoundN pmore th„ 1ncev Ñ single file,² �ng or di¯Aary.; 2"""’ Kdef ³7Ú ?T=NoneD % Âmsg = [repr(7 @), "“ N 0 ", r•!),ˆ  <  õ" already exists"]" #ifG f@not ‹ ¢= p messag/€["While L †ing from~ L)[  @ #if_  ' c °.append(" [}ð {0:2d}]".format( 'noí< :7@( 0extd  6  hŠ  ®à­Hô# =× š Ê=h “ŽÒ"Noë ÅË€A reques£I P was QU.	1 ,¬ül ø#No7 %ru: %r" %! Õ =g 4† hQD c �Interpol•Ö BRBase < fo× 1 A-relþÂsQ , íÕ€ V # ;\Í :Š 0Misbe6D"""Aƒ‚substituïàequired a sett¥UwhichŽŸavailableA`rawvalhsference‰  `¡Å("Bad value “ Àion: option ñ{!r} in section  Êcontains "
  Ñ"an interpola1 2key5 ñwhich is not a valid op% _name.N  0Raw) 1ue:D ’".format(7 ,– õ, reference, rawval))› I� óError.__init__(self,† O 6msg@  $ .a & =m c # args = �  ’ ¥ ©)


class œ aSyntax¢ (  !):o õ"""Raised when the source text ›"inbsU !.
= òCurrent implement¤rQ ²s this exce•` AintoK Ï€substituÆâs are made doeè0con³1 toª ”required –  >?"""QDepthü � ñnested too deeply.p  y Odef 
N| 5 0msgåp"RecursQlimit8@eded-hvalue Œ :dÇé bP|}0can]b| ‘ ¬{} steps. RÌ Ø  "dü	MAX_INTERPOLATION_DEPTH,C J /  ‹Dh]rParsingB Da6Rfigur7filÃÄfollow legal¸C	Žp=None, K  Ý ~   ò# Exactly one of `7 4'/`3 `' argu¥Ps hasC•be given.s'# 0 ökept for compatibility- %if� C and8Û ™   VÁ22("CUÈspecify bothu  I ½ Ã  T  E"Useë &."dAelifþ ¡  Í¥ RY4f V 6p l 
] q % =,m<"'S~ypv  ejƒs: %r' %lñ 2k 	 i  @ Z = []  5 2, )Ü‘@property.  Üà æ}ù"""Deprecated, u”ð ""
        warnÇings.warn(
  ÷2"The 'filename' attribute will be removed in future versions.  "
L ù
 "Use 'source' instead.",r õDeprecationWarning, stacklevel=2- )
 Âreturn self.^ 
 @¸ q.setter Ddef  (3 ‘, value):  ° 4"""† ¢ed, user `Y F'.""Õ  09© ÿ 2" =: %cappend#€lineno,  *A serrors.0 (# + ¥+ ðmessage += '\n\t[- Ú %2d]: %s' % ? ð


class MissingSecpHeaderEx @(Par  š ñ"""Raised when a key-åò pair is found before any sZ ! h[ æ 
ƒ__init__>ë @Œ .6 H  X   
ñû'File contains noŒ @s.\ns B: %rs ¹: %d\n%r' %\ ('  ¨' š …Ê% =E  � .“Ano =ì.no  
 args = ƒ `


# U“`in parSg•ôs to indicate the default behaviourÇÐspecific
# op Ê3notÎ itK rú� an exce& �. Created °enable `NonÏPs
# aú°id fallback õue.
_UNSET = object()Ž�Interpol¦ø 4hummy i Á that passesÜ †Àthrough withñzchangesv�C_getx7,,À,8s nv ÚZ sZ P 4rea/« Q _writeý R ?YBasic¶( @ 9""" À as implemen@!inÅ“�ic Config�2er._ /œuTs canÝ° format str6À which refer›Rother}As in` Gsameõ# Ž $alÿ* ‘ pFor exaÅ :£  ðsomething: %(dir)sñ/whatever

    would resolve the "%(dir)s" to ñvalue of dir.  All referenceD ð%expansions are done late, on demand. If a user needs] puse a b4 A% inL ò4a configuration file, she can escape it by writing %%. Other % usag•  isJ tsidered{ ñerror and raises `Interpoln pSyntaxE% R'."""#ò_KEYCRE = re.compile(r"%\(([^)]+)\)s"), ðdef before_get(self, parser, secÔ B, op ZÁ, defaults): —eL = []  H 5._i¬ te_some(Y P 3L, S k \ E, 1)O þreturn ''.join(L½ s½ ³ Atmp_~ " =† ó.replace('%%', '') #Âõ d percent signs™ D ô |•.sub('', !  L qvalid sµC –if '%' in, W [ú  VÕêB("inJ ` zX  I u%r at "c  F  P"posi×� %d" % (² ½.find('%'))Š, Bê Ið`accum,¾t^Omap,¬ Wdepth¸ƒrawval =§.¸ªöraw=True, fallback=restÉ 1if Y ÿ > MAX_INTERPOLATION_DEPTH†	~D™ “á Ç¥ o Qwhileù 
W p¦"stm6"%"3  ²Šif p < 05   KŠ.append(Û     r6	ZP >P J[:p]� T #st³ 6[p:ñ  ð# p is no longer>d c; :1:2< ¿if c == "%"ì $ {  \ 2— %el] (]  @m = ®.7o.matchS@if mä NNone¨ Š  ¨ (¦()	 @  Z"bad áavariabGÎ0 %r» þ «6var%x ÷ xform(m.group(1Øw  K I m.\)O * ?tryþ ºv = map[varà 6 ¡except Key5B îÀ InterpolatiÿonMissingOptionError(
  o% P, sec. ý	, rawval, var) from None@ Íif "%" in v:  l ôself._interpolate_some(parser, x Ÿaccum, v,E  I   ­ ý map, depth + 1)D OelseŸ x š.append(v: 6 uraise IÑ ŸionSyntaxbæ ± ¡  Ý ñ"'%%' must be followed by  Ÿor '(', "= ùfound: %r" % (rest,))


class Extended· ( )!°"""Advancedü†iant of Áñion, supports the sÿ 1 us® Ÿ ú`zc.buildout'. EnablesF „ betweentas."""
? ò_KEYCRE = re.compile(r"\$\{([^}]+)\}"), ð def before_get(p$, _qhPvalue,cfaultsõ  aL = []    H ¸L"S k "de\ ,Šþreturn ''.join(L½ s½ ³ Atmp_Ñ 1 =  õ.replace('$$', '') # escaped dollar signsç C ó K{•.sub('', !  K SvalidðC `if '$', K G  2Vz$2"inJ 	VX  I _%r atê R  P"posi­1 %dõ² ¶.find('$'))Ù‰, A¡ HÁ/!, _¸ , œ 	 ™·[# =¦.·xj `raw=Tr¬�fallback=v É #ifòÿ
> MAX_INTERPOLATION_DEPTH†	óD2“w Æ¥ o Qwhileù 
W p¥"stm6"$"3  Šif p < 05   Kz
Û     r5	ZP >P J[:p]� T #st³ 6[p:ð  ñ# p is no longerÓ	 c; :1:2< ¿if c == "$"ì $ {  \ 2— %el] {]  @m = ®ð ._KEYCRE.match({rest)
  Ýif m is None:  - ðraise InterpolationSyntaxError(op Q, sec	 D  H h"bad iG ÿ variable reference %r" % ¬ þpath = m.group(1).split(':'Ù  C ! =J ­[m.end():]�  ¶ $ =½  bopt = ã  ?try2pif len(¯ o) == 1'  a rparser.h Qxform= >[0]Ø  6   v
nap[opt×  ! ,elˆ 2ˆ  ³ /[0P  T ¯ 1¯ ç @get(p ,Y¯, raw=Trueë ?els˜ � œ³ 4  n¹ 1 ó
"More than one ':' found:±(o.,)Ä ±except (Key0R, NoS+ OC )£è  wMissing< (ï ë  tÃval, ":".joi¬a) fromK ¿if "$" in v£ fself._àre_some(ôë‚accum, vu,e  j CdictM c.itemsC>)O �epth + 1² r¿ @.appNv: ¨¸ <­% ð
"'$' must be followed by  Ÿor '{', "; ¹é

class Legacyï( £Ì"""DeprecateØ!us ò	 old versions of ConfigPî� ™Use Basicc Ê or Extended Áinstead."""
A q_KEYCREêò.compile(r"%\(([^)]*)\)s|."). ²def before_†Dlf, £ ”1ion¬ `value,¦sõ  �‘rawval =  …   dRõ
= MAX_INTERPOLATION_DEPTH( awhile . :8  õ# Loop through this until it's doneL  < J Y -= 1 ðif value and "%(" »in value:
  ó!replace = functools.partial(self._interpolation_0 ,I X 	 rparser= ); › 2 = p ´KEYCRE.sub(m ½ 9 >tryÒ  z R  m% varsw ÿexcept KeyError as !  O xraise I	�MissingOp@ (a  ;   o% P, sec. ù, rawval, e.args[0]) from NoneF ?els“  Ubreak( "if¯ and "%(" îÅ  RDepth½ ¤ tSreturG
} ádef before_set.", äì Y ‹)¯P Õ@staticmethodb €d(matcho W As =  †.group(1Â qif s isfˆ  ¡Œ 8 7 „/ ³"%%(%s)s" %÷ .í ñxform(s)


class RawConfigP	ó (MutableMapping¾ 8"""% Ð that does no	  ‰B."""‡ñ
# Regular expressions for• 4ingx� headers)ª à_SECT_TMPL = rY     \[  
1# [¬ % B(?P<e p>[^]]+) 
 °# very permB5ve!> *\]+   5# ]/ ¨ ?_OP½  Ž ç O>.*?Œ  /  Ž 	 s*A êvi>{delim})\s*“ ÿ
# any number of space/tabÑ# followed byR Zof th	
y  3# aC ¬ _iters… ,Í q F]>.*)$„   0# eß thw•up to eolB 	³/NVs f ¶,:‹  ¶ „ ù	 :¥ HallyÁì €  Š îÁ@ î…  FÐ
              Ä# space/tab
* ô(?P<value>.*))?$  õ# everything up to eolB 1""" ð
# Interpolation algorithm1 Ñbe used if th ñr does not specify anotherN ú	_DEFAULT_INTERPOLATION =e !()- ð# Compiled regular express‰ �for matcÀ 0secž s8 âSECTCRE = re.cC  (_ `_TMPL, VERBOSEi !oph ò with typical separator€ /OP  1OPT~ ÿ.format(delim="=|:")’ 7Ÿ 1al ý� !# l pited usî¸ 
;_NV: » /NV¾ C@lead“ QwhiteÈ¡ in a lineÍ�NONSPACEÑTr"\S"ÀóPossible boolean  L  ™�configurÃ.X öBOOLEAN_STATES = {'1': True, 'yes Ftrue $on H R �'0': FalsI 'no f  4off !}
N ódef __init__(self, defaults=None, dict_type=_ _ ,? ‚  ‘allow_no_=’ *R ÿlimiters=('=', ':')A  ð comment_prefixe. #. p;'), in£_$ ¦ � rstrict=_`empty_@ Bs_in  s : æ ã=B Ï´  i­ñ =_UNSET, converò  "):p * g.E& =_‰  ~ Bs =   u¨E ¬& Ž D = C› qMappingö×X oproxie} % [1R] = SQProxya  W_Ù r 3ru Rtuple²7- %if] * &= Q:BÈ doptcre( p:if ®R elsej& M   
[ ðd = "|".join(re.escape(d) #dÎ »  – x 
Z  # î¹ R dS R  9re.“À        else;:
  òself._optcre = re.compile( ý
OPT_TMPL.format(delim=d),J Y  µre.VERBOSE)6 ^ ý
comment_prefixes = tuple( \or ()? }inline_- F   M ’strict = 	 ª Ðallow_no_valu*
 . `empty_� Bs_in4  Ý  
< ûdefault_section= 
-  _interpola, 9 =  , 2if p	 ª is _UNSET+ =A ÿDEFAULT_INTERPOLATIONh ONonef IÐ (ðÐif converters¹ ?not½ , `.updatQ> 	U ^sœ Tread_! (	 !)
ï Ddef  +)C creturn2% 7 Ús7 B"""R: €a list o·ó names, excluding [ŠA]"""‘  p#t b ö will never have6 e in it9 ²  v – .`s.keysz,  ö 4add , #, o ô """Create a new"  v 0theËQfigur¶. À òRaise DuplicateS¥Error if aH 0by H ‘specified ¢  G  al»¢y exists. W V¹L  Q HG.= P8�=Ïõ y rÀ i •('Invalid¹  w t: %r' % Q @ p i@]¢j *(2 èÑ #s[	 ]ëþGdictl/ iproxie. �[ProxyûÄ 4has$ ,a"""Indä� whetherÐ ,¯is present8CThe ÉV Ü $Ïacknowledgedåü k  sÛ  opf¸öÁ4  Bs foè @giveà[ ö .w6try, 0opt>
˜ ÈW.copyÀ¡except KeyîÀ:
          ò	  raise NoSectionError(s Ó) from None
  õopts.update(self._defaults)$ Áreturn list(0 �keys())
" �def read? ð, filenames, encoding=r !):.  w õ"""Read and parse a7 õ or an iterable of "s.q  C ðFiles that cannot be opened are s† õtly ignored; this is… Pdesig/ "soH 0youL Œ specify† •potentialB �configurai¦ A loc ös (e.g. current directory, user'‡ Hhome —systemwid !),+Ïall existing… †s in theD@will  ¦¦.  A singl³� may also- WgivenrR •Ásuccessfullyÿ%s.™ 5""" äif isinstance(o Às, (str, byt/Ços.PathLike). ï3 E = [ ]a  Ú 0_ok  1for•  Ž 8 Š \ :try   AwithP® ÏØ~) as fp>  B M ™ 6(fpV % ‘except OS¨I vcontinu« 5 N(, @K þ   =) efspathÝ 
–  µ ¯_ok.append%  ( –_i �, source  ç9a() but²Pargum01musÒÇ-like object’�The `f' 6 =", © öing one line at a time« OpÂ€al seconA‡ ic2e `Å ' P  aY of» Š þ 0 be#  P. If ŸOP, it U Baken� f.F '  Ì ehas noN ` ð' attribute, `<???>'F FusedÅ p³  '  }
ò1 "= ’ ƒ  r§A‡ ®C '¥ D >s_string9 + 2='< '>'F‡ â!a o 6 .s¡a= io.Sr  IO…6ing¯  ¾Ì 3 Œ · Cdictµ   @ionaæ0='< ·  . C èBKeysÕÇ ðs, values are dictionaóries with keys and values
  ñthat should be present in the section. If qused di …ary typeK < ´rves order,> x Rtheir‡ @willm Paddedk 0 %.
J 1All[ Qs hel"  � x ðare converted to strings du I àreading, inclu •   names, opá    )‹ O   al8 ‘ond argum"sñ`source' specifying  _ ! o6Ž Á  be)  Ÿ . 5""" 0elef "s_$u= set() 0for‘  » ,T'in˜•.items():1  îÍ  =.( T  # :try4   “self.add_3 ; òexcept (DuplicateS<€Error, Vw –  b 1if e _Ç!ctˆm  
¡  C Frais‹  
6  Á ¹  LBkey, p C X 0keyC =êxform(str(key)Q 1 $if[ ¯s not NoneÅ œ ] 1tr( M +Ø )Â 
ü m 2 ¯é¢	P ", â‹ 
e a	:  »  ËÞ² z) @def 0fp(.  , fp, fileR=<A€"""Deprepad, use< _0 ˜ instead.X@warn).	 (Ô"This method £Rremov¥öfuture versions.  ¯ çÐ"Use 'parser.Â † 6()'‰ ,q º BionW— å, stacklevel=2- { \  ž=ò  "F3getCn±à, *, raw=False!rsZú, fallback=_UNSETk Ge›3¡ >ta given’>ñIf `vars' is provided, it must·D The_ Åis looked up
$inP 5(ifQ C), `ã !',= ( °DEFAULTSECTƒ êj °  × Ói�0fouæDnd `½  isk6d aHa;í0. `¬P' canè ý X as a\ G
3�interpolaà :qenabledÛ  
Ç&alŽA`raw¨ àFalse,
       ó* all interpolations are expanded in the return values.

  ñArguments `raw', `vars', and `fallback'T Çkeyword onlyC pThe sec| õ DEFAULT is special.k 5""" Etry:  ‹ òd = self._unify_© (X  , – )2 ¢except NoSx ZErrorQ 4if ¾  Ž j_UNSET#  x UraiseX   Oelse(  @S 2 !opø ½  bxform( ´ ó ã R = d[+ ]U ß ?KeyÙ ,A NoO¡ H “ ,®œ ø ¤ ’if raw orT d;Non:v: a'  	ÍÀ.before_get( ¼ ", 5 Elue,^  Ë  "d)Odef a Fconvg –**kwargs)·  ( � .¦ 
9  o _8 Õ    @, *,d`=Falseé 0rs=dí ™=é/, °  ‚Á  Y.½ € csraw=rawƒ  ‹ƒ v} —Ó(³,¡\ M Ã&Ø ç�# getint, Qfloatäðgetboolean provi4Ðdirectly for  Áwards compatÓ  4O úÂ ¼¥ ¹	Ð ¨;­§Ý ¬'=‹ =;î 5ð - p «ò ’ % „ ô ö /ø 8À, self._convÿert_to_boolean,
  
àraw=raw, vars= ´, fallback=	 Ð, **kwargs)

O ðdef items(self, section=_UNSET, V SFalseX aNone):;  ? ñ	"""Return a list of (nam/ ðlue) tuples for each op`   i2 m .‹  P ð All % interpola+ às are expanded9 Rthe rv õvalues, based on the� Àdefaults pas @into! ñ constructor, unless œ µal argumentK ð`raw' is true.  Addi� °al substitu às may be provi¯ Pusing] K  ›'c À, which must: Aa diƒ�ary whose¯ õ tents overridesM Ðany pre-existj ô T4The×€ DEFAULTÊ …special.L 5""" %if3 2is ö ª�‚super().D)A @d = R%._’ Vcopy(" :tryR �d.updateŠ#._#s[	 ]; ú except KeyErrorG » !„ ƒ S 
0 Í ‚aise NoSþV (x w ±orig_keys =í0(d. &()# 1# UÄ P with÷q entry m0fic�GiablÃ if s•  /0keyu0lueõ 6f
,  Á !d[mÁáxform(key)] = #˜ p_getterÇ Sambda•:²	p.before3 ™
‡$,B B, d[„ F], d ifI
· Š H º q"[(a  ˜ 3ter !))i"  6³]d ï0pop®Î Ëemove aüAfromÆ¤parser andzGit aˆ /_þc_proxyu. If no^  is¼@senth&isºÚÆSnever” ñed because it cannoS re× dêj -C¹ 's( b¯ÕU[key]™  1del= ·Í8 ruë  ¾Å “ ]7str” X - pstr.lowŠH Bhas_ ëÜP M �"""Check> _P@enceÑsa givenä * -Z!If/ïCed `# = =  oGç empty string,—À
        assò6umed. If the specified `section' does not exist, returns False."""
   !if( : D or  ó== self.default_ ":
9   opq  +  bxform( ). ‡   2 ina _b s, Eelifˆ  Ç + … s† X Þ E *se' x ­ É ® ƒ [	 ]r  /orç !)
2  deä  t(e,î ,6 Ö, value=None)Æ “"""Set an' .Ë5 /  ‹  ¡ _interpola·¯.before_se† ©  F  q øa, eEdictÂ - è:try ¾ I   OionsÈþ except KeyErrorP ’raise NoSt& (T p) from ½B   É [ð.‹	*2] =õSwrite!ûfp, space_around_delimiters=Tru&W:  (P.ini-‘Áat representþ" o@‚configur bstate.ƒ  7OIf `w P' is {   (ˆ™6), š þ òbetween keys andê ‘s are surÒ Red byä %s.: âŒ 
 ²d = " {} ".û D.36[0]£,elB A ¨
3 • Ÿ lfR �; ¾7(ÀP ,U  o R c€s.items(kÆ f¼0N   @“ A  Ó	B	˜ Ø  å_i  < ", o U_name_Ü E
ÿÙt single7< to9fp'1fp.ˆ ‡("[{}]\n† )O3key‰ÿ) ¡ 
qô£e} ý 9ù  f -ý À              svalue)
  1if  ñ  is not None or ñ self._allow_no_( :>  C  ñ = delimiter + str( ú).replace('\n', '\n\t'ƒ OelseW )""r òfp.write("{}{}\n".format(key,Ë )_ . Q\n")
J ðdef remove_option(è P, sec ",  )“ A"""R1 3 an '."˜ #if/A  >L @ == ] “.default_ [  A  Sdict - _. s¯  " ":tryE  ' I   Sions[	 ]R  / þ except KeyErrorP ’raise NoS& (K a) from/U 9Ç  xŸ( ˜“existed =O1 in€ O 3if ( 
› 5del- [Z Ù dreturn9 ò¾ 
óëQ filei 9ionð– é ó¿  -` »Å 3 ¥í  ( oproxieÌ ó ³__getitem__ð 7keyì ƒif key !wv¤C and×dlf.has  jF  J)I! Æž _Ä Fkey]œ>__s© Íü€# To conRñ with the mapping protocol, over$s  �Es in˜ #> °. Ñ » [²  $I ” þ sB  # XXX this0  T€atomic ix0ad_å÷ fails at any point. Then again,N ðno update method, €igparserf b nx �mplementaÒÝ – u‡s.clear(Âl*.s = GL $ #reb({key:Ë}´ __bÏÝ ±VÖ@"Can«û ý ñ*÷ Šˆ;ý §¯__containsÃ] Çø Àsection or sñelf.has_section(key)

    def __len__(self):   ¡return len .> Às) + 1 # the@ Sault Z U NiterV ü-# XXX does it break when underlying container state changed?›  b Âtools.chain(¨ 0def“ ¯ @,), Ú À x.keys()Aread> @, fp Gname¤"""Parse aê  ed§ `figuraTb file.  >DEach, _ in a/     é õ	s a header, indicated byð  a �  G ðsquare brackets (`[]'), plus key/value op” sO `N q' and `0 ð' delimited withç àpecific substr—¸(`=' or `:'� p)ý V… ðs can span multiple lines, as long Pthey Ó Pinden� edeeperü AthankQfirstB 1 of ¼ €. Depend¢ o* p«õ r's mode, blankP ƒ ± may be trel€as partsZ ­  &  ` só wignoredã ;ConýsU ñ	include comments, prefixÑ# sVŽ �characterË#”;`[C). CL a rappear ë eir ownN  hón otherwise empty3r> 0be f0redN æ Qs hol>ï P Ö~%s. 5""" 1eleè å_added = set() 0curE p = None # ,jAa di¥&ar  C  ´G ^ ?opt  × eno = 0* ^i_level eT —  ¡ an excea_ 1forg1no,  ] enumerate(Swstart=1T ^ &_  =¥ys.maxsize\  (  # „@p inÜ ]	$  _o°s = {p: -1 �  ; ( { 0 }M EwhilÅŸ 6= s  ?L D = µ   Inext“ 
g  # Ÿ $¯ ex=Y {.items(> >    Ý1x =zb.find(‘ P &+1� /   ifnŽex == -1¼ (  �:inu’ 	á [x 2] =Z 	S2 w 0ó(À 1> 0T â[ ß-1].isspace()ü  V ËFðmin(comment_start«, index)
  õinline_prefixes = next 	0 Ð# strip full 7 ™ comments' Bfor P £ in self._) X :2  ” !ifS .c â().startswith(M )4  8 Z 0 M = 0Z  & Ybreak $if¾ _; Þ= sys.maxsizem i INoneR qvalue =Ç )[:/ ]× 	1 qif not 8 p #if<`empty_pQs_in_/ s0  ç a# add 1 ‡ r to thec Ð, but only if ™re was no–  H   # 0 on. Q * Iif (ï @ is O and2  ` pcursect,  0 optnameT [, ]] @‹ 7 ñ.append('') # new} \­ed at joinØ ?els6  _ #’Âmarks end of˜J  4  ¯™nt_level š/ zcontinu� ¾ Qation¼?: Ðfirst_nonspac·©ðNONSPACECRE.search(ü 
8Kcur_  
N ½ ()h
  &¤? Éõ‡ >å6ð sèS
ä @# a Ÿ =�header or�  
P Ù •'³ 	’ ÷#²-it} 
l  *  mo ]@SECT°omatch(Ì   / ^if mo     ç ZÂ= mo.group('ô ' .   ›c�ã G ?ionš7   ä ctÕd} ain eleNo_added­  H   ðraise DuplicateSecè`Error(Š  T A, fp g B   ü/no @ QŠ_z  [	  { ]{ 
í E.add¸ p (elw"==tdefaultz 5À            ÿ  cursect = self._defaults
   _else:  - K _ict()/ p  } Pions[	 tname] =• ; jproxie: ÐSectionProxy(b $, Y Š ÿelements_added.add(5 A# SoX  º ð can't start with a continuaŒ _ lineË 0optò _ = No#  5# nf ý header in the file?T Delif<1 isV ¯Óraise Missing4Hb €Error(fp™ ,» "no @u# an opå ’ 1%mosþoptcre.match(valuek  `_if moÐ   NP, vi,– òval = mo.group('© a', 'vi  j 'k  P `if notJ  x  , eÍ �handle_eG?e, J D   Ä N ³ cxform( Ÿ.rstrip()¹ 
û ._+ mct and, n  î8 î )i
)R¡DuplicateOML^ ,Ž 
–   
M
º Ñä  @ À# This checkIÁfine because€`OPTCREú?notÎ !# Ôñ  if it would seS �!to¢?  if} * !is‹ &†0opt0 =9 .p„ d·[a €  Oval]› 	 V !# Ê@less� Aion ?ingV  8 Ž   ÷ 4 † ð# a non-fatal parì ™¡ occurred.� upÕc  “ a# exceÑð but keep going.8  owill bíJ 'Bd at: Qnd of  Ò © D  @_ain a• @list> at Aogus®¹ } ¤À._handle_erròor(e, fpname, lineno 3)
  ðself._join_multi& †_values(& õ%# if any parsing errors occurred, raise an exceptionc Uif e:  x - !e
 Odef �  � ); °defaults =  . @_secq , _ s^  o 4all$  < ôitertools.chain((1 5,),4  8  € U †.items()1Efor — oXs in ‹ Ù  i  2 ©0val+ 6 \ 
.  2 ðif isinstance(valÜ'st1 &   V p= '\n'.î 0 ‡).rstripé. } [’ ]p _interpolaoÐ.before_read(=e  2†A   · g, val)d © ²  û5µ"""Read the p passed—  Åinitializer.¬ PNote:t ð ues can be non-ceng."""+  ì1key¢  ueV ˆ î ^.» [ ¢ xform(key)¦¸ò qhandle_­ñ ?exca`if notÊ  Zrexc = PE(]ø°exc.append(J pArepr Qretur,® Tunify| ä  ÑÚJvars¤ðCreate a sequence of lookups with '5 P' tak²Õpriority overŠ Î'wp' which1 9es 0 ÂDEFAULTSECT.·  ØI –dict = {}g *ryK
*  í .N[ ]? TA Keyv
K $ifj/ !
0  µ �2NoS:V (w µ) from None� P# UpdoY 5öentry specific variableu>var if* s‘  ¹
 ½ E l8s¨ ª 
R  &    ¾ trð&ue©    § T +   ¹ _C:CMap(@ « ô    VÕ…óconvert_to_boolean™¬ 
ãR&#a * ]` trans„"ng«ð	other types if necessary3.
  5""" õif value.lower() not in self.BOOLEAN_STATES:5  H praise V< òError('Not a boolean: %s' %] ): _retur^ [‡ !]
3 Ðdef _validate	 �ue_types(  õ, *, section="", op N F="")¶ @"""Rµ �s a Type· ò  for non-string° "s.  è íThe only legal+ Â if we allow= Aless½  > ’ Ðs is None, so/ Ðneed to checkC 2the>  * a? • &ifÆ -@ !do¨v  Us, orC 0 ) Y but {  þ ©  ðFor compatibility reasons this method¶  ; @used>Æclassic set(ý kðRawConfigParsers. It> Rinvok= ¡every case�@mappš…protocolÚ ‘access ans V .x ñ ª ³isinstance(BW, str/ ¿å-#(", à names must be9 Vings"ë !if¡f 
e + O keyc  	!._á2_no$2 orN7 Î • &”  / ý ˜ 5 š š‘@property  Á’converter¶c_' 1


A Ô(:G 8"""&   implement3�interpola.÷• ø_DEFAULT_INTERPOLATION = BasicI5 "()
 È  U ntq,m=9—  @“"""Set an˜».  Extends Ì  °0 byG  ê »  æ Û±  N 	Ì ¦ syntax on¿à  *    ¨ . P 
:Æ= » Ô¿0sup ˜ 	2 Cadd_— 
ÄCreate a new¶ , €c"ur©(ý 0s 8!if‚ ¨& i�a¬-H = "Š *Ò_read_defaultÿ$,  
@ReadTe  C pasP $Áinitializer,çsicitly 85ing/Îðs to strings likÑe the rest of sAPI.

  õ,Does not perform interpolation for backwards compatibility.D 5""" Etry:  d Zhold_U z= self. 	5    H = I› .()2 ±read_dict({B °default_secÎ #:  &s}= kfinallµ > 
  > = Ë ø


class SafeConfigParser( )8""" o aliasb	  purposes.bï Ðdef __init__(¦ °, *args, **¥#gsm  {…super().1 + S  * �warnings.	 (   M"Theß  ö ùhas been renamed to ã K óin Python 3.2. This`will b©û
moved in future versions.L J Usem ùdirectly instead.",Ê aDeprecØWð å, stacklevel=2- )×9óProxy(MutableMappingh`"""A p   ,“a single s‘ from a pÈ
#  , J] 5õ""Creates a view on a` Õ°specified `@ `A`R `v  K    4"._ # =˜ ú   B ! =‰   Ý @convY > . bertersà _   àkey = 'get' + & F   ñgetter = functools.partialÑò.get, _impl=getattr(q f, key)º M s"  ¹   ", ` )ã0Crepr0Z¢return '<Sæp: {}>'."atŒ _	K sgetitemN s S !ifL Ž ep.has_op€T 9  Ì ð raise KeyError(í 9¬ 	Y (ge¦ R ö s« w, value² 	R �_validate	 ’ue_types(½ C=key? =E � 
s� > 	O?delO8P	E and–  S  	â  re`� : ‘_ V�contains³º3lenU ’ P 3len˜9s()Rð iter__(self):
   ðreturn self._options().__iter__()

) Edef   - !):   #if? sname != ðparser.default_sec] 7  ; 	~ 1 …  f  ._T )k OelseB s s½ ‘@propertyH  Ë k (c É b# The  À object of t ñroxy is read-only.M Å 5x  Î v   m + on a pz  B x  â 1geti ", Pò, fallback=None, *, raw=False, vars ×  Û R_impl — **kwargs1“"""Get ane r value.†  @ „Unless `| `C°provided, `‹ ±` will be rŒBed iuº ‘ Çis not foundd 5"""# a# If `¶ k �it shouldi ð a getter methodiå²M @thatˆ ¶ södesired type conversion!if¬ Š 
±  %5getw  ( ÃÉ ·3rawµ º,=  u v=	 ,Å¡


class C¾ óterMapping(Mutable îP"""En  0use«cget*()D‘s between DDand Í È3ies¹ IfÛp ˆ  juements Ÿ‘directly,U ]A for Qgivenø 5keyC`S"`.Ëaresenc®  áª ù -r here e× J ¬ � to find È  õ  D ¨ aÏ
;Ë  —U ðGETTERCRE = re.compile(r"^¤0?P<Œ h>.+)$"mq_init__,•� á »#._h=  p  •data = {}  =ûain dir_ H _  E m¦Â r.match(B – - ñAm orú@call0 - :atti ,€)r  I …continue´   î  Ð  [m.group('7`')] = F‚   # Seeƒ£ docstringp •__getitemV7key‚ yl Bkey]Í@ s@  †7lueG :tryòâk = 'get' + ke… Õ úexcept TypeError6 praise VQ @('In<`atibleI `: {} (ƒ 
 ))'2 a 	 ð''.format(key, tÃype(key)))
  åif k == 'get':   ö-raise ValueError('Incompatible key: cannot use "" as a name'a ðself._data[key] = vR j pfunc =  âtools.partial(9 ðparser._get_conv,  =D e  > . ]erterd ysetattrS A, k,v F Éor proxy in  o :s()!2getn   
½ G À.get, _impl=# j  _• + Ž P !)
ñ def __delitem__¼ ,u… :try’ #k Ê0 + ê† or Nonez ¢except TypÕ
@ ó2Keyñ ,�  ° 3delÍ €for inst9Biterachain(º "._É3,),E  .ZÖ  m Ú   1delÇ j 6, kÕ   Ù �AttributÞ  ' ‚# don't ê ñsince the entry was presenË ·¥, silentlyï  I   ­# clean up ˆcontinueÍ Êï preturn  + `	?len8 9len7 Ð"""Utilities ˜°with-statem×  ™ ôexts.  See PEP 343."""
import abc 4sys Ð_collections_# Wfrom   ? adeque
  õ Rwraps Ttypes `Method•ó, GenericAlias

__all__ = ["asyncÀ ¿manager", "  `losing Cnull! (",¦ö"AbstractContextMQ  Ap  
D  " �ExitStackp / �Decorato¡ ! 	> ð redirect_stdout?  !er> 0sup“Äs"]


class ¡ m » ¢(abc.ABC):us"""An aç b base @   IsŸ !__&  s|" =8 m¦(¡	§^enter©B"""Rä`U`` uponqQering~pruntimeÜ ŒŒ  a    ; Ø @è × ” ¸ 2Cexit„ `, exc_i
 l , öWeback… ¤ ï0any6  epé° triggered F/in­ 3Nonú@L¦ 1sub Àhook__(cls, ¹ ñ   �if cls iì·_£ð._check_methods(CÒ, "__enter__" “xit__")
  ðreturn NotImplem. ñ!d


class AbstractAsyncContextManager(abc.ABC):
M s"""An a1 b base E Pfor aA ’hronous cI " mJ Rs."""E !__3 Â_getitem__ =E òmethod(GenericAlias)3 Z € def __a¾ ¡r__(self):˜  è B"""Rè ` q` upon - ô ing the runtimeœ “  ;   $ ; t @ü ë › l 
Œ k‹ ¢, exc_type
 pvalue, [[eback« €aise any6 ÿeption triggered within´ CNone´ Z­ 31sub Àhook__(cls, Ô ø   �if cls i
j 3 /p_collec¿  s_1r_check_ƒ 1s(C‘³!",B @  "ôhÓÆóDecorator(objectƒ("Aºaor mixnžat enable¿Ô to work as dW #s.Óg±recreate_cmn  ê œ$a ' àd instance of x.Å 1 ðAllows an otherw-„one-shot¿[U likeY_? õ Ë Á �support u{s3 aÒ Ô via implicit« 7ion› 1Thi+°a private i} face just † .u ñSee issue #116477 vdetails&  5   s *)vS_callg, funcxq@wraps( z  7 ÷inner(*args, **kwds7  n  ƒ–_² Ù&  * ˜  e R s # v x$BBasem`"""Sha ]  eQality+@a`a and @œ
 å‰  ø @__in¡/",  ga.gen =UÚ '  ž ,-L   Q > d Œ  81# I Å19330: ensurœÝ%ös have good docstringÄÑdoc = getattrñz1doc # ifC  ð  l ’   I  Ç$A).__E · Ü    =I  ð# Unfortunately, t,óstill doesn't providÉ ÷help output whenJ @inspY»[düÀt manager inóstances, since pydoc
  ò# currently bypasses the in8 ò docstring and show!  L 1for= QclassC Gead.! ðSee http://bugs.python.org/issue19404 G òmore details.


S ÿ
_GeneratorContextManager( UBase,� õ  ŠAbstractT 7 / ADeco“ !):i ‘"""HelperÈ "@c© m© $ d. Q."""
1 ódef _recreate_cm(selfM  « a# _GCMOÊã are one-shot `  a  èo…[ ? ´CM must be g Ôd each time a• çed function isA ecalled preturn § 1.__š!__¶ .@ , 0arg� —elf.kwds)í c_enter4 	ê Àdo not keep A u ? õ alive unnecessarily‘ #ñ yply needÍ $orñ Ñion, which isc Àpossible anymM ?delÁ ×  â , 2tryõ i  BnextEgen)/ Ðexcept StopItÈ;ion@ €aise Runš„Error("gôù
 didn't yield") from None[3xitZð , type, value, äWebackr!if$   I 
� Þ  â Û   ß  & #UFalse  Jelse�   rWstop"hJ "ifé  h �# Need to·c1tia÷so we can reliab} =   �# tell if* 0get”b same  V ~	ô  9 Ÿ! =‰(Å   ‚x¯gen.throw(ä	g ‚ 
y0 asš r«# Suppress1 Â*unless* it'ß Ithatx  Ä a# was [_¶ ú).  This prevents an H  d	1ide_ò"with" statement be¯sÅ e‚ �   „0exc r…	t 4Œ3 Doš1re-¥ � ó  ing epH1. (èZ27122ë —  if+  “ � › % ¼ @  ð# Likewise, avoid sðuppressing if a StopIteration excep
 +
  ÿ.# was passed to throw() and later wrapped into a RuntimeErrorN  í(see PEP 479).! «if type is¢  p Ðexc.__cause__# mvalue:E  Ã Íreturn False! ;rai K ¡# only re-4  <æit's *not* the;P that.o #@A, beÉ ñ __exit__() must not l G  aªx unless@ ôitself failed.  But°M  0hasÑl Ê ñ o signal propag%0, sÿ/isL  QfixesE ñimpedance mismatch between ?�protocolL   ê Y. 0#A  €This canJRuse 'Ýd BaseEé0 as»q' (as i� K  ñ async implement)6ÿmaintain compatibility withG  ñPython 2, where old-style clas‰ Qs areocaughtL  /byÑ 'ÿif sys.exc_info()[1]7;=óP("genWðor didn't stop af,ÿR")


û  _AcG4 ÿContextManager(_  Ë, ø �Abstractg 
^ )ïñ """Helper for @óc‡ m‡ Q."""
n  ð def __aenter__(uL  ~ 2tryY     ‹`await - ±.gen.__anexù[  * © œ° ¡Q  ¿ vÿyield") from NoneÂ z ” ,x!, R , 3WebackØ › @ N 
’ ô  Î ñ  ' õ  + J/  ?els ˜%")N J "ifô  ~ /  =<(J   o# See À.Ýt0com^ês on subtletieg#¤+is�¾  t †À     await sûelf.gen.athrow(typ, value, traceback)
  ó!raise RuntimeError("generator didn't stop after ^ *)"K ðexcept StopAsyncItB ¾ion as exc:y Peturn r is not­ 	( V ž P $ifL õ q  ù ru YFalsej   ñ	# Avoid suppressing if aÖ Ñ • ?ionA  âwas passed to ‰€) and la>éwrapped into awN  ð(see PEP 479 for Z žKs; a _ alsoJ  ðhave this behavior). But d¦ pis onlyí 0theG0ept¼¯ Q  0by + 	š¡is actully2(	)9 Ï K  Íissue29692). áif isinstance(Ú0, (gX ,n m  /)) % .__cause__{U /  3
>	µ a BaseE H�  …  ‰ h ó


def contextmanager(funcî J"""@ Q decoË!.
§ âTypical usage:  æ 8 ,    q Usome_vÃ(<arguments>x  )   u<setup>=   >tryÓ qyield <z
/ ofinall3  `<clean^ _ TÌQmakes×Ê _with ³  Aª<variable>œ b<body>¢equivalentË'ise ê æ b / =é k  #  ø ô  # 1"""û @–sø  ¤÷helper(*args, **kwdsžÅ$_GÚCEME", = ; Y 6 \ 
~r
e‹ J ƒ#  ˆ=  Œ    ï à ™—¯  Ÿ ¿ ¥Àequivalent t£o this:

  u<setup> Etry:  $ ö<variable> = <value. ! Fbody lfinallE Tcleanh 1"""c Á@wraps(func) ö
def helper(*args, **kwds)“ ñreturn _AsyncGeneratorContextManagerR ", B @ ^ ; a ú



class closing(AbstractK z 3""" Ð to automaticé A òe something at the end of a block.rœCode like‡AwithJ  ‹ ö<module>.open(<arguments>)) as f€ a >a Ðis equivalent¬ ïfÅ_ ' T Æ æ f.M2e()Œ ç Öà__init__(self,þ #ng\ p   .?= ‹ : Senter; 4 Ï; 3 xm —*exc_info= 6 ´ ÿ _RedirectStreamp !_s& r = Noneù · 	ñ ¬new_target… _ 6 =  ^  ð # We use a listUBold N sä#maQå CM re-entrantB í C_oldƒ hs = []¬ c9 ò.append(getattr(sys, & )É ¸ s$ 2 ì 5 Õ	¬ Üñexctype, excinst	 )tbe« ‡ u.pop())r
‹_stdout(f m�ô for temporarily I   L  ¸Ãanother file! 9P# How  sD ¯!() UtderrÖ3Y ¢ Qsys.s( �  Q   G 3dirœ  h Qwriteyi a’ 
i ‹'F ¯.txt', 'w'Ž– f�  ~  K B(powü ,q P")"Ž?errŽ60err_	Ž� 6err� �suppress" è  4to <   specifiedÂreptionsîRAfterK"xc 5 is:  edì0ecu3 ¡ proceeds € €2nexÐstatement folôlowing the with statement.

   öuppress(FileNotFoundError):+  3 öos.remove(somefile)! ñ# Execution still resumes here ifŒ  5 Ò was already Q dH 2"""� ð
def __init__(self, *excep^ s—   &._ 6 =  L SenterM @ Ipass' xs €exctype,S Ainst	 'tb? °# Unlike is! ðance and issubclass, CPythonE À ‘ handlingô  Xñ
# currently only looks at3�concrete � ú hierarchy (ignorH  ï	Š ˆ ` checkh\ ÷	). While Guido considers“ ðthat a bug rather than a feature, it's ÷airly hard one to fixJ !du �various i‹�nal impl“a×³ details. s‘Š provide– 1e s9 rfù based semantics,³ 0tryù 'to” @exaco‘reproducekQlimitŽ As of ¿¶ pˆ&r.H 
 ñ See http://bugs.p÷P.org/ô e12029 for moreî A Qretur&ç€is not NQ
R(—ýA)


uò  _BaseExitStackÆA"""A( $  Š # ¶UAsync .Ž@<ricmetho© €create_e3áwrapper(cm, cm 'Ü MA SType($  - )€e 5cb_c ø	allback, /, *args, **kwd¡ 	š @exc_ZÅ), Ç „cW (S  Û Œ º l ­ú £4it_a £s = deque(ú  @ qpop_allì? ¢"""Preserv pcontextÍàck by transfer0 it|da new Æ à   Pnew_s! =Mo (Å!  T´ Ë  è  }   	g AApush�   *it€RegisternGÖ ðPstand}_�"_ ªQ sign«ó6Can`+ëœsame way I 6canôpAlso ac�Âs any object� -an= #(r¾  „ a À 7!toy °  ´4eadzX  it])�  ˜ M  p# We usvð  unbound methodó rather than a bound method to follow
  ó# the standard lookup behaviour for specialE %s.= °_cb_type =  u(exit)
 Etry:  p    _‹ $= > 1.__ _, úexcept AttributeErrorK ð# Not a context manager, so assume it's" vallable·  ‹ ¢self._push} ƒcallbackÄ  #   Jelsey 9 !cm< 3 !, Ä Ý )Ê areturn P  # A|` use a› ¢decorator.5£def enter_× (n V, cm)… @"""E$ sº|upplied	R  Ä ðIf successful, also ù tes its ~ßš K andÍ x ‘result of† "__· _E l5"""@ A# Web1 up7 Y1 on  L «Qmatch GwithG –statementh 9_cm‹&cm…¦ q$ qÎ 
#  e8__(J  �6ýAcm, a p õU ÚTÕrú, /, *args, **kwdsí Registers Ð”rbitrary N  ¢P argus÷òCannot suppress U7ionÁžÅ ²_wrapper = ì `create« (y µ é  qèqchanged¿‘signatureŸpusing @P Ps is ¦ øappropriate, butí0ett1 _œ ðd__ may still help ` introRGtion˜ m Hper.E =Dn ô  ì ( F ê' ã	 âv@ s  â  f 
þ0Hel�ãto correctly rÀ s.È/s.Ý"(Ðœ è  ¥ ø- ñ 
c, Trueê 
2  K ,º ¡, is_sync=; æ ' ._m  s.›Cnd((4 G ð))


# Inspired by discussð Xðhttp://bugs.python.org/issue13585
class ExitSt	U_Base ², AbstractCrMq®3""" Š:sdynamic  ¢ 2ap ck  ¾§For exampl|ä�  ()¨s© ð:
            fiñles = [stack.enter_context(open(fname)) for  € in file Gs]
  `# All 7 !ed$ ûs will automatically be closed at the end ofJ   ñwith statement, even if attempts ton l [laterG !inc ñ	list raise an exception.. A"""
	 bdef __�_(self):  ä preturn  	. Bxit_- é, *exc_details; Àceived_exc = % ò [0] is not NoneY  n °# We manipu× Å · õ	 so it behaves as though² á# we were actu|únesting multiple cs< Sframe° @sys.Ù †info()[1õ10fix) R=0new A, olø à CfA may  porrect,Ú Bfindö  Uchain£  G vwhile 1¦     ° È3 = � $._Ÿ )__G  2 !if™5 $isº ]  / $# Á òis already set cÅ ýly (see issue 20317)t  I X �  !< or¦ ª¨ ]break^ �ô 	& �# Changey¢ „ yPpoint	  ª›D �we expectªÉto reference( Ž Ÿ$ =ðCallbacks are invoked‘ LIFO order’ Qmatch® Hioura # 3ed ø  hFagerþ…suppress³FFals´ ‚pending_Q*=  ” (0._e ÷¶ 
¢Ñis_sync, cb =X0 Z.pop(6sassert < 	F:trya  ^oif cb(˜ !  ó 6Truò &   þ  "   …@ = (Á,è 
Ú CÂ 2 +	�	 z V# sim6Ú! oÞ¤1s b«
 ¾J _Û
’ A[1],•ë :[1]Ú  • 5^
0ù ž 9if N 
30# b1"±Ðexc_details[1û]" replaces our carefully
  ý# set-up context! ófixed_ctx = exc_details[1].__5 -__7 [raise1 	% Áexcept BaseE Iion:"  ª r 5 = › 7 ~  òreturn received_exc and suppress 
0 ö def close(self)’ ô
"""Immediately unwind the:¡ stack."""I  ¾  C ö.__exit__(None,  ñL)


# Inspired by discussions on https://bugs.python.org/issue29302
class AsyncExitStack(_BU °, AbstractA' CèsManagerá 1""" Ì m Ò for dynamic  ’ment of að    à ô ¢callbacks.M¶For exampleIa† \ with¸ B) asV .  Gqconnect‚= [await( q.enter_S �@(get 3 1())œ  I   Ö éi in range(5)]# À# All openedJ ð s will automatií ðy be released atK 0end$ )§ ú PstateKñ, even if attempts to| + aJ ` laterÁ  W Qlist ò0 ans ep,.?  �	 @s �icmethod  ës_createB Éñ _wrapper(cm, cm½& ?rLMG SType($  - )÷k &cbi 6÷, /, *args, **kwdsx <³ 	¦  !Ptype,ù G, tb4  ° - ¬ ™(_  & Ö í ˜ Ì x k áù ±@"""E•sc liö0Kr' ‚ ñIf successful, also pushes its __a÷ "_ Á *$a ×  ÎÌ  Qresul¯ ) E  › _F #   '    @_cm_S0 =  6(cmB"4 = $ $._™ € t "= {	* ~ 	R  C ._ë …P€o ~ §Ö   =  %º 'itñ"""Registers a coroutine fun\™ (�standardvä —signatureÂ1Canï R �†ˆ�same wayR F can†Aö acÂs any objectš .an> #(rÓ ð ing a call
    ñ    to the method instead of ðobject itself).
1   5""" °_cb_type =  e(exit) Etry:  ;   _n $= = A.__a _- úexcept AttributeErrorL õ4# Not an async context manager, so assume it's a coroutine functiono  œ  æ q._push_� �callbackÔ v, FalseÛ Jelse� @ ’ 1_cmI @ T û F preturn  ð   # Allow use a± ¡decorator
© Adef Ÿ _    y $, ¯ ö, /, *args, **kwds)¨ Á"""Registers;�rbitrary ò  and arguments.„  )òCannot suppress ¬Oions$ ß °_wrapper = ° “._create_Ì b  (È 
Å € Á# We changed©‘signatureõpusing @p Ps is ¬ ñappropriate, butP Ì `# sett1 _‚ ðd__ may still help with introspec9é ã; (r.E =“n ú Äì (F l&. *U 0paclose(y 
PImmed‚ly unwinKFhstack.êSawait¼¯v(None,  )¦ z JŠ 
 ‡ @, cm ó 
” 0Hel" toŽƒrectly r¯  ¾ ¾:c	» k ¤�� 3Hper(¡ ¼%8 þ ˆ ¨ lnter__ŒÝ =
5 3xit4 Ø, *exc_detailÕàreceived_exc =�% 4[0] ¤` ÷ We*qipulateFÇ0 st Ðso it behaves‘athoughÙ D ñwe were actually nesL‚multiple:O E< Sframe° @sys.Ù •info()[1]& G0fix)  epx_ @(new A, olø Iœ Cy beB U%fñ%enðUchain}  G vwhile 1@     ° ‹ 3 = � $._Ÿ _É .   !if™5 $isº ]  / $# Á  is already«Å öly (see issue 20317V A  _Ö À         if ûexc_context is None or  Ïframe_exc:
   ]break 0new3 ( =N 	& ñ# Change the end of àchain to point	 ! ‹xceptionD ±we expect i, ™reference( Ž $._ï €__ = old¤ 
+ ð# Callbacks are invoked in LIFO order’ Qmatch® Çbehaviour ofH tnested ]…managers" ‘suppresse‚ v = Fals´ Ýpending_raise ôwhile self._exit_c¶ 
¢ßis_sync, cb =0 e.pop()–  Þ:tryF   3if M     4cb_Ò p = cb(*Dzdetails`  / OelseI ^awaitO 	°  P 7if ‚ Z   r6Truq F  }&   å @ = (@,F 
ù eÂ� œ_. ª0ys.[ Kinfož v ’# simulat;Pstack=a ñ ions by setting¥‡8@_fixZ(’ A[1],Æ¢ :[1]Ú  • 5^ Õ E ; = g ž 9if N 
3 0# b°"0g à[1]" replaces §•carefullyp  ¿   #44-up¶! “fixed_ctxÖË 8[1]Y7 • 	% ¹a BaseE%:ionõ  Ÿ 
Ö r 5 = › 	Y  7 ~  Óreturn receivJand Ó


class null=¢(AbstractC1MÓ)© 3"""  ìð that does no addi¾âal processing.zôUsed as a stand-in for a normal�Y ñ, when a particularß 2blo@codeÏðonly sometimes ug OwithZ :�  cmm`al_cm _"onÁ  ¼	Y "cm xð # Perform operaý 0, u÷ / o\ 5is 82"""� Ðdef __init__(õð , enter_result=v† x  " .!  ­0 À

    def __óenter__(self):
  preturn  .# qresult
" £def __exit: §, *excinfoD òpass
from _contextvars import C ,	 ôVar, Token, copy4 ó 


__all__ = ('7 4',  0Var ;  	 = ñ')
"""Generic (shallow and deep)j ðing operations.

IÒface summary:÷  ¾  e  1x =J . 0(y))   ”# make a y    Q of yG # ;  �   ? ;   ] 8 ò
For module specific errors8 .E õ is raised.

The difference between• f  ôis only relevant for
compound objects (	 Pthat â”ain other$ Ð, like lists D õlass instances).

- A‰  ÿ  I @strub ka new y ½ðthen (to the
  extent possible)c äerts *the same’ ¡* into it ¶ ? €original| 1tai ˜ {?con• ö, recursively,
 Š fcopies€  of½ ˜ ! f\"in ‘  ¼ñwo problems often exist withÅ·ÁÚ Rdon't+ 
+ 
ƒï Û&a)¶ ‘ (xsX ô, directly or in  ë  @T a ren¥ðmselves) may caus+Ò loop

 b) be | 9Ð *everything*ÀI ñopy too much, e.g.Y€administÓ‚ve data À2ureÉ   should be„red evenF ²¯

Python'sn` avoidS 6ese©b3pa) keepSpa tableÄ7palready¿pied dur)  ±tcurrent… y M"@lett àuser-defined cZ±es overrideG P * Ý ´óP  setŽ æSnents‰  /ðis version does noá lBypesÕm„,z `, func@ó, method,
nor stack trace, pframe,  0fil Òocket, window Qarray à
any similar t C.

Cî @can K 5æiºAs to� ro×pDóy5 
! �pickling:7  "n YÍ ñs called __getinitargs__(),
 Pstate žU__set R.  Se‘�documentj VÊ!
"‚ !e"  G"rm$ o$se‰ .Ð#

† rweakrefr û4regm‘dispatch_†À

class Erroñr(Exception):
    pass
error = E ò  # backward compatibility

try8 ñfrom org.python.core import PyStringMap
ep ! I ` @ $ ñ = None

__all__ = ["+ €", "copy Adeep p]

def  #(xÆ ¡"""Shallow ` operaæ ñ  on arbitrary P¬ ¡ objects.
ñSee the module's __doc__ sÅ a for mÞ Anfo.3 2"""< Ócls = type(x) @opieM_¢ ñ_dispatch.get(cls)A iÀ 2ier ‰`return¿ 5ierN Ðif issubclass@ ,n ÷  8 ñ	# treat it as a regular 2 _ • �immutabl¶  rgetattrk ""_0 1_",£½ q is not j cÉ areductf_ƒ * ^ Dv = #  ^  Helse� k Î ax, "__7 Ze_ex_Ñ  C %ifV ×  % r} 4  
�   l ð … ‚  6 † Ð     
~ }   �   RraiseÖb("un(s$)š ÿ
1 ofVq %s" % ¦§àisinstance(rv,|´x-  â_reconstruct(x8’, *rv)


O’ = d = {}Ò œY  x
Šat in (r 5ñ), int, float, bool,´1lex® �, tuple,£  ò  bytes, frozensetSð, range, slice, prE(ty:  w Ðs.BuiltinFunccBTypeC £(Ellipsis) þ NotImplemented)K 
D ³weakref.refe{d[t] = T
t = V” p, "Code‹ «Nif tËR a
d[lism   ."a
d[dic    !se 4set  QParray¬   8
if‘  A  C ‚del d, t'	 ]Pmemo=“, _nil=[]9p"""DeepOyV0if ‘  ä  ” ¾ t é   õ$id½1y =7 	dÉ Ý@if yM  d ß Q ys†	Ðdeepcopy_dispñatch.get(cls)
    if copier is not None:   3y =  ‚(x, memo7 7els& Ðif issubclass\ v, type)H L ú_deepcopy_atomicV  & 
Z     �= getattr4 &"_J 1_",¶ š  2   Ù  #   á Þ     Œ   ð reductor = dispTj_tableZ +  4if 6 
! Erv =# *(xË  % ‹   Y  ! _e_ex_" =   �  %  
­ 4­  - ±   œ D
Ö e²  B ¶ S %   
® ­  ( ±  " Åraise Error("   @"un(í)î ¡ object ofu %s" % ‰D Pûinstance(rv, strN0  ÁxŽ Í  0 À_reconstructN úq, *rv)
J 0# IÒ€ its own�y, don'tAize.) Dif y4x‡ P q[d] = y'  ¬ ´_keep_alives ð) # Make sure x  ðs at least as long dG ¦return y

ý‚ �¶ = {}

def ! h¥ J @x
d[©(õ)° 8 ! �Ellipsis% 
ïNotImplemented+ ?intj Ofloa Obool7  cou x _bytes ?str  ¯s.CodeType%  ÿs.BuiltinFunctionK /s.) ¿weakref.ref{ �property 7lis ¯ ®=	 s 3![]ƒÚAid(xÞÞ`appendí. * —for a in   h #(aS••@y
d[˜ 
À   ÛEtuplM$, ¶ ¿ À y = [deepcoñ2py(a, memo) for a in x]
    # We're not going to put the tuple in  @ ó, but it's still important weP Qcheckh 0it,j AcaseB O ñcontains recursive mutable structures.M Atry:	  ª areturnÇ b[id(x)Á ö except KeyError0 Apass=  ó @k, jŒ –zip(x, y)( qif k isj  s 2y =1(y)K     Qbreak Felse5  1 x ® Ay
d[÷ á] = _deepcopy_ W

def @dict� i, =	 ³  c !{}d  ) A = y í �ey, valu¼ƒx.items(@  ¿ $y[U  (k,  I )¢  > 4X Ð  ¨  - Ï   ô 
if PyStringMapR3Non 'd[ @  dmethodò): # Copy instance ! ãž õtype(x)(x.__func__, Ó   @self ñ )œaypes.Ml JType˜ c  ¨0l d Öf _keep_aliveœ "ð"""Keeps a refere¥ !toú€object xƒ Y € !.
7 òBecause we remember / @s by> `ir id,! 2havf€to assurXàat possibly te�5aryC �are keptl ·  V ¡ ð2hemoW‚9oreÂ aPid ofŽ �á, which should\ �normallyHðbe used unless someone triesa•: 0 it "..Ž 2"""  9 ó  €)].appen* °# aha, this˜ q `first • &:-Ü W _ C=[x]öRreconŸ÷ , cq, args,€  [ `state=ÿ£, listiter  / ; û  ! =� Ç  ³ ` A !ifêA and’ ”   @ = (>  }C(argÚ¦0arg— ' 	 b Û &(* _ V *x8yÌ1if ÷ ž 3 D  ,0 =½ ž    Ú  & ñif hasattr(y, '__set) 7__'Ø + (y. (& Ø   
¯  Tif isU/ ,õ)M2len f) == 2Ï  =   b R, slo“ " =½  % x   4 Ê    M "    ï  P“__.update­ À
           û if slotstate is not None:
  öfor key, value in9 Ž.items()5  D §setattr(y,@ !)
a ¿if listiter~ zif deepZ  ‹  s  … ? 
"  x " =? Pcopy( q, memo)|  $  �y.append%  ;els
{ O   É /icê !
udE ð Gkey ï 7 î Â,  r[key] =ù;v O  �­ yU ð>return y

del types, weakref, PyStringMap
"""Helper to provide extensibility ¨Ðpickle.

This_°only useful: Badd $ � support 7 I "on„ á defined in
C,! & Àinstances ofT $r-( €classes.§ â

__all__ = ["m õ", "constructor",S…   "add_‚  + jremove Vclear ð_cache"]

dispatch_table = {}Ofè @(ob_Y, ·_function, ’ @_ob=Ð!ifõ @callU (Æ ; &  Jñraise TypeError("redu`  i ¤s must be P "o
º [©  wp 9[# Theµ e  ì�a vestige AsafeÜ!unN Aing.vG rúq reason) t^ 3alldâass it anymore< ,if€ @Y( B_ob)› s(objectSy	 pK iµ
# Example:8	 co% ò x numbers.

trys ²
except Namî Rpass
a$de|_9 #(cß Â ô ó, (c.real, c.imag&£ %e(&  Q  ¼® g)

# SÊ( âing new-style Dsz7_re2Á(cls, base, ¨ !if  U> ê  ¿ Sobj =T €.__new__G Ó (   ,  _ * k - ' n ·.__init__ !a  €  1 R   A	S Uð	obj

_HEAPTYPE = 1<<9
_n ew_type =  ð(int.__new__)

# Python code for objec# ±reduce_ex__ õ	protocols 0 and 1

def _( q(self, ( Ò):
    assert A < 2 `cls = - ¡.__class__   òbase in cls.__mro__K  O °if hasattr(( á, '__flags__')• @not  . Æ & _HEAPTYPEJ  N Qbreaky   Tnew =<  ñif isinstance(new, A Pw Pew.__Ó Q__ isG m Felse  ­ # =v0 # Á ñreally reachable‰ !ifV  ^ £D @statà2Non, 
c : 6cls7  ö ðraise TypeError(f"can„ ‚pickle {ˆ“name__!r}© !")”  B }  É  0argæQ(cls,¹ !, *  6tryˆ 1get  ò except Attribut« @ aif get ‚ð , "__slots__", Ž ¯   õ $5: "ö  G  Af"a Ïå that defines � � withoutG : fing __
 ™2be œdH  p |Qcol {™�}") fromÏ 	� Ø Fdict�  Œ  � #  2 & =e 
’ Ý (0if  Ù`returnbÐconstructor, [,+ À 
[ 4  îaHelperÐ_º&__'2× âRobj__Ã*v Hd  J$ @  @  B @, kw J £"""Used byÕˆ 04, sqead of ²� ’ to allowl!esW
Àkeyword-only&`uments1 5¡correctly.4 """ÕÔ 
C, **¸ Þ  ` sÛ Í R²`a list¸  (  ) t`a giveÞQass.
‚ ‘This needª Pfind 6 sA2theï å"itbrs, so wô¡can't simp;: 7  "@ñ.  We must walk down‹  0 ñMethod Resolution Ordery €concateno , \ 0of ®F ñ found there.  (æ rassumesË Pes do´ `modify+ !irA W ³  ÅÂmisrepresent. )Pafter Y ð  is
    defined±.)
    """
	 ñ# Get the value from a cache in ñclass if possible: ñnames = cls.__dict__.get("__slot  2__"q 1if  Ñ is not None:H  � breturn" ˜ 2Not‡ ád -- calculate’ ¬ > U A= []  g óot hasattr(cls, � sŒ s r# This Ü  ha–  · sH  • 2pas 7els¬ Á# Slots foun› agather= Â Erll basec eK  X Pfor c\:Vmro__˜  " (ifµ + c
*  . ¶  ‰$ "['ƒBs__' (  #Ëø �a singleÁ 0, ivõn be given as a stringJ áif isinstance(ˆ ,, )¥  3 ! 3 = *      Ñ ò - H ö# special descriptor_M    !amÉ —¥"zweakref 4  rcontinuñ   @# ma9dö $ #elƒ ñ.startswith('__') and
 ñ G.end ÷  P  ‰Cppedï < A__.l N('_'T 6    ifši= _  )  T ñs.append('_%s%s' % (d Aped,ï )j 
/ S  	c   M I  8 ¨   ):C½ ÔRoutco   õšif at allÐ6try› „ Z Qs__ =÷ gfexcept.  *ð # But don't diee‚we can't™ 
åò# A registry of extension codes.  ðis an ad-hoc compres& ð*
# mechanism.  Whenever a global reference to <module>, <Ð >†pabout
# €be picklÝ ((0 p) tuple7 Ñlooked up her] Asee
T it! a× KeredÖ  ájit.  Eî 0 arD òuniversal, so thašpmeaning&a© @ doe³@t de©` on
# ¯ ex` !(Tž  are also sY‘ reserved� €local usWaÀ0hav  is. Ðtriction.)  Cœ ®  <@itiv\ ts; 0 is
#/ ] E.

_Ò_èL= {}�# key ->ø¯
_inverted5  í  de7 8keyl º	i À          # ðdcode -> object
# Don't ever rebind those names:  pickling grabs a reference to them when
# it's initialized, and wo` 1see;  a ñing.

def add_extension(module,z  , © õ):
    """Register an 2 $ A."""&  1 p = int( ) ±if not 1 <=.   B0x7f _  c ðraise ValueError("D â out of range"R ikey = ­  Fif (Î !_r² Óry.get(key) =ƒ 1andœ  x š_inverted0  } 1  9 ¦ óeturn # Redundant g ñations are benignb 0if ¯ ?in ™  W ý  6 Ó%s is alreadyh ’ered withMQ%s" %j  Ì   ÷ ,{ e[key])7 î  ¥ ¤ 	6 
¥ ¡in use forø Ÿ  B ., ƒ[   : ¿  Îþ C   =ˆ ìfremoveN 	Bï"UnØñ   For test—Eonly ¸�#!Ï 1 orÒ  ÌÖ Ì 1) !Û ¡ . B �   ƒÑ Aq -?delP¸ ! GÑ! "if» oIf_cachemF  D ¸VclearË? ( .. ë()

# StandardÄÀ assignments' ‚Reservedy ðFirst  Last Count  Purpose
#„ 1   127 C  „Python s~ qlibrary: 01284 9@ Y 64  : 2Zopa �192   239m +48' ±3rd partiesU 0240.  55. +16. qprivate¬q(will n€#be	2ed)G „56   Inf 	œ Tfutur3  < ;EOç^£ed by the PSoftw2 FoM BÃ.
"""WrapperßÓ POSIX crypt 9` call Þð associated funcD Balit’ò	
import sys as _sys

tryi _Z ‘
except M1Not” ‹. f@ �.platformNr'win32'!  j„Iv < ð("The crypt moduleñ is not supported on Windows")
    else:
   €raise Im. òError("The required _crypt module wa_ ñbuilt as part of CPython")

iL d errno `string1 _ Ó
from random 2 rSystemR Has _ 1 ´collections6 ¡namedtuple_  ó


_saltchars = z õ.ascii_letters + Pdigit €'./'
_sr4 ƒ ö()


class _Method(_o #(' @', ' p ident ƒ _„ ñ total_size')):
„A"""CS ‘represent)7 ! mf   per the M…Aar C“�Format o L �legacy 2-o cacter ¾H B."""u `def __r ‡__(self)�eturn '<; á.METHOD_{}>'.fr 1 .â   K  mkå (® ñ=None, *, rounds ` Ò"""Generate aã fÀ £ specifiedõ .ª "IfÏ ,	óstrongest available7 Ó will be usedD  ÷  ë$if% 0is ¦ õ » # =! As[0]R#ifÆ X 7 A and– ²isinstance(ì S, intì  r ]BType[2f'{) 1.__IA__._Dà__} object canÂAbe '„  I   f'interpreãPas an{ Reger'æi9Ù .‹ :  # tradiA%al^  'm  ( ml	$ Hf'${Q 2}$'¦Zi !) ¡[0] == '2'„ õBlowfish variantsf 	p l£ Blog_AU = 127 ¶  * ãint.bit_length¬"-1) .   { †!= 1 << n 
†  . ÚCValuÛ'˜ @must€pa power2“ 8   ›G4 <=d   /31j !ouz Ðrange 2**4 to '31t ‡s += f'{Ð 002d½ Ž ,el¾`in ('5Ç16')±FSHA-n*m©ã @1000Ø s<= 999_ ë )Y (toO ñ  × õ z =w	ô  Ù’ ß#f"ú…} doesn'c‘L €argument… ö''.join(_sr.choice(˜ )  °0 in#geH.T9)ªrš@s


v ð(word, salt=Noneð):
    """Return a string represent ðthe one-way hash of a password, with; 1altP ±prepended.
 ðIf ``salt`` is not specified or  ``None``, m ‚strongesO óavailable method will be selected and€ ñ generated.  Otherwise,‡ „ 0may? 0oneÊ  q ð``crypt.METHOD_*`` values,  !asI r-ded by :  mká C()``õ 1"""- 0if   å  ã  P °isinstance( A, _MÙ � “  3 = V   )N { " _¯  (…$ V

#  1  Aing/) o@"s
Hòs = []

def _add_ ð(name, *args, rounds=» Ÿ & $ =¶ 0 ¥ ³globals()['Q@' + W ]Ô ì Î  Ÿ   <Y s z R �result = ˆ ; 2try½ . è A('',t< öexcept OSError as e: à# Not all libc Òraries suppor !enX 4ionB.„  { áif e.errno == 	 v.EINVALe  ( ¹UFalse= 3rai 3if Å  ÌBlen( )V §.total_sizÀ  @s.apr( ø v 2Truu 	† 
õý'SHA512', '6', 16, 106)$  25 #'5$ 063)sjChoose¼Cped vers>±of BlowfishIÄing.
# Early% ós have flaws.  V; ’'a' fixes Q of
#p üinitial implementation, 'b1 @ 'a'o 0'y'Ž ø@sameò	'b', for compatibility
#ÛPopenw$#_bÃ  .
2 P_v inn @, 'y?a 'þiZ�'BLOWFISH# 2Ð_v, 22, 59 + ÷5_v)C1<<4u Íjbreak
’ MDŠ«'1', 8, 34±qCRYPT',7`, 2, 1°@del y   

°ñcsv.py - read/write/investigate CSV files. 1
im#Àre
from _csv‡ 7lC, __ûA__, P !r,] e  gister_diaÉ5, \ ð  Lunre' 6get4 5lis sC Qfield8o_limit% ò QUOTE_MINIMAL,  %AL ¤NONNUMERIC ONONEK ~__doc__Dè  q_ 
& $io9S€°IO

__all__¥"� ž 3",  6ALL ¢ 	 "E"þNð   "Error", "Diað lect", "__doc__ Uexcel	 †_tab",
  ñ"field_size_limi@ `reader6 @writ
 	3 Äregister_dias 8get 5lis sI ]SniffJ /unL ’__versionÃ UDictR’   W– Eunixƒ ¢]

class D£ :Á ó"""Describe a CSV Â !.
  ñThis must be subC Áed (see csv.Nò	).  Valid attributes ared !deGóer, quotechar, escap adouble ò, skipinitialspace�ÓlineterminatoJ 3ing§ 1"""¯ „_name =  v• q= False" á# placeholders   b = Non( �  ª  ´  ¾  È  
Î   x 4ing ¡ @f __‚__(self)Y ´0if  1.__›Z__ !=ã &   ' 2Trué  Rate()üQdef _0    ? x 6try…  D _X¡ ¸     ópt TypeError as     �# We do tlõfor compatibility with py2.3U  6 araise T „(str(e))â t #l(� ´ éð
the usual properties of E¡-generateddfiles.`+1','‘  ²ÈR = '" 
l šR'\r\nP  d ìQUOTE_MINIMAL
,!("ü 1",  
 ë( »!DTAB-/d ?\t'Ÿ -t£  • § ±À OUnix¿y½/AL¹ ü 0",  ´$)
Ò ãñº›Q, f, ¹  s=È—, restkey 2val » H ù=CÓ*args, **kwdsG .  
&._m ' =z P   # ì QPkeys Ò rEdictv D Ÿ $ =©  ^  ò# key to catch long row± # A 3valA  
 ð         # defauó
lt value for short rows
  âself.reader = 	 ú(f, dialect, *args, **kwds)8 % $ =/ 
 Ñline_num = 0
 Ðdef __iter__({ !):  � preturn  - ‘@property#  ; ¬fieldnames= !if9 &._# † is Noneb  f :try    t 	; a= nexte ú  1 þexcept StopIterationW ;pasit p. é  ` ˜ ä q.setter8 ! ,üev %=# Z  C  __û Ÿb¬ Z == 0ô ±# Used onlyoñits side effect.§  ß   Š Ê  Orow 	8 … ÷HN ó# unlike the basicäó, we prefer not to uwblanks,C pbecause2 ñwill typically wind up with a dict full of|E †Pwhile‹ H*[]Idrbct(zip¥I,U )¯Œlf = len( "  ú " 6row ªif lf < lrœ !d[‚€restkey]5uow[lf:]í "el= >=  …Rkey iè.· K[lr: &#d[e u 5vali ²ðd


class DictWr`µ ÑCinitÑV, f, v  , È ðval="", extrasacÎ†="raise" �  ö =",l"#z  * ´ m ' =z    `# list,Akeys3 § Fã D ¥  l`estval>  #7 swritingá A j)ifÙ �.lower()öDin (é — "ignore"/ d   VExError("(ñ  (%s) must be '- b' or 'N %'"Ë  M  %� ø 	i =* V )   Á	 Á	9  + hú÷  e
w Üq•! d Brow(R )g ¥@_to_€ ¹  ‰ u
	#= ´k Xðwrong_fields = rowdic÷t.keys() - self.fieldnames
  ‘if wrong_  )s:  ( òraise ValueError("dict contains 8 r not in f =: "L  P 	 ð+ ", ".join([repr(x) for xM ™ 5]))O °return (rowŒ ’.get(key,é rrestvalH 0keyJ !)
L  deý piterow(# #, S )m   0.wr-  4  ._„ „_to_list” )c  sd se Qs(map: 
j ¬ sl ð# Guard Sniffer's type checking ag­òt builds that exclude complex()
tryù  ²
except Namý	 ô  = float

class| $ 1'''d"’ `s" theÚðmat of a CSV file (i.e. delim^², quotecharòRîñs a Dialect object.` h  Ì�__init__.^#@case… �re is mor ö an one possible† \  «øðpreferred = [',', '\t ;   F:']
Vs‡‡ @, sa_,\ gs=None  &""+î dî A(or 1 ° correspondÓ toÏ _ °  L  J�, double ‹ `, skip6Åialspace = \@   q_guess_F U_and_¶(æ ¾ ? !if- "     � x * n ©  S  R s° : ¯ SCouldÝ gterminD"T "Ó(É x _8A = ">&ed  Blinec Âator = '\r\ne      ™ ù = QUOTE_MINIMAL'q# escapa F '¶ ? Ÿ .,( =:I * ¶ (  & ñ# _csv.reader won't acRaæ -…  Ì ¥  Vor '"õ ˆ Æ  ç Ò< ¶ß	—elf, data>Â x ¿   PLooksíò text enclosed between two identical	•()Pproba‘ú ð") which are preceded and followed
        by the ósame character (the probable delimiter).
  ÅFor example:   Õ,'some text',' ð The quote with l ±most wins, ‹  | {  If3 ‚re is noJ  »   ¬ € can't b¿ …termined‚ †this wayU E"""
 Åmatches = [] ñfor restr in (r'(?P<ž À>[^\w\n"\']) �space> ? è !>[ q.*?(?P=   =? Æ)', # ,".*?"$D 
  n P:^|\n7 <A T “ �',   #  n Ü , :$­ n Ü I Ñ  Û S &):< 
 Û B (no,$“)‚ ñregexp = re.compile(ß, €DOTALL | šMULTILINEA %K Ú.findall(data+ 3if . ,Vbreak{oif not/ 1# (û í�, double ,ë  £ß, skipinitial÷ ö	turn ('', False, None, 0³ T  þ%{}3« _   0' ¡groupindexZ c. '  LmHFn = 5 !['� e'] - 1B  û–key = m[n¥  nif keyjG ‚s[key] =7�s.get(key + +` /trF  � �   Š ¡ þ except KeyErrorª ‰continueî × a and (u  ïs Á0 orö  T )[   /
 ê & Õ½ g fs += 12×  "ax# s,kå)1 "if/sa D  D   $" Ýh# =W [2 R] == ± Ç    �'\n': # þÃlikely a filù a single columnH  ƒ I 5 '' ;els‘#.B*no*¥ ðiter, it's a sin÷gle column of quoted data
  ©delim = '' õskipinitialspace = 0
" ò# if we see an extrab ‘ between X öiters, we've got | ‚# double7 …d formatb õdq_regexp = re.compile(  Â  ar"((%(| ±)s)|^)\W*%(ü E)s[^ ?\n] 9\W*N $)" % \„ !{'€ ³':re.escape‘ 1, 'Š !': `char},Þ ÆMULTILINE)

e5if €.search(¿)):‚ GR u = True Oelse- 	VFalseq rreturn / ž ,¤] ,Ó,,  µ  „±def _guess_ ýa(self,v@   sÃ 5"""° 2Thee  % ð /should/ occur the same numberÔ…times onA ðeach row. However, due to malbö, it may not. We don't wan‚�an all or% ðhing approach, soþPallow¹0 sm+ õvariations in this™ ´ . ð   1) build a ta!ofã �frequencyá Ð  Š0actó  n Õ hy lineM 2M  I i# \ 4is  …y (meta- 7?),œ ²   e.g.  'x}bred 5 oPin 10eHs, 6 0 
I 7# 26 ha3) useø @modeó  ç
œ  ¿‚determin, ª/expected/l Ï •Uthat =* ð4) find out how ofte°e. ñ actually meets L GgoalG !5)¹ b % Cbest5 @its 4   iA ÛE pFor peršÑance reasons,Y  ì ; `evalua½‘in chunks‚Vit caü„try and / D ™ ’ 0poršb\ ”possible,4 5ing› @addi2 #alt Ö as necessary} À5 W ò= list(filter(Noneæ.split('\n')))wñ ascii = [chr(c)¼cBö
range(127)] # 7-bit ASCII< #EúMy0òLength = min(10, lenK)»  s½ê Ð   ÝF’E= {}1  ±)s  ÷  start, endY ,M‘ K awhile * & <� 
»¡ E+= 1<  ¦ 1forà in data[start‹:end]:
  þfor char in ascii#  2 ñ metaFrequency =3  P.get(E ], {})c  @ õ# must count even if fQ Ois 08  # � = line.= h d ÿvalue is the modeT 	Ì [b I] =  Ò   �, 0) + 1I  ó [ I 
9 m / = ~.keys()|Qitemssc3 p .! .()qif len(  ±) == 1 and  `[0][0] 0s  ¯~continu@U# get_1 of  * 9iesð  K 
ˆ ?> 1r  ®sÔ  �"axº þ, key=lambda x: x[1]ì  h P# adjdü¢ - subtrac± 0sum° =all¤ @ Uother•Ì  ( A‡.remove(¶ – ! 8 = 0 A[0],¤ö ?[1]˜  t   Õ m@[1] Q ‘  ¾  s	 Oelset@ :[0]³à# build a listAúpossible delimiterõ ó L, =ß £	Þ ðtotal = float(min(chunkLength *§qration,Æ[data)Ü p# (rows“ ±consistent *   / (number  & ‰) = 100%… 7 Ó*1.ƒ¨# minimum ( ™thresholdJ  i = 0.9 RwhileÆ  1s�0�Y 5>= F ¯ é@k, véa&  (@if vÝ"> d v(/> é2  ((' /–I) >=ó *aní  4  (	 |�None or k¬  )Þ F * 0s[kCvA & *-d*01¨gF ci  N sz)ù i  ðskipinitialspaceÂ `3[0]�D  n ± H  
< r"%c " %GÜ 2 rreturn ^,, � ) Â# analyze anÉð chunkLength linGes
  ¹start = end õend += chunkLength
  åif not delims:  V æreturn ('', 0)3 õ,# if there's more than one, fall back to a 'preferred' list` rif len(w Z) > 1| åfor d in self.F 
%  ¥ "if( J ~.keys()'  + õskipinitialspace = (data[0].count(d) ==¤  4  	
< ¿"%c " % d))B N<d, ‰ 	\ò
nothing else indicates a €ence, pibÀhe character„_p# domin: &(?� ð items = [(v,k) eP(k,v)iA# 5()]Ä  f.sort(I - 1 =  v[-1][1]!à i  oma< Œ Y  ]Ì ð def has_header(X‡, sample0P# Cre7ð a dictionary of types	  –  1ñeach column. If anyi  3# ! i3 �a singleE ñ (say, integers), *except*‘wthe fir,`# row,rn     ^ €presumedp‘be labels�  I  µ • ðan't be determined, itH (asG Pa str†`in whié 7aseJ  ] lK   1 s¤ a  D pfactor:6  LhL Rrows 
! a\e§e00gth° 'È.” €Finally,xPvote'Ø �taken at–  	 õ»P, add¦ 'orK @subtX  Afrom> ¤likelihoodô ¨Š be+ $a – L rrdr = ruSU3IO(x,ßTsniff M ò  = next(rdr) # ©
) �– ê e 1 TÐE= {}¬  iÛbrange(( 3s):Í2 §[i] = Noneo ©hecked = 0L 1rowN *dr‘€# arbitrZ`numberQ@to cN ,Ð@keepŸ6san0 _"if& zed > 20^  ! UbreakŒ   V e1º   ‹srow) !=ì  ( ¡continue #Á ÷ ìöat have irregular Ó B
p  f0col g]¿*):2  ~  6 ðthisType in [int,ÿ float, complex]:
   ?try  , ÿthisType(row[col])D  + _break ñexcept (ValueError, Overflow )� MpassU Oelse3 ý# fallback to length of stringI  ¸ ã   =0 é . 5if - �!= columns’ -if) ó is None: # add new$ ] typex  ¦   q % =� 4 ' N #m  Œ ôinconsistent, remove‘ Ofrom] C 9 �deration( 3delP .
. ’# finallyª÷are results against first row and "vote"@ õ	on whether it's a header# AhasH E = 0 0for—  w l™ 0 in Õ{.items(�  !co4 A) ==I0(0)Ð€ zj  -  !ifdž 5") J € A¼ M+= 1S å9 -9 5  ~attemptÁ Mcast^ ÿ (Ë > ù é õ	¶ ï +� vreturn X Ô> 0
import re
 4sys Dcopy  � tinspect tkeyword ubuiltin. …functool €_thread
Sr#s ‡ õGenericAlias


__all__ = ['dataclass',Ò ›   'field F ÂrozenInstanc}6 {InitVar –MISSING',¨Á   # Helper Ý ^ions.– « kasdict` {astuple _make_ó lreplac3 /is1  ]

# Condi� s ïðadding methods.  The boxes indicate what ac5 u the
# ’ ð  decorator takeA pFor alleÐthese tables,’ðn I talk
# about init=càpr=, eq=, orde ±unsafe_hash ! fºà=, I'm
# referÅ ÙÔthe arguments ð@dataclass decoraò0tor.  When
# checking if a dunder method already exists, I mean3 ` for aB óentry in the class's __dict__.  I never7 ato seen ð	n attribute
# is definedL Sa basO ä.

# Key:
# += 
   +8 ð  Value   | Meanò   |8 U p ô
| <blank> | No action: no\–is added.… p - +	   à |N K ¿| Generatedl  + p +BraisP�TypeErrorÄ Ö  j  p +0Nono D | A6 p pset to  Kq p À"ð
# __init__
#
#   Ž  ±= parameter  e 2  vq   c	    ý 1yes B<---10 ha3 `  __ÿ??ƒ� Â
# | False |e   8 9 »    8  Tr7@ !<-ÉpdefaultH Cx   —e__repr'(  ( *o ¹   ) a )šQ0setñ -  $el I;ofrozen=J‡ 8 orˆ x2.  @ }5---€ ˆ@-px1# R}°because notÿ ÔStheseøÑs would breakÕ"_±-ness"
# of µf@__eq ’/eqŽJ p z2 ªZ à
# | True  | ardd   |  ò|  <- the default
# +=  ¢

# __lt__	 e	 g g  
#\ ò+--- order= parameter | v' ‰      B  no­ 1yesµ <V ÿclass has any comparison method in __dict__?Ð 
˜# | False{ -  Ú  
  
H @True£ a`0raiX € R& ðbecause to allow this case woulÒ ñterfere with using
# functools.total_oBing.ª`hash__ 4   ®  º  € unsafe_) ¦	
9 ? eq( Ê i  frozen, î
9    P œ	�   . 	- 7 . explicitlyîained _ü Èï= 	 ñ9 “  ‘  Ñ| No __eq__, æ@he bÜÈƒ ™ C   - /-+ƒ „x  �	 ƒ N{ BNone»„ I| <-iP, notÅPhable' ò %--ä ì   ý z  � ÿz F�E, sop ,iŸs overrid� !q ó  � ` | HasÊ/buù *x  x Up ð 3Not/, í 4u  í æ  VÆÎ 
Öõ
For boxes that are blank,)ð is untouched and=PreforC�inheritedÿ m êV.  If  is object, pn
# id-d¦1ingl Ósed.
#
# Note—  :õmay already have¥ =~ðif it specified an
# __ð4eq__ method in the class body (not one that was created by
# @datac/ ð!).
#
# See _hash_action (below) for a coded vers ñ6of this table.


# Raised when an attempt is made to modify a frozen ­ !.
 ! F òInstanceError(Attribut p): passl ñA sentinel object¥ àdefault valuesr bsignal#a   ð
# factory will be used.  TÓ `is givÅ ò nice repr() which1 „appear
#u2fun2o ”ture of d`°es' construv sò ð_HAS_DEFAULT_FACTORY_CLASS:
   ¯ 0 __ ‚__(self)   “return '<Ê ?>'
O ? =  f /()K`to detUàif a parameterËðsupplied or not.  Use
#  K t =� it a bet7  Â ô ÂMISSING_TYPEÏ Ô  °  " £ ðSince most per-fieldøac“ ÄnÆ,æ ƒ € ëò read-only proxy0canúñshared among all ^ ðs.
_EMPTY_METADATA = types.MappingPJ qType({}HqMarkers‰ ŠÐvarious kindsY ² and pseudoÉ “FIELD_BAS£def __init g, name . ! = 78 !
_u  w	 ~ "(' #') /?VAR(  1 OINIT0  '81The¼  #7ó7 onÒÐwhere we storÓ0e F#
#�s.  AlsoË ‡acheck Âa°is a Data C«.Ý pS = '__K( _¨0__'ž bš s´ 3 …	l�.
_PARAMv 3 sv   La,» if`pexists,–@callÅt~ …end of
#= u @OST_xR_NAMEó Cpost_ì ÂString regexi s `annotaß@0Var@Init ð	must match.
# Allows "id§Vfier.  ["9   ["4 ñhttps://bugs.python.org/issue33453\`detail¡ðMODULE_IDENTIFIER_RÚ ôre.compile(r'^(?:\s*(\w+)\s*\.)?  ò Ä �à__slots__ = ('ôW', )
[	’ ! ’  08  Ê2  Í#si÷ç.@ ,o(  öð type_name = selóf.type.__name__
  Uelse:   ù# typing objects, e.g. List[int]-  U S ² = repr(selk )( õreturn f'dataclasses.InitVar[{B A}]'
4 adef __) ð _getitem__(cls,š &e)¯ Z L (K ò>)


# Instances of Field are only ever created from within this module,
# and1 $ Pthe fI ó() function, althoughd iw ðare
# exposed externally as (conceptu q) read-š q`.
#
# ¨„  Ö ¾ ñfilled in after “ €act, not ñ__init__.
# They're �known at2 Btimeë bB is ·  tið, but it's
# convenient if> S ò available later¯ ðWhen cls._FIELDSX ±  bv a list’ï ,Y ï uñ lðs will have been popuu 2d.
¾ Üà__slots__ = ('?!',P Õ '^  default 	�_factory$  ÿ Ohash  ® compare @metaI _7_ä Á  # Private:pto be u’ by ~r code.&)Š § !__Ú#, &	  , ' , , ó #, Ç † Å Ì9 ¶u = None•   Ò  � $ =š 
8  ¦ '  
/  Ä ! =Ë 
  Ýã
  ê ! =ñ 
 ý $ =
  ­õ _EMPTY_METADATA) µ	 5if 8 !is' Á2  8Ps.MapÒ¤ProxyType(F )¦g@n\ “ 	¹…!('Œ!('1 ²   f�!={b  âO!r},'  ­ '   ' Ô*  - ï
5  =  2   '  '   '  +'   ' 9*  - É.  / À            ÷	    f'_field_type={self. 0}'
&  Q')')
 ð4# This is used to support the PEP 487 __set_name__ protocol in the
Y ñ# case where we're using a › ó that contains a descriptor as aŒ ùdefault value.  For details on‡ D, se| ðhttps://www.python.org/dev/peps ó-0487/#implementation-\ .  R Note° ðin _process_class, t.Fnp object;³overwrittenD AwithB	Ò A, so pend resë i )E 9hadó p called
Bit a£¢right timeÆ 9def5 (�, owner, Ã!):`  ·ð func = getattr(@0 .· H), 'ü…', None)A 0if D R  V  T Û ? a methoÁ  ^,Û V E "itÒ      i 	ž 
Ö Ð_©Ñ_getitem__ = »{ ñ(GenericAlias)


 a _Data bParamsÐ q__slotsD ‰('init',¤  – o 'repr /eq Oorde1 ¿unsafe_hash: ofrozen Îý ª !__+ ,   , ¤ a, eq, ~ ', k ", X  4.: ! =A ö   M ! =T 
 zeq = eq q " =y 
 … ( =“ 
' Ÿ # =¨ éë  ‹ ë ¿ œreturn ('Ø(fÙ6 ó O!r},'  k '   ' #eq% /eq# &  )  /  5 .0  /!r
­!isÆ  Ï
ñ instead of expoÍø1cre>Â directly,
#ÙPat a Eð checker can be told (via +bloads)cP )&
#„ RwhoseI adependþPits pŸpeters.
]C(*, ±…=MISSING †_factory  äR=True q   ~=æ’, compare#  ½Qadata nB"""Rm$anÀto identify 0 X%s.½è!is½ ÷ r Û $. Ú É ð  is a
    0-argñ)ument function called to initialize a field's value.  If  ò
    is True, the) p will b9 �parameterS  !  class's __a A__()E � \ OreprX 	°included inv B �object's = "()I OhashI E  ¢ I  = I compareL 	AusedE 2in / Eison[ñs.  metadata, if specified, must0@ Ámapping whic¾ ðstored but not otherwise examin  y X ]!.
F  It­ qan erroq ôy both default and ‘_factory.@ 2"""I $if!  Q  � MISSING< # :K  & ra± V@E‘ P('canM – ')€return F‘(Å ,¡ Â ,ž, , È,“%e,’  –  –ò)


def _tuple_str(obj_name,Ù"s)Ñ 2# R‡ Pa str¬ uPesent Beach1 D of D a as a \ „ Ñ# member.  SofsC¡['x', 'y']eC ’is "self"Ç ##  "( 1.x, 3y)"0# Sf�al case f	Qhe 0-‡ é!ifV} à  Z C'()'¯ @Noteo` trailé ¡comma, nee�pf this ¡Ps outô1p Y ôf'({",".join([f"{å P}.{f.u!}"±  kNÐs])},)'


# Tj 6€'s logic;ðcopied from "recursive_¡"�@ in
=Àprlib module® @avoi’pendency.
G d(user_| pDecoratcPo makÿ v u ú B"...Û %a Z d €— ; P_runnir= set()‘@{ «ools.wraps� J  È  1per¦  Ù‚key = id ð, _thread.get_idenh  (   0if / !inK� % $ Ö B'...* $pr/ ‚.add(keyÁ  <tryD s�)= [¢ Ð  6 mfinall: i kdiscarm    rec M   ö create_fn(}õ, args, body, *, globals=None, loc T  ¡  _ c_type=+## DÃat we mutateL Á when exec()ÈŠ@.  C	 re ò# beware!  The only²1rs žpnternalË‹mÚs, so noC àworries about ñexternal callers.
    if locals is None:    A= {} óif 'BUILTINS' not in= 5 [) Á] = builtinsG ñreturn_annotation = '' 3if  @type’  f ~MISSINGd _- 'h  P  Æ  
o )->< - @args‹ €,'.join( ) @body #\n àf'  {b}' for b # !)
. ñ# Compute the text of °entire funcø �ðtxt = f' def {name}({| =}){¼ P}:\n{l "}'m ¤B_var»  ¡  ‚s.keys()Å h "g ñ __create_fn__({. E  })a ctxt}\n‹” "p nh òexec(txt, globals, nsm ¹ Y ns['l Q'](**o Qs)


Œ ðfield_assign(frozen, à, value, self_ )Ò# If we're a 2 p class,g"n L � to our ` s¥ƒ__init__§ðvia object.__setattr__.  Otherwise, just usi csimple< c BmentÆ# «  ½`what " " xd‰ Ethiss: don'tA “hard-code9 `, sincL at might bŽ Ö '� #if
#ú% fŒ.î  ({Ÿ ]!},~Q!r},{y"})–Í'f', ., #}=* 'Í g3(f,’  m ÊR ¸	+Bline* e ð C¿  tXCwill4 o Pializ' Z R.±qdefaultâ h�_dflt_{f.Q}â  =.* pfactory²~-  s j n1# TÖ | ` has aÒ |  R  . ¸Òa parameter i ?   P# givþ q"it0 Anot,³$K ú  4   [Â  Ú  fÔ 	6 äx = (f'{: B}()  \ 	 Tf'if ; !ÿ_HAS_DEFAULT_FACTORY= Eelse? '* `   MiFê ô$'sv ZPRs, buE S   #‡y `pt needs,bÜ :    # äW‘d here by‰8ingŒP ,_`# becaÊ Ne¼   o @ wayq ` 3 it¯ z   P# ForÞO* fd with\=ºÍÿ	… À# class dict÷ just has the default value
  ó# (cls.fieldname=+ * ð).  But that won' ‹rk for aG 8 ‘ factory,x    m� ûbe called in __init__F band we0 bassign} vto self¨ @.  WP ;n'tC Áfall back to… Âclass dict'sû, both because it'sE �not set, ‘ ( ñ	 might be different per-c C ð
(which, after all, is whyá dhave a-Ù function!).
G ƒglobals[^_£d] = f. c	6 ½ & $'{'  9 A}()'( Qelse:
  
E# No"O . Pif f.¬1  5  ]  Ø zMISSING%  ) µ# There's nf ,žbdo an çFmentu  9   É .À ”   ,elƒ  ´‡ I	]  a | 
< )  â 1is C@ doeê At neé€itializaÞ¡.  SignifyÕ	r #® #úr by returning None  1 # Only tes¯i„ @w, s ¼+ñ create variablesÉ"th#³.  However,„ h  ¡  ‘¿ p we're vQgoingÏ Ç  actually d eâ` stateì{ ‚InitVarsÜ Ð_GP_typeWæ_FIELD_INITVAR^  UNow, { Pgenerí  ÿT ‡ p D r ‡¡(frozen, fr,0 }}‚)


def ¿‚param(f)™ 1# R³vá $ e0strÎ >$th2c.  For=rexample=pequivaldðof 'x:int=3' (except instead  Sint',E !rešcaë Í Á#inÔ=  3'é5 G ; "3)7§ú*— Ä” 1 j#_‰+Aoutp‰¬w¢  €  7¦  " ¥ 4= 'ø½  ¾  a ’ ¾i\eáu  p's used_Alook?  # it up� ¢f'=_dflt_{h}   D¨ ðfactory functionó.  Set a marker.
  ñdefault = '=_HAS_DEFAULT_FACTORY'* ô	return f'{f.name}:_type_ {G ñ}'


def _init_fn(fields, frozen, has_post! p, self_R ±, globals):r "# : ô contains both real òand InitVar pseudo-4 #.
C ôMake sure we don't haveA ƒwithout ½ ³s following" G  ( % ð.  This actually would be caught when exec-I 3theF ðfunction source code, but catch- óit here gives a better errorF �message, þ ñfuture-proofs us in casï Ôbuild up the | E  usn 2astSseen_r = Falsµ Pfor fU Xš 9`# OnlyœSsider/ *  n _Ýr__ callc  5 Pif f.H  tnot (f.ƒ ¢is MISSINGæ  –_factory ! . H  Î 2TruÍ   Xelif % 
�  ' °raise TypeE{t(f'non-Ÿ “argument þB!r} ' <  ']sI G "')¯Êlocals = {f'^P': f.p ‘}Ð9 ‘.update({  † 'E$':O, ì/:  6 }§ �body_line« ![]R — Q ( A = _@&(f¹ )N  ¼ !# ; ðis None means that t}P P doesÔfrequiræ # faializar@(it'P&ó ).  Just skip i | !if} Æ   ÷ €.append(¡ P# Doe  ‚is classg a ê-� ‚?ã *if	l  params_str“‚,'.join(vÿK  �  p{>öis _FIELD_INITVARpß 5f'{��}.{_POST8 †_NAME}({ª $})Ä€# If no O EÒs, use 'pass'i" t# Hý  7  B = [5 ]‚p_createZ'g'¡[Á Q] + [€_· <(f)M / ¬]P Ÿ " Ò= % é= ' ò 
=)[@reprs9 fnqðcreate_fn('__repr__',
   Ÿ('self',) �['return & ÿ.__class__.__qualname__ + f"(' +a ð ', '.join([f"{f.5 A}={{R  _!r}}"@ µ ÿfor f in fields])t O)"']Ò “ globals= )v æ ó$_recursive_repr(fn)


def _frozen_get_del_attr(cls,Œ ,X !):Q ðlocals = {'cls': ,  Ð !'FT ÿInstanceError':   }: #ifm c  I 	€_str = '…3 ',oÂ p+) ;�) + ',)'X FelseS á# Special case9 ñthe zero-length tuple.< …  V Sð(_create_fn('__set;�$  ’  '* >ovalue'¢Ð  (f'if type(T@) isn@ or B  0{(/}:
 Ê ' raiseƒò(f"cannot assign toŽ  {f _!r}")Z cf'supe2¦ .(B !, è )é  U= ß ‰á
) 
�?del�†vodeleteƒ- ƒ|MM0cmp÷1op,__Wt, other ¦ 1# CMð a comparison function.  If ­ï ú  ¡object are³#àd 'x' and 'y',6 åy  D ; cstring7 '`0.x,Á2.y)? ¯ 6 " 2.x, Qy)'.
R "’  Ž
 H ' [ % ² › · Ä3f' œ ¦a}{op}{W  ï 7ïNotImplemented”´v@hash*Ñe Ñ Œ 2 = 	  *À', fields)
 ÿ   return _create_fn('__hash__',
  Ÿ('self',)! 3[f'X  J  ({/ ¯_tuple})']6 ƒglobals= ñ)


def _is_classvar(a_type, typing):¢ ó# This test uses a  ¡ internal A ð, but it's the b0 cway toG B @if tO iH Cy AVar." Õ †  t ˆ .' & 4@or (® / )0 Ù_GenericAlias5  = Band é ·.__origin__> n )#Hinit"Adataö 'es'ñe module we're checking againste h% Ÿ ÷# currently in (^ O.py)' qInitVarO  æ    orªe"3  ç Qñnnotation, cls, a_m×  
  " A, is*¥_predicateRGiven#5e aJ ó
 string, does it refer to‹1 in» #m ö?  For example, whenRHthat_ PdenotœF Å,ŒnU ‚U&, " i&#/5ingq#.
O IÖ€possible¶ vlook upY gø 
„ involve^  5  rin sys.U1s ("!)“ ó	seems like a waste sinceŠ  [õcaller already knowsŠ ´ - o„ å ›Y -ì "heÑ e®É–was found³-} @ Û € we want1Umatchk €.  T øp ; { F `a func³ °d with (objµT )  Ù €determin�Pf objI oŸ‘e desired+QS‡¾ËËð
not do a local namespace ísup (andx  ¤ead only a+(‘)1 )²°re are someq  ng4G ¥gets wrongš Wí Þ«Ðs, cv0 will bÔ ˆtected a{ät  CV = 8l 5  @2 ø6 C0;  i D: CV0B
n» sÂB cv1Œ  3� z 1z ·  ’ 1’ QIn C1\R codeo&is8(
 Š)¦  À âF"CV"ë N@ Ë  fiðt, so it will not cð0onsider cv1 as a
    # ClassVar.  This is a fairly obscure corn: óase, and the bestD ðway to fix it would be aeval()0 ðstring "CV" with @ ácorrect globalb ôlocal namespaces.  However thae sinvolveG #a o Àpenalty for 3 óy single field of Pdatac A  Z ð's defined.  It was judged nox �rth it.
4 ñmatch = _MODULE_IDENTIFIER_RE. Á(annotation)4 1if  :  †‚ns = NonÉ   pmodule_ " =/ ‚.group(1E  % !if“ , S    R# No  J€, assumez ø $'s  5did� < e"from #ùes import InitVar".1 Ä Bsys.q Âs.get(cls.__ Å__).__dict__: Lelseµ sLook upš /inµ  
� f ? = … |  ç  ŒkuC ¦ Ã  † )Ï 
¶  L oa_type Ès� !is/ Â_predicate(nI1c2)), a‡ )ˆ ¢return TruL ñFalse


def _get_	 Ÿ J  f   ª P 2# RJ 2a F4 bj¢ Rt'A V¹  ; %. Mse# /²s are also • àed, but marked“‚such (se» B# f.¨ )rA# Ifñdefault value isn't derived »¹ ,, µn it's onlyø`normalìF  Â `onvertÈ3to þ "()ks š= getattrBrMISSING¡ãif isinstance(: ,Ne 54f =„ 4
E  n÷s.MemberDescriptorTypeZ  ^ #ÔÈðin __slots__, soé dhas no‡ Qñ  D   ¿ 3 = ä ¬    À ã =, )!1# Ov0t t7ðpoint do we knowžF0he Ü P.  Se2 "emˆ  f.¤A = a‰~  f.+   	 o Aãñ#a æ¢ ô until proven otherwise.  We're nexÑ go«tPcide ˆ Baâ4 or	,N th4  ÀŸ #-Zjust † Ñ Û @TFIELDÄ °In additionEPcheck]  ~aactual'Ps her’ U%  ò~ oÀg annotationðVs.  get_type_hints() won't always work for us
    # (see https://github.com/python/typing/issues/508 > “example),E ðplus it's expensive and would requir Q eval€ Ãevery stringE ðannotation.  So, make a best effort to ° óif this is a ClassVarG �or InitVaå ±ing regex's‘ Pcheck €that theH $ ƒferencedF  Z �ctually on  e correct ^#.
( 1ForG  coáte discussion,« [abugs.pUB.orgRT33453K  If[  � ðhas not been imported,h nf  assibleM3any� D +b?U‚only loo 3 ifB ñ ƒ 	 ð by any module (  ônecessarily cls'Tm$ !).S Q b= sys. rs.get(' !')'  Óyl:  ��if (_is_cáQvar(aÚ,'8  )   ðor (isinstance(f.§,b
(  ,  › Y  # * 4clsZ  .è ;   L ¥ 6)))Â  . �f._field¼ ø = _FIELD_CLASSVARþ �0ype×Ãr, or iföpa match"9 ï¢ #$$anˆ:if ‹ #isŒ ° T# Theãewe're 20aga^ �  8Ê % ²ñ# currently in (dataeü   ¥[__name__]U HinitD 
ã3_ ',  .›¡  Ñ   ² GINITQValidsæ€individuB Q îTôdelayed until now ³0eadÄ in  F< ñ() constructor, since ¡here do weá a# know: Ç ŸÒ, which allowž ð better error re´5ing( Special re»cæ8 cŸ[±;n (>,Ã_<|ð default_faè y½ ¹vMISSINGù ¿°raise TypeEÅ 2(f'ñ 0{f.ô 1} co0 haÞ! ' 9  'z  z æ + A# ShI]Ýbother q £settings? E ¿ r #[ðms the most seriouós to check for.  Maybe add others.  For
  ÷# example, how about init=False (or really,4 ! ð<not-the-default- ð-value>)?  It makes no sense’ E ðClassVar and Init ¢to specify† Á<anything>.
< #¿ “ ó fields, disallow mutable ‘ sq Ñ known types.B aif f._= _ ¡ is _FIELDŠ Óisinstance(f.J p, (listk ¡ct, set)):M  Gpraise Vù ‹Error(f'Š   {i P !)}› „ % 'I  M 	  f'{f.name}¥ Anot é eed: usè ¢_factory')#ðreturn f


def _set_new_attribute(cls, X !, °Í õ# Never overwrites an existing @ A.  Rd Ñs True if theÇ #& ‚ alreadyA } x ÷ in cls.__dict__MY X Q 0setx ³  ë ¬ 


# Decid’ /Ï€we're go¾  ðreate a hash function.  Key is
# (unsafe_! ð, eq, frozen, does- -2). ò ™Qthe aL ñ to
# take.  The common case* qo do noÓP, so mÐead of provid¬ 5a
#Ÿ P that< �a no-op,û@Noneë@sign- % .ð ¦ õ#onìj£s, globalsð> L ; 2addo6 ’flds = [fÄ Ë)  �(f.compar„0 f.Œ  ½  d   eR ()]Àp@_fn(\ ¦ • Pexcep¯› 	1# RŒ¶0 õ¤DType£0CanQì¹_� _›!f'¾Rass {Å Ó0__}�9#
#Ã_   +-  |?F |W M ? eq= D îA H  Z‘-explicit/L |ò m 
 V {@ q  vc B  v
êA= {(x/,   0): ó5[ /  4 G4  - ", v ð): None,
         ƒ(False,  pTrue,   ¤ ): None,
,  4  & $, ; B ï): _hash_set_n>  L r  - y r ?add« 9   m   _ 
ß m 9    m Ÿexception¬   * x  å + ,½Äx 
F ð 
9   ð  1 ° þ ð 
9   x ñŠ}
# See https://bugs.python.org/issue32929#msg312829 for an if-statement
# version of this table.


def _process_class(cls, init, repr, eq, order, unsafeª¡, frozen):xð# Now that dicts retain inserHC ó	there's no reason to useF "an) !edH ò.  I am leveragingd o�    N f, becaD �derived Ð ù fields overwrite base ’, but the{ Š Ñis defined by 9 ñ, which is found first.: p Q= {}
 ò
if cls.__module__ in sys. sA µ˜globals = [= @].__b!__] FelseA à# Theoreticall¶ Àis can happe‘ someone sD  { à# a custom strZ+to·  Œnù #ca²< ’such datas°won't be fu† ‘introspecws ñ(w.r.t. typing.get_type_hints)–pwill st @funcJA ’correctly{ � D€�setattr(Ù´_PARAMS, _D¯ �Params(ióm  \  )§# Find our es
rÛbse MRO€Ä, and exclud’ourselves…4 d1 2 soYmore þeâ#ÿÂride earlierâiVŒ âj ”As long aF Àwe're iterat$ U óm, see if any are—Bany_-_a =‹[Ehas_9 Ðs = False
   ó for b in cls.__mro__[-1:0:-1]:
  ô# Only process classes that have been —ed by our? Ðdecorator.  T6 ‚is, they? õa _FIELDS attribute.> ðbase_fields = get$ 4(b,4 u, None)0 8if 3 ais not$ Ñ  Ø �has_dataÎ _3  ` ETrueK  '  #f# " ˆ š.values()R / © É[f.name] = fN )ifÂ îPARAMS).frozenN Bany_ ¡ 1 =   S Ã# AnnotationŒ°are defined² 3thi­  (!in> ø Æes).  If __aN ñ__ isn't present¬5n tP C 0add^W new ? ’.  We use2 ³to compute Ç9"ariR# add5a ÿ#h FU ß  found from´µ ô, which is guaranteed to bh òordered.  Default ÈY S 6ass…rs, if a· Œ Phas af A <!thw  R  „ !a ¶ #()=#itA €contains÷ i½`al inf¨ ðyond (and possibly including)0C dactual… t £.  Pseudo-eC¦PVars Q BInit w[  ed, despit¯be factÚ  1're?BrealsÃ#'s� òdealt with later»8cls�  =¯û .__dict__.get('ts', {})
W `Now fiìý inT| aàhile doing so,”idate somðqthings,  seÖ ¨Ds (a" Vzes) whe&fwe canÕ ^r= [_get`(cls, òW, typ�   H"  Ÿ#‘.items()] / w & t  	e5  j #Î ’àÌ% (  d }F d r) existCQis ofà ! 'ÜÃ', replace i"th}Š 6j 7 is"soabnormalÓ  introspecˆ 0seeqK  í1ue,™g  v äif isinstance(/¡•0, ÃSif f.²  « vMISSING{ c   g1re'4  L#leK‚¤  A   0# TSphappensl0we 2ifynÐ(repr=False),§ @   ±# example (W ZF 4ied¿ð object, but
         ô# no default value).  Also if we're using a' 
<  ÿ%# factory.  The class attribute should not be set atE  ò
all in the post-processedQ .3 0dele Ù(cls, f.name)% Yelse:  ³ <set7  ? !)
1 ð# Do we have any Field members that don't a,' ¡notations?E @for – ,Z Þ öcls.__dict__.items()£ áif isinstance(�,z B) anC Q J 5_anr E  ä ðraise TypeError(f'{8 ¡!r} is a fÎ pbut has0typè O '£Check ruleö Rapplyñ are derived from*Adata"es´ iff _ f_bases± 1# R¯ €an excepB a  wqof our 2 o €frozen, ¼ Ÿ2noth  ù  if„ _& i 9 w  / (!'cSÒ inherit non-8  ¿ ê ! 'ä F  '7 4oneM ' ì Ë 4 Ý \none ÿ 	é  Q=anyí F é 4 å  é B# Re* Õ!ofÕtAs onÒ"€ (includ`ã }AThis[#\@mark|"is	` as be3 a° 	Û‚_FIELDS,ísÒ)WaN Ñdefined with ƒòplicit __hash__?  Noteô#if› `__eq__NA ¼¥ ,ó ón python will automaticallyF  h � to NoneF is[ Àa heuristic,÷ @it'sSsibleC ‹esuch a³ 1 ==K ! wÞt| ¢-generatedai…â# close enoughH�ÿ 9 = ³Tget('² ¢', MISSINGxbhas_ex?>  ¥(P $is4 1 orÃ   7  Í'|'P)ãI»ó  - orª°ng methods,ß1mus•( $thZ$eq, 1if E …  Ø &eqeJVBs'? _ @trueÒ? 0is   õ6nitK  |nM† ú°t-init func'h > | 7_  =ræð_POST_INIT_NAME)
#
  ð%# Include InitVars and regular fields (so, not Class& %).C f" Ó= [f for f in7 •.values()+ u q if f._] P_type4 ’(_FIELD,  ¥_INITVAR)]> õ_set_new_attribute(cls, '__init__',, j  % 0fn(± * 
5 ofrozen, �has_postg 3 ð# The name to use B¯the "self"Î 	¤ p# paramC_.  UsE ¶if possibleÛe 	  €'__datac_¯ 0__'Ù' '� àsÅ ` Relse B Cglobals- 	1))
„ `# Get ^™ ± as a list,ôi	”only realÇ‚  This iË #©dà ball ofR òollowing methodsDi _c  !
 8s]½ �if repr:Ê  . ÅU n a 1 > )  >! _
 # ]AVif eq‚ ã# Create _eq__ù .-Ñere's no needÔea __ne& ¯ð# since python will cY_V  �0negg "itUþ vcompare ˜’_tuple = 	 S_str(o R«Rother& /  +',0 � ›‚cmp_fn('ö o', '==3    Ö !, š ´ b %  à= èGordemë �sF$ ó k  Jœž\ X h@, op»[kl3_ '<')/* e?'<=+ gU >* U >U ]r \?if ká ! - 	 À         _cmð	p_fn(name, op, self_tupl Cther /
  ƒglobals= =)):= ðraise TypeError(f'Cannot overwrite attribute {ž =} 'F ’ ðf'in class {cls.__: ÿ__}. Consider usingL ñ'functools.total_ordering')
‰ –if frozenÞ ²for fn in _ �_get_del_Í ô(cls, field_list, !B  Ò ±if _set_new8 = nÔ O, fnY.fP `*ð	# Decide if/how we're gospto creaÚa hash aAion.O  ·_action = _ Á[bool(unsafe !),2  , 2 /eq) ¬- Áhas_explicit‰ ]ˆ !ifÐ ½ Ì # No need û ?all× ñ	 here, since by the timeY  Ý #D (  ! S is uncondi7"alJ 7 þE8_ =  I† × ˆ6get´—'__doc__'q4# CÎr`doc-st"‡ < 0 = { À% +ä  ±  ðstr(inspect.signature< ó)).replace(' -> None', '')“PreturÁs


def dataž  ? =0 ó, /, *, init=True, repr #eq	 íl=Falsem‰!  #A"""RŽ s¶Csamešðas was passed in, with dunŸqmethods€added ba( !onH >qs defin>  ã .ÀñExamines PEP 526 __Za#0s__�Pdeter& Žs; !IfQ is tPan __*R__() ›   ™ 'to} 1 If´  M # A 0 __ @ Q. If h0 ArichG «comparisonQ are € @ �F aC _£z q * C þ  ´ c1mayG  Pbe as‹Ì°after insta·ÖÈ2"""‰ €@wrap{ å¤‘_process_¼ $ ”�R, eq,', ä ,kð@# Sel$ beµcalled as @ÿ7 or à().
    if cls³ is None:
  õ# We're called with parens.$ Áreturn wrap
 5 Ñas @dataclassC 9outF B ñ(cls)


def fields(8 Ò_or_instance)  B"""R{ óa tuple describing the@ • of this „ .§ –Accepts a t or an i  ; aone. T_ `elemen2 Qre ofì `type F© 2"""^ ò	# Might it be worth cach� �is, per Ü ?J "ryØ  {û ® = getattr¡, _FIELDS)>  exÍ ö  AttributeErrorP ’raise Typ Q('mus™ Ù	Ø %or$')× ò Exclude pseudo-ª Ä.  Note thatxÀis sorted byH aertion® ±# order, soª  n ·ÌQis as b @ werâRfinedl70 ³(f for f in€ ñ.values() if f._G _Ø #is=jE_is_hL(objl`s TrueS 0obj0/D. Í¨ 1hasË ƒ [ Ãñ† " Áé} »
alØ � acls = À Df isî r  , ž a) else   bÆ =clsÀ `asdict3 P, *,  �_factory= Mß)of‰•  Qa newN áionary mappingß ×’ names toü ûè@Exambusage:Ç “G  ‹" Cs ·ƒ  x: int    y  ¢c = C(1, 2"“  assert òc) == {'x': 1, 'y': 2}� °If given, ''`' will2@used6@tead�built-in Tä0uncWü applies recursivelyž1areÀ f  X@s. T)ƒ �also look%o  ¢containers*~Ñs, lists, and¢  if not h e¬"O€) should·'on3"s"�±_? b_innerœr' î /ifÄ ¡esult = []m Ø   ‹     ·: = ³ pobj, f.ë)]ð  B   r| ’.append((2 ,)+ Àdict_factoryò%(result)
    elif isinstance(obj, tuple) and hasattr ±'_fields'):=  A ñ# obj is a named< ú.  Recurse into it, but the returnedB 1ectE gnotherK 1 of7 ÷same type.  This isB ò similar to how E ‚list- orÐ ÷-derived classes areB òtreated (see below)´ Àwe just need` c)  ” m? ùdifferently because±'s __init__J sK b� xcalled I Œ ·po-34363).
q ×I'm not using0 i rasdict(â¥tmethod,œ À‘- it doesP r¸ ¢  ±× ÿ Š �  converßm6  ~ 2s (›   §_factory).8 ð- I don't actually wantA $0 a = B heröge mainC    hAcase%  B°json.dumps,¨  Ü thandles§ 9ingC à • 6Às.  Admitted— qe're lok8som·Ò  information† àwhen we produc •  Y  i0eadÖa†  ê ð .  Note that ifD 
2cts` D 	B È ,; ðcould no longer a 0 on_*at† °structure wv	Ã@ wasp0d aî ± G key–­ ¦ 1R)(*[_q ‘_inner(v,Ò� for v inE]°’(=™	~aAssumeð 3an �aQ  T>!is” q by pasÆ8in ú ðgenerator (whichJ ^Atrue¥ 	]QÂWaboveÞ
 tþ f (g ko,0 
 
: ©” 
2   Ã%k,Æ‚.items()2 Felsel° �copy.deep	 )‘


def as>  3, *ï-= þ A"""RH ˆ—#ofÓâk Ô¯2new {Ès valuesÀô Example usage::kQ@dataP < & CÕ @  x:æ   y  ¢c = C(1, 2 |%rtë cc) ==   1 ±If given, 'ò  €' will b£ !edÞ I‚built-inà c�The func–àapplies recursñVively to field values that are
    dataclass instances. This will also look into built-in containers:G ñ
tuples, lists, and dicts. A"""
	 µif not _is_y _y a(obj):(  š ñraise TypeError("asf ÿ() should be called onÉ !")M ƒreturn _@ `_innerm !, Q ÿ _factory)


def) ¥ /ifÉ ¡esult = []�  Ý ‚for f inšsŽ û  " ­, =Ž cgetatt¿ }f.name)È  @  r~ �.append(V  ! 	(2 % xelif is£n )å6has� !'_h's'Ë °# obj is a ¬ dk ¢.  RecurseWÑit, but the r®%ed+B 1ectE gnotherK 1 of7 ²same type. ¿'isB psimilarBhow E  ¬B- or‘-derived %es" (ò# treated (see below)´ Àwe just need` c)  ” m� ùdifferently because±'s __init__J sK b£� êI Œ ’po-34363)l . DZ;(*[þvÆü ’v’Oobj]ý(7> )é€Assume w–#n  an ¿©!is– ° by passings a*ðgenerator (which÷ 4Atrue¥ G‰s, handl-_above	
	 à t(i k5s,Ü•~  Ò  °4k, ³‚.items()3 Belse¥ 9 › �copy.deep	 ñFmake�P(cls_e,�á, *, bases=(),|Àspace=None, ¶e=True,Æ u  Brepr 3 eq	 ó	order=False, unsafe_hash G bfrozen! uA"""R, I�ew dynami'y}d.€6The Ê çDbe '÷ S'.  'É }¢an iterabl�Qof ei†(&1),  ,Ù)P 0, F{)Qs. If)   �omitted,   0str°'typing.Any‘ F E  ›ã !by0 ; ðequivalent of calðling 'field(name, type [, F Á-info])'.

  ðC = make_dataclass('C', ['x', ('y', int) z ", _ òinit=False))], bases=(Base,))` òis equivalent to: 5  @o ˆ { ! C? #):  ¢ ÷ x: 'typing.Any'  y:š  z . =  w rFor theª P and "òspace parameters, see( auiltinB³() function<(Th6  ñ, repr, eq, order, unsafe_hash,s �frozen ar> qssed toÄ 1(). 2"""¸ 'if© vis None#Ä A= {}: 7els! g# CopyC àsince we're go1Âto mutate it}  {Z  c.copy(àd# WhilL AlookN ahroughD+| p, validf @that y¯ #�identifiƒ Ânot keywords<  ¢duplicates© Áseen = set()N Uanns ²for item ins:àif isinstance(& Y, str ¼ ! =E `    Otp =›�elif lenS f) == 2u  ;  M\, tp,X : 3: Lspec? \ Ó[f ]5pecº 
 1 ñraise TypeError(f'In©00: {C!r}'õ 5  “(ot? n ?@ or ª  6.isØ(Zz ¤r’s must be5 F @s: {[ ’  �   $if,3.is6t  ¼ $beO o  „  V �
¥Ø 	 ÀdÈ ¡ O 2.ad¾Ò à  ÖÒ"tp ƒ ì�'__annota¡@s__'ù 4 X  # We use `as.new_q@()` Òead of simply&   ñto allow dynamic creb V µof generic ¾s™ cl‡q @cls_· 0ð, {}, lambda ns: ns.up$½Ý )freturni @(clsœ6it=|=�=„=Š³  J	 Ÿ= ", §= p)


defÞólace(obj, /, **changeseB"""R¦ Ãa new object7   µ ãd\as with+ @valu:§ PThis <0 @ally¾@ful Ï”  Áðes.  Example usagQe:

  ó@dataclass(frozen=True)  3 C:  2 gx: int y  ¥c = C(1, 2D ô1 = replace(c, x=3 ðassert c1.x == 3 and y 2R 2"""­ ð-# We're going to mutate 'changes', but that's okay because i aQ ô# new dict, even if called with '« £obj, **my_` 2)'.‰ µif not _is_>æ_instance(obj)1ôraise TypeError("_ ´) should be€ 5on P  P 2s")v 1# IÆ 0n eJ  ö
have init=False fields in.õ BIf a  1 is¿ & ó, read its value from the provided objÿ Pfor fe pgetattrò ±, _FIELDS).A 's(ò# Only consider normalŽ Òs or InitVars­  faif f._Ð P_typeµ b –_CLASSVARd 1 ‚continue,  ¦ f.!
- !# � ûBthisŠ  c �specifiedß ÷• V Pf.namx " 
]  & öVKj 1(f'Ì " {= }m edeclarx© =  'Ê ë€, it canˆ6be ¸ ÄL ˆ'Žx I¶ 7÷ ²qINITVARÞ�f.defaultMISSING@"$B_!r} "ç @mustc"þ K[ñ I] = å ‘0Cre� ( U@objeWQwhichÕ@s __µ@__()ÿ ± †# __post ð(if defined), usàaall of„ B ¤ss we'veG  ad™°and/or left¶A.  I@ bre areÙrs supplâG Ï9 * 3n'tn !, ò will correctly ÝNTÛ(areturn.!__?S__(**d Ð)
"""Concreteí`e/time� related ïñs.

See http://www.iana.org1 ñ-zones/repository/tz-link.html for
X  ' ] 0DSTo  a sources.‰ ñ

__all__ = ("date",   =    Tdelta  Y  qzinfo",KA� "MINYEAR  1MAX °)


import T P as _	  Amath  	  ósys

def _cmp(x, yUe0Á:0y e 1 #>  C-1

� à = 1
MAXYEAR =òØ 9999
_MAXORDINAL = 3652059  # date.max.toordinal()

# Utility functions, adapted from Python's Demo/classes/Dates.py, which
# also assumes the current Gregorian calendar indefinitely extended in
# both directions.  Difference:  Dax  L ðls January 1 of year 0 day
# number 1.  T� �ode here9 19 
7 ñis is
# to match× º 0iont æthe "prolepticì "h í ñ Dershowitz
# and Reingold's "CÑrical Calculaˆ"\ ² Ait's{ 1basÀ X ò
# for all comput6 b.  See/ 3ook$  �Athms ÿconverting between
# Ä   (s³ ¦many otherÛ €systems.Hñ-1 is a placeholdern  ìxl òpurposes.
_DAYS_IN_MONTH = [-1, 31, 28 +30    	 #]
G hBEFOREK ]ï� €dbm = 0
Ozdim in ¢ “[1:]:
    s Á.append(dbm)#  N ñ += dim
del dbm, ò
def _is_leap(year)T " � -> 1 if  Ê¡, else 0."W areturn ‘ % 4 == 0˜K € % 100 ! %or& !00( ")
} Àdays_before_u ; † 9 of"s / i st÷ > ™ 2y =p 9- 1ª Ð*365 + y//4 -  ¢  (00’ �in_month� !,  –   #� rin that3  ¸ �  ­srt 1 <=% S<= 12R ¯ #if A== 2R¥ ýƒ!298  *½ ]Þ Aâ ( Ï p precedGPfirstœ ˆo ‰ì '& € must be'n1..12'Ç Ù[6 Q] + (
 / >\xymd2ordÄ,¦ É   Î` , considerà à01-Jan-0001 asC / 1â * Ó1= _ýk>0day1pdim, (' 
<P%d' %Õò
(c ð ¶1) +a  B  	& Z' “. @day)êdI400Y Ç d Àar(401)    #ð number of days in 400 years
_DI100Y = _ €_before_  (101)    # "  	 �" 100   "@ O4Y  @ 5> @ 1  4@ p
# A 4-p ð	 cycle has an extra leap¶ ò% over what we'd get from pasting
# together 4 singleâ ð.
assert _DI4Y == 4 * 365 + 1

# Similarly, aŒ &$
#Ž Œ 7100R s� y‘ ˆ• @OTOH� 
> –one fewerJthanŒ )25i	‹ c= 25 **-ñdef _ord2ymd(n):
Àordinal -> (º€, month,ªð), considering 01-Jan-0001 as! Q 1."
H ð# n is a 1-based index, starÕB at ? ð 1.  The patternË } sL ðrepeats exactly everyÑB àbasic strategy ³to find theJ pclosest< »€boundary‘ 2or $0 n,4 °n work with s offsetJ £t¶C °to n.  Life~ ñmuch clearer if we subtract 1ãK  n first --g n p valuesn› 4km ties areI ñthose divisible byñ200YÞ#(  êpD  M   á   n  7n-11 B-- - -" -   	 = €31 Dec -ž, 0  -¶ '  	u ² 1 Jan -399'  9 (+1   (y„ 7... !30’ ! 0î= -P 
  (-2/ Á /  '*  ¸   :   ^ 
> ¸ 	! 2	L 2U  ¨. 3/ 3'  Ù ç ¨C= ·ð &40æ ) § G ð Rn -= Ì �n400, n =Ïdmod(n,B )—  0 = (   *Ð õÒA...,2 , 1, 401, å 6 R# Nowœóthe (non-negative)á,G 2,¥ Nu"1Ž w C, toN  E ádesired date. a ðcompute how manyTp	´s precede n“QNote O‚it's posÃPfor n’ðto equal 4!  In that ÷:case 4 full
    # 100-year cycles precede the desired day, which implies  I ñday is December 31 atG ©end of a 4l .9 ñn100, n = divmod(n, _DI100Y)
" ÿ	# Now compute how many 4· #itW 4U  4S vAnd nowO psingle ñs.  Again n1 can be 4, and a smeaningž #thè /
 =¿ ³ 1³ 3365 — @ += .  *µ� + n4 * 4	 1‹  if± r== 4 or+   :  î`assertm5= 0 areturnú ¨-1, 12, 31{ ¯ � ¢is correctnç   ñoffset from January 1.  We findk #ðmonth via an estimatmðat's either exactÃ Òone too large%AleapŒ  Q == 3˜‰(n4 != 2ú !3)y ö : `= _is_ (K & ™ ñ = (n + 50) >> 5@ ñ
ing = _DAYS_BEFORE_MONTH[9 Q] + (
 A > 2“  ` _ #ifZ H @> n:| &isè t  ®O 2-= Þ  ‹ -Œ /INˆ /==‰ Fn -=‹ m !ñ0 <= n < _days_in_‚ $!,  Ž’ ù á î  O are"1thex p# startDD á:  we're done!( ¡ˆ ¡, n+1

# MO š @name½ðFor localized versions, sekòe calendar module.
CðNAMES = [None, "Jan", "Feb 0Mar !Ap 0May QJun",¥  Ÿ	 @"Jul# 0Aug 0Sep 0Oct 0Nov `Dec"]
U| !Mo| 0Tue( 0Wed 0Thu 0Fri !SaK ò-Sun"]


def _build_struct_time(y, m, d, hh, mm, ss, dstflag)w<´= (_ymd2ord4 ¡) + 6) % 7â @dnumdbefore"0, m- é¯ .‹ X 
Œ  ~  , ] ˜ )Ï SformaÉ À @us, Þ ³spec='auto'Ì   Qs = {³  ‘ö'hours': '{:02d}'°w'minute :$ nsecond$ +  _milli0 \.{:03† ?cro7 A6d}'× }ž%if 
Ó ù ð# Skip trailing micróoseconds when us==0.
  ôtimespec = 'micr- ã' if us else 'B '7 Velif 8 9 4lli$ :%  _ ±us //= 1000 6try `fmt = { $s[M ]' ö except KeyError3 ±raise Value –('UnknownŽ v "')H 7lse= òeturn fmt.format(hh, mm, ss, us)

def _ Â_offset(off)D s"÷if off is not Nong  ’.days < 0<    ¡sign = "-"¡      M e= -off  w< +< Á � = divmod­ ,âdelta(hours=1) i î 1    |0 jminute2 Ðs += "%s%02d: P" % (È ",  ^ Èif ss or ss.KÈ R L 3ss.9
ý  « M G  $ � œ'.%06d' %w O röð(s

# Correctly substitute for %z and %Z escapes in strf " Rmats.Twrap_ ƒ(object,$ }Stuple5ó# Don't call utcV)&òtzname() unless actually needed£¡freplace =hp  # the� “ing to usÄ <z0 z Z0 Z c# Scanñ   >", U  ¢ )asÏ 2new`B = [îupush =  q.appendž 0i, 0r0, len(: p¶while i < n_cI & "[i^  'ir1Q   f ) V= '%'<  R      1  í 8matZ     b     ij fj     5if â!isã
“  %  *  » ôtgetattr‰å 4  øB', 0b: ¡(� / ! 3O= 'zú ¬ú * 6= "ÿ¢ hif has% "t"’5  š2 = Ó.9 (à 4   ð?set #   B Q+R#  b U( 	 À   offset = Ÿ-offset
  ¯sign = '-'/ òh, rest = divmod(g ÿ, timedelta(hours=1))M mM  [ K ominuteM 1s =› �.seconds~ Bu = ¾ o.micro8 _if u:^  w€zreplace\d%c%02d  .%06d' % (|Ï, h, m, s, u6oelif s‚ -} z /sex )t q ôassert '%' not in Gtônewformat.append(. ^ 9Ÿch == 'Z'É Dif Z¶ois Nonò * O= ""ž  ÿif hasattr(object, "tzname")…  6    Ó3 .1 (Õ  (   1 is8º 2 `# strf¼ 8 ÿgoing to have at this: escape %â N #s.F¯('%', '%%'¼ ÀE / /el@pushi 4  ›  *ch M + '¬ ( $ O ¿  e.join( r €return _f.o% ðñtuple)

# Helpers for pars“ heÜ¢ult of isoó€()
def _' %e_ ³_date(dtstra@# Itá£assumed thÝñ function will only be called with a÷) ‹ ñof length exactly 10, and (though5 m  ¾Àused) ASCII-] L ¢year = int¥ R[0:4],1if ¸ Q[4] !’"ðraise ValueError('Invalid ð à separator: %sjI !)
v Ymonthw C5:7] x 7x ''L 9dayg D8:10h r[!, “ x, day]
ÊÉhh_mm_ss_ff(Æ`Parsesb0ngs0the)ðm HH[:MM[:SS[.fff[fðff]]]]
    len_str =
 q(tstr)
 ótime_comps = [0,  7  po 0* @for ) ñ in range(0, 3):  d Dif (h ¦- pos) < 2   $ ðraise ValueError('InU Plete Œ c conent'¢  7   ¦ [. q] = intÈ ·[pos:pos+2]1  ¹ E+= 2� €next_cha ÿ 7 "1]	 g vif not , ó ,>=É Zbreak: b o!= ':'ù Rvalidö öseparator: %c' %„ Õ 1w  ifd  <Ò Üp 4if ã  ] � .� ¹microsecondŠ   Felsei   j•      €remaindes   €• * !ifÁ -  ‚‡in (3, 6^ ,   BI¼ 	o J3G)]), › J== 3þ  ’ 
S r*= 1000¤areturnã¿ð

def _parse_isoformat_C Îñ 1# F ò supported is HH[:MM[:SS[.fff[fáH[+HH  Ê w÷ ³ Ú  ’	£] ¤ Å • too shorž`# Thisž ñequivalent to re.search('[+-]',“Ñ), but faster¢ 0tz_B!= ÿ ñ.find('-') + 1 or6  + ¤ 2 ¿ =" "[:H @-1] þU @> 0 ±# ‘ 7 Š$ =‡Àhh_mm_ss_ff(  ‘zi = None¬ 	Z 'tz‰ ˆ :U#ïè÷ zone strings arL!# Æ ž alen: 5~   % 0:SS  % 8%   &1fff( % "15  (¾ )ø vƒ5, 8, 15‰ )   0Mal½eÁÙ 	¹zn
 :Ð e àif all(x == 0 pxmtD “ t� ± | E.utc õ  [ ±tzsign = -1!Bstr[«P - 1]r 2'-'.ËAtd =ýÄdelta(hours=” ·[0], minute 51],Œ  ~  `0 2E z 3Õ G 
ö  ¾ Ø B* td)À time_comps.ñhappend(tzi)

    return time_comps


# Just raise TypeError if the arg isn't None or a string.
def _check_tzname(name):k 0if  c is no> 1and ’isinstanc2 S, str7 ¦ 
‹ ¢("tzinfo.te 1) m± Ì — • 1, "~  G  "ˆ ²'%s'" % typ}  ))«  ó òoffset-producing method, "utc "	’"dst".
#   ê swhat ith ed &If! H …bdelta,|s}7  å ,V s  # FElse\   cŠ�ed for be¹ €in range-  If™ ðis, its integer valueº Qed.  W V 
s¡ dòButc_ù (=,‰ Çcassert7n (;!, 9)¨iØ :  »’   L7ot 7z ,ÊEx 9 ??%s(; 0&or` ,¹>ó E‹ %))Ñ  g-ÞS(1) <& <Q -(1³ t ("­ B=%s,ì be#ßictly betweené' "  hours=24) ~—  1" %e ; é ä '

ô¡int_field(FÏ (if¨ ,o  b Ú|{ 4 Xfloat6 ×'Äñargument expected, got @ '–6tryY” " =€ ².__index__(+ ò except Attribut= Apass´ Felse ¢f ú þ È ‚ áe%pn-int (b_ %s)'¥	"  Ïs @).__‘"__Ð s +  ½ Dorig !tl?t__Fâimport warningÝ 5 .	 @("anÆ5Ðis required (k¦/" § # (w ,z k 
 ÂDeprecationW• * Ästacklevel=2îÀ  return valñ0ue
    raise TypeError('an integer is required (got type %s)' %=  A     ñ-(value).__name__)

def _check_date_fields(year, month, day):U   $ =1 2int0 / )" 3 #  $ ?day"  g D ñif not MINYEAR <= x `<= MAX �  Þ #V× $+ ómust be in %d..%d' % (Q ,G !),Y • u 1o ¬  	 /12k 	' l c1..12'8W 0dimì �days_in_3 /	& }  o<= dim| 	 & 
z å 2dim±Jareturnæ p  	÷5tim÷0hou÷ôinute, second, micro Cfold .  Ý ?  þ mJ $  & [ &  & † +  0 T0È ’   /23T	& U€0..23',  T Â  V /59V 	( 
X  59'Z ö Z ( Z   Z % _ 9 ½ û h ; Æ # q  %Äƒin (0, 12³. ^ ðeither 0 or 1',  X Í Ž ”¤
äÃzinfo_arg(tzŒ Pif tzH l‚None andµ ñ sinstance(tz, t= 6 Â ˜"" • argument*V sor of aG ¥ subclass"}1mpeß4x, h×b ñcan't compare '%s' to "Úí ›  ftype(xî,$&(y )„ ódivide_and_round(a, bò 2""" q a by b'& p resultŠ ´the nearest£
• PWhen  Pratiooðexactly half-way betwe& $wo< !s,=  8 ;eveö Ó1ed." 1""" “# Based om àeference imple•  Ðn for divmod_¯ < ñin Objects/longo ".cc Pq, r � 6 7 cup if ·Àr / b > 0.5,Â  == 9q#od¿ ð# The expression r / b ð> 0.5 is equivalent to 2 * r > b if ós
    # positive," <  " @nega .) ar *= 2 øgreater_than_half =Z á> 0 else r < b2 >if 5 ðor r == b and q % 2 !1:3  � qq += 1
 òreturn q


class timedelta0 ‘"""Represï ðhe difference between two date; ’ objects._ òSupported operators: ö - add, subtractx — ð- unary plus, min "ab]�- compare€ u ° 8 òmultiply, divide by intu  Inv fition,³ s¥ s� oion ofØ f 5Ving a¸ ,p1add_ < orO ar E  ž? B givR KCa· ñ : (days, second3cro ñ).  Why?  Because Il Âfelt like itx1""" à__slots__ = '_[ S', '_P  &mia  ’hashcode'Uð def __new__(clsYEys=0£   D 1=0,{  ‹ Smilliu 0 AnuteF Ahour	 ‚weeks=0)™ : @# Do4 th—¢fficientlyŠ€ccuratel   Cºg. 2o bÈUicultŒ #7 ñ error-prone, dudðubiquitous overflowà¢sibilitiesü8thaN ðC double doesn't have enough bitsd`precisqDto rj” :~ ð 10K years faithfully.  The –0 he@ries GmakeO ¡explicit w' àgo-fast assumpaPs can!@reli¸çn, in order toK  gu_0the]�mplement¥à; it's way mor— Pnvolu Ýw speed-K PignorÊTauto-dó-to-long idiomatic Python could be# XXX Check ‰À all inputs + inqer floaŸ9 ¡Final valuÊ8 Rteger+% s`us fitÐ32-bit signedbas; d iévbounded? �d = s = u 07W ðNormalize everythtPåW 0aysÌ%*7QI   ;‘tes*60 + KU*3600+ 	_8+= ‰I*100­ pGet rid¸ ^f¹3ionÿnË ,ª ð # Take a deep bê†h <wink>% Óif isinstanceç¯ó 60day{ iÑ = _math.modf5 )Ý - 4 ;]whole?  & ð * (24.*3600.))
       ûassert daysecondswhole == int( ò)  # can't overflow
G  /s 7 	% r g )% dJ  Zelse:( ¸ ªfrac = 0.0! ! =Ý   §isinstanceå  D v, floatu 1 ;abs* g) <= 1p * [ ,GL s? †24 * 360µ #¯ 0 isfõreferenced again before redefinition
Û 7if | ÐÐ 
8 ñ  ã = _math.modf( ¼  ãâ  ¿ 
+  È #  … " +§„  Ö x  „J  # B� . 	b  s }’ l • p. ¼ ( V D ”#, Ù  Õ Tivmod°P, 24*Qkd]k s  àF )dÚï  “ " ã •? * Ûp aÞ`usdoubœý  oe * 1e6Ú Š 0 ’) < 2.1e6å õ	exact value not criticalC #_ ˆtSmicroå 	
y" ™ = round( %+ º ”  » W 	. 2= d  A, 10  B :5  , : 
�   ’  • 
 
Ÿ O (, # á á d ‡ Á˜ÝD" j - q3qv  ' M Àseconds) < 3s.1e6

  ò0# Just a little bit of carrying possible for microseconds and s .O  è, us = divmod(7 A, 10 )4 4 +=J  gdays, E ¦s, 24*3600: d:  * Ð ö	assert isinstance(d, int5 " s" Ò „0 <= s <m ‘ 7 u8 u9 à “ Ôif abs(d) > 9 :Y  ‰ðraise OverflowError("timedelta #“ è ö is too large: %d" % d)l ö
self = object.__new__(cls  # !._N 5= d‡  ÀK = s ÅL = u  Õhashcode = -1< preturn ] ¥ Ðdef __repr__( )
0argñ%[]? !if; ¯ )  3 - �.append("Î = T 0 ó G ß J " 	M  P  U ' 	Z  	_ @not â U 6'0'2 g "%s.%s(%s)_õ.__class__.__module__,a J D9 qualnam;  ', '.join(¿ )›ö/stõ Pmm, s÷-| s7, 6ïghh, mmXm   F r"%d:%02 6  e 0 9
d « ‡plural(nœ%j!n,Ôqn) != 1:™"s" or ""] ” À("%d day%s, “ _ ê  ‚ G)) +qž 
¦  W ‘s + ".%06N 2 ˆ ´ s‚ctotal_e(ë @"""T  ”÷ in the duration."ä \ (E .Í € * 86400Ó Celf.f µ) * 10**6 +™ U¼ » 2) /- ³ ò# Read-only field accessor†‘@propertyZ  Â ‰ “ 
Ø   ¾  € p P Å S   V   Y ö ^   c % h  S__addeÀ, other):
    ñif isinstance(other, timedelta):
&  û# for CPython compatibility, we cannot use7 öour __class__ here, but need a realu 	< freturn á(self._days + °  ,7 ±  7 gsecond:  = Smicro1 |  )„ · ñ NotImplemented
 Ñ__radd__ = __
  ±def __sub__å ,Þ ƒ¬©-Î ¬ : {¬B ¬”r•6-ŽC © 4ˆ 3neg” /# �#¡ (È Ó& ¿) 
¦ >pos •  RH/ab,  0if ( ² J < 0ßK ‡ w  –Oelse'  J r 3mulž º7intÈ l Ì 7 Ð# < ô Ô × !*´qÞ 4 é9 CîLfloa6cusec =Ú8to_W (P  î ba, b =× û.as_integer_ratio, ñ	0, 0, _divide_and_round(€  * \ )o ? Î1__r-
 HÁ  �'W (#¨³(24*3600) +�a) * 10 ð +
             ð   self._microseconds)

    def __floordiv__(* ‘, other):#  ' ñif not isinstance(" ÷, (int, timedelta)4  8 õreturn NotImplementedV cusec =� )to  %()' /ify  s ¦ r [ "//É /._] ?intÉ v y(0, 0, g 	SOtrueR(OfloaYˆXMð_divide_and_round(j˜<Àca, b =· ÷as_integer_ratiolCì” 1b *I, a)ý?modK	Gl · r# %Î ÝÎ rE¥?divÒ 60q, Õ S nž ,}  ¾  y4  Ð  4 Ô qœ³ù ö# Comparisons ofãÓ objects withƒL/eqû4; �R._cmpre) == 0Oelse r1 Í/le  K<  -t  L?+g?L>?,g?Àlf, other):
  óif isinstance(other, timedelta):
(  òreturn self._cmp0 U) > 0( Oelse6 ñ NotImplemented
1 Adef I  S !,  t oassert¡ 
G  � œ N Ã._getstate()Z  )� €_hash__(… ~ #ifê   ªcode == -1Ý  4 .A "  - J 
n  £   § 
7 Œ NboolŒ 7 Y Ådays != 0 or ^   [ osecond& Xmicro+ ÷# Pickle support.¢ W i /£ ,@a  u p _reduceý „_class__O � E))

ºf.min =Ê4(-9 )& )ax&  Z=) ð9, hours=23, minutes=59y ]   ƒ è T { šresolutio¨ 	6 A1)

ï C datW±"""Concrete S type¡ÒConstructors:´‘__new__()ª @from$Sstamp Stoday    ƒordinal(œYOperaQ @repr€q__str__Y B__eq #le t g g  !5 2add& r
 °sub__ (add/ ¦ only withÍC argž dMethodí  Û StupleÏ &toÍ  •Fweekí 5iso Ð, isocalendar2“isoformatK c\  Cstrf ý ðProperties (read³ ñyear, month, day0 1""" à__slots__ = '_+ Q', '_. 
 1day  4 `'Ô/ØPcls, ; f Q=Nonek 
 ‡  ý 9 2  @Argu–F  R M  Ù âquired, base 1Q , Ï   Aif (À @ is ‹ A andí     oe Ð(bytes, str))/ P len( )r4 	B �1 <= ord$ `[2:3]) '12í  j Æ	E 
ù n ‚ 
ß G >try    5 ! =}0.en –('latin1' )    except Uni) E/ _Error\ ’# More in…Pive e. ™ message.Í  a   ±raise Value\ (& À            ð"Failed to encode latin1 string when unpickl ?"
  ÿ"a date object. * N Âe.load(data,| Ring=' ù') is assumed.")v dself =i ¾__new__(cls' ÿ.__setstate(year" Ahashú I= -1i preturn p   F ð, month, day = _check_þ q_fieldsl & x  M ½  #  ._i 0 =  }  } " =…  ’ ;day å á 1 ñ# Additional constructors
 Á@classmethod ðdef fromtimestamp‡Q, t):  +$"CG  " 1 • a POSIX : a (like . F()).Dñy, m, d, hh, mm, ss, weekday, j 0dstŽ = `.local
 &(t|ï Ccls(P )Ø PtodayÐ Í  i µ ´ Ž    (ˆ .  =t� 	 + pordinal– 8, n™ "hóproleptic Gregorian H .ÿ  §ÁJanuary 1 ofu  1ƒ PÁ1.  Only the ÚA and5areï±non-zero in0 uresult.  -""Õ µŸord2ymd(n&® ’isoformat ‘È* Þ `output = .Q ().¹ ðif not isinstanceÇ"e_l ,<q  ^ùraise TypeError('¯ ð: argument must beC ' @ 6tryR  ¨assert len{ u) == 10m * õ…*_parse_× ´	A �except E :ion€ Ñ CValuÒ ¥f'Invalid ^  Å `ing: {M4!r}Ù N is¾RendarÊ ït]"ø Î3ISO° *q number¶  7day @Thisñ 8 pinverse   ¾  2cal” `) func&`# YearD PboundU T ñway because 9999-12-3\( v, 52, 5x\’MINYEAR <  0MAX ‰"‡ oÊ€range: {Eð}")

        if n÷ot 0 < week < 53:
  ùout_of_range = True
! "if; -==<  G ñ# ISO years have 530 Ãs in them on ù starting with af K üThursday and leap:  on a Wedne' B `first_ê  E °= _ymd2ord(  ½, 1, 1) % 79 Kif (= o= 4 or  3ž B  Á  @_is_Í † :)))�5 ‰NFalsŠ% G ñraise ValueError(f"Invalid“0: {6}")âCif n! 3:< 8W S Âday: {day} (C¨is [1, 7])g Ð# Now computeô  offset from (Yœvin days„ Cday_+ 0= (¿   -Åp* 7 + (´   Ñ ”# Calculah `rdinalW Á for monday,% 1Ç h €1 = _isof 1( ³& @ord_s =O A_1 +   ƒ óreturn cls(*_ord2ymd(; )|ò# Conversions to stringE ÷def __repr__(self32""": t6 cformal= ,á  7 2().J  ]p>>> dt ´ ³tetime(2010rÛ  & ; 5dt) 2'da3 .	 < �, 0, 0)'j �, tzinfo=‚ †zone.utcj  %W ¡ .` 'Ë 5""" ¡²"%s.%s(%d,  Q)" % qõ.__class__.__module__,A  W  ²	A qualnamC ¶u _month¨ 2day‡ð# XXX These shouldn't depend on Y`.local
  (), becausÐ!at§ q# clipsápusable ˜áð[1970 .. 2038).  AtãBst cP 3 isE ±easily done,`out us:Cstrf. ô-- that's better too’ H . á"%c", ...) is Ä Âe specific.
Â v‹  ÁsRÑz Sstylet.V 7 @ B.too{(s Lx‚± %s %2d 00: Q %04dˆÅ f£_DAYNAMES[g ]æb_MONTH" ð self._month],
   ²self._day,  pyear)

" Ðdef strftime( q, fmt):  ! Ö"Format using+ 5)."# Þreturn _wrap_M v  b wtuple()| 1__f` /__~ ðif not isinstance(fmt,‡ £  § ð	raise TypeError("must be+ ,D ‘%s" % typD µ).__name__)È `if lenb f) != 0b æ  $.å  ,@ 1strÌ æ 2isoç  Y B"""RX ’the date )  ted accordwrto ISO.³ � ÷This is 'YYYY-MM-DD' ¦Referencesk ð- http://www.w3.org/TR/NOTE-y   Ë 	- ð	cl.cam.ac.uk/~mgk25/iso-2 U.html7 -""’"%04d-%02  „ ._†d_month 3day<_OU__ = Bñ# Read-only fiel-aessors� ‘@property  å n y 90""" Ÿ (1-9999)¿  ï« y Y » Z    [ /12Y % Z ?dayX  0dayV /31V 2dayT ð# Standard conversions, __eq__ #le t g g =ó# __hash__ (and helpers¢ [ Ú .`Ü`local '  ( ñ compatible with .&  % (]PbuildAuct_&  m F,Á  0 20,  (-1Ó oz/al� Õ óproleptic Gregorian 5  Ä Ñ ^!, å <7day¦ÐJanuary 1 of +   1Ô áP1.  OÝF b valueì Ü Ñcontribute to{ uresult.Ü �_ymd2ordä Jdreplac- · S=Noneç  1day
 ëRa newíþ  Ð 9’specifiedÞ(s.¿ i.0is z ã 
 ‘ ' =é#ifŠ8 ¥9  :  •8   6  x „   p ª )(š &&, ä0# C`risons
 �‚ objectsSother9 q¿·!,  hÀ     if isin÷stance(other, date):
  òreturn self._cmp+ e) == 0) % ñ NotImplemented
 °def __le__(D !, k e if isin‰ &<‰ t‰ GgG>gG> Z oassert$d ¯“y, m, d =«Syear, Tmonth 6day5 ²2, m2, d2 =™"._9 ¦#._:  ; ó(} U), (yS ())Chash{ýu"Hash."‘ #if³  / @codeh*-1“ (&._"   ^Õ._getstate())U « 
7 œ â# Computations ²3add¯ ³a"Add a.ú  to a timedeltaË Ø)  ¾o¸Ótoordinal() +“EdaysÍ  . úif 0 < o <= _MAXORDINAL& ) ú Atype d).fromb o#- öaise OverflowError("result out of range"7 ` ø1__rCQ = __
 ^?sub^á""Subtract twogTs, ors an~K9.""Av¿  & +Å"(-ð xì ¨ 6 1Ï 	Â % tõ	&   ê (7 @1 -  2› ( ‡ Írweekday%""RÛ0dayÜ@the * °, where Mon  èt ... Su 6æ{ \ .È ’ + 6) % 7öÐ# Day-of-the-f  Å 	  w1accžgX2ISO>  Å 0iso/ È )1È Ànday == 7."
  ó
# 1-Jan-0001 is a Monday
  ñ return self.toordinal() % 7 or 7
* ðdef isocalendar(/ !):  I B"""RH ñ$a named tuple containing ISO year, week number, and Bday.k  P ‘The first7 1 aof theC  È   ‘(Mon-Sun)B � u  &  u #'sO ðThursday; everyth› Åelse derivesF Ÿfrom that— “ Sis 1;P ” €1 ... Su`  7;  ÿ >ð algorithm taken l y ôhttp://www.phys.uu.nl/~vgent/C /�E.htm> õ(used with permission) 5"""  " =ú_   Þ !1m(w = _iso (+ R Ptoday& qymd2ord.P ,\ Tmonth 6day= Ã# Internally  R Ùhave origin 0š  ,   ’= divmod(� -µ 6, 7d !if F < 0± e È U -= 1^   ê  Ö ü 
0 ’ $el” Z>= 52– 2if Ò >z:+1)1  … Ë +Ë    Ï ' =BðS_IsoCÎADateÖƒ!+1Ð 2+1)‘ô # Pickle suppor `_getst? •yhi, ylo § ! 6256 ‘ tbytes([9 /<2]),–  (_s€ ‡, string!O   4 ¨ à = yhi * 256 +Î z �reduce__ðr Ï  ¤.__class__Ï 0’))

_date"  (óate  # so functions w/ argsU"1 Á" can get atc  

 C.minK @(1,  ) $ax Ã9999, 12, 31 `resolus ð = timedelta(days=
d r tzinfoò"""Abstract base # 1forA ` zone /  #es1Sub* ñes must overrideË  <ñ (), utcoffset()" ds
 �methods.¬ÊÓ__slots__ = (² !tzM  ÏG, dt¢F å 3 ->2` c1ime» .(òraise NotImplementedError("# sÔ Ò ƒ ')"— Ú š  ¢ ‡°, positive ^ ea6µf UTC, nega Àwest of UTC"#
  ñ8raise NotImplementedError("tzinfo subclass must override utcoffset()")
P ñdef dst(self, dt):  j ò"""datetime -> DST > @ as  ðdelta, positive for eaq uf UTC.
K ±Return 0 ifH ø not in effect. ™ ³ °include the1 I � . 5""" &  	fromutc inå   Qlocal&." 1if ó äsinstance(dt, 8 t xÈ CTypeÕ� Å) requires a= P argu%")
cif dt.!is|  áÜh DValui 5 "* 3 pdtoff =^ L
x  " is Nonep Ù @non-= 	æ ‡  x"result« B# Se@€long com%‘ block atZò end of this filÂ%anÐ Õ# explanation* –algorithm‡RdtdstMB Š  2\  ì ˆ~  |!- Ž 	ƒ  ©
�adt += : *  P < L .n 	 Î  ? ¼Tä:6 ÿgave inconsistent Þ Y â`s; canL`converó    re Ú ½ ó# Pickle support— ù¡__reduce__ëˆñgetinitargs = getattr% W, "__ A__",í	! 
xR ` (9 ;els4/ $ �getstate—  ”  
‘  M  k � " - 
Fdictv 1 or€ ›2if ; ¹_1.__º0__,Ús	ñ8 ,q A)


P ò	 IsoCalendarDate(tuple):¤ònew__(cls, year, week gday, /!| §super().__= (>  )F‘@property x  - Ã ^  Ðelf[0]

    @ñproperty
    def week(self):   preturn  A[1]
 @: ?day= 	2=  i ¬__reduce__2 ð,# This code is intended to pickle the object without making Ÿ  · õ&# class public. See https://bugs.python.org/msg352381> õ ‚(tuple,  « 2,))È .prÆ @ 0f'{91.__Ž Õ__.__name__}'m  ¯   �f'(year=3 Q[0]},‘ 1 3day û2]})')


_IsoCalendarDate =  M
del r_tzinfoœ 2 =  !

¬ R timeq"""Timeo b zone.ÒConstructors: ƒ__new__()YOpera  re5‘, __str__
`__eq__ #le t g g bhash__k dMethody @strf· !()S “isoformat „utcoffse  tzŒ  ds 8 PÓies (readonlyðhour, minute, second 4cro Fa, foldO 1""" à__slots__ = '_J R', '_M  C  %miS  V        f '‘{Pcls, c  =0Ÿ  ¯  
 a  
 `   _ ‚=None, *½ #=0õ  �7"""êü  „Argument„   y w  Cbquired•   ‡  " å � (defaultêFzero. œ 	!  ¨ !    (keyword ®,ÏN Ž ˆ ò if (isinstance(· ñ(bytes, str)) and len `) == 6 Ð B   1ord ÷[0:1])&0x7F < 24> ' 2# PÁysupportD =if ‰  � � ?  >try    ¾ ! =õ0.en!–('latin1'+ )    except Uni) E/ _Error\ p# More . PPive e. ™ message.Í  a   ±raise Value\ (&  * R"Failæ»  º  … Úqwhen un  Q :  ""a¢"/. * N Ñe.load(data, | Eing=9 „šassumed."G Ù# =‹ Øô>cls' ¤.__setstateõJ or Ë Ï  Y $._æF = -™   ] ' Q ý P é˜&Ð= _check_time§_fields(
  ðhour, minute, second 4cro Ufold)5 ò_check_tzinfo_arg( " ú
self = object.__new__(cls#  ._| 0 =  _  = "._� # =™  ™ # =¯  %mi¼ A  ( · 2 = 	  Ûhashcode = -1  0 =   preturn ¿ 
 Á# Read-only y¡ accessors  ‘@property 1def(A !):  ¦0"""¥ (0-23)""" q Jw W LY    [ /59[ & ] ‹]   ] & ] Êb    g 9 È 		E*	k  �timezone ôÙŒF Ô  5b 	Ë ! = ð# Standard conversions, __�ô__ (and helpers)4 ð Comparisons of » ² Òs with other./  wa__eq__” , €áif isinstance(; ,T $  ¨	Ã 4cmp+ ñallow_mixed=True) == 0€ 7 Felseí  I èNotImplemented­ /le­ D?) <› -t› G5+g5G>5,g5G>5* Æ Ž(, ÌWFalseoassert,ðAmytz¸3lf.C !ot d AmyofUt BNone 51if Z 0is F RÀ   base_compÃare = True
  Uelse:   ù	myoff = self.utcoffset()% "ot% _other& ’base_compy Z != > 
Q 8if * 
� Ñreturn _cmp((” b_hour,  t_minute usecond,Z  Ð 	 A Rmicro, )- (Ý o  p  E D  ( r J2if ¢is None or  
êif allow_mixed  æ +÷2 # arbitrary non-zero valø 0 ü  ô	raise TypeError("cannot ÈÀnaive and awØftimes"Õ dmyhhmmA>y * 60 +³" -ü  //A bdelta(]6s=1N #otN I üO  6 " -;P $O« =¦ $  Dhmm,ä 
ó“Ádef __hash__Ì)Å±"""Hash.""",  ‹#if�  3 ¦code == -15 % ?fol t‰€replace(' &=0a C 	; �  + "tzùtõ0if /) Q:  # ~!orâ	L  P ‘à   ÿ(t._getstate()[0]¯ 0h, vvdivmod(U 2!s=h   ", 0  A) - ± Ê ®  W *1)›  % aassert7m %3 l  ßƒ, "wholeŒ ò @   _m //=; Bêif 0 <= h < 24 K   þ yFf@ime(7Á. 
¿ E  2 " = k g ¦
L 1ò# Conversion to string `_tzstr^ RI‘formatted^zvâ� (+xx:xx)†ƒan empty_ 	–œ ¼ _i _?Goff)¥ __reprÞ tÛ B lƒ `, for 7 )()� %²R != 0À        s = P", %d ò" % (self._second,  Rmicro 3)
  Celif   e != 0:   ' As = _  [ L , & Oelse4  "! ¢s= "%s.%s(¥ 0%s)M ¨ õ_class__.__module__,;  ‚  ‰ ; qualnam= Fhourvnute, sûtzinfo is not Noní öassert s[-1:] == ")û  ¼  B€s[:-1] +KQ 0=%rÉ    < ‚ Jfoldat  C '=1] ‘return s
kÑdef isoformat˜ö, timespec='auto')‚ B"""R? 1the(  : òted according to ISO.b  	ƒThe full.  S±'HH:MM:SS.m ð+zz:zz'. By default, f ¡fractional±  O @partD @omitz 0ë �0‚ "opH ‘ argumentÂ  ê   Qifiess ânumber of addi5 } Pterms  �  + ï ò include. Valid j bs are E0, 'w&s'â0'mi|Rs', 'Y Tmilli g and 'Ø 5s'.Š &""o k_Œ_• Ë ._t ë%M  X
 ¡| -Ctz =Iftzstr( Vif tz< ] us += tzu 
Œ–__str__ =’C@)amethod<  ¶Ffromº2clsŸ  D :ingµ±Construct aô = ë`outputÏL ().Z!ifÿ°isinstance(`g W, strl  å ðraise TypeError('m ^ :~pmust beC "')ê  @ :try6&Åcls(*_parse_O í’ )��except E ;ionV § CValu¨ Qf'Inv¿^  › ging: {b 0!r}¯ ‰@strf sW, fmtA"""F\0 us- @).  Qdate Ñ!of’ K pstamp píñ˜o underlyI q should¤be used"#o Tyear y€>= 1000 È� Python'sô Ð ` imple(að  ˆ b# can æ‚a bogus k6ion|  È ðtuple = (1900, 1 H  L  m¯À               0, 1, -1)
   ðreturn _wrap_strftime(self, fmt,  qtuple)
5 ædef __format__* !):  T ñif not isinstance(J 7str%  ) ñraise TypeError("must be str,D ‘%s" % typD ¦).__name__Á `if lenb f) != 0‡ b ß  Ð .Þ 6fmt@ 1strÌ æ ö# Timezone functions ’utcoffset3 s B"""Rr 1the;C - 1 as õdelta, positive east of UTCCa (nega %we U)."""$ 1if Ø ö _tzinfo is NoneŽ   9 � =? .Õ  - !²_check_utc_9 %("+ 2",  / P 3 tz¹0 + .<  Ä  Note that V   ì P100% ù  Š€ional --" ðre's no requiremen9 %at ð)it mean anything in particular. For example, "GMT", "UTC e-500",K @"-5: B "ED' �S/Eastern. öAmerica/New York" are all valid replies.P à1"Þ€Û  7 È  Š ù/dsó€0 if DST� Àn effect, or™ ( (ÿ 	Wward)T iP @Thisp jpurely;t õ
has already been added to€  `3UTCÕ Ìeed by ô(” €applicab# soj wL !ne\ � consult <ð) unless you're interested„pdisplay’ ‰ 5DSTM  è&<‰( ¦ % ?dstú ä$acTPhour=a ƒ, minute csecond Xmicro    óÒ=True, *, fol= b�Qa new|Q with ƒvalues f›üspecified fieldsj ¸  i » 
b F  ¬ #ifã 8 ÿ  :  <  <  <  < AÀcond is None7:
  ÷microsecond = self. + úif tzinfo is TrueF  A  < @fold: ;Non:  8 _ 7 Àreturn type(˜ ò)(hour, minute, µ   Â ,¥  , J = !)
Q ò# Pickle support. Âdef _getstatf Ö, protocol=3)å ñus2, us3 = divmod“ '._,a, 256)n  `0us12 22 D 	$ hs_Û ; "if‰E and” F > 3•  g …h += 128= AbaseÏ ° = bytes([h- lf® ;  A:  O  Å  Ê &3]Ý ¢ ëÛÁ(’ ,A ;els	. c È±*_s²dstringý¶	¶@not €Q  ²isinstance(d 2, _	 g_classI  óraise TypeError("badp qFarg"ã v [ Å �ªif h > 127ð 
.5= 1/  ¡   Ji = h -q/  $O = 0J  2 ó÷ = (((us1 << 8) | us2) 3< _# =8…Á_reduce_ex__\‰ˆ%Š §$__ßÉÃ)6b _ U T & ˆ ’2)

_timej  ¸ ðime  # so functions w/ args named "1 ñ" can get at the R 

 C.minK @(0,  ) $ax b23, 59 9 $ `resoluy + gdelta(–qs=1)


r P dateu (	 õ 0"""  0yeaTÀonth, day[, B[X -[]  j"[,Ë] fGThe O h0dayóuments are required.€ may be ›q, or an5œT of a, 1sub×  . m —remainingc N Qints.H 1""" �__slots__‘Fate.  +  —¨new__(cls,Ü =® 3day
  4$=05 
 ^1=0,~    « ) IH *»0« 4 Gif (¬c(Üq, str))k@len( p) == 10 { À    1 <= ord÷(year[2:3])&0x7F <= 12):
  ù# Pickle support Ñif isinstanceO [, strC  N :tryX      „ ƒ = bytesB ™'latin1')l  - ñexcept UnicodeEn Orror\ ð# More informative e. � message.a  e Àraise ValueE. (&  * Á"Failed to eŒ  º  Àing when unpA  "J ÿa datetime object. . R Âe.load(data,€ Eing==Ú is assumed."Kdself =i ¾__new__(cls' ¤.__setstatà_month) @hash‘Y = -1ê preturn w   ø!, M ð , day = _check_	d_field& x ðhour, minute, second 4cro FfoldW  \W †  ÆJ { ¨  tzYR_arg( "  ê a #  ._0 =  ”  ô " =" /;day  Ê 0 =   ( O 1 1# =G %miTA  ( 2 = 	  ì ©  6 4 Á# Read-only ¡ accessors  ‚@propert1def(b �0"""– (0-23)""eq  ._$ 
W LY    [ /59[ & ] ‹]   ] & ] Êb    g 9 È 		*	k   Œ2zon›ˆŒF Ô  5b 	Ë ! = ±classmethod²  %P_from� PstampÊ, t, utc, tz:§Construct ¯ @ • a POSIX I a (like . B()).†  sA ö
 may be passed in as well¨%0fra¤  â¶math.modf(t…°us = round(+ ð * 1e6)
        if‘ us >= 10 7:
  it += 1 Eus -.  @elifI << 0B  . (  \ !usV o %0
 ðconverter = _time.gm  Z stc else Plocal = ñy, m, d, hh, mm, ss, weekday, j edst = g 5(t)? �ss = min(7 059)§ ð	# clamp out leap seconds� õthe platform has themN Qresull ?ls(š fus, tz€ Úif tz is NoneAõ## As of version 2015f max fold in IANA database isˆ Æ ð23 hours at 1969-09-30 13:00:00B «Kwajalein.< ãLet's probe 24H  inï ú past to detect a transitionÂ @max_¬ _A=L W* 360ÿ­ µOn Windows å__r ûan OSError for negative values,½ ñthus we can't per® Š ´  O H ?  e TL lesD2thaõ  x%  G à. See commentsIP_date  |module'H Åáof this methodÍ @more˜ Jails‡   <ó
G„and sys.‰ú.startswith("win")ˆ brreturn ¢|  © 
/- -„ Y)[:6]w,19 ü | ;# =˜ " -s@1 - MŽdelta(0, 	{  ( ƒm.days Š h ä +Ç: //{ .1)ì  R ð 2ð  : "ifæ 42 =ù ° ) ­.ý � 
3 + â = tz.fromutc( l b@class�S@def @  ~€stamp(cl³ ¶=¤[¡"""Constru@ � a POSIXLI a (like .^ F()).ˆA Ðzone info obj\`may ber!seóaÙ&ll(1"""¹  0�_check_tzC P_arg(k  Zcls._ä tß  †1notŠ  )ž #:utcB & na¯0UTC°)'.Ñ ² 
QTrue,® ª 	3nowÃðz=None):
        ð"Construct a datetime from 
 . ñ () and optional ã zone info."
  Pt = _2 7  °return cls.[  # Ñstamp(t, tz)
) Á@classmethod ñdef utcnow(cls):  k 	µ ?UTC¹ � ;utc  œ 	pcombine� ,ƒ , Ó  _=True¶ 
kqa givenE l  *Ä ðif not isinstance(H 0, _ _@q  +ðraise TypeError("* ó argument must beü W %")ls  ” ,ès  1 s  s  tzB@ is Eú Ó  =m. ¯ jR.year�c.month Eday,4  U   “ R.hourËs.minute csecond Smicro J Â q, fold=W  
 O	 z–isoformatUw_stringØ)"" Ò a ¶Áhe output ofQ  .Y F).""³ß O t W, stry  %Q'· :èCstr'÷  @ à# Split this a µe separatorIadstr =¿ Œ e[0:10]! t! B11:]J h :try7Ø  components«eparse_F({ ÿ²except ValuB
U  µ(f'Invalid W  Eaing: {ƒ Ï8!r}0if Ò 
] Ã Ø Oime_Ç  ñ(O Ç  : Ë  # Ï , C   KelseË ¶ E[0,  GNone¼Å*Çñ +ø )^ / û §tuple(self»""Rƒ4locÂ(  K±atible with] .&  L '()~ dsá Y V.dst(^0if  0is É 
ú   E= -1º"el/ ' & CI 0H %`_build%1uct}û ù­ ù ðday,
             ±self.hour,  cminute �second,
;  Qdst)
( Àdef _mktime(R !):  - ð	"""Return integer POSIX , •stamp.""". Àepoch = date" Å(1970, 1, 1)% ’max_fold_« Õs = 24 * 3600% At = Œ 1 - V A) //v `delta(V S  Á wlocal(u¼  À ðy, m, d, hh, mm, sp _� .2  
 u(u)[:6]}  9 rö (Ë J  )� 
O ð# Our goal is to solve ã ƒ ¥(u) for u.3 Ba =  te t ¥u1 = t - a t - ug0if  6= tÎ Ù à# We found oneŒ ñution, but it may not be the$ vwe needŸ H ALook¹ ¥an earlierO ` (if `ç`õ g0), orµ B Qlaterc 
/ *1)l Ìu2 = u1 + (-?,,   )[Å.} 
ÔbV u2W%u2E � šif a == b1  %u11 Jelse(  ^ Wt1 - &  < Õassert a != b@ Ó  É tæ É2Ý É2˜ É” Å  * 1* ¾ 4hav
òboth offsets a and brneithert2 no
 Eb isË 5# aøð .  This means tü!inI6gapÕ¼ ˜(max, min³–(u1, u2)
� ¥nã�•– as float›"if-p_tzinfo™ ;NonÃ <† Ê¶ 2s +L RmicroÆe / 1e6< Á ô - _EPOCH).total
(�0utcö Ntupl•“1UTC & ñ compatible with 0.gmG 6().è" =Å 2utc (í #if
â 3 -= í Q 5yeašConth™5day2 	� V Ï9 F@_buiAQtructÍ(… é7, 0Q É~?  é   W part*o   ; '._Ý '_mÞ G_daym t Ù m    m ,«•ð None."
        ñreturn time(self.hour,  cminute csecond Tmicro Qfold=1  
 ¡)

    defU !tzW !):   #"Rs !he" õ
 part, with same tzinfo."2 ¤ /K  �  ³ _n  , ¼ Æ breplacó, year=None, month 3day
  @ u P  > P — m=True,I *¯  ˆ Z"\ a new dateÙ\  övalues for the specified fields.""v!ifí @ is h Á @ " ='  £ "if7 38  9 ?day7   m 8day3  n4  5   6 ‰8  :  < ¸<  <  < çA ! F  K   F  #
� A  <  ë : × 8   6 ƒ"yp	 )(öp, day, f", 2 (0B  6
 Ú ,õØ { Hp_local_Ë3zon� ó "ifˆé Ù $tsv0_mkI %()š FelseN  ¤ . ¸Ñ - _EPOCH) //¯bdelta(Ü6s=1G ¥ Qtm = ª .  X+ts& % =œ"(*( Vm[:6]' À# Extract TZ, a® “gmtoff = 8 B.tm_ #  %
!    Ì0ime (
Ö P 0),   ‰ as,    ¶¯„_if tz„z„¼ 'M ø ðelif not isinstance(tzi  h  §ôraise TypeError("tz argument must be an J   o�  I "Õ  F 5myt™ C* Í  8 ¢Ñ b �offset = 5 B.utc F, ‰"my) :  f ­ / ±  %  € Ð = self.replaûce(tzinfo=None)._local_timezone()
  òmyoffset = mytz.utc u(self)
1 �if tz is' :  O preturn 1 0 ‘# Convert ð to UTC, and attach the new ž  Ÿ … object.] autc = Š 4 - « v).replaì 'tz¨ x @fromu  | Qtz's o c ¼ 0tz./ sutc(utcO `# Ways? òproduce a string.è Pdef c¿ £ )""R t) style< "à ‘weekday =$õ.toordinal() % 7 or 7, © @"%s  …2d %02d: ¥ %04d" % (3  œ£_DAYNAMES[m *],  RMONTH"  Á{._month&  :day=  Rhour,Â t_minute osecond4 Cyearf E‘isoformatI ? ap='T',­¸spec='auto'c"e H … C qted accKg½3ISO° ƒThe full. ñ looks like 'YYYY-MM-DD HH:MM:SS.m '2±By default,Ãð fractional part#@omit‡ "ifRmicroW == 0� I# · = @not ¾^ BUTC ‘  Calso?¥ed, givingÐ ) aà /ofØ 	+è '‘ #OpÍ pargumenÀ p „Qifiesó ðseparator between dateÜŒ  ‘,)8 'Tc  ƒog  2  g l ânumber of addiœ f @erms òto include. Valid j bs are F0, '´&s'š'¹Rs', '© Tmilli  à ' 'Ìs&""×sµ"�-Ÿ !%cœ2 þ å#lfo  bu sep) +ä  µ" _ÜÊ$ ._Ã 8 ¾  ± Ý B 	 ‡ Ë j)— 0 4offœDEtz =š ¥F(off! 4 S rs += tz@  Øs  �__repr__è 
òS"to¿lT,  7 8().‹RL = [î u� # These'ªnever zero†I yõ__]H �if L[-1]
2del - À        s = ÿ"%s.%s(%s)" % (self.__class__.__module__,
  6 qualnam8 õ", ".join(map(str, L)))k 2if [ õtzinfo is not None:%  — ùassert s[-1:] == ")"! òs = s[:-1] + ", Q 0=%rö 	d +< ‚ Ofoldt , C '=1™ ‘return s
« ±def __str__‡)o P"Convá àto string, for 6().ê Q  Åòisoformat(sep=' ')g @Üemethodx ðstrptime(cls, date‰ h 7mat� '‚ ¡mat -> new5  C à parsed from a£  ing (like   .l A)).'‚  Âpimport w Š  Ô  .
 _¨  S ¶ ó  Z€utcoffse'lfÏ B"""Rˆ"th¢ Rzone - 1 asµ ñdelta positive east of UTC (nega !we º vUTC).""ŸM~ ÏËð   J � =.Ó . ²_check_utc_9 %("+ #",Ú eq + 1 tzÁŠ. + .<  Í Note that T   ì P100% È –€ional --" 0re'Ù° requiremen9 %atÒ Ðit mean anythO ingðticular. For example, "GMTY0UTC V-500"¾@"-5: B "ED' �S/Eastern. õAmerica/New York" are all valid replies.› à2"Þ€n Û  7 È  Š ÷/dsñ€0 if DST� XÐin effect, or™ ( (‘ 	Wward)T P @Thisp jpurely;t õ
has already been added to€  ` †¥ Ìeed by ô(” €applicab# soj wL !ne\ � consult <ð) unless you're interested in display’ ‰ 5DSTM  è&<ä ( ¦  Á	% 7dstúÀ        retuò-rn offset

    # Comparisons of datetime objects with other.3 òdef __eq__(self, !):P  T áif isinstance(; ,X (  , preturn I T._cmp/ õallow_mixed=True) == 0c �elif noti e çNotImplementedL &se½ • XFalseô /leô H?) <â W kYerrorÃ	ì tì KÍVë g×K>×yg×K>×w M W (, SÛ&_asserN )/cmytz =²etzinfo !ot ó+._ ¢myoff = ot 3Non^ t1if Z 0is F 
‘abase_c©@e = t ,el¿i  þ B.utcð(Ã  p † ¬ & Ø# Assume thatBb means ówe are called from ¤  q (if@ 
à   ¹ !]Ðreplace(fold=ìÐ   )Ö J  N X2ƒ   #if�!Š Öh i )°Ø =q 2offfŒ * 
Ê Â  ¿(¦s._year,zTmonth Mday,ê  b  Ðself._hour, sáelf._minute, s Ÿsecond,
  ' Rmicro, )- ã(other._year,  Umonth ?day@ 3 7hou@ ° O … D ² )ß ÷if myoff is None or ot :+  êif allow_mixed    ùreturn 2 # arbitrary non-zero valueP OelseF  ðaise TypeError("cannot compare naive and aw ¦datetimes"Ù Ð# XXX What fo³ Às could be dé õmore efficiently...› adiff =" -… Þ õ # this will take offsets into accountF 0if I š.days < 0é +%-10   4 Ý 1�!0
  Àdef __add__(‚@)T t"Add a B Ña timedelta."H  Ç 0if N¢isinstance§,- W  1 ™ åNotImplementedO _ & => ¡ ¿.toordinal(!   Û s=Ó  ._ É ª.  0 	0  0 	#5  \ò "+=	¿ á rem = divmod(* .z vs, 3600G Á   5 grem, 6) rif 0 < M NÖ= _MAXORDINAL®AtypeŠ ).combine(T.fromšR ¤
 V   Q(ê 
À Y	=  y ]s? ctzinfo6 )Xr?ƒOverflowCòresult out of range")\1__rY$ =c t?subtÅSubtract two{ s,¹‹+ « kŠi©· n» `A + -4±! Ü#  n1Ó	! #2 " EsecsC _í+]}d * 60   ^! *-g  E g F Ñ G  H àbase = timedel°ta(days1 -  O2,
  1sec(   ( ùlf._microsecond - other )i Pif se3 ”tzinfo is/  :*  š µreturn base rmyoff =G ¦utcoffset(c "ot! ‡ " 3if F != . v 3 ¢is None or;  Â   C ñ$aise TypeError("cannot mix naive and timezone-aware "È ý # +m -¹ 
Ðdef __hash__(V)… h  ¦code == -1!  _% Jfold   te€replace(' &=0¡  % Oelse; §  '   "tz˜/t.” " 2if % eY  æ .ó Ô  ß ÿ(t._getstate()[0]£  ± = _ymd2ord@b.year,ZSmonth :dayS  ­ ïs%Óhour * 3600 +C •inute * 6 5 	L   Ì 	× cimedel¶ Œ  as	 7lf.t2) -9¦ =
07ò# Pickle support. NG 9 Ç, protocol=3[óyhi, ylo = divmo<_=6256† Œus2, us3+ ¼ +, 2 12 22 D 	$ mt_¥NÏ_©aÀ J > 3M…m += 128=  dB¤ = bytes([é 3, mtO_day5 ø_2 m  C 
"us 3ËÞ )x1(Î ,�«%. Á c )$_saƒstring, * ]ÄÛ ó �  ²isinstance(: 2, _	 g_classg rG3bads  ­7arg3(³× ˜ò ¡ †)qñ =  f > 127û  ²  .�5= 1/  ³i = m -€ž	K 0K 	 3  ‰ð = yhi * 256 + ylo
    ÷self._microsecond = (((us1 << 8) | us2) !3
9 2   < ’tzinfo = 	 
 ðdef __reduce_ex__(- Á, protocol):'  J qreturn ! ³.__class__,^ •getstate(: )b  _ U  u .ˆ ô2)


datetime.min =  @(1,  )! (ax! ò9999, 12, 31, 23, 59   '99: �resolutiob  m gdelta(k1s=1�  ,óisoweek1monday(yearÏ ñ# Helper to calculate the day number of M>   starting S ! 1kñ# XXX This could be done more efficiently. ²THURSDAY = ðPfirstq ¡= _ymd2ord¥ 1 Ê$  s ( (   ñ + 6) % 7  # See—  æ q) abover  8 þ 5 = ; -   "daœ )if 4 > ® U 0 N A+= 7c j 1


p¢ timezone(Å{ò__slots__ = '_offset', '_name'ˆ Ò Àntinel value§Âdisallow NonÞ p_Omitte^�object()“ (²new__(cls, e  , b =6 �  dôif not isinstance(2  Ã c.  2 òraise TypeError("1 P mustaý : "•  6  h @ame /4ls.Š b% #ot´ 
   pqcls.utcð      ß & =    elu 
Ý  ( D, st (   Õ  ) Ó kstringÐ 0ot Œ C_min#<=½ 3 <= "ax 
Ï p VáF) "ë  ¯ 	 "� åctly between -¼ï(hours=24) andJ 8  .õ �@_creGÝ `J@amethodº •0 • Ôc cý5.__ÌL # .? rj   À=÷ ¿  ! l™ Ã_getinitargsX� ö"""pickle support""�#ifVn !is€é	Ž.Ë “ ­ U S© #eq  h, otheÄ)ifÃ  ,ˆ …Ï  !t  F=S  4åNotImplemented>À __hash__(seclf):
  ñreturn hash(self._offset)
# Ádef __repr__  ; ð"""Convert to formal string,  7 2().J  p ñ>>> tz = timezone.utch  3 5tz) P'date/ . 4 '  S (( ödelta(hours=-5), 'EST'V  6 k "k ( U •-1, 68400V "� &"" 0if P1 is  ê v ï zá H `._nameN ONoneJ á"%s.%s(%r)" % ®õ.__class__.__module__,°  ‡   » 	= @qual‚ ? Jc ò ¨ /, ¬ },¬l	/st Ð , tz(�9 2utcŽG, dt@ôif isinstance(dt, o) or dtî
v ­Ñöraise TypeError("� õ) argument must be aq  ‡ Àµ "”  ß "à ö  Œ Ý 3î ‘ z­S_fromlÈ 0  8 :Û 7B1dst¥ 43Õ  œÏ  s Ì B y?utcÐ 
ÁÀif dt.tzinfoõ1not‰
&  ÅáDValuâ€ :B Å C  D"is f "  OAdt +… J\ƒ (`>B_max@4ƒØò24, microseconds=-1É E_min6 -D Àfset

    @sñtaticmethod
    def _name_from_offset(delta):"  & qif not     Èreturn 'UTC'/ + q < time '(0P  : –sign = '-8   - A = -	 S Jelsez @ +@ òhours, rest = divmodÌ ,‰ & E=1))] mminute:  H 9 ' 	; ‘seconds =v . Z 3cro $ &mi ) 8if  
ë e (fg{ù !}{Æ s:02d}:{™  o   \ If'.{n V06d}'4if E ¡  < ˆ ‡ )C 0'

>¡zone.utc =Ä €_create(  (ð(0))
# bpo-37642: These attribÝð are rounded to the neaä @ñ for backwards
# compatibility, even though> ð0constructor will accept a wider range of
# values. This may cha iQ –e future.ï  mi Þ 	ï - ð ÿC=23,½ gs=59))B /ax1A `_EPOCH>0ateo �(1970, 1 ptzinfo= ™ Áutc)

# Somež  ó algebra.  For a dL � x, let
#M0 x.å ñx stripped of itsH G !-- Bnaiv^ .: Po = x±ð), and assuming that doesn't rai@n ex¡cion orK Š  –CNone 1x.dc Odst(] @ 1°x's standarü  yð, x.o - x.d
#
# Now s\°derived rul¨ where k is^@uratÕ !).? !1.P  +2s +V  ñ ‡€follows øÐadefiniJ bof x.sE q2. If x`@y haŒPhe saóp member½  Ø y: h  ¤ ðctually a requirement³²pu w‘�“make abou,Rsane }s classe� 3T"e #1UTC=± correspond0o x* p [oG ž Jgain› -a w �4. (x+k).î  x.+"  Ü	U #2ã d�.=0tz+ Ë£ preservesâ e 5e %b.n + kœA° 	j àhow arithmeticí Í!edL À Now we can ñexplain tz.fromutc(x).  Let's assume i ðn interesting case
# (mean óbthat the various tzinfo methods exist, and don't blow up or return
# None when called).
#
# The function wants to6 ð a datetime y with  ñ!zone tz, equivalent to x.
# x is already in UTC.h  By #3, we e  ð    y.n - y.o = x.n  1[1]8 ñThe algorithm starts by attach1z‘ n ñ   H`y.  So« A.n =� ^J  . An it© 0add@urat&k] ay, so š˜ à becomes true;û eeffectó  5 ñsolve [2] for k:Ï �   (y+k)

 
"[2 Rp1, thisu  same asW  X 3s +l ,d)q&[3W #5,' " + k, whichõ1als­0+ k÷ @ause =Í	L±
# SubstituÙ/”into [3],§  ø K -u $s 
 d¥ ;ý ' ðterms cancel, leaving
#3k6 
@ ô 0; rearranging,- =m ;E$#4ü 0s =sé6 'y._ Â !OnŸ 4RHS: d¢  ‡ð
e computed directly, but F bcan be¢wð°approximateYry ignor¹e¯  d ò at first.  Noteˆkw ð
# very large, sinc3’l offset- Z C æ°of magnitud� @lessg ðn 24 hours.  For tb�son, if y�Qfirml1std5°must
# be 0[æ ðit has no conseque· BthenCaIn any ÷Õe new value iô  zÕ! +c  	"[4ôI…qhelpful¨€tep backi1loo @[4] Èò a higher level: ÄÐsimply
# mapp[, 0UTCQ @tz'sªBndarÓ AØ€is point?R ³ zz5Ç  we have an¦›#imf ar@most(eëò  insecurity herL ø Q ]Á of daylightÌñ.  Picture US EasternÓ°concretenes  ªawall
#8 b jumpsE@1:59C3:002allZ q  ~ �form 2:MM¯ ð't make good
# sensø#enÇ 0docUk‘%an˜ -QclassZ²ider such a— t±be EDT (becÑ™¤"after 2")ÿ ßð redundant spellîðof 1:MM EST
# on thð e day DST starts.  We want to return the 1:MM E( ñ	pelling because that's
#' donly s#   â makes sense oM ñ6local wall clock.
#
# In fact, if [5] holds at this point, we do havep Õstandard-timey `,
# bu9  > € âa bit of proofç Pfirst ðve a stronger result# Ú  h ò
# difference betweeË °LHS and RHS^ ‘[5]?  LetÒ 1   8 ± = x.n - (z @z.o)  1[6]8 QNow
#  0 =
  cby [4]) Ì(y + y.s).n 1 Sby #5( 2y.n) & @  siÞ  " ° 2  º [ 2 zfy are šðame tzinfo member–Æ   y.s = z.s ¹ 2‡ 1z.s"PPlugg†còback into [6] give&  \  ¸' =E B- ((Ô qz.s) - Ž4™expanding0  .  ' 0s +- Bcanc1 '  ˆ  Ò 1z.dÌ $So%3z.dÄis true now,$ ñ0, so z.d = 0 too,~w{%
# = ÛBed i¾ðendcase described aboveü0e'rkn  ContrarilyÄ$if ,nW ÷àa UTC equivale®  œalso doneß >notã  Ý B!= 0Ú    	�he offsetp Àneed to
# ad	 ° z (in effeBAz isä 0z'sÚ$ $T 3we B P shif*Be
# ˜“Ot@ �daylight@ )Â â z'¯ •2z +¬ò
 "[7â ñ	we can again ask whether 7 "z'.3'.oB   "[8Y PIf so'¿aIf not­’Rclass%°sane, accorú ø thðassumptions we've madT�ÓríMres _ÒAs before, le `comput1e!N@8] (+Pskippï0somn’justifica¥ 0for‘` kindsŽ‚substitu Ä  †� severalÒ »•already):| 7 Øü(‹) €  replac› # Avia ä	¦ E þ@- z'xE  w  E  E B+O Q Š<  |  –   à+ z.n - z.o + ðz'.o =    cancel x.n
#  q- z.n +   o 7 ' A zA 5 ? Œ#1 twice| @z.s u du s d³ = û
z and z' have same tzinfoL Bz'.dL p
#
# So4 ñis UTC-equivalent to x iff 0 ð'= z.d at this point.  If they are equal,
# we've found X !so/ @doneB ð	n fact, we stop with [7]Í ð
# return z', not botheringŸ qcompute¡ .Ì ’How could®  d differ? è 0= z; .dd ð , so merely movW ðz' by
# a dst() offset,Ž ` start% ñ*from* a time already in DST (we knowƒ Q!= 0)– š‘to changecresultn î 2s: 3artV � ¤ ž  little furð	 into it takes us out of‘ ñ
There isn't a sane case w tÕð	can happen.  The closestX Ágets is at
#· 3end` ,D `ere's F 0our¹ 2UTCÐ€no spell=°in a hybridL ¢b classðUS Eastern, that's 5:MMG@ = 0 qEST = 1 pDT.  Du O Àhat hour, on‹ K  Ì "ck3 !is'sn as be“ ‚standardÓp(6:MM
#t ‚) becaus®°docs insista    R, but˜ Z qdayligh9 / (4¸ BUTC)g—’ no local€ @mapp™ %toü - % #
#Ð `jumps Ž  1:59 back¢1:00 again9qrepeatsº7 #  iâ	ù p.  Sincì ywO2thew u a*does*²"wa)1map›3�¶ “ M– $MMÜÏ þ Z mbiguous
#;`sß�goes -- i ˜ 1wayÕ / ²clock worksö…When x =F Ä 8 Ainpuãúñ	algorithm, x.o=0, y.o=-5öPy.d=0ÃPso z=€ . ÜÐ=60 (minutes)… nO@[5] ! iAholdD  Êeep going.
#ŠË3the¯ r †  =  ®p = -60 S ¸ð[8]
# (correctly) concludeè atd !is6Ú  BÛ   ³�said z waé ¾˜`(else ã wÐ"heæ û   Ð!pe"n)‰i !!=º U (8]<  U  é nd8O   üeOóonly 2 possible valuesW caê] ]À, it followsñ( that z'.d must be 0 (which it is in the example,
# but ùreasoning doesn't depend o3 0 --K  s ñ%re being
# two possible dst() outcomes, one zero andu  other non- õ).  Therefore
# z'Ç ñin standard time,C !isF Pspellº rwe wantæ ñis case.
#
# Note aga $ ð
not UTC-equivalent as far  (ðhybrid tzinfo class is
# concerned (becausePtakes· "as Š 	¸ 1 raó 1thaW±
# daylightØ p we intx 	!), Qreturœrit giveø ðreal-life "local˜ ðlock repeats an hour" behavior when mapp/ â 1"un?Pable"2  „ oÎz?W7  / AinpuIÁ6:MM, z=1:MMŒRz.d=0—°we stop at ',y@withT 1he 6 
†  – wÅy �So how c.ñis break?  One ofþµassumptions/€violatedQwÉ “�ilities:ð1) [2] effectively sayZPat y.ép invariSñ	across all y belong to a�bn
#   Á@zonew hnHð true if, for po„ Bcal q@s orNàtinental drift™ð   a region decidöpo changnPs bas�fset from¿7"2)I0 ma® Q vers!qof "dou�x"¸ wpQPtail ‚#ofØ ±he analysisð ðs up a step too early.  I have<@thouÔ1abo`"atK  en  :2say¬ aIn any¬Â, it's clearÌ tbdefaulã Putc()»0strƒP Phandl6p"almost«Û  “qs:  so ¸aå ¤Q!ofC ±ð Š  œ›matter if®`transi|t pointsŸ�yÇ  o  n, or
#B ¡is skipped,1ome/  s;PŠ  
RlargeL  smŽd è@get dáin its bounds;�%itÖ!evÐ 0som50per$e 1 u€s a nega"Ð ¦SúŒ ² g{ó
# pretty bizarrªaD2subG Ó�override¾Ûfù  is.

try:
XMP_dateûñ import *
except I RError0 ’pass
else p# Clean´Áunused names[ ðdel (_DAYNAMES,  äS_BEFORE_MONTH &IN PI100Y  I4	 J  © P _DI4 @EPOC: ÂMAXORDINAL, ? h Ðbuild_struct_× ,F Qcheckñ ¢_fields, _ 2int  Àtime_fields,$
  õ_check_tzinfo_arg,  Ename  utc_offset "mp gerror,O ûdate_class, _days_before_month Dyear #in# M ‘format_tiˆ  … `is_lea‰ øisoweek1monday, _math– ”ord2ymd, L  S § ý ¶ �wrap_strf% ¨, _ymd2ordP ð divide_and_rounY “parse_iso§  	<, _ T ã   ñhh_mm_ss_ff, _IsoCalendarDate)/ ò,# XXX Since import * above excludes names that start with _º à# docstring do. óot get overwritten. In the future, it may be„ ÷appropriate to maintain a single module levelq 3andB 0rem´ e Pollow� Qline.! @from9 te*ê Ø__doc__

try:( decimal' * B  ød 
< ¿__version__F 	‡libmpdec. �except I•E£ :pydi ¥  § #  © '  «  R"""
M¢ðdifflib -- helpers for comput”ðdeltas between objects.

Function=`_closep`ches(w(ò possibilities, n=3, cutoff=0.6)ðUse SequenceMatcherRáreturn list ofŒñbest "good enough" m1 	� €context_Ø S(a, bh qFor twoR sS 3s, k !a ê C in D  D  8matð n \ R­ B :®  $  erÖ ;Ð`a` and `b` (Ú ˆ )b �restore(’ s, whichÈ l 0oneÅ  ? Ö sBöÑgenerated an ¯ Ý d unified)*D )C÷Õî±A flexible g ^la�BpairÐ âof any type.

[ bDifferR  Ø`produc­°human-readad @!s é#0of ii  ,X @Html\ Z ÂHTML side by  #barison`ð change highligh$ hú
__all__ = ['get+A', '¡ 	 ÷  '¼ ¶@   '¥ ðer','IS_CHARACTER_JUNK< uIS_LINE Ïêà',
           ð'unified_diff', ' `_bytes SHtmlD ôMatch']

from heapq import nlargest as _ ( µcollections. ’amedtuple0  2 Etype, áGenericAlias

ƒ U = _n4 !('  ­ ða b size')

def _calculate_ratio(mÂ óes, length):
    if    Óreturn 2.0 * 6 # /' 5 " ñ1.0

class Sequence� Aer:
( 1"""  ò  is a flexible B ó	for comparing pairs of sY   L @any %�, so longG5the* ò elements are hashable.  The basicH ð lgorithm predat2andœ ô
little fancier than, an a5 C Ðpublished in ƒ  nð 1980's by Ratcliff X ÑObershelp undT eE °hyperbolic Ø  "K²alt pattern‚Hing"Ã P idea¬ qto findK ƒ  onA µ contiguousA D subO Ó t% Òains no "junk¯Að(R-O doesn't address ( )Œ Fsame‹ ¢hen applie� árecursively to"PpieceÌ Ž s Aleft./ QrightÜ !of2 � !Ì Œ !is© ò not yield minimal ediC n R, but/ @tend} 3 #a"look ‚ "# rpeople.ÚÒAtrieÆ  Ãðute a "human-friendly \Ñ" between twoØ • ñ.  Unlike e.g. UNIX(tm)7 ,ü PfundaÚ alç 1ionhH  …*ú1* &®_-free;‚at's wha&cï qs' eyes( ‘e Windows˜ 0winÒ  añ another interestingÝ  noû,Î µ&up�@that.�ear uniqu&uin eachÌ.G @ThatdÄmethod here,A $toõ0ore‡ auitive= er™I  re±sàn  Ã Ý 3is Y aappearÍ!ber Àleast vulnerLL ƒto synchØ �on blockÜLp lines"¼aough (ÝRblank 1 inJ ðordinary text fil‹åor maybe "<P>"1 R HTML$ „ at( " b`becaus¶ #isT onlyÜ F3t» 1�cept* of� ¾ ƒ" <wink>ð‡Example,£`two st®s�pconside  ç DQ |>>> s =2ñ(lambda x: x == " ",Ž 0...• ò"private Thread current ;= À     "privatò
e volatile Thread current Á;")
    >>>
	 ð2.ratio() returns a float in [0, 1], measuring the "similarity" of J Ðsequences.  AH Qrule ! uumb, a l àvalue over 0.6` .nsH ò are close matches:´ ô>>> print(round(sY B, 3)à Q0.866— ê ð
If you're only interestedë Pwhereƒ  Ç u ,E Q.get_… ÷ing_blocks() is handy˜ Afor    V s8 :T  ..ŠÊ Á"a[%d] and b
 n  O â%d elements" %^ æ 4a[03 "0]° 2 81 j 4a[8' (17( ,21) $29* (38* 0) S 0Not/!at4£last tupleGoed by þ  6�always aL ðdummy, (len(a),  qb), 0),@this5  }»@case_Uwhich� L … /€ (number… s&!ed½"0.Qð want to know how Pchangë ue first  Ao} bsecond)2use÷ ›opcodes()  ¾  (  .@%6s :  	  7 ñ  equal a[0:8] b ¢insert a[8 Q8:17] 3  8:ò‚b[17:38]"Seð ÁDiffer classWð	a fancy human-friendly fmd-   1r, ™i cuses SMÆar both\0ompäsƒof linesù2o c# L 	' ócharacters within —q (near-?Bing)Q é Û àalso function Ùdß ² �tcmoduleÏ ` shows�  imï å` build-onì °can be usedó  do ƒful work– ðTiming:  Basic R-Oï cubic time, 1st ÷ !@quad· �expected˜  % -. ‡ ;is 6  Z R woÖ 7 m1hasH U - ñbehavior dependen aŸ@licaF`way on!R manyF ¸(!A havÁ¤common; beß ï !isµ#ar dMethodþó__init__(isjunk=None, a='', b=''ì   Construct aZ Öset_seqs(a, b9 "SeØ5twoðs¿!beó JaredB >1(a? 1 to
Ò@ /2(  Y‚ � ð find_longest_maòtch(alo=0, ahi=None, b b 3)
  ðFind longest matching/ ñck in a[alo:ahi] and b[blo:bhi].
C Dget_6 †_blocks(] ðReturn list of triples describi < × subsequences\ oopcodeT L5-tuU qhow to | ƒa into bT ^ratio¢ ‘a measure§ 5he Œ ð' similarity (floatc[0,1])U oquick_[ ón upper bound on .* Á relatively C #lyQ Qreal_ V U 7verO  æ2"""­ó
def __init__(self, isjunk%qa='', b Aauto aTrue):íM ÓConstruct a S´M:#erÀ  ) ÃOptional argg @ is �õ (the default), or a one-argumentn @funcG Õ that takes a�@ ele/ ›rlås true iff theH ) 0is Õ ". ˆ Ðis equivalent3@pass—õ"lambda x: 0", i.e.L $nox ðs are consideredB $beb ÐFor example, Y B  a xPe" \\t"" qif you'^ @mpar” 0linþ sÿ s­±characters,Fdon'@"waØ €synch up`blanksu„hard tabq ˜ 	·a² ¬3firÃ'wo€  Y  £ ued.  ByÃ ß – � empty stÈ f.  TheCöof a must be hashable.  Se¿ñalso .set_seqs()ê  $1(ˆÀ bÀ @seco}?f tÁ AbÁ  À 2À …p should"!se©PFalsep0dis1	î"8 QmaticŒ³ heuristic"HÖreats popular‹aÃñ (see module doc› @ðn for more infork 6on)#r ’–# MembersE5# ae #$ "  bw b + Ì+ �; differ:‘Àmputed as "w9,doE Rwe ne² doH0'a' €change iåvto 'b'?–\# b2jJ  Ã b, 0[x]uaõh&rdices (Œ!ý òat which x appears;º t§cdo not* � À   # fullbcoSunt
  # ü#for x in b, fullbcount[x] == the number of times xB qappearsD ü; only materialized if really needed (usedF 8  � ÷	computing quick_ratio())1 ÷ matching_blocks Ô `a list² ñ(i, j, k) triples, where a[i:i+kå �b[j:j+k];H PscendŠ à& non-overlapp €in i andö ýj; terminated byH ð dummy (len(a),  ÷ b), 0) sentinel4 oopcodeÖ 	øtag, i1, i2, j1, j2) tuá ]tag iD gone ofl 0  °'replace'  ó1:i2] should be   Þ Ÿ b[j1:j2]G QdeletF G  ü� `insert€ b �  7; Qequal: u %==G © gisjunk  @ ð a user-supplied function takíða sequence elementûF `return0 �true iff@2 @is "} Í" -- this ha¡ðsubtle but helpful effects � Àhe algorithmËxich I'l>Ñ ñget around to wriPüup someday <0.9 wink>.Ç ÐDON'T USE!  OÍ�__chain_b&s» ñ.  Use "in self.bÙ K  [  OBitem, î whÄ —‰ is TrueH |popularK 0nont  O 1tre�1as  !by€Ðheuristic (ifÃ Ed).
O ¿  "= 	 
 3a =å { = None 1utoo 3= a 
! âset_seqs(a, b)z Edef   ƒ !,  :; a"""SetÁ 5two€sÐ0be %GaredÊ “>>> s = S«M%6er(9" .x ì"abcd", "bcde"' w‘ E0.75 2"""É  n À V 61(aI  /2(ü   1(# O, a)ù Ufirstû ú ¯The second-  ZŸnot chang6 é/, #(	m/1(e51.0d6>>>dÕ @utesˆà caches detailqPnform7ðn about the
    õ#    second sequence, so if you want to compare one( ° S against
F   Emany  õs, use .set_seq2(S) once and call E1(x)D örepeatedly for each of the other` %.
5 “See also m 1s()g  E2()., 6"""9 õ if a is self.a:%  Î ereturn # J = a òmatching_blocks =M `opcode BNoner 4def¢  2(P F, b)u a"""Setë ” „$be‡dú •The first,  Þ ¨not change; @>>>   SùMÉ 0er(° ö, "abcd", "bcde" 6 v.ratio( E0.75# |J ,  B 81.0A 1 ‡Ÿ Autesáðcaches detailed inform� an abouNX VêÀ1ê	b w&.bu cêWb = b:?lf.ê Q   i Ðfullbcount = Y
R ²__chain_b()ñ4# Fõð element x in b,9p b2j[x]âda list’indices i¯ñ# b where x appears;W(  Ìòin increasing order; note thaÔ#5 anumberk FimesT ™  TBlen(› B) ..k#‚ n`isjunk* ‘defined,  ã ñs don't show up in this+ñ
# map at all, which stops› ñcentral find_longest_§s methodD  from startì  ¦%   ¶a 	” È 2b2j]@does"� contain ~ 1ies©¤"popular" Ö “, meaning…  `2 ac å1morv�n 1 + 1%l‡he totalP $anÑ 0whe%Ž0is Ìõonably large (>= 200B )Uis ca( e viewed aQ� adaptiveç 0ion‰ Psemi-¯,rQyield, tenormou¨qspeedup÷q, e.g.,¬ argóprogram files with hundreds of" M anÉBof "–w NULL;"�¤& VAonlyS!ed 2 b ï s;Í cðcross-product
    # kinô%ds of matches, it's best to call set_seq2 once, then ñ1
    # repeatedly
 ñdef __chain_b(self): / ð0Because isjunk is a user-defined (not C) function, and we test
E   a# for C Sa LOT½ �importanÂ €minimize· p numberï  Ù )s.“ 2for& ötricks described here,Ð ± was by farV )mo” ñ
time-consuming routine in- ÷whole module!  If anyone sees� °Jim Roskindsàank him again ÷ ÷profile.py -- I never wouldG øhave guessed thatô pThe firë ó  ˆðto build b2j ignorÄ ÷ the possibility` !of€€.  I.e.,£Rdon't:à0at Hèyet.  ThrowingE !utÊPlater‹ °much cheapeh"anš  �  � w"right"G AfromH Gstaré @b = ƒ%.b-  A2j =é B= {}¹ W ^`i, eltµ·enumerate(bÄ ( rindicesD õ.setdefault(elt, [])o . ¦.append(i)q q# PurgeJ† element¬ =#  Ï &t(_ g  2lf. | #ifg� �  å â ›b2j.keys(à  ' >  Õ     $  › A.add# x   e  % €: # sepaNÇ loop avoids 0istŸ � 	J  N 0del®^[elt]=upopular@îP are L  Q R1 &= 
 (seX—n = len(bkfK@autoT ˜Šn >= 200bn¬â = n // 100 + / Ì   `, idxsk ‰OitemŠ Œ  , A) > ^ 
q  T   Ï “(  –áditto; as fast`p1% dele~9 ^   Š ñÑfind_longest_Púò, alo=0, ahi=None, b b Xƒ"""Find G —ó@lock%¡a[alo:ahi]|¶b[blo:bhi].3By Œ� it will � 	Z  Q  Ý€entirety|aX O IC — N§:r ðReturn (i,j,k) s¼ o� a[i:i+k]; PequalW°b[j:j+k], w\	`�alo <= i  +k 9ahi# b# j j# b#  + \ tð (i',j',k') meetJðthose conditions7,
  yk >= k' ji <= i  and if i = 0, j$ 5j'
9 ðIn other words, of all maxima õtching blocks, return one thatH ðstarts earliest in a,  R _thoseX L  K y 5the}  u  &b.Ü ð>>> s = SequenceMatcher(None, " abcd", "  )Ð < ð .find_longest_m? ¶(0, 5, 0, 9- Y ö(a=0, b=4, size=5)Š ðIf isjunk is defined, first Ò c  c o5 is� `determ8 ñ as above, but withD ðadditional restric Z5 noI † ð element appears® ‡ år.  Then9   µ ¦extended a” 0far� ¶possible byÁ x(only) n ös on both sides.  S—   fresultÿ RneverS e= N Pxcepty ‘identicalg â hÖ àns to be adjacì °to an "inte Bing"\ 2aHere'sOÀsame examplem Sbefort0conÃ r« 3ankm ƒ  © H´at preventsqR fromz  @  ù ‹" aEtailK 0end• ' ƒsecond sÏð directly.  Instead v¿ ÕU" canJ ]” eé ‚leftmost"m :ÍW ð lambda x: x==" ZVc91c0c4c#no§^­P(alo, G, 0)îÉ   abÃ &c"è1 21- 	² 0  6"""TÀ# CAUTION:  ¼ pp`commonB fix or suf
 PwouldÝPincor.æf# E.g..#6'ab  Y   ac Lâ7 y ÷" h:if � �#´  Õâit's "a" (tiedŸö"b").  UNIX(tm) diff does sE ð, so ends up claim‘  l0 abŠpchangedß Ç 7 byÜ QinserC5"caÌcmiddle‘a's minÞ Ø Çunintuitive:I "È ‚obvious"@someùe ted "ac"µXfront‡1Winè Ì ÝXAplacV " Èaby paiS#up‰ À  # the uniqð
ue 'b's and then matching ó first two 'a's.

  òa, b, b2j, isbjunk = self.a, b  $  ' Õ.__contains__O õ if ahi is None:  n   …= len(a) Oif b1   1 b1 pbesti,  j Ðsize = alo, b 0^ ð # find longest ß R-free' 0dur+ñ an iteration of;ñ loop, j2len[j] ‘ 0gth X H b @ endX ±with a[i-1]¡Eb[j]6 [ U = {} 1not»6= [( ñ for i in range(ð Jahi)fð# look at all instances¯ @a[i]@ õb; note that because{  ª#q has no5e keys, à€skipped òX s* 	H Ú Rget =@I.get! 1new$ 
þ  ƒ  í j­  2j7 (½ ,¸  ô  1 #`]Ù9es b     `if j <%
4     Ñ:inu  9  >=«: YbreakÛ  7  Lã <î ý get(j-1, 0) + 17 aif k >ã Ür ‚i-k+1, j 
•  4 = • b# Exte<z € by non-Òð elements on eachØõ.  In particular,È `# "pop "C  caren'tÛ÷, which greatly speedsJ �the inner×°p above, buß so means "&  " w so farG @doesv  âqain any¯c *or* ® ­ .C `while d 0i >lÈ@estj«!lo \0  ÿ ¯W0(b[> _j-1]), a  #6== . 
ÿ D ÿ  U 	 j	  @+bÆ +(   ! <³ 8  j  ‚  Ø 7 ß '  æ  í £ H+= 1¬2Now¾ðwe have a wholly inter#ngõ(albeit possibly£À# empty!), wñy as well suck upðG	 D @side]°it too.  Cai Àk Ña good reason1to,ip# saves¤ �t-process8 Ø(¹ @ conn ðrable) expense of
    ð2    # figuring out what to do with it.  In the case of an empty
 A D €interestG ñmatch, this is clearlyB Pright "nge ,D ðbecause no other kindp Q  K ¢possible i‘ …regions.E pwhile b‰ ¡ > alo and Sj > b \0 À  isbjunk(b[: Qj-1])8 ( a  †i-1] == . :P  D "i,u  asize = 2i-1 j	   %+1B Â +J   a < ahi“   j b ¬ Ô 3 Û ' â  é Ÿ Û  E+ 1
Ì €return M(º ). �def get_êöing_blocks(self)v B"""RT @listõ triples describ 	 Òsubsequences.h  ðREach 8  T!ofšñ form (i, j, n),m¥means thatÓ sa[i:i+nÃj:j+n].  TheS ðs are monotonically increas” %inK Ñ in j.  NewÕñPython 2.5, it's also guaranteed� 5 ifE ² ± Á(i', j', n')ˆ …adjacent� 9 ?ä I  à`second no¦Te las<  Ÿ  % ; õthen i+n != i' orI j  j'8MOW, „ Tnever²e  UequalH ¸ d	� ðs a dummy, (len(a),  Sb), 0ÃiÀee onlyZ üßGn==0d “>>> s = S8»ñer(None, "abxcd"	 Ecd")R  7  ?(s.Æ)* [R p(a=0, b  6C=2),&0a=3 =2,  5 4 50)]~ 6"""Þ0if 5.JÕ É P ¥5 b �la, lb =_* l bÆ O 3# Tø¡most natur°expressed a¹örecursive algorithm, bujp# at le�ñone user bumped into extrem ™ éµat exceeded¼ #ßo ¡on limit oAðir box.  So, now we maintain a ÓH �('queue`)yŸ 1 qstill nž‘o look at]× append partiÛ�# results`ª`iaH !p;»   eXIsortÜ  ­fhe end¦ € = [(0, »  b1À   matching_Óblocks = []
  Åwhile queue:   °alo, ahi, b
 Rbhi =( i.pop()- þi, j, k = x = self.find_longest_match(S 
F ù# a[alo:i] vs b[blo:j] unknownq  + Ði:i+k] same a0 Vj:j+kÛ  Æ ( T+k:ahU Pj+k:b W  if k:   # 
 ñ is 0, there was no Ê 0ing)ck”  p  _lš.append(xé  * àif alo < i andO J < j„ (   ŸL G˜/j)[ Pi+k <¿] j ?bhi_ 3i+kùj
 7bhic à usort()
ð# It's possible that we have adjacent equaló  � inbB d ð list now.  Start~€with 2.5žbis cod¢WaddedL  to collapsŒ 5em. `i1 = j k 0 Enon_ª 	,õfor i2, j2, k2 inï
_’# Is thisê ÿ åto i1, j1, k1?y  ê€if i1 + ” B= i2¿ *j2d  4 ‹# Yes, së 2 --~ Ðjust increase’ ¹e length of} M “the first·  by 3  qsecond,Ÿ 1 M   › r ²ened remain‰   ¦€mpare ag t¨ •   ‰k1 += k2e ;els· + U# Noto±.  Remember» Ü ù(k1==0 means it's^ L  ß PdummyÈs�0ed €)ÿ 1mak\ 6?theL  4new   ®ó  „1ð — n¥U² .     YÆ¥ m  e > + Ö (la, lb, 0) ¦ä=æ`(map(M, ._W(, X Õ breturniK Œ def get_op s(u )KB"""RC ]ðof 5-tuples describeqhow to k ’a into b.`  RQEach 6  )"of^‘orm (tag,ä/ ìe2).  T[7 >0has÷=‘=u ) Š / sF ¹=l pi2 from K * ð preceding it, and likeówise for j1 == the previous j2.

  ðThe tags are strings, with5 pse mean :4 ó'replace':  a[i1:i2] should be  Õd by b[j1:j2]p a'delet; <  %d.0 §  öNote that j1==j2 in this case3 p'insertž € Ÿ  Sed at‚ &1]= i  p _i1==ip Qequalo Q  2]uü Í ù>>> a = "qabxcd" b jabycdf ùs = SequenceMatcher(None, a, b)E  óòtag, i1, i2, j1, *õs.get_opcodes():8 0...ñ øprint(("%7s a[%d:%d] (%s) b <" %:  > I   (y ƒ ,Œ&))´  ñ  a[0:1] (qn g0:0] (%  b² a[1:3] (ab& 2 � y  a[3:4] (x' 23 yN €4:6] (cd' 23:5 N  )A a[6(  & 5
 fM 6"""ƒif self.d€ is not ¬n -ireturn- w •i = j = 0 	T Æ= answer = [V ÷Àai, bj, size7  óm4™ing_blockû � õ'# invariant:  we've pumped out correct diffs to changež C ða[:i] into b[:j], andBd next ƒ  ƒ = is? `ai:ai+¼ <Rbj:bj Ð.  So we needƒ  Ÿ B  « a¥  ! ¤  Ž&:a˜  R !],Ý  Û B  $
¨ Å ó move (i,j) beyo× * 	B ‰tag = '' ‘if i < aijj < bj @; À
B %elD 9 E8  q â
8  ifk w„.append(í , wjz&)  Õ !i,ÈÖ " Î	##{list of&s@‘terminateNa= ‚sentinel° =7„ fÎ 'b'Ï IjÒ ³ó@def `ugrouped[ yW, n=3d³""" IsolateA� clusters'1eliç Ping r_sÓ nos³R>°a generator=àgroups with upó
 to n lines of context.
  õ0Each group is in the same format as returned by get_opcodes().
H ó>>> from pprint import 	& ùa = list(map(str, range(1,40))), Šb = a[:] Ñ[8:8] = ['i']È û# Make an insertion3 ¡20] += 'x'1 $  3 Ì replacement4 23:2i f 4 Odelee  3e ye onotherk 4(ðSequenceMatcher(None,a,b).{ª&edƒ1ò[[('equal', 5, 8 R), ('' 8 9 / õ 8, 11, 9, 12)], S P16, 1" g7, 20)% 3 ('E'#  20# K, 21' p ! 2! K, 23% ]Pe', 2"  n 3&  K @7, 3p  % 6½ ‘31, 34, 2. q ½  # "35Q 3½ ! 28, T &)]žE"""
<$q = self¼7# qif not * :  ¡  ã!("é r", 0, 1 )r ð
# Fixup leading and trail -@s ifÕÀy show no chpsiÓdes[0][0] == H
” òtag, i1, i2, j1, j2 =½ &[0“ ¿ L  6 Bmax(: 2-n)A   E  %j2 � /-1� &/-1‘  -17’  Ž @min(Ì 0i1+–  Ž   jß 6+n)Ì–nn = n + W] ¢i 2forï  ]  Y  R  j2VÐ
O0# E­£he current‡ Ãõ	start a new one whenever$ e#× re¸ra largeJ_ withé 6  'agå4ªi2-i1 > nn¥  2 ê Ÿ.append((>š F   Ryieldç 	Ê   f 
P     OPj1 = 4  !i24  c&-n8 2 M ³ ”G ,j2� "if’  �Q(len(B A)==1  ),Þ ß  def ratio(. A"""RT  a measure�{ÿðs' similarity (floatIX[0,1]ypWhere T @ ðtotal number of óelements in both sequences, and
  ð	M is the number of match( @this ¥2.0*M / T.7 ¤Note that % A1 ifI i á are identicalw U 0 ifE ðthey have nothing­ …common.
& €.ratio()Š ðexpensive to computex 1youI ´n't already ë Q.get_Ý ñing_blocks() or   opcodes(),‡ °which case ] 5may‘ @want€ ´try .quick_£  L Zreal_ Afirs3 eget anJ ·upper boundñ “>>> s = S²M�õr(None, "abcd", "bcde")L 6 , E0.75 # 	›  )  É . 51.0 6"""­_e¾ òsum(triple[-1] for   ^Aselfu0 �Ñ óreturn _calculatef3  ŸAlen(I Ua) +  2b))� Hdef í  , ():¸ Rc 7an ŠD on Ð¢relativelyJ 'ly¨T tâdefined beyond it²\ ¤Ž �is fasterZÚo	d`# view/aËô b as multisets, setÄ M  Ý¦cardinalitÇ#ìòtheir intersection;Ò0cou> = µ ð# without regardo �order, soþ Šclearly @ 0if •a.fullbr  5  è§ ¨% '= 2 E= {}R  .  k5elthbM # q h[elt] Q  ˜p(elt, 0X1\ 	t “ %  # avail[x]Ë 
?átimes x appear›q'b' lesƒD s4 °we've seen WPn 'a'cÕfar ... kinda@ ‚   Ehas,=© ö .__contains__, ×FaF"if@ 0has-X `   Ä  f f    JelseR   4 j�	@ Ñ W ! =¼6 - « L "if >> 0i E% =+? {2? 3(?"""€?verzÀnd that it iós an upper bound on .ratio(), and
  õis faster to compute than either7 ³ or .quick_I .E E"""
 öla, lb = len(self.a), %b)* ò
# can't have more matches� ÷the number of elements in theE @shorÁ vsequenc óreturn _calculateº Bmin(¦  ™ ra + lb)Á ñ__class_getitem__ =  ómethod(GenericAlias)


def get_close_¿ ñ(word, possibilities, n=3, cutoff=0.6):Ã ƒ"""Use S¼ M�¾ @list  ôbest "good enough"2.¿  y d is a ± for which ¤ 1 ñ
 are desired (typically a– sstring)V 	É _ – g “s againstl "toi  ’ S d  ? h si ðOptional arg n (default 3)v  wmaximum
Ö !tom <ó.  n must be > 0Ï 	f ‘k  š m pa floatn¨[0, 1].  PÑh pthat doÅ scÁ€at leastÂ�t similaÎ tsignoredŒ AThe Ö2(no|"n)?€es amongò
PL ç eÎAin aY0, sDd by‚ Aity ¡ V, mos™ Sfirst‹ ?>>>Ë ð"appel", ["ape",  l	 Ppeach rpuppy"]Ùñ['apple', 'ape']( \ ¢import key3s _ # JA"whe , 0.kw=l Hwhile B  A� %",n 
B   ;  oaccept< 0'ex  ä Òif not n >  0æ mùraise ValueError("�Â: %r" % (n,)Þ H c0.0 <=: 
 /1.V 
Òø`in [0.Ã5.0]e % j 0resg2= [<s =’(” ¡s.set_seq2å  cx*	)ú 5 21(x2  ©if s.real_V% >ì Qand \ 0 J   s�+ ¦% ‘  O ô .ßVnd((s#x)P# Mov¤B rs*@head– Œ¢ O ò = _nlargest(n,  ô r# Stripˆs˜ ÒþnïL ¸![x% v !, aP ]yð_keep_original_ws(s, tag_sñ
):
    """Replace whitesp øith the original ñcharacters in `s`"""L ñ return ''.join(  d ñc if tag_c == " " and c.isn r() else" 5 bfor c,  h Rzip(s !s)& ò)



class DifferÒ r�  b is a ' T ò
omparing sequences of lin	 Ptext,¡ d `produc. ñhuman-readable dr ? £r deltas. Š Q usesA Se  Matcher boZ1o c‡ e…  } % t# G 	¬ �ðwithin similar (near-ml Bing)Ö !.
C AEach  ï a© ¹ € begins N ò a two-letter code:@  Ê@'- '  .p uniqueª ž ! 1j  " /'+* 2*  * `commonT )Y LX ?. °not present#0eitcUinputY½ Lßç nÎê 'L pattempts Qguide÷!eyØ Pintraì ­ ó¤_were „ �.  TheseÌ Ðcan be confus’  #hÆcontain tab òÍ0Notª $atÈ€makes noê imÎ »Ñe a *minimal*¶ � oæ Õ  f crary, % $ ðs are often counter-intuitive, becau²‘hey synchL €up anywhñpossible, sometimes accidental £ es 100 pag Qpart.H €Restrict^ p pointsÖ  ° eiguousD Arvesk ¡ notion ofL Àlocality, atõ € occasioÔ@cost* n �a longerk¡Example: C³ ' @two (s# pFirst w¾At uph   ,‡e°individual ô0le-] î "ng0endb  0new  ws (suchK  =@alsoB ob&ped fromz ÷ `©=  ()` methodë !fiu ³ke objects)Þ1>>>Ó ð1 = '''  1. BeautifulDb’than ugly«ü...   2. Explicit+ "im / @3. S e-  8lex, !4.x?lex- ficated1 ’'''.splitü Òkeepends=True6 é @len( 1 43   q[0][-1] A'\n'	  2 !3%ó Ü ÷ 
$m5. Fla{;nesÀ'.splitlinesò*(keepends=True)

    Next we instantiate a Differ object:* s>>> d = (@ ×ote that whenG <ingI  h ñmay pass functions toŠ @filtt ðut line and charac Ã'junk'.  Seeƒ ò.__init__ for details.­ €Finally,s `compar¦ We twoÏ óresult = list(d.* €(text1,  #2)é '- a' is a1 ø of strings, so let's pretty-print i=cfrom p Tmport Bas _ 
 j (v )  ['²À1. Beautiful� 0bet!áthan ugly.\n',0 ü '-   2. Explicit/ "im 3 @3. S e1  !8lex0 �+   3.  2 ?Æ ; ++¨ ¯4. Complexv hicatedz H M 3  ^ 
 g---- ^i  ® i R m 
ã i O++++m i m5. Flav3nesÊ ]­ARÑsingle multi-\Ð it looks likÅ'isÂN„(''.join-‚, end=""6 40.- (*  t", k!++  � ­/ <  ï  .  – ] 
/ ] 
.  ] þúdMethodÑÐ(ÿ ða=None, Õ±Construct a«! d¶àencer, with opc2al ]s Çˆare(a, bP (pwo sequI så � €s; gener Bthe ˜ åadelta.÷ 2"""Ø Edef Î Qself,ÔÅ Ô :?  » C     á ' > !Thïðkeyword parameters  =”b G 0- `  » E`: A$ õÀshould accepˆÆ»ƒargument� O ×ðreturn true iff Q3 0is k  . ¿ Åmodule-levely +ð  `IS_LINE_JUNK` \¡be used toôÀer out linesõ without visible
  õ4characters, except for at most one splat ('#').  It is recommended
L ÷2 to leave linejunk None; the underlying SequenceMatcher class has˜ ñan adaptive notion of "noise"` ð s that's better Çn any staticL adefiniD  Š `authorp ð  ever been ableÀ ucraft.
> 0- `# Í “`: A funcJ Áat should ac9Pa strá ø of length 1. ThpÆmodule-levelM ð`IS_CHARACTER_JUNK` may be used™ 0filæ 5outœ Ð  whitespace ¦ Éð (a blank or tab; **note**: bad ideaR hinclud� 0newº� in this!ð0Usez¡ .– 6"""?Pself.T j=¹  . !  ¼   ! =Ç   C Àdef compare(* …, a, b):? rn �C* c two sds½  � ±s; generate�`result®WdeltaóEEach@ ð must contain individual singÉi"÷Ps endQ  n¢ TWs. SuX Ps canà obZ qed fromš Q`read³ –()` methoeQof fix Àke objects. e È å `d alsoº Asist‹ -œ £terminatedº0s, } ypbe prin ‘as-is via  Pwrite  %()J ¦  la  [rxample:Þ ¸2>>>g ô(''.join(Differ().ùð
'one\ntwo\nthree\n'.split„ …s(True),Š 0...X  	0'orQ K ?emuP )R fend=""ö - z E?  ^ F+ or[	 -¡) !- Õ  6?  ¡V+ treG U+ emu*  û AcrunM=_9„B8  íðtag, alo, ahi, b
 0bhiW ×.get_opcodes(€ göif tag == 'replace'¡ !   @g = Âƒ._fancy_* )(az } e > 'ele _deletd �dump('-'î Ú S oinsert· 
S _+', b¦ _equalR  ¥ .seLñ
raise ValueError('unknownˆð%r' % (tag,))

      àyield from g

 ñdef _dump(self, tag, x, lo, hi):%  ) õ+"""Generate comparison results for a same-tagged range."""C  $ Bi in (c  g ¢ ²'%s %s' % (‘ G[i])± Óplain_replaceº @a, aS �ahi, b, b bÄ `assert'   < ahi and( e < bhi¨  # À the shorter% ñck first -- reduces# ’burden on- W-termK ’memory if- õlocks are of very different sizes;  if•   -| ¯ -» “ 0“ 0 = ¿.Ê:'+'T  2 ksecond2 G-', A)2 Oelser @ r ¤ s  'g'Ü ", ± 
… 'É_fancyr¦0Whe× [ping one‚ ck±ðlines with anotherŸ GarchÞ	É ¡*similar* < ;( �est-matchb õpair (if any) is used as aJ Ásynch point,µPintraR ?pce markQ @is d·  onn E Š  p `. LotsÓ ò
work, but often worth it.o À†Example: @>>> CD¼(/  Z= d._’õ
['abcDefghiJkl\n'], 0, 1,¥ 0...s  A xdefGhijA 
‚ ãprint(''.join(� –), end="", (- � „ ?~ 0^    +, z  ,  O" #�2't Ä‚up unles< Â`s have= rity sco"'atH ðleast cutoff; best_ratio traV ±  ? µseen so farE   5 ,I € = 0.74, 5( ðcruncher = SequenceM°!ern–.charjunkLñeqi, eqj = None, Ð   # 1st indi1‚of equalöZA# seP  Ñ  ®a that 1!esù „aout beò…denticalÁ D# (i m 0mus0  ¸  c, & we uwant to¨K "on5 $--½"we¶&to ² j¸ú(€  Xb"Eb[j]`   pÆ.set_seq2(bjZ  "  ^ =ë¢ &   ðai = a[i]
           Òif ai == bj:
 
 ïif eqi is None$  2 ÿ eqi, eqj = i, jL �continue ýcruncher.set_seq1(ai)& ð# computing similarity› ÿexpensive, so use the quickF  ÿ$upper bounds first -- have seen this speed up messyF   Œ ÿares by a factor of 3.-  0not”  at ratio()¶ Uonly » 3 toà  * e™ K  ñtime it's called on a sequence pair;ÿ Z OpartJ  !of(  É  ut— n– `cachedÖ –; 4if  a.real_j_Û b> best m and \B  2 E @ -z «š ,¦ i  ¹Õ  :(),Ë"if3 n š < cutoffh ñ# no non-identical "pretty close"¡	bS O  áp either·°treat it asîtraight replacjóyield from self._plain_/ °(a, alo, ah0, b /bh� ireturnÉ © æ å ›, but an ¼ €-- synch]ona�£   EjŸt=ŒgU, 1.0~ ;els›#Û0re'“ �so forget  š (*nyz þ=ý
p B# a[§ d] very� Äb 0j];­  R 91 ifnvy're noò #… ` âpump out diffs±RbeforAFpoinJ ÛÅfancy_helperÚ· 4, bÝf)| ðdo intraline markqªeº „@aelt¦Flt =%, 	* ê	%# ó �a '-', '? + p?' quad»¸ÿ 0ed ¢ s_  U“atags = b )"" âi&s(¾ 
÷Àfor tag, ai1 `2, bj1 F2 in»Úget_opcodes() � `la, lbBi2 -M  bj 9bj1›  .  ift  �'’'S  ) ç ½+= '^' * laK  & & Àb
            ñelif tag == 'delete':
  ýatags += '-' * la& 	L oinsertL bL +L bL _equalK —  K —  È q & q /seù ñ
raise ValueError('unknown8Ù%r' % (tag,))Ç ñyield from self._qformat(aelt, b ¿ !,   ? ,el� ÿ# the synch pair is identicalw  p'  ' + k 
 ò# pump out diffs� Xafter_ Eoint4 Æ àfancy_helper(aÈ ãst_i+1, ahi, b j Bbhi) Ydef _;  ‡, a, alo<    7 Œeg = []‘  if2   <o %  åÊif blo < bhi    G  t .‡ preplaceÃ ‚ r  > ’  T ‰dump('-'Ò Ñ� E "+'F
A o Œg WX Þ  Oqine, bl 	`Er"""à F—@ "?"òput and deal with tabs.p  † †Example: ö >>> d = Differ(÷   ¶results = dò'\tabcDefghiJkl\n',  rdefGhij £ 0...{  `'  ^ ^   G    
Ž @for C in š Ð: print(repr( È5...„ ='- ¶  C? \t‹ 6\n' +5 ×  5 �Áð = _keep_original_ws(a¬ !, ! ‡).rstrip|S9 ! 9 — g@"- "B f   } ¼J w1 Qf"? {Ž F}\n" !"+O | O † O  O 0# W�ðrespect to junk, an earlier version of náò simply refused to
# *start* a matchãaM ã element.  The ð was cases like this:
#ø q beforeAòvate Thread current ;, g : m, volatil5 ðIf you consider whitespaceý !be³ ,¹plongest, rtiguousÝ q
# not ò ðing with junk isò "e Thread current ð".  So ndiff reported
# that4 ðvolatil" was inse  ò between the 't' and ñ%e' in "private".
# While an accurate view, to peoplel ô 's absurd.  The¥ ñ version
# looks for matching blocks@ ð	 are entirely junk-free,— €n extend* eJ ð
ngest one of those as far °possible bu$ vly withv  ]  Ù  7Jow "P2 is+ )ed}  edò psuck up– ’
# precedÊ @ank; >	K  cÇ J mfollowJ äI ;¬yfinally÷söô-e öcfore "V ª°only quibbl]`remainŠ ipÑat perhaps itE!re{  ;2casþ4 " u 1"
#' lWafterSÂ  I can liveš¬°<wink>.

imÅñ. re

def IS_LINE_JUNK(line, pat=re.compile(r"\s*(?:#\s*)?$").a±):
    r"""	 ±Return True†`ignora( V  : A` `oñblank or contains a single '#'.
S ’Examples: :>>>¯ Q'\n')*  v 	 $ o  #   * Uhello) QFalseT  â 	 rã 1pat*)É vnot NonN’CHARACTERSÏch, ws=" \t"3“character8!ch6pa space8?tab&
‡ /' *( /\t) |)}S xR ) R chows


# 4 I à  Unified Diff ] 29ò _format_range_ui Ã(start, stopî‘'Convert )  å Û@"ed"'Amat'\P# Perá kòspec at http://www.unix.org/( s  x_( ¡ification/J Qbeginb!= � @ + 1«0 # €s `numberŠÀ Ä & plength < Bop -- Y 4if  2= 1ÿ 2 R'{}'.(„ Ÿ0if (> 9 & 3 -=£  ¯Rempty0!s %   ¼ � just bei HUž † ,‰ ,¼ )¾ðunified_diff(a, õb, fromfile='', to  1dat ,
  -   ñ n=3, lineterm='\n'):5 Ar"""	 ñ	Compare two sequences of6 ñs; generate the delta as a unified diff.
K U  s U 0a c_ `ct wayU qshowing] ñ changes and a fewF  ® � ðcontext.  The numberD  D ñs is set by 'n' whichG ódefaults to three¥ 3By  ,Ó @iff S 3rolS ð(those with ---, +++, or @@)× ` rcreated& pa trailÚ 0newÂ ¶ iŸ �helpful s‰ ™at inputsE  Ø æP.read@ �s() resul0 e`s that€ Ñ suitable forH ; Twrite< ¡since bothæ t j0out€ U have· F » s*3For¬ z jdo not8  4 ,† $ ‚  nS €argument†%"" ( ˆ � will bePTormlyS & fµ 0unil ô ámat normally h�`header H3namYÁmodification“ °times.  AnyÔ0allU�these mayŒ BspecÞ usÔpstrings^ C '° tB', 'r 
   ~!',m  .<  Ë ”  � ×Ó Áexpressed in¿€ISO 8601‚ 3mat¡‚Example:~0>>> Ä 8 ¡_5B('onãñ  four'.split(),˜ 9...La'zero 7  rej2   'Originalø �Current'I ð2005-01-26 23:30:506 ÿ2010-04-02 10:20:52B R$='¾­ `print(  )½   ñ# doctest: +NORMALIZE_WHITESPACEö D--- Ë  5   °  , C+++ ë  '  Å  , �@@ -1,4 + !@@ +R
  W	 C-two	  £ Q+tree
 §
  ­	 ÷_check_types(a, ,)> v   * œ)M @starÃb= Falst �for groupCSñMatcher(None,a,b).get_' Ãed_opcodes(n[ !if,b s     b = Truv      B ª ° = '\t{}'.fç t(  q  E) if"  � else ''Õ  G   !to I ®  G  E pyield '& {} ‘ n P h^ …   D  > B Õ }  ¢Ðdate, lineterSm)

  ófirst, last = group[0],
 7-1]* òle1_range = _format ‘_unified(N 2[1]Q I[2])? 2/ ? 3? 4? ò	yield '@@ -{} +{} @@{}'.‡ 5(fi�  ,  k ™, lineterô ò
or tag, i1, i2, j1, j2 in÷ :µ  % if- º == 'equal'  # 1forh  B Ža[i1:i2]&  * Ç A ' +2 	j  ! ‰continue ƒ þ	in {'replace', 'delete'}k ‘ -‘ x oinsertx ob[j1:j	+x ?

# 4 I à  Context Diff ] 2j

def ü ²òext(start, stop)’’'Convert 5Âto the "ed" ·'æQ# Per ðdiff spec at http://www.unix.org/singleo x_( ¡ification/J Ábeginning = � @ + 1V! #ns `number( rwith onoalength< Bop -- Y rif not ! Ý  W p #-=i ¢   # emptyö !s %  Ñ  ŠÁ just beforeó d ` V <= 1e ‡return 'îS  è _" ,% ,ƒ  0  vå ¿- 1)

# Seej õ_²°(a, b, fromzt='', to Ü  - ) Gdate-  6n=3·S='\n'PAr"""O PCompaAò wo sequences ofå’; generatb³delta as a ¶  ¶ #.
K '   s U  ' �mpact wayU @show,À ch±s and a fewF   � b r.  The h D  ¡ ñ is set by 'n' whichG ‘defaults +3ree¥ 3By  ,5 ­ Í 3rolS q(those Ð°*** or ---)Ò [ rcreated! pa trailÕ 0new½ ±  isš �helpful s¯™at inputsE  ÂfP.read@ �s() resul0 ``s that€ � suitableöH  d.write< ¡since bothá t e0out€ U have· F » s%3For¬ z !do´8 Àailing newliò nes, set the lineterm
    argument to "" so tha( ðoutput will be uniformly newD q free.
G ðThe context diff + ð	at normally has a header á filenames andD ðmodification times.  Any or all of¿ `se may‘ ñ specified usingD qstringsb P'fromg d', 'to
  `date',~   .H  Ð � F areÓ Àexpressed inš � ISO 8601~ 2matJ uIf not ­ ,+ ¨ adefaul~cblanksP‚Example:^ó>>> print(''.join(l_lð('one\ntwo\nthree\nfour\n'.split¬�s(True),Ý 0...û¢   'zero\n@ :   'OriginalO�Current')S qend="")i D*** 6  C--- ;  *  P 1,4   Q  one
 T! two
  ê     ï   `  < A----  + â  	G "reR < 2"""nô_check_types(a, b, 4", H  4   o _ðprefix = dict(insert='+ ', delete='-  replace='! ¢equal='  'F âstarted = Fals» �for groupñSequenceMatcher(None,a,b).get_' ãed_opcodes(n):B  if b   "w  >3     ð ¢ = '\t{}'.ò(  k  )^  ‰ else ''K  to, I j  G  E pyield 'r {} ‘ ´ P ,^ Ð   D  E B Õ }  è@ Ê Òfirst, last =™C[0],
 5-1]* g  à 5' +— ˆ “  J²1_range = _d _(z 2[1]} 6[2]Ö k 1 {}RÕ \ ¨  if any(tagb#{'£ ÿ» '}êu tag, _  - qeË "or+ bi1, i20 - 
y 0  if/ R != '7'$  (   t K �a[i1:i2]*  . –S[tag]w
s2cs3s4sE ‰s\ ssÀ   for tag, û	_, _, j1, j2 in group:
  þif tag != 'delete'$  3 €for lineK �b[j1:j2]*  . ñyield prefix[tag] +> ò

def _check_types(a, b, *args)Q 0# C  Aing # ð is weird, but the alternative ñgarbled output whené ð8# someone passes mixed bytes and str to {unified,context}_diff(). E.g.
Ò q# witho€ 1is Â ,W  ¨ pfilenamV s_ presults0— Clike— °  --- b'old; U.txt' œ+++ b'new àbecause of how½ ð.format() incorporaÛ á robjectsÀ Aif aó ðnot isinstance(a[0],K } ì ðraise TypeError('ùs)ð compare must be8  , R ¡%s (%r)' %Ç  F  (Íp @).__.@__, € !))5 Oif b£ b£ \ p £  £  0argÕ ±° é !ifY,rgX ) \Ýall argumentsYò : %r' % (arg,))@ �_ä‚(dfunc, E@from4…=b'', to _ ~  ) Hdate-  An=3,²£term=b'\n'!Ar"""P C1`a`¶ð`b`, two sequences©;Õrepresented a"QatherL @thanM`. ThisÓ a wrapper t`è €`, which  Åtypically eiG Ç¾C or Ñ �. Inputs Ä losslessly& 0ver� !to� óstrings so that € � only ha€worry ab0 ,	qencodedI @back9®¦ on returnè �necessary& _ ¹sqE punknownÐ  ç‘nsistent i  ing. All o" iá Ä(except `n`)UL ‰ r{ Ü w Ù £ deÄ (“ 86tryð  Ë 3 s.- ò'ascii', 'surrogateescape'= 4 — ‚Attributa :err^ �msg = (' Ç {vsÐsp �   “Pmsg) #2 erŸÒa = list(map(î 3, aG b b  G  Î2 = 8 ( ¥   *  –"  ( 4 ðdate = decode(toôfiledate)
    lineterm = decode( %)
! s ð func(a, b, fromG B, to   Y   %n,d r 1for 1 in !s:h  � Qyield 1.en� ó'ascii', 'surrogateescape')

def ndiff—  º ñ junk=None, char òIS_CHARACTER_JUNK)s Ar"""| ñ8Compare `a` and `b` (lists of strings); return a `Differ`-style delta.
L ðOptional keyword paramd4s `¢ g ¢  ` ~  afilterI  p K Ðs, or can be Ú :™-) á D: A . ó that should accept a singleÊ � argumentì k  Ú µtrue iff th. 0is e ñ.  The default isŒ ,D 5 isG ¡commended;D ó!underlying SequenceMatcher class has an adaptiveH  noú  }q"noise"ì sc-Ûú ó 1s a$ racter (Â O clengthf "1)¿ ×)s þ  œ? 
 E  *Æmodule-levelŠw‚, which åSs outE ¦whitespace·  s (a blank àtab; note: it'à ³bad idea toF °include newi acthis!)8áTools/scripts/:0.pyË a ¸Aand-9 Ðfront-end to C Õ J sExampleŠ@>>> ‡# =�ð
'one\ntwo\nthree\n'.split^ ñs(keepends=True),¾ 0... 0'orD > ?emuC 
Y ‡ àprint(''.join(• ’), end=""% B- onfA?  ^{ K+ or B- twV!- Â ) A?  -	 R+ tre3 Q+ emu MN "NFjunk�2).co¶Ç _m¬ (G$ D	 scontextÕ   P  y 4 ± xïRÂÁs generator t  ‘marked upß²/to side by     erÁ‡AGÁ¼   -› stp º ¼ Kù WoË 9t 9  be¡ ¤< k  ! > `numbery  e  | ò display on eachÕ !of¹Ø ‰N  $ifä%llÒ @will•M1ed.�  s  ‰ ‘ `passedu "toS (see 1doc‰aî Æ= { EThis¬Õðs an iterator whòich returns a tuple:
    (from line I, to áboolean flag)
4  3 /' Q -- (E Cnum,@ Aext)0  h   * û"integer or None (to indicate a context separationG  ¶-- originalp ò with following markers insertedô  �   P'\0+'‘  ' ðs start of added f ¿ / -/ _delet1 ^1 _chang1 10 5endŽ /e /< Ÿ ¡ Í SOsN e, TruersF  á €either "à"žB"to"] ”!ai=‚ 0, o- ²wise False.�This func¸Õ/iterator was¯ ly developPo gen& ‘e side by • ðfile difference for makÚñHTML pages (see HtmlDiff class* qexampleJ cusage)¤ xNote, tª ð  utilizes the nt Æ  ¤   ¨ Y   / £  Kpup.  Op#alM òarguments may be pass  ‰ L 7@ andˆ Py in ´Z will5 £ .7 1""" ’import reŠñ# regular expressionf�ng intra˜Óe ó_re = re.compile(r'(\++|\-+|\^+)'P# cre¾  tç
$ o  4 _Œ %s_4 =;¢ 2,to   �junk,char	 ‡ ‘def _makeK ‘ s,ô �mat_key,[Q, num" †s=[0,0])C"""R' e  € Xruser's \!up¬+ £formattingg S  s–1lis\  b ââ  ork`produc	 , 1 ofÝ M  “  D ‚.  When 4   ]8 Â R ù òH  	  - 0s uŒÀare removed ^ # º i / æ  M Ö 3'+'Wb first-0in 5 5U"add"-^roundÑ  Z   ¿ aentireK x   /'-x 2{ ??{ 3add°¯ñ …:  (ž¤ces obtain‹asecond	 NLr¾ŽÀt line in lióst with no markup
  õ%side -- indice into the num_lines list (0=from,1=to)= % 0--   À/to current >  G ðber.  This is NOTe Õended to be aP ”  ápassed parametE  ItC @presa ðas a keyword argum /toO ñmaintain memory ofè ®  ÿ s between callsO ? Õis function.
( pNote, tñ  · ñurposefully not defined atŠ æmodule scope sÆ ñthat data it needsk@ its ô g (æõin whose context itœ $isw a) does‰  U ŒGof mˆ .9 5""" ÷[>e] += 1 ð# Handle case wherewCuser| úòdded, just return6'ofO Ã  Ø  D '‘pne form9po allow d usageÙN  if) pmat_keyˆ UNone:  yˆ (å ,P Æs.pop(0)[2:]
ò  ofà ra0 v changeC
€ j== '?'  î ,)Qers =w , 	¶ n# findz s (store‰ q type a)  ï¶s in tuplesÏ  Ùsub_info = []i ´def record_% ä(match_object, =	 )á _ ˜.append([B Ù.group(1)[0], gspan()z L   ´	- F 	¾ �‹_re.sub(È ,+erâ# process each.ñ inserting our special¶!s °‰won't be~ #nöiced by an xml/html escapern Õ 0forÞÀ,(begin,end)¯Ÿreversed(` E0 =  1[0:@ ±]+'\0'+key+  @:end "1' Jend:ï , J 2 ôñadd/delete entire¬ÿ ;elshZ  'à W2  A# ifH ÕËs.Pa new< ,Œp a spac: NFre iwL `somethµ [ å Q ù‘highlight:seeŠ if¹OÌÈ <' '» $ N ` X\0' +¾+‘ f + '\1| 3# RIÀine of text,ó first allow user's line formatter to do its
  ð# thing (such as add 2the= ðnumber) then replace ‡ specialJ ñ marks with what& ˆ pchange " 5up.4 Àreturn (num_« ás[side],text)
' Adef  Á_iterator():  Â ñ"""Yields from/toµ Ps of D � #a  ²indication.]  C �This func t is an k P.  It0‚elf pullRn % a‡ �differenc;= °, processesrm and y® €them.  WUeit canL $it% €both a "Û "> aa "to"ä ò, otherwise it will8 E oneM  or{ +  Í nàê "to0  ³ î9 o  J A,å Àboolean flag(Ë  edUYAe ifp  ; ¦ v(s) hav‘ *Pes in- mŒPNote,’
’ó
purposefully not defined eõ module scope soþ t†@data"3nee' Ñv parentù(¸Áin whose conÄ %itM $isw a) does‰  U   besmˆ å5"""E åU = []  ü blanks_pen}',  1to_iu = 0, 07 ¦while True Ïñ# Load up next 4‡ps so wehõ look ahead, create strings whichb N Pare aQcaten= ë  2p`charac^tof each { P ‰ ðdo some very readablz–mparisonsC ‹ ñ Alen(EZ) < 4û  &  0.apK((rAsBy, 'X'))š Ðs = ''.join([F 0[0]:@ «  *s]5 °if s.starts?(W ” #èbno morWàs, pump out anÿ @main‹u µ&th< à   ¡# correspo/ Óc/delet\ ± get a matcÜS  J   #2q a pairs> sa Ij level” @ ¬  ‹9ingn-el;W-?+?'Û \   à# simple intra†Ï	Q  * µ a _makeñ)�,'?',0), 11),EM  :inu~· ?-++· 3in –`block,¨  € coming:“°do NOT wantI&ger Ô   €# caughtÕ6on Ïàs yet, just prûocess the delete line
  ýnum_blanks_pending -= 1( Àyield _make_I ( þs,'-',0), None, Trub kcontin òelif s.startswith(('--?+', '-- ] ')):‰ D# inÒ ðblock and see an intraš Ò change or un d¢# coming: ã 1^ Rthen &� Afrom1,to / ='B ƒ1to_† , —.=  I-1,0P X_'-+?'H
-	I  '‹ Í ì õ_?',1)+'° :"'?¤¯ É ° /^uOFROMyÎzdO'+--Ä qin add g,u5ýwe do NOT want to getJÓ# caught up oKæs yet, just pr³ w  ÈJ 6 +°âÂ/'+¨/@('+ ®/+-§Àwill be leavWaMmT ¥ ó b cÚ 
6	c+c+?1sid˜ ÏFU f  ñ äv/' Ù SStext,:iÿPboth ø s†û ‡A[:],Î<0),  1),Fals[À    # Catch ñup on the blank lines so when we yield! çnext from/to
  p# pair,% Qy areE Yd up.' ¡while(num_k Rs_to_^ Y< 0):,  ^ * M+= 1) E ùNone,('','\n'),True*  > - z ‰  ÿif s.startswith('X'ô  ireturn¸ Nelseô  Ž_³2,to x @ Adef  _ž§_iterator(v @"""Yßs×º`s of tí © ñ a change indication.
b  ¥�This func t is an k ó.  It itself pulls`  ·  . K 	7 Ás differencež @ thaM Æ  j  t€ K balways¼1s a  Ö  y 2/toÞ  81s (å  ç D ï )É òf necessary it will collect singl§  ^ Y H Puntil3  ha‹ ‚matching” ‘  £2 to² _@NoteYeñpurposefully not defined atXæmodule scope s®3@data� Bneedú ¤v parentÌÁin whose con%itÙ $isw a) does‰  U  É  bepmˆ 5"""E  ,œ# =²%())  * - As,to e=[],[]  ß ÿ
-2# C¦ t9  ™ Ì š‘we have ag À �X  å\ U(len(‡ €)==0 or  ’   ^ :   :try“      L ¢$, ¿p found_ü0 = r(´ " A   Áexcept StopIã?iono \  A !ifù ‰  W O ÃE  ´  ’ ‘s.append(= ,¼ )¨ $ifå e Pc a 0# O(Ë Ã€, removemä  
 µrion andr ×  æ Ô 8 aDiff = ü Zpop(0ä ¤  æ ¿Ç .  ¿<?  z o $orJ )nÐ# Handle caseŸvre user|Ewant© „ ?’ing, justë ð 
    # them up ðwithout doing anyth	 Pelse  þ them.
    line_pair_iterator = _ !()/ ñif context is None:  K ¯yield fromV  & °# Handle caŠ õ here user wantsZ ðdifferencing.  We musÎ S someJ ¡storage ofn ðs until we know for sure thatð 0y a Qo be ª "ed Å Þ A+= 1j  Ú  ås_to_write = 0 —while Tru	 3 t# Storeœ pŸ ufind a å ae, not	 Í a[ G ðcircular queue becau=ûe only need to keep around whatF "we*  ã þ  e   dindex,ƒPLinesè 0, [å3]*(6  2   fp _Ë r = Falsž    (% "is& )q (   >try    Q‘C, to	 S p= next(£
È
ª  J `except™!pIí?iont ireturnD A Ai = )$ %*$ (B[i] = (Â ¨ c 	‚ ~ 1# Yb ë sØòwe have collected so far, but firstí	§ #yq's sepaøfê >ê *G, 	k  ¸ ° >#	) 
† 7   ; 	9  '   ¯	 ~
C y Õa ’ | Ó ö	ˆ  & 
† ( -^   R# Now«�P ?Rafter Jhange[ =°-À b `# @ Å ‡ N á# If another cÕ š"inç dˆ, extend [ O 6if © #   + +   ”    M Ó $   !?	Õ §‚# Catch . àion from next(û) and return normally
    öH


_file_template = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
l ð"http://www.w3.org/TR/xV 1G  6-trD �.dtd">

<&  Aead>Â `<meta T ø-equiv="Content-Typey c p="text/J Ã; charset=%(
 S)s" /Z ‚title></ n £style typeH qcss">%( 2s)s& / Q>
</h© b
<bodyW ò%(table)s%(legend)s
</   1 @tml>q!
_E s€A= ñ.diff {font-family:Courier; border:medium;}‘  = 4 _� ð	er {background-color:#e0 0 *td2  6Æ-align:right* ( OnextX  c0 . ?add- laaffaa- ?chg- lffff77- ?sub- Raaaa}ZEâ %< € class="fB" id
 ølib_chg_%(prefix)s_topbñ cellspacing="0" Dpadd prules="yBps" x 1col 5></ % <  ç4 ` J "%(-C_rowÙ« t¬`%(data 0s)s   #</   êÎíÎl¡summary="L's"# tr> <th codsn="2"> ( ` </th> r2 d7  ‰ E="" h Cýg  ¹  P<tr><Z (  a g .  
 2 dCò_add">&nbsp;Added @</td^²  A  K Áchg">ChangedA  “ B ¯sub">DeletB !</ ¤ mœ /<tV
OLinkUÉ 3  Í `€>(f)irstÂ?nge@>(n)©cC7 Ot)op/ 	/ Ê — {Zñ HtmlDiff(object):uÀ"""For produC P�side by  Ðcomparison wiÇ ` highl•1s.
K àThis class canò  be used to create an HTML table (or a complete òfile
    containing the2 `) show ‘a side by Q, lin   R aarisonJ ñof text with inter-' 0and "ra ôchange highlights.  Tz 2 caM °be generate> ñ  either full or¶ ñ	extual difference mode.
�  R BfollÇ ò	methods are provided fori Bion:= Rmake_<%--ˆ s.  7  Angle<~ A  c @  1
ƒ-O 	P ðSee tools/scripts/ö 1.pyÅ `an exaÞp usage Š¡his class.B 2"""Ü _— `_templ**=  - £_styles = 
  	; 
 & `legend< 
  òdefault_prefix = 0� ðdef __init__(self,tabsize=8,wrapcolumn=None,NBjunk X  Â Achar  õIS_CHARACTER_JUNK):. ð"""HtmlDiff insta9 € rializer—  T –Arguments= œ  Öótab stop spacing, ã sˆ8v G Æ  7 Ð Ñ number whereUœpbroken 2 7 Eped,¹  L c  A Cnot : ‚ 8,! ‰ ”keyword aæ @ pasF`into n`A() (Y)by† @ ()ë >e?./ I Ÿrs).  Sew Î   i 1docmRationÖ™ Xq values"de3ionà L  ä     K.Ä L  =œ 
 È    +’=8 & @! =« c" Y$=  H ßàP fromS Ss, to	    Õ 0=''  g  Ó   ° ext=False,IC a=5, *,~ ºset='utf-8'ødReturnÇ!il)	² ¡Ò™¬Ö  Š   Å �  `@list‰" "9sÏ ø 	( ,to&  :  
 ' G  ½ ¥ç header string[ 3  R 1 Q e 0setÒATrueƒ 
f8s (‡ˆ~  QwhichBs°	+ "nu y $ofÙ0u.  When 0is £ ð True,
         ö6   controls number of lines displayed before and after the change.
   AWhenQ Ñext is False, c  8 g –to place
G  a `"next"� ”k anchorsŠ H  d … Ù (so click ofH D Øjumps to justJ E )Ë  charset --æ  !of” ÕHTML documentj E"""
 õreturn (self._file_template % dict(,  ó rstyles=/  ,! clegend!  
! Rtable  Qmake_ Q(fromÉC, to	   @desc  	i  Ž    Cext= ,(O 2=nua )� >= c £)).encode( `, 'xml QrefreX').de% )Z@def Ù @_new~ _0 g,Ø   #s,ë %):w A"""R“ s ' 0/toSñe lists with tabs expandedçf ¢s removed.†  pInstead(1tab!Aacte�Cing ™ Ad by3ðespaces™ 0neeo  to fill inœÚ \ ðstop, this function w,  1 H  3 [ Í • @.  T@ ñ is done so thatš ‡differen|ðalgorithms can identifyQ @nges¥ a¯ 0e wë98areõ ˜ ” sOâvice versa.  A~ "enD1he V`generaä  ó e•K  $e br Â a nonbreak { Ð   »   Ië O s(7. # P# hidb "alJ ´   2 ! =E.í¥(' ','\0')³  * #U Ì  </toP š  WÙ.¤ <izeX x O Ùl "edn �back into  ÀrA¡ d(we'llÀ mGcmarkupðewe do 0:ing‘ tr‹=÷\0',' ').rstrip('\n7  ¶ a Rs = [!»A forO  œ+ ]ç < ) : « T \ Hp_split_� ¯`,data_Y, —_num,text`‘"""Builds€E È / s2R tH 9 Ù ò s at wrap point  _Ù
²determine i±einput L ð needs to be
     ð(wrapped (split) into separate lines.  If so, the first 7 p point
F   ÷will be determined and4  M  n qnded to VoutpuE Atextv ð list.  This function is used recursivelyI ehandleŠ  § ásecond part ofk â ] ²to further  5it.? 5""" ¢# if blank9 aor con¦ %ð or, just add it�  € Ø Æ M Rif noß U_num:  ?Qdata_õ # ((0 ( ,o ))). ureturn
 ¨  1  - Ñ doesn't need¬Oping¨ °size = len(N z Àmax = self._ecolumn… Aif (< Â<= max) or ( -J ó.count('\0')*3)) ) 
;Bscan±looking for ´ ¶P, kee` trackæ ¶ ! Ï #+  uåinside markers" Ui = 0 n  , U = ''  �while n <@i < 1
 !if¾ p[i] == -
   .ei += 1[     u  ¶=[i] 6  ,elo /1'o ä  … OelseC nÉ « #¯z Ò p, breake/up©E  	21 =G:	  2 ;i:]A ÿ{  Tãers, place end1 at "of #, þ st�C  0 `beginn”3of ¤ • Ü because eachI Zñhave its own table tag‹ €up aroun€Ç!if 
Š l   V+ '\1¡ ½   " w! +B ! +Ð 2-t5"onù    o: EûÞ r 81))^  	tùÐroutine again[¢ e QremaiI 2œÔ_Y (y P,'>', 2k Adef $ Ë@per(= v,diffs)6A"""Rm�s iteratL"at90s (“ @s) m9 rsF— ð # pull from/to • Qflags @ c :  » 7  3 1,to  6 @ in r sª  ¿q# checkò©ð s and pass them§ through
  ùif flag is None:  ( ñyield fromdata,to  4 + ‰continue (; Pline,	 ‘text),(to !to , =` 	B ¡# for each' @/to > ð split it at the wrap column to5 mH €list of v D )s."  ¢  $ ,  ©st = [],[]$ aself._| _‡ à !stà   	  c )9 e l 3ne,	3 &# ~÷ ò	in pairs inserting blankÑ ; asC ònecessary when one side has mor82ped@ 	= Qwhileu B or ´ & G0rom'   G [ :ì ) j.pop(0% + ?elsˆ   E ~('',' '> /if¥  C À# =% „ A ‚ ´ ñ 	2^Ádef _collectC s(Uv,diffs)?B"""C& 0s m ð output into separate K!s
Z  á 0BefÕ@stor =  = E • C a< ,CÅis convertedK h pa singlh %ne=öwith HTML markupH6"""�  t    ,8,7  Z]a# pulln§ 1andŸs åstyle iterator®  % p  à u@ in >sZ (:try    # 8eÚ ó hÿ  t!tom Æ 
j @  €   q.appendØr._formaë!(0 ,**  ª )Â,C 1C ŠA ÿexcept TypeErrorä $  ions occur+þ # re Àdeors goi é    Ã í  @Î $ ð   F areturnþ k HjQeO å* •@num,Ô 
`R_ sð"Û ‡" / "to".o  ü  ] P -- 0�1 indicaŒ< &or= : Ü  6 / Qes ifœ‘erence on‡0 ¹  3   Õ number (usedµ ú; î Ð -- line textó to be marked up
  5""" Etry:    ólinenum = '%d' %  	%  id    id="%s%s"( ó(self._prefix[side],< )= úexcept TypeError| á# handle blankz qs where  — Åis '>' or ''V  ¸ “  à# replace thos õings that would get confused with HTML symbols] Ptext= .Q Ö("&","&amp;") > )gt < l 
P �# make spœ ónon-breakable so they don't  Pmpres¢ !or… wrappedP  › 0 =  � ö' ','&nbsp;').rstrip()„ ðreturn '<td class="diff_header"%s>%s</td>!  nos "=" " 5' \„  �„   % (idõ,’ t Pdef _÷ ,)ýò	"""Create unique anchor M es²m p# Gener. a0  H multiple tZÎà# can exist onoR sameûApage
"ouelicts.z 0fro�pfix = " ó	%d_" % HtmlDiff._defaultè : "toË  8 /to6 W U += 1\ u# store- ÿ  yö	 format method has acces²@ = [Ò ¨ ,± ]5ÁÑconvert_flagsÃ,2 qlist,to   	 0con @,numŒ sí`Makes )   of "next"Þkê4all names willÖgqd usingÉ<C"to"$Ï 8 = õ #[1à  ÁP# pro € change Í 3s, k  f 0midŸ`column»  º ¡ fs/link]  _–�['']*len(Q  õ % @href' ³um_chg, in_� ¥= 0, Falseå …last = 0 `for i,v @ in ×7ˆ ‚ !ifó 
  6not} " & œ 6Tru˜    ¤ i¤    A# atÊ`beginnrCof a�“, drop anq` a few7ev G  `# (theä ‹) P) bef. è!orv previouM  ß· Ôi = max([0,i-ñ]å�   ñUid[i]B z0libáb_%s_%dO³ C  P 3Àing of a chaÿnge, drop a link to the next
   �# change Ïnum_chg += 1! ðext_href[last] = '<a   ="#difflibB ÿ_%s_%d">n</a>' % (O   “toprefix,~ )+ Yelse:  5 2in_Ç v = FalsÏ  à ðeck for cases whereðre is no content,õavoid exceptionsj ú if not flaglistƒ  A = [ ]8  ž  }0_id /''   0  TI = 0M "if° x„  i @fromž M `<td></ òtd>&nbsp;No Differences Found ) œ  R #toP [ 	Œ �+ 5 = ? /['�  ¯Empty File… ## va¥� on firstÜ
é˜ 3 “:[0]¬� r/[0°D0">f¯”f R# red[¦l  t5top0 v  / y dtop">t{ (| %)
N treturn i,g,ô ,n 
 "id; òdef make_table(self,D 1nesE     ¤desc='',to
 $1xt=ß,Š  $ ¶numlines=5)rA"""R­ qs HTML z ² of side by ô comparison withî¢highlightsÀ  i –Argumentsd  ± z A -- ¯@of " "(Å (9nes( ,to&  :  ÷  ' G õ
file column header string	*3  R 1 Q 2 !se|BTrue¨ �`xtual D¯�(defaults©ˆ~  ù which shows ful< %).+ § y `number�Ž Ht.  Whenh & £    
ú 6 Vrols I A ð displayed before and afteryà”  ¿ r á ,„ c  Rg vto placî I  ) "Ø”k anchorsŠ     … Õ (so click of% H D AjumpwHjustJ v_6"""­#o` uniqu ‰  Þ@es s@²at multiple¦s may exis±#ù ¹ ‘same page(ðout conflict.
     ó
   self._make_prefix()

  ð# change tabs to spaces before it gets m ÷
difficult after we insertN emarkup Áfromlines,to # =� ptab_new �_replace(. 
© `reate † ðs iterator which gen ¢es side by  Q …/to data” µif context:   _“ bs = nu» % Oelse3 ENone/ © @= _m
 Ý ,q ,w Rjunk=° ,P  ¤  Gchar/  	2fset up,€to wrap \ õs that exceed desired widthr #if­ 6 jcolumn  Ù  +³ _+ Aper( 	Ž acollec’ ˜‰ òand flags into lists (also format theµ )œ  C  * Y0st,A   ao Ï�  tprocess  @ $s,I²ing middle ø ÿ of next anchors/linksŽ ,4 R_href
 'id  anvert_y (J  âÜ 2,›` ‡%[]G pfmt = 'N  ð <tr><td class="¡_Ÿ õ"%s>%s</td>%s' + \F ; '6 4 …</tr>\n'7  for i in r[P(len(æ  Ÿ*))B!ifû  p[i] is D
$  † !# Fb yield% ‚ on sepaKAskip.–bogus one¤ G   #å ed`/ QfirstcÅ  +   Žif i > 0”   •s.append(k€</tbody>    \n   < 6\n'Ç  X  Z  Ì0% (¬b_id[i]L V  .  ¾  J  P E  Ÿfst[i])œ  œÐromdesc or to
 
 header_rown <t >i"%s "</ J' % ê › N'<th•p><br />; .>'5 ©olspan="2"A  † 2er"¢ h>w  % ¿ J  <<[ó´ J'¢Utable6 `_templj% dictTÐdata_rows=''.§join(s),
  ¶header_row= 
# Òprefix=self._ U[1])
H õ)return table.replace('\0+','<span class="diff_add">'). \A � '  A -A ?subA ^A ?chgA 1@ /Ã ² ðt','&nbsp;')

del re ñ	f restore(delta, which):Ar"""	 óGenerate one of the two sequences that g' Ad a O .‹‘Given a ` ð` produced by `Differ.compare()` or `n’Á()`, extractˆ ðlines originating from file 18 á2 (parameter `Ì  `), stripp0 @off F O 3#es§ ’Examples:¶ @>>> † 2 = Ž ð
'one\ntwo\nthree\n'.splitQ ó s(keepends=TrueÍ9...C@ 'orD > ?emuC 
)¥ ‡ Plist(“  ‘print(''.DÌòiff, 1)), end=""1 1oneS 2two  Æ 
  e K 	2K rK "re	 1emuJ 32tryE  ð
tag = {1: "- ", 2: "+ "}[½ ¦!)]> ö except KeyErrorB ±raise Value ’('unknowniô  choice (must ba): %r'Z  ‡   %ñIN"` = (" ³ 2tagE1forB# i| ¥ i\@[:2] E !  � QyieldB B[2:]„c_test(v import doc ,„1libÆ Ñ .! 1modòlib)

if __name__ == "__main__"… i ð
"""DisassemblerÔðPython byte code into mnemonics.Ù
œ 4sys Etype ¥collection Aio

¥"opV Þ * Â__all__ as _/ s $

 @= ["F Ã_info", "dis Ì  #tb	 9co"5Q"find±Atart>  Aabel Pshow_e 8 ¢get_instruá  ` I   AByte: :] +Â  qÓ Ahaveh  dFÒ.MethodType,  1Funn  ACode  S ËmC  òDatic  M ø
)

FORMAT_VALUE = opmap[' )']% °_CONVERTERS¦ q (%C, ''ã¥(str, 'str 0rep    �ascii, ' ð '),
)
MAKE_FUNCðTION = opmap['MAKE_FUNC 9']
 ø
_FLAGS = ('defaults', 'kw ¡annotation ó0closure')


def _try_compile(source, name):
    """Attempts to * ´ the given 4 ñfirst as an expression andH    4 n! Ð statement if  = ô pproach fails.
9 ÀUtility funcÉ  ‰ õaccept strings in ôs that otherwiseF ñexpect code objects 1""" 2tryó  ÷ Cc = ì 	‘, 'eval')3 !ex… ¿SyntaxErrorB 3xecB ‚return c�ódis(x=None, *, file Qdepth ˜àDisassemble cl ¶s, methods,,„Ó ddÀWith no argu—7, d\  ìãlast traceback7 C7N ô currently include generatorr v, async I�« …coroutin§ð, all of which store7(irÎI ñin a special attribute. é€if x is h°adistb(s  á £B @# Ext^T fromvh `if has} p(x, '__¸3__'º T dx = x. \ xdÝ sh /..b  Õb …  # ...a¡ A, or` w /  +el¯ 0gi_ a'):  #K ÄS  5 R +agR  ¦ynchronous$`  C ` +cr`  B/û + H �# PerformKñy5 e__dictdCp• or moduldð items = sorted(ä8 . &()X1fori@, x1À! � µ ñif isinstance(x1, _haveï N +   vprint("y5c%s:" %k  Û= ˆ  :   	    –1� < ", � I AType ô:msgÛ ] ´ ÇSorry:", msgj ] 0  † Ç Å!co$ Å6# Còù { _á _recursive°[ æ  h ’ , (bytes,  áarray)): # Raw  Ku  1 sq Àe=file)
    ðelif isinstance(x, str):    # Source code
   ð_disassemble_str3 Pfile= �, depth= )4 Qelse:
  > ÷raise TypeError("don't know how to ` å %s objects" %E  I  ðtype(x).__name__)

defI ð tb(tb=None, *, £  )’ F"""DÎ ö a traceback (default: last Q)."""Š �if tb is _ P  • 6try  €b = sys.I _b D    ò except Attribut
C 6bRuntim  K("noš <q") fromž l ðwhile tb.tb_next:Ã = * ‚(, €frame.f_
,/  Ï iT Yð)

# The inspect modul ðterrogates this dictionary´ ñbuild its
# list of CO_* co–`ts. Itiðalso used by pretty_flags to
# turn th° 0fie[ ñnto a human readablek ñ
.
COMPILER_FLAG_NAMES = {ò 1: "OPTIMIZED", Ô2: "NEWLOCALS ¥4: "VARARG 8 tKEYWORD !16? %STQ 3Q “GENERATORQ 6Q bNOFREE  12P ƒCOROUTIN  25N ›ITERABLE_  51Z hASYNC_` }@(F!ReL# ° representa¶ Ÿ  4  zas = []'ófor i in range(32]  ñ 9 q = 1<<i,   "ifP ! & 
ÿ\ �.append(² A.getÃ Q, hex
 "))~ \    t As ^=^ v   aif not sw   Qbreak0 
È	“ u su r?¡", ".join(. –A_getH_Ú#(x�"""Helperñhandle methods, compiled or raw“P, and·Eings‘@# ExmQt funpsT .Ö ‚if hasatÈ0'__- 3__'”  dx = x. 6 \ ˜ Ò h /..b  * b  bE...a¡ A, or` w /  ­¯ !giJ'°#K “generatorS  5 R +agR ÿ n asynchronous ` C ` +cr` ¢ coroutine/û + H 2# Hs’0 ¿5 K S_try_©ð(x, "<disassemblð#y>")
    # By now, if we don't have a code object,  ca ádisassemble x.F ðif hasattr(x, 'co_; 1'):  h �return x òraise TypeError("v Èknow how to e #%s… As" %A  R  ñtype(x).__name__)

defÀ s_info(x‹ ñ"""Formatted details of methods, functions, orA A."""u Ã !_fA â ] B_get ,3(x)� , #coŠ ¡lines = []]  è.append("Name:á 0  %ý a co.coå ¿
7 @File; 7 f ; áArgument countA ; 1arg ; @Posi3“al-only aK )s:µ 0pos J 	/KwB 
/kwA `NumberÑ{locals:8 Å –Stack sizx s   < @Flagk ±< €pretty_f  (» )F i¢ Ðfconsts-
ÖC Sants:´ h ófor i_c in enumeratec N g ,   
S  %4d: %r" %E Ž  B�  š‰  n‰ I ˆ Ú;i_nˆ 1varB PVaria…& ” U — 'freevar"cFree vœ +U — 'Ocell— 	OCell— U — ,¡"\n".join(€Ashow0€(co, *, ™S=Noneh �"""Print¢ 0*D 1*.
M2If  ð is not provided, the output pf Âed on stdoutÏò (Ëé3co)­  n ¡)

_Instru2� = colle  s.•ˆdtuple("' !",£ @ "op# 0 op`  5  0val 0repÆÀfset starts_Aû is_jump_target"‚ .S ð.__doc__ = "Human readable name for ðoperation"
_Instruc ð.opcode.__doc__ = "Numeric  _ for ; ?arg8 ¶argument to; û
 (if any), otherwise None� hargvalW ñResolved arg valueL YknownN psame as( U HreprV ðHuman readable descrip7 of· Í R hoffsetQ ºStart indexB ±within byteR|sequencù s@ Ys_lin�QLine  ²ed by this ´SÊis_jump_targ´ rTrue if’ð * sºHhere¬ðFalse"

_OPNAME_WIDTH = 20 5ARG —5

class g(tñ):
    """Detailsfa#q
) ò   Defined fields@  D @ opn÷:- hÑ 	½K  ??- nê-  v*  "¦ ‰	F val - rÎ 	G  É ï ÀD »" -V²D ‘­0 - ´N ¤L 
Ÿ? - –L 2""".ñdef _disassemble(self,¥ ñno_width=3, mark_as_current=à", ' 4ª j€"""Formaä>' dÁÖinclusion in � ‚y outputž  K *1Œ ±* sets the œ  =   $  ¡2beröÑ (0 omits it)ó L È ñ* inserts a '-->'é €er arrowp¨!ofr  e K ü — i;,ž F  ˆ ™   ®U = []  ò# Column: Sourcew ‰ î * )ifµõ   ¶ Ø.Šais notV
-  Œ  b `no_fmtä‰%%%dd" %b z  0   À ‡.append(B ,% } ’ 9 Nelseƒ 
O Y' ' *€ D %CŸ Ö³ ³eicator± !ifçÐ~ À         fieólds.append('-->')
  Uelse:   8fie/ 7   / õ# Column: Jump target markerF òif self.is_jump_& f 
>” “ õInstruction offset from start of code sequence¯ 
ñ Qrepr(¿ C ‚).rjust( v_width)@!Op_ ?nam[ V p" !.lU ß_OPNAME_WIDTHV 	…argumentµ dïarg is not NonË
Ú 4arg× m_OPARG�  	Û … … details�  . ‘  i 
î ! 
gR'(' +'0arg2 W + ')Øòreturn ' '.join(@ ö).rstrip()


def get_iùðs(x, *, first_line=)� ñ"""Iterator for the o¸ñs in methods, funGAs or6
ì 0Gen= °es a seriesVw Üñ d tuples givinge 21 ofI peach opM 1ion|  ‹ �supplieds .t FIf *Í *íá, it indicatesh  ñ ` numbeÝ ‘at shouldu µbe reportedý Z � source = !inI ¥disassembl�  Å¡Otherwise,& 
9 Qforma~€(if any)® átaken directly’�  ñ f � object." 1""" `co = _é b_# "(x…Pcell_w s = co.co_ cvars + @free N  æ  1 –dict(find 3(coŠ'ifG Ë f 7 _( =. -{  ˆ & !no~ 
p  ? 0" røð Ùs_bytes(ã Code,c 1var   L  ³ L `nsts, 7J,%,I È )—¿ @consž4fo( 0dex¨   Flist˜@HelpµoÒ0 opH$alkq about F ` referÃs#A   R5%de!  Jànstant and itsAr if¿O aV ’  èrdefined†5   ö �h >  ƒ)exa "()< Âaargval¡ ú QindexXi•  { c<  ) [{ _G ]H ˜  , ,å À(argval)

deóf _get_name_info(
 Qdex,  ñ#list):
    """Helper to get optional details about8 Ñd references
> õ   Returns the de! d2 ð as both value anC Qpr if0  � H  ” Ä is defined. ·Otherwise rj  : a indexU ¢its repr()8 1"""@ �argval =� _0  "if u ‚not None 
:  ( [t D ]E '  x 2 = 1  :elsJ #   (( )) Ò ; ,  # S


deÅpinstruc“ðs_bytes(code, var�  s=· × ƒconstant j  ¬ 
 Ccell" ” linestar3  –_offset=0* Iterate ov08he Ÿ ` in a ¤  ¢ ‚ string.(1Gen: €s a sequCV of Iß ‘ádtuples giving$‡qof eachÎ  opc p.  Addi0al ê0rma ³ ’ ( ñ's runtime environmentI P(e.g.LQiableƒ 5s, Að) can be specified us™ %E @arguR sí }Òlabels = find ½üp_{! =}M Bfor yA, op YÒ_unpack_oparg— Ö!if²S  EÐ '   s  z  T.get(u  P¢  3   2if ( : ?is _  , ) !+=– HÞ  # °is_jump_tarp=ï  æ %* + @ 0arg&U = ''+  if>û `#  Set$  #to[¯¢o™ÓU whene  ~ €#  avail0,|� U øŽResent’o  2val  J   # Â_disassembleäR needSO  1<the� Q  raw» CÑLOAD_GLOBAL,  ªCONST, etcƒ e9arg[ Pif op–1has ¶   < ¥“z. {8argP	a (elc  Îb  - a   sµ
] Ojrel]  ‚P+ 2 +$	§ é á q"to " +à	Ì '   
y Olocaz 9 È × äÚ 	ðcompare:
            ñargval = cmp_op[arg]
  ¢argrepr = / 	! ùelif op in hasfree:   H 7 ,? I ù_get_name_info(arg, cells)= ] ÿ == FORMAT_VALUEb 0 °_CONVERTERSâ o & 0x3è  � �val, bool 2 *4)�  Ú  ifÕ nval[1]– "  ÷    $ ay+= ', '     $ ºwith format- 0ÞMAKE_FUNCTION{ O r p.join(sT P i, sÎ©enumerate(K n_FLAGS
 ¤  ‡ & (1<<i?ðyield Instruction(opŸ[op], op,_ ,R0 	òBoffset, starts_line, is_jump_target)

def disassemble(co, lasti=-1, *, file=None)MF"""D0 ñ a code object."""Â  ÓçscPo.co_ �vars + c  3  1  ž © Æ = dict(find 3(coG_® r_bytes(P  ˆ ¼ ,c 0var^s  q T	 G 0nst2 2ellÃ &, ˆ  =	� ‚recursivH*.  No{XdepthJÉ w U = e1if 3 @ is B 3 or 2> 0Œ ¿ ' 1not+   " F == 5- 1Pfor xôû 
=  ifß�attr(x, 'ÉZode')&  g @prin·'leÅ    ! >óy of %r:" % (x,)/:   hx5 ,ã =ñ Ÿ/#de)å&œr, names ) �  ƒconstant' Â3 , D 
 b_²#=0]¡# Omit theU ù number column entirely if we have no*  c AshowAno =# l4is 4) 7if , ä0max¢ ? @max( C Á.values()) +Z Æ O  36if > g>= 100¾ "  M €no_widthŸ uen(str(6 ù + ;elsg= 3x 
' àlineno_width =ñ 0
    maxoffset = len(code) - 2 'if! ‘>= 10000:  = : c_width@ Estr(T !))+ Oelse5 4# €for inst a _get_ Ñuctions_bytesœ Â, varnames,  @  Ž  ÿconstants, cells, linestarts,G  5 _û = )ã °new_source_! � = (show ono andn 	ú .— 3 Ï is not None= ž B > 0‚ ;if ˜ ±    °print(file= 9 ƒs_curren•" =«.f …== lastiÔ J Ç Ð_disassemble("no0;, iX ", Q   )’ • š X
def Z _wr£, **kwargs‘ò """Compile the & € string, 'n ¤    ± object."""Ù 	o òrecursive(_try_c` (\ §, '<dis>')Œ ™

disco =m  x Ð# XXX For bacÊ 0ds a ¢atibility
ÿ �unpack_opì ñ ãextended_arg =èaÆ in range(0,î3, 2:  ‹ Aop =1[i]ù   úif op >= HAVE_ARGUMENT@n  ;ˆ[i+1] | ‰ K  O    ; b<< 8) i °== EXTENDEDm  AÈ ? 	P   A = h òyield (i, op, arg)8’findlabelPú Ó"""Detect allˆs/ a |ñ
 which are jump targets.
t aReturn?tlist ofG ! I} B = [` šù«  y _à ñ  ifÓ 
�Hªin hasjrel  B ‡ # =¥ ` + 2 +T Í  !   )elI ?absI ;arg< ö N   ‰continue+ 2if �  æ"in k ‘s.append(3 §r} sèß q"""Find«yê‡ Í ¼( EÙòGenerate pairs (T ]ðno) as describedÚpPython/ÔSile.cG   p³_incrementsŽò .co_lnotab[0::2; ” + 
1+  V Ðcode_len = le n(code.co_ ò	)

    lastlineno = None   *  2 4fir( ! �addr = 0 ð for byte_incr, O  … in zip( gements"  !):G  � &ifJ    Y Wno !=¶ 
%  ) pyield (¢ j 5no)`  !   	÷ X 	$  > 6 +=� 	 1if ! >!  %N_lenŒ ñ	# The rest of the lnotabX ñ offsets are past! iend ofo  ± #  J n A, so  » ýs were optimized away.B ereturn 'if©z>= 0x80Á #! ¨À is an arrayÐ õ8-bit signed integersa  ¶  Ÿ -b "101  nod% ; ˜ èà°
class Byte É 0"""5° operations¾ pa piece  3 ðInstantiate this with a func: ô, method, other compiled object, stringÂ Y p, or a  & R (as �Ted byF C()).‡ tª  I 2verŠ ø söÒ 0as ½ !ru¨ ! iÉ 2ces	1"""^ñ
def __init__(self, x, *, á_‹=¢, current_¥ ¨ ; .Ó pobj = c>A_get[_&(xx'ifb  H e ¦   S ‡ V { ,   0 ² ¤ �  Oelse` m  7   Y + _ - co˜ ; ¥cell_namesÅ   dvars +> 0ree z ;  �Pstart; –dict(find F(co)V4 ƒoriginalwJ = xV 
Ë ” 	Üs3terîßm ó` Æ û s s_£"s(* 5 ,ø 1var  P  € P  nsG’ _[n,G 9 V9  3 n=E  RI?repI /ñ"{}({!r})".format‹1.__ÆA__._Ñ /__™ ‡ ‹ à@classmethod
 ó   def from_traceback(cls, tb):
  ñ	""" Construct a Bytecode: µ the given D E """> öwhile tb.tb_nextX  _ Gtb = 6 ²return cls(; €frame.f_y ò, current_offset=# qlasti)
D  Ù šinfo(selfÌ R[  formatted (   ‘ion aboutÔ  i ˆ object.Ð š _@ � _B j .6 7obj† 1dis … "a G  ‡ qview of} bc©operations… Pco = Û q õ  Q#if 	"Ê is not None�BN 	6 U ?els7 %-1& ûwith io.StringIO() as outpuöÐ_disassemble_ì qs(co.coN², varnames=  ,j  é   5  0, c¸4antL  sJ acells=a_ _O � ”linestart<  s  + Ðy  > Rfile=k, (=ù)Ó ÜH à.getvalue()


Qc_test(Ép"""SimpÜ÷ est program to Ý0 a š ¼ò import argparse¬ 5r =  .ArgumentP% "r(¥ ' c.add_a  @('in` „', type=X ð.FileType('rb'), nargs='?',ó‚ault='-'X   3 = _   a sw Ö $ .l  Ô
 I€source =Kƒile.read?  ² = compile(* ,ë sQ .\‚, "exec"“  4 9 q)

if _~ò__ == "__main__"~ “Ð
# Module doc¦À.
# Released” ¦�public doB ð 16-Jan-2001, by Tim Peters (tim@python.org)M ÐMajor enhanceœÐs and refactoña by:
#—£Jim Fulton €Edward LÏñ&

# Provided as-is; use at your own risk; no warranty úpromises; enjoy!

r"""ù 0 --u .@work`À running exa±@s in(s¨�s.

In sÌ st‹ Â, end each mVMD0be [0ed : ß„[ .:  moÓU
Then¼  Á� ðas a script will ca@ " â sthe
docæ  Á ð get executed anðVd verified:

python M.py

This won't display anything unless an example fails, in which case the
fail3 e) ð(s) and the cause !of  + !ur ðare printed to stdout
(why not qerr? beD  õ is a lame hack <0.2 wink>),u ðfinal
line of output9 Q"TestÇ ñed.".

Run it withž û-v switch instea1P -v

Ú ða detailed reporth 4all+ps triedt â �, along
u PassorÁsummaries at‹ ðend.

You can forceÇðbose mode by passx@"ver `=True"Mÿtestmod, or prohibit
it5 ðFalse".  In eitherÎ  thj ð cases, sys.argvÑ @not
é@inedP k .N@ere ×0a vÍ  tyJ oS @waysš prun doc6 sL@cludÄ  rgration >@unit* ¢ frameworkå1supv€for runnA Rnon-PÝñtext
files contai! v U.  Thª ”lso many ¡ ôoverride parts
of¯ ñ
's default behaviors.  Seð
 Library Reference Manual¼
/ðs.
"""

__docformat__ = 'reStructuredText en'' 1all! Ð[
    # 0, Op#a Flags ±'register_o bflag', ÿDONT_ACCEPT_TRUE_FOR_1 ”BLANKLINE õNORMALIZE_WHITESPAC „ELLIPSIS, DSKIP �IGNORE_EXu ¤ION_DETAIL õ COMPARISON_FLAGC ÄREPORT_UDIFF,  C  N  õONLY_FIRST_FAILUR° I :INGt  & S_FASTq ð# 1. Utility Funcjeb# 2. Eß` & DocKe E '  @# 3./ ÆbParser6 '  - 4- KFind-  - 5- KRunn-  - !'OtChecker „ tFailure áUnexpectedExceT YDebugY P# 6. 1'ñ 4mod:    ’ 0runpstring_PCples d# 7. UüSí	7ESuit± yDocFile Dset_>!_r¤ b 18. Î g<	c ¼script_from™ Ö Usourc} dC_src¼ ' �',
]

im¦@__fuÛ$__ tdifflib 0insq  ¹Tcache $os
 %pd5 r %sy  ðtraceback
import unitòtest
from io import StringIO ´collections! önamedtuple

TestResults =  '(' ð^', 'failed attempted')

# There are 4 basic classes:
#  - Example: a <source, want> pair, plus an intra-docst½ Ò line number.J 0Doc’  J Ó R of ec ¡s, parsed 4a dM ,f  F á  info about w» 6the* R came@ (b, file
  ’ :no)Ž óFinder: extracts ¦ sE ÷a given object'sj 3and’ Ãts contained* &s'* sr @Runnr 5runn ð cases, and accumulates statisticD `
# So ï ¨�picture i«‹   plist ofÔ!+- ++   ?--- 	R+
# |C| --1ID-> |C  õ   r«C|
# o l 	Š Ç   |½ n    Ÿ|   ...  ) ) Û  J e Op¿ &ñ!stants.

OPTIONFLAGS_BY_NAME = {}
def register_o9 AflagÏ0):
¿ ð # Create a new  � unless `ìñ` is already known.8 return {  ±.setdefaulti ¿, 1 << len(.  ÿ))

DONT_ACCEPT_TRUE_FOR_1 =¼ '. )')G €BLANKLIN		F - ÿ')
NORMALIZE_WHITESPACD , ¿')
ELLIPSISÁ   ')
SKIP'   À')
IGNORE_EX¯ION_DETAIL6 /  ¡±COMPARISON_,O = (M! |ä   - 4, +    í ÿ )

REPORT_UDIFF+$ $')3 C3 $ 3 N3 $ 3 ÿONLY_FIRST_FAILURe¦ 1 ð')
FAIL_FAST = regò#ister_optionflag('FAIL_FAST')

REPORTING_FLAGS = ( ®_UDIFF |
  " C" N" °ONLY_FIRST_˜ ?UREs   µ ó)

# Special string markers for use in `want`! õ	s:
BLANKLINE_MARKER = '< ·>'
ELLIPSIS  ...'

# 2ÿ
## Table of Contents\ 6ð  1. Utility Funcîðs
#  2. Example & DocTest -- store t Acase, %3." `Parser) ¢extracts eG ds fromY c 47 KFind7 c 9 Pobjecû 6  59 BRunn9 Kruns˜ 16. · Ù  ˜ ôconvenient wrapp  p 0ing™ p7. Unit € Support �8. Debugg; 9+_Usageû9ŸZ3c
def _¨€_future_ë‘s(globs):Ä1""" ñReturn the compiler-. ñ associated with# O @ feaW as thatG Àhave been imZqed into5 ógiven namespace ˆ .9 ˆ t 1= 0  »f2  ½_Æ c_.all_} _ sÍ  ” 1 = ç Q.get(C q, None)X  ) $ifÀ Æ is getattr(e !, 7 ( 2     $|=< ..\] rK* 
‡ònormalize_module( “, depth=2e �)   sÛ’fied by ` ô`.  In particularE- If%  Ý "a 2 ,ˆ#n ¡  /  5  H5 ÐD and@ 1theð  L !!atç[  ‰W Œ x0all}L = 0  T”	 Ô Àssumed to beØ ä 5 of–  V ástack frame at) ‰{ X & 0cal82ackx ŠPif in}Bt.is™ ¼³ ý Ä  }  el9 †sinstancï>str8 "__\#__[ ,»£als(), loc
 R["*"]À` p   Pý ŸBsys.#  s[ Ð_getframe(depñth).f_globals['__name__']]
    else:
   òBraise TypeError("Expected a module, string, or None")

def _newline_convert(data)[ ð# We have two cases to cover and we need �make sure !do› �# them in Á right order Cfor }  # â('\r\n', '\r')�  Ü pdata =  “.replace(7  , 1n')N areturn' Ù àload_testfile(  C£, package,ó_relative, encoding~ ,if# – E â = _normalize_k( 2, 3›  Æ   1 ' x V_path5 * < ¦if getattr& 0'__à aer__',Ñ�) is not ©  } hif hasA .? p, 'get_`w 8    �  ttents =>A .? d»  B   F 	 ….decode(Ñ 7  #£ �() opens B ñ
s as 'rb', so one must dop¯equivalentP  cî@sionD ”universal‘½s would do.= j9 ’ *!),¢  rA Awithº %o=ù  Œ f¼j xf.read(S »¢indent(s, 
 #=4º1"""v 1Addñgiven number of space characterÖñthe beginning ofA ðevery non-blank * ­A`s`,£  = bresult0� ð# This regexp matchD€he startŒ 
] sþ W ôre.sub('(?m)^(?!$)'ì 0*' ÷Æûexception_traceback(exc_infoR*aq contaiö %a > � message § ß DX � tuple (aá  ~¤ed by sys.{ <())OGet h  ' ¡excout = S®2IO(L P `type, 
 2val	 Atb =  ç œ À u.print_C ª={ o   àõ	value()

# Override some¨ ô methods.
class _SpoofOut(Ê † t2getQ Cself  ëBþ { * â  )  # If anyth¬öat all was written, �rthere'stWilingG IC.  T' eno wayöeI`outputê‡indicateG  th„  =a F ’rmissingß ¼ 3if è  B ± ð .endswith("\n")7:
  åresult += "\n" rreturn  
 ödef truncate(self, size=None)U   `.seek( );  p ™StringIO.D ð )

# Worst-case linear-time ellipsis matching.
„ _ _ £(want, got… """Ç ðEssentially the only subtle l ³ L>>> R ò'aa...aa', 'aaa'Å QFalseÏ b ðif ELLIPSIS_MARKER not in ” `  û M  0 ==« R€# Find "ž qreal" s%!s.g Aws =J {.split(l – ôassert len(ws) >= 2] ò Deal with exactGðes possibly needed at one or bo- #nd� ð startpos, endpo� !0,k  n¤  £ As[0] ¡if w:   # ; s~ &   if.'  ¤ #(w¿     u Ý ï     Udel wx   Felses  w¸w­ ,-1® ?end¬  % ª !-=w© t  ˜ ª $"ifC >Þ 1# EÒ5endÖñrequired more characters than we have, as inc  ‹ #ü , 	OB Q# For\Prest,e e XP to fÞ Ýó	leftmost non-overlappingF Èð for each piece.  If\ €re's no 7 2allð  Õ Ãt way alone,I ?the/ bperiodW h w¥sR°w may be '' ‚Cs, i„   aU”onsecutiv�aes, or~  #P# dueú &an¾ atÇ Ï e µ@of `Ò`.  That's OKŸ H aSearch L Cmptyò succeeds, and doesn't changef #poÁ L H@got.”5(w,) Ü¶{6< 0$ N 	    c +- RTrue
»€comment_ç( õ""Rp#a "  edü 1m o€a givenÜ ; ! =  .r5"p(Á !if µ „ P'# '+6 ™ 
‚# '¦ Q ó_exception_details(msg° �# Support¦ ò	 IGNORE_EXCEPTION_DETAILÐ�# Get ridÌ `everytÌ _  �ion name;œñparticular, drop· #. ¿Adottðñdule path (if any) z[ Àon message (ñ:if
    # any).  We assume that a colon is never part of a dotted name, or nM  exception  . ¤E.g., give( ó   "foo.bar.MyError: la di da"7 ƒreturn "!  ÷Or for "abc.def"  T:\n" 8   !.
M ñ	start, end = 0, len(msg) j# The » ò must appear on the first lineÙ òi = msg.find("\n"O ¡if i >= 0:^  fx i #  —ain up toY q1(if“, 	b @':',¼ ?endi jË  Á 
ã 	b rÅ /'.c Ka = i+1B nAmsg[ :fò]

class _OutputRedirectingPdb(pdb.Pdb)""""ÛðA specialized versI!of$ò python debugger¦rW �s stdout‘ Bto amñ stream when interaƒ Q withV �user.  S>  íQ*not*G \ "ed@ °traced code) ‚executedÃ ódef __init__(self, outè  
  €.__out = k  à @_use¬UFalse% ò# do not play signal games i¤5pdb. f.‘ +ò=out, nosigint=TrueV � ð# still use input()¬0get r h Ô quse_raw. B = 1x Aset_=®frame=Noneÿ  — h 1if <   ? > °    ¡= sys._get •().f_backE – )¶ �continue¹ ­  # Calling F & € uncondiÿò
ally would break unit tes£ ° ð# coverage repor™, as Bdb.X QcallsØ 2setJ ÿ ){ L 1if …)__A
!ú ´ Ú ö ^ ‘_dispatch y, *argsÿ Ïw  `âu� Rsave_u Ÿ “ ²    2elf!  oq Pdb's ¢  ¢ c metho… 
:tryö rEý ? á p 0finÀ
H 
¥ Ó Ñ

# [XX] Norm»^ reÍtðos.path.pardir?
ð_module_relative_" ( ,) v!ifö!inT 2.is) 0 %  ÿ ¡raise TypeTp('Expec¯ða module: %r' % ñmodule)
    if test_path.startswith('/'):"  & ñraise ValueError('MD ð-relative files may not have absolute \ As')
O â# Normalize th ð. On Windows, replace "/" Œ Q "\".< ª ` = os.X ….join(*( a.splitÀ )s AFindn ñbase directory for J c ²if hasattr('P, '__Þ (__Q# A nÉ  ( �/packageF  4 k 7dir« š / .U A)[0]4 CelifL À.__name__ == vmain__'�Á# An interacrsession' ~ ôif len(sys.argv)>0 and  ‡[0] != 'T  6 ´ 7 °  0 Felse–   	B ccurdirÞ * f †
f R  ¤²&in$0 
€ 2 0ull {&F ,ô 6  %if\ƒexists(fP -   treturn & ç   $m(T w/o òö	 (this includes builtins‹ oÒ"Can't resolv4%s |!toÅk "p €  `"%r (iŸ6s n‘ )3 %o“TbCombinÅ öW j Ü •þ˜)	º : 9dir’/
# 2ÿ	
## 2. Example & DocTest_ 8-ˆ""eb ð	" is a <source, want> paÞ rwhere " )  Ÿ â  fragment of  a code,®"C .  Nð expected output½D W u."  Theñ ¦class alsol0infµ�tion abou2   Ÿ e .pwas ext`°ed from.
##p €- A "docÝœ �a collecU 3of Ës, typicallyK  G ò  a string (such as an object's doc ").× ¾ × G HÜ × K  Ö 
Q 'N"""€A singleŽ  ð Ü �, consist¿ 
º¹«‹¯C.  `d ‘` defines·`followI  vtibutes:E-%: ‹ ÀPython state:À, always endF 3’a newlinezà    The constrñuctor adds a newline if needed.

  ñ2- want: The expected output from running the source code (either
F "  - €stdout, z ð traceback in case of exception).  `| c` ends� g  with² ðunless it's empty,N RwhichT  "an F �string. Ø oconstrtexc_msg° ð  message genera'!byµexample, if€  . 6 isZ%to@  µ ;3h`None`G  it> ?notB ì k ± Œ ¹ ñis compared againstÀ °return valu£8 `Á….format_½€_only()`Ä/Ç¿D yÇç °  LœD µ Î"no£  q number !in× ‚DocTest p contaiËY bthis E¾a where9  abegins¨ 8is f i¯±zero-based,} @ resF1 toM E  v  ý — �FindeƒL2's  a+ ò; Ò .È QI.e.,n `of spaªñharacters that precedç > §p's firs$ Gompt  o°€s: A dic‘ €ary mapp%# ` flagsú  TrKrFalse, ·pis used( òoverride default I `s for Ÿ¦ c.  Any' p  Þ"ed,'is« D ¡are left aù%irw ü@(as ½bified Þ= ¸ƒRunner'sƒ ò  Ë$ByM C, no  s s 2set¬1"""O ódef __init__(self,Z,�,% ‚=,z@no=0ú *1=0,G z 93 %):  0# N»²lize inputs‹  4  X#ot{ .… |W('\n'B  * ø0+=  ] !if° P and … ÎH 
 !  F  Cì ÷ U  X 
$ [ ÷# Store propertieþ  x.Ù =Ú  ® =ã 
  Cno =š
 ¸# =Á %if0is ã : E= {}) | Ï$ =$ 
 ñ =+ÏÀdef __eq__(sãelf, other):
  òif type(self) is not *  1 õreturn NotImplemented
M   L ¢.source ==s  Uand \1  T 1   1 Fwant/  - flineno/  1 Hinde`  1 voptionsc  3 vexc_msg3  !Âdef __hash__o†9  ( /, é  Å ,OVU‚ ò))

class DocTest{ 1"""< €A collecò ð  of doctest exaçñs that should be run in a singleD ónamespace.  Each `k €` defineF òe following attributes:!5  -r  : the list� ˆ .) µglobs: The z ` (aka  Bals)µ  G ? Â ¯  $Ê X  M 1: AU   i40ify¯  I Ò Á (typically,¨  5 5 ofY  , Àobject whoseQ2strG i…÷ was extracted from)‹ @fileZ æ   \   ß O �  W À, or `None` ò0he D  ^  ôwunknown| gz   æ number within= †where th† x obeginsz  P Ðis unavailabl;EThisC * ±zero-based,‰ P respe!to‡r nfŒ ì Ý 2docŽà  Pe„  wÜ 
 lQG Ò Ì hCinit,m ,¸!s,y,a , 6no,C½X  ÍÄCreate a newæq contai 8Ugivens  . ?¡  A Ý!'sŠ €als are ­ rializedt`a copyŠ`j5s`.B � aassertN´isinstance(Š~, str),
"† ð no longer accepts2 T; useÝ pParser \ 2eadÉ È øº=ï § ! & =[
# ß ! = s.ö *()" @=³
  q  
! Ö# =ßØCreprëbif lenF)j0Ë ú    ð = 'no examples'
    ñelif len(self.examples) == 1:
#   c = '1  '# Oelse1 $%d2 Os' %q  H õreturn ('<%s %s from %s:%s (%s)>' %, š  ½ ý__class__.__name__,*  ç   , Gfile ulineno,­ 1))
D ¡def __eq__l †, other)ñ qif type ‚) is not *  µ å @NotIpbmentedj  ¬ is’K ¥a and \Ÿ  5  5 –docstring6  7 Gglobi  /  8a  - i1  5 �3  )“Chash•Ž`  (“.ÿ ø ®  ˆ  d ùð# This lets us sort tests by E � #lt‹   ±isinstance(Í—, DocTest½  ÉÁ !     Û  † ¼ Ë A, id,))-- < ˜ .U ¤ .V  "W  )-# 2d
## 3.Parser
Z 21#


\ ¾1""""A # �used to p€  J�s containV0doc'.? G 4ðregular expression\ \find H Q in aL #w ð.  It defines three groups: `source`W Bthe  S codeD p(includ³ 1lea €indentat�  y²prompts); ` O C  0 0of h Àfirst (PS1)   € ;�B T`wantV  ßected output £ )Zö_EXAMPLE_RE = re.compile(r''ƒ1# S ª si¤‚of a PS1§ €followed»ñzero or more PS2" sn  cB(?P<Ð >Ç     @(?:^ °> [ ]*) >>> 0.*) #s ;  \n    ; @  \. @ .*)=  ; Œ < 5\n? j# Wantá Âny non-blankÇ � that do…ð	start with PS1.
        ð(?P<want> (?:(?![ ]*$)    # Not a blank line
  5 F>>>)5  / ÿ starting with PS1A c.+$\n?X ÿ # But any otherx 5)*)M ð''', re.MULTILINE | ‘VERBOSE)
) ð# A regular expression for handl§ `	ó` strings that containD óexpected exceptions.  It divides C óinto three pieces:A ó   - the traceback headé r (`hdr`Û #-  st3 !(` ) — ð message (`msg`), as genera¿ &by�  Œ ….format_G d_only(� K ñ may have multiple¤ òWe assume/requireC"th:#6Ÿ igðe first non-inden£ B ca wordº ðcharacter followÁY.5 ð _EXCEPTION_RE =%Ácompile(r"""$  uo# Grab§ð.  Different verE±s of PythonH esaid d1 !thY!on\ õ 	 ò ©  … ^šdhdr> T+E\ \(]  $ ù(?: most\ recent\ call\ last) ’|   inner.   R) \) ¤ X ñ 
 P\s* $	  `# toss7i8³whitespace Û ÔÍ  Ì ³Q> .*?_ ,ödon't blink: absorb stuff until..B  ^ D °msg> \w+ .*E #! a�! *o"s*n†alphanumB 1"""'%4gDOTALL3 P°able returneða true value iff its argum.is3D# orI   single com3 ¢ û_IS_BLANK_OR_COMMENT£ '^�ò (#.*)?$').matchÞó def parse(self,Ã’, name='<Ò6>')ãðD½”Sgiven?  ÆÀexamples and AerveUtext,f  $ H mo ˜ stqalternaEP ™ s cÁLine numbers� Ó3 ñre 0-based.  The o…&alˆ ‰`ü !` �    iY0ifyÄCthisæ ,Ù  s ëG Aused€ Terror¯© @Æ # =R ³.expandtabs; Ú �# If all­rs begin« ã Rsame üaW,F‰Fp it!Bmin_(  p Velf._ (Š ¿6if  A > 0À         strð'ing = '\n'.join([l[min_indent:] for l in string.split(0 c)])

  µoutput = [] õcharno, lineno = 0, 0 ð# Find all doctest exampleso 3thes :3  Œ m òself._EXAMPLE_RE.finditer(¦ )4    `# Add R Cpre-f ¢ text to `¼ %`.h  4  s.appendW [Ò �:m.start( ,  „# Updateò (ú Ôs before thisã )l  ' Sno +=ò R.coune", t %, u 
< ñ# Extract info fromê Êregexp matchÚ ù(source, options, want, exc_msg) = \Ÿ ß  wcparse_F„(m, nameæ� 0CreBan EÝ0, aöAdd i~ –Jlist¤ cif notq óIS_BLANK_OR_COMMENTÄ è © 
¸v 0 ë ,ç  G  ž= 3 >=Iâ+len(m.group(' ?'))N ¨= ,) ev_insidv&n y )u Ÿ
¾ Q = m.; g‰ any remain}Opost”
Øç�]œ rreturn . Ÿƒdef get_f(Æ,jt, globsÄIfileÎH5"""Ç r¼‚Dgive7ö@ pcollect¨ Ïòto a `DocTest` object.½  ˆ`¤ @`, `œ   ¨ `X " `œð` are attributes¼t  h>newh @  Se'e‡`umenta = - G ƒ Î n!rm+ ý%Š× v.‡9sT{)‰i  ù   ú $, ø nÇ‰êc 4elf$ i 2='<<'>'=¸ Ý$ ð À  them as a ÞS of `âðs.  Line numbers¾? ð0-based, because it's most commonÒ`s that1EhingC €intereste Çðars on the same line aó
s opening triple-quote,
  ð
and so the first interest3 ñline is called \" 01\"0 5n.
F ðThe optional argument `name`A  a  � identify\ Ethis@ €string, Ž õis only used for error messages.5 5""" ‘return [x2 ôx in self.parse(_  … )4 ò if isinstance(x, Example)]á Qdef _I "_e (\ A, m,×  , Eno):[ › ö*Given a regular expression match from `_EXAMPLE_RE` (`m`)¥Þ òa pair `(source, want)`, where ` q Ð^ %ed• ½ 2's ) ò code (with prompts�n§aÎ :epped);G  ¤`z i Y ó expected output] iQ F Y F0 ¿  " Cng'sdw iy   u numberY  A — ÿ starts; both areZP# Getð P 7's Ñ f level• ò = len(m.group(' 2'))R z„# Divide�AintoIÁs; check thay @y're¡Uperlyè #† 1ed;¶Bthen¯ ­ #ir Ç&@  á© _CEs = «  Ö').split('\n'3 ø!._Ÿ _3c_blank’N ,{ º 
E Iefix? ¢[1:], ' '*6o + '.'M 0 = © ¢.join([sl[; A+4:]!sl, ¥ ]‹ Ö ‰@it'sF†â |Ú #{†' „ð.  Spaces before+ � last new†f shoul¯0# b÷€eserved,¦pplain röp() isn't good enoughÞÊ Ö  È  ! =Fî!ifÆ- Q) > 1n1re._r(r' *$'‹R G[-1] ì1delf ! 0  #™`get fi52& s&…after it]7 š 1+9  ‚   pAno +à òœ )ì ] 
XwXVwV ( = 
T3If 'ôcontains a tracebackÐ,@n ex Ft itÄ2m =ÅÓ_EXCEPTION_REx v ¬ Fif m~À    exc_msg ó= m.group('msg')
  Uelse:   õ exc_msg = None
 õ# Extract options from the source.+ ! Ó= self._find_ (- ö , name, lineno)g creturnS ,l ƒ, want, � / ó# This regular expression looks for@ à directives in´ ¬ #g ñ code of an example.  Oç ; Äare commentsA ðtarting with "doctest:".  Warning: t¦ ãmay give false> Bposi–  ¬ òstring-literals that conta´  ! < ("#m qElimina‹ Cthesh  b Äwould requir€ Ðactually parsÆ Î‡ �; but we Y t3�m by igno¦ C any‰  Ã§  D ™ Ã Ðis *followed*E Âa quote mark6ô_OPTION_DIRECTIVE_RE = re.compile(r'#\s*ó ñ\s*([^\n\'"]*)$',Œ  ¿ Ãre.MULTILINEuKdef ¢Celf,¨+5"""t R´Pa dic8aryúÂ overrides eI!edCG ( ¬8. î `J0` i1e #'s`Pand `¢%no#   u number| Pwhereæ  sÚ€s; both ú us± òor error messagesÁ ‰ Ì es = {}e ‚# (note:- lpcurrentÄBexp,+ö	will match at most once:¶ .mÊ`= .t Ip)º « Ÿ _Q ¦ ö1).replace(',', ' ').split(  B  ƒ F  ˆ 
 P 
l  . Bif ($ p[0] not5 f'+-' o„ )  - %1:. å ÛFLAGS_BY_NAMEÕ < Àraise ValueE«!('ò %rã vF!E%s '¡B  @'has"sinvalid[: %r' %C (‰ Dno+1Wç )[ ~ 0flaƒõ  [4 ][1:]]v   s[? 8] =uW== '+ú#ifÂ  Õ dªÿIS_BLANK_OR_COMMENTAd<  r'Q on a%4$no xÀ   (lineno, óname, source))
  ñ return options
 ð# This regular expression finds the indenta6 ó of every non-blankG 0lin* ¡ a string. ð_INDENT_RE = re.compile(r'^([ ]*)(?=\S)', ¢MULTILINE)œ ’def _min_� ¡(self, s):[  Õ ""RÓ  ¦ |minimum® 'an¬  ¦ E`s`"F _ ’s = [len( S) forM @ in } .Ï .vall(s)]I &f A fs) > 0¬  ° ‚$mif sžOelse. 0Ñcheck_prompt_ Ù #s,° ",   (no0"ö QGivenà ' sÚa4ÃÂ (including s Us andï 1lea 1 1), £ ó to make sure that7H 5 isF °followed by=ðpace character.  If Ä ¥ ‡ is not 3 G :a s; ,Ü òn raise ValueError˜ �"ì, enumerate(w r 9 iç  C) >=u +4C [ª+3] != ' 'Ø D —  ('O 0 %rˆ Ï2docIˆE%s 'ë  @  q'lacks ÿ after %s: %r' %> ì cno+i+1A4 ï :ö I)Çz_prefix³ r P ³CþN4iÆgÐðlist starts with  Í q 7; iY1doe[	5a7? %1andÆ ½ .«  ª (˜ ®ä,/ha0Ôinconsistent ÏQwhiteM;(É /
# 2ð
## 4. DocTest Flr\ 5d
class] \ ³$"A # @usedÜ0ext¡^”  ,ð at are relevant* a~öobject, from its å 	÷‘ $ ‚containexC 0s. ® ð	tests can currently be eð8xtracted from the following
    object types: modules, functions, class ô methods, static G c%  ñ and properties." A"""
	 ñ"def __init__(self, verbose=False, parser=DocTestP 1(),>  ´  ñrecurse=True, exclude_empty %):4   8 òCreate a new doctest finder.¤  * `The opÒal argument `� Ò` specifies a#5 orn ?ò
 that should be used to c‚  € æ ‰7s (G �sF Qimple„  Æósame interface as I u).  The‹ €signaturùår this factoryå¡ Qmatch$5 G !of e € construH 3I% 6 ª!`  æ`then `wf` willk ±nly examineu Sgiven!,]pnot any‡ ctained s� 	)“ Ž  › 1 in[ *Ts forp a with r Jcstringò Ew ì"._@# =æh  
$ =  H3 = 
   	Û * =Ü € v|ó obj, name=None, Sglobs eK \êReturn a list 6Éqare def·&byâË ÷&'sRq, or byônof itsû'@ 5doc‰ 	Ï²parameter `ó X r0con^sD  ! �3.  ó7 0is ›d· 2is Z ñ	K  Nx@ attK "Pautomg`ally d¬ D @corr½} ø™#'sÉ q v:ý ”  0- A¹qdefault ±space, if `æ	Î É ?   �- To prev FIp4TctingŸM D  ' ñUimpor¶SotherÐ \ A …  ÎG ÇtDfile% €  ¢ h Ç  AhelpŠG lydnumberN : î in€… †    n |C:˜c whoseÄ B doe)r„ wignoredM )If¦%(no/ðmodule will be mcade.
  ð&This is obscure, of use mostly in tests:  if `module`1 @Fals/ rK õ0is None but cannot be found automatically, then all objects areH ðconsidered to belong
 ñthe (non-existent) m� A, soN •containedL ` ðwill (recursively)œ ñsearched for docë %.
> ±The globals# Àeach DocTestðformed by combining `1 %s`D ¢and `extra   (bindings]	 ”override " E $inX à).  A new copy®  [  ¥  dictionaryŸ Wcreat æ Ã T.  IfY  1  ³“specified¦%it† „defaults�~`'s `__z @__`,'C Uor {}A “otherwisez ?is   w G Wto {}§5""" #Ó name waR u  ct it fromŒ‡1if D Ó:_  6 ð= getattr(obj, '__ A__',)2 O 
 S óraise ValueError("fÂFinder.find:“ 1musXfgiven ù  G   "wdDobj.›   doesn't e@y: %r" %¨ @  P(typeæ F),)) # œ >m†c that ƒs ¤ „@ (ifh5 ist 5# aÃJ =¶  épNote: t£�may fail,6WwhichF !ca² œ ê!be†	Ñ\  ç»
Ô =7 Z Celif¡  8  Þ7  inõRt.getK 1.ARead  Ð's source cod‰!usR„ #q o@er._p_lineno‰  X   q number­aC ‰ 'sëfstring!:tryÛ wfile = Ù °   Ý "¢except Typ½
H 6 ± -s `*se.  *0ot e 
  m p# Checkö 0seejPit's tpof our …àial internal "J s&0# (C P__pat  �cache_getK&s) }    M 
  
 (   Ê @[0]+) ñ [-2:] == '<]>':æ ;  / s ! T	   ,elXÀ    if modulÿe is not None:
   ø# Supply the module globals in case ?wasG òoriginally loaded via a PEP 302 _r andA 5fil° €a valid  ¿system path: ð source_lines =  �cache.get  s(F ,Ý ­.__dict__)M ?els%ãNo access to aÍ ý
, so assume it's a normal[  y#Î 8½ !iféñ" ! =
° µ# Initializ,´` mergePextra"%s.7 !if4sok#if|  P U = {}T   ’- m®Ñf.copy(= 9  / 6if Û  ª 8< vupdate(1 w Ñif '__name__'”"in
�I [+ 0] =9 @main9 ô # provide a defaultG ] ´òRecursively explore `obj`,Ó ×cting DocTest·t U = []v±self._find( p, obj, r B ör,Ü F, {}a# Sort8F ñ by alpha order ofR õs, for consistency in‹ ð# verbose-mode output.  This wanpfeatureP 0dock  ¢fPython¨ñ# <= 2.3 that got lost” pccident6 �2.4.  It[ Šrepaired�  # 462.5þ x gs.sort~qreturn  ¬¢def _from_¹(lUvobject)%5"""RN arue ifYPgivenž0ect¯Qdefin²  @ r ³ \ ŸÉ ETrueO Àelif inspectg_ (Ã  Ž =L /  ' D k ¤isfunctionl / 0	`  i › 0.__w_als__b ÿmethoddescriptorj ”if hasatt  ,½·objclass__'É š   0objû# =¶6.__1  ._ 7uleš  5 kk  Di  À   obj_mod =÷ object.__module__
  Yelse:   ù!return True # [XX] no easy way to tell otherwiseA = o À.__name__ ==‹  † . �elif insp¡ ‚isclass(° )• T 
 > ß  ^ shasattrV 6, ') 'd 5¥isinstanceg �propertyc X SÇnot be sure. �òraise ValueError("/A musA !a Fñ  or function")
R ðdef _find(self, tests,• , ¤", ³÷, source_lines, globs, seenÏ 1"""V  /BFindO à for the given\ óect and any contained  s, G 0add< m``ž `p 0if Ã |._verbo$pprint('• 3ing˜ �in %s' %ê  » ð# If we've already processe� #is« ,š ¶n ignore it™  ÃdùA) in&»å  G"[i1 R] = 1�Œ  ´ ! a³ J� FPdd it! eqlist of0 s’  ;# =#@get_  ¢ èÚï)© iX @ is �;Non) V �s.append( 	WBLookÄ  g a`.'s	½  Om³ » )*Ó \recurö y2valÉ0valr ÷obj.__dict__.items(Â s  6 r = '%s.&(H  	  0   2# R…  ‹i2s &~e� .   Vif ((ìuroutine ¾unwrap(val)n  @  Ò? å.  µ*  #@fromuBule(O!, f 
¦4 b& Ós-   	# R )  Bï$
_·0__ Àoionary&C4get#  ø �__', {})6!ifüH_, strg  ¿pDocTestù0er.x%: ú Vkeys g B  "ð strings: %r" %
  ü(type(valname),))
6 ñ	if not (inspect.isroutin6 V) or  PclassN   J Z 0 WmodulI �sinstanc �, str)):H ð!raise ValueError("DocTestFinder.find: __test__ v) ?s "L ˜  €"must be� ÿ
ings, functions, methods,M 0es,+ñ �s: %r" %Ž £Ÿ»t = '%s.ñ €.%s' % (Ö,þ  	 Ü`self._,()s+   0 ", ¯ ÿ , source_lines,¶ 	Õglobs, seen)
) ±# Look for g a in a õ's contained objects.9 -if]’obj) and ¼ zrecurse% i Í  p ÿobj.__dict__.items([ ñ# Special handling¶ bstaticú/¸  ª < ² Æ= s   : ñval = getattr(obj·  „´b  ’ a 0.__Þ&__° “   2# R_6 toø€propertiÓ ‰bnestedÏe½ B   Oif (>6i]� !y)9 x  +Rfrom_Ò( fbAYP s m ?indT4 U X�def _getâ(u ,@ , 6º9 Á#&""PRetur˜Iù�the given\ Pect, Pt defÕ a docstring;}Âotherwise, rU FNone,v  # Extract k &'sV ö
.  If it doesn't have one‡#; nk A (nojÄ #is¿ )…  È Ls o
IÝ   =B â ,els:try;  ¶ if6  w€oc__ is 	(  , k %''j     r     9 Ðobj.__doc__
   þif not isinstance(docstring, str):
5  )   =* 9 )3 òexcept (TypeError, Attribut c  [ 5''
P µ# Find the # á's location in Ufile.5 `lineno¥ ¢elf._find_ Á(obj, source (s)l ñ Don't bother if[ w – is emptyi Aif sc �exclude_  A andd; 
S¸return None} R ù
a DocTest for this objectw `module“  G 
`  bname =d ½j  else* @# __. ‘__ can be1 y  A æspace packages€  Q  7  $ Á = getattr(m” 4, 'U !',P R) or  0.__5 %__¬ L 4if O ú [-4:] == ".pyc"¯  , ) & =4 E:-1]Q ^˜öparser.get_doctestµ�, globs, ’ ,@  e  	� ", SAIdef j � ,»pÓ 5"""v ý U ’ number o‚PgivenJ Vect'sg.  NotÓ-ñmethod assumes thatÈEg has aD ‚ Ž  … A ]¤� " §  ¨ß$pif insp¸"is  }û G i 0f XclassŠ#'PcouldÅ`fooledÁ!a 3  (õdefined multipleù @# ti*±in a single[ð	Ì Q Ë   X s  >ïU¡  „   ñpat = re.compile(r'^\s*p ©\s*%s\b' %3  7 	 ‹ç'mz', '-')¦ ¶iÅ F©enumerate(¿ Ðif pat.match(ÀÓ�   Ûi³ _breakõ@funcìBs & Ýgûœ 0  = 0.__C t	Ð   _ 7  Ocode7 �traceback8 vtb_frama
o   4  f_l )	2   1    d`
ôàco_firstlinenoÓ', None)-1

  ñ# Find the line number where ÷
docstring starts.  AssumeC ‘that it's2 RfirstN  ÷
begins with a quote mark.B ñNote: this could be fooled by a multi¡ ‡function= £signature,¸  a continua* ‹ †  C 
� !if4 ‘no is not7:/  ; if source_– s) JNone%  ) creturnP )+1E ùpat = re.compile(r'(^|.*:)\s*\w*("|\')')5 3forN   in range(„ ˆno, len(— .))‘ Éif pat.match- [F ]4  É A"We´_n't fM è )?

# 2ÿ
## 5. DocTest Runner\ 5d
class] \ Q1"""•"A # ´used to run/   t‘ ðcases, and accumulateKrtisticsðThe `run` methodOS õprocess a single`  [ Q.  ItŠ \ ' ätuple `(f, t)`0`t`V  éä'of£ D Rtried­ /`f/ 
 Úvfailed.1>>>T 4s =§  _Per(). (_¦CVÕ 5 r¸6 lê(verbose=False2  ^ñs.sort(key = lambda : K.nam5  < 9  :  sÎ ß0... p print( @ p, '->',Ùqner.run )� Ó @ -> à ‚Results(ÿ =0, attempted=29 Ÿ.__init__B '?get= 'osquare@ "1)í±•summarize·= „ �y of all S ´ &aµ�have been` ê Ÿ‡ÖÅn aggregatedÜµ ï:—  ÂO.† 5izeI1°4 items pas½§ 7estA   2Js0èw  k ! Ð* "ge
O 1p . M 7% Å F D 7Ð ðnd 0 failed.
     ó   Test passed.
    ñResults(failed=0, attempted=7)
, òThe aggregated number of tried examples and H  !isC ð	also available via the `B !s`: `; 0ure ¢ttributes:‚  ± ±>>> runner.6 X   7
 # M  0J  Ì ð	comparison between expecÝ boutputÌ tactual  qis doneR �by an `O. ÷Checker`.  This ` ñ	may be customized with aE Iñoption flags; see’documenta ñor `testmod` forD ±more inform' Q.  If> T ! a& °sufficient,# n F ² ®
· !by?ñing a subclass of? 0 toZ Ö constructor.~ Ã É£'s displaye0 ca” : òtrolled in two waysº`First,™Q func"d(`out)D î2 to£ í?prun`; t«< Awillªav ¦Ástrings thatE `should' ·  edp`t defaG ú ð`sys.stdout.writeI)PcaptuU  À is not �… #¤X%by— ¥6Docò  .d= poverrid"  €ömethods `report_start`, �uccess`,= & 3une/Q_exce¼`d 9 `³1"""A # ‚divider `€ is used<�separateGÂure messages^ Ì%# ( !seû ŠSrsummaryw óDIVIDER = "*" * 7òdef __init__(self, cÃã=None, verbose IœA=0):Ê  xÖ   0Cre· ga new âø # O(óal keyword arg `y ` ’K| C €1¹/•LÄ´ s/1doc© ¿« 'Á' prints lotI pstuff i"ue* ­ DonlyÈs ”false; by/ð, it's true iff '-v'%in°  LOargv� 1arg' `¢`ÿ"nK@ how"Z ü P±,es “	‡5howG $it¤sí O.  SÃ -Ça f ¬#._3$ =¶I or Šð ()
        if v÷erbose is None:
  v õ= '-v' in sys.argv' fself._) 
 
  çoptionflags =  ' ‡riginal_" 0 1 õ# Keep track of the examples we've run.0 ¨ @trie‚ 0 ofailur å_name2ft = {}
6 ó$# Create a fake output target for capturing doctest$ ‘ _?  ou` ²_SpoofOut()i /#/ -° €# ReportŒ rmethods ^ -/§ Qdef rb p_start(j,ï  , ù ,—)\1"""„  kž Q thatÅ 4  »0ner• ab¡to process$ UgivenB ÷ó.  (Only displays a message if ™e=True)< Š 0if ¼ Î°  ¨ $ifÉ Z.want  ! ôout('Trying:\n' + _indent(¡ •source) +  8  `'Expec¨?  w )»  8 ;els³  Š 7³ nothing\n'–ï uc’ñ_, gotöÒab ran s^ TfullyÛ8ãC 8n"ok\n"í $í @ Z &ed“ ’ ” & °ure_header(&ZR2 ‚checker.�´_difference� ,ôr)ý 1uneœqed_exceÎ
�exc_infoü$†ised an v  v '9$'EÌ 0 rau xì _geeback(Ü '_ž �þ Ñ0= [% •.DIVIDER]Ú!if6P.file}
h `lineno 1not¹D and@. 
G À    lineno =ö test.lineno + example 71
  Yelse:   > Y= '?' ðout.append('File "%s", 0 Ù %s, in %s' %5  R  (� ‚filename9 2no,´   %)); › ~ ILines * (ë /+1W E dFailed$&:'} „source = . � F ‚_indent(" Á ñreturn '\n'.join(out)
C /#/ -G ò DocTest Running \ -/¥ âdef __run(selfNð, compileflags, Ó @1"""‚  îtRun theAs`ÿ‘`.  Write ô outcome of each/ G qwith on!  O `ò  ñ ðer.report_*` methods, using\ D  n ð r function `out† `Ì @` is6 @ setŽ  rF ò ö that should be used to executî B.  Rÿua tupleG  `(KÅ)`, where `tz `number} Ëõs tried, and `f`E « 1    fØH.  T�vare runE ¡ w@spac‹  ;uglobs`.' ÕÀ# Keep track¨  ’…  w Aures¯  º sF  =Ô Rs = 0g -S# Savp¤n‚(since o ädirectives can© #‰`modifyÉ&m)~ ’original_J ]  = Ø. ‘ ñSUCCESS, FAILURE, BOOM = range(3) #G ¼v` state= ccheck _ _ 1er. v_output, ™# Processÿº 4forDnum,  N’enumerateV4&):^ \óIf REPORT_ONLY_FIRST_Ù  ö@set,2¥n suppressTA f WPafter, s first ×°  1 �quiet = 8`/ &‰ 9andw  J  d Ss > 0@     # Merge ‹#'s2€ 2 ï? = 	† $ifsÉ sï T    ¤(G`, val)” � : Ž.items()B  F  if8     ¾ #|=ç Ðflag
          gelse:
 	 öself.optionflags &= ~ 
9 ù# If 'SKIP' is set, then skip this example.8 >if h  H ™ Œcontinuez ðRecord that we starte u ¬tries += 1Œ žnot quiet~ § qreport_c 0(ouå Dest,Ü )› ðUse a special filename for compile(), so¸ `can reœ )ve˜ #Jð source code during interactive debugg <(se@ ð__patched_linecache_get *s)‘¤ ð	= '<doctest %s[%d]>' % ( .Æ ö =numù 1Run¶ õ" i `given Éñext (globs), and rÆù �any exce†âò	gets raised.  (But don't + D ‚keyboard! yrupts.)$ >tryð1# DW �blink!  TÄ�is whereÜ buser's’– *unM PTexec(í.Í,¹, "single",š  A 	 I ‘‘, True), “L> ·per.set_~ G²() # ==== Eš‘ Finished J ˆZ= Nond # KlIš kX»	] < *  úion = sys.exc_info(¾  æ '	Š 0gotl  ùò_fakeout.getvalue()  ŠÙactual output@ ‡ : ªtruncate(0± ðoutcome = FAILURE Z ðguilty until prove²ý nocent or insanü!If‹X muýqwithout) 	IseÃ# verify itsÖ 
Ç'if…!isþ¯“if check(� ½.want, got,ä)?  Ç|SUCCESSP4ThelÛ Ved an� ": ƒ � if it wavjpectedÒ ú aõmsg = traceback.format_Œu_only(* ™[:2])[-1]	 Í ?if O "  o7+= ] x (a [ 8 m`g¶ `x ˜yðwe weren't expecting
    ù# an exception.
 ý   if example.exc_msg is None:,  < ý outcome = BOOM
$ Ù# We expected| þ
:  see whether it matches• »elif check(� ,Ì  ¦ �, self.o× oflags)± SUCCESS´ 1Ano• `chanceÿthey didn't care about the detail¶ – ÿ & IGNORE_EXCEPTION_DETAIL¯ ù u_strip_»_w s-),„ ¨ H ï@ Ñ g p kr# ReporE, 
F3if   …E (Îif not quiet  Š µ rn ð_success(out, testDòi, got)?z„ ~FAILUREf „ failure„  Á 1 os += 1¢ 
 ‡Ÿ -$un²p¬ 	‰  §  Ã
k < ç 	s‚ ôassert False, ("unknown6$",
 )æ5if k =and<0 & ê^_FASTMVbreakQ  ÈQstore‚ ƒ� (in cas ö y were modifiedý �7 6 ·= original_ 
q 0corO�d return{ ‹number oÝ 8triUo @__reC _Ü(	!, 5 ¤ f ÍTestResults(, Mdef ]  s lGf, t41"""8  þR“ Ë 0faca °e given Doc€ 0 (`­ �`) generaX5`f`F ˜  û 1`t`Î dÙa~ ‚f2, t2 =Á_name2ft.get. v, (0,0) Ú ., [˜ ( q] = (f+S ;+t20 ¢ E+= f¸ K w åtïð__LINECACHE_FILENAME_RE = re.compile(r'<doc} " 'O À              ÿr'(?P<name>.+)'
'  @r'\[; ñexamplenum>\d+)\]>$')G ðdef __patched_linecache_get Às(self, file€ ñ, module_globals=None):K   @m = 2 ð.__LINECACHE_FILENAME_RE.mj (O „  9 ðif m and m.group('o C') =Q Ptest. m  8 Ú w &  es[int(P  unum'))]²  E sreturn " Ã.source.spliÖkeepends=Trueµ Jelse� J OsaveRý L!)
•  ’3runy Ñ Ò, compileflagsQ, out}q, clear‘  “ 1"""T  å tRun theæ `s in `_ !`,yqdisplay$ Ðresults using F òwriter function `out`.º  f Tb pare runj  z  ¾Rspacex .Dus`.  If` `Î °` is true (? �default),‘  Ì 6is S EwillF "bePed af°  @  ì  � õs, to help with garbage= QcolleÞ › ð  you would like<  )0ineˆ ‚ j F r  ¼@letew ˆhen use æ h=FalseD`3 ïq` givesl qset of � that sh™  beW Id by€ dPython>0r w€ CrunnÖé 5not? “specifiedn0it b …  â ’ ¶uture-imporD ¨ Papply5 `õ
2QoutpuÜ Deach—  ÿrcheckedŠž ñ `DocTestRunner.% _E Î � rÆ ‡�formatte$K  reÃ Å_*` methods.u MáQ =  Ï $ifpÿ 0is $” &áÑ = _extract_fH_: (X $ : U`stdoutô2ys. ¦  if ;w Pencodü'= H . D  i 4if  M 5 or q.lower( z'utf-8'ã  D ¥  ¦ .?	h D : ð# Use backslashrepl8°error handlÇ >on Q  ?  DWout(s›   s<Btr(sü $e(ë <, 'u 5'),ö ûJ   L� &(s) s£ t Âelf._fakeout4À    # Patch ó)pdb.set_trace to restore sys.stdout during interactive
  €# debugg  ð(so it's not still redirected[ ÷ self._fakeout).E ØNote that thei � output wN  goF W*our*< Rsave_ª ‘, even ifL Š  R GrealÒ g; thisD �allows usa 0wriŽ Ñest cases for˜ (†behaviorÄ † E=j 1get %()h $ E )= }'  'Wqer = _ORLringPdb(M ¡b ; g.reset€ 	o 1 = �i 
Š ð# Patch linecache.get ð s, so we can se¼øe example's sourc%�when we'rÝ2sid1 { q ’ Ú  f s _s / =ˆ  : 0 £ á 0__pÅ 5ed_$ T ë sMake suûñdisplayhook just printsAvalu,v„ ¹ 9 
 + 7ys.  ¬ Wys.__ &__ž Etry:<  {Pretur{ Rð	_run(test, compileflags,=kfinallH æ!= À Ô  m 8r5	˜ P úP †  P ˆ¬2  § 6   c ' ; �  	’ êif clear_globsF S  8. .( 0    æimport builtin8     ’._ = None¹/#/ -É ò # Summarization Z -/G Sdef s]  e(} , verbose=È )/1"""3  ð P# a; �y of all N6Ïõhave been run byD  �ó DocTestRunner, and Ù÷a tuple `(f, t)`, where `f` º ÜÀtotal number‹ dfailedŽsW  `t8 £  0 ˆ 8 7tri7 .Ä ï `The op|Cal ` ò` argument controls how det€ &thd€y is.  Ižeh it 2�pecified,§ n ¦ 	)*'s= Fused‰©#if* Ae isšÑÀ         verðbose = self._ver #
  Ånotests = [] jpassed Lfail ‘totalt = 	 Uf = 0D ƒfor x inx õname2ft.items():(  ˆ   É, (f, t) = x  Œ ™rt f <= t v ?t + f f0 šif t == 0~ ‚ €.append(‘ )< oelif f> 0=  ? Ì D .se{ Y= x3 3if ®
5 3if ¶
  È £print(len(# A), "t� had no ï&:"g  7   1 n.sort(  ÐPthingÔ, €  I „ q"   ", 3 
N 2if 1? ;  ¿ " ¾  O allÂ $ Á p, countÈ 2 ˆ Ç 2%3ds  1 q%s" % (A Ý Þ  #'
R Ö €vDIVIDER3 j  ö ö  ´  Lures´  /edî «T2in / 
™ }  " ç !of 3in è  ’ç ™è –1, "j` in", Ü  _Z52ftã .ŠD # -Y2, "ª@ andU xBf, "Õ D  ä 
ê W ¡"***Test F¦<***M  iO ÷í "O � 8 preturn  �Results( Q Ÿ 1t)
_/#/ -G ð Backward compatibility cruft to maintain doc™‚.master.? … -/G  def merge(ìw, otherë R  .6  … ² ±> + 9 0amešdñ V �# Don't ýõ here by default, since doing‰  7   # þ so breaks some of the buildbots6 j (gA Docþaunner.p: '" + é P + "'· ~both" \K  � "y�ers; summ}ˆoutcomesm +   ðf2, t2 = d[name]
        µf = f + f2
 	 št = t + t pd[name]8 ñ
, t

class OutputChecker:L 1""" "A # �used to c% Á the whether �actual oH ñ  from a doctestG ñ example matches5 ƒexpected7 I.  `‰ p` defin. !woF ¡methods: `‡ _p ó`, which compares a given pair ofa !s,E ðand returns true if� yœ  ;   `Z ´_differencee C ? ða string describ  7 Ôs between twoˆ .E bòdef _toAscii(self, s)… Ì'   tConvertv óto hex-escaped ASCII c  4 @ ¸  # ±(s.encode('7 ñ
', 'backslashreplace'), " 1")
³  « z¯ ÿwant, got, optionflagÄ R{" Tz{ ?$n 4q(`got`)‚  Ò D0 (`�  `).  Theseì …ings areA ò always considerÙV òare identical; buÇ  `dependëson whatõ  ö  K ÷ò runner is using} A òseveral non-exactz@ typ¼ðre also possible.  SeeX Á �documentam± for `TestRr `  moÂ Rnform& 7aboÅ ¨³ 
,e R# If O +Ytainspöcharacter such as "\u1234"ì #¸ nG i›3uof six E ös(e.g. [\,u,1,2,3,4])› @# OnL ! ouahand, Â could be an @sequ´7 ofÎ j ° [° T], so¤ ÿ q0 shY B rbe fold0z%‰¾  go� Ý.ë6gotÔ ¶: = "   z 8q# Handl ìñ mon case first,÷¦efficiencyB#Ö$'r-Ü#,  ¸  if×@ == Œ S  � 1  É  #wr valuesä PcFalse W1d 1d02 .rh? Ï pbooleanî ùparisons in Python 2.3« Rnot (ÚŒ÷	& DONT_ACCEPT_TRUE_FOR_1_ µ @if (¾ ä )í  ("Ö «\n", "1\n"0  4 µ ã º   L  þ M 0M N ð
# <BLANKLINE> can be usedó as a special sequence to signify a
  õ-# blank line, unless the DONT_ACCEPT_BLANKLINE flag is used.E àif not (option$ ?s &B %):6  ‚ µ# Replace <e ÷> in want with a¢ s  = $ ð= re.sub(r'(?m)^%s\s*?$' % uescape(\ ™_MARKER),†  M  1'', )$ a# If a(   ð
got contains only spaces,=€n remove E & 
È  L Ç À[^\S\n]+$', ‘ :got� 1if 8 =¬ 
V Ì Åreturn True
„ b# ThisÆàcauses doctestðignore any differ7sî 7theD  ø Ñents of whiteÕ à strings.  Notü @at to acan be4F  inA@junc5ì y�ELLIPSIS¦ ):if _úNORMALIZE_WHITESPACE ú ' '.join(got.split()KH)   * u&)e × P sayss le$e¥P"..."s`† `0Qmatch�2subl( Ogot`'x 
Ñif _ellipsis_Z (p ,T£MáWe didn't findœ L #; ~Vfalse�  F •ò# Should we do a fanc?ü ¡def _do_a_ _™R(self¤± ,¾ #‰Ô¹y asked forj ¡ É
iñ (REPORT_UDIFF |—   - C- N- ¹  Z ,  †ð expected outputY$s Îç, a meaningfulP5 is» ð# too hard ... or maybeÆö.  In two real-life failures Tim saw>1# a,! wt major helprway, so“is commen¹ u�# [todo]’p) knowsdqch piec°p and down	Ž And cQb‚Pe basñò‚kick-ass² "in™ (ca£-##iBx  I ‚ 9^ ##¨¾nÀ@ doeW0traw� m� marking77 ÉGevenÀ Ä&1-? Àrences.
    ð    if optionflags & REPORT_NDIFF:
#  Åreturn True
 õ0# The other diff types need at least a few lines to be helpful.H ] ýwant.count('\n') > 2 and go … °def output_€ ðerence(self, example,> ,è )Ú 5"""… Râ ða string describ 1theà ` Õs between the? ƒexpected� Ä for a given‹ 3 (`• !`)Ø  X eactualG Î Ç (`got`).  `¢@` isu d set o½ ¾EusedG Àto compare `W`p U .% þ  % $ =ª . ( ð# If <BLANKLINE>s X  be v ,” ò n replace blankñC HwithE ! i@  6|£ ‡if not (õ  & DONT_ACCEPT_— × µõgot = re.sub('(?m)^[ ]*(?=\n)', 8 q_MARKER()W @ p# Check$Âwe should us		¡  oÁ._do_a_fancy‹(BT |e `Split -   &ªR into=e  +  # _F=0  .s;   (keepends= )v 8 5got7  H6 3# Uë 0lib·@findçiê

£ OUO š  ²! =Y¶lib.unified>· D :n=2Þ H Plist(T q)[2:] #Èp´ c y header > kÙ 3= ' , ­-Ó+¥'= /elð Cð bcontex¹.å ²/, ð H ð ï ³followed byŸú 9  dgengineìðDiffer(charjunk=· ÿIS_CHARACTER_JUNKîX .êE)C ónw  ì&se6 Ó   âassert 0, 'BadJ©
0ß'ö  £Ñs (%s):\n' % � p+ _indeûb'.joinË	‘�If we're us Â psimply õÏµà# output folloówed by the actual output.
  õif want and got:    ñ	return 'Expected:\n%sGot Ð' % (_indent(D 4),  Ugot))K #elf ^   nothing\nc S b 
S ° J µ R  ¥ Q /seŸ 	M  ò'

class DocTestFailure(Exception)W D"""A$ ñ example has failed in debugging mode.
� TThe eL ‚ instanc: ¢variables:+ q- test:ïŽ   object beW 4run* ‚ - E� - Cthat— /  kX 	G¡ 1""" ñdef __init__(self,� ,í ,` ] # .± ! =) E    $ =? 
 Pgot =Q ¡ | 3str{ g Ä1str• r )´3UneÛ¯¹õencountered an uL °ž Ãs‚exc_infoóS!fo]ÉK gÎ*P î¦ :Ø%DJsRunner(
 ² ±r"""Run doc|°s but raiseË as soon asþqre is a$ur¢P   If7 € occurs,  n  P w d“¡It containt   ,~ 
 L d †originalq
 Ga >>> r8 = Överbose=False§1 ‘5ðParser().get_doc !('Y ,áKeyError\n42',F{ 1...  ’{}, 'foo' |.py', 0’ "ryBM Z Ù P.run(• 4  " Á q rP   †rure = f{n  ê  9 ¯ o ê OTrue1 Ã.º1 k'42\n'3 o  :  � , ïËÑ[1] # AlreadyMð the traceback
   óTraceback (most recent call last):
* V  ... ”KeyError
 ñWe wrap the original exception to give  ^ °ing applica  F `access.  H ñtest and example inform2 .z !IfV ðoutput doesn't match, õn a DocTestFailure is raised:F a  >>> r =/ ðParser().get_doc D('''®   = _x = 1   2  â''', {}, 'foo' Œ.py', 0)¬ *ryž Š °runner.run(® )c �ß Nas fJ f,5= fy Gþobjects provide ¾`U .œ  †  £ ETruel •As well aT  V.wantT U'2\n'U  M Zractual 4Q (goH 1H SIf a Í P or eq occursuü	 globals are left intactl 1delu.0 ös['__builtins__']Ç  ` -(  …{'x': 1}â È4œ „ 7 þ s 1...  Á¬—&¥Ä.UnexpectedEƒ3: <¿� foo from	 „.py:0 (2d;s)>L£32£0But˜	#‘cleared iÍ£"noX4  ¥)Ý¸3°estResults(ýed=0, attempted=1Ä=estÓ*2"""�@def ÔQself,1ð, compileflags=None,Ð
 P_U=WÉr<R.Z U v, FalseN7if b =!  ž Ô .$ (7 sreturn 6Õ ueport_u°_¤Bion(“ 4outò â,X_Ö  Ð ø ð, example, exc_iñ-nfo)

    def report_failure(self, out, test, example, got):7  ; ãraise DocTestF= 2  ?

# 2p
## 6. n ¯ Functions\ 6õ These should be backwards compatible.

# For  ôility, a global instance of a%ñRunner
# class, updated byjðmod.
master = None

  T`mod(m= c, name  n s cverbos ¦ªá�=True, op9pflags=0Ý7traG 
9  ãð _on_error=False3 ²clude_empty ?"""¥ z™ y    w” = -ex› è6Éás in docstring fPB andŸÁes reachable_ ôfrom module m (or the current ñif m is not supplied), startingI ò with m.__doc__.¡ AAlsoo  { Adict7  ñ __ if it exists· !is_  {  )(. . Amaps:Us to ð ,í  ù ;H $ \ ²51are¯ ped evenŽ   œ  rprivateJ W  4 pdirectl3s< gy wered “Return (#¡@s, ##s)! ÀSee help(doc ó) for an overview( Oúðal keyword arg "² q" givesÑ   ¶ Î mî;¡qdefault1use[ + Á^ Z_ !a Ä to`bused at  & "al¿ when execu1… $, ‚  P ²__.  A copy¸    ‹€actually5 d ×h , zJhat  '� 5Ä ½Àa clean slat e $ex_
€ionary tw t]±merged into�+  B9#to$e"Q.  ByC ¬0, n& $tr–s‚ @ p.  This0new?2.4'
^Ð" prints lotsoQstuffÂ^ † Tonly ´ " f?
Èðit's true iff "-v"“ ¿in sys.argv” 
¹“ `a summW!at;Aend Oðtrue,
    else pñrints nothing at the end.  In verbose mode, ðsummary is
    detailed, else0 ñy brief (in fact, empty if all tests passed).
E ñOptional keyword arg "o ðflags" or's together� áule constants,G °and default, ð 0.  This is new in 2.3.  Possible values (seeÝ F ƒdocs forÛ 2s):¥  î ñDONT_ACCEPT_TRUE_FOR_17  •BLANKLINE öNORMALIZE_WHITESPAC …ELLIPSIS. ESKIP �IGNORE_EXz ¥ION_DETAIL  ÌREPORT_UDIFF C N òONLY_FIRST_FAILUREú Ÿñraise_on_error"  ‘s an exce¼5 onWøfirst unexpected& ¢r failure.°dallows Ì!beØ ópost-mortem debuggedEñAdvanced tomfoolery: oñmod runs methods of a local iBQce ofa �class doc¨q.Testerù€n mergesÑ A reseñinto (or creates)D rglobal = b U  maU F.  M� 
 F ðcan be called directly too,Lðyou want to do soÝ  Ã�unusual.E @Pass €report=0.  Ú  ðis especially usefulÞ  n,& QdelayD pdisplayG #a ÿEvoke+Ö   Cize(; when you'r2 ²ne fiddling§ 1"""k :L }t# If noó€was give¥  T Âuse __main__L @if mòQNone:V  ›ð# DWA - m will st 0be &  Ot(�wasn't inÚ `d from‡ commandM Pline,Q‘which casA0 fo» +PTypeE Œ `about » 1ood#  P °as we shoul # ôm = sys.modules.get('ô $')' Check thatK ‘were actuÝ2# aE( noí  Bt.is` 6(m)6Ô Ë #("<:J õ required; %r" % (m,)’ ¹_name · it 0's & ˜  3 !is��  # p = m.__ $__ú ÐFind, parse, 7runli…6¸ j Àfinder = Doc­ H ±er(exclude_·= Û "ifîþ¥ BrunnT  žR =', Û= , IQ ¥ S H Ð ¼ ³àfinder.find(m,Ñ name, globs= q, extra = C):
  ñrunner.run(test)
 �if report) ¦summarize(+ æmaster is None3  "= e Z =els" r.merge(& W óreturn TestResults  £.failures,W Ð.tries)

def Ä Pfile( ñmodule_relative=True,+=¯ ’, package ¥  K' cverbos' M êoptionflags=0,C va ð raise_on_error=False… €rser=Docó  Pa ,()L qncodingJ Å1"""q  7 ð examples in the given B.  RS&(#B#02s).öOÇ ûal keyword arg "@ñ " specifies how]  is† òshould be interpreted:_ o  - IfQ  0is •  (³ �default),Á 0n "½  ` æ š� "a ž -Þ³ path.  By I  H !is " i¥ E 2  toj ƒ callingQ ð's directory; but if' å @ "7"&Pument› dw Aen i 
l &atF E ÷.  To ensure os-independence, `6useD ò"/" characters to separateö 0segŸ ds, andB 'no† Äbe an absolu6 `(i.e.,Á ômay not begin with "/"5Ö	Ü8theÉA%anÇ 3os-=c·  hÂ  ‚  ¤ ¡ 5or S5(toD  @@curr�@workÐÇ± æc0sè ! oôU5; bSp 1use)   p's baseD K%8´is a Python„0 orU a  N  ‚ $ VwhoseŸÒ‘be used aÁ C  • ) Dfor 2A Á  l  . ž%noŒ .–eÓe- ‡ Œ ˆ ‡ ·… s† 41an ! à‡ 'y @Lvˆ! ""î`a dict7
Bý"al3wÃ`executUh,À {}.  A copy½0thiJcm òpctually- dðeach docstring, s�:at  'ˆ y ð start with a clean sñ)late.

    Optional keyword arg "extraglobs" gives a dic+ ñry that should beH ðmerged into the = 2als+ ñare used to execute examples.  ByC  default, n& 5traE @ ´ 
óverbose" prints lots of stuff if true, q Ðonly failures" ¥false; by Œ Ait's: ÿ	 iff "-v" is in sys.argv” 
ereport“ Áa summary at&�end whenb ,• Celse¥ ‡ nothing. c.  In ë a mode,I X !isE ¡detailed, O ðvery brief (in fact, emptyö ÿall tests passed)Ó 
o1�flags" orpogether� Òule constantsÑ 4andOsñ	0.  Possible values (seeÈ ’docs for Â 2s):§ «ñDONT_ACCEPT_TRUE_FOR_1ð  •BLANKLINE öNORMALIZE_WHITESPAC …ELLIPSIS. ESKIP �IGNORE_EXz ¥ION_DETAIL  ÌREPORT_UDIFF C N òONLY_FIRST_FAILUREú ¡ñraise_on_error"  ‘s an exce£0 onS’ øfirst unexpected& rÔ. This allows ³äÿpost-mortem debugged,
ñ parser" specifiG�DocTestP A (or¡ ’subclass)1\7Stract©@fromÝ 0 fiC*	‰encoding† $n  p Š b«bconverª i  ¾dunicod>aAdvancÙ¡mfoolery: ¤ ñ mod runs methodŠ‘a local i Qce ofs ú @ doc†.!er×!n W F€e result| to8‘ creates)D p = b U ¦master.  M� 
 F ðcan be called directly too,*€you want	Pdo soÝ  ¡�unusual.E @Pass ý =0.  Ú  Ais e@allyÝ0fulÉ n,& Cdela`isplayG 5üEvoke+Ö ýCize(YPyou'r2 ²ne fiddling§ 1"""¯ :L J°if package ¾3notÜ¡_relative:;  wz  VÈEŒ3("P; Amay c%bedÝrmodule-€  E  "i ’ paths.")š 2# R‚ "iz1  Œ Qtext,Ðname = _load_y ¼Ð(filename, paÿ
ckage, module_relative,
  ñencoding or "utf-8")
: ð# If no name was given, then use	 q file's$ .6 !if ‘ is None:  ˆ G à= os.path.base (B  	 v rAssembl` uglobals\   s]  A= {}p 7elsz   q.copy()' �if extra  U ;not¶  †.update(- @ 0'__½ @__' = 1in 2 ÷  [' â] = '__main__'jöif raise_on_error? ñ runner = DebugR “(verbose= ç, optionflags= ¦ 
Q oocTestS :e# Readò, convert it to a test, and run itÁ  ð = parser.get_doc b(text,<,A,[ \2, 0É » P.run(4 1 =\eport5¶.summarize(+ `masterì
ž =¯ 1nerå 
9" r.merge(‹ W qreturn Ncesults  £.failures,W À.tries)

def  ÿ õstring_examples(fßb=FalseŸ="NoName"Ý
rcompile è 
""0)+1"""è  ¹  € 1 in×íÒ object's doc©   (`f`), us5`ß`G  "®1  O’Ðal argument `Ì`z@usedg ƒ messageå!If€ Ç	A D Ctrue‹ñ generate outputŒ aeven iJ `re areÉp "s.v`'`Þs{ qset of ?ð  that should beø@d by( i sPython K 0r w  5theX". O²t specifiedÀ G áit will defaulD = Š €uture-imç˜ �apply toD ŒÞ �pkeyword‰" `VÚ `‰ s@Us forÚ  c Å  ÄZR.  Se—1docÖax7 `0 Amod` Amore• ainform' ur# Find,*1all<s! ˆÛB BfindÂ H .errrecurse?B N; ý É%0est¢ Œ .  ¹ ã¿=j 7  %er¾ 3¦AšO)

# À############# ÿ	
## 7. Unittest Support
/  C

_uZ 0_reY ÿflags = 0

def set" (( ô):
    """Sets the O � option ( !.
( qThe old ñ is returned so that a runner could restoreX 1oldD òvalue if it wished to:` €  >>> imÈ @ doc15   { = .× . @ .ãREPORT_NDIFF |: 0... 2 ðONLY_FIRST_FAILURE) ==E HTrueÒ ‹ ³  ; (Z Œ ¢ ; •  Ž ROnly '1ingÇ€s can be)	†´ ?•ELLIPSIS)g óaceback (most recent call lastlS  ...3 VŸError: ('ž Ïallowed', 8)SŸ 1old–[O Š1"""Ô global é¿ 2if |2 & »ÒING_FLAGS) !=•— Y fraise )/("'	"",@ ”0Œ  \   ƒ Ï áÚô

class DocTestCase(,. )C zð __init__(self, Ì,UT0=0,upUp=None! barDown   ¥  qchecker h   … .z  )  ˆ R._dt_Ú… ( =“ u + u 3 = 
 #  Ù ! =à  rsetUp =é  "teô @  & A< >; g P !lfÌ  ~ 3  ã iñ ?  ¦@not cU + ã ( (H a | ™  'B ‚ + …  £  ” .R‡s.clear(¡ 0runu   L   ¥sys.stdout�ö new = StringIO(3
*3 Àags

       ÷ if not (optionflags & REPORTING_FLAGS):
  b# The 2  3 òdon't include any reporting" ,B üso add the default2 	1 m l Ò|= _unittest_g  
2 ñrunner = DocTestR ä =Q 
› è  óchecker=self._dt_ ö, verbose=False)� :try3’ õ.DIVIDER = "-"*70²  k ófailures, tries = 6 Irun(*  .  þ ô, out=new.write, clear_globs”  ,   kfinall— ösys.stdout = oldÂ 4if � Ê Qaise ! AExce>( cormat_ (ž ³getvalue())%Zdef f)  = W, errn å " =n  y  
0if  ú .lineno is None®  °= 'unknown  … number'K ?els9 X%s' %j 6 ñlname = '.'.join(�   õ.split('.')[-1:])4 ðreturn ('Failed doc6 `  V %s\n™  º  Ò'  File "%s",Ä a%s, in0 N\n%s4 &% ‘ ,a P.file  C Ano, Ä w¤  q   ¬Qdebugàžqr"""RunÅÅ �case withQµresults and Pcatche4ss!  X Û® ¤ frameworkYAs a Š ¢ method on*  y sÀ  u “ Ðsuites to sup’Â post-mortemM Rging.| 3 HcodeL  is‰ lð such a way that­qors areEacaughtK !is& aH ±caller can 81errC ¿nd initiate¢ )ÝCu}provide!§ r³	¥Unexpected½Í  V@herePEan u* Ë ¿:– R  >>>’|ÓParser().get_î ('( — P KeyE[\n42'‹0...ˆ ’{}, 'foo' v.py', 0`,  ^   %*  ­ x  D .q(8  "  LJas f‰T I = f< SK �contains.  ,
 €example,_š Q@origî ¢ 9ion§À   >>> failu°re.test is  (
  ZTrue
 ú	>>> failure.example.want& o'42\n';  §exc_info =F  
B  h draise 3 ú[1] # Already has the traceback? T ú
 (most recent call last):0 :... ‰KeyErrorÄ !Ift ðoutput doesn't match, Ân a DocTestF$ XÇ )d:J    á  r$ =3 ðParser().get_doc J('''™ 2...£ A _x = 1  	 2 â''', {}, 'foo' Š.py', 0)3  ~ Fcase¿ PCase(´ )ê .ryr È  D {.debug(b  é dexcept!TOas fN š ^	… •ð
objects provide access toÅ®] 0€As well ­] 4` 	# WV1and´ ractual š] 	,go«1ª6"""=§self.setUp `runnerû ¹R Ñ(optionflags=6 G_dt_ ,A ý vchecker;  ö , verbose=False%… U.run(o  Ü, clear_globs5 * “tearDown(ªadef idF qreturn 2  Ë  \ C.nam 5 a__eq__9 w, other@ qif type )2not *  n @NotITfmented‡ 	� 2 ==u .Ÿ  \h5 �
<  C 

=  7 r
:  = 	
<  "ŒChashŽ‡:  (Œ.ò ,ãË  ¡ »Y� )Pn__repr�  A& =s V§.split('.'ãƒÐ"%s (%s)" % (A â[-1], '.'.join D:-1]� ¢__str__ = ê. .Àef shortDescóription(self):
  ðreturn "Doctest: " + $ P._dt_ ÷.name

class SkipDocTestCase( U Ádef __init__m ƒ, module   x `  # = ’ S .I aNone)
*  g QsetUpd \ @skip¤ (Ø  	 ÷Suite will not work with -O2 and above"]  û _H a Gpass„ �hortDesc` 9Pping X Âs from %s" %m0.__m"__` »__str__ = sf 
�_.à P(unit` .ó "):K  /p_remove qAtIndexÛ 0, i Câ 
4 	_ ¥ =†s, globs Xextra  …  _fX r# ´ û 1**o‘sy 1"""% ’Convert d‘0Cor a*d to a ì !   sà.ì bThis cG `s eachM `umenta@ strŠ'inS 1hat €contains3  Æ _ ss ñcase.  If any of theC  7 !s ^ 4docn Pfail,$ n W  C   ±s.  An exceH �is raisedÿw² @the !n P fileê  ²    ~ ÒE õ(sometimes approximate) line number72e `ãQ` arg1‘ providesµ   !beÂ …ed.  The0 t Çcan be eithe·Ã Æ x UIf noA ‘ is given,P callÚ z sis used: AÁ  M@ may| · Åd as keywordc s?± ð   A set-up func%Ø  is�  „ àed before runn’ î 	ðk ”.` Q }0be ^Sed a \‚ aobjectw e� UŒ  QRacces‡ã o0alsá ‹   °s attribute 41 x ;ƒtearDown}  A  U-down± ‹ 	_after U  f T > ?1!diü8aryV Ì1ialòñal variables for _sYˆSflagsW \ ‹Ó$  % p expresæ°as an integ• * G !ifgT – †Ç ƒ  =ZÐFinder()

   ñ module = _normalize_m ( Ñ)
    tests = €_finder. % �, globs= q, extra = !)
J aif notI ñs and sys.flags.optimize >=2:-  { ¢# Skip doc… õwhen running with -O2. AsuitÏ €DocTestS (Å  N   @.add (Z ) CCaseÎ )/ qreturn 6 À … S.sortV   AI r “ 1forë 1 in sØ pif len(P ö .examples) == 0$  ² �continueP   Bš.filename3  # =à0.__ %__E I    @ P[-4:]} j".pyc"O  , ) 4 =  Y[:-1]Q Ì  * % ,~1z ; @, **Cons).
€Ñclass DocFile7 C "):¡Ædef id(self)È I �'_'.join P._dt_y .¤.split('.'}  J �__repr__1 P  f G û ‰ fU‘t_failureE ^, errJ „('Failedé/ @`%s\n  ó õ "%s", line 0\n\n%s'\ ¦  !% g –  Ý /, ª � D 0)

ý j+bpath, ý_relative=True, package=None,M 	 ƒ parser=·P .()4 ‚encodingS Ò"ifq@ is Y   þ m Q = {}ˆ Nelse % c.copy(h$ifÅ ” ¢ë F òraise ValueError("P ñ may only be specifiedÄM !-"•  ¨  "T j3s."š 2# Rm 1the .H 0doc| th~AloadÍ …(D   ˜·p� ¤ or "utf-8� Dif "M"Ê"inŒ!_[' 1] =¶ p# Find Ë  « prread it×  °` = os.Æ A.basãÔ ñ Convert it to a.,L @wrap Hin a,]  ï�  ˆS.get_Y(N»  , ƒ  ? ó0A} L ´	5*Ã s% #kwô�"""A unit? Z#0oneoEmore !"s.8Tü ð Ieach%  	ðgiven as a string;e*ð
interpretation of that stñ-ring depends on the keyword argument
    "module_relative".
 ýA number of options may be provided asT "s:? V S N  Ifp � is True,¤ © ógiven file paths areB ’interpret Ros-inç Bent v -Ì > S.  By? qdefaultl s^  3  toˆ P callCR $'s@ ñirectory; but if- •"package"[ Õ ‘specifiedn nB @theyÐ r 3at E Ù.  To ensure à 3ce,E "òname" should use "/" characters to separaté < 0segýas, andÓ0not×“an absolu0 ¤ (i.e., it& B  begin withs )1ÞOFalsß&FcÌ5Theº‘·   &or](Ð0urr"@workØdÉ¿ ~C „A Python•1 orê t a  ewhose V G � be 0 ˆ(ba+ C for¹· ÷.F  6Ÿ "Y °]� ´ < "us9ˆ � n`s.  ItG `an err"o ‹ &y #if9 ] < 5SsetUp- ÐA set-up funcq 
0his4  Û àed before runnÅ$thÑtests in each:P. TheR UQ P willë1pasr DocTes
�  objectw ; cQccessl q € globals‹   €s attribKo$1 x ü ttearDow A  _-down_after U  f T > ?1!diü¡ary contaiêsinitialr¡ variables= Ì _sY¯Dflag·[ ¸0doc* Ò $ b exprePs an d3gerN eparser  2P ô (or subclass) that‘ô`to ext”C  € as fromI \¹ ƒencoding* 4An  [ ¿Å to!DvertH Àes to unicod¡e.
    """ ðsuite = _DocTestS 1()
 ð# We do this here s óat _normalize_module is called at the rightG ð level.  If it wJ -  in DocFile~ ,: np ƒfunctionC €would be" j  r and we mj a guess òpackage incorrectlyõ Áif kw.get('m¶ ñ_relative', True):n  !Ckw['I  ']!ò (K & )6±for path in sU n@.addí (ù (1 d, **kwG qreturn 3 ?

# 2ÿ	
## 8. Debugging Support_ 5ó
def script_from_examples(s[³r"""Extract)  ) ´ text with 3 .„¿   Converts%  Ã to a PythonP B.  Ev ” input isÕcI  ed7 Çregular code4 0out5  [åall other wordF Iare J •comments:² 2>>>­ T= ''' 0...Z@   H H í ` of si+R math¯X   .. >   ó ðhas super accuratö0teg 5ddi@K 	 ­ ^2 + 2¨  j 5     öAnd very friendly error message Î  ƒ ?1/0_ ¿To Infinity! ?And IBeyo ' õYou can use logic if you want½½ 
Hif 0*   öOblah ! :   _  oHo hum  ƒ  joprint(§ ‡$))- #©#4  ’ ŸA 	‹¥# Expected^5## “5 #u  ‰8 uk }  ##i ð *# g\ ” ]5 	I8   7 4 i 
ð
<BLANKLINE>
       """
  ð!  output = []
    for piece in DocTestParser().p	 A(s):+  / áif isinstance(9 —, Example'  + ²# Add the e  õ's source code (strip trailing NL)g  @ ª r.appendk .@ Z[:-1]- m cpectedê »  T 0wanü ¸ . 	r 0if  
3  7 
‹ R'# Exe *:'‡ - Á += ['## '+lela _ Á.split('\n')Ê ‰ ; Jelse~ Ø Cnon-Ei text.· ž q þ _comment_line(l�  f ö‘ 
’ a ò	# Trim junk on both ends Swhilef4 anq¶[-1] == '#'Ë £ R.pop(” = 0< 
0= ‘# Combine^\ ,ƒ ƒreturn i">àa courtesy newð to prevent exec from chok‰ò(see bug #1172785v \  ¸b.join(y @) +  ¢

def test¥Ä(module, nam¡"""Extractº  - sƒ Qa doc 0doc ñng as a script.
˜bProvidþ f € (or dotø p 1 ofb  �) containÞ 1theE f áto be debuggedC ±C y(withinH W aobjectG  % # Cdoc ²   
 ia 91"""; � â = _normalize_ <x © 4s =�AFind�Mfind)  Ùtptp< Qif t.Ô !==�raif not³ªðraise ValueError(8 0, "* UfoundW "Ÿ ! =F "[0Y v Crc =·___Á s( .àF ]  2srcL—÷_src(src, pm=False, globs=NonXDÄ )^ingleG,¸ @argut `src`'‰v ° 2src¥ ‘ ‹Æ ˜ ’ )· & " º ¸  „ /".   1 isZü,	btring.B¢import pdb"ifÏ+" = S.copy�
k' %{}I &pmF 6try  C 5–:     jexcept4 üprint(sys.exc_info()[È0p =Ï ò.Pdb(nosigint=True‚ \   sp.resetÌ     `p.inte_@ion( ð, sys.exc_info()á[2])
    else:
   ó#pdb.Pdb(nosigint=True).run("exec(%r)" % src, globs ò)

def debug(module, name, pm=False)g @"""D& ð a single doctest �string.
‘ ÂProvide the S ± (or dotted] 7 of À) containing E Z Rto be� pged and  C q(within f )W aobjectG  % # 2doc¥   Zests ` .2 1""" T â = _normalize_ (ˆ ¨ asrc = 
 Source! I' a�_script(*  Š3pm,"ß.__dict__)

# 2ÿ
## 9. Example Usage[ 5Àclass _TestC ":ÁA pointless * ð, for sanity-checkê&of:=BrMethodsW  àrsquare(L  Rget()o7>>>‹ Q(13). ( + 3-12 ¤ 1  ; Fhex(Ê ? n H u a'0xa9'6  "	  :ó__init__(self, val0 ¦ ˆ"""val -¡  ž‡passociaPvalue@ F @    tƒjB(123‘   xprint(t¬   1123¤   ±    ¨ .– =m C É õ   
Â  )Ç   � <'s Ã R  j  ¾ Z
¡ 5169 ­  ™ ¸ E** 2. preturn  y  Ë  ÿ  
È   Å 4 Å 	„x„?-42„x„&-4© 	× ‚  ¤  Ó @

__v__ = {"4'":Ã,õ  ]"Î@": r[    ý of¶¤€, searchVBs-isüB  Ä þ g1; y =y
+ ' ©+ y, x * y« + G(3, ;  
 B""",Ä    ÿ"bool-int equivalenceò  7  €In 2.2, H ÿ
ean expressions displayed¬ F  
 ò0 or 1.  By default, we still accepq -  	ñ them.  This canààisabled by pas^	” À              ÷DONT_ACCEPT_TRUE_FOR_1 to the new
-  ÿoptionflags argument.: ¯>>> 4 == 4/ 1& U OTrueX >¬ 0T @OFals¬ Y""",
‚ ù"blank lines": r"""   ÞB# ý can be marked with <BLANKLINE>:<  @  zÿprint('foo\n\nbar\n'). ?foo g   ?bar 8  ellipsi	!If'  Ü� is used, tn '...'&  . tÏ ðelide substrings in> ÿ  desired outputMÿlist(range(1000))) #doctest: +ELLIPSISù[0, 1, 2, ..., 999](  ðwhitespace normalizaà5,7 < 	‚  8¡difference"K ¿are ignoredRs&3$ýNORMALIZE_WHITESPACE†  Š 0ð3, 4, 5, 6, 7, 8, 9, 1Oï1, 12, 13, 14,G ð 15, 16, 17, 18, 19, 20, 2�ÿ2, 23, 24, 25, 26E Ÿ27, 28, 2µ ®  �}


def _"()O`import�Rparse 5r = #.A°P% �r(descriÐ#="d‚ runner"ÆC T.add_ìð('-v', '--verbose', ac4°='store_tru �default=Èõ ‘   help='IP very  W /� for all ï s]— o— ¡– append'ƒ ôchoices=OPTIONFLAGS_BY_NAME.keys(), Î /[]H Ë Ä('specify a T“ Ÿto apply'Læ4  '™ ù  –P; may¦` Žied moreH À            ð^  ' than once to apply multiple options'))
    parser.add_argument('-f', '--fail-fast', action='store_true',
B  `help=(, ñp running tests after first failure (this'� M  °' is a shorß ÿ	d for -o FAIL_FAST, and I `n addi!qny otheO ) 
ÿfile', nargs='+'	'0 r contai#he to 'Œ O $ =“š •"s(  A J @s = + . 6à# Verbose usedÔ ðbe handled by the "inspect; ò
v" magic in DocTestRunnerÉ €# but siAPwe arX  Ã1arg–   @pass ñit manually now.• v“ ­   eA = 0  Ë  ’ Ü  :   ò
s |= OPTIONFLAGS_BY_NAME[ ]/  ifä  s.__¾F 84  ‚  O@name„ l< 4if " ö.endswith(".py")%  « B# It­ñmodule -- insert its dir into sys.path¸atry toŒ  D   a# impo6 a. If iV ðpart of a package,ï«t possiblyC ðwon't work because= ; a s± t   0dir,ï B = o« t.split(˜ 4   Ð .í 0(0,ì  K 
( bm = __Ü %__M Z[:-3]* 5del&"[0Þ j    Þ‘ures, _ =Nsmod(m, i= ,òbflags=(sg Jelse¿Y  ï § 1, mÖò _relative=False: ™  
• �  s$s¤ �return 1í �0


if __rò__ == "__main__"?  ¢`exit(_àB())
† e³
from typesð! MappingProxyType, DynamicClassAttribute


__allt ! [“  —'EnumMeta p', 'Int   @Flag 2Int B @auto Xuniqupó]


def _is_descriptor(objŒ1"""G R)Òs True if obj›6 !, ÁBwiseB ^(O  Ø   ahasattq ÿ , '__get__') or' 
s' `deleteQ 	N )ô `under(êð):
    """
    Rñ+eturns True if a __dunder__ name, False otherwise.
    """ r@ ! (     @len(< ™) > 4 and   q[:2] ==b A[-2: O'__'. 2] != ' $-3  	i Á)

def _is_sÓ • :% Á RÁ 	- ÿ 32Ñ 0ñ 
!-1 Ý 1+þ 
 2:D # Ü  „  Àprivate(cls_w ,{)ò# do not use `re` as áimports `enum`] €pattern � %s³'% W )% /if1= 5$  ¢   1and� Ã.startswith(e M  %   ) [`" ú * í[1 org %[-N_ 	 f Ò § Belse' _ñmake_class_unpicklabljV kñ Make the given 3 E un-4 
[¼óbreak_on_call_reduce(self, protoc ð    raise TypeError('%r canØ1be e `ed' % ? û Scls._V Ÿ_ex__ = _s 
. amodule+ ò'<unknown>'

_auto_null = object()
å   DðInstances are replaced ýð an appropriate valœcn Enum6jsuites0( &= ‰ #

€ _; “Dict(dict4‹ `Track áÐ member order¹t ensure  9±  U�reused.
 a ‘Meta willH é1 �found iny"._e †si1theC  ‚ yerationq 
æ q_init__	Î  ”super()._  æ ;elf{ A= []y   Qlast_H/s   oignore  á£Bed =2¯ ssetitem² b, key,Ø¾ � � PChangqnythingž˜!edÊó ot a descriptor‡ <  IfB NG0 is—�d twice,#  '  :²d; duplicat� L  ¤ ó™checked fq qSingle c sc"(C)q2`reserv0 X   ð i§¦ ¢&._¬7key) = ™• warningsÈ   .	 
š  à    "private vÿ+ariables, such as %r, will be normal attributes in 3.10"
  ¯% (key, ),# ÿDeprecationWarning( Ïstacklevel=2" )` Ðif _is_sunder~ %):  ¦  if key not¿ (      ñ'_order_', '_create_pseudo_memb 9 Pgener0 ¢next_valueG rmissing Pignor F ²  ’ praise VO ö!Error('_names_ are reserved for future Enum use' I ÿ _== '_¬ 
. 3 ²# check if þ ðs already defined*Zauto(l  = �if self._  ~_calledc  * ã BTypeâ "  P mustŽ{ dbeforeš "‚ 0set³(‡  Ðö  1', ª
= (el-³½ áif isinstance(I _, strÇ  è ! " =r ÿ.replace(',',' ').splitI Nelse| Q Blist 
È  $  ý "._Ä | |ÖD= seJ ! & @ ÿzd $if¨ áÄ�  ª  '® P_ can®tspecifyd  —  _: %r'L 
3% (Ü ., ¸ r    þ JdJK1._'û  n nS© a   #in#_
H õ# descriptor overwriting an enum?V  Å iJð'Attempted to reuse8  % ÷ 	– 5
� Epasss É  ¢.¨ ‹
9 Ró 
  » #Ï 
ã ü 
è  1 ì %%r"#$asë  ,nf[key])ø  L É ¸Ê #ifÁÏ"= âNnull×  ^ ) .  b Œ ’ A    Ny   1 ' 1len	.ÉÐnames),
       ÿself._last_values[:],
,  ) H ýauto_called = True- f 1 =  . 	$ I úmember_names.append(key| + ¼ * V , ðsuper().__setitem__M ,„ ²)


# Dummy Á for Enum as ñMeta explicitly checks' ö
it, but of course
# until9 ñfinishes running the first time n ðclass doesn't exist.
# This is also why1 dre are‰ &inn �like `if  7 ¡not None`
e = "

m    Þ q(type):‰1"""   &   @ amethod ñ
def __prepare__(metacls,  Óbases, **kwdsj  P#Å ð that previous e~  Å j  8 ^ !._�Q_for_! Cing_9 (y r# creatw_•pace dict\  ~ _ @ = _#VDict(D   Q._cls¥  =ç B ‡# inheriÓ óflags and _generate_nexw¥_ functionD Æ _š,0_y 5 = ü ¿get_mixins_í (if9 !isH ê H   W ð /['œ Õ'] = getattr(   :  ÏŸ /, D ,y[[areturn ’ 
o [?newWŒ ²ba  &  ¡final oncej  �@ion ös have been defined; iP# can�ðbe mixed with other ¬ðs (int, float, etc.) if it haÒ  9%Qed __Þ Õ unless a new $is‹ @ (or § resultingN ß ¶will fail). 
 õ remove any keys listed in _ignore_- Q  VÔ.setdefault('' d', [])s ÍP 0assI [' ]g  _0keyƒ 2 
ž† 2pop¸ Ãg )0P, sav—¸w, use_argspAfind©¦ /, � û)Þ z Ž‡`into sM ®@mapp< soÿ@y do$qget bak¿%toQ#$ ð new class
     ö   enum_members = {k: classdict[k] for k in ./ “_names}
   *   - :-  4 6delV [; %]
! õ# adjust the sunders –_order_ =@ c.pop(' ˆ', None)O QcheckÏ qillegalû  w õ s (any others?)g rinvalidé x = set(0æ) & {'mro', ''
9if ; 
÷ òraise ValueError('Ih ‘ Œ˜ å: {0}'.format(—  <  ™','.join(m *))÷ õ'reate a default docstring if one has not been providedm Áif '__doc__'' 
Ù 82 q] = 'AnÚ –eration.'–M7  ^ñ	uper().__new__(metacls,  Abase œ†, **kwds®M 
¢ ' []1 #as¬`defini›  Wû Q  0mapO '{}K  Q 0->vØO mapG 	@typeH ì_ ð # save DynamicC�pAttribuÈ
 €s from s5Ões so we know~ #ç²we can takePáhortcut of stoŒ  s– K d’ &_a„ 5= { "  ec[BFmro(¬,  4@k, v- @c.__p �__.items/   YÏsinstance(v,%g }^�Reverse ª -> °shashabl %s.Ý Ê _9 20_c ÀIf a custom Ýá is mixed intoƒ°Enum, and i”e„ ») h¿óto pickle itself, ô.dumps will succeed but Bload Ä °# fail.  Raêp than hl ñeŒá show up laterŸ Èpossibly farK  ~ 8 ò source, sabotaga² �protocol\Bthisª7 soJ 5tha¶ Ô Aalso¬ �#2 0HowÄ,Û ƒ 3newY  implements.ð own __reduce_ex__, doÆM ¸  -- it's on¡`m to m10sur|÷
 works correctly.  We useL 	l  ©0eade_fX f  a¢  ppreferr¾yK BFoverÃ _2³handles allò »m5½ ð ' not in classdgict:
  üif member_type is not obje*  5 úmethods = ('__getnewargs_ex__',  9_',l  B  —'__reduce;  =_')7 !if˜ ˆany(m in´ ã.__dict__ for  § )ë { ò_make_class_unpicklable(enum %)
� ñ# instantiate them, checkingq ÷duplicates as we go= )we@ Qfirst oead ofK ) W caseP ða custom __new__± doŒ  so� 
  funky with° ø values -- such asO `uto-nu  : ;yL0namÆ  2 k#._3  sen 1 = M' "s[ _/ ]~ C    ×"ise1ce(@ , tupleÀ  m ~' °  N JelseŽ   3 2 } ™ ûv Ñ:   # special€è × A _   c ( 0, ) ö # wrap it one more timÌ % ÿ @use_; ¼ F$ =ô	© G  S rhasattr+ æ  ž/_'Y  D n "._+ " =@	9h> ¬ 0, *å 
³ w ³ )¿» j   § å 
 ,   í     N qR(õ  [
$‹ 
h ‘L .=4_ =ú L- A_obj¯_3 ¥  2 oinit__¯ Ã# If another ^sÑ ðwas already defined,‚	u T# newF Pbecom9 n alias to1 ` exist‘Ione.?  — û ³, canonical� é £¿map_.items(ö -ifH Š) =Å ¤- =S 	Â  /   Ybreak j0# Að es don't appearî  ps (only _Bs__)<À            ÷enum_class._member_names_.append( 7)
  ò# performance boost for any 5 û that would not shadowE  a DynamicC… ™Attribute& #ifR œ L Bin d8 $_a4 )s:6  ¬ 0set (ç ,K !,  ¯ ß ´now add to Imap_d ? 
? $ [R ¯ 8] =f 	? >try´ ñ# This may fail if value isû òhashable. We can't§ "he( 	b  #Ã òthe map, and by-S qlookups¹tv  jwill b…J }linear.d 	D 2 		þexcept TypeErrorUpass
w â# double checki0rep~Ñd friends are1û ÷ixin's or variousL öthings break (such as pickle # however,“U Pethod˜°defined in  ð Enum itself, do£freplacSE# itƒ  8 w @ @('__Ë ´__', '__str nt Úreduce_ex__')14if O �Jdict"  Îvcontinu”   ‡"_mÚ ?= gA  [  5 >obj3 Qtype,� W, NonQ : 8n `first_ : 7if w  a â
 ¢ % ä  æ)}Íìðother __new__ with our own (as longNÂ ¦ ,ý#G ñ way) -- again, Œ is¹ssupport�6 <if S 
Ú #¦Tuser ¡Bthei� ² ñ , save it befor
 6get ¦’# clobberã@caseèQy sub\e later�  4 !ifZ  
™    Ûw " a4_ =K	M 0  )   .Ç žDpy3 6 Zü ðition order (helps keep py2/1 @codeFsyncÝAif _4 _æ Å ¼
Ð �if isinst	(/ [, str– ù   ç X .L0(',ð¦ ').split(…  8 ‰ !Py¶
š  9 VraiseYð('member order dóoes not match _order_')

  òreturn enum_class õdef __bool__(self):3 5""" 3 ões/types should always be True.- 9 x  ! r 0calr ócls, value, names=None, *, module @qual    †  start=1· rEither … ñs an existing member, or creates a new# ð .²  BñThis method is used both whenX 2num6    0giv Û 2 to˜!$to3 serationŽ ð (i.e. Color(3)) and for the func, eal APIL 3 ‘ = Enum('A 'S÷'RED GREEN BLUE'))Ù WÀ Ï h :`©`` willõ •  •1 of¡  =8`! $s`2Bbe e“Pa strˆòof white-space/comma delimitedí ƒ sƒ ûQ at `
 !`)ÍPan itWsor/mappd  ˆ kg pairs!`ml¦ 0set· ã    tß  á beX 9Ud in;£ Pif it#  �@set,ëaattempS “find thatâÌ ö be made, but ifN qt failsa~  ] Èbe picklableÎ -Ð ¢actual loc{Ù 0canÙUfoundƒ @at iTs± Ã; by defaultë .ðglobal scope.  IUis isP  » ±correct, unÃ  MØ  í  o ùsome circumstance°  a`, if a:  B0ixe�" a0¢first baseš¢"ife ´ ~³:  # simpleÀelookupÁ  RÖ cls.__new__(Ì)+ 0# o�[wise,Ár: we're}  ~ Á à D k q%_(  Œ   ,  ös Ó=  A=	 #  ¢ =  �=  ’w„contains=“Ë ›oM"in(# ,è)  þ raise TypeError$�"unsupporX@oper^ Ä 1(s)f¡'in': '%s'y 	 N" % J  o 9 � D).__+3__,®)__ )×-isÜ 2clsú^  ._Æ_o ð _map_

    def ð__delattr__(cls,  C):
  ñ&# nicer error message when someone tries to delete anE WibuteH õ(see issue19025). !if1 ö in cls._member_map_‰  � ¡raise Attr] E” Ä("%s: cannot‚ REnum F B." %V …_name__)w ˆsuper().þ 
# €def __diGself�return ((  ™  ô['__class__', '__doc �  ­module__']F  + p  ¸ -s_& )§ 0get» Å 3 ° 5"""? R¼ Vthe e'° matching `< `\  × •We use __c ð instead of descriptors or 0ertG Tinto e } 'W@ct__òPorder>ssupport� ð  and `value` beS EbothJ @propk hes forË Ðs (which liveb  † y )_ L s´ vmselves¡@àif _is_dunder(-i 1¥( q ;tryÙ•þ[7  ¡except KeyúC  @ ²) from NoneÖÙgetitem2â‘ É G 0ite!7cls0ps�s‘±definition þiƒ  – ö ß  Q §   )s_2lenç £ ^ 9lena 	> @eyð Æ 7 P ó `a mapp»#of  a !->Ø.� 4EThis- ™lists allÖ€, includO ñaliases. Note that this§  O ðis a read-only view­ 	„internaln |
M¿ �ProxyTypeô 	Œ	g>reph!"<e<%r>�M�reversed®^Š  8  Y>Y dù  Ã9s_)ü s€!, æ$PBlock÷Aempt>—reassign ¾s$’A simple ' @ment7 ÕÞ[aspace ö€changes £ ofØ À several posòsible ways to get an Enum member from the ƒclass,
  Àresulting in9 Áinconsistent1 …eration.2 5""" b ö_map = cls.__dict__.get('_  u_', {}): pif namev % :  ž óraise AttributeError('Cannot reassignå 6s.'\ ðsuper().__setattr__(m ‘, value)
g ñdef _create_(cls, _*   ðs, *, module=None, qual  4typ †start=1)Ä )ðConvenience method­~ a a newmƒ .¡  `m ¦s` can be: p* A str¹pcontain KZñs, separated either with spaces or e À  commas.  V!@s arš`cremen@ Bby 1H`è ` * An itera‡#of‘„ R 3(× Äi pairs‡ P mapp
… 2 ->ø3  umetaclsÆ_#@base )P) if ü@ is p else (  GsŒ _, first_e’%£get_mixinsz_ 5 ~  I  =. š P.__prÐ e_4 3ass©; ª ð# special process¢needed for˜?/ Ñif isinstance& 9'trÈ #‡" => ö
.replace(',', ' ').split(Â W ò(tuple, list)) andP 
 † @[0],â‰ �originalþ #s,A ™ E, []Ú  · Qlast_õ ½  RcountF  ‹ ¥ ñ*e(h …  [ V ' =ÞQ._gen> C_nexx z7#, p ˜ 6[:]7 Y     �.append(p * ™$ À"ç O b# Hereç s´aº	? T or aSh 5@item.| ð j 
ø ) Å * ÔÇ,4ª  =Om® [D 
Õ l
v P 	a[‡ ]n 3‰ 2  _3 " *“.__new__(: ÷•  È	ŒcTODO: D™ fr@hackY�a blessedÕ 'Aknow( ðcalling
        # modóule is ever developed
  rif modu$ UNone:  " :try   m1 ù= sys._getframe(2).f_globals['__name__']Q ôexcept (AttributeError, Valu 1Key ){ EpassP ¼ ò_make_class_unpicklable(enum )K ;elsú & 2.__ò C__ =.9 pif qualì  fNnot F	L / N  
Q vreturn 3  ðdef _convert_(cls, t ,� ð, filter, source=… @5"""b ñCreate a new Enum sub'ò that replaces a collection of Ü– constant‰^ #   ¦ @ all , S from� C (or¸ )s  ×Â U() to¬ #§ ccalledø áand export the0  úits members backN É;` Dlso,ô K ó	__reduce_ex__ method so DÇing works inH öprevious Python version%{ !€ = vars(C "s[ ]–#if2
	ãB ñ5 Ë0 a ƒ ½  _v28P_map_ÍÁpopulated in¡same orderOgy timeG 1for5pnsistenK `e mapp8Pof nuœ1 toÈA whe\ rH Áare multiple'  s [  èƒ D .z ¸ Us = [   ('á % W !  é .~.items(2 $if© 8 )Þ+0# sž1by } 	š ² ." ö(key=lambda t: (t[1], t[0]) 82Typ&
Ò# unless someo ð s aren't comparú,ß ¥which caseŸ  É ž — -  clu3clsf× –=qÆ Jcls._'= n!by5_ ? °p.updateý “ä&__^ 
/ [× f] = cl…^  f r@staticå ióheck_for_existing_Û ()§ w, basesf ¥Pchaini 
§       (  È Jro__'  �Tif is˜(5 ,¬)å  .“ Œ sC À         raiÿ se TypeError(
  ÿ"%s: cannot extend enumeration %r"? 
ñ% (class_name, base._ ?__): 
!)
 Ñ@staticmethod ýdef _get_mixins_a 1s):)  Ö &""  ñReturns the type for creatingÖ Ñ members, and( âfirst inherite�  X   Ú .¨    Þ !s:8 �tuple ofò  s ÿat was given to __new__© 0if oO "  b rÃ Ö object, Enum  find_data_ã (D  E  is = []a rhain in¼ L <   ùcandidate = NoneA  !  E  y  D cM Ž.__mro__L  / i&3 isÙ '  + ~continus   ¡elif issub™ü $ -  } "._û6_‹  ‚h�  E Nq.appendx 
P ê]breakE \ Ò '+'O W.__dictO 9 	  7 _
 ! í !or1ì è 	/sefc =b 	+vif len(™ ^) > 1M 9raiõà'%r: too many ? {s: %r' ·  *s)ß ¡ w  ±# *[0q/elû è^ï ò# ensure final parent… ±!anÀ derivative,*  d á vconcret9#ô î¢check thatG dhas no… _ÿŽFs[-1Ó »†1 Œ˜A"newŒb²s should be¬fed as Ö —  "`aName([µ…, ...] […!,]b  6)`"ÓO = _L3 or§6if æ ú òsóî CZs— ž  Ú1rstˆ(Ã  jà(classdict, meó
mber_type, first_enum):
  5""" ñReturns the __new__ to be used for creating$  K 0 mec 5s.
G ¡classdict:&    Àionary givenY d 9 K ® ; Pdata ½ V whos• Ewill— ¥by defaultI ê  : ¥ aeratiot QcheckË  an overridÐ Œ ¢# now findÑ dorrect#!, T  E ðto see of one wasš Einedš A# byE ¢user; also? � earlier°  4Äes in case am  U M ƒsaved as A_" Ö " =R  …c.get(' †', None)½ƒ# shouldR _gf u later?m  '  6% == ais notd c (if   € � –#Ñall possibles³¶ æ À before fall~uback to� L 4    Ê`methodbX 5',  * 9    = — ? 8  ¨e 7  ôtarget = getattr(L ", “ “1  3if @  WIin {î +    \," .#* oobject, OEnum* }û µ  – # =ó È ]break 
f / o B Nelse, “ 
Üº# if a non-# 2 isFñ	then whatever value/tupl0Æ  # assigned) ‘ Èmd name 0pasž%toVa©ogP 2new\¯'4Vinit_
3
À 
õuse_args = Falseh 8+ 6Tru* rm´ $, >,'] 1


 OQ(meta = CMetaœªqGenericå ñ•òDerive from this Ytdefine 7 !s.Ð Y %de±R(cls,µ~  ® # «¡òinstances are actually7`ed durªÈ � construc›q L “without c×² ;¿   R $ $edT#Às'
        #ó __call__ (i.e. Color(3) ), and by pickle
  õif type(value) is cls:  & ó# For lookups likeX ^ Y.RED)0 qreturn R  Q# by- ÷ search for a matching enum member5 ðsee if it's in the reverse mapp9 (I ‚hashablev s‘ :tryÎ rž Qcls._� 2u a_map_[ ]� ú except KeyErrorJ ó# Not found, no need to do long O(n)í Q  PEpass b OTypec 0notö  rec w\ D"--f vbehavio: h  Ü  ;ñ  ë .ë :s()Õ  9 #if‰"B_ ==Y,  0 S] Ú €# still Â %õ -- try _missing_ hook0 ª–exc = Non®n `sult =©.L ÁN XEÁŠion as e¿ ` ] 	w ›  “Àsinstance(re’ ,‘ N %    Ê ;els“   2ve_š V“@("%r› KaŠ’id %s" % ÷ { æ.__qualname__) T   2if „  J  ß  k !isf
 3   braise • 	¾   _elif C  ! %= ã(G  K   'ej ²&%sß": G0ed ‘nstead of¹  JSvalid¹'c 
1% (_,,3”    ÿexc.__context__ =&C5exc– kfinallšð# ensure all variÑðs that could hold anr1eptÖÅre destroyed_  ° u è	 ÉX ð def _generate_nÍ  _( €, start,ƒ ‚nt, last9sí1"""L  z GK  ¸ O  ²que whenugiven.
1  g :. 0ameÖ èO† & rinitial™ ] !orT Rcount/  nuU W Pexist4\ †Õ 3   Y €assignede	Nó  k 4  ½¦&d( 0 (V  çfE + 1Ö  " ÚOÀ:
            Qpass

 …   else:   Ñreturn start
 Á@classmethod ö
def _missing_(cls, value)J F BNoneE 4 Î_repr__(self- ñ"<%s.%s: %r>" % (m  ”   8 1.__� Ò__.__name__,    ’ (_)~ /st} | w M f 	X /diX  5"""À RTñs all members and rpublic _™? õadded_behavior = [Z m £for cls inÑ _mro()0 m. Ícls.__dict__& áif m[0] != '_'Å Pm not9 8à N_map> p] + [m › k 2 l  \ ]| L5(['û²', '__doc__ �module__'c 
0	«cformatƒ,Š   Gspec�|»9   uôr actualõñ  type unless __dõ has been overridden.Ð _ ö# mixed-in Enums should use the  f 'a ‰  õ•otherwiseZ ñ# we can get strange results withT  i  , m ÷wing up instead ofN  ‚ HF ma# pure­ ³ branch, or d §explicitly^  )! =H.B Y(²  d, Flag È#ifè� 1°_ is object¥ 
s ­ Ø  +=4¡   Aval  ™  · µ OX Xelf._š 3 g % p;r; Ê4.__üJ(val½¡e_hash_e  Í .=	“reduce_ex? w, proto� ¹‰#, R ¼ #, U  # DynamicCA�Attribute•pused to` €vide acc@!to¢`ž`^'1# `Z `/ õ perties of enumP while keepÒ�some meas­Ô#? ðtection from modifica ", B Pstillšo ¬!ank !er) “ `to have Ð ³ &d º ´ À.  This work caÜ » 
P Qs areQ‘set direc@n 6  u° -- __getatÕ" i:#9Yðlook them up.

    @ñDynamicClassAttribute
    def name(self):   a"""The õ of the Enum member."""+ preturn A  ._L !_
 @v Ovaluw  x 2 P_


cä @ Int¯ Q(int,¹ Û 0""" c whereÍ ðs are also (and must be) intsé  

&Ñ_reduce_ex_byè 4s, proto`  � PFlag(z (  W  gñSupport for flags:  	 x âgenerate_next_é (] À, start, couè 3las  sg  c  M     GK Ð O  O  Ân not given.À 1  g :. 4ame’¢  % † & rinitial™ ] bor Nono / ® /  nuN W „existing”] Õ 3   Y œassigned b ó !ifÙ u V  ˆ ¬ D3 if´ !is0  ² u else 15  ¥  „Ö in reversed( { f 6tryV    Ähigh_bit = _ D )s  -   Ybreak �except E >ione ð
raise TypeError('Invalid �C†: %r' % ¿ j) from±)d2 ** (¯ 2+1)'@ramethod¢ µÒmissing_(cls,m ”R?sùñ  (possibly crea0it) ñone can be found5À.x  (úƒoriginal¯=† + "if J < 0=T A = ~	 1 ™ "e_ÿ� = cls._§ ƒe_pseudo !_(; È;if � v _ ~ Š ‘   �¥ œCƒÄe a composit44 if?Ócontains onlyÆs’	$@*2T’_map_.get@,ˆ	F
C !is" 
¿ó# verify all bitàce7* 0  ‘_, extra_� “"deð e¾	4 (if4 
€  T |Vã}C"%r [ax”id %s" % ê LP_qualt6__)÷  Q à# construct a [pleton e•-D¨ À     pseudo_÷member = object.__new__(cls)
  rpseudo_0 ï._name_ = None( 	Avalu) 	 	* ð# use setdefault in case another thread al úy created a compositz Î# with this n 	À � = cls._' 2Ô f_map_.� ( ), 9 jreturn 
à ñdef __contains__(self, Ô !):#  X5""" RM  s True if 2 ð has at least the same flags62 asT .G S ñif not isinstance(� ,\ §.__class__‘  • õraise TypeError([     �"unsupporŠðoperand type(s) for 'in': '%s'   	 N" % J  N 9 ˜ �).__qualX_¦ 	 )…B Î3_ &ã ÀC_ =='î_¥Crepr¡	Scls =E (	ž!isg Û Û  Ð'<%s.%s: %r>'x?ç õ ô · ä žòs, uncovered = _deeª; „ Í  ©   	•  ô '|'.join([str(mû Dor muümÃ° =]),I  ×2  )š/st™M˜“…2sif len()�1 4[0]R!isPI ° r°  G <OelseN sN ¦ " 6 M 	ûNbool•Ì  QH	; o5o$™õ  NotImplemented2” ×*	ž * |}	® 3andè ¯ [Àelf.__class_ô_(self._value_ & other ò)

    def __xor_/ ,& !):  " ñif not isinstance(H ", ^ ‡_class__2  6 õreturn NotImplementedT  
B 
¯ ^‰ ¯ cinvert² y ómembers, uncovered = _decomposea ² Â  )� ^ < ¡ 0% ‹for m in7 Bif m=#n œ A and $(mÛ # &E ‰ 
D H ð ’ � 5| m² O+ A)


¥à IntFlag(int, 
 <1"""L €Support Ý Ñinteger-based- s$  , 	 @T RmethoÙKámissing_(cls, Ò e  É  =     R"sñ (possibly creating it) if one can be foundŸ Z .‰  M Y ±- W, intŒ  7 praise V!ÁError("%r is¡a¾ £id %s" % (D öcls.__qualname__)Bnew_æ1 = ( Ê ƒe_pseudo _J 7 ½> ™_R lCSBe a 
4itew0iffè óue contains only sb	Ñ í !2’_map_.getí f, Noneó :if C !is" 
ú‚need_to_ô A = [c ]õ ÂÐ# get unaccoud2bit® #   ê_, extra_flags>[ ©timer = 10 XwhileP 
¸  p "# < I-= 1<   0bit‚ —high_bit(š $ )    ± Ã½ = 2 ** bitS Gif (* ±n…5˜ ƒA  k   E 
‡9 Z L   
> w.append« ñ (if[V == -• j e A: = ­  ?lse: 6^= i 	è  G ñšreversed(Û   #Tpstruct Sletonú-)
¦ ¬ 
=µ0.__	T	  8 À_member._nam»e_ = None
  ñpseudo_member._valu- 	 . ð# use setdefault in case another thread al þy created a composit‚ Ï# with this v 	¤ c = clsª 2¸ f_map_.— (H ), 9 )Î jreturn 
 ñdef __or__(self, Ö !):  :ñif not isinstance(" !, 0 ÷.__class__, int)9  = x åNotImplemented[ 0resR = z J Y Ò <_ |  )_ä U Ý ?andÞ ctÜ 	&Ü +£x¤eÆ ^Æ 0__rÂ # =oÛ 1__rž 
  ï  
 ÐcinvertÓqú O~ƒP0
g‚high_bitP] 1"""— Î°s index of . òest bit, or -1 ifÓ€ is zero rnegativ	
M - ñ.bit_length() - 1
Ž ûunique(enumeration‘ C{÷  decorator for . ²s ensuring K  =u !s.Õ � ñ duplicates = []  P Tname,9 (in` #._F£s__.items(¡  ü 9came !=> .K Y $ u �.append((% p 2 )³6if . F Àalias_detailº ¡', '.join(Â  e  ñ ["%s -> %s" % (:  , p ):
 'inp ]„  J praise V6uError('— X` found)�%r: %s' %Œ Õ!, ‹ Å ð mo_ï Zre(flag,u xÍ³Extract all}¢s from the1 
ý&# W  º°only calledÒ6     5ÈÒnot_covered =[ í ô A < 0 ƒ «e  3 Ô Þ ¤ HÊM  ‘#ifã Ð_value and meÒmber_value &  V== me 7:
   ’s.append( )# ònot_covered &= ~$ e ) ö if not negativea Ptmp = @ /  ~ –while tmp-   BflagY ú = 2 ** _high_bit(tmp˜ 7if 0 !in .? 2¥ Jmap_c  g  õ  F 8  [ O ]z  D - å  '   5 3‰ C and­Ç 6 ´ [ ¿ þº 3 ósort(key=lambda m: m< ò _, reverse=Trueò cif lenas) > 1­ P A[0].g 2 ==Á mð# we have the breakdown, don'.!ed @ Q u itselfB rs.pop(0’ creturnÒ)s,^ñ"""Utilities for comparing files» òdirectories.

Classes· ódircmp

Function òcmp(f1, f2, shallow#q -> int¯ 1cmpd `(a, b,z @mon)" R([],  Ã ôclear_cache()

"""

import os
 óstat
from itertools % ²filterfalse" Etype ÷GenericAlias

__all__ = ['x p', 'cmp õ  
 Ã   òDEFAULT_IGNORES']

² û	 = {}
BUFSIZE = 8*1024

1  q @'RCSQ !CV @tags A.git !hg 0bzr Q_darc! A__py# __} Gdef À "()²@"""CNJ €Acmp 7 .W ‚· .=  oJ ÒV :Re two<!.
Ï ¢Arguments: ±f1 -- First( S name 2 lSecond G ! °Just check ôà signature (doßB rea+ á 1s).‰  Û  Àdefaults to »« R*`®   5 if.Bs ar psame, FT£ otherwiseI cThis f0 usIee paÁ 0Bisonf ô0res— ,° Cwith5 0ent~Ã invalidated• "irpinforma„= Óchanges.  TheF bmay be ed by callìë÷#()Ä  K Ðs1 = _sig(os.qB(f1)˜-s2 2 ±if s1[0] !=¢ ï.S_IFREG or s2  I ¡±[‚  L F� ‘ M= s22  ­1 21[1} K2[1]+ Àn False

   õ outcome = _cache.get((f1, f2, s1, s2))
    if. �is None:   G cdo_cmpC :  " rif len(f €) > 100: ñ  # limit the maximum size of ™ k  4 RclearK (c  [½ 4] =· C ereturn Ò
def _sig(st)Ð " ñ
(stat.S_IFMT(st.st_mode),G  †     ®  rmtime)
e 
l 0buf< ¡ = BUFSIZE] ‘with openFÓ'rb') as fp1, 72,  2M  � —while Tru�  @b1 =A c.read(w ;# 2# 2# §if b1 != bs  <   8QFalseÇ     –if not b1§     4  ° ñ

# Directory comparison class.
#
	 r dircmpK B"""A  Ò that manages6B @of 28 \ Qies.
  J à(a, b, ignore=×R, hid "ºA and B areI  Å ð  IGNORE is a listº0namŠ oZ òdefaults to DEFAULT_A !S.˜ _  HIDN  › L ð[os.curdir, os.pa ]ì õ High level usag0x =Ñ  ²Pdir1, 2ö ðx.report() -> printâ  1 onhðdifferences betweenE 12Cdir2Ô 3 or
 W ù_partial_closureg e a N ‚ Ÿ m ,w = s£ ócommon immediate subdg@ ” ;ful‘ Rlike R ² ‰ F @but ? ³y recursive~¢Attributes¸` left_*b, righ Û: The files iEj ±filtered by¨ñ i¾?ó :Œzin bothž4 ‘ Donly‘   ": Å  ’ "6 j k_dirs:Y 0 n 8 ë :ò 0 Dunny• Î a where˜0typ¬ �™3 ì94!or3  î  Å ® þS-ableë Ssame_±  ¹ ã’identicalÃ *  °*  9  ^ `s whicƒ ˜ 1 f× 2 . RcouldDe#ed= Ïsî dictionary� ÞÒ objects, key5Ànames in com°mon_dirs.
  A"""

 òdef __init__(self, a, b, ignore=None, hid ñ ): # InitializeC  P  : š.left = a @righ b !ifQ @ is _ : J  p ð = [os.curdir, os.pa õ] # Names never to be shownI OelseW  ^ + #ifë � õ = DEFAULT_IGNORESE p 8 	 raphase0pR€Compare Ñ õything except common subdirectoriesx w@_lise°_filter(os. 1dire ›%),8  i Q   +
 ¸ )8  Ñq % r  T s  Zr o.sort(‘  ±  Ûi1i4uteWnH-  ða = dict(zip(mapFâpath.normcase,­ Ž ) š bM )Ü N  O & = Ü¢ ó a.__getitem__, þÀb.__contains ;a))J Ã _only M ofalse(R ¶ S  8   S  » ¥ b¥ Œ¹2¹°Distinguishæ Ges, m, funn0ø N]^  êN 2/es 0unn&"[]¿ ? ‚for x inf 
o a_9" =·qth.joinÎ ‹6, x‘ R b0 Y1 ¿  2 iok = 1 :try†  ( Pa_sta0os.
 (› 
 m~OSErrorE ð# print('Can\'t I 2', K ú, ':', why.args[1]]  † ® 0® b® 
Q ® $K ® 	¯ ^if ok�a_type =‚.S_IFMT(tŠ.st_mode½  b5 û 5 3if m 2!= B �  ^ ÝÀon_funny.app‹end(x)
  ýelif stat.S_ISDIR(a_type):+  : ÿself.common_dirs.appZ ?REGZ Ofile[ /se  _funny¡ /elB Þ > °def phase3(, ò): # Find out differences between + Ñ B  E�xx = cmp I p.left, T T.righ ? _) ¼' Bsame 8   	 Â  a = xx
� Ã 4z Ã ásubdirectoriesK  Ì ô# A new dircmp object is created for eachH 'y,G ñthese are stored in a dictionary indexed byOWname.@ ñThe hide and ignore propertiesY ainheri• årom the parentG Zê es = {}  Ç x” # ˜ 
ˆ a_ÜÁos.path.joinfà€b- . y >ss[x]  =up(a_x, b $ ý  )ú�_closureœ òRecursively callær4() on u ûm &4(� )s¾  < ›s.values(W2sd.A ’ ¬ freport¤ ‚Print a   ™  Â ÷vab½€# Output�!maŸ`purposï Ulousy+ pe  ('V 'Cœì  ;  " Z_only  .sÎ =  >n 0Onlà
q (': _ = z + {   | 4 &, }  b ~ „~   ~ ‘IdenticalÔ%s ô > w  �Øw   w D«<ingw > w Px   y µTrouble witÞú I „ yl „ À()
         ñ   print('Common subdirectories :', self.c ƒ_dirs)
  )if efunny:  % <  f.sort(C  % 
‚ ' O cas   !)
c ðdef report_partial_closure(v `): # PÜ &  s ß qelf and ë sM  ‡  6 .R ¡ ’for sd inë  ªs.values()ï Ê 
Þ &sdU l ¹ ?ful¶  RÖ £ ¯ w Á recursivelyL ¸ Q_¦ ~ómethodmap = dict(¢ …=phase4,ž  ¢  ¢same_files( {3, diff æ
 O •1 = z 32,  g   £| 2¤ ? $ Å1, left_only Jrigh ž : Blist: 20, :  M ±__getattr__À ,  `!if E notŽ†
‡ñraise AttributeError(O ª í? [ ]x ½sreturn —  • �p__class¸ ‘item__ =  W ð(GenericAlias)


æ 1cmp˜T(a, b«ã, shallow=Trueó £"""CompareÑ 9  û Gtwo ¥.�  R 5 -- by nameßÔ   }1 ofM ! Q founáEboth? i; ›  < °if true, do” ñparison based solelyµòtat() information¡ RP�s a tuple† `three ” sÂæ Cthatd se equalº   >Werent ÷  B áaren't regularõ s/1"""4 ²res = ([],   ÷xm;ž ð  ax = os.path.joinËx5  èb  7b,   õ res[_cmp(ax, bxü£)].append(- „res


#  ýB.
# S0:
#z P   0 ¸ 0 1 ) 2 ln0(ca.Ñstat, etc.)
#¶° ²ósh, abs=abs, cmp=cmp²'trý¾  ­Aabs(ñ A )-‘except OSŸa: 2ö á Ð a copy with lsßPoccur¥Ôskip removed.µ €filter(f_ , # © À return listñf(filterfalse(skip.__contains__, flist))


# Demonstration and testing.
#
def demo():
    import sys
    import getopt  opG ¢s, args =  . ñ(sys.argv[1:], 'r')5 pif len(3 b) != 2m  q TraiseF  Geh ñError('need exactly twor r', NoneW ±dd = dircmp\ 2[0]˜ 2[1]" óif ('-r', '') in ¿ € Pdd.reô â_full_closure(? Oelse+  ò()

if __name__ == '__main__'0 TòJ
"""Helper class to quickly write a loop over all standard input files.

Typical use is:
V� $ .  €for lineí  .  ä w€process(+ ò)

This iteratesŽ 1theI As of›  N  s YeŸ  $ìp
defaulW å  ’stdin if J ðst is empty.  If a R  C  ñ'-' it
is also replaced byi M ½#heÆ al°uments modeÝð
openhook are ignored.  To specify an a>Pnativå  stä Ž @s,
p¬Qit as½ 1argf  Ú J±.  A singleÇ  È ¾ áallowed.

Func1&  % 1(),X±no() returne   Å d cumulŸ �ne
number¦ Mñne that has just been read;i  ×a  Ü s
  J iu bcurrenh�; isfirst( œ ‘s true ifÈD r  m  ¹ ‘ 7 Ö  £ 1its…  Q ¸M 
M 1 1was¹ V fromì4.  <P next0()  e–
¼ 2 so Ž  / Í òBwillb   «  q 
 1  a ¡ (if any);œ Rs not;  , § S   Ácount
toward– º " ;;   6= óhanged until
after( 1rst�  N
¡  ñì$1()
 ‹ ðsequence.

Befor yX fs have5,° œ « h�Aboth7 ‡s[Xzero;› › �no effect Ñ  Õ Qs 
;	s Ø ) ¢f:% values
perë0ing“ "$la3 ] ˜ Q

Allï Ç  /ÐBtextG3by Ï‘, you can0ridx’is by
setî"he6 aparameÅo¿°() or FileIÎÐ.__init__().
pn I/O eï° occurs durÖ  –  r  Ða file, the OñSError
exception is raised.

If sys.stdi ñ8used more than once, the second and further use will
return no lines, el ð	 perhaps for interactive9  ,  öf it has been
explicitly reset (e.g. using¦ ò.seek(0)).

Empty files are opene¥ ñimmediately closed;È €only timá Peir
pk ance in  qlist ofU Pnames/ðnoticeable at all 1whe3 Q
last0 € @is eš  `t+ Ppossi> Bthatg  4  . l a> °doesn't endŽ Pa new# @
cha;Per; ozPwise  ö e5 @clud. ²“trailing
G ñ.

Class FileInpu›  *  implementa Ñ; its methodsš  @(),
s Qno(),     visfirst M  @next�!()8‡ ()
correspO!to@func{ sø  ’ ðmodule.  In addi ,ba
reado § r which 	sS  | ! iæ  + ,‚ ú a
__getitem__()> A Psequeõ behavior.  The
 Ðmust be acces7€in stricÁ& €tial ordº 2ce
0 � É QcannoP 1mix›O®°al in-placev¡tering: ifæ Àkeyword arguÁ ò  + �=1 is
pa˜  to @ut()us²constructorë ³ ¶ðmoved
to a backup� e¹ Ãstandard outI“directed a | L  .
This makN&t �o write 0teruAt re sˆG A
in  ÿ ¨ ð=".<some extension>"Ñ °also
given,M‚specifieð, ¯ …M õ ? 
Ø p remain…òound; by defaultIS ‘is ".bak">izP
dele0HL[ #is¶ í   Ý0dis‘!d @ ‘0 ã�ead.  XXX·• current æì
t yAworkú ¡MS-DOS 8+3ú  systems.

J PÉ•ts:

- o«fgetopt�0pro †Ð- isatty()
- ù2(), ±size), even  °ðs()

"""

import Ð, os
from typK ñGenericAlias

__all__ = ["A", "z 	   `     Ú   s  no
    &
  " # ñ 2 !isñ  U  €hook_combYsed",O  óencoded"]

_state = None

defµ x  s= , ÞcFalse,–ð="", *, mode="r", openhook=None)ñ<:
    """Return an instance of the FileInput class, which can be iterated.
J ðThe parameters ar qssed toN ¿constructora .I r” %ed“ Ð, in additionR Qbeingµ t‡ 1or,= ñkeeps global state for€ @func> s~ ¢is module,w 1"""B < _=  2if  C and b._fileD Hðraise RuntimeError("i;ñ() already active")U R =e(R sé àplace, backup,§ ôe=mode, openhook=	 M /› Ò

def close()¢ @"""C Ÿsequence.ò ü $ =Q  á ° ANoneÂ "ifac  $ 7 .z ‡ @nextØ Š = � €current &   s+!at¨  ;  e ôPwill I QfirstJ ‘line from 5 K  (if any); " Rs not? , '  W H    Ñcount towardsP `cumula¸G  "  . í ? aname i] E €changed cl afte| ¯ B \© �has beenž ŒaBefore� é : 	) t, this Õ  ¡no effect;�  it« Ø Cbe uŠGskipY  Å 5. A© Blastn ¨ I   * f ¬ ƒ 
É c!if€E16#no) @1	ä.? ’ "()h   �hÝ Î  ûemz2ly M ]· €‘  s 7 î FÞ î  Ò/noì ·Unumbew ? Q thatÐOjust�"0A:E AC   – © aŠ\L w  LZ j ¨ÕJ !  ª !inNLY/. @ §A C®	?G C  C	ð within the file.
  ñ	  """
    if not _state:   ñraise RuntimeError("no active input()")0 creturnC ð.filelineno()

def    ^ y R6 1the! ° number of  qcurrent ‘. When no C is  !ly€ ‚opened, ˆ Qs -1. j ã B Ñ ß pisfirstô /()ä as true×  %   just readË  í @   aof itsé ,Å `otherw�ß _falseâ L	Ô ç _stdinã 
i½BlastÏ 2wasê ‘from sys.E Û kƒ  �°class FileIÑ¼  ([¼0s[,òðlace[, backup]]], *, mode=None, ‡Ahook !)
¾Cb ñäimplementationôqmodule;qmethodsE  „ qname(),V {,# 3  	¯C, isã & 0 J @nextN ñ() and close() correspond to¨@func› sœ Psame … H !in& ± ‹pIn addi5 ‘ it has aû¤  Ñ e whichª ý ” U "pu7,ž ú a __getitem__()B BsŠ @ õsequence behavior. The  mwóbe accessed in strictH* ótial order; random2 •  ·Ò 0can:‚be mixed tŽ  ùÒ__init__(selfŒsP =FÍU0=""U@  … f<"r"e² ' àif isinstance(ä s,Þ ‘ #    3 = " À  /elB ¿os.PathLikeJ ’os.fspathT 8), V sT h is
 7Â     £  -‰argv[1:]Ï( ? V('-',Š  Z ,elŽ   H s = tupl:7  ¹$._#  Œ  0inp$ =#  /# =8 Ðsavestdout =   0out  Ž  ’: Astar”ðno = 0
        self._ófilelineno = 0
  `self._ { = None ìisstdin = Fals `backup> LnameB ñ# restrict mode argument to reading st !if ð not in ('r', 'rU  Urb'):/  Ä ôraise ValueError("FileInput opene ù must be one of "F  J 	 "{ µ and 'rb'")8 `if 'U'¨  Þ 
–  import war� á  d  .	  ("D  A õ is deprecated",h  4 
 D' BionWb 6, 2™ ÔT =PK  gwrite_  ƒ.replacepCw') Ý ‰, …else 'w'N !ifbKhookþ Af inR 
  Æ °	0canq ause an\  ¾ `  fS Ò ‡ U !if3�callable(ù 7 , + € 	7 ,Q o C* =§  l 
Àdef __del__(+ ‚   †.close()-    + :try:   P.nextl(ëofinall- ÔHs = m ~__enterœ preturn g › c__exit- �, type, vjp, traceÿ¶  > á ?__is  å s [ ªwhile True Ò! =¸  ._T    ò0if  
9   ° (   qno += 1Æ    # 	 tE a lÙStopIterationC <  ñ Ö {  = peat with %  & žsgetitem.7, i1� tBings}	Ž A"Sup¶�for index~Njbjects¨.IP"Use ñûator protocol instead.×É 	“ Åstacklevel=2 þcif i !ÿ ¡7no( GƒdRuntim!`accessÝ  4 0s o+wf orderê…
¶ __“'__lyexcept ï
� I[¬0end�i¯‡reached" e  ÷L`avestdº ÿ %_s *Àself._savestÓdout = None
  �if savest :   Bsys. ' =% 
% AoutpR bself._   v :tryl 2if ? 
  ‡  ….close()_ kfinallG @file­ �   /  J ’   �   ”   Bdel 7 ôreadline  # restore FileInput._ 	q þexcept AttributeErrorâ Ipass8 ‹ 1if » sand not— ~isstdinU  ¾  0 9 =   `backup8 6namK
 	¬  6 "
% c , ;if ) 
Ñ  Ð  ² os.unlink(+ ­  g  ƒ"OS| lÁ L‚ = FalseéDdef Ý(é )œ  whpFTrue  y (=¢= 
¡ 0if ' 
9  =  d  ._Ö    }no += 1² areturnC 	 'if E a ; y @next7 j •  ô peat with % �#$‘ s’ “if 'b' in/;modN € ´ 9b''î ?els- , Û T	× é Es[0]T ( sGLs[1:& Sstart£ì ;P  O = 0m  ,7 �    
ý	Y  Ôñ Z= '-'yG  # 1 '<K>c M ³ = getattr(Aåin, 'buffer',  
Ê	W : B, Ž! V oinplac> t _(U  v  ‘os.fspath÷· OC) +  J º or ".bak")ù  J  Ø_ ì– I îð 
                Qpass

  ý# The next few lines may raise OSError7 ños.rename(self._fil ",  dbackup )@ &    s = openH 
8 N NmodeD Mtry:Y  Û @permW ss.fstat[  m . �no()).st_W A dexceptù a ¾ `outputi À ` 4ameº Qwritei À Oelse`  ™  X Ðs.O_CREAT | o dWRONLY ]TRUNCÁ  ÿif hasattr(os, 'O_BINARY')q  4 u "|=i / 
] "fdœ ·÷  F  , ‚ñ  f ;As.fdI /fd4 C ø  ‡os.chmodõ §“ 	ò [ @Ð �savestdoBsys. ? # =*F	*  ªiœ$if[ penhookôº  ºŒ 1 =,  ÜÖ®  16 b å • 
X  @read�œ  G . ô # hide FileInput._ Kcreturn "()Õ@def S  ˆ ï 	9 % 7  — /no5 
Rstart( # +‚  I  K  O 
' 
; † ü 3 
ø7ë "G Ê#QValue
[  # J %-19 $ %  „aisfirs,V == 1bisstdi@Ä$ 5 ñ__class_getitem__ =  ðmethod(GenericAlias)


¦  FÀ_compressed(^ :!, ¼ D?Õpath.splitext, A)[1]÷ 1if + r= '.gz'=  C±import gzip)   3  .C{ ) (elT ðbz2':
        impoƒrt bz2
  `return ñ	.BZ2File(filename, mode)+ Qelse:
  8 5 Mopen. ñ

def hook_encoded( òing, errors=None)O  -  H  1 L " q $, ^ =	 g n Á ³  k 
§ c_test(‹ Ñimport getoptì ñ inplace = False ibackup Ãopts, args =? .F ò(sys.argv[1:], "ib:"� Àfor o, a in @ ì æif o == '-i': ƒ 2Tru‚  % Eb': ” a£  \ @line\ `input(œ ,L =T ,8 =? ^  @ Q[-1:]‹ P\n':  ! = Q[:-1]l / r/ 	ðprint("%d: %s[%d]%s %s" % (c dno(), …  v  z  pisfirst4 ñ() and "*" or "",À )…Š … �))

if __'!__#’__main__'ÊZ@
"""U ) ñ matching with shell patterns.

fn! ò(FILENAME, PATTERN): �es accordC ô	to the local convention.F OcaseJ Ðalways takes %  % W àunt.

The funcL ñs operate by translat| $he¸ ð into a regular
expressŠ Á  They cache¬ „compiled-  -  s ´[speed… y %e(Ìsw J ¤
correspon'7 ó.  (It does not Ž P it.)¦
ÿ$os
 ”posixpath $re
 #°ools

__allÓ ["filter", "Ì  l  Ið
e"]

# Build a thread-saf·@cremÑðng counter to help cre“`uniqueKÀexp group
# g &0rosÞð lls.
from itert±  ç W a
_next= Rnum =m A()._ P__
de^2unt0× (h ,5ô"""Test whether Ã¹…
¿Põ“ are Unixbstyle:$ *Ü�es everyt?C ? ñany single character) u[seq]  Š  ) "  ý2seq) !* q ) .0in ( ) ðAn initial periodF ò i_�special.2 FBoth �¬Œ±-normalized8 !if9‡ zð system requires½) ðIf you don't want this, use fnmatchcase(FILñ	ENAME, PATTERN).
    """ ð	name = os.path.normcase( )" ?pat! 2pat  åreturn fnmatch= !, " ñ:
@functools.lru_cache(maxsize=256, typed=True)
def _compile_pattern(pat):Œ Ðif isinstance s, bytes  Ù Òpat_str = str# Â'ISO-8859-1'´  ) 3res) �translatR   	% " =d (1 ., P Qelse:¢ Z 9 = V R +3re.ã  T !).9
ü afilter~sBW ð)"""Construct a list from those elements of the iterable ûqS that f  .üPresulÝ![]¼ êB =¡B $ifJ� is posixWÄ  $# b2 on!  * ÀNOP. Optimiz¾ T awayá be loop· D @for Ÿ1 in s_   "ifë E    ö r.append% ¼ 
Äe 9w  ŒKæ ñ"""Test whether FILàô  esá çÀ, including ”!.
å @Thisq�a version2»ñ() which doesn't8 -°Qalize@ �its argun“Në ) y ‹ ’not None
ý 
7õ ¤„ a shellé ð to a regular expresÙ ñ 2ereg  Tö	to quote meta-charactersÌ è @STARödbject(¾Cs = ,“add = resI6 Ði, n = 0, len|9 ²while i < nÐ  ‡0c =""[i|  qi = i+1K  ¦f c == '*'8    # @ é ð consecutive `*` into N (  @if (gpres) or· B[-1] t í 
a  9 @add( Ä   4eli’ ?’  - ''.^, [, jç å  Y @if jA and!j]ø !:  ,  > j%  @ ]@ ¡ƒ O!= 'C ƒ (>=â š   7\\[  
p    Tstuff&:j    €if '--' Ð1in 0 ½À    stuff = ðstuff.replace('\\', r ;)
  ]else:  % ¿chunks = []  ð
k = i+2 if pat[i] == '!' S O i+16 Ÿwhile Truv  z  Z þpat.find('-', k, j¼  ,   �if k < 0È  "   _break”   î �.append(Ñ ?:k]t O = kä  P  Ä ?k+3p l jl ÿ*# Escape backslashes and hyphens for set difference (--).z 3# H7 ñthat create ranges shouldn't be ev dG `ß = '-'.join(sm  Ä_r'\-'Q 5 Õ B in +6  û ñoperations (&&, ~~"/|| » óre.sub(r'([&~|])"Q\1', $ t _i = jó "if2 $[0‰W  6C^' +3 .1:](elR ßin ('^', '[')Y %\\Z ÿ�add(f'[{† '}]Š °
Y  , 2re.2(c)€assert iè!n
a ò# Deal with STARs0‘inp = res% 'reF2add k" òi, n = 0, len(inpq À# Fixed piecöÁt the start?8 MQi < nò0inpˆais not‘ Ø  Ô   ]  lRi += ¨y# Now dÎ ! f  Ù  "..á ö# For an interior `& ñ` pairing, we want to do a minimal½ ñ
# .*? match followed by `v "`,Vñno possibility of	„trackingŽ PWe caºaspell ÝÐdirectly, but � trick it¶ Po worC  s … 3ing˜    › ‡  ò in a lookahead 
‘ion, save—D  ­a$ 0 `group, nG `consum0 1at  a via aÔ #reÀ@. If6 „ overall$Sails,J  	�  0 woñtry alternatives. SoR atransl,2 is#
ñ (?=(?P<name>.*?ý `))(?P= 30# GÓ   Ss areA ö needed: g0, g1, g2, /¢The number9 ñobtained from _nextPnum()/Pensur*Ãey're uniqueý ²across callðacross threads. ð<This is because people rely on the
    # undocumented ability to join multi8 ótranslate() results together viaM 0"|"<  build largr ñgexps matching "one of many" shell patterns.H Áwhile i < n:  ª Ðassert inp[i]Ú ESTAR fi += 1 hf i ==@ D …dd(".*"))   Ubreak h Inot l ¥fixed = []5 ² G and¦ > É  s C ‚.append(Ó 
” Ð 0 ` = "".˜( 2 iï <add@ Jelse¡ ôgroupnum = _next (u  È L ¤"(?=(?P<g{& a}>.*?{¥ w}))(?P= )i¨J7resä 2resm ò)return fr'(?s:{res})\Z'
"""Generic output formatting.

F €er objec± Å $ ð an abstract flow�  = ö events into
specifd  von writ^ %. q  íðnage several stack
structuæ Pto alx ðvarious properties‹ a\ Spe chang¥Ãnd
restored;* ps need npbe able5 BhandõDativB òs nor any sort
of ``\ € back'' Œ „ation. Sÿ î © ðwhich may be
controlledŠð are horizontal alignvq, font,7ñleft
margin indent† ps. A me¤ 0ismü’provided „ qsupportGðviding
arbitrary, non-exclus@stylš' Å nÐas well. Addiÿ ðal
interfaces fac4ateß  Ï‰  å  „rùðsible, such as
paragraph se  a I.

WF€ encapsukp device‡ƒ 4. A¶ s_ f4Ä!s,n 2Ù Ã as physical] `s. TheP`
imple—y ¦¦ work with4~ = #Á makes
availƒ´s21 seu } r ñ;» Q1
maEP ý o@dataoF ø.
¼ tort sys ”warnings
	 .	 E('thÃper modupós deprecated', D BionWH ,¦ ø ×õlevel=2)


AS_IS = None


class Nulle@"""A ¬#erÄ0doe™t$!.
j !Ifå zParame!Ñis omitted, aa EÀ instance isð0 created.
    No methods of the writer are called by NullFormat ±instances.
E ô$Implementations should inherit from this class if i2 Sing at L õinterface but don't need toQ 6anyB t ‰ 2"""’ ódef __init__(self,d q=None):k   #if @ is     =W%()=  Y .# 	    Óend_paragraph„ pblankli‚ U pass- @add_ a_break. .):# �hor_rule! ß, *args, **kw. £label_data0 fÂP, couf%, � r xflowingF  Q o  8aq + âflush_softspacË O p# PalignV¾  * 1op_ ) "  L CfontG x! 5op_    > cmargin@  ( 2op_ '  @set_ï 1ing  #,  ) ú 6styä s( 1op_ O <n=1# bassertW ‰* Fflag- "

”…Abstractåp"""The ïRdard B3terqTÖÍ‹  has demonR ðted wide applicabilityÍmÆ4!s,	ðand may be used directly in most circum�  |A  Itm Bbeen2 !toI ‘ ð	 a full-featured World W‘ •Web browsÍ >@#  Sœ` handl£‚policy: 2½Qes at2pboundar¹  twŒ eß!# LK M fRouterÕ ²ontext.  "LB " ¯ ‘±not checkedÙ  # : de< Rine c< D, so” Bin lG F  È| QL kin allWA<ÿ 5 `# OutpÆQevicev   8 µ! =t   ¡# Current %  Ú<  ¹_stack = []< A7 ¶*ck:  è9 p # Font5 t« Ø7 1# M7 âä ¡# Vertical· b<stax àw ‚ # Otherw Ê, e.g. colorï  no… àe = 1           ò# Should leading space be suppressed
+ ²  self.soft% 4= 0  M aG linsertE Âpara_end = 1<  ð # Just ended a * Zgraph† �parskip „ µ  # Skipped… VtweenJ *s?L ­hard_break� �# Have a $  $ < €ve_label‹ 
 0def¿ _» (9Ñ, blankline):(  ó bif notZ d ˆ    $  > Ð.writer.send_D ) %()J * )ha“     "iff :<� H and‡ @ ‡ à Ú ) -e ž   = Ã 	&" =m $no�!  — \[  	»¬)adS + ¢Ä.} "or~ o 3  o F µ%< )0Æ „ 1+ ñ �hor_ruleØ ×, *args, **kwÉ ž7Ó Ä€ z 
¾ é 	ôl —%! B ÎS_data÷ format, counterÉ\ = NoÐ^ ‘ (or\k\ã�à H  ' ?&((¥ ïv1) or 0¢äif isinstance(ô 7strÙ
0.; _.J  )r Oelse¿ ZŒW > gûvD ^ ƒ› Úˆ ß  ) ",  #3Â Q = ''B  B’for c in 6 
ºif c == '1'  : M  ”+ ('%d' %š - !elL ain 'aAM À            ÿ  if counter > 0:
   ‚label =  ô+ self.format_letter(c,G )C  ela Ž in 'iI'_    )_roman~ .set Ç Ï c² breturnè 
 Jdef ê  ý f, caseó d \ !''?  MTwhilee~Ó, x = divmod( j-1, 26Qð# This makes a strong assumption that lower¤   sŽ  ’ š# and upp$ é û two contiguous blocks, withE [  Ýiorder!  Às = chr(ord(Š Z) + xÌ -3s +t ž   ‰
ôˆ0one� €['i', 'x c 5m']¦ 3fiv% v l d  Ÿ `, indeœU'', 0= ˆÐwill die of I) ¥Error whenó¥is too big> 'J, 10F if;6= 9† C  Â 0 = [È 7] +  +1 & ›  8 ¶ox == 4U Md T Œ½ N>= 5h  ‰  ÄZ 	¦  !    �=x-5 /elr  2  W ¢       Œ/-*xW Û 0 = *  	" f# =65+ 1  ë0aseV'ð.™(å –òadd_flowing_data(  )Mpif not  ": I ‘ ¡prespace =  q[:1].is ~ Apost ' ?-1:(  c À = " ".join( †.split()Ì "if>"noT  ‰¡ š  �­ “² "orG 2sof� ò  < ö 	U   /.‡ 
>  %   " b ' =Ì   ' —parskip =#! Ê   ¡ ; „  B� = ' ' +¢Ë 8  hard_break� “J  Åpara_end = \; à              ò    self.parskip = ð have_label = 0
'   + ò softspace = pos 
# ð
writer.send_flowing_data( !)
- �def add_l+ "al   a !, & :&  v aif not ˆ: return  4 .• 7  ;  Ž E" ")J + Áhard_break =q Ú[-1:] == '\n', $no; „para_endC’ E = \:  •  : |Ë 	93Yeflush_ƒ (h )"ifç!   �  . . â 4à  N c	TQ  	e 4  a1@ 
	c7' 'bp‘alignment!,  
 B and # !	   Anew_# ^ 
 RÉ  " =[ Ë  á_stack.append( J Oelse…  & 
9  'op¦  # 
ý   .5 M 
k 2del." E[-1]É N  
B ` %3 	S ;h	u = None¬ Y  + 8 =%fo8  :ðsize, i, b, tt =   j å d> #> 
  ¨  ½ ÿcç ‘ci, cb, cê Ò2 ¼ U àize is AS_IS: F 1 = N $€ i( i% i" b" b" b" 'tt# ¤ 5ctt%  « @ = († ³aÐ ‡ 7 % ‘  ( 30op_ j,  h  fe! 	U@  7 U  d 	C 'À          fo³nt = None
  ðself.writer.new_font( !)
$ ðdef push_margin(0 ",  !):#  J   . â_stack.append( )) f ý  = [m for m in > e if m]5 cif notv R and G €  „ k # = 6[-1B b ç , ž b, len(S )ø (op÷ ï .if´ 
� >del# 	“ p 
8 
n Ï û Oelse. 

T #³set_spacing -| 3 = 
 Ý ›  ( � ˆSstylel * sl ™@softA ú l  hard_breakŽ   „para_end > E = 0©  dA !no[ N = 1 Ê ÷send_flowing_data(' '1or ½ ÿ Ó s¤i " 
P H ' s  ¿ Ss(tup%. D Ü K7n=1G¾# > O[-n:Q) y ²assert_line Ã i, flagƒ   .j 	º  6 ƒ# ËtparskipÚ¡have_labelÛÑ

class NullW†²"""Minimal ]ð interface to use¸òtesting & inheritance.8A9 ðwhich only provides th@ Q ðdefinition; no ac Bs ar¦ñtaken on any methods.  This should beS Rbase Ñ  [$al¾ s$Š !doL@needË º ]  implementa‚ l Ñ 1"""F   __± !__<b): pasc   _flush  ¡Palignd " !,  C  )  „$   # ¢ ø“ Ë?vel.  ´§ 
½  z ËW  P Þ kBgrapí p, blankØ.   vÖ $ chor_ruºß, *args, **kw/ ÈE h* Àend_flowing_°data(self,  ð): pass
    def send_literal_! ,  ð

class AbstractWr0 R(Null !):P a"""A w ñ0 which can be used in debugging formatters, but not much else.
O ðEach method simply announces itÔ � by printT Áits name andA óarguments on standard outputd A"""
,  �new_align5  à  4n *("+ �%r)" % (- :,))S CfontN   M   (H   G cmarginI  , levelR # r(%r, %d   6 § sspacinga  [  °  ³ dstylesR  Q  P  	O ¨“paragraphS žblanklineV 0 Z2 ]  H a_break^ S & ')"Bp �hor_ruleA ß, *args, **kwN 1 L Olabe’ ­‰x , é  Ëä ~flowingéW 	. Y BY 	. Y nBDumb_jSeo¡u‚sè ûñ the file object‘� 5as !  aÂmeter or, if7 °is omitted,O JQ  TheK [4 is°ñ word-wrapped toi @numba ñf columns specified byH  � umaxcol ’ .g 2is ê  c puitableL3 re­£ a sequenc“ fC 6sõƒ__init__´ (r=None, ‚ 7=72½ u.$ " =Ñor sys.stdout½  �' @ # =I  8.} )" ? greset(c   ‘  ):= 0@ !atÍ    ã/ Tô X  é .Of('\n'*) Q ê € DÎ v l À  def send_hóor_rule(self, *args, **kw):
    ÿ.file.write('\n') 1-'*2 omaxcol) G zcol = 0\ qatbreak  ódef send_literal_dataÂ   »  E  Ü @i =  k.rfindØ –if i >= 0	 4 Û ¨    I P e[i+1:]g  Ë.expandtabs(T _ `+ len(; ( flowingaif notô …: return¦ X „  !or/ ·[0].isspace¹ 
´ K ú1 = J   D V  ±for word inz w.split(Õ n3if ¢ 
Ÿ  ™ B K )È‡ .  2 ”      O ˜ OelseR 
 )5   Q   5+ 1û   ‹ ¶ 	  ,  =  Ø 	" ' =R � 5 ; /  0  f8[-1â 

fPtest(¤s = None…�w = DumbWròf = AbstractFormatter(w¾1if G !is� L 8‘fp = openk 1 ÿelif sys.argv[1:]/   ]6 �X  $ Bstdié7tryI por linej&fp  ‡"if 0== ï
  !  f.‚²paragraph(1‚     if.add_¨ � ; gfinall   5#p 3È 
‹ tfp.clos•– ð0)


if __name__ Ð ’__main__'K å‚)
# Orig„ ò) contributed by Sjoerd Mullender.
# Significantly modifi. óJeffrey Yasskin <jy
 ðat gmail.com>.

"""F0ñion, infinite-precis òreal numbers."""

from decimal import D 
 Dmath <  „operator $re
  sys

__all&4 ['™ ð']


# Constants rela°to the hash‰ Ñlementation;  0(x)¾¡based
# on0 Preduc& P of x9"ulJ ûprime _PyHASH_MODULUS.
  ;0ys.w ð_info.modulus
# Value to be used Lr“ ð	als that reduce to infinôity modulo
# _PyHASH_MODULUS.
 ð6INF = sys.hash_info.inf

_RATIONAL_FORMAT = re.compile(r"""
    \A\s*	  ð# optional whitespace at the start, nH ø (?P<sign>[-+]?)N F# anK  % 	8 ‰=\d|\.\d4  @ ñ# lookahead for digit or .
 w |num>\d*@ ó# numerator (possibly empty)< :g  Ñ# followed by- p   (?:/ç @denor @+))?= 
à   inw 9 |#  A# or$ ] "\.^ QcimalÒ :)? ] Cfrac“Gpart= E< 2exp€!\d�  = d{rexponen7 _\s*\Zž 'an= àto finish
""",W�VERBOSE | óIGNORECASE)


class F¹ ²(numbers.RaÈ !):Å ‚"""This . Ãimplements r(  Í9 
0  In{� two-argu,  $Am of Æconstructor,} ¡8, 6) willE PproduÓf ô
 equivalent to 4/3. Both l Rs musH4be Ì P. The© v€defaultsD  0 N :!& –1 so that´ q3) == 3? F "0. ås can also be ‚ed from:- 2  -¢ ðic strings similar§ Áthose acceptý N- %VfloatZ  Y ™0exa±€, '-2.3'£v'1e10')t l  æform '123/456'' b  +!De¦ instances% Uotherv" ó (including integersƒ  ïÇ õ __slots__ = ('_#W', '_›¼ ð# We're immutable,£ñ	use __new__ not __init__c 4def R(cls,p G=0, d ó
=None, *, _normalize=True sD"""CÌ5s aö ü # @Take c£ like '3/2‰.5', an51, aµ  I /¥ ` pair,Ô!a žz EùsB - ¬V  >>>Ìb10, -8z q ºf(-5, 4 	5 % †1, 7), 5(  3 @ 
5 _2, 3)M  O3, 1� _'314'4 V14, 1 	‚ _'-35/7 *-3ù À>>> Fractionó('3.1415') # conversion from numeric string
  õFraction(6283, 2000) E>>> ! q'-47e-2] E õ may include a decimal exponentG C o-47, 1b ð 1.47)  # directÃ Astru  Å ¢float (exa â ² k ö6620291452234629, 45035996273704965 	ç F2.25 P  A  	2 Dø  ('À &')& = 1ø 5""" Ôself = super(5 ð , cls).__new__( 
2 õif denominator is None:   Ý�if type(ù ' )( :int'  +  � %._) " =. 5 	S , ~ == 1& preturn Y ¶  ? çelif isinstancž ,t pbers.Ra‘?al)© .¿ �  † *._³ . . : Ç !(¥#, )Ç  ;# EÂz ´ ¦ ,KÅ Àas_integer_r?(† v  Ì !?str¿ oHandle¡ -s.Ð ÷m = _RATIONAL_FORMAT.match¡6 @if m¶Þ Ò   õraise ValueError('Invalid literal forÅ}: %r' %h  J  }L þ = int(m.group('num') or '0'7 k5 = /  )  à ¦ 6 û€  p ;els ?   1 C À$ Ð	°  ²   1 ¶ ! ¸  $ óscale = 10**len(5¼  -   k "* I +E ï "*=< 8exp ?expì ?expè I  ?expÞ  if/_ >= 0L 
*=ðexp
                 delse:
  ýdenominator *= 10**-exp4 ÿ
if m.group('sign') == '-'_ QnumerU 5= - 
W � ùraise TypeError("argument should be a string "Q à ö
"or a Rational instance")Œ ¥elif type(© €) is int  ')ò û
pass # *very* normal casea 4(is} h ¤, numbers.¢ Y) andÖ 8 † :  ™ Í ', 8 I = (_  5+ .
 ( *6 .B ,?  	A M ? > ) Tboth s
"_s(ifí  Ù0åˆ ÂZeroDivision�P'Frac[ (%s, 0)' %ÒûÙ Bif _+iz�Èg = math.gcdTH  ¬¬ +< «  $  U %-gX  ŒZ //=  l  fself._< =Þ ^ $ D =N( preturn / ²@classmethoò÷def from_float(cls, fÖñ"""Converts a finite , t to a ræU¢, exactly.p  ÄBeware that ¼.t u0.3) != w(3, 10)B &""k7if žf”‡Integral½  ~ Vcls(fÖ€ nom""f,Ù A (%s¾ Â) only takes@ 0s, Z ¥%r (%s)" %� �   sÒ.__name__, f,%f) )· Í p*f.as_iõ 1er_‡#()bæpdecimalu  £cì êD0 Ãõ© â p ƒ import O 
Í?decÏTdec =H ‡(int(dec"ÙX { ñ  Šeúš     "îÊ (ðÀ Decimals, nû ot %r (%s)" %
  õ(cls.__name__, dec, type(dec) %))9 ñreturn cls(*dec.as_integer_ratio())
- Mdef  aself):   ‰ B"""RP Cthe H  H Â as a tuple.Q  1 .  t of two9 ƒs, whoseA õ is equal to theu õFraction and with a positive denominator.2 5"""  (Ê p._numer- ",  @ glimit_ ? X, max 1=10 
"…Closest ¸ !tom ¼ U Œ at mostW @5>>>H þ('3.141592653589793').« &10þ„ f(22, 7 X #Y 311, 99[ ¯4321, 8765ª /00T 6 KÕð# Algorithm notes: For any real number x!�fine a *b”Uupper # approxim
 n*zx b2 ×nN Öp/q such that#O `  (1) )  >=~ :and R2) if! P r/s '  í¤n s > q, fÇ ’  al& Ùl !DeÚ Ø \lowerÎ ö
similarly.  Then it can b\�# provedÔ " aŠô iÕ:A or k Ö 	C =Qx if,­Aonly 1it J Èconvergent o‡Hsemi fó (unique shortest) continued f‰ pssociatÎ ?o x6¡To find a Ö ä
Æ fªW<= M,l "weG  I Yõ  
‹sû? [ 9 átake whichever,@hese:cSr]× 1 In(!evQf€1ie, 4bou.xsmaller+7 isŽ c…¸n.  If both* Ss are˜(� CghappenD ëwe$Q == 1à  q Í Émidway betweD )Æ LÌ r---i.e.Þ Afloo" T ,Î  GnC,if`F < 1À §üraise ValueError("Æ pshould ¦t least 1"õ!ifã.< <=z v Kð Fraction(self)
#
  ñp0, q0, p1, q1 = 0, 1 0$ ón, d = self._numerator, pdenomin 2 µwhile True:  q ‰a = n//d Éq2 = q0+a*q1 Çif q2 > max_f 
S  W Ybreak; × à 0, ph  21 ä •d, n-a*d
 [k = (‚ g-q0)//® Pbound>áFraction(p0+k*h  	 5q1)Q ,  ó , |" sif abs() -hF) <=  1-�)
rreturn 7 o ;els…( 1é ‘@property7 Edef ç'(ag ; aA ±C " E  x ›__repr__(á 0"""  1"""©  ü“ ñ '%s(%s, %s)' % ( õ.__class__.__name__,8  <    w Þ å )­ /st¬ 1strƒ )« !ifË.Í_ == 1ÈC Ž #Ög'%s/%sÉË    Äô_fallbacks(monomorphic_ $,     `"""Gen ôes forward and reverse G ðs given a purely-ra7%al * ? Qa funY† from thK ‚ module.— ÓÇUse this likü°__op__, __r	 5 = Ã õ Tjust_Ž E_op,´ 3.opü e AIn gë ðl, we want to impleme Óhe arithmeticF uions soæ äthat mixed-modÕ & æeither call anY )e whoseG ñauthor knew about"ðtypes of both argu™ Ñs, or convert G !to8 ðnearest built in I ˆd! œ0ion/ ere. InD Ö", Ü Beans ñwe define __add__S 3__r &s:Ã b L0, oo &   0# Bâ  § fs have¿'s/g¾ attributes	]# so á rdirectl l  áif isinstance(š „, (int, )«   ? ³' Ý .¨" *è .¹ +` A  † 	J ÏI Àator,
        
ø	self.denominator * other ,)
C ÿ(# float and complex don't have those operations, but weH  £know about6 ðtypes, so special casS =em.@ ñelif isinstance(» ,� -):/  Ç breturn# (þ 2) +ó / ^ ñ ` % b @# Leù e‚  ý ® take overð ½ @NotIuymented
¹ Ádef __radd__~ ,\ ¯   # ' Ñ handles more‚ òs than add becauIre'sj  Nþ# nothing left to fall back toÁ ¯‘numbers.R./al«   l ý @FracVÝ @.numf¹- +±  I  6	J  ,H 6 Lf/Re	ƒó Ä  „ °d C»pÊ& i  k ¦£AñThere are 5 differentäás for a mixed-@addiì5 onA  À. I'll refery x`of theP`ve cod8¥at doesn'tC 4 L 3E, orÐõas "boilerplate". 'r'C  wiçTe an ~F of Q áwhich is a subÎ %of? ëU (r :6 D <:  !),^vb : B <Ì´ . The firs@úree involve 'r + b':Q1. IfJ n _, intú  C, we° 3Dthat˜"ly¢  xzis wellð2s s§^­P i¨v w23to [ñ a value from __ê ´ `'d mis½i°possibilityÜ t B defineŸø€intellig�?ö-so¸ dshould› 
ö¢ C± ð . In particularÀ B �@  ?`, even10ugh®c…  ge’ð exact answer, iŠn case
  ùthe other type wants to do something special.= ý#3. If B <: Fraction, Python tries B.__radd__ befor} 8 1.__' ù. This is ok, because it was| ÷   implemented with knowledge of’  soA <canA  handle thod ƒnstancesª € delegatþ ¬to Real orC  Co… 5x.
 ðThe next two situaðs describe 'b + r'. We assum‚ Eat bC adidn'tÏ e aboutÍ v in itsû ] Õ, and that itF öuses similar boilerplate code:±  4ÊRS “al, then Àà converts both-thÍ“builtin rC Qp(hey loÐ £ `'s us)² ª  ‚ º   proceedse@5. OžTwise,� _`Qto fiü  u½arest commoì‚base ABC,�fall backÊ  Q»  `. Sinc–it class does¢2sub a Qcreteô <|re's noæ ¶% € � `, so wÍ  ed Ntry úàhard as possibÃðo return an actual value, orÉM use½÷will get a TypeErrorÊ5"""½ õdef forward(a, b):  ¾cif isiB•(b, (int,·)/  3 ° òmonomorphic_operatorb 	a -elc _floatY  V âV 1 0(a)¿ ] cØ_ 3 a *se1@NotIEÊ™ ný.__name__ = '__' + Ú $ +$ D  1docC o1.__  îpreverseÍa
‹´a, numbers.<0  í ë# Includes intä ! +… ?eal�  ` =(
 5b))A ™ {k þn & r /¯/àr' + fallback_óoperator.__name__ + '__'
  ÷reverse.__doc__ = monomorphic_?  
8 ãturn forward, H ! õ def _add(a, b):5 µ"""a + b""" ðda, db = a.denomin° 8, b . !rew âFraction(a.numã   *H :+ b %a,= ó  !da4 )µ _² ¡__, __radd°_fallbacks(' %, 3addA ö ?subö -ö J-ö (3subö 
 ? = ö 7subö 8subö ?mulö *ö ¾¹,* *{ S__mul¼ 
 ¼ 7mul¼ 3mulA ²?div¼ /¼ ½r	äÖ ¿“ “__truedivØ  Ü 7divÜ / M à _floorå æ X	Œo) // (Ê z Ë  Ì " Ñ  Ò _divmo] (aœ Ÿb, a % b)g'U„n_mod = o 
X1b, @¶)øéG ¬P 6 d?"___ $ "  ,” 	'È Ã wdb) % ( Q.a)å 3modâ 
 ß 7modü)mo[o_pow__¬B** bÆ Ýõ.If b is not an integer, the result will be a float or complexÄðsince roots are generally irra~Dal. l h F p 9 ® žóif isinstance(b, numbers.Rq M ê *ifð == 1:
            ñpower = b.numerator
  2if ' ]>= 0:  * õreturn Fraction(a._P 2 **@ ,;  ?   a._denomin� = ý_normalize=False)s Yelif Ÿ Ö › -Ù 	< Ø /seœ*(-c)d� A Ë ? Ì /elÈ S# A f]"alOý will generally produce anõ`# irraš­al number.% Äqfloat(a×  bFž 6  !b
\ ödef __rpow__(b, a) @"""awAb"""-  Jif bý€== 1 and q ±ñ# If a is an int, keep it that way Åjssibleû Á � ·Å ˜ Óisinstance(a,B3s.RSÙ  0 R ¼ G, a.Ce/ : 7 $ ^ ° " Âf“kpos__(�ô+a: Coerces a subclass ÷ 5 toÞ´l ì ù í Ì., û— >neg— /-an 	 Ê	\o /ab oabs(a)s 	" ')æ ^truncè  { ©<~}-‘0 //ágf =À	A >^floorÁ Qmath. Æ ¥ aa¡   _ Oceil^   ] ‘# The negŠñs cleverly convince “ 0divÁÐreturn the ceƒiling.
  ðreturn -(-a.numerator // a.denomin !)
1 ñdef __round__(self, ndigits=None):'  [ 1"""( 
& H  ! RF ös half toward evenš 5"""N $ifh @ is k j  M ñ
floor, remainder = divmod Ù  , µ 
Ú  @  'ifD ]* 2 <1 
y  9 C„ ²   -elP >P I + 1T ò # Deal with the@Jcase˜ { ’ š % 2 == 0!    ¹ P / 	˜ óshift = 10**abs()¹ ’# See _op_á_fallbacks.forûÑto check thatÙ §results ofG bthese H ðions will always be Fraction andF Prefor%'veF ™)k_>)%Z (=  G1 * ú #), c ,el@F /> O lChashk
]  Ý)(z æ# To make sureN / W of a#@greeBJ'shH - ñically equal integer, float or Decim ˜stance, wm`follow�³ rules for X  — àes outlined in) † �documentaÖ@.  (Iòlibrary docs, 'Built-in Types').A ³:try÷¡dinv = pow='._åö, -1, _PyHASH_MODULUSÅúexcept ValueErrorZ # ` meansË  re±öno modular inverse| §  5_ =| 5INFLÀ# The generaýðgorithm now specifie} I absolute vº P { #¦ ˆ5 isu      (|N| * 7[) % P" pwhere Nä  !._Ù 2‚P QŒ.  That'm ¡optimized T  
0wo Ù‘:  first,;àa non-negative�; i,—  P0(i)÷i¶ B, buV3intí EmpleZÛ doesn't needM  toLAide,Ô �is faster]pn doingd û explicitly.  So we doL !  ~ V" pinsteadC becond,^0unb0òed, so its product
  K mayM ðbe arbitrarily expen÷sive to compute.  The final answer is the
  ð# same if we use! û bounded |N| % P instead, which can againJ ò!be done with an int hash() call.  If 0 <= i < P, ‹i) == i,M âso this nested+ H û wastes a bit of time making aG ñredundant copy when× € 1butÍ @save± üarbitrarily larg+Qamouns e’ation for.  Y .€  þ 2_ =¾   õ(abs(self._numerator)) * dinv)< cresult9 _ž4 À >= 0 else -X _; pturn -26 H B= -1.  
/ ñdef __eq__(a, b):  @"""a–Eb"""  if type(b)I6int0  4 !rey aÚ C ð  and a._denominò   1X  iscñance(b, numbers.R`'al™ i (j .S t `  4  ˆ 'b.™ ‚?if • €Complex)c p b.imagÏ 0¥b = b.real‡ R [floatÜ Ðif math.isnanj$or Hinf(¤Ó #òwarisons|ð	finity or nan should behì» K #ú1wayÕ0any@pite a, ‘êreat a as zeroì E 00.0bü    ­
%  2 nqa.from_&(bŒ: ô# Since a doesn't know how#arˆ b, let's g 
“ `# a chw7  itmJ
ä ® @NotIgmentedMqrichcmpâ·, other, opå‘"""Helperb Gº2 op!s, Pinter» ”Ronly.g  4| ú´ between a 7·Ý `Ñ  `,³“ eiž 1 an¦ 5  Qor a Œ! `$ `ÁA    nox C ", ;> 
Cf. `op`¥ G Úõ he six standard? 9"·  Rnvert� ê$öwhere reasonableù
¹¤o*‡ v
û â  ¶
8= éÀr)
        i÷f isinstance(other, float):
  Òif math.isnan) D) or 3inf 
7  B ñ return op(0.0, e )] Oelse8 	`self,  a.from_¡ p J F z ñ NotImplemented
{ ÷ def __lt__(a, bî ±"""a < b"""* Ã øa._richcmp(b, operator.lt)U gU >U gU /leª =V *le« V >V gV @bool® UH!= 0Vð# bpo-39274: Use 9 ò() because (a._numf > c) can ×%an ñ# object which is not aQ .& 8 f [ ð# support for pickling, copy, and deep îPreducG Ÿò m ( ñ.__class__, (str 3),)y Œ Y "__ rif type Æ == Fraction# ¡ m   ð # I'm immutable; Úüefore I am my own clone  E ² z ˆˆ€_denomin	Ç $Ë g, memoÑ &öMy components are alsoä Ç 0ñ"""An FTP client ¶ûñ some helper funƒð2s.

Based on RFC 959: File Transfer Protocol (FTP), by J. Postel TðJ. Reynolds

Exa©p:

>>> ì¡ ftplib imš2FTP @tp =ª ð
('ftp.python.org') # connðto host, default D @ p.login(0  ö, i.e.: user anonymous, passwd Ñ@
'230 Guest F ò ok, access restri!… apply.'t ñ retrlines('LIST® Ðlist directorå ntãð 
total 9
drwxr- ‘   8 rootäQwheel
 ÿ   1024 Jan  3  1994 .9 &: 2s :binu ; ‚etc
d-wxì @   2úÞ é ðSep  5 13:43 incŠg{ À4 Nov 17  19Ð93 lib
drwxr-     6 1094  Pwheel	   û1024 Sep 13 19:07 pu; `3 root-  ; ðJan  3  1994 usr
-rw-r- F   1; D I p312 Aug" ; ð$welcome.msg
'226 Transfer complete.'
>>> ftp.quit()( ƒ1 Goodby ñ¢

A nice test that reveals some of the network dialogue would be:
python ftplib.py -d localhost -l -p -l
"""

#
# Changes and improvements suggested by Steve Majewski.
# Modifie �Jack to ” !on£ Kmac.' pSiebren* ñsupport docstrings� LPASV6 ÐPhil Schwartz< áadd storbinary8   ü lines callbacksG ôGiampaolo Rodola'K CTLS � q.
#

imš 5sys Áocket
from s  * ¿ ö(_GLOBAL_DEFAULT_TIMEOUT

__all__ = ["FTP", "error_reply Ftemp Gperm qroto",
p "V I @s"]
_Áagic number ¡ <¢ ò.h>
MSG_OOB = 0x1A  ð# Process data outhPband
d ñThe standard FTP servØ`ntrol /ñ
FTP_PORT = 21
# 5 ð	izehint parameter passed{@read³!()´ñs
MAXLINE = 8192z ÐException rai8 �when an ð or invalid response is received
class Ex(K !):…  I •()  (�# unexpec
�[123]xx Æ	C  ÉB b # 4xx´ s5  ð5 55  6 #	ñ
does not begin with [1-5]ZTAll e^Òs (hopefully)udmay bewAhereh‘óaren't
# (always) programmingç Ö on our side
µ2 = º A, OSpQ, EOF
 )™ 0Linýârminators (we h  ™ðput CRLF, but ac @ any± €CR, LF)
 Ã = '\r\n'
B_ b £#citself›AFTP:tQ'''Anñqclient - !.
 ðTo create a connec¨,Ì - 0 us¡these argu[_ c ˜q, user,š0wd,Ù ót, timeout, source_address, encoding‹  he first fsg   a¶3ll b,Ãòhave default value ''.Ô 'he«#Â´€ pÂ´ mustqnumericI D sÍpNone ifpJ çb, meanTat noÒ P willP 0set*ðany ftp socket(sð).
    If a timeout is passed, then this 0now … default0 ±for all ftpM ðsocket operations " F rnstancev ðThe last parameterg ôthe encoding of filenames, which€ Ás to utf-8.
x T­ ðuse self.connect() with op‹ ô
al host and port argumentC Áo download az  , R ñftp.retrlines('RETR ' +"  œ !),‚  or* dbinary~ öslightly differenz sOo upx 3stox #) a   a z phave an{nœ 5 asã P (seeÁ irC0inis¹ Qbelow§sdetails ¢/  Afunc: P firs/ñsue appropriate TYPEW  g@PORT¸ ÃPASV commandô 2'''º`debuggð1= 0: ¦A= '' «`= FTP_O  0maxŽ’ = MAXLINr  |q = None&  = xwelcome  ìò iveserver = Tru< ð.# Disables https://bugs.python.org/issue43285 security if set� J Þbtrust_c ô_pasv_ipv4_address = False@f __Ÿ0__(Ë,´1=''Œr	  µ !wd @acct	 ð  Í Ñô=_GLOBAL_DEFAULT_TIMEOUT, source‡ =62, *RF  	 �!='q5'):n @"""IKAalizïñ method (called by class iý!ti& a ] ? eé  :Plocal,§0to 9@dardb Z A OÜÎ õM (|¨ 5  œQuser,í@wd, I 0 wlogin()¤ 5"""ò  ”.% =­
! 
\+ =m
- ª$ =U !ifp ¼ ‚ Õ  ')0    ifµr4   8 Ý û )Senter€íareturna. ð# Context manageLà protocol: tryÏ0qui‰‚if activ_ deèCexith w, *argso K1lf.Öais notÛ
Ú :try ë x 	ñexcept (OSError, EOF
 w  @    e	= ofinalln  ©  T   ‡gclose(uÐ  ó ü4=0,_=-999ºÁ B'''Cÿ ~ !C.  AëÐs are:
      ¡   - host: ð name to connect ñ
(string, default previous1 4)
  q- port:  9 D integerE   4 	E Ótimeout: the   O ±set against Éftp socket(sA ðsource_address: a 2-tuple (é ,¡ Q) forH D  b FbindÏ   ras its S  S t before%Eing.7 5''' !if#u != '':  0Pself.Ž ! =$  !ifŸ O > 02   -! =" 2 &!= -9999  " =R? � " ñ is not None and ! 
] óraise ValueError('Non-blocking # (] C=0) ` 0supÍ 6ed'¼#ifi¼-  � 
x ’ –- => ã ósys.audit("ftplib.›0", I  �  › ˜  $ .' c  rƒ.create_H Qion((&  ÓD   ,“   
à =a 
 ¤  af¢  [ ® u.familyt @ Ifile% @make â('r', encodingm  g ewelcomG †getresp(& areturn\.- 
‡ sdef get 3)ÙR'''GeÝ" Ò message from®VerverpP(this(Aread±ôsquirreled away by©;())Ÿ–debuggingŠ  ›ƒprint('*‹ #*'Ì�sanitize¾ ß )ý Aset_p QlevelC !,  
S,  œ % ø `The reë  è rrgument% f meansÍ f0: no J ƒoutput (Ðº 11: õ ‘ commandsP Ü‘onses butÖbody text etc“ s2: alsoD ¦raw lines š £ < U pp$XCR/LF˜
•" =Ö @1bug¿G\ _CpasvY:valWðUse passive or act
 Amodeædata transfersÚ ãWith a false amQ, use”Ànormal PORT L ç9 ?tru8 DPASVl.¨ sñb = valé Ô# Internal: "Ž@" a T!ngÊ È3ing6$f ( ð(self, s):
     ÷   if s[:5] in {'pass ', 'PASS '}:
  ù
i = len(s.rstrip('\r\n'))& 3s =S õ+ '*'*(i-5) + s[i:]* ñ return repr(s)
 ñ(# Internal: send one line to the server, appending CRLF< pdef put. a(self,9 )Á pif '\r'è  % u or '\n )  ñ ñraise ValueError('an illegal newB öcharacter should not be contained'ðsys.audit("ftplib.á gcmd", ¯ Ë  � a =Ä & +æ    ² elf.debugg:> 1¿ Òprint('*put*'a  .sanitize([ ³ ~ Q.sock’ 1all! q.encodeK Oing)¨	zcommand«• (throughœz ¯1cmdc ®™ å $: Õ ?cmdÕ ñ b‚dIfromfäpa f.œ1# R1EOF @ šñconnection is closed1  é &ge˜’ ˜  , Í�file.read @.max F + 1H!if‚  1) >;) 
Â¤ ù("got more than %d bytes" %A 	f 
~ c/gec!if µ ¥ L0â , �[-2:] ==ÿ
9    �vine[:-2W el"  1-1:Õ ¼= 	1=  ] /ý get a response .ñwhich may possiblyÐ #ò sist of multiplÕRs.  R�a single s£ng with noA Utrail‡A  If§‹ 0cona sb ,B phese arB`parate Æs Ì… ; ¾¸  šÃæ	G 5 A[3:4È:'-'Š cÇ3‰ \whileÙ  1nexO;x  &    } _ A + (ï$+ @ ¨  ,    ¨] 1[:3³ ¢  ×\ &  P ç =!= ç 2 UbreakH n(
Œ�various eªs’ðindicates an error
    def ógetresp(self):
    0 =  õ .getmultiline()# "if –debugging>  E €print('*J 2*',, �sanitize( )L h 1lasŒ 0 =  E[:3]m c 1 ðif c in {'1', '2 :3'}ˆ areturnR N 9 k== '4'- ò aise error_temp¨ 8 58 Kperm8 rW Sproto  Y €def voidô ‡±"""Expect aÂ ðonse beginning withø A."""L  y H »  
¶  p[:1] !== Sreply«  Z   Os  ¿ \abort¼ @'''A ñ a file transfer.  Uses out-of-band data.O  d ñThis does not follow the procedure from õRFC to send TelnetG 0IP \ ±Synch; thatU €n't seem7 BworkF _ Åservers I'veF ðtried.  Instead, jusA !nd€ �ABOR commk bas OOBÎ 5'''D  :P = b'. ¥' + B_CRLF  KJ > 1˜O®put urgentU g UPsock.@all(! –, MSG_OOB~ 2í &  ”•v0426s2225 6|ø å  M ­ 1cmdOW, cmd—@'''Sêas3nd G  Ã ¥  %.^0putV  P x9   	!)
  × – 4    Š ?"""Š  e­ [ .›  ˆ  Ù (œ  &pv€, host,  .EPORT36 -qcurrent= +  Qgiven ¢ R v number \�hbytes =E ¦.split('.']p! `[repr(Q …//256),  % Ø2 \ "+ D • qcmd = 'Õ  N‘','.join(9 { ß D Ì J  â F#ep¼FOn EPG‘?6aaf = 0‡  f    = ³ªet.AF_INET " / 19 6:  2: À    if af ==W 0:
  õ raise error_proto('unsupported address family')< ófields = ['', repr(af), host  C e), '']6 ò
cmd = 'EPRT ' + '|'.join(O _ ñ
return self.voidcmd(cmd)
K €def makeb ($ )Õ ð'''Create a new socket and send a PORT comm ¡for it.'''Z   2 # =9 !.cM ó_server(("", 0),=} æ.af, backlog=1Ä  ž H @.getW ðname()[1] # Get proper *   B 7  û  4 < 0<  / < "if3Eaf =Â vAF_INET# å Erespf 0endƒ (L ,Ž Æ Oelse; Oeprt; Ž ûtimeout is not _GLOBAL_DEFAULT_TIMEOU  ú 3set< æ. � ';ock1asv4 ó""""Internal: Does the PASV or EPSV handshake -> (ý?"""h ¦untrusted_]± = parse227¤ .™ â'� &')à  ªF H ˆ³_pasv_ipv4_¥ 
£ 8  p : = � Â  " Û  8 Ú†Pgetpe7¼0Î@  < /ä 9ä  i2'),©a ý ÝT ã�ntransfer6 ª P, cmdx|st=None÷2iti9 Q overòdata connection.f  
!If! 3 �is active½ K 6K O5thec8 l,…aacceptY u #  m h5 isG Ipasst 4asvt ,¹ b to itb Astara C Š Ð.  Either way6m  �0et Ë ª Ä  * Pexpec#jsize o+G.  T

, pmay be §Á if it could×be determined‹ Opœðal `rest' argument canM Áa string thais aã5 …to a RES°  is¢ es; ‚ially a �B °marker usedrAtellÊ'   Bskip\Aany \ up Obgiven M .] aU=$  	t 
ø,Üðmakepasv()
       ðconn = socket.create_ òection((host, port), self.timeout,
B  ñ source_address=I 
 )P Itry:  g þif rest is not None%  ) _ ñendcmd("REST %s" %? 
i  / @resp Þ s6 >cmd) ð# Some servers apparently 7 ý  a 200 reply to¿ ó# a LIST or STOR command, before the 15B ?  ˆ(and way0 2226r ß). This seems °be in violaÝ1 ofs ÿprotocol (which only allows…  01xxÁ ñerror messages forÜ  %ÿo we just discardF  t«  x]onse.! ê¿p[0] == '2'è A ¹0get (¶M _!= '1M Qaise Ø _Ä(P 
O nexcept�  2o.close€  rY ã ;els¶Bwith[@makekQ() as•k Î kee abov¹˜ ç ¥,V ‡ 8`ock.acÓ· "if•ðvþ_GLOBAL_DEFAULT_TIMEOUT©s C.setD (™ ZÓBp[:3ï;150¤!# 1€is condi¾ alÍ@caseoåreceived a 125m „ û size = parse150Ö`returnW 0n, + 
= Àdef transferE ¹ a, cmd,D=|)ô ˜"""Like n4 b) but a sV âl1"""j  £ $ o	C q F)[0]š QloginMó, user = '', passwd Aacct § @'''L; õ, default anonymous.'''� !ifa [ ä  ©    U 7 4 „ 
6   8 /  ¦ 
-   + x 6= 'y  Z @in {J'-'}N 1# Iåðre is no anonymou÷s ftp password specified
  û# then we'll just use anonymous@- ûWe don't send any other thing because:5 ö- We want to remainb , 	Ÿstop SPAM% ˆ W 1letï Psitesh ð discriminate byç  Û +r,L ù  host or country.! ?2d =HVd + ''+ Àresp = self.Ñcmd('USER ' +x ), 0if / ª[0] == '3'0  K APASSK � M +AACCTM OacctK \!= '2˜ ðaise error_reply(ª ? areturnÛ 
ì  deé �trbinary(ð, cmd, callback, blocksize=8192,> vt=None)ò"""Retrieve data in T ò mode.  A new port is created for you.Ž  ôFArgsX  � ø: A RETR commandþ§  $ ñsingle parameterÄ @ablel!be ¡ed on each  r  ì 2 ofÅ 9ream   
ð: The maximum number6 #byÚ : P fromÔj ð socket at one tim& [default: l]: Àrest: PassedÐ €transferÆF).  :  ›]QRô	T ½  `onse c i 5"""  P.voidd †'TYPE I'MBwithNŒ = ­ ˜) as connÎš  while 1  ƒ7=2 e.recv(ns  (   aif not¥I  ! UbreakÉ     -(l 
V ù# shutdown ssl layer@ ‚if _SSLS¶!is�  kð and isinstance(ó ,, & „    # †.unwrap(‡ �v ¢"()É¨_lines§0 = � m “ ? ‘8p, LIST,™ONLST ¿n optional ª"ha!;all :   4 Á Î †�the trailâÉCRLF strippe¿ =  -`print_J /()52!ifh ; é •
£Ðcallback = pr£int_line
  õresp = self.sendcmd('TYPE A')& Bwith$ €transfer( õ cmd) as conn, \. [   ñ	.makefile('r', encoding=r  G 9fp:C zwhile 1  \  Á   = fp.read (N 0max F + 1»  1   pif len(! 2) >Í 1 b  1 ùraise Error("got more than %d bytes" %I v › ßdebugging > 2p òprint('*retr*', repr¯ W @not Í M YbreakN Ó  ÿine[-2:] == CRLF@  Z ! =a ][:-2]K %elM 1M O'\n'M 1M ‚callbackï 	l ù# shutdown ssl layer! ðif _SSLSocket is òNone and isinstance(¦, )­  # †.unwrap(ubreturné@void31()
† ádef storbinary‡ô, cmd, fp, blocksize=8192, è =   â!st ‹ P"""Sti a 5B in \ ñ mode.  A new porí òcreated for you.–  ìHArgsâ ñcmd: A STOR command.Ã  - @  fp  s Ñ-like object ù a hQ(num_÷y) metho@ ë ð: The maximum data 1 toF � from fpž q; ovÒ‘ a   theCÐection at onc [default: XPbp: An op8 ñal single parameter‰1ablÏH‡alled onˆ R eachÍ2 ofÔ  afH i= vsent.  –  ß– Àrest: Passed	E):  … R{	È ^ ‚0ons&deÆ5""": v ® ©ÑIÑ–� B/  ’6buf‘(DL!if :bufZ   ¸ Š žall(bufX ûU    ? b” ’saÖ F
Àle in line móode.  A new port is created for you.

  UArgs: ÷  cmd: A STOR command.  fp ùfile-like object with a readline() metho; ðcallback: An optional single parameter ' ‚able tha¼ ‡alled on‡ ½ €   each t 0 af? i4 ösent.  [default: None]ö iReturnù àThe response cEp 5""" õself.voidcmd('TYPE A') 	$ €transfer( Ècmd) as connmš  while 1  Þ •buf = fp.TV 1maxí 6+ 1u  0   èif len(buf) > 0 `  0 ñraise Error("got morxÙn %d bytes" %I u not bufe Ubreak  w    if2 ÿ [-2:] != B_CRLFA + T1] in*  >   = ][:-1]`  d C  +7 '  ‘�.sendall8" !if’¹  f  °  ? ù# shutdown ssl layerC Áif _SSLSocke· I ªð and isinstance(§ ,, )* # †.unwrap(¥rèÂ µ á"()�def acct()§, password\ q'''SendJõaccount name.'''É õ cmd = 'ACCT ' +H ! „ † 4nls† Z*argsƒ ¬° a list of ~sóa given directory (ñß the current)¯ FNLSTÄ  1argT   =Q + ('ä 6argd� 6= [† RP.retr¬bs(cmd,¶ v.append= D 3dir– Laõ pin longÝm¬4By 98 –to stdout5 O—Álast argumen›çP func¼U; allå•non-empty5 Ps befPiI  Sancatenˆ to¢> ELISTnó  (This *should* only be usÂaa pathŠ)‹  N ÜQunc =p  if§ as[-1:]lPtype({P[-1])’ '''‹ í # ," =C  ~, ˆR
 Ä K Q+jWðunc)

    def mlsód(self, path="", facts=[]):
  õ+'''List a directory in a standardized format by using MLSDC ñcommand (RFC-3659). Ifv ö is omitted the currentl E Ñis assumed. "¨ "= 0a lž ðof strings representˆ  T EtypeG Rof in® ðion desired (e.g. [", €", "size •perm"]).
A PRetur ðgenerator object yieldu õa tuple of two elementsC ðfor every file foundT ‡.& TFirst=  ë  Ì 1 Qname,/ second one!  £…ctionaryG Sinclu— ð variable number¡ KQdepen' #on[ ErverG  Àuwhether@arguÚ ö has been providedÆ 5'''D "ifa] d ƒà.sendcmd("OPTS>ñ T " + ";".join(ñ) )Q  4
P pcmd = "‚a %s" %i4 Oelse1 "' ¥lines = [] © Aretr a(cmd,  0.ap=˜  á   Õ  sq Í _÷P, _, Ð! =L  .rÇÐp(CRLF).partiÑF(' '_  6¥entry = {}     z  _  z   sg ÷ [:-1].split(";"ß 5   1keyŒ qvalue =©€ :"="€  4 „ ñ[key.lower()] = A 	”   (æ !, 4 )O`def re ˆ@from @, to ¨ A'''R+ ! a6.Yqresp = ¡J¤'RNFR ' + V Á ix Êsp[0] != '3' ðraise error_reply(a ? ro 1voi¹Q'RNTOo » ã ddeleteã !ilÇ 
Û D# Û ADELEl  )qÛ 0:3]ë{'250', '200'}ç Ç  Ü ? 3  Â$cwG1dir� g È'''Change toB	¾ ifï : { == '..�6tryR  x  „LCDUP(SxceptÍ Î~ as msgR  if �.args[0][A ;500�       +elÈ 6  â ó'  # does nothing, but could Ú ^ ÕA'CWDøM  4 	’7cmdh ÑƒÀ, filename):#
  õ'''Retrieve the size of a file.'''+ õ# The SIZE command is defined in RFC-36592 ñresp = self.sendcmd('A 1' +a Uname)0 0if 3 å[:3] == '213':  ² 2s =# ¦3:].strip(?  ! áreturn int(s)
< €def mkd(‡ Q, diru X �'''Make a „ectory, H Àts full path8 	 ­ à 2voià @MKD ß i „  › ð0# fix around non-compliant implementations such as IIS shipped
C   õ# with Windows server 2003j aif not)p.starts3 v('257')ù  N è ç �parse257(å J/rmJ
YRemovL2Ÿ ‹.2+RM2É  ·"pwm µ ± äö current working¾r „r FPWD'8™³Aquitä
-`Quit, ­Bcloså`conneck+GQUIT,ºJ y3 *s%  0 
‘ C‡  Ó�out assumÍQanyth	 b )itª :tryÇ ­Š  B à   „ . y = None !if‰ Ë 4   
[  B  = .Ñ 7kfinall‰ Dsock‰   	l ‰   ‰  !is½‰  " ‰ 
ñimport ssl
except I RErrorÏ ¤_SSLSocket} Oelse  Essl., Ïúclass FTP_TLS(FTPÒA B sub( 0whi¾±dds TLS sup� !to' a3WscribÔ=R4217.s  vC§ 	‘usual to K !212Àicitly secur+ ÀµFTP control{ï÷ before authenticatings SL @dataM ,à requires user� Cexpl… 5askp àfor it by callš ÷ prot_p() methodq �Usage exaŽ û ð >>> from ftplibï  áƒj '  tp ÷('ftp.python.org»À>>> ftps.logòin()  # login anonymously previ ósecuring control channel
  £'230 GuestI õok, access restrictions apply.'9 ò >>> ftps.prot_pŒ ¡switch to y `e data| !neG > ’'200 Prot   level set< Pf  òretrlines('LIST'û Ðist directoryh Ctent| %lyn utotal 9 `drwxr- ‘   8 rootQwheel
 ÿ   1024 Jan  3  1994 .A .B 2ƒ ?bin… C 6etcC 2-wx@   2Ðþ 	öSep  5 13:43 incomingH E 1r-xH QaNov 17Q_3 libC a6 1094Œ ‹ ¿13 19:07 puC 3T5usr† `-rw-r-  C Ò ” ¡312 Aug  1É Æ4 welcome.msÿ'226 Transfer completeBequit()„ »'221 Goodby/ # '#õssl_version = ssl.PROTOCOL_TLS_CLIENT
; ñdef __init__(self, host='', user	 apasswd 1acc A  økeyfile=None, cert bontext @ ò timeout=_GLOBAL_DEFAULT_TIMEOUT, source_addressK ? *,N ùencoding='utf-8'):( "if# xt is not · S and È  
<  ñ ðraise ValueError("V9extC ù	arguments are mutually "‹  O  ¶"exclusive" & ¹ sº )D » C\ 5 or-º ý import warningsE .	 $("l  Ô× Áe deprecatedç/ a‘v"custom3£nstead", DL BionW˜ :, 2² Y.� =_	¾ # ¤ =	% 
úÐNone:
         ócontext = ssl._create_stdlib_ ô(self.ssl_version,
?  ”certfile=	 H $1keyG  )Ž ¬ ¹ 3 = 
 # ú _prot_p = False! ÿuper().__init__(host, user, passwd, acctÁ ôtimeout, source_address, encoding=	 %)
� ‘def loginwv 4=''y   | 	 Õsecure=True):C  –2if  ñ and not isinstanceZ a.sock,÷›SSLSocketD  H PZauth(hƒreturn s+² "Ù I  S j ”'''Set upµ  ¸0rolÀünection by using TLS/SSL.'''ó ä #÷	raise ValueError("Alreadq "þ ^
" >DÊPROTOCOL_TLS“ O0rest à.voidcmd('AUTHÖ 'e OelseB ;SSLB g  è à Å W�ext.wrap_ )et`erver_ïQname=@   
™   ƒW  J P.make —(mode='r'è2 í 
 I 
1cccœ + ñwitch back to a clear-É â 
9(', L ™( Ö %ï?CCC¨Q un§x Y 
/Ð2	]GdataZ! # Åñ defines whether orHBthe B �hannel is†0be ƒ iected.˜õ# Though RFC-2228Z Åfour possibl?  ìjlevels_#@ ð4217 only recommends two, Cî|Private† ! (Ü òC) means that nox6ityÎ ªused on th#þ "-cþ #, n  Y PY ,. xshould ; ç<TLS¼ PPBSZ ð  Î MUST still; ðissued, but must have a paramet¹ðf
            # 'ð0' to indicate that no buffering is tak
 ÷place and the data
  ù# connection should not be encapsulated.5 ùself.voidcmd('PBSZ 0')# {resp = * [ROT P* # `_prot_2 KTrueJ Pturn Q 
 Adef 3  c(@ %):  Ü ñ'''Set up clear textû í I.'''5  a ² C² OFals³ ú# --- Overridden FTP methodsÙ �ntransfer_ ß `, cmd,kt=Noneï  Â`, sizeÀ yuper().E ? 
¥"if¡~
E I Z  T  ð0conHÐ.wrap_socket(  ,F 6  ðserver_hostname=ã . 
ž !reùd Þ 
&_abortþ6# oeðas we can't pass MSG_OOB flagEŠsendall(| 0linMùb'ABOR' + B_CRLFë ·  	.D  6 
H U€getmulti& o  ifÝQp[:3]~ò in {'426', '225 >6'}¢±raise errorÆ o(s … I  Có__all__.append('FTP_TLSç  Q `s = (E[ C, OS	 3EOF
 qssl.SSL  )


_150_r7aNone

¤rarse150– ¿ @'''P  ‘Q'150'ý òonse for a RETR requestzRs3 ”expected '@ or x ; !isI€guarante. o¾Ñbe present inP ²150 messagem –1!= « Ã  âzRreplyä e sglobal  $if  � ª K †import rF: á = re.compile(H  {    r"¸ ð.* \((\d+) bytes\)"(Ð.IGNORECASE |C RASCII4m =Š g.match¸ !if6m› … °   áint(m.group(1)þ?227þ2227b U 
þ=227þKPASVþ åsæ¢ if it doeè �ò	ain '(h1,h2,h3,h4,p1,p2)çB0 ('ið.addr.as.numbers', ‚…#) tuple ¯ Ç ƒ — – ;  + Àile(r'(\d+),o(\d+), ò', re.ASCII)
    m = _227_re.search(resp ‘if not m:+  / ÷raise error_proto. ònumbers = m.groups(G óhost = '.'.join() B[:4]! 0por! E(int È4]) << 8) +  54 preturn \  , A ñ 


def parse229™ r, peer)À @'''P ° the '229' ë ñ
onse for an EPSV request.õ Rñ sò ± if it doesÐcontain '(|||‰ 2|)'; ¢  ('¤ “.addr.as.ý 'µ ²#) tuple.''5 !if• r[:3] !=§ ¿ Qreplyæ E0lefE Ó ’.find('(' 1if  _< 0: Â	KrighD 2)',= 5+ 1N (  O é š ¯ # should 'ò £ 1+ 1ø  Æ [g O- 1]h ˆ @part= O :F q].split/[ #+1H!n(< )s5m  Õ! =`2[0]€ Ç ®O #[3d ¬!57— ¦,57¦º MKD or PWD«‘This is aB×Oto a0  ó: a directory nameí²s!    1 in A257 x°?57'A8 ê .ø13:5ó8' ": ‹ ò '' # Not compliant to RFC 959, but UNIX ftpd“Athis` 1dir» $= [A = 5 wn = len� ¶while i < n¾ 1c =K"[ià èqi = i+1G  ˆf c == '½  `i >= n¬’iç )  - UbreakT   h Î 
 1+ c2 ]  rint_line( \ÀDefault retr  s callbackYp7 0 a  ã G ^ âftpcp(source,   l„, target    ùp', type &I'Œ `Copy fyðfrom one FTP-instance‘ uanotherŒ ’g  _ ® ' =” $~ �TYPE ' +�  ½ �.voidcmd() çO   2  ÿû  õ  ]3227A.senT y'PASV')W    7 , N , #é:}ðuser must "listen" [...] BEFORE sendingó the
    # transfer request. ðSo: STOR before RETR, because hereE ò target is a "user"A ƒtreply =! ¡.sendcmd('T 3' + Qname)s 2if 5 ñ[:3] not in {'125', '150'}:)  ¸ ðraise error_protoË qRFC 959% s€ fsource€  È  €  	€ 5 € 3w ’voidresp(ä .. Â

def test()ß ò '''Test programOðUsage: ftp [-d] [-r[file]] host [-l[dir] d
 2p] & Q ...
b-d dir bl list ¡p password 2'''0 òif len(sys.argv) < 2¨  ‡`print(¾ ‚.__doc__è    3 sexit(0)K ²mport netrc Ñdebugging = 0x  rcÖ b = Non¢`while M  € ¶[1] == '-d'† G  !+1Q  Š 8delA  (if 3[:2X rX  # Û "ñ of alternate ~/.Å  ¬ ‡ ¼ ­ A[2:]p ˆ ¾=Œ /  é`= FTP(! U�ftp.set_ã alevel(  A"  €Bid =Ì 	 ‘acct = ''V 6try¯ Ã Robj =“Ô (Æ P  except OSEi; 2if '  ø ª ®  ì  ñstderr.write("CouldØÁopen accountD"ž  7  p" -- us(óanonymous login."© 6lse€ 	ç  R ,t &t,÷ .authenticatorss = ;Key  @# noW Ë !orŽ	Î 		  D   &"NG í  þ (Ø »dà 1forZ D ‚ <62:]%!if! úlú “  g @dir(å ÇY   -el= � #  cm~B'CWDz    9  ‹  %   1+ '”l 	$ @  =üÆ?cmd�  pÈ   7Ppasv(­ Ù  2˜iveserverK H ±  - Åretrbinary('? « 9, \ª  1   ybstdoutb, 1024n  X àquit()


if __h!__Ä ƒ__main__Ê  `ð()
"""functools.py - T  ì@work Qwith & ðions and callable objects
"""ó
# Python module wrapper for _functools C  ô
# to allow utilities written inN ²to be added3 Fthe O mm S.
# W; óby Nick Coghlan <nc
 òat gmail.com>,
# Raymond Hettinger <pÄ eat rcn) òand Å�ukasz Langa <l @at l @.pl>† ô
  Copyright (C) 2006-2013Ð ðSoftware Foundation8 üSee C source code8”credits/c_ ó

__all__ = ['update_u@', ' s	 øWRAPPER_ASSIGNMENTS ¶UPDATES',
  ð 'total_ordering0 Qcache	 �mp_to_key Elru_ kreduceK ppartial-  `method îsingledispatch * 	œ o òd_property']

from abc import get– b_token  `collecrs( Änamedtuple
# ðtypes, weakref  # Deferred²² _³ "()\ treprlibD  recursive_ # t_thread# RRLock r  ÿGenericAlias


# < Q  .0() á1À() decorator+ ~ :?

#{  'qto help œ � N Iòions that can handle naive introspç/

ü r = ('__9 __t __ Hqual 0doc ƒ)¡  '__annotËUs__')v [r @dictI \)
defà 	…f  d ¿assigned = ì  3 ý2 ¨ !):ä A"""UN& aÅw  look like ‹� “Aion
D %  ; i«³0ionB #beÿ d- #d - †originalV ï Qis a ¹q naming� µattributes * „directlyk +º  š  r| Õ (defaults toF   Ñ.w )& k® !ofÀ MrÜD  H Awith)  correspondû ÷  Ý E 1 ~Ì â 	Å 
8 1"""  Â c  –W+À     try:
    ð
value = getattr(wrapped,  $)
( õexcept AttributeError:  ' Epass Jelse sa ra !, € h 1forv ¶ in updatedC 
  ? ").( ( ¾ R, {})[ ó# Issue #17482: set __ì ñ__ last so we don't inadvertently copy itÞ ³# from the @ Ó function whe» Áing __dict__7 , (r.v =B " ‡# Return[ r” òthis can be used as a decorator via partial(î rH s Q

defj sÞq  µ÷  assigned = WRAPPER_ASSIGNMENTS,* l) ‚UPDATES)§E"""D– ófactory to applyÒt1r() — 5perC
p 
ê 0thaš^vokesP Awith<$edL  !as! Ñ argument and  s�  & 0s()o4theL `remainß- •. DefaultQ Ps are9  Ó7ù .K TÙiã µconvenience
 ƒ ‚simplifyC u é4 toH a 1"""! 9 
- ,� d=î  ø4  #=	 ,~"d=O od)


# < Q À total_orderÿ Vclassü # v :r

# Thew  w A€s all in‚1ðroot magic method directly
# rather than us¿  5 correspond 1opeÆ1.  ðavoids possible
# infinite recursg²could occurx ] O ð	 dispatch logic
# detectm€NotImpleúaed res»`n call' “reflectedÚ .H@_gt_°_lt(self, oæ *, W = "'Öà a > b.  Compuc Kby @ë e Á (not a < b)¥¡(a != b).'¨3op_¿  = � �.__lt__(“ 6if & +is§ ¹ ér4, `   …  ˆ  m  Š i /le1/<=or (a =Àother)
    ióf op_result is NotImplemented:
  freturn,   ð or self == other

def _ge_from_lt( , ,m =| )} "'Rz ða >= b.  Computed by @total_ordering f á (not a < b).'¨ â =  �.__lt__(¤ )# i0 x k û eû Y@= b)� (a‹
eL ‡  õ ‰ p#lt*<1a <€and (a ! @ „ !&2> ­	[ y g!* ‚ 0a >$ Œg-M:+: or%=%A62 J *$A ¢$û 1+ð= b.  Computed bðy @total_ordering from (not a >= b) or (a = ñ.'
    op_result = self.__ge__(other)# 'if& ñis NotImplemented:$  K freturn,    … k !orl  ‰ h  

def _gt_³ @_ge(‹ !,  ,q =€ )� "'R~ ÿa > b.  Computed b0and!_ „  ó 2 !=õ l2< ¥h�

_conver“{Eà'__lt__': [('_(6_',0Alt),(  †  ( 1le_( "leX(  ñP ( ]Q  y  E y    y ) ey  ­  , µ Ñl( g( ù6le)y  y þ Q gò Ê ( (gty  æ y    y ò gÊ ( É Re)]
}î
¾C(clsÜð"""Class decorator that fills in missñú¡methods"""ò# Find user-defined comparisons$Àthose inheri9 º‘ object).G ðroots = {op for op} ® if getattr¼ @, op»pne) is \ U ! }_ !if& f Õ Ìòraise ValueError('must Ç å at least one ÿ òoperation: < > <= >='Í ^ p = max(  s)d Â   # prefer k0 to
 2e__
  �
 1e__¯ @nameÊ Hfunc[^ ]Ç E - ä 0in   s   ‡  opF 0.__( p__ = op o  !   sc   € â 	cls


# < Q à cmp_to_key() ³  k µ er$ w :v ðmycmp):
    """Converöt a cmp= function into a key ñ	"""
    class K(object):   õ__slots__ = ['obj'] ÷def __init__(self, obj=  A   `.obj = < l: Kther< Áreturn mycmpa  I 0, o+   [) < 0S gS ->S &eqà  { ¦ -==T /leT ,<T gT ->T a__hashùANoneg‘bK

try%afrom _e°ools import{ñ_to_key
except I RError: �pass


# < Q ñ reduce() sequence ü°single item' z :!

pial_misj ópect()

-– -Eion,ž  , FLial=D l¨B [C Á]) -> value
µvApply a	ðof two arguments cumulatively)"th$fs of a¦ O ñ@left* Áright, so as x A z— .H ÄFor example,°ðlambda x, y: x+y, [1, 2, 3, 4, 5]) calc­ !esF ô((((1+2)+3)+4)+5).  IfOñ  is present, it Álaced before©  M  %heð 1 in! s ³ and servesó Ña default whe. – ü ‚is emptyó  Æ  @it =†$r(* )¬i» 8 V    Y± = next(it)g   ~�StopIteraH  " ¡raise Type�#("e)þ¾ uwith no`w 1") 'Felsed $  ð bnitialé fþ le€ g.it0 '(A 2, e/ *‹ �Ó ‹b0par÷ %()qq applic‹‡:À####

# Pureô2ly functional, no descriptor behaviour
class partial:
    """New > T with" € applicaW ñ of the given argumentsD Ñand keywords. A"""
	 Ð__slots__ = "e €", "args 4   ‚__dict__ “weakref__G ñdef __new__(cls,î `, /, *M D, **M )Ø  Ü ðif not callable(€   # ðraise TypeError("ä Ufirstä … must beH "")Ü  @ ¡if hasattr^ ,å f  ¤ ! =µ . +^ = F   À ` = {**« . ß }W 1    ' Y   ™ Óself = super(òw, cls).IÊ  1 .D P h  ¶ =¶  ¤ % =: preturn ( ™ Ç �0__( Ã_ 0{**3 t Î (5  À -˜ ñ@recursive_repr()Ã ®   ® Öñ qualname = typeÍ  Z !__C  ¤ { @ = [I ( ˜ ))]! �.extend(% ¢x) for x i=4” Q 0 Áf"{k}={v!r}"5 e(k, v): @†.items()F *ifº `module©ªftools"N { ^fË! $.{ó Ð}({', '.join(õ E)})"å : 0 1 zNduce|K x&, X),) }@,Z  Å  	M’ or None,1 Ž (˜ tsetstatš !,  x±isinstance(" w, tuple)  Š ‚\f to __m ˆaH "Ì2lenf k) != 4·æÑf"expected 4 1 Õ v, got {O }h  ,€, kwds, @spac	å fNif (~ Q   +5 orA @   (e 1 isÇ Ÿ k@  $  , >,))@ Ÿ E ) J ¦uinvalid+ý  ×   ó@ # jKñin case it's a sub˜ù !if] ø  ô 
Ë î  #à}
        elifñ, type(kwds) is not dict: # XXX does it need to be *exactly*) 7?
   H ! = T  Àif namespacei UNone:  C  U= {}
 pself.__– F__ =G 
" pfunc =  
 pargs =  
 pkeyword  ¸ R

try“ `from _K ñtools import partial
except I RError7 ôpass

# Descriptor version
classA âmethod(object)< A"""M & d> Dwith5 ð
 application of the givenÚ aumentsß Dand Ú .F0SupÀ ðs wrapping exist	 m  s : `handle&n- Y `callab Âas instance Ì !s.# 2"""r Ðdef __init__(Á,™`, /, *ŠD, **¦   &4ot k (ƒ)™  ™qhasattr ·, "__get__"@  D ¡raise Type›`("{!r}s C Z W or ak"À  ?  q.format~ "))è  - #Û ` could W a like ý)¶ which isn'ç ,}  # so we ca  �inherit �}@ (itVRifiesz %is1)J Tif is¦´ ,JŠ 6�# flattenðis mandatory in orderÿ pl¿@cls/Õµ before allx [other™    Ð# it's also m? Àefficient siS�only oneÞ ï@will[ ¾)edl  ˆ .'ü "  t"  +ž 2 •   K •` = {**Y . ´}c ;elsÉH  : q + e ‚ “ o % =ÈmUCreprUÃR à", ".join(map(+ !, �    )d 3 @"{}=,"êFk, v4  ¡  @for +  *m ^ w.items(x C@_strgð= "{module}.{cls}({7@}, {°   K &})¢yreturn L ³ O =‡ !__yR__.__ &__kË  >clsC @qual¤E  Ë F  
 y  ÷ = / =	 —*Òmake_unbound_ô‹à):
        def÷ _method(cls_or_self, /, *args, **keywords):
   ` = {**7 . 6 }5 qreturn . Jfuncv F x   I ² Ò.__isabstractÅ B__ =]  A rpartial= ; & ¬ n 
 Àdef __get__(Å ÷ , obj, cls=None#Ñget = getattr, .ñ 3, "@ 1", 3 X  XPresul5     ifE q is not2 
‡@new_Y m (� )A  [ 5if ( J  ¾ ’ 
O  . „# Assumeê  
`ing so, 
 ùnew indicates theq G þcreation of an appropriate callabl6 œ(¹ ),  r
ï  ~ >tryÚ   a !._ê1b  Ë ÿexcept AttributeError_ Epass@ 2if o  À ×
4 @# If;€ underlyXðdescriptor didn't do anything, tSF thie  Õ `# likee�instance ©%od‹  & Œ #Ãmake_unboundæ3().ŸJ Ò @ÒAertyh •ÿI ? ’", False)t p__class†AitemÃ ò ð(GenericAlias)


# Helper ' �1s

ª tunwrap_i  ¥ „while isM( #, * %  R  ! =Z Mß   ?

# < Q ¡ LRU Cachez  Ô   decorator! t :1

_l õInfo = namedtuple(" ò", ["hits", "misse
 `axsize Acurr A])

¯ó _HashedSeq(listW’""" This % �guaranteeòat hash() will bHöed no more than oncX ù’element. Y ðis important becaus: pe lru_cWa  m Ó ìñthe key multiple times on a 6  ù .¥2"""	 q__slots¦'P bvalue' ‡F_iniPAtup,å =-    ±•[:] = tup•   .* W ! =; C(tup-b  ! ²ð):
        returø%n self.hashvalue

def _make_key(args, kwds, typed,
  ûkwd_mark = (object(),)% @fast= ës = {int, str}% atuple= k =3 ±, len=len):y ò"""Make a cache key from optionally¨ R posi @ and) ñ word arguments
P TD ðis constructed in a way that is flat asV Àsible rather  nI €as a nes> G 0ure �t would t· Âmore memory.� 0If I ee Õonly a singleª ¿ �its dataÝ  , ‚known toƒ  $  É Ê,X n‚ õ  9 ðreturned withouté Ñrapper.  ThisL ²saves space€ @mpro Ãlookup speedÃ 1"""4 ñ# All of code below relies onD° preservingž à order input bmse user.O ñFormerly, we sorted()9  ‘@ befOqlooping¾ Qe new¹“is *much*L  „òer; however, it means"ðf(x=1, y=2) will now be treaÓ ßJ Òdistinct call}òf(y=2, x=1) whichD "bežÂd separatelyÜ  ·=ân!ifã _    += ^z   €for item¡ . #s( "   >   : !if7d` n(h@(v) ] vZ  õ):  N �   c A › †2s()J @elifÌ¡(key) == 1X| pkey[0]){  §  s¬ ± Á1[0]–  ¡_HashedSeqU »Alru_Â(maxsize=128Qsd=False-ò"""Least-recently-used±£ decoratorãCIf *P *E0set|ANonehò LRU features are disabledæ h
¿ …can grow‚DbounM j  dh PTrue,(´ ]‘differentÔsjñFor example, f(3.0)“ 3f(3ê
æ	Þ ^ !thµ  sresultsAO tç `d func~P mustI ™ 8 AViewÊ¬P statW‘cs named YÐ (hits, misse Ò`, currÜ[ É1 f.J à_info().  Clea zõ g 	5 c, "()œPAccesPe und€ ¯Ñ 9 1__w63d__Ó ðSee:  http://en.wikipedia.org/  /C´€_replace†¡_policies#Œ_Œ_Œb_(LRU)' dˆ¡# Users shV3² ÿð through its public API:
    #       caÀche_info, ca ñ)clear, and f.__wrapped__
    # The internals of the lru_> ð are encapsulated for thread safetyZ L �to allowD ñ,implementation to change (including a possible C version).
O ðif isinstance(maxsize,¬ !):! À “Negative " q is tre¬ Eas 0+ %if# 6< 0C  G < =0 Åelif callabl| )ê ” ¹typed, bool“  S‘user_funcý ñwas passed in directly via+ @argu2´ 	F ,À =
 U, 128. ÛUr = _Áð/r(K #, Å  _C-\Info)P .
ó
_parameters = lambda : {'½ &':• 'U "':] }Q Õreturn updateš · ), £ ‡ ‰b  Ú†not None¿õraise TypeError(m  Øa'Expec·Tirst a ŽPbe anO0ege ðA, ore "')Šådef decoratingÖ
SÑ ˆµR»  

 r*ÎA# CoïÀts shared byQ �Í s3 ðsentinel = object()÷ ƒ# unique  _dùcsignalQ amissesã €make_key¸ K  )€build a " AfromºâZK ñPREV, NEXT, KEY, RESULT = 0, 1, 2, 3~SnamesTÒe link fieldszzB = {D0hit}´  M ¸ 0fulQFalse 6 b_get =æ . p ±bound methoclookupÖ 3or ç cK 5lenK p__len__ V l  ›� withoutH ÝBlen(ÆÈlock = RLock¢’ # becausû cedlists{3n'tm l’ 0rooØ $[]š !#  Âñ circular doubly[0ed a G p[:] = [7 ,= ,÷ ` À# initializeŽ0poirgH2elf§[ ==\c  ™  ç(*args, **kwds/ ( A# No¬ 9P-- ju®  s=SsticsY  5 ðnonlocal misses
        Ámisses += 1
  ûresult = user_function(*args, **kwds)2 Rturn 9 
 òelif maxsize is None:  g »def wrapperY :?  $   ð# Simple caching without order 1or d Ylimit< ò nonlocal hits, ï 	" ò key = make_key(á  ß |, typedæ  Œ úe_get(key, sentinel. #if þ 5not' 
á  å    ‡  (reY   Î 6 „½Î s[key] =³ 	%
„  ?elsÍ%1ze ª%edÓñthat tracks acce–¡by recencyr ÷ ÔYroot,Úi, full. à [^ lock¢alink =² ù
ï ¡ 1if ) 0is ñó   �# Move thQnk to �front of écircular queue× O  m a_prev,x p_next, Ë,É! = > P[NEXTýP  E 0   U[PREV0  € 0  asE ©2 & � , ¹ R  & *asö	Y  { H 
û   ƒ7z0if Æ"in}› ’ `# Gett²here means W�his sameF “was addedr#j S whil¤@ock < ó released.  Sinc ?inkI Qupdatÿð
already done, we need onlçä/thå¤# computedÔCand Z  B2cou6�.Œ Mpass ¤ 5V"Usã @old œ 7Bstor 1newV � w| 1old= =D †  Á# @[KEYY*keö #   ' QRESUL³x T q# EmptyMð oldest link andÿ	 make it the new root.
   ñ# Keep a reference to8 Àold key and  Ÿresult toH aprevent  irO ð counts from going[ �zero dur /heM ôupdate. That will _ ÿpotentially arbitrary objectM òclean-up code (i.e. __del__)ž @runn‘ ¯while we'r™  st� `adjust2  b_links_ y  =@ 
 o[NEXT]¦ 0oldm=«O[KEY' ˆ* _RESULT s  K  - o = Nonâ BNow ÿcache dictionaryè Adel * [É ¾ a# SaveW Ç“reentrantC ïkey] assignmenÖñ for last, afterV  ò ±“  hn ¿been put inz # a consisY0 sty* á ž Ó) ]else:  zc# Put ¿Ain a› ª ! a7 ŒQnt ofÌ _queuen ÷ ÔOPREVnZ 0= [. ,X,Ñ,ƒ 5 2ast§	a ( =œ = \ å "Usâ.ô
_len bound method insteadæ ‘len() fun`S PwhichO8ld 9�be wrappeW � an lru_x  itself?�full = (*  ¢ é() >= maxsize)… creturn3
 2defv_info()îƒ"""ReporÉL‘istics"""<  –with lock9   j  _CqIZ °hits, misse Ÿ ,| 9)’  ër“ BCleañ  
  ì  šnonlocal €  6Ä W .… - Þ  oot[:] = [¥� ˆ,Ž
� { # =ü I = 0M  ‹ ‚ = False!r.� ˜² > 
$ ¥ %  & ‡- R

try¨Ç_ªqools imê_t_4 �except I! RErrorB �pass


# < Q à cache -- simpÿlified access to the infinity cache
# <R

def\ ð(user_function, /):
    'Simple lightwe ¢ unbounded; ñ.  Sometimes called "memoize".'G ±return lru_Ë ê(maxsize=None)} ?)

ê ?ó### singledispatch() - - ” generic 	¯ decorator“ ?}ó_c3_merge(sequencesz@"""M µs MROs in *# *!a¾      uÝ 4áC3 algorithm.
~ó.Adapted from http://www.python.org/download/releases/2.3/mro/D 1"""L ±result = [] ¢while True1 5¨  ' as for Á  õif s]   # purge empty   Z  J fif not d   V“ 4 o 11P :k Qfind mð candidates amongb e headsG  a ' r = s1[0ó     i 2i 	?  % iam + Z2[1:]È  (   o  M  % Pbreak	  >arejectøqcurrentÆ ù, it appears laterK 7els®L !  Y ( 
¸  s � 
¶ �raise RunúñError("InconsistŠ ¥ierarchy")W ¬.œ 5nd(ñ ! ‚# removeÔ Vhosen®G {!eqQ8
ž  b†eq[0] ==A 
$  ú 0delý Ü‘Âro(cls, abcs£9 €"""Compu8  Ðmethod resolu9c orderŽAexte'ÀC3 lineariza& SIÝ  *e Á* are given,ú Ãò works exactly lik±built-in C3	a 0 usï=or ¢ | n € ð!is a list of abstract base classes that should b�aserted #in³á0ing—`. Unre�ad ABCsæ Pignorëð nd don't end upÍ1theO F V. TheÎ0 inr sK Awher%ir¯ al-im‘troduced,P ¡i.e. issubÍ Þ") DsÂª Ø% ´ itself but& L QFalse+ 0all% @ dir†-¢. Implicit®  ±aáPð
    (either regðistered or infer ñDfrom the presence of a special method like
    __len__) are inserted directly afterO ðlast ABC explicitly l� @d in" O 0MROp òsaid class. If two im7  D ðs end up next to each otheÉ M àresulting MRO, €ir order ‘depends o~   | Ptypes” �*abcs*.
™ 1""" f,P, basï ð enumerate(reversed(cls.__! as__)):7  +°if hasattr( Ò, '__abstractWGs__'1  5 ëboundary = len] E - i_ . àreak   # Bases# toù  { D±aconsidafirst.N Felse· ‚ 0   � @ist( P) if 	  9 1 []& l 
0 	$[:\ !])4 4 L Ú  6
	[H :I  ¦ d Ç š Î �if issub] F Ìá) and not any(�  P 3 b1 d  a 	Ô 	; Ì#Ì�*cls* is–† ù that introduces behaviour described byZ A# anÆ*ç #*,{ 9 f`to itsùÔÊ 
c0.ap�ƒÖ Ý
, D Rw.remove: ñÂc3_mros = [_ & ,$== () g 9  Ë s>{ A M 9 M ?J 6 G qreturn Ô Ferge'•[[cls]] +¤Ô v %+ š  c  > [?  E + [?  ?  < ð )

def _compose‡ãÔŽÂ"""Calculate†}³ resolution ¥ra given� ½õIncludes relevantâ Ü€es (withî irc qpective$ 0s) o¼  s*¨ Ð* iterable. UÆña modified C3 linearizaª “algorithm– ¨` = set ._"__å1# R¾á entries whichsalreadyþ — »  ?  *@unre<dY q3is_ C(typh r3  ]"inø n1typ0mro  =   «’Pcls, x Ý D }nfn£ üÀ_related(n)]õ&
    # Remove entries which are strict bases of other( ó(they will end upO ñin the MRO anyway. rdef is_T _T a(typ):  ‰ 3forb  B Fypes    “if typ !=& 1and "in Š.__mro__6  : µreturn Truen  BFals tr ` = [n Š $n † | if not½ 1n)]M “# Subclas% ü @ABCs@ *U *Sóalso implemented byF ò*cls* can be used to stabilize ABC orderingQ \  _set = setM1es)M 0mroÉ    Í  8Ï Vfound)  * - 0sub¼ utyp.__sÜ 7__(­ - 0if , n& •$is6 P(cls,% :  > ~ ¡.append([su54subË { ì ]á  @ –G Ô   4mroX  b    gcontinp# Favor¥ ÅAwithÃàbiggest numberbusefulì X ƒ ð.sort(key=len, reverse=t´ _5 
¸  !cló :sub  ¿ s " v>mro&  * Ž÷0_c3- °abcs=mro)

¥`_find_¤ ƒregistryÄA"""RPs$ !†matchingÚÄation from *A *ä Ë í!.
CPWhereL ’re is no 1 MeredQ Ðor a specificÿÑe, its methodP aresolu€ 1 U P Û û  a more genericc • PNote:¾ 0doeŸ  t Ekain an= á !he!� ƒ*object*« ‘this funcŸ Cmay ‘CNone{ 1"""; Æ†_compose¯’ry.keys()^‚0 = H >  MtÈ	"2if * it/ 
@a# If *% *:ä Aicit„6but¬"an¡unrelated,|  €  ’# equallyu !L  &1fusüb tempt6‚to guessç I   Aif (Ñ   lt›Tn cls6	„  ; 
  7 à ; #yâJ C, t)l ðraise RuntimeError("Ambiguous disp8ÿ: {} or {}".format(Â j 	 Ubreak  % ö%
Ýð match = t
    rðeturn registry.get(match)

def singledisp ñ(func):
    """S - � generic & ñtion decorator.
4 ÆTransforms a& minto a> ñ, which can have differentL ô.behaviours depending upon the type of its first argument. Theš !edL ± qacts asC Ðdefault imple: aÔ  , and addi !al@ 
# s³ #beV`ered uIW kÑer() attributª 1theL E. 1""" #¾ ðre are many program³ bat useXËools withoutÅb, so wm ð # trade-off makC © òñ marginally slower forÉ £benefit ofš A ptart-up±such applic>òs slightly fasterÞ aimportµ¢s, weakref3/qry = {}i o„_cache =0 ±.WeakKeyDic›Ary()1 ( Ò_token = None[  àM C(clsÙÝˆ_.' P -> <  g >[  D 0Run– ¸>ò  algorithm to rz ­ be ‹vailableR Ã  P x¸given *cls*bHon *´ *t ; >  —nonlocal d (if q is not3õ A   0cur‰U2get� y *   V 9!= @ 
[  1 oT k.clearT  ' Â  T Ò :try`  ¬: = c U[cls]4 ú except KeyError@ Q  Š U ­
O  ! S 
 ! B `_find_  ’,á"ryÊ )   ½  ! =8Ä _ J “ î  "er\  Ã=ù2 )ÿ ; W  � R> erÖ1new‰ 21¹Oon a°3 ‹  © É 
ªÒif isinstanceó  î  ½   -“lambda f:w)
~ anH0getÀX ‚'__annotåz__', {}6 !ifL:ann¦ € ‘aise Typeq(Æ   ›f"InvalidÑ M`¨Ò)`: {cls!r}. 4A  Ðf"Use either ö`@register(some_class)` or plain ! _` "
   `f"on a þnotated function.1 )C  ) y = cls
 ñ# only import typing if anc �ion pars ¹s necessaryD Efrom; I éget_type_hints. €argname,Œ � = next(i
4 (² ª).items())Î ðif not isinstance(cls,„ 9e):n  Fýraise TypeError(!  % ˜f"Invalidû Sfor {± O!r}.˜¡{cls!r} is™ !a Þ–
‘ry[cls] =Ëš àif cache_tokenW òNone and hasattrò û'__abstractmethods__'I  = f (Y‘dispatch_ g.clear breturn§ ¨ ÷def wrapper(*args, **kw~ §  
–’0f'{ï ñ} requires at least 'p  ¦ p'1 posiÖal argument')é» á (‘ R[0]._…9__)Á 9 ‘  4s  P, '__© `__', '$leZ  ‰ 'Wäiobjectç;.$ Ter =  ï   \ $=  	  5 Ary = Ps.MapÆPProxyõ(" ” X _áí \  þh supdate_7 ( ,ë R _ ñ	


# Descriptor version
 0m´¤"""Single-ç ’ generic ' % dU .£0Sup·s‡ ¤Pexist	 , s6@ndlež&n- á `callab 4as Qt !s.# 2"""r  ôÓ__init__(selfÃ  žôU Çƒ  ²½J0"__�'_"4 D "a_  >a"ö Ÿ .L`
}› à  u /  ˜ Œ  ñ @#erñ k“=–½ 3"""´_! Þ¯ _ A) ->=R { Rps a newŽ leÅaL †ðthe given *cls* 	* *m *­ R  ±    Ÿà š  =´ C ú  ù 1obj¶ö * < Hð args):
        õ    method = self.dispatcher ð(args[0].__class__)
9  creturnH ð.__get__(obj, cls)(*@ `, **kw
 %)
> _| Ò.__isabstract $__‘  A „register5  ) ó update_wrapper(y ,ô FfuncÓ Ï # ­ ‘@propertyQ Odef — (B!):$  J qgetattr .l ?, '? ß', False)


# < Q „ cached_Ì ó() - computed once per instance,0 @ as À PibuteH › :ð

_NOT_FOUND = object(l„ ´ ]� nii u , X{  l! = ”  Ï ºname = None Q__doc€ T . 
$ Àlock = RLock­  î• @set_[ !__ð�, owner,    "if{Š !is‹ à  O   ­  E ‰ AelifW # !¼M 
E õraise TypeError(A  b   ð"Cannot assign the s/ñ to two different} =s "Q If"({» �!r} and {Á Z!r}).5 B? @ ,ŒG=®
F® A‚ M ¦ {6<use¥· ö without calling __ † on it."z:try»‚% =P  �Uict__Í ±except Attr ãQ:  # Ò#llR¡s have __d@ r (e.g. cÖdefines slotsŽ  nmsg = 3@f"NoÅN '  Õ d{type(™3)._ 
ø c $f"*  aò >´9 C  ´‘msg) from[4Rval =´A.get¨.<&, �0if 6 'is 
« êÓ 
    ò# check if another thread filled� à while we awai— N º  I    Œ Â  7   àif val is _NOTŸ_FOUND:
   ÿ
val = self.func(instance). ?tryG  Z acache[K ÿ attrname] = valL ÿexcept TypeErrorY msg = (F  y   ðf"The '__dict__' ƒ æibute on {typeÜ 0.__ž d__!r} ò / "a ðdoes not support item assignment for Ying { h Ÿproperty.h u ß Vraise,õ (msg) from None¹ areturns °__class_get­ Q__ =  ðmethod(GenericAlias)
"""
Path © ñations common to more than one OS
Doð use directly.  ‡ñOS specific modules im4`the ap`riate
uj Î Cthis3 Á themselves.› B 3os

 ±stat

__allÚ "['® ðprefix', 'exists
 ƒgetatime c m 1 l¡   'getsiz. Pisdir7 Qisfil Hsame Bopen 	E  '  ¤ €']


# D@0a pb™ P?
# Tñ �is falseBPdanglCàsymbolic linksÇpsystems†† 'a.
def U  s(a )Nø"""Test whether ~ Qs.  R05s F~ zbroken |   	ÿ0os.Ý o ø Ò1(OSÑb, ValuÝ�  E ¤s 7  ATrue({follows‰ À, so both isq() and £°() can be tJ #M o ‡voÙ C 0symN sFç× F
Ðis a regular ÿ'_st = ,= yñ.S_ISREG(st.st_mode)@I˜  # a™5orylY!(
#[Y'Sdir(s2"""~¯0 ifð§ ›p refersx"anÙ hOory.lsN•+i;DIRi r'(þ · Ü 0he IQ of a%@, re
Ued by)Ñ 2Z  ä J !

¦1get¸{ Àn the last mô2odification time of a file, reported by os.stat()."""
    return   3  name).st_mK °


def geta (" :@ B"""RC ÿ the last accessˆ 8y ˆ cˆ ÿ metadata changeŒ 8} X


# ÷ Ñongest prefix}ñll list elements.Fbcommon' 3(m)CrGiven a1 pof path…s½ Ÿ!s ]f E ò leading componentÑ”if not m:Û!''©ÿ# Some people pass iu ñ parts to operate' Ón OS-agnosticP ðfashion; don't try6 ctransl8 °that case aÄ Áat's an abus¤3theM pAPI andé ðy are already doå wI �they needh (be“ < #soM ) Ñmost likely w¢ Pbe usN añð PathLike objectè  g0subº!s.M Oðisinstance(m[0], ($ ƒ, tuple)É P2m =  (map(os.fsÏQ, m))Q £s1 = min(m 2 $ax €for i, c� Aenum„7(s1d Òif c != s2[i]D {   Ïas1[:i]p   ´€Are two ñ buffers (obtained from 1, f# @or l	 °)
# describ@'1ameb?Ú@same* s(s1, s2® @"""T~whether| �referenceù E T ž0(s1�Pino =÷  1andä  ú   ' 6dev' Adev)¯û Àás really pointÖ o… Ù  4 o(f1, fÙ 	 è· Ö  aactualÝ á or directory
Á áThis is determŒ!byŽ Ñdevice numberæXi-nod B Qraise]Qexcep
 ifmÛÁ) call on ei�° S failïy¦: 'f1« 2 ` 	tAopenû u"x&heú°?
# (Not neFBaril	‰eptor!)| c §p¨p©	 , � ú – ‡
;(fp qSplit aã âArootÖõextension.
# The   peveryth.Astar¯Àat the last ñdot in the last
# pathname component;  ro+ òs everything before that.
# It is always tru  9 ð>+ ext == p.

# Generic implementation of splitext, to be parametrized with
# ®  se ¤tors
def _8 Á(p, sep, alt  ex °):
    """Sa Ò `extensx efrom aû !.
- E  i÷ .  „  2 B"toQ Ánd, ignoringC @lead*ðdots.  Returns "(,0)"; @ mayï ‘empty."""? ð# NOTE: This code must work for )Ð and bytes sty s¿ �sepIndex u¡rfind(sep)Y #if  02  5  & U 0maxQ 2 o )?1dot € Œƒ " >³- � ¸# skip all F<  Š @file¨7 % =B E + 1% jwhile + <³6 m  Q Yif p[+ : `+1] !=­:sep;  ? rÜD p[:× T], p[ %:]•  . 	Z R += 15F  ; B:0]
Ýðcheck_arg_types(funcü s, *argsÝÂhasstr = hasq= Falsez  0sì 2 ¿ ðif isinstance(s,EP  ¨   X 2TruL   -el; u =  ; = ? &se†  Q ôraise TypeError(f'{è €}() argu* be© ,ùa, or 'æ  I  ðf'os.PathLike object, not {s.__class__.__W�__!r}') é2Nonõ  ifY b rdÄ À  "Can't mix« Gings«!inne(s"p ‘"""Parserç@commt pline op+ åðmodule helps scripts;p? –	> F 
°
sys.argv. ¼`suppor> Bhe sAnveno 1 asM àUnix getopt()
   q (incluë Áspecial meanù %ofÀsæ % �form `-'
Û Ä`--').  Longã € similarÏ cthose £ eñã GNU software
?@used« ³well via anN …al thirdˆ ". WmAä
provides two Ø ²qan excex4:

þ A -- ¥ Å X
gnu_+ y P, butÜ#ow  Bnon-à§ "s
Ñintermixed.
G€& … � ! (È!) ‹d/ð 'opt' attribute, which is the
ñoption involved with the exce ã.
"""

# Long 0 ð2support added by Lars Wirzenius <liw@iki.fi>.
#
# Gerrit Holl <ge ð@nl.linux.org> mo�  | Æstring-based‰ Ís
# to class e òPeter Ã…strand <a	 ó@lysator.liu.se>· Âgnu_getopt()@ ˜TODO for  :À b- GNU / ñ_long_only mechanism
# - allow?`caller° Àspecify orde× ) ó RETURN_IN_ORDERW  g `extens™�ð'-' as first characè #of8  1? ¡âal arguments, ƒ iªÀdouble colonSJ- anH `a W foÑ 8 Asemi5 ð should
#   treat "-+  o"¥ ñ"--foo"

__all__ = ["Gf“Error","e M6","na"]

im[ðos
try:
    from|Stext   1get Ras _
®! I; h 9 `# BootÔpping Python:L ñ's dependencies not built yetz ñdef _(s): return s

‚ Ô $(E-)w �opt = ''C 6msg P ð_init__(self, msg,�3=''?  ó   .; 1msgI  _ "op£   � /._] !)
C  3str~ q à 0elfx !

§( =é ð # backward compatibility

Z Ñ@(argu0hor\0s, /@opts]s 9"""/ ¸"s[. _ P]) -> s,ÑsÆ `Parses‚ mç@line$ Pions  Qparamplist.  ’ 0 isš    ¥@be pU !d,ý0out, P lead7�reference, 1theE @runn àprogram.  Typiùðy, this means "sys.argv[1:]". @G — Ã Ôlàr´ a� ñ script wants to= ’recognize¸ Àthat requireàñ ÒaC ÔP(i.e.· `e samemx pat Unix2)± uses).  If? \¹çBis a[#ofÙ sXUPnamesé I º Pwhich#suld be j ed`%he“2'--_s6 Æpe incluŸ!inx S  A.  OÝsÄ t /ë ˆ 	9Án equal signB b('=').ž4The-@valukRnsistô awo ele™:— Ö3R ¯ !, D �) pairs;2 csecondÐh‡ ìøG pleft af/ ZU Àn list was sðXtripped (this is a trailing slice
    of the first argument).  Each option-and-value pair returned has
E  B o+ s as itsP 0eleO ñ, prefixed with a hyphen (e.g.,ˆ ¡'-x'), and� N ‘ W usecond X ±or an emptyF 0strß iÕ E ehas noÝ c.  TheÛ  s occur inw D Clist ¡ same orde" Pwhich( ñy were found, thus allowingC ‚multiple] Ñrences.  Longâ Ushort‚ €may be m!!.
A 2"""	 ‘opts = []  Ø €ype(long `) == t A""):#  �  9  A Oelse(  õ W J Pwhile6s´ àargs[0].startsÈX('-') v != '-'a !if@ 0[0]© ('-  ©  T " =$ "1:£     Qbreak‰   J 
� '-'ø  )  ,R ` = do_ &s( �[0][2:],   E1:])n 
'W ÂX 1X  Y Z r7 ÷s¢ ð

def gnu_getopt(', B ¥  Ê]ê 9"""/ æ"s[Ó _ Y]) ->l  Ç Tófunction works like R õ), except that GNU style scannß0odeQñused by default. _ Rmeans@ Œ #Bnon- j#s þRinterŸ‘  ® BstopopprocessêS s @soon &a l  	Ò" i; Pencouk #edkI,”character`  X s `+', or ‹hCpenvironêð
 variable POSIXLY_CORRECT/0set- en—1ion	Ì á  Â Ê  Æ 1Pprog_VAq Æif isinstancJ,ã a )y  
 ; = Cm 0# Añ @s af\  !s?0 &ifþ	é+è!& =/ [A4all	_ÚS= Tru°slif os.¸k.get("°OM R+ RFalseÎS$Ã+*
@À    if args[÷0][:2] == '--':
  öopts, args = do_longs( �[0][2:],   E1:])I AelifD  . #:1k T' and   !~ } \short~ 1~   *seÖ  � úll_options_first"  Qprog_û !+=¨ Ñ     Ybreak ,ell  ( J €.append(V '[0# &      n Q[1:]
] rreturn à L \

def”<optŒ)Ú 2try	  g 0i =O ¢.index('='­öexcept ValueError2 Ñoptarg = None– 
ë y % €opt[:i],e 5[i+Ê 0hasR ! =5_ Ø¼ ‘ 3if  Š  ifV  � !isŽ  Û Qf not°
   Áraise Getoptá B(_('à --%s requires@ �ument') %p ³ •  I   î  »2[0] ½ % ü* 1 is›  B› “ Amust8 have an› 	 #d(Î% +½  2bor '')Ç 	V ½ Q

# RkT:
#  z? @fullK �ion name} õÀâ ÀpossibilitieC±[o for o inþ ±  Ò°.startswith_!)]diÍ	F Y  \; 	¯recognizedË ‘# Is therYÄexact match? 0opt¬ ‚ /a False"7 ôo + '='? 7Tru> W# No ‹ ñ, so better be unique.i yif len(� V) > 1$É# XXX since ( ñ contains all valid Ainua’, might bï qà# nice to work9`m into
   e1A msg›  /  aÒ  prefix¥ oassertê A== 1n _»* =é "[0LI# =q . B.endvua  B[:-1b Ri ,h ®«ís2�string,   A¶Pwhilex' '&v Õ Š O _ � —ðif short_has_arg÷(opt, shortopts):
  0if  ºtring == ''   + ¾if not args  ! €raise Gea ðError(_('option -%s requiresC �ument') %x ,Œ  K  Mopt)+ ¸ ,X 1s = 2[0] I[1:]4 poptarg,x sð  E, ''. Jelseê <   &  € à.append(('-' +O ` Barg)± `return s— R

def��_has_arg¢öfor i in range(len(ÅÆÂ ¼ ›[i] != ':Í� ( ó.startswith(':', i+1· Ò ¥recognizedÏ è à)

if __name__˜ “'__main__� ¡import sysLqprint(g>�(sys.argv¾ðF, "a:b", ["alpha=", "beta"]))
"""Utilities to get a password and/or the current user — `.

get+ ñ(prompt[, stream]) - P  �Q  , '` echo Óped off.I Puser(9 1Getq    i Q from penvironý6 or§ ðdatabase.

GetPassWarn�´- This User àis issued whenò Ä P) can’qpreventV	I ¶  T !of�  6 %ñcontents while reading.

On Windows,2 ðmsvcrt module will beQ0d.
Šö

# Authors: Piers Lauder (original)
#” óGuido van Rossum (o A supºand cleanup: õregory P. Smith (tty6 &†F �në cxtlib
€$io
 $os
  ” wˆ€s

__allË3 ["8 ",
  è:","¹«"]


classŒ (Ë!):
Sunix_Z ’ ='Æ  ¥4: 'žS=Noneû?"""¨AÃúÃ: Written on M1ask øthe input.  Default: › W  : à: A writable fR`objectR qdisplayN{ S  ÀI # y ptty.  I~ å�is avail_ dŽ  ;  J�.stderr.G Ru­£The seKr3tÌ %  ã$ 1EOFº:p 2our* w òor stdin was closedg  á0: W—¡we were un© t0:0offi Þ W
Œ PAlway(0sto(@term4ð  settings befor¢ |¤ *1"""@ Ñ@d = !ð 
    with conteðxtlib.ExitStack() as s 3:
  6try   ð# Always try reading and writ õdirectly on the tty first.U  H ð	fd = os.open('/dev/tty', ùO_RDWR|os.O_NOCTTY)<  S ú= io.FileIO(fd, 'w+'& Ê ú.enter_context(tty% ainput M ÞTextIOWrapper* O > Q Êf not stream; ÷   q  y Ö êexcept OSError7 ð# If that fails, see if stdin can be á jrolledg¶ jclose(© Ú Ÿ f–Asys.] {.fileno9 ¬ ¡(Attribute´ b, Valu )Á Y ENoneó     Ppassww Àfallback_get ƒ(prompt,L
¾ z5 = ¬ 	X i…> Eerr
@ �if fd isÇ ² 
Í 7 olÁ ðtermios.tcgetattr(fd)ã þ # a copy to sav0newUld[:]Š ; ä   new[3] &= ~c ýECHO  # 3 == 'lflags'9 2tcs‰ _! 4 = @ �TCSAFLUSH4 aif has¾ - 0, '/ _SOFT'Ú  ¦ i |j  ; i IM G¾ àc ,
 <    <QQ_raw_)K!,  = E kfinallø Z   .� ž >oldY  @ €.flush()Ä™issue7208#fo e N 3if ï ± '   &# ñ succeeded.  The ó  Ô j nRerais±R ð instead of leavÿó Âðnal in an unknown[*teŸ G   e @# Weá$'tàR"or ¡.  Give up…Þuse normal IOk -# e!) | s© þappropriate warningD z Ý$F
% Ó   P# cle�p unused Rù	 objects before blocking  ?   Á  ý=Ø =] À  stream.wri£te('\n')
  ðreturn passwd


def win_get  (prompt='P! ñord: ', stream=None):K A"""P* B forN ñord with echo off, using Windows getch()."""D ñif sys.stdin is not !__ "__k  ¹ ¶ ‹fallback® ¡ !)
X  ’ Rc in Ì F ò msvcrt.putwch(cSpw = ’ vwhile 12 Cc = 6 !ge6 5  ” ô if c == '\r' or &n'?  ' Qbreak˜   5 ;003* ÿraise KeyboardInterrupt<  b: Ä upw[:-1]/ Jelse‹ ' A + c& Ú  È Þ  @†#pw8�=�warnings.	 Q("Canüscontrol@ðn the terminal.", Get–W> ,Ã  T Âstacklevel=2Ë !if[ Á ! =pastderrO sprint("c  : p wÙÁinput may be¡  ed“ Rfile=M p #Q_raw_4 Q£s! 4=""$ h!, ?  tñ# This doesn't save$0strgi2ñGNU readline history.Ý / ‡ : 9!in[ j  #trò -if†6tryO  ¼@i.write=   ñexcept UnicodeEn JrrorD ð # Use replace e! ° handler to{€ as much ‘possible ð"ed  o   Í 	 !.eu (§  cing, 'o ^?  de´ ?  0   \  bflush(8 ð# NOTE: The Python C API calls flockœ () (and un A) du+ ø *=p. i  # q©@EOFEh0if $ B[-1]  " =! £r‰  Oƒgetuser(ïa"""Getâ  ‘name from °environment| »¨’database.øFirst try various 9   `ables,T ?J Ö N  {…works onÓpas longT€USERNAMEÊ3set�  ìK  •Ã €in ('LOG, @', '8   L     c = os.À P.get(P  $ 0if ' à:
            ð4return user

    # If this fails, the exception will "explain" why
6 ¡import pwdE V ð pwd.getpwuid(os  
 Ñ))[0]

# Bind` Pname * aass to ðappropriate func Q
try:b q qtermios ð # it's possibleE òre is an incompat 5 P from& > þMcMillan Installer, make sure we have a UNIX-O F � Æ.tcgetattr,  s 
N1 (I5ñError, Attribute )æ ï damsvcrtn I H 7  . N³= fallback_ ; ?lse- 5win( e$ : u = unix!  """Interna�Aaliz	 † and loc 0sup @.

TZÿmodule provides iE n(I18N)L s(L10N)
S ð for your PythonU €grams by bvidingtterfacea0GNUtðtext
message catalog library.

† e referšBoperé  by which al  x  pðmade aware of multiple
languages.  Ä V RadaptW "ofÓ 0proT {, once
&4ed,Ê l ` 3ðcultural habits.

"""t� represents‡gÚ Âof work, con™ ions, feedM,f �
# suggesÿsPp followxñpeople:
#
# Martin von Loewis, who wrot­ö initial implemen „ðunderlying
# C-based¨RintlmQ�(later reP d ¨ ÞÀ), along wit«¤skeletal
# ;.pyv .³  PeP HFunk¬ fs `.py, a%@rly ðlete wrapper aroundS� 4,
#,0lso‘Pluded:Cure-¾û ð to read .mo fil+7f
#V ò wasn't available¸ òJames Henstridge¾ ay oaú > $  Ë‚has someh  erÞóng, but currently un�‘ed experi±±l features:S no  o¶ 3a C^ clè &ikAncesP3 pabilityÜ1add — „ via
# añ2APIõ ÀBarry Warsaw#eÌea2se å  tp.~ €ll() APIÑP codeª œ pconform¤All C  § '  š   's8  ï’standards’ ñ Francois PinardB ñMarc-Andre Lemburg ˜h¡ed valuablcthis
#¿ W ö J. David IbanezºQed plö ¹ ±s. Bruno Ha÷ðfixed some bugs.
#
# ñ6TODO:
# - Lazy loading of .mo files.  Currently the entire catalog is7 ðFed into
#   memory, but that's probably bad for large translated programs.  Instead,
M  s Àlexical sort� `origin Ötrings in GNUµ ñ should be exploited› ðto do binary searches and làinitializationü ò	Or you might want to useN Àhe undocumenÅ ñdouble-hash algorithmð Pa with " atables(O °you'll needf Bstuds Ü Àgettext code ¡do this.
#À@SuppuSolaris } 0matË ðUnfortunately, we've been unŠ  ¿Afind\ <  á áanywhere.


imr $os
 $re
 ósys


__all__ = ['NullTî [|', 'GNU CVF',
  '’  1 /0ion pinstall  Qdomai Hbind 	M   _ _Q;sets dp ] 'dn  l 1 	n l= lJ  	2 pV d n d ? ð-]

_default_localedir = os.path.join(sys.base_prefix, 'shareì 4 ð')

# Expression pars »aplural` selec,ˆCThe ¿ Q librfšñ s a small subseÈ°C syntax.  : ñonly
# incompatible difference isN hðeger literals startž [pzero ar¢rdecimalœ óhttps://www.gnu.org/software/µ t/manual q.html#Pð �-forms
# H õ ://git.savannahP Ecgit=   5tre] â-runtime/intl/Fð	.y

_token_pattern = re.…ile(r"""ßö(?P<WHITESPACES>[ \t]+))
 ƒ| # spacÝù horizontal tabsR ÿ NUMBER>[0-9]+\bO 0   R P‚
G _AME>n@ œ  G  è  nÐyallowedI ÿPARENTHESIS>[()]‘ |5 ñOPERATOR>[-*/%+?:]|[><!]=?|==|&&|\|\|)Å ù!, *, /, %, +, -, <, >q¬  ÿ	# <=, >=, ==, !=, &&, ||O &5? :Ù € # #Æ!ryÌ¦bitwise opë* À              ä# not allowed
% ô(?P<INVALID>\w+|.)   ñ # invalid tokenE ñ""", re.VERBOSE|re.DOTALL)

def _+ Áize(plural):7 �for mo in< ’finditer(- ©_pattern, 3  ‘ ñkind = mo.lastgroupO   2if  ò = 'WHITESPACES'q  "   …continue7 RvalueT P (E ) V )R praise VG yError('& ä È Ñ form: %s' % w g Ryield {  #''EeY 4 Ð "if.   Ú ireturn‰ “unexpecte²Œ OelseS cend of¥Ý ñ')

_binary_ops = (Î ƒ('||',), '&& •==', '!=' < > < > + -, * / % ) `{op: iœ @ i, “ ×in enumerate(¬ A, 1)(  op&”ops}
_c2pÉ {Ã P: 'orm �&&': 'and / C//'}­aparse(øãs, priority=-1ü±result = '' nexttok = 
 9 Qwhile ! G= '!~I @+= 'ÜN   H 1 ; R n !if  G= '(P Fsub, ( _É �  ] v �= '%s(%s)Î( V, sub* k W!= ')k I 9ðunbalanced parenthesis�B'a 'el_ =_ �  c"%sp¢ E ï6tryü ¢ qs = int(8 B, 10<  ! gexceptt
@ _¾A ¦) from Non„	¯ dQƒ q A (Öqj = 100 
57in ç  8i = [^ ]C  Ü eif i <À:   Ubreak+ 0# B õ chained comparisons$ O ð in (3, 4) and jÚ e:  # '?, ' L  ‚ 4… % ð# Replace some C opööors by their Python equivalent°  op!7.ge,—� Oight<w, i + 1/ 1%s  	ôPop, rR 2  àiÛ uif j ==˜ð == 4:  # '<', 'p>', '<= S>='
  òresult = '(%s)' %  
" ñif nexttok == '?' and priority <= 0:)  N †if_true,3 ÷ _parse(tokens, 0)- ' f!= ':'H  L Óraise _error(ƒ = __falsk + Î  à ð%s if %s else %sì (´ ( B, if[ B &ifñ =ñ © @
creturnSò

def _as_int(n)û 2try	  W ²i = round(nŠ Àexcept TypeE+ + ò('Plural value must be an integer, got Ž s  ñ(n.__class__.__name__,)) from None; ñ import warnings  .	 � ,‡ ,i ° â  DeprecationW� 2, 4;…nwac2py(p#yò """Gets a C expression as used in PO files for <   !ms` 1s a— °Python func� à that implemenf Çn equivalentp .> 5"""z4len© g > 100lõVã'('— V Ò is too long'	h÷c$ =³_´4izeƒ =  u…  ” ´×   •depth = 0  Nc`† 
N Aif cu(L E+= 1M     2if j 7> 21   ## ¥àcompiler limit,‚about 90Ž1  °# The most ; plex exaÜo has 26 ¬[ ¯| %el)-sns = {'i$':s}" ú exec('''if True‚ ¥ Ç¢‹    o3°instance(n,bT #  nZñ€ # C @  †	  ''©"F, nsˆ5 @ns['§ !']8 )PRecurÈÙ %#   ^@ can!¦îµQ) or !)Ø&  Ì!~ó_expand_lang(loc/IRlocal[bloc =  p.normal� 3 ç óCOMPONENT_CODESET   = 1 <<aðCOMPONENT_TERRITôORY = 1 << 1
    COMPONENT_MODIFIER ! 2! ñ# split up the locale into its base components3 �mask = 0 Ppos =7 ¡.find('@') 0if  Q>= 0:  Ž ‚modifier2 e[pos:] 3loc F:pos o /|=Ë  ; Oelseb !''   † ¡ .¡ 	scodesetˆ   %qCODESET 
Ÿ ` ž _ž 	Ÿterritory  ,ŸTERRITORY¢  d ¤ ‚languagev 4 r$[¥ð for i in range(°6+1)”Ðif not (i & ~ Ç):  # if all] I @this Ábo exist ...s  @  0val‰ ” 	 0if d ôé  : 7 5+= ß 9 Â4:  9 º7 d:7 ò	8 âret.append(val0  …reverse( òurn ret



class NullTranslationse÷def __init__(self, fp=None†  µ._info = {}‘  Bcharù 7  output_$ 
pfallbac	B �if fp is  ³  Ê  ~ p} Q(fp)
z Ð      Î É Fpass( Dadd_| ü ‹ 4 0if J .+ † G .T  • ´ 
Ó  
\ 4 = 5 ¨ sgettext£ hmessagŸ¢ 0ret
i .U O > ‘ /  † l2  I #,   )Òmport warningð Q  .	 %('H )Ûôdeprecated, use e µ) instead',š  M  D: BionWs 6, 2jiŽ •C +EwithÁ p.catch_¶  Ð (ë †  t.filter ô('ignore', r'.*\bô O\b.*Ñ U  ã à & ¯ •£.q (§ðoutput_charset:
  ôreturn message.encode(self._output_charset)
7 4 ñlocale.getpreferredN qing())
> Ádef ngettexte ƒ, msgid1 a2, n):+  m 2if Š †fallback   ˆ 
# .` Z Y on == 1Q 9 - Oelse( 2Ú l{  “ Ó Û åmport warningsm  .	 &('S ö) is deprecated, useLµ) instead',K  # D; BionWu 6, 2Ôi� ÅC �EwithÃ p.catch_¸  Ò (È†  t.filter õ('ignore', r'.*\bö O\b.*Ò V  ä á & 5r (ý½�6ctmsg =É- 6( 2( c
nq B £1 Û p 0con®,#×» Ÿ_ Y £”`n< `B D>j d ° ?if Ç � - ( NAinfo$r+  ÿ  ._! ¦2 
$ 5 
t< §Ã  ¤E ©¿­	‘	ë 
c À ;set¦Ä #, ê ;Í R  Ñ 4µ
Ê $ =ª Ô  É3allÉ ®names=NoneÌ vbuiltin= ð.__dict__['_'] = self.gettext
   òif names is not None:
  ø	allowed = {'gettext', 'l n 	; A  '# E 'np0 % ' }< 1forš D in ƒ a& set(° )¥  d ðbuiltins.__dict__[* ñ] = getattr(self,V ø)


class GNUTranslations(Null i ñ# Magic number of .mo files· ñLE_MAGIC = 0x950412de B ‘de120495
 à# The encodingU áa msgctxt and  !idp " ir #+  + "\x04" + Cid (_ñ version >= 0.15)v ÐCONTEXT = "%s9 4%s"� ¡Acceptablep @ q òVERSIONS = (0, 1)5 ”def _get_- g @ ¡ð"""Returns a tupleó Tmajorª V, min 1"""³  > r; # (X t >> 16,9 ˜ & 0xffff– Sparse� *fpŠ òOverride this method to support alternativˆformats.“ ñ# Delay struct im:  ºAspeeÔ up~ 5 Awhen]= ß Q# areƒUused.÷ Kfroma funpack" 0ileêéPfp, '  ª'÷e P3 thÕ ðile header, which consists›p5 littl£udian 32u ¶# bit words¬  `Æ._catalog = 
 {Ý% óplural = lambda n: int(n != 1) # germanic * ¥by defaultƒ æbuf = fp.read(å `buflen\ fen(buf ñ # Are we big enÔ *orå ?` mñ"= oõ('<I', buf[:4])[0]) 3if , != Þ 
¤¹,¥ðcount, masteridx, t…Gidx q 4r V4:20]È  Ë¥ii = '<II'ˆ -elŠ }Š ,>Š >Š sFÐraise OSError?C'Bad7T!',O ¶Ä ç [  o
~gD 5jor8  é"in¬Ö
"¯ [ 0' +š(¤ )Ç €# Now puX±l messages Ý	�`buffero¦Cä # Üfionaryy si'Prange_ G dõà    mlen, moffõ = unpack(ii, buf[masteridx:
 g+8])
  ùmend = moff + mlen ptlen, t _ Ptrans^ 	 ] t] ?  + L 	] 1if  <® �len and 4  :0  · Pmsg =0 [³ :@ ]% t&  | :T 
& Nelse] úraise OSError(0, 'File is corrupt', filenameGù+# See if we're looking at GNU .mo conventions for metadata½   	N== 0Ÿ ð# Catalog descripN 	@  "Ílastk = None  z  b_item in (Þ.split(b'\n')t  R / "= 8 ú.decode().strip( /   pif not : T  % ~continu¦   ÿ
# Skip over comment linesP !ifm ó .startswith('#- !')[ Ž N.end T  ‡ ¤ 
 gvk > `if ':'k | f 0k, H  % �o':', 1] Z  { kƒo.lower‹ .  ] v.  "   ÿself._info[k] = v* dk" Qelif # ò l * P] += „! +ÉY �if k == '–Ÿent-type'e pcharsetÑ ] Z=')[1   Ä m Ïplural-formsm dN?';'»P  � 4[1]’  ‘  • 5* ‚ = c2py( 
m ð# Note: we uncondi)Bally†árt both msgids©msgstrs toyP# Uniï0 usÐ@the <°acter encod �specifiedê$ ;setL `parame: 0of ' @ContÇðType header.  The gettext docuûaÂ O �stronglyˆ duragesÓ Âto be us-ascÑt some applicN sO ñrequire alternativeZ  â ñs (e.g. Zope's ZCML7«ZPT).  ForM 4travÌ | , �”›sion willJ ócause no problems sincÝ Àcii should a÷lways be a subset of
   # the char ðencoding.  We may want to fall back Ë8-bit msgidsN !ifQ ù
Unicode conversion fails./ w „= self._ ©or 'ascii'/ Ðif b'\x00' in :  Ö Ú# Plural formœ   ³  1,< Pid2 =	 s.split(Z )S ptmsg =  + _ r = str( ,\Y €for i, xÍ  enumerate(h )Ù  ¾ …catalog[[ 3i)]m xh NelseM I § < O  …  	�# advance	 next entryÅ  Jªseek table~émasteridx += 8R Utrans  Ðdef lgettext(—, messageæimport warningo  .	 %('H ô) is deprecated, use e ±) instead',‚  p
 D: BionWs 6, 2ÖŽ elocaleC `missin@vobject(1  d ¾úÛS.get(ê #, = 3  ] Ž$is 
Ü#ifI ® ­
  Ð kreturn' .$| s  4 ª  Ü n doutput¾
t p  C .^eÐ*._5 q 1  T ‘preferredK qing())
‘ 2nÎ3 ¡î?, n= S > ?A:tryO H5 ÷ !.pQ(n))] Âú except KeyErrorT È6ÿ ì 2j{   šif n == 1y   Ñ 9 15 »0 20 Ã 
V
o Z 1‹A‰¼Û? = ?Àsing:
        ñif self._fallback:
  kreturn' ù.gettext(message)7 3    Qtmsg
 Tdef nJ  ˆ ƒ, msgid1 V2, n)’ 6try  ¢  J # =› ”catalog[(C  Q Á.plural(n))]s  7 ú except KeyErrorT &É €  Ã z  ~ šif n == 1x   Ð 9 15 Oelse0 20 gpg0con¿#, ¤f´ctxt_msg_id\½CONTEXT % (9 w ömissing = object(Ø ‘_¨ B(l #, A 7 1if : $is 
«&Î  �I#é   › ÇT  æ &, Z Ñÿ k
C ] ,#NP k[ñ
# Locate a .mo file u¾Cthe +  strategy
¨ófind(domain, localedir=None, languages “all=FalseXñ4# Get some reasonable defaults for arguments that were not supplied/&if{ @ is ~ – C = _] _ A ¬ A   6= [% Ÿ óenvar in ('LANGUAGE', 'LC_ALL
 �MESSAGES CANG'þ  á  0val‘s.environY Ü ( fif valØ     f  =! ª.split(':'?  + Qbreakò   aif 'C'O&in­
b ^ £.append('CY ð# now normalize and exp  /9 p  ne %s B >   =  ({   4  ! _X _) ( C (a Í ; sP  ð    Í  Àg)
    # selñect a language
    if all:   ±result = [] Oelse  2Non@ 1forQ ` in ne[ s/ "if f== 'C'  i Qbreakc   ñmofile = os.path.join(localedir,H õ, 'LC_MESSAGES', '%s.mo' % domain)P %ifJ rexists(b )… þ  ‹   t.append; ]  " 
    rreturn l 0  Q ñ



# a mapping between absolute .mo 	 ö and Translation object
_t ðs = {}
_unspecified¼' ‡']

def 6 (/%, a=Ñf s Â  Ø  bclass_ ø
 fallback=False, codeset=� p2if ; @ is k ‡ W= GNUí s| I å Nfind· ² ,ÈR=Truecif not‹
”¹ …  à ªHNullˆ (O  " ñ	from errno import ENOENT«  ! ò	raise FileNotFoundError(' ,(  ,  8'No§fH  h¶)',îñ# Avoid opening, read	  ?@parsj'th]Àafter it's bdÍq# once.¨ ²! =¯  ƒ ‘ í
 Yrkey = (Ð,0absÍEN e	Ë†.get(key# Nif t2 :Awithó X Ú, 'rb') as fpØ / l ‘setdefauls ,ŸF(fp) p# Copy <=‡0 torpow settdWs¹2 { ð
# output charset. All othƒÀnstance dataé qshared Þ "thbE ccached| ¢ pDelay c© • ¨@spee´ up gettext´EwhenigJ 1are3Fusedb U  a Ô  O  . &(t2 è Î  €
˜Y 0war¸‰  �  .	 €('parameµd ^ ¿deprecated'Z	D' BionWk 6, 2²  n ¶ 
¢   ‹ † ´ings.catch_ (Þ (    t.filter ò('ignore', r'.*\bset__O\b.*Î 
g  à 
Ý À        t.seót_output_charset(codeset)
  õif result is None:  "  5= t ?els% ã.add_fallback(c creturnc ð


def install(domain, localedir=€ #, ¤ ñ=_unspecified, names" )£ þ t = translationO $, Ž V=TrueY a $t.� b ò)



# a mapping b/w ª Ss and® å directories
_Â os = {}@ 
} 6  : ãcurrent global{ ó%, `messages' used for compatibility w/ GNU gettext
_I _½ E = 'C ‰ (  =_€ G #if—  4;not83 # =. < $ ‘ Mbind• !ÿ  |` #if¢?dirŸ 2 [þ 6] =5 F ¦ + C.get&¦, _defaultù 7 Ü Â _Ã _Þ:  iñ import warnings€  .	 /('V )â Ádeprecated',=  ¸ D BionWc 2, 2û
C› � $if‡ c ä 4 I Š 
G sK7d¶(«ì2tryô × ø�b ,�)ñ æexcept OSErrorS ¨ u » t­  Ð( )Äl² ÕC Ç,â a )1/eaß„ ªÕ ‚3 = - 1*	rEwith p.catch_™ ¯(£ š   t.filter ð
('ignore', r'.*\bparameteÆ“O\b.*Á V 
 Óµ & ""30.enK_3 orQ ?‘preferred% Cing(�XETlFÀxt\b.*',
     	ôDeprecationWarning)
0 ôreturn t.lgettext(message)

def dn ãdomain, msgid1 a2, n):N 2try	  [ ¡t = translw (= õ _localedirs.get RNone)– æexcept OSErrorS –if n == 1  j Á – ‰   Oelse( 2( : %t.ã E Û l‚import whsi  .	 '('N c) is dŸwed, uses±) instead',I  Ú  ×2, 2D† m; `codese—ƒ ‡< 	ÈEwithÍ p.catch_Æ Sings(ù’  t.filter ó('ignore', r'.*\bparameter „ O\b.*â Z  ô µ "  á x,‰ =‘ T ‰ctmsg =t • ‰( ‰ ( �`msg.enˆ (  ³2or É 2‘preferred% Cing(7ª—¦lžš	Ý .U (kqpq0con™$, šÙ	¨ø"çµ u Ñ %t.¤ œ 
2%dn# û+ A¿í å ÞXDZd ”_current_>/ _­÷ã´ }b { y#†>† À              óDeprecationWarning)
 ô# return ldgettext(_current_domain, message)

def n( �msgid1,  a2, n):U Q d) Q : [ l3 T \  ‚import wÅ sp  .	 &('E c) is dû ved, use¿ ±) instead',G  22, 25Ewith‚ p.catch_{ Sings( E  t.filter õ('ignore', r'.*\bl*O\b.*Ž  O  œ ™  " }T Ï ~ ÚpÚ0con
ú
Ù( Ù9 
Ùn3 " † 
e 3 f D t


# dcÉ ð) has been deemed unnecÐ`ry and"ðnot implemented.C ðJames Henstridge's Catalog co óuctor from GNOME s r.  DocuK   u8°
# was:
#
#¢Ã0  Ucat =C j ò(PACKAGE, localedir=LOCALEDIR)9 ‰_ = cat.N ðprint _('Hello World')× ÐThe resulting9 Ò sobject ÷Ály don't supm ac1  through ab icLÐary API, whics5 Àed (but appaL�ly unusedv2%
#ñ #

ó ‘ = transl«ð
"""Filename globb¶ Óutility."""

M$os
 $re
 0fnm› °sys

__all_5 ["Q T", "i	 ‚escape"]³  P(path~ ó, *, recursive=FalseêB"""RB a list of 7 !s   ² a  H  	 atern.
s �0pat @ may[atain s�ñ shell-style wildcards a la> á ó. However, unlike  3, f=as starô½@ ò
dot are special cases tha  Ã ‘ed by '*'11'?'~ ¸ sË &If  U”true, theó P '**'Ç lA any¡ sW S ðzero or more dired!ie! G sub .1   Sr� (Ï¹¶
 )Ê+ äpn iteraýõPyield7ê h÷oÀ, filenames òstarting with a
    dot are special cases tha ñnot matched by '*' and '?'> ¡patterns.
 óIf recursive is true, the ) ¢ '**' willV   any filesW D òzero or more directori! G sub .1 1""" ðsys.audit("glob.  ",z fhname,› )0 pit = _i' L(pat% s, False, Ù  5_isê > !):Y  Wõs = next(it)  # skip empty string* passert is ïreturn it

def¢ 
sdironlyx 2diré @base
 ` = os.Ü f.split© i !ifv –has_magic È ž m ;  ã 4if i 0  w lexistsZ  *   Uyield¦^ JelseW 3# PnF endÇÓ slash shouldW =W  r %ifcisdir(9G #  � £U EC ² i2
9s o `from _˜2› ,k,×  ß ™ © +H 1H Ö 4# `Ã:2)`   ðe argument itself as a™ vPif itÿb@# draor UNCêp.  PrevA ´an infinite¡Pon ifP 7 q±# contains ¶ò characters (i.e. r'\\?\C:')!%if› !!=€ §  ÇüÁ‘0dirÆ"  FS, Tru 
ƒ: [4 ]¸ 6if n   1" %p_in_dirÍ  2n    / 1/ 
À '  0' 5forK in sò  Y7in B {	=  ° ¶xFjoin<  Y õ)

# These 2 helper functions non-“!lyƒ ð inside a literal³ Q"y.L y×# Fst oÕ2s. †€1 acceptäÈRwhile p0
# tak¢g à@ (so ± ÿ  to check .Aits !cence).ð <±r ø5  Ÿ`list(_Þ Ê- Ð)
    if not ó_ishidden(pattern):
  ònames = (x for x in  vif not = 1x))7 ñreturn fnmatch.filter(5 $, b ð

def _glob0(dir b, base
 sdironlyŠ l  Ÿ ò# `os.path.split()` € ¥s an emptyV Â  , ñ s ending with a¶  ð ñ# directory separator.  'q*x/' should ×  ž / Eies.F 4if ” Tisdirß Ì  i   § $ [Õ ]A Felseß K „lexists([ DjoinZ 9)e { °]

# FollowÑfunctions areÝòpublic but can be used by third-party code.ÑÐîÒ w õ% †, False)I 1à $ Þ I % I ä# This helper ß ð recursively yields relative h‚÷s inside a literal
î Ê 2¦ ,  ¯ Qasser*z jõ…  {  }2[:0 ·from _rlistLc  Ã$Ifr P is fG,Ú „all file¶Ö êJ.
# A Etrue@  È  ^ .½ ” ïµÝ  ùÖif isinstance=Sbytes2 '   < 1 =   ýò curdir, 'ASCII's , 
:  > 2os.8 o6tryŽ wos.scanÍ v) as it(  Q  Pentry  ! 	Z    P1or H @.is_u ÷ 6   .  }Â    êexcept OSError± $ Apass9 - R LR""±¢  Ë  X Ø/(_Jß xzA  Û Vƒ  ! =xû      % =£
HAx) iM    S >  ‹ ÿ“ Q �
�  q … 	¸øx, y)


magic_check = re.compile('([*?[])')$ _
* b+ —Ahas_X (N
qðs, bytes):
       ñ match = magic_check_bytes.search(s)
    else:
   6  0 creturn_ òis not None

def _ishidden(path)Y 3   õ[0] in ('.', b'.'[0]); �recursive> CternA Åif isinstanc !, Ï #  ½ h  < ‘ == b'**'Ý 
ç * ) Ã Qescapf Shname` A"""E ñ	 all special characters.f 1""" !# - ðing is done by wrapp óany of "*?[" between square bracketQ f# Metag 1 dor@workIòthe drive part and shouldn't be Í dž )  , ˆ Ú ` = os. a.split  zø É z { F T q ¶ub(br'[\1]' G _.sub(@ Ê¼ % +Ü ò0
__all__ = ["TopologicalSorter", "CycleError"]

_NODE_OUT = -1
 @DONE ò2


class _NodeInfoÙq__slotsg P"nodeY Ðnpredecessors 4suc 
U)à_init__(self, = j ÊQ# The b this ~ Òis augmentingÓ -  B .A ! =3 e   €# Numberm– ò, generally >= 0. Whenk ñvalue falls to 0,³ N  _2is t edÔÂget_ready(),A `is set< F U 9 wc eP µ •is marked(0a ce!to  Y 	Q  —þ Þ H = 0@Listˆ&!s.dl ðcan contain duplicated elemGs asµ ñ long as they're`reflec4 iG%e l 9's » attribute)Ä 3 sµ]t© (Vœ´,b"""Sub6of   R rais¢þP.prepk@if cÞ  exÀ  ` ªbgraph.N³If multiple8  4 p, only åðundefined choice am.�them will“0rep…dS „includedÐ’exception¢2det[¬  ¬Abe aT`ed via‹b seconU ¸P f*args*y  8h  [@€consists?  a  ª "of7,Ü±h that each @ is,0  W 3÷ , an immediate Ÿ~ T Cnext@ nÅ  n 2. I )„  ]be firsæ j 3las? \Àe
    the sað
me, to make it clear that ñis cyclic.
    """
	 ñpass


class TopologicalSorter:$ ð
"""Provides functionalityo t4 õly sort a graph of hashable nodesv òdef __init__(self,3 b=None)v  §    ._< ¡2info = {}“  Qready# @s = @ ! nã œedout = 0 �finished  "if� q is notW –  } 1forÔ ò, predecessors in9 w.items(Ë  5   Ó @add(Ö 8, *? )”1getÖ  ø # 2 R áif (result := X 2 +A.getc  ))Å  
Á 0 [] C] = R ²= _NodeInfoG creturn( ±  Ó  T ,
Ù | Á"""Add a new+ Š and itsIcto theMf  >ABoth *° *< ±all element�	z •* must be‹.N óIf called multiple times wig 2sam¼P arguc , 0setßÅdependencies!@willq  À Punion*  ¥ .  –8 in� t¬Ppossi4Bto a+2ode” 9no F (í °p¯%d)• �as well ahÌ& aK °y twice. Ifš o 9"ha Tbeen U u before[ ivÊcluded amongÕ*pautomatb lyÞ !edEëæ Z *no!of)(ow5õRaises ValueError i×ò after "prepare"ü H Š    #if=KI8ro n  ("(Ps can*#beÖ { aa ã „ 3()"æ { �# CreateT Ò8 ->ó G edgZ "   ï	%  ñ   , (.nbˆ += len( � $  —  Q �   &  ÷  î å   _‹ ·   · 	1 C.sucZ0.apkŒ" 'V zq"""MarkWŒ5as ë q`check Á  eÃ. “Qf any<e�ò detected, "Cyclr$" à€d, but "žT"´  ß #st!"usþ`obtain›ml  is 	Runtil„ ’s block m‚À      progreñ8ss. After a call to this function, the graph cannot be modified and
    âtherefore no m 0des7  4 õadded using "add".: 5""" ðif self._ready_noC 0is z UNone:*  u óraise ValueError("¥ ’prepare()Š Åthan once")
A h 5= [  _  i.€ “ for i inš   p2info.vy õs() if i.npredecessors == 0M ]
 +# Ù  seS8qwe lookp ÷cycles on purposù #o  — user wants¸Qcatch¯C<  ¿§at's fine,… Atheyšƒcontinueš W €instanceU Çgrab as many?  s ¢possible bû· Rblock{…progress> # # =MQfind_ %()# 1if  íÝ 3(f"ˆ  reža5 "", êrdef getP(ô)W ñ"""Return a tuple of hÇ |‚that are¸.?áInitially it rF s< • @with
;„a thoseT emarkedø `as proB@ed b¡!ll0 done", furf«cs willy x 2ew |  ´ U Ahave  htheir � 1 alŽv 0. OúÂ½+ ù'adGRempty8sÏ 'ed&R¢s£ ½ k0ed #1outÏ ç ¶"¥ viously&"e   us|€ ˆed first!Q# GetRWè 0adyý Á " mo‚result =q	Íæ5n2i a TH  u   ÚT · œ@n2i[  ]x¦ _NODE_OUT¬p# Cleanª P listç =  s +Ô eupdate‰ #6 @coun('ofdA we _ù ›    i	ø g.clearå" pnpassedr+= len(í ¾ K ]   Ô  Õ‘is_activedÕ€``True``t’ÐÈ```Fals+ obGwiseÅPÄ T ¥Ps do Ÿõ B`resolu@]  eiT  GrW S stÃ‰‰� SQn't y#enå"Í@" orU ªfnumberÜ �Aed ">ð is less than the numóber that have been returned
  õby "get_ready".
 ñRaises ValueError if called without õ
ing "prepare" previously.J 5""" ‚if self.p õ _nodes is None:&  œ r€  (e ¡() must be€ ¥ed first")? å i ´nfinished < `passedÁ �or bool(” )	`def __# !__% )¥ f §is_active(9 Adone5 1, *é = ñ"""Marks a set of "   ˜� as proce¹ ¥ðThis method unblocS `ny suc-  or[ Aeach` 3 in‹ 0* fü e¾É Ðin the futureŠ aj? to,v:exec:`3`4=any} ahas alt˜•marked asÅï � YŠ tû ,g e Ðwas not added² 5theT PgraphP  usù o"add" Ú2 U  ¹ Ñ  w  ye™i n 	a Ü   D Jf Tn2i =‚ode2infoé ’  Í !inL&s:    p# Checkm we know abF‹: @(it ‚~´2ly qFadd(§ T @if (:  Š ± := n2i.get /)) 8  f"G   { 1!r}†  ‘Š  "¢ F   A# Ifï : Èb% (  µ)é , ½ !rmE Fuserú ` astat =Q ( r.nprede�î *   - Æ!= _NODE_OUTo "   & N>= 0  "    5! Üa(stillSú ÌJ 
Ö  $elª =Ð ODONE³ š 1Œ _õ t   ;elsJ     ö«rt False, b @: unÓ n ±@us { ,}" ¶ê/—	f  ï 
Z  Go¯1all_ ÁÁs and reduce 0numÙ of„Jð, collecting all thew ones
  ð# that are ready to b ñturned in the next get_% ‰() call.J Ðfor successor8 •nodeinfo. )s:2  ‡  _+ u = n2i[ ]0 r.npredet ms -= 12 &if— e 5 N== 0˜ œ Belf.ò _Í •s.append(  )n s0 °nfinished +� " ðdef _find_cycle(* )u `n2i =  .i 29 ‡ †tack = [>its AseenG &t(˜  ¸ 2-  c 5{}
W  °  «&2iŽ  t 4if   W 
  ! †continueP   ®while True2 S  A Ð# If we have z 1 als† ode and is¶ 5theÎ  =  ¡# current ù P �found a „
½; ¥   :Í 0  re(h [2  r] :] +  ª  else go onz2getkb7  1 �  /P.add(ˆ «   8ÈPiter(q 2 ]¨@).__ó/__H  0 Þ q = len(p3  y  @ ); Ÿ €# Backtrð!toódtopmosÊ­entry with÷# at least anotheŽì©” M?try  ¨  ¿ 3 = NG[-1]r !  ]break¯  " ÿexcept StopIterationu 1del”x½ f.pop() W  £ ' … L
µ æ3Nonð ÐÌstatic_orderÑA"""RPs an gbable oV½áa topological F .âThe particular ª2is � �ed may de“@µhe specificë Y  -QwhichSöitems were insertçWgraph‡ ðUsing this method does not require¶ ð "prepare" or "done".Í5any� y ½ðdetected, :exc:`C±Error` willƒVaised»5"""I +q {Ö ‡ðis_active():
         ÷   node_group = self.get_ready()
  §yield from5 	" ? fdone(*W ð)
"""Functions that _ ñ and write gzipped files.

The user of the ñ doesn't have to worry about% ð^compression,
but random access is not allowed."""

# based on Andrew Kuchling's minigzip.py distributed with – ôzlib module

import struct, sys, time, os  1  ubuiltin $io _É ø

__all__ = ["BadGzipFile", " @open <   %de ò8]

FTEXT, FHCRC, FEXTRA, FNAME, FCOMMENT = 1, 2, 4, 8, 16

READ, WRITE  ñ

_COMPRESS_LEVEL_FAS;  ÍTRADEOFF = 6 !BE6 €9


def Ã ( na7´mode="rb", Ç llevel=}  G ,‡óencoding=None, errors qnewline !):4 ‘"""Open a…-k �ð in binary or textñ1e.
<  §± ñ argument can be an actual¾ Ô 0 (a  J ñbytes object), orP ±an existing5 !  í1{#or5'to‡  .ƒ  "rC "w wN "x x  a"Ž c"ab" f… ï  Q  ™ @ "rt0 w #xt1 t1  bdefaul$1 isÕ Ã ì 4" hÓ œ9Í 4Forrƒ cthis f? * pequivalk!toú	B con�"orÞ XSa). In i Qcase,U HCÍ  Ç Enas must]·be providedÏ 7D, a ’ Ü³is created,aQin ant °io.TextIOWr ¦r instanceŠ«specified ¶ P handÐJ ‚behaviorj  
0 en,3(s)°   ó`if "t"ÿ †M b    Àraise ValueEv‘("Invalid4�: %r" % (Q ",)[Ielse] À  é ¯ Å! f Az'> 'Ž0sup” edÇ ×"|  M #if!p $ ç sn =Žß = p í0gz_j! =~ð.replace("t", "")
    ió%f isinstance(filename, (str, bytes, os.PathLike)):
  pbinary_5 ¨ = GzipFilE ñgz_mode, compresslevel)A Çelif hasattrx ¯"read") or owrite"ƒ oNone,   , ±  æ ‰ &seÔ ôraise TypeError("- à must be a str  € object, aZ 1")
á  if "t" in b ÷eturn io.TextIOWrapper(NÐ, encoding, e‡ ¯s, newline´ R A a

def .ó32u(output, value>â# The L format, ñs the bit pattern correctly whether signedâ #õ "un . j .z  CÔuct.pack("<L"� ð)

class _Padded6 °"""Minimal Q-onlyUgâ that prepends‹aing toº ‚contents‹ ±f an actualD ¡. Shouldn'Èòused outside of gzip.py, as it lackI pessentiF òunctionality."""ê lô__init__(self, f,¦ C=b''s 7  ¤._buffer =% ±  Ólength = len(î ù$  —K = f:  6F = 0™   • 4sizþ H 2if Ž  # @ is 6ˆ    rZ'  r .+ (H y 
G  +  3 <=\ Ë V 4ad !  R L  t m _ 1 +=N 	 “ H[- :8 ]1 (elÜ ^  + | =J < ºi Ã{ Y] + \+  / "  
9-? +� 0 Fì° B
p·c ¢ e ñ  # Assume data wasta sinceO5lasmy() callå g  Ã / -¬ ²: 6  ã ° è		ÒCseek"=off\� ¾a   Ÿ «`  Z E  Aablew r < ATruePðllows fast-forwarÄP even$unH  CTeams

5Bad@!OS{g €"""Excepx ždL  some casesÂ� invalidÅísŸi\ _ŠÀession.BaseSð0tream):
    """The GzipFile class simulates most of the methods 0a f. ±object withN  & �exception(   £truncate()B !.
- CThisp ñonly supports openingc ñs in binary mode. If you need to- ! aQ ¡compressed;  : Atext8 Q, useÆ Pgzip.c p() func« ’ 2"""› Á# OverriddenÞ ’ internalZ ø @to b3‘osed, if È Aname– q# is pa— !in  my>¢obj = Noneu ñdef __init__(self,m  I =& ,É  G  À ý òlevel=_COMPRESS_LEVEL_BESTO 2objC a mtime  L ñ"""Constructor for5
 / 0 `At lea$ neñÙ "an… ¾ P must*Sgiven­ = ÷non-trivial valueY  –3new!€instanceL baâ!onàobj, which cane •a regular$ ” ò, an io.BytesIO Âã, or any other O Ñ.P °It defaults‚œ#in8 Acase› û iÏ¬bprovid  Y w ü 5WheÞ  ò 1not(,Œ Ï \ €argument# zu•¬ �included0he þž t header=Cmay , e …originalI v $unro;.   ý7 	K ¸ò if discernible;†zwise, id K Õempty string,M  iAin tM { + ¾ ê ,0is Fã { w h ]W & f 'r', 'rb a  w w  x'V  °'xb' dependÔo'en ©  P willº@read‘ written.  Ž kQ !is¡¥ !ofâ  JL i F  + ¾ ÍAV »0'r' pequivalX _× 4  Cdailarlyu'w' and� 'a 0 'a ¢#'x ;xb'nG¹w!is²Ðnteger from 0n 9 controllO&thNA 4of R `ion; 1Ô pfastest« ‚ produceF¼1 
Y9= Oslow= < 0. 00 (no‚ xat all.Ô . 9–oQ°al numeric »Pstamp3be 3m !to%lšðmodification timeó field in the stream when compressing.
  ñIf omitted or None,9 õcurrent time is used.
7 6""" ðif mode and ('t'}  Uor 'U %):?  } ñ
raise ValueError("InvalidM ð : {!r}".format(O %))@ r t'b' notu 
e  8 x += 'b'= pfileobjÙ  ó 
4  –= self.my àbuiltins.open( Qname,²  @I'rb'¦ # j  A ¡ = getattrT `obj, ' G', 'Q  7"ifî ‘sinstance3  - ë, (str, bytes)n ; � 6= 'Nelse Q Å = os.fspathf ß Aorig`= ` !isP
\  ï    ï BL û .startswith('r'Ü § ‚e= READ>  õ õraw = _GzipReadecÉ  ' D á_buffer = io.B #ed6 ?raw2  'Z#el¤» 0('wã a ,x'£5if S< ¨ ù import warningsë     .	 (  # "�File was Êÿed for writing, but this will "F `changewÿ	future Python releases. : qSpecifyh ÷` argumn †  ‘ hing it• ?.",‡ F| W?, 2¤ c y= WRITED ôPinit_û JE  =„ = zlib. Dobj( _level§  x M �DEFLATED< -= ŸMAX_WBITS> = ßDEF_MEM_LEVELA 0' I!_m7!=  tj!O ¿ z Ê#= 
 ƒ#ifÁ
ŽC ´ bgzip_h#	Ò)S ‘@property� 1defr  (G ”¤ “ µœA"use C  ýÿibute", DeprecationÙØ ÀITE and self÷.name[-3:] != ".gz":
  ±return self, " +& % ! 
 ‘@property  def mtime(H )b ð"""Last modification ) ñ read from stream, or None"""T  ¤ | ñ_buffer.raw._last_r �  � Œ__repr__„ @s =   œ.fileobj)d ñ'<gzip ' + s[1:-1] + ' ahex(id?  )) '>'v ’init_writý  , b  v ^= �  öcrc = zlib.crc32(b""¤ # Šsize = 09 z Šbuf = [] ?buf4 `offsetL ±  # Current™   ðfor seek(), tell 7etc÷ x _4q_header ü , compresslevel Aobj.= Ð(b'\037\213')î ‚# magic Y 
Õ C +10?  H #‰  remethodI 6try£. õ(RFC 1952 requires the FNAME field to be Latin-1. Do notS F qincludeK  F �at cannot?  ˆùesented that way.E f8 ð  = os.path.base _D u  ifˆ Á isinstance(B w, bytes� -    1 =  ¢.encode('lØ '] ' ßdswith(b'.gz'W F[:-3� except Unil Er ZError…j e = b''@flagÀõ"ifº < ( ±> 7
1Achr(U )û ü Z" =Ýn B  iñ1 is¶
� @  ê. (\ ü232uÑž a, int(7 )+ %ifÆOú	 == _COMPRESS_LEVEL_BEST} 1xflFF\002J/elN /FAN 4N /sev 0( ‚ 6xflâ    gb'\377‰ò:  A + XF00')®tqW,data¿G ÷_check_not_closed¯"if@modeCZWRITEû Åimport errno| %�raise OSí(  ’.EBADF, "“ A) onó-only GzipFile object"Ã  L ˆ 1xq ÀValueError("ówrite() on closed GzipFile object")

  õif isinstance(data, bytes):$  + Álength = len' ) Jelse- Ð# accept any T õ that supports the buffer protocolN  m 3 Ë= memoryviewr  $ ‘  - !.n´ 	× ! :> 0� Òself.fileobj., ”compress.	 u è  v * asize +9gthº   ñcrc = zlib.crc32I $,  R  goffsetT U `returnv k  �def read(Q  , Ž 7=-1°  Â._check_not_(x "if� Êmode != READ% imªa errnou  ý   áraise OSError(  ‘.EBADF, "• xW_-only|  G   Û ® .C  Ò £ì 1í ñ """Implements BV�edIOBaseO #1(L  t ÓReads up to a„²'s worth of­  ãõ is negative."""² `c1Ùa
© É < ß õ	= io.DEFAULT_BUFFER_SIZE? ¡+1(¢Cpeek¡nˆp� ˆ+C n9‘@property “R 	ð 0a‚ is Noneš; -: . =˜ o  ¶3if  P 
®y /  — â" =€  G   :try<  $ Š== WRITE#  8 € 1vflush()` 1   ¦C32u(>  , #û  Zð may exceed 2 GiB, or even 4 é  8   h L S& 0xf 
¢ ,elü  ^ O_¡úKkfinallT#myñ  Ñ 	» 5if  rw   È ™   ! Àbj.close()

ð    def flush(self,zlib_mode=
 ð.Z_SYNC_FLUSH):
1    + õ._check_not_closed()! 1if $  J – == WRITE@  D ò# Ensure the compressor's buffer is™ %edW  8 X Ñfileobj.writeº .C .Î  ¿ É )– ? + !)
a 
QilenoQ ï ‚"""Invok¬ °underlying ‡ ‘ object's Âno() method.W  u ñThis will raise AttributeError ifY œ  E õ doesn't supporto ." 5""" breturn† §  .   ¡ ™  ð lrewindð B'''R?  œ$un[‘ed stream| ð position indicator toÊ … `beginn*oã  ‚ 5'''! 	(z!= READ'1!OS*@("Ca· A in  g"è#_Gw.seek(0ärreadabl7æ2 Q  ¸ � . m : ò;  † ; JTrue- ”÷, offset, whence=io.SEEK_SETº 	Fn#ifC G != F 
m g* =* >CUR*  .   " =i +· ç *   OelseH çBValuõ('Seek from end noù6ed'ë V #ifp ( <‡ i e L 'Negative �
Mb tcount =g -g 	å ùchunk = b'\0' * 1024! fï l brange(Y !//) Ò ×   Ê w!e([ 
ù  q R %Q / ,el% Û
#O Ö	 ’ &	cüªp2 % ê Œ2linŒ—, size=-1	” � V ôize)


class _GzipReader(_Ôdion.De  €  !ƒ__init__�#fp  Ù …super().$ ð_PaddedFile(fp), …%.d^ Iobj, F  qwbits=-4 –MAX_WBITSÂ¤# Set flagp Xõstart of a new memberd >Bnew_ ð  = True
       ð self._last_mtime = None

    def _init_read(, !):     û._crc = zlib.crc32(b"")$  stream_siz` ñ0  # Decompressed  ð of unconcatenat 7 ‹  † a_exactŒ 7, n� �'''Read   òly *n* bytes from `¯ 2fp`Q  Â óThis method is required becauseõfp may be unbuffered,â ði.e. return short ¦ %s.! 6'''r edata =Y ., &(n0 while len(* V) < nq ³ b> & -1 J  - Šif not bC   öraise EOFError("C�f‚ 1end¥fore the "Ð  ?   ‚"end-of-ì  marker waWWached ?  à U += bY E  1 "Á_gzip_headerú÷@magi‚ßS2	3if $ Z= b''t CFalsô œ 3 !3 Œ\037\213; CðBadGzipFile('Not a ­ Aped Ir(%r)' %ƒ )Ø  c (wf, flagN�)ðótruct.unpack("<BBIxx",, !õ:(8)÷ ÚK!= 8ö » „Unknown –3ion'¶ !if° š & FEXTRAW !# �‘& discard9ðextra field, if ô5entö $ __len,î  Hê 2ê  B þS 	 m ½ ONAME¼ 5and¾ Åa null-termi‘°ing contain   èInameÓ ÉJTrueh ­  æ x"fp¯1¦  !   ¼ës or s==b'\000ƒ (   Ubreak ¥zCOMMENTƒ §ë am»è sJHCRCå  2)* ý 
¤r16-bit aE CRCL  È¼ ” g‡,º7=-1�!if J < 0’ K ™  B Fall(÷#6  =0ˆuspecial‡d,@(max(`gth=0),  à•supported· =+izðreturn b""

    ð    # For certain input data, a single
'   ÷# call to decompress() may not return. 1anyK ð . In this case,) ñry until we get some, å or reach EOF.M µwhile True:  “ –if self._’ jor.eof'  + �# Ending… �: we've cx ð	to the end of a member iµ ye file,u N Âso finish upÞ 8 P, andÄ öd a new gzip headerÑ  D   q# Check� 1CRC<  r R sizeK 1set pflag so3Oread“  p ‡  ( : o_eof()! Bnew_B ! =q( q) =†�_factory(;  ò "**Š A y_args)
* ÕŒ Ï!If_&  #pis set,(yhave to^  „ `# jumpÊ ùCnextõ1, iV žre is one²¾ Pinit_MI !if)  $ __.()Ì  “ .  öN=posº  + iM b"" F z= FalseaP# ReaŸPchunkõ òQ fromS �	[ 5buf– 0fp.Ô û(io.DEFAULT_BUFFER_SIZEË$un)@ ø <6or. Q(buf,ö
š+ 0or.X ànsumed_tail !=Z²fp.prepend( L 	
 /el� Qused_8} 2# Pv U al7yTbytes€ o0objÜvthey caF ð  Ñ# be seen by yÆ1 	e	¿ A ù 
Õ È0if sônYbreakz 1if <ŸPraiseêƒError("CV!edw “‘ed beforeEò Ü  ð
"end-of-stream marker wasxWched"Ú 2addA Í(è * ¶pos += len(% ˜ vZdef _e  O ,ð  ð._crc = zlib.crc32(– ,`6crco 0 é _9 +¯  E ù À def _read_e³of(self):
  ñ# We've read to the end of Ifile, a check Athat	 ócomputed CRC and sizeB =  un) ñressed data matchesE õstored values.  Note c  R K - i; Ptrue ª y ¥mod 2**32.2 €crc32, iG ð	 = struct.unpack("<II",  ._¥_exact(8))A 1if D 3 !=) 6crcF Mðraise BadGzipFile("0�failed %sA ±%s" % (hex(U %),h  I   I ¾ Gcrc)¶ Celifõ 1!= û‘._stream_S& 0xf  ‚ Ï  ðIncorrect lengthãÈµproduced")
Ê  # —òs can be padded with zeroes/ötill have archives»Ñ# Consume all6 D byt: e‚ý„positionÇWfirst� @non-v @ õ. See http://www.gzip.org/#faq87 µc = b"\x00" •while c = 

 4 �0fp.Q*(1J
/ + “prepend(cG±def _rewind¼¢psuper()° ` N ðnew_member = True

N �(·$,  ólevel=_COMPRESS_LEVEL_BEST, *, mtime=None‚ p"""CompËÉ±in one shotÒareturnØd  edw2ingÛ Op«Ãal argument Í0  É˜ ‘, in rangS20-9A """‘ buf = io.B2IO(d ‚Š  üobj=buf, mode='wb'{ w ÷  f) as f·qf.writeGp ò qbuf.getÆ"()u$deY 0 G E"""D 0 a €‘- ü Zø R[Y 0 $ , )Ý Ë f»")
Æ Smain( @from¹ãparse import AÉP r-   ‚
 q(descri=)  qp"A simpZ0ommGñline interface forR*�module: aŽ1ike@", O ñ but do not deleN O 1put–"."º‚group = ­ ñ	.add_mutually_exclusive_& \ ) ½ ('--fast',‘ Qion='£_›”', help=' + 7er'€ N /beN ObettN À("-d", "--deÿcompress", action="store_true",
  ñhelp="act like gunzip instead of gzip")
A ð	parser.add_argument("argv n ñ="*", default=["-"], metavar='file')J  - 3 = Q   S #s(j Ï ñlevel = _COMPRESS_LEVEL_TRADEOFFM 0if P a.fast:  í C AFAST- $elA /beA BBEST0for‚ 0 in  s.Ž ‰ ^ $de“   ©   z == "-"   Ðf = GzipFile(Cðname="", mode="rb",  òobj=sys.stdin.buffern G  Cg = & 3out' " Nelse‡ ¦ ß[-3:] != ".gz­   D  ^ pexit(f"—  ¯ À doesn't end&Þ.gz: {arg!r}"¤  ó  open(arg, â $  È ”builtins.- §[:-3], "wbV Ð Ì r
 Å I	" æ  € —	w— q‘ \  )ÿ= 

Ü  @  @I	@" +ÙC›while Truúchunk = f.read(1024  qif not ( TYbreakZ�g.write(1 K qif g isL šL
X ‰g.close(= f=  
< f< `
if __» __(¢'__main__'2   ð~()
#.  Copyright (C) 2005-2010   Gregory P. Smith (greg@krypto.org)
#  Licensed to PSF under a Contributor Agreement.
#

__doc__ = """hashlibpule - A>Ðmon interfaceZ Ñmany hash fun!€s.

new(å ð, data=b'', **kwÁò) - returns a new? ±object impl’ ying theÆ „ RgivenC ‚ ³; initializF   K $us/ U abinaryÃ ð.

Named construc>p ðs are also available,½ !se  @‚er
than d  ó ):

md5(), sha1 4224
 #56
 $38 0512 vblake2b Ñs(),
sha3_224P S3_256
 $38 1512 °ke_128, and}  ke. ð.

More algorithmò@s may be available on your platform but the above are guaranteed
to exist.  See( ¦lgorithms_) f and a p öattributes
to find out what1   names can­ ðpassed to new().

NOTE: If» C wan² ðdler32 or crc32 hash functions® yÑ Ž 0in
ì ðzlib module.

Choose\ rC p wiselyý ñome have known collision weaknesses.
sha384°sha512 willÓ @slow{e32 bit}Ps.

Hµ robjectsc ñthese methods:
 - update(data): U  ß ¯ = Q with �bytes in 0 ü. Repeated calls
   ó€equivaleZ¡o a single2 X �concatena_~ of allO  ` arguments.¾ ‘digest():z aReturn©   J  5 · ý  ù )n Âso far as a A y 2hexc | TLike  b excepH Q is rœ "edP nstringt `of douMðlength, containing only hexadecimalr i	Acopy‹ 	 a  „ (clone)ËË E Thiu– ÷efficiently computeesY   Pat sh÷ | NmmonN ²initial subð .

For example,ž obõ e  d  ¶ ‰ 7 Ñ 'Nobody inspãðthe
spammish repetiP1':
† ¡>>> importÝ5lib 4m = f.md5() .)+b"o "% ´ …  	. f ðb'\\xbbd\\x9c\\x83\\xd À1e\\xa5\\xc9      a1-  ( ðf0\\xff\\xe9'

More8gdensedý  ú½lib.sha224(Ò ¼ .ðñ4'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'

"""

# {Qtuple×ð__get_builtin_constructor() mustìÐmodified if aÃ—
# always‡, w’added.
__' @_supóed = ('md5', 'sha1 4224
 #56
 $38 Q512', g	 €'blake2b5  s,  Ï_l 63_2n _p /3_r 
�shake_128t   H E)


	Kn= set()0 Ó/ Àupported)

_ÿ2_all__ = __always_supported + ('new', 'algorithms_guaranteed',
   9 �availableQ ûjpbkdf2_hmac')


__builtin_constructor_cache = {}

# Prefer our blake2 implementation
# OpenSSL 1.1.0 comes with a limited4 B of M “b/s. The D +
#+ £s neither #c keyed? " (G ñ$ MAC) nor advanced
# features like salt, personaliz½ ô, or tree hashing.‰  õ-only
# variants are RR as '€ ”b512' and às256', though.iÈlock_opensslo i
ÐK  ©V ÿs',
}

def __get®q(name):B ¹×( í1 = 6 B.getK " 7if Â is not Nonej  ° hreturn( ; 6try$ 0if     in {'SHA1Ý fsha1'}%  M  imÿ  _ G     ž [< ]®  ['( ' 2 . 7 )elw 0MD5v ?md5u 5md5= t  9  c ƒ  A   X_md5.3 p 2SHAý ¥ 
    24‡ osha224Š   /56� B  � �  , %240256?224? !56- ?   D? ~ Ø  æ , Ø 
 TSHA38Ø  
 ×?512™  8 
Ø   ™ 0512Ø /38Ø  ‹ 
?  ? ~ Ø lb� sž Æ  b`_ . b/ s/  s/ ¦ Psha3_:€#3_Z  0  ý †3` éD  \  G 53r o / </ <^  ¢ ^ Ò�  Å / Â�shake_128Ä  F 	z  !keˆ1 2
ð	except ImportError:
    ð-    pass  # no extension module, this hash is unsupported.

< ñconstructor = cache.get(name)" 8if % Áis not None:   F hreturn( ^ ÷raise ValueError('‚ – ’type ' + r ÷

def __get_openssl_ ˜ y !if4 ¿ in __block2 ,  ¥ ü# Prefer our builtin blake2 implementation.Ù � 4 � / 8tryl àMD5, SHA1, and
 P2 are® Eall ˆÀ OpenSSL ver¹sM ° ¡SHA3/shake; �availablE 7 e1.1.1+5 Ðf = getattr(_÷dlib, 'Ki b   Ó# Allow the C6L to »°.  The func#… will bey Ñ# defined butN  ~ ,•actually Á  .  Don't fwback toK j1 ifJ ñ	current security policy õös a digest, bpo#40695Â”f(usedfor= S=FalsÜ1Useg CÞ òdirectly (very fast 2 îf± òexcept (Attributé,õ): Oapy_newôó, data=b'', **kwargsY ?"""& 
B - R Qa newwÐing object us "thË †ð d algorithm; opï¿ñinitialized with“ Ä (which mustÃa bytes-likeg )’1"""6	(ô ð 
 [&)_»  Éwq ï	Ù¹ ‚Jlib.z¬ ; 2# IÝ¦|(Ú`) does%,¤ ˆ ` #ÍS, tryÈÜ
Õs‚7 TaùQs forŸd24/256®t384/512©Ç even though  6° à library priorCU0.9.8Æ aprovidjm‹ Pñ÷a˜A)


ŒÀ    import _ðhashlib
    new = __ A_new Q__get    ñopenssl_constructor+ ÿalgorithms_available =  q.union(7  {   e Dlib.` ñmd_meth_names)
except ImportError:@ · /pyµ 	ybuiltinµ B
tryD ô# OpenSSL's PKCS5_PBKDF2_HMAC requires% ± 1.0+ with   qand SHAŽ Tfrom Ë ! i­ Ï pbkdf2_hmacÇ ñ"_trans_5C = bytes((x ^ 0x5C) for x in range(256))o 6 ,366 /366 7 8def• (óòame, password, salt, iterations, dklen=None)8 ¸C"""P4 ñ based key deriv8 P funcA @ 2 (]¡ #5 v2.0)
Œ  D °This Python4alement> sT pon the Cõ module about as fastK a§Ì JUshorté  s ÀAmuchI eÍ –  , Flong+ .g 5""" øif not isinstanceP7str- W ¡raise TypeÆ- S ˜(,&karray)a + ´memoryview( @ � l úh  ' d   )Í Ò# Fast inline37impåJ`nner =‹ ¦   ?out 	€blocksizv�getattr(iR 1, ' _ R', 64> T fif len1 > ,  + å * ;  4–).digest(_ 5  Õ+ b'\x00' * (m * -‰ D Ä u.update© .0l Õ+4 (5C©�rf(msg, v = !, O = m(# +Auses©í  asñ . We can re-use# Esameú a"# ?r object™Rjust ü P copi` ño skip initializ*œ L bicpy =Å W.copy”   o  Ò    @ ?6msg�=  ) ¸ (€ ' preturn k ò 'if\J < 1n&CValu'‰� "if”@ is —
C ¯" =½‚ ð _size
        içf dklen < 1:
  ñraise ValueError(( %)
% ¥dkey = b'' …loop = 1 öfrom_bytes = int. $  while len(R 2) <’ 
Ž ðprev = prf(salt + l 2.to^ µ(4, 'big'))X  Ì ð# endianness doesn't matter here as long to / � Ù use the sameL rð 
Æ (™ | 	/ úfor i in range(iterations - 1)Þ  «  I â   
È  ! ## ‚   ^ & 	r  %  =Ë  ( ¢  B( +¯ B  …   J `õinner.digest_sizeR ƒ preturn @ ![:-b]

tryë ô# OpenSSL's scrypt requires Q 1.1+O ‰ó _hashlib import6 ‘
except I ša ppass


w°__func_name�À__always_supJ "ed2 P# tryìðm all, some may not work due ¾ Ÿ ‘# version* V iFáhat algorithm.-  ]§globals()[¤ ‘] = __getò ( ò ‹¿  P qloggingp    .:  ion('code  Vq %s was¿ ™found.', x ñ 

# Cleanup loc´ ^
del M	:   Ê 0 `py_new  {   % öopenssl_constructor
"""Heap queueLÀ (a.k.a. pri^y! @).

/ 0s aÍQrraysæ ûwhich a[k] <= a[2*k+1] and  2]0 Ð
all k, countÊ�elementsI€ 0.  For,ú sake of comparison,
non-exis;  “  Û `ideredIb�°finite.  Th Atere9 �
property^ 0a hAis tTr[0] is Éã its smallest « ±.

Usage:

; @= [] `# creaŠ�an emptyc - Ppush(6  , item) #  �es a new 1 on  ' 
& ! =A 1pop; 5  op± e� ) Ï E<  Ö   #3 m Ð without poppœ!itµ bify(x)?   ÐÐansforms listr"o K , in-place
 È linear timeÍ !re# Ñ  ×  ;ã| ß ,V5dds€�  #M;K M Û@unch*ód

Our API differ„�textbookusÃáfollows:

- WeÃñ0-based indexingpðis makes the relatiðonship between the
  index for a node and  !es ñFits children slightly less
  obvious, but is more suitable since Python uses 0-based z ñing.

- Our heappop() method returns� ñsmallest item, not ðlargest.

These two make it possi„ qto view1  e ã as a regular œ ñlist
without surprises:– 0[0]Ú Kthe ˆ  . S ó .sort()
maintaiµ   ð invariant!
"""

# Original cqñby Kevin O'Connor, augmented by Tim Petersœð,Raymond Hettinger

__about__ = """Heap queues

[explanationN ðFranÃ§ois Pinard]

0 ²s are arrayóñwhich a[k] <= a[2*k+1]‚ 
  2]#À
all k, coun— @ eleÃ ás from 0.  For‚sŸúof comparison,
non-exis;  “ ðconsidered to be infinite.  Th Atere9 á
property of a¹¶Cat aÃ0alwâ  ÑÊ« Dp strangY ·` aboveJ Smeant‡ òan efficient memory
representnU`tourna² @numbÍQbeloww2`k'Ò ZO:

  0& 18 27 3/ 4 + 5 6> 7 8 9 "10	 1Š #12 k "14B À15 16   17 1D @19 2; @21 23 @23 2Ž @25 2( @27 2( ‘29 30


I¾R treežð , each cell `k'­‘topping `º'º ð2'.  In
a usual b&y ¨` we sex sports^ i�¢winner
oveÕ x ~ syQtops,q Áwe can traceý8 F dowÃ 1
top  Cñopponents s/he had.  However, in many;±uter applico—s
of suchÊ  s,Ì !do/"neD� chistor/š 1.
TfÅ×è’, when a ,  f�promotedi  trG lð  itq soÎ ŠPelse ŒÂ lower level( Zñ rule becomes
th)  SI ! d1 com0 th
`differ� $0s,
‘9 "opy"wins" ¶ (!ed  ³s.

If this>»ë 0tec• › pll time” A0" €clearly
t  d  Ñ+ûAsimpÅàalgorithmic wa6A remgtð 3
fi‡g"next"r1to )  Xñ loser (let's sayÇ 0 30* àÐdiagram aboveð) into the 0 position, and ðn percolate this new 0 down
3 ðtree, exchanging values, untilB ð invariant is re-established.
TT ñ
is clearly logarithmic on@ ótotal number of items i pree.
By 0rat‚ €over all ðms, you get an O(n ln n) sort.

A nice feature^ å    ® Athat@ ðcan efficiently insert
� @whil"eZ  < !go�  n, provideP!atÓ ? "ed£ ò are
not "better" thaß òlast 0'th elemenŽ Ãextracted.  Að
especially useful"`simulaÑò  contexts, wher«  ½` holds0`
incomµ @even* ` "win"B da meansÉ ðsmallest scheduled
time.  WhensL  q other  °s for execu¢ ,Q yM › fu¡1, sª!y ‘†asily go' Ðheap.  So, a
  ŠÀa good strucF x 2impR ñ q Ars (@is wüaI
used1 ömy MIDI sequencer :-).

Various_ Ø ` òhave been extensively
studiedw ¸ s	¸  & • 1, au$ñ reasonably speedy,� õ PlmostµRstantZ  ²0wor 0ase'  wõ much different
}°average casÒqHowever¨!re  Î‘representj :Æich
are more8 šrall, yeŒ òs might be terrible.

Heap
ˆalso verÞ�big disks�s.  You ö Aprob€all
knowR@t a 3 Ý`mpliesœ0ducÑ"runs" (whichÞ @pre-- 4ed
õ?   1siz@1usut re##d J`amountPñCPU memory),
followed by a mer3Rpasse6`these Š  ¨ i % ‘is often
 cl‹ñly organised[1].  Ie# Pimporûü  û€initial
Õ ú eSP longÇ z  s�€  Tournay‡“Away
ê  atu Pf, usD v i ñ € availabohE a tR š�
replacepkU`happenY"fi60cur© 'D ¢'ll
produc; Ã twß “ ± ofe�Öàrandom input,
ñ‰"  P fuzzmPorder¹P
MoreÑA, if$Routpu¢ ² Ä  Ä£ Z …Q ¤ P
may ƒ Û ÒÞ )‚ (becausµa“!s"Rø)‚ " P), it'_  ]Ð, so the sizeðd of the
heap decreases.  The freed memory could be cleverly reused immediately
for progressively building a second k ñ	, which grows at exactlyŒ �same rate p first 5 ü is melting.  When! pcompletŠ ñvanishes, you switchF ñ
s and start a new run.  C×  ôquite
effective!

In a word,D ”re useful ðstructures to know.  I%  ¦ ñ	m in
a few applications,p  I think itã AgoodC peep a `û ÿ' module
around. :-)

-  A
[1]½Àdisk balanci“lgorithms{ðare current, nowaday� Ðre
more annoy: Cthanõ¯ @this© Óa consequenceIô seeking
capabilities  “  \”On deviceŒ cm t< ð, like big
tape drivÆ`the st‰Awas ¢b diffeÁ  Ôaone ha<‚be very
¬ Nðensure (far in advance) th~Aach o Ðmovement willî Umost ± possible (= 4is,. °st particip¿Eat
"0ng"	á merge).  Someu Ðs were even aX ðto read
backward— nd% s þ @alsoYë @avoi qe rewinlðtime.
Believe me,P "l Z VCsortw K°spectacular.ðwatch!
From all Q 0s, 7  Ðhas always be¶ ± Great Art!›ð"""

__all__ = ['Årpush',  $op 4ify preplace 'F',
  �'nlargest  cnsmall ^ ¡pop']

def§ q ( �, item):N q"""Push Q onto,  , maintainá  n 9 ° invariant.Ó  Œ   �.append(V U “_siftdownp R0, le G)-1)” !op# � !opÑ ™ f™œ ‘lastelt =7 `.pop()´ €# raises|ProprižÂIndexError i0 ÕQemptyÓ  5 F `returnô a 1[0]*    c[0] = …  uö E, 0) P    W   F Í=Ð!opI<  ¾Û VRvalueÁ"ad1 ý x !.
z TØÿ`effici
  ß O±followed byfe)Y acan beM E 5appow° us^Áa fixed-sizeD Q.  Noð!at­ H Ó  ‡ ay�r·n)!«!at‹`trainsì1sonJuõ!ofJ ·ðroutine unless wó ritten as part of a conditional replacement:

  õif item > heap[0]:  "  = @ (( ,5 )+ 1""" greturn1 0[0]C ñ# raises appropriate IndexError if_ ‘ is emptyM  e  @ =i  s_siftup€ 0} u    | B

deQ dpushpo0   )Ü ò """Fast version* q  2 á followed by aš Dpop.å ­ 1and  ¤ <¤ \  ñ  k , =2[0]4Ë  & Ï 	 B É Vify(x¼ óTransform list into© Q, in-å 
 õ  O(len(x)) timeÃ Bn =  Œ &# Q ñbottom-up.  The larged ódex there's any point to looking atN  is) ; @with‰`hild iö ¥ órange, so must have 2*i + 1 < n,L  ñ < (n-1)/2.  If n) veÇ �2*j, this A(2*j( ³ = j-1/2 soH 0j-1" tÓ p, which ‡n//2 - 1_ µodd = 2*j+1` K  f %+1h  Ã ^   @that/Pgain f 1-1.F fØ Pin re„1ed(($ )é#Rx, i)_¨aop_max
/ `"""Max × À‚lastelt –. )k ¥"ú‡a 1[0]ò  c  �  /#= …  Ô #, Þ 7 T â J õ¦L  M&ü5ush:‹  P ß  � =" Q y ñ 1ifyí "m  %²‘ ¶0# 'ë 'kPp at allðices >= startpos, except possibly z Ppos.   
#F  ÇJäSleaf g7 ðout-of-order value.  Restore !
#¡² invariant.R dAdown\,˜ 3posE0new²2posä1# F; _ P path ¬ �root, mov(€parents e ° until find !a ¼$# g Bfits7Pwhile$ >™ Às:
        pÀarentpos = ( ³- 1) >> 1
  p# ‚ = heap[ Epos]! Òif newitem <   :  E 9 Sos] =  	  w  9pos …continue Qbreak V € ñ	

# The child indices of»   0ex n ±are already ñs, and we want to make
# a 7 at= ótoo.  We do this by bubbling the smaller† Aof
#u @up (f ò so on with that' "'s ðren, etc) until hittX �a leaf,
#b @n us ‘_siftdown² 0ove ú oddball originallyÀ ð into place.
#
#Ê �*could* ]@ out4 Ë Àloop as soon ‘we find aÒ Vwhereü¸=
# both itÎ ‘but turnsY  ó ò's not a good idea€`despitÆ òat
# many books wr  ·rgorithm=�way.  Dur®Apop,
ð	last array
# element is 7e w  “ ` tendsH°be large, sà ¡Aompaa i— ñagainst values star£0fro• ¡e root usu{ìdoesn't pay (= P
# ge- "of·  uòearly).  See Knuth, Volume 3, zt~ isÝ �xplainedÈ�quantifiä ³ an exercisñ"CuT á#êcá @sonsð important, sinc� es× ðutines have no
# way3�extract "R 0pri¡1y" "an‚€W°intelligenck�is likelR `be hidÔ¦in custom ¦ ë methods, or ia  1sto°(� ÷, record) tuples.  Cõ  Àthus potentiºVSensiv8’On randomÒ YÀlength 1000,5 ³ —€change cý¡he number É `s madeA Íäify() a littleœ5ose& �exhaustiv1 3 2pop3 1ot,
cæ ]0eorH¦ã âypical results¡ñ 3
# runs (3 jusþò demonstrate howÒœPvariaAis):?H—es neededÍ  ûg	  -X0pop®- B   r
# 1837kao 16638  T14996  A86803 $55 F1659. 
 G14963 !783 4f 0)  T15024S A8703ABuilÉ  ³ !¿  apush()@p times \ò
ead required
# 2198, 2148C2219Aes: L=ð is more efficieÃÐwhen
# you ca:àe it.
#
# The ñ!total compares needed by list.sort() on the same âs were 8627,
# ô
 and 8632 (this should be] Bd toG ð um of heapify(): !
# Tpop()1 As): o ‡ ðis (unsurprisingly!) more efficient
# for ¸ ðing.

def _siftup(r ñ	, pos):
    endpos = len ) Rstart 1pos ‘newitem =¦ Q[pos] ²# Bubble upÛ ñmaller child until hitting a leaf.8   c  2* 0+ 1’ £# leftmostC �position6 Rwhile  4 <Á Í ? #Se:  ! €to indexnsš …  2 Crighì ” 1+ 1o    5if # p  °B not7 2] < 0 ]˜  J ( % =R f o# MoveBp«  ¾z†R ‹ d  õ =!_ ) 5 = n Q# The—0 atô is empty now.  Put üathere,ý bõSit upI  lÁts final resó place (by ‚ @its j’nts down)à Ü p X º ( Ÿ$, ›ÆÞ $ O_max( ‰@'Maxh € variant` 'o { açaFollow¢DpathË�root, movÜ Ø ü@find !a e #RBfits Ú ¿>ä ¶ ×Caren¦(% w- 1) >>¨| ¹ 1 #ifx$ <€ a  e  _N ®      w =C     …continue1 Qbreak V ^¶'up´˜ª"up¨¹?Olarg¸‚™ , rd î ·B ·%·#§ / u¶ŒÀ up
    # toñ its final resting place (by sif  $ ñparents down).
    heap[pos] = newitem _8  ( P_max(& ñ2, startpos, pos)

def merge(*iterables, key=None, reverse=False):X @'''M3 ö multiple sorted inputs into a sing �output.
B £Similar to; (} ·tools.chainŽ ñ)) but returns a generator,L òdoes not pull the data… ñmemory all at once, and assumes that each ofM  ? Æ ó streams is already«   (smallest¿ ƒlargest)Ù ’>>> list(Tð[1,3,5,7], [0,2,4,8  5,10,15,20   Q25]))‚ ñ[0, 1, 2, 3, 4, 5 p7, 8, 1 ¢5, 20, 25]L€If *key*ª  ¸`applie/Àkey function² ï aelemenÂ ‘determine  c Îo orderÖ à'dog', 'horse'À @'cat @fish €kangaroo  M4lenà = 2 L 6, '; à 2'''	 ah = []¦ Òh_append = h. $ $if²:)  _údify =   
  4pop  >pop  "re�D  	( BdirefA= -1_ Oelse‰ “ % ¤ „   :pop p  ð 3eap # z 1	 ù0is „ 2forÛÀ, it in enumOQe(map‡  
)ò £   6tryK     Ànext = it.__ %__™     ° ([! 2(),„ 5 * »  ,  ] 4   Àexcept StopIž Ä� Epasss ã&(hK úwhile len(h) > 1C Õ 3 7TruÀ ’  SvalueÇ » @ = s "[0¤*  ayield 8 ­    2s[0Á@xt()  Š# raisesÿ  when exhaustedR ,S(h, sW #c1ore:` condiZ	E {c 0popY°   g °move empty â ¶f Jif hŠ²# fast caseà FonlyJB v remainô s Y‘h�… Afrom‡w.__selfÊ\D'
kÀ   next = it·.__next__
  €value =  )() áh_append([key() ñ), order * direction,  ,C ]C ðexcept StopItera, :a Apass ¢_heapify(h? öwhile len(h) > 17 6try  Ç + JTrue   Ckey_œ ¶ 	ª ± = s = h[0]„  1  Ryield×  Q 1 ? vs[0] = 2A 0s[2" H  
Âreplace(h, s Z P= 4popGFif h	
 Afromëñ(.__self__


# Algorithm notes for nlargest() and nsmall O
# = ð
#
# Make a single >ò  over the data qkeeping âk most extremeÓ�s
# in a vð.  Memory consump§ô  is limited to Q k@ > Rlist.˜ ñeasured performanceárandom inputs:,  Ê ðnumber of comparison³ C   nK A *k-Ö    (average< ø5 trials)   % more than min()
# - *   >--- 1 *  1-
#� b 1,000  1  s  3,317  c231.7%G /10G d14,046@  C40.5G /10G t105,749?  5Ž Ñ Ž  % U7,751? 	 00.8Ž Ñ G % O9,40G !1%;ÏTheoretical %t$k g /n „ †Step   C_³  AÜ)ö   
Ô †1.66 * kd 
  ‹1ify´‚first k-7 2* ?n -> #  ,€e remainÿ€elementsÂ0top f  P 3P ð
k * (1 + lg2(k)) * ln(n/k4„‘ 1topF³1 on L 4L G p - (k/2D  Ð   final sort…  ®— 
#•bÀ  3€simplifyÐ  Rúa rough estimate giveZ5à = n + k * (loñg(k, 2) * log(n/k) +     ÿ*)
#
# Computing the number of comparisons for step 3:
# - �
# * For` òi-th new value from �terable, °probability‹  beŸ  in ò
#   k most extremeL ¡s is k/i. m _exampP  é Q101stM Š Xseen i O 100g �100/101.Û  If˜ …  „ aà 	œ Ö c´ �of inserrpit into@ ‹ @heapC 1²f HThe Ptimes9  W Pgives�  @(k/i(O )µ @SummURacrosH `remain ßn-k elements Z Osum(^ ,òi in range(k+1, n+1)x  This reduc¾ o² °H(n) - H(k)º Ok * ¾ aWhere - i½ nX„harmonicÆËestimated byj ñgamma = 0.5772156649ƒ?^ =9@n, eE5 À+ 1 / (2 * nÕ ð  http://en.wikipedia.org/ #/H• ó_series_(mathematics)#Rate_of_divergenceŸVbstit˜Ž {formulaË ©/= 3  EÉ €(1/n - 12/ 2	¡Worst-caseÄðA
# I’  w9  9 è input dataÌÀreversed sor‹sï0at  y+k£
# must be" edG ­ :®Ÿ)  ¢¨= 1.66 * k; ú  é kâ ÿAlternative AlgorithmsÒ¥
# Other a,   wyPnot uÓ pbecause‡að1) Took much more auxiliary memory,
#œò	Made multiple passes ove% ; ö23) )  J ç iný 1monvñs (small k, large n, semi-random ‘)R !Se­ œ €detailedL ë n°approach atjÝpcode.ac<ò
state.com/recipes/577573-£ &e-0P-for-¾q¢ ¤est

def n U(n, iü°key=None):
ép"""Find_4 n 3 ›Ain ahQset.
3 ó Equivalent to: u(c �key)[:n]2 2"""; ±# Short-cut@n==1Á toía min()2 ’if n == 1¦  ª Ait =È j +   ósentinel = objectG   Presul<  ^ Äit, default=5  ,  ± { 4 ³turn [] if A Àis sentinel ð0else [result]

    # When n>=size, it's faster to use sorted()
0 Atry:9    3 ò  = len(iterable& òexcept (TypeError, Attribut )E ApassR  ž  €if n >= d   v dreturn— y Ú, key=key)[:nÝ Âkey is none,Ò ñimpler decoration�  ifD  + FNoneu Pit = h æ  � ñ# put the range(n) first so that zip() doesn'tg 7 ñconsume one too many elements fromV  w Eator: ¾P = [(. ±, i) for i,> 1 ins Ž  Ò%)]>  V2ot E â  “ W 1 Ò_heapify_max( ã 3 Stop =M V[0][0i ‚order = Z - J ¨replace =   ] r  Í  Ú  Ê *it¤ "ifå Z< top c ­ #, '‘ )¼  0   atop, _ Ì �  $   " E+= 1 .  ) H[Ä  Í 	�  Ö 8 ¤ñGeneral case, slowest methodl €H 1keyg $),	Æ c † ±
1> þ -68in ú0k =™á Œ  h ® 	 j 1k, ‘ &1, _ƒ ×r  v E   9ÿ{ 	àdef nlargest(n­GÎ ‡*q"""Find#n 2 0Òin a dataset.Úÿ Equivalent to: 0â, reverse=True> ê 2"""I ±# Short-cutj@n==1% W KV == 1š» a ùsentinel = objectE ¤0 = ^ Äit, default=5 ! ïŸzC] if• § 2  `þÎÎÀn]

    # Whôen key is none, use simpler decoration
    if+ QNone:  �t = iter( Uable) Presul  ð[(elem, i) for i,  õ in zip(range(0, -n, -1), it)]F rif not M y  } creturn 1 ‚heapify(2 � Stop =- V[0][0d ’order = -í  \ _G §replace =  i  Ì É *it› 0if p <ê 
 ^ © #, &� )¸  0   atop, _ È �  $   " E-= 1 ù.sort(reverse=Tru¬K[Ð  Ù 	�  «D !]
U ñ# General case, slowest method# iú H � = [(keyg  ó! À ¡ @	 ,58in 0k =2à  œke 1k, � 
1, _ƒ Í r  v E  ‚<
‡ 	 # If availüC!C DBmentA2tryï Qfrom ì q$ ò	ort *
except ImportError- _pass
; 	I £O_maxJ ,?ifyF 0?popF ò

if __name__ == "__main__":aiP doctXñ# pragma: no coverácprint(% .* mod()) 0  ñ"""HMAC (Keyed-Hashing‘ñMessage Authentic·À) module.

I Ðas the H óalgorithm as described by RFC 2104.
"""

Ë €warnings/ _ à& �_hashlib&   opensslÜ1 % 0 = ž_ @_md_–s ˆ`operat‘mÀ_compare_digu:as  C
elsü_ ¨frozenset(• .‰ ösÌ
_ 9 = 9 
 H !òlib

trans_5C = bytes((x ^ 0x5CRxµðange(256))
transðT_36 = bytes((x ^ 0x36) for x in range(256))

# The size of the digests returned by HMAC depends on ( ôunderlying
# hashing module used.  UsO _b Afromd qinstanct \   Read.
~ / ð= None



class * ñ:
    """RFC 2104  ! ð.  Also complies with ) a4231.
; ÑThis supports� 1APIñCryptographic Hash Functions (PEP 247).F 1""" QblockÜ ñ = 64  # 512-bit— °; can be chtd~1sub­ #es‘ Ñ__slots__ = (U â _
ácons", "_inner
 2out
 ~ ,  1  Ž � )ò ðdef __init__(self, key, msg=a", : rmod='')b„ á""Create a newÓ s object¼  & Bkey:n¡ or bufferb U *Qkeyed#>  9   ?msg=  ÕInitial inputG  d c  ´ † B ¼ 2: Ad Ñname suitable>  : õ lib.new(). *OR*i D  @ @lib u‚tructor  Ý M È K m
j ? B;x   °Required as‰ð3.8, despite its posiŠa after¸ op /alË ðmsg argument.  Passƒ  it` a Eword# ? isF ô
recommended, though not r­  Tplegacy Fvreasons� 'Y !if=  isí þ(‡(ª,Cgarray)ƒ ñraise TypeError("raexpectŸ0tes H A ð, but got %r" % typel @).__#__ ^ – G°   | "MiJ`parame”'D :'."b @callŽ(# ä  —.ó& =–’ Welif @N _, strS ð lambda d=b'': _ËL 'd)r &se ª 
W J pd
< ¿2 =  . _r(x  ó* E  û/ = .  Ä  if*Aattr.\6, 'Q 3  `   ƒ4 / 1if  2 J< 16E #  _warnings.	 (|  ñ%d seems too small; uÄYour 'm ð                õ    'default of %d.' % (blocksize, self. 0),
4  ýRuntimeWarning, 2)2 N + =_ + Uelse:  o "_wR  s.	 Q('No H _§ ù attribute on given digest object; 'N  R  •'Assuming÷ ó § ¦ ï ” #	„ is the œD .) û 'isF ’effective w ’as well aT ¦public API7.D ù _ =J  I 
% Öif len(key) >! 
²4keyá_�Q_cons6 . &()T / ˜key.ljust„Vb'\0'H£ Ð_outer.updateT p.transl 
 L_5C)4 ?inn4 '364 `if msg‹{not Non“ˆ � 3msgÌ ‘@property.�def name(- )!òreturn "hmac-" +×_¡  1 M 9JT   .rK m ™ E " ? �? 
" ?  + [ ,Zð"""Feed data from  ð  into this hashŸÎA."""^ Ã O .9b � w Lcopy§ B"""R‚°a separate )  r Æ  p 2An g  � 8 qwon't a€»ƒoriginal‚b½ ð# Call __new__ directly[ QavoidJ `expensÕ†__init__M Uotherg“_class__.Q ÷ $._ 7 	%D ad/   .  - ’(  .*(† '*  * /ˆ ‹ Ú�_currentç 
NÞ :ƒA forQ7 r state.P  Ûð To be used only€Ãernally withS¢() and hexþ &()�ÜhÓ h¼ÁR $ú h¦  ö $  7 ô  8ö ]valueÑÀobject.

     ð&This returns the hmac value as bytes.  The object is
9   ðnot altered in any way by tW õfunction; you can continueB �updating{ a ¢after call 4is J .9 5""" õh = self._current() Û € h.diges  sdef hex  = !):  × ƒ"""Like  e), but%Pa strš oC €adecimal. ¿its insteadª (˜ 0)

© ðnew(key, msg=None,m “estmod=''º ñ"""Create a new hash§ ·3andÃ Q it.
í Bkey:ã± or buffer,ìAstar˜qkey for  R Ø ?msg9  ÙInitial input6 ,`  º ? Yamod: A¨ á name suitable;  m @lib.ý q). *OR*´  ¡ < 0libXƒstructorå  ú ¼G Pmodul€ 2ppo÷ sPEP 247(p   PRequiððas of 3.8, despite ÿ@posiô Æ R op ,al¿ ðmsg argument.  Pass¶  ity•a keyword# y Š ð   recommended, though ”r¥  ºólegacy API reasonsÖ Y•pnow feej `bitrarÂ teË!toù™u  !s ·eg€method, b å1askÂ ü  ÆNt!@time"à 5O 'orš") ^ s9öÖEHMAC")
9X <" 1ðFast inline impleŒa¯ Ý _ ,*!RkeyedÑ3¶ . &rmessage) ° eÿbest performanceã '1?A m$ ŽšPif (_ö¡openssl is“ ý "	 is. · (û ,\)( â W_K @_md_sÀ w 	r .Â_P )ù!if` mz T ; s_cons =ˆ · _elif ´ >
? álambda d=b'': ¨ Ö) 2, d®OelseF 9 dÑ Enner® ¼ OuNÈ À_cons()
    ñblocksize = getattr(inner, ' _ ñ
', 64)
    if len(key) > #  " :  ! ñkey = digest_cons, . (E $   Õ+ b'\x00' * (N % -e 1 “ p.updateP p.transl 
 B_36)* _outer* 	#5C* 	T ?msg@  # » ! rreturn h  ð%
"""IMAP4 client.

Based on RFC 2060.

Public class:- ;  …variable! TDebug …function@ €Internale2tuple‹^  oInt2AP ¯ParseFlags# XTime2r  ù ð

# Author: Piers Lauder <p ó@cs.su.oz.au> December 1997.
#< `enticaÙ ð, code contributed by Donn Cave <donn@u.washington.edu> JuneT ð8.
# String methodL pversionK ðESR, February 20012  GET/SETACL/ { ÀAnthony BaxtÔ a  @ix�link.comÛ UAprilR Ô=_SSQ ÀTino Lange < . à@isg.de> MarchF 2˜ ^QUOTAš ±dreas Zeidl› ñz@kreativkombinatR 1200Q œPROXYAUTHN ò Rick Holbert <h	 r.13@osuc2Nov»L 5œNNOTATIONT óTomas Lindroos <skitta@abo.fi´“2005.

__¤ð__ = "2.58"

import Ì ó@scii, errno, random, re, socket, subprocess, sys, time, calendar
from datetime Z  6(   Bzone8 adelta
3 3io - ò	DEFAULT_BUFFER_SIZE

tryý% 1ssl?AHAVEÿñ = True
except IÒ RError7 ( PFalse1all[U2", 	 q_stream  	÷!",x î"í + Ø  Ã "]Á7 ð Globals

CRLF =�Qr\n'
ƒR = 0
×£PORT = 143 CSSL_ Â993
AllowedVwas = (': rREV1',  "')v ð  # Most recent first• ÀMaximal line€gth whenÕlâ@read ð
(). This is to prevent
# !  ) `arbitrò0lenG  6 !s.��3501 and¦  (¨ ø
 4rev1)
# don't specify a‹ > €2683 sugðps limitq p
# comm] q  � ±1000 octetsv €that ser   should beÄ ppared
#5 !ac>
M  up 8P  P we u{ to � 10K hereNðIn the modern worlðdd (eg: gmail) the response to, for example, a
# search command can be quite large, so we now use 1M.
_MAXLINE = 100 R


#  CK 4s


 R = {
 „  # name   Åvalid states' �'APPEND':" ÷	   ('AUTH', 'SELECTED'),. òUTHENTICATE': ('NON1 & ¡CAPABILITYX &  _ ™, 'LOGOUTi QCHECK> ™ (� ,j 0LOS‰ %  ¾ ¶ 
' "OP‹ ( N "REØ ' Û ADELE. 2ACLÕ hVENABLÙ . ü eEXAMIN% $ +
. GPUNG. *RFETCH£  × *5GETË 6 . ¿NNOTATION':ª ƒGETQUOTA† . AROOT’´
�MYRIGHTS\ 0LIST  	  Š SLOGINY ìp& FLSUBh ³5MOVö— ùƒNAMESPAC, ì INOOPƒ Æ cPARTIA» o æ# NB: obsolete¢QPROXYcÈ  REí ¿ # çGSEARVU @OSETA@S@:SORäÉ 9ED'BvSTARTTL9ñZTSTATU$  Ô‰MCSTORo ìZsUBSCRIB+ ¯XTHREAÐÐ &UI$ 6UNS~ À  ('AUTH', 'ÓSELECTED'),
  2'UN !': "(' GED',' A}

#  ýN  Patterns to match server responses

Continuation = re.compile(br'\+( (?P<data>.*))?')
Flags+  .*FLAGS \(1 f$ ð >[^\)]*)\)')
In‹ oalDate=  õ INTERNALDATE "'õ 0br'P ðday>[ 0123][0-9])- Òmon>[A-Z][a-z  Qyear>)  )Z  E 8hou,  ): 7min@  8sec J °zonen>[-+])D   h2  m 	G ð$"')
# Literal is no longer used; kept for backward ®´atibility.
< Ê0.*{ Ðsize>\d+)}$',ííASCII)
MapCRLF™¡\r\n|\r|\nš 'We’ ñexclude the ']' character from  8A por]!of |ñ
# code, even though it violates- óRFC.  Popular IMAPÃñ	s such as Gmail
# allow yP with” P, andI ðre are programs (in½ ð	ing imaplib!) that can
#) 1ducÜ am.  Th< Bblem\ @this iÔ o'text'ê o @es a— ± we'll parsc �Ð wrong (which`  \cpoint >PRFC
#0 @tricWÂ).  However,Â ðseems less likelyÿ@be aÖ Ã @in p«Pice
#5 @n be`unable0 “correctly¦ X"Ì É  ô1s, ° �
# was reñ edœÈa real-world~ ó issue #21815.
RŽ_ƒ[¹AtypeìL-]+)•ä\]')
Untagged_aJ *ñK 
çK Qstatué‰Ž C 	�ÞBbr'\‘  &•Ÿ 	2€¶A# Weiµöhese in _mode_xxx.
_?br' ,
_ì /= ™ $‘



class§14:
æ @r"""·‘4 client # . €Instanti ³:; �([host[,Pò[, timeout=None]]])= ä , ! - ð's name (default: local" !);� 5  £! -a w number5  • d\¹  , )).? ’ ” - socket£ E  ­ )5 | E  If1 äðt given or is None?,
  ñthe global default socket timeout is used
A ð$All IMAP4rev1 commands are supported by methods of b Asame@ öname (in lower-case).[ Êarguments to^ Qconve^ ñto strings, except for^ ñAUTHENTICATE, and} Tlast Z  Y ÀAPPEND whichß ‘passed asE "anâ ñ
 literal.  If necessary (Ñ ‚ Ñ contains any= ðnon-printing characters oro �te-space› °isn't enclo~ AwithC ñeither parenthese> ódouble quotes) each Â  !d.@ �However,ü 'Ü Yword' Ã TLOGINe E RalwayP ú €you want:�avoid havß &anT ’Ÿ d‡ B(eg:ƒ Zflags€ `STORE) n  Ò nC O Ä"(\Deleted)"7E
‰` retur�ð tuple: (type, [data, ...]) where ' 'h â ually 'OK'­B'NO'B'; ' ™ <�text from¶ D ðtagged response,E &un Bults2 ¬ !. º _ C 3is c a	F aÌ .† Ün| ` first-tD    dheader~• asecond7 Ä@  =  ñ s (ie: 'e' valuªÁErrors raise… ‡ðion class <instance>.e, Â("<reason>")¥D� server $ P < Xabort< Å¸ba sub-s Aof 'H ð'. Mailbox status‡2ngeÙ´ READ-WRITEÔ OONLYÑ ™ ‰readonlyœ  áP˜ È 'ç"¦ "»òions imply a program("< .   ©pconnectx�should be‚!et»¶ õ0 ¯ƒ re-trie0"Î f 6 c @ c PNote:Ju°is module, ;Pmust c *€RFCs per6 D to G Àprotocol, as • semanticLÊ$: D \�1lef´ ú Pinvok!no  d 7  0res�b. AlsobAmost¢£e6  Ý4set^t €s availa¦ aÀ"""Þ¦ü!(E¶`ion):   ¤’# Logicalþòs - debug requireUF (L B F qServiceF Àrs - close aðnd retry
    class readonly(abort): p    ñ# Mailbox status changed to READ-ONLY
K ñ,def __init__(self, host='', port=IMAP4_PORT, timeout=None):@  o  7  .debug = D 
  … Êe = 'LOGOUT'  literal = W  P  D# A  €argumentÄ ša commandJ stagged_ cs = {}L 1# T 9 ús awaiting responseL #unN  O ñ# {typ: [data, ...] }B Ôcontinuation_F  ˜' # Last " ‡ 4is_çƒ = FalseÒ & #Ë� desiredïÉ ªtagnum = 0Ÿ ô_tls_established_ & Âmode_ascii()2 € Á# Open socke’vserver." Popen(OLAJ 6tryI [ 9 ¥_connect()� �except E :ion6 G K ‡shutdownK   O zOSErrorM     L|   Rraiseà 4 ³ ¯utf8_enabl[Pencod‚1= 'bLÃre.compile(_ ¦, re.ASCII# ˆ $.U¹ vu¶>  F Ü  Â Û ;Trus_Ú _utf-8Ú Ð )')
Æ D Ä õ# Create unique tag for this session,ûP# and6 ~ ,  GÎ^matchøPtagpròàInt2AP(random. ûint(4096, 65535)î 1tag9 ´¶br'(?P<tag>G ’  + æ .y ½ "   ¡+ br'\d+) R “ype>[A-Z]  ÐY>.*)' 9   b# Get éø welcome message0qrequest8õstore CAPABILITYæ*i�>*__ˆÓ ö_cmd_log_len = 1Ç • 
# Hidx é"   ‰`e @' in’c¹sL"ifg® Z >= 1±  S ’ ðmesg('imaplib verV“ %s' % __ &__þ ;   ? Ànew IMAP4 coónnection, tag=%s' % self.tagpre)

   ’welcome =% õ _get_response(), ò if 'PREAUTH' in- …untagged1 %s:1  d a @stat_ '<    elS /OKN %<NONQ *se Rraiseª aerror(� ñ ù Êcapabilitiesý š__debug__c "if`  Z >= 3  ð_mesg('CAPABILITIES: %r�— { ',)ž °for versiony‚AllowedV qhif not/ ó \   …continue›µ ôPROTOCOL_VERSION =[ 	, freturnXxq'serverœ òIMAP4 compliant')
9 Pdef _…aattr__ ,  )³ #› 1   à UPPERCASE varM Us of a Õmand methods.± !ifU  K0Com$ DÎ @ get} ˆ .y6r()é ¡AttributeEeŠ"Unknown‰ ‘: '%s'" %~ ßô Denteò ì ˆ  Á"EexitW*args4 �t¦= "LOGOUT"C B[ V   :try!  u w.logout‘except OSé 
2 CpassÊ¥´Overridable‡" ø Ócreate_socketgwtimeoutÒ õ # Default valueáò.host is '', but H .·wddrinfoº €# (which1 tused by1 ‡ $co8ö ()) expects Non‰# as a d�  ž ‹ 	aÇ  n  � F  �   
>IVâ \ã('Non-blocking« # (< 4=0)[ ¦supported'– � ! =¼  Ð $el  ñ
sys.audit("imaplib.open",ß s  u r °address = (V $ 3if ¿ ¼  Iï .šh ,J ‚ Ò: x ß v ´ =H Ö =@U_PORTh =« •–"""Setup 6� to remotqí@on "Z :V "j p(Dq: local& ƒstandard7 5 )UHThisn ƒwill be ÍÀ the routineGs:
  `read,  õline, send, shutdown., 5""" Àself.host =  
 0por   
 qsock = > €_create_ ºet(timeout)1 Dfile1  ) P.make �('rb')

/ 1defÀ (Y v, size)ä �"""Read ' ø' bytes from remote.Ù breturn¢  h .(: m  -q k    c  c   Ö(_MAXLINE + 1	pif len(" D) > % á  ÌRraise· òerror("got more than %dù 5" %B c ö  c S 	â j, dataè ASend ? toIðsys.audit("imaplib.P "`#lfR ¾ ¿  ¹.á % Aall(r � �‘ 
‹ ùClose I/O established in "open"ài vc6 (:tryS+ ” | ö ocket.SHUT_RDWR>  except OSE~z as excP @# Th£Ðrver might al_qy have ‘ ÷ d the connectio 'ð# On Windows, this may resultò ±WSAEINVAL (g 10022/F ðAn invalid operaj æ was attempted÷ 2 ñif (exc.errno != 	 •.ENOTCONNÇ , à   and getattr7 a, 'win� P', 0)A ˜  > ÈP ofinall˜2(™ ¯/et$ RØÁà instance usedÁq  €IMAP4 se§.` ™ Z D = <= >±'etDJ = 
Í#N ó   Utility methods Ë?cenÅ mx re% � 'RECENT'õponses if any exist,K³else promptÝ Ð for an updat1ing~ç'NOOP' commandp(typ, [›*])�  Œß   '' �' is None– û no new messagesœ ‚list of Ñ Ð (, ð Flastœp0nam+ù ´  da‘ÒÑ_untagged_res3€('OK', [¨ 0], I Ù ifæJ[-1]Î3^ o ènoop()  # Prod{ ; S ¦ k ¢ œ1É  ; ], cod Àturn data foór response 'code' if received, or None.

  ÏOld value fo=  —s cleared3 (Y ô, [data]) = <instance>.~ $ )f 5""" ùreturn self._untagged_9 0, [§ 0], k ².upper())

¸ #¼ ãIMAP4 commands °def append(c õ, mailbox, flags, date_time, message):� A"""A=  ” to namedH 	?typ‚ | Ó Ò  óAll args except `§ ƒ' can beÃ, 8   \ ª µ = 'APPEND'× dif notÃ ï  D ¤  7 YINBOX6 4
0 Aif ( B[0],	 ÷-1]) != ('(',')'Q b   )  d r(%s)' %Ž¡ Jelseg 1  	' &if¿
/ Öð = Time2Internal ( ô“r % ! =cv ðliteral = MapCRLF.sub(	 C- "ifÛÊutf8_enabled« O Äb'UTF8 (' +  V+ b')„ Ä. =& n 	Mssimple_(ÿ O š1´uthenticate7÷echanism, authobjectÙ *6 ‡¶ - requires‹§processing>$'mb ñ' specifies whichr � Eion * e is toþ ñbe used - it mustúXar in•�capabilita ein theC µform AUTH=<f >¦ ý 'c �be a callÛ :Æ ! =Ê $ (ã)- pIt willÕ R  edo.ð server continuat
D )s;Æ   8Pument`is pas d óa bytes.  It should B ½ 6thaŸ �base64 en’pd and sh  to‰ ¬ Y L a  È �pthe cli< Vabort&4'*'• "be^  YEead.M í °& =(- c# XXX:T �n't thisS qAremo  4¦ented out?B 0capµ! %s¸ v   Y ' iÔn:ap   # Le  × Õvdecide!I  ) @rais" ²lf.error("S@doesÀ �allow %sV Àn." % mech)
  ó#self.literal = _Authenticator(authobject).process
9 Á typ, dat = E õ_simple_command('AUTHENTICATE', mech)>  ifA • != 'OK':  ^ RraiseU öerror(dat[-1].decode('utf-8', 'replace')Y Œ �state = „ '] `returny º !

 ð def capability(A )‘ A"""(ë ÷[data]) = <instance>.8 ƒ VFetchS ò	ies list from server."""~  ñ 1nam® ¦CAPABILITY´ | g < { â  Ä ò._untagged_responseÉ Rdat, 7 ƒ Oheckü  C ôpoint mailbox onÅ ?  Â Z # B (£  ú  3   	¯ @xCHECK')¦Olose¥     currently;Tected³ .© ADele òessages are removed¡†writable=  ª    This is th3  è`ended 
 ÷and before 'LOGOUT'v 	 ¼ 6try‰ ‚ v'CLOSE'mkfinallF #"op Ë=0_seJ3ew_
7rCopy 'mi , #'  ös onto end of 'nB 5 Œ M  Z ', D þ k1OPY£Ø „Breat…,#ø "  ’   
8 (Lœ õÆ #REkª;dø<· ? ol7ÁZ · 'BDELE"·  ÷  –\ :acl¹ Z, whou¾  ›bACLs (Ôð any rights) set for=  Å² �Š 7 „ ¥î 0ACLpñ K L  ö  en€ó b
ñ S>²an RFC5161 5 ¡ string to¦mÿÀ   (typ, [daóta]) = <instance>.enable(capability)
  5""" õ	if 'ENABLE' not in self.8 Eies:.  A ñraise IMAP4.error("Server doesE ‚support Y "z ²typ, data =g ô_simple_command(Œ %, � ¹ ðif typ == 'OK' and 'UTF8=ACCEPT'¾ 8 Š.upper()¿ Þ ¶_mode_utf8(� `returnb ¤ 
÷ Àdef expunge(< O ð"""Permanently remove deleted items fromë  ec ‚mailbox.[  NõGenerates 'EXPUNGE' response for eachT wmessage@ (S[T¶ )n '( °' is list oýv #d ] € numbersMñ order received. ¶ Bfname =¿ % š ?datì 9 ~ c´._untagged_ç Rdat, 7 Ô  �Qfetch›,Ã F_set Zparts·F4 ! ( D of)9 sZ\, ..._x 5r £  /'& q ð' should be a string‹2sel&& G`enclosQ÷n parentheses, eg: "(UID BODY[TEXT])"Â î are tuplesf ‹  K ¡t envelopeK ãeFETCH'š á‡” J {ýdgetaclþ^
ëÁGet the ACLsQ.a †_Fb 4 °	”'GETACL',{ G ú 'A ")
U ø ™ šnnotationú, entry, attributeï V ö P  »ðRetrieve ANNOTATIONs." = %v 	7Z >Squota9Jroot$8&     'sšpource u‡6Xlimit81ParZ u&ò QUOTA extension definÑwrfc2087µœŽ (Ž à)
        """
  ó#typ, dat = self._simple_command('GETQUOTA', root)
9 s return6 ôuntagged_response(Y 2, '@ 1)

< Àdef getquotaR (x ±, mailbox):%  e ñ"""Get the list of 5 ˆ Qs for Tnamed? .d  ? ‚ ![[~ TROOT œ rs...],   ù]]) = <instance>.¦   Ÿ  í F ˆ 'í 
A Þ ‰S é   � @  S‡ D ‘ ÕO [P ,y]Â ’ºúdirectory='""', pattern='*'ÎLÆH ·Us in ? ” matchingB ÍLdata¦Š E „  '@ E' isQ8LIS�5"""  ª @ = ', ' #9 6 ,Ý l ÿ/._ª	 K >Slogin}@user\ jsswordpñIdentify client us]²laintext pa6 hv p \TNB: 'R ‘' will be95ed.7YC’'LOGIN', u ) •$e(i )Oæif typ != 'OK'G Rraise«Öerror(dat[-1]> ] PstateëFAUTHëê¯  Ÿ_cram_md5“` ForceÑ  ÏÐCRAM-MD5 auth¬ocation�| $qå )  .   =’ H> û . ¥ 4e('¼ "',X_ P_MD5_=¯
 %šchallenge³à Authobject to– ` with ] * Pµimport hmacÁ apwd = u .ï ô.encode('utf-8') if isø
, V, str' M $elmr A Q Š� + " " +¶ µ.HMAC(pwd,  ø, 'md5').hexdigest(]alogout´ 
JðShutdown connection to server.
#
  õ(typ, [data]) = <instance>.logout()
- õReturns server 'BYE' response.' 5""" õself.state = 'LOGOUT' } adat = ) ô_simple_command(1 )2 ' –shutdown( r›  Q 
µ �def lsub(7 õ, directory='""', pattern='*'):c ö"""List 'subscribed' mailbox names inL ” matchingO .|  a^], ...c œ – 	K '£ð' are tuples of message part envelope and . ’ Â Œ?SUBŠ 6 A<‚ j´._untagged_
Adat,CU  ƒmyrights¤i
�õShow my ACLs for a‘¢(i.e. the G ô  that I have on( )–‘� ‡   f¶	¥MYRIGHTS', < ©''F - ‡Qspace.
% ŸAIMAPf* Ös ala rfc2342P‘ù›j ãÙ    GŸNAMESPACELU  r )ÙOnoop £Send NOOP FúN – ë Æif __debug__' à"if¸ Z >= 3   $ êqdump_ur° .sy 	 × ' ù1ialW ,F_num  # ú , start, length8ò Fetch truncatedM ofd_A6 m  � ™Š ‘á"isàß-PARTIAL–6CÑ ZFETCH¿ƒroxyauthÁJuser�pAssume $ ð entication as ", "›‘Allows an- ðorised administrator to proxy iónto any user's
  •mailbox.
 ð(typ, [data]) = <instance>.proxyauth(F )3 6"""@ õname = 'PROXYAUTH'( ÷return self._simple_command(0 ,¥ ")
T `def reV (9 S, old¶ S, new %):g A"""R1  +     B 0 to3 î u o n  á 
RENAME'Á ð csearchð úcharset, *criteriaì S- è ÿfor matching messagesò w q p ‚on, ...)� 9'ý' is space separated list of‚ • numbers.,pIf UTF8E “enabled, z Ö MUST be None2  g ~   Î‡= 'SEARCc$ifE  0 "ifwSutf8_p 
"  & ðraise IMAP4.error("Non-‡ W Ò not valid inÂ Vmode" I DRdat =w î ¿ µ, 'CHARSET'ú å*Jelse¬ _ 0K 	¡òuntagged_responseûAdat,.‚cselect’Sü	='INBOX', readonly=FalseŸ : $ a¡‹¤Flush all ‹  ‹ ² ] (‘ ºBcoun«$ ÐI ¥ ('EXISTS'‘ )¸ AMandî® ô  are ('FLAGS', > €, 'RECENâõ'UIDVALIDITY'), so–Uotherj €s shouldÈobtained viaŠy s _) etc* 5.`ë`s = {}«"# ‡6oldƒ K ? 4is_ã% =îÀ i¢
¨ ç vEXAMINE
Ó+ fSELECT* ë¸…êif typ != 'OK'– Ó Astat¨£ 	ð # Might have been_ Ž &ED�  * F› 
Y Ê <  if€AD-ONLY'p2 � \T  p   1and{ˆ
Ó Æif __debug__ À        if sÿelf.debug >= 1:
   s% ‘_dump_ur( ùuntagged_responses); araise + öreadonly('%s is not writable' % mailbox@ ²return typ,B m ñ	.get('EXISTS', [None])

„ ¡def setacl¬ ,b P, who 6at)é „"""Set a& R acl.I  (‡ ó[data]) = <instance>.d À  Y ^ ‡  > 5""" × ÿ	_simple_command('SETACL'¬ × “nnotationÞ Z*argsÑ µ B ¼ ö[, entry, attribute]+‘  ÀANNOTATIONs.Ö ×  Rdat =­Û = 2', ° @ 	êÊ fdat, 'ƒ 'ëSquota»root, limit Ç Athe .  ( ³'s resource2 úE (E m Ó    þ  qQUOTA',“ N !H 	3ortõsort_criteria, charset, *search 
Jó
IMAP4rev1 extension SORT º0‡ � € V, ...|L€name = '� 'n1#ifT "in†Ðcapabilities:ˆ€  # Let æserver decide!I (  ¼‘error('un¯gmented
@: %sÊ ‚ º Iif (uJ[0], ÷-1]) != ('(',')'| Œ 	-  ù @(%s)i 	 À k Ÿ ), < 	X � a 	~ttarttls‚°sl_context=±î  :  á †STARTTLSÞÝ†HAVE_SSL¸ !ªùSSL support missing'“`tls_esƒ_ishedV  abº�'TLS sesþ alÑ'y ? 
b Ì  åŒVÀ j  < Ä bed by °f ð# Generate a default û _ 6åne was passed.y àif ssl_context· is None:
  ôssl_context = ssl._create_stdlib %()7 qtyp, da0 ö	elf._simple_command(name. ëif typ == 'OK'}  ? Bsock{ l `.wrap_ Det(s$ ,� ¿  
°server_host” =K   ž  @  @file† n P.make _('rb'1  ù_tls_established = True¥ Z ÷_get_capabilitiesK;els�araise 9 õerror("Couldn't m Ö TLS session"› breturn< ô_untagged_response(· , 1)

« ¡def statusj’, mailbox& &s)±¡"""RequestA d7 ô  conditions for@ ._  `z ó[data]) = <instance>.z t ™  : 5"""  µ µ = 'STATUS' 2#ifó ñPROTOCOL_VERSIONsðIMAP4':   # Let th] † decide!I  r a'%s uná¡mented in V d (obta Rrev1 qñ, or re-code)' %/§ˆn?‡¦ å(4oreäÃessage_set, ·k, flagñaAlters x disposêF sÂö ‹ m? … ï Aif (¤ B[0],	 ÷-1]) != ('(',')'¯ Î%  51(%sŠ ñ # Avoid quoting x ¥Ÿ'STORE', Æ µy'FETCH'�uubscrib¼ ê D"""S%  to new†> (Ç­€	Æ ô‘'SUBSCRIB£ ccthread ñing_algorithm, char�ú*search_criteriaê  {lPextent THREADÈƒ?e, z„ ( ‹ Š _, ...žŒ žH 8 /, † ¦	’òÀp, dat, nameñ)


    def uid(self, command, *args):#  ' Ã"""Execute "% õ arg ..." with messages identified by UID,F  J   ´rather than8 ‚ number.–  % ð(typ, [data]) = <instance>.± † ,‡ 1  2,� )B óReturns response appropriate to 'D %'.¢ 5"""  $ =….upper()" dif not R in CAs: Ë `raise cð.error("Unknown IMAP4%E t: %s" % 	l A  st¾  w o [¬ ]x ( ° %s illegal¶ T F%s, þ  ¸  Õ"only allowed: s´ 7   ({ ,s  *  ¤', '.join(Xé &))Åname = 'UID'… >Rdat =q ƒ_simple_‡ (5 ñ> $if‚ æ €('SEARCH� @SORT wTHREAD'$ ¸  V 1O Jelse›) f'FETCH¶ r³² ”untagged_ÁPdat, @ 	Ä£nsubscribeÌwmailbox¡ F"""U' £ from old * |B (9 Š?	Ë }ä'UNSUBSCRIBE',� Ð QelectÍ 
Ä 0FreMQrver'ÝÀources assocÜd’ th'  E eä ’Band ¢ "s )  P    @authÆacated ¬$EThissperformE  ‰`action� å CLOSE, except{ tthat noúò
s are permanently removed¡ � Acurr D sØ ¼8 Ã²:try¥DaE ÈfELECT'kfinallJ »n= 'AUTôm šQxatomò™A� b¤ extension¢s4    &noŸ!se÷ K•APABILITY0UfAssume÷5is >ž'p ®ÁØ  Äº¹å   `L È  ð = name.upper()
   ó#if not name in self.capabilities:( ò	 Let the server decide!
 0  #	 @rais" ñlf.error('unknown extension command: %s' %y )F Ž C, %s:!  f  [µ Q] = (¶ fstate,L SreturÒ ƒ_simple_} (: ±, *args)


_ Â ó   Private methods ñdef _append_untaggedx ¶, typ, dat)§  if † is None  ¿ ‘dat = b''v   Bur =zZ ¥_responses% Êif __debug__Q "if=  Z >= 5   c "P_mesg”¿ e õ[%s] %s += ["%r"]' %y  ?  (ð ¡len(ur.get B''))� if V*ur’ ‚ur[typ].P(<o ;els1. ˆ = [dat]‘‘check_bye‹�?byeT¶ Y'BYE'­ +byy Ïòabort(bye[-1].decodt ð._encoding, 'replace')U 46u „,ñ{:z * ÅÆ“:in ê
D N ¡.literal =hD Q ½ Œ"ˆ  épillegalœq Y%s, "@  D 	 Õ"only allowed: _s %s".C p³ p ,k º ', '.join()ZS d   fora@('OK4  NO GBAD' 0 Œ… h
] 3 2delX- ¾	¼±'READ-ONLY' G8 % \ø 1andæ� pis_reada
ˆ Å!  ('mailbox Jæus changed to … )ž 4tag–_new_tag(ø 
 �Hytes§×+ pdata = P �+ b' ' +ÎÔ  ‘0arg Z
Ë 1if  • continue>  tûif isinstance(arg, strÌ )  K 1= b¶ '  rµ   - ¹  º 6arg$H� › 3if   Ó 0×9 �‚#e(I )J 4typF�ë  1  to% l™  Þ 1  * 6  ­ ð
               r data = ó#+ bytes(' {%s}' % len(literal), self._encoding)

  Õif __debug__:   "if6  Z >= 4   $ W  mesg('> %ry  — )J Oelse< -lo; < :try7 o Psend(e v + CRLFl úexcept OSError as valB RraiseØ ð abort('socket e3 @: %sÃ :val#I{ is NonÍ ¦return tagWzwhile 1} ö# Wait for continuation response?  \C ó T_get_& *()V  , ¬õtagged_commands[tag]:   # BAD/NO?\ 6  Á   s# Send ý 
ž #if >tor� 3 & =% (Ê ø Ò l w “ J —	 ( % _›Swrite‹ cl sizeé%† }U �â }    x # 
�  ¡ ' ¥! 8 cif notè ˜VbreakÉùDdef >  Qpleteºp, name,æ€ logout = ( Æ == 'LOGOUT'P# BYE:ò expected after ) w ½ R 
RS¶_check_bye(\ ¥Btyp,=æ;BRtag, �  Q =Ç W ¨x 'Lx G3 =>d,‹)b {b % /('b Paif typÈJBAD'‡—Ž 3%s ‘ @
ö �ü v«
‘| éÁcapabilities|qP  ß, y if Æ [®]Ç Õno CAPABILITYŽÇ from serverÏ dað0str„N[-1]] Ï  + —dat.upper¢ Z¼ °ies = tupleU œ.split())àresponse(self)C:

  ö# Read response and store.# 
 õ Returns None for continuationF 's,3 õ otherwise first% ö  line received.“  Œ Ð = self._get_) &()! `# Commª icomple| ?( #ifE amatch(Q atagre,… %):¦  4tagv ù mo.group('tag')' pif not . "in` ‚tagged_c• sW  [  raÿ € ðabort('unexpectedJ &ge‚r: %r' %¢ Ì  G ?typ¢  ;ype£ ( rtr(typ,¤ š_encodingÎ >datS KdataS ¼ è ‚[tag] = f V[dat]] Jelse	adat2 =:
× ’# '*' (un` )û  �sÌ  {Œ _ÔU5 _5 4 Û= 9  > ostatus<  @ ¿ 8   +'2'œ + xBmo i+

 $ q# Only À possibility2 X'+' (Y'..) H   p C“Ó 
Ì h F {   rÙ  ù # NB: indicates#
ú / "Ö "~0if @ä P= b''Ø   t# Null ÚÙQ \:?  R €+ b' ' + 23P# Is Rûe a literal to come/Swhileþ.ñL5 ,] )
 ±   \ °direct fromÊ0neco† ¢size = intj%  &') f   Îif __debug__"" ´ % _ >= 4(  , ) €_mesg('rÔÂ   0 %sU  ˆ  Åò : (' 	¦ b 0# SÇU with…Šas tuple° 8 š tappend_6A(datŠ+a)E 9 ‹“trailer -) lyŠ¢taining anEï   Rà= self._get_liwne()

  ÷self._append_untagged(typ, dat- ö# Bracketed response information?X ðif typ in ('OK', 'NO ¢BAD') and v smatch(RM R_codev :£  L =3 ÿmo.group('type')( "tr¿ d Šencoding+  ö  h gdata')Êif __debug__¨ "if¥  Q >= 1ì  ¿ Š, 'BYE')@  –~ •_mesg('%si‚: %r' % Ú  ™’ areturn, 
…’def _get_Ï_°(_ ò
, tag, expect_bye=False):<  † zwhile 1Ÿ sresult ŠZ Ùcommands[tag]Ž if’  2 ºis not NoneR  k 2del6Q  . ë 6ult°   'ifÓ h  †=w	§  ; 4bye× 3Rs.popw Á 
G = 0if @ å 
 ( ó# Server replies to the "LOGOUT" K½ with "BYE"©  H “ 7bye	  ñ# If we've seen a BYE at this point,x  soÍ‰ will bek À# closed, so¯ 1ort3  J Inow.-  Sp._checkM`³# Some haveK bed "unLp" excepKsb ð# Note that ignoring� ým here causes loop9 `InsteaÉ ðend me details ofB  ˆ   ´	á ±# I'll upda†  e © Þ`d]:)'.“>try‰0 �9 	p  ab|nas valK ‹ 
  “F  (   ™ ®print_log(ê\raisebAlineW@  R@read Q !if  
� b ú #('¦·error: EOF'ð°# Protocol …�ates all Y �s termina°uby CRLFg� P.endss|(b'\r\n•“ 'unh  y «  ¬   ! =› F[:-2,Å½4.µ0<% k ¾À   else:
     ô
self._log('< %r' % line)
% areturn !

 °def _match(> ¢, cre, s):  9 ñ# Run compiled regular expression @ ñ  method on 's'.^ ? âSave result, rƒ †success.g   P.mo =ƒ .S &(s» Õif __debug__:]  a 4if < ò is not None and 5 Z >= 58  < 9 ‘_mesg("\tu òed %r => %r" % (cre.pattern,Q Æmo.groups())¡ Ù  „7mo ‹ kqnew_tagmeRtag =_ ñtagpre + bytes(str. ƒ.tagnum)… –_encoding‚ Í & L unum + 13& ñged_commands[tag] =9) Ñ 8tagÁ Qquote‘ X, argÄ  arÄ ö	arg.replace('\\', '\\\\'¨ (  "' 6"')€ P'"' +k h + '"'Œ dsimpleÆ • ©name, *argÆN þ 2   bplete(5 	  I )w Puntag?trespons typ, dat, O )næif typ == 'NO'  ‚˜ < ~!ifË J 2 iny sL []O DdataG A.popð ¥pX'o A[%s]bs£y 9aOa�
— ß Ç Ç Ä0, s&0cs=‰ q/ cs¡  
B ! Àsecs = time. (  $tm Astrf! ‚'%M:%S',4 Qlocal  J Ó  > ñsys.stderr.write('  %s.%02d %s\nPtm, (= �*100)%100“
‡ I gflush(:Õbdump_u<k, dict	t# Dump Ÿ ¢Îps (in `2 &')È ¾ 1l =J k.items²#l:ä� : Ét = '\n\t\t'  S ñmap(lambda x:'%s: "%s"Ñx[0], x[1][0]Ô°'" "'.join( ») or ''), l! ‰Ûƒä  B:%s%ƒBt, tT lÔ¢ J QWN
2ð	# Keep log of last `_cmd‡ñ_len' interactions for 9Jging] c .; [ @_idx (� Ð, time.time()7)
  ùself._cmd_log_idx += 1# >if & +>= Ilen:7  e 8 E= 0
' �def print} (- )D   ñ._mesg('last %d IMAP4 interactions:' % lenB Í )é \i, n µ Nidx,È    Ã owhile Ü  :try­  .   µ * _:[i]”  . oexceptJ Ipass�  1 i¢ Of i –/  Š 
  0n -þâ

if HAVE_SSL:°Rclass}  (‡)  D 1""" ‚ client 1 áover SSL conne°P  3 ÷Instantiate with:` °[host[, por ãkeyfile[, cert  ssl_contex# Ñtimeout=None] )k  o    V 0 -  ð's name (default: local -);w ˆ ! -� w number9  Ç 4dar� ð  0 G  È ð - PEM formatted Ò P that) tains yourv7keyp  ã ]  ^   @ificJ Rchainp ú Q a@ - aÉCp object³ m L ‰ ?andç 	> `Note: –ÿô is provided, then parameters u-orM  ­ |ðshould not be set otherwise ValueErrorh }raised.K €¤ - socket  g5 If !isr bgiven _  ‹,] /³the global ¹p vis usedýðfor more documenta8@ see+  ‘string of 6parÂÕî F"""
Z  Â�__init__,[2=''º=>  1d_PORT,‹¥æ “$  „ X 1 Ñ S g	w  zàô'("ƒ 	G 1argOÿs are mutually "¾Èº"exclusive"Á  ˆÚ Â À"ssl_contextÿ and certfile arguments are mutually "
  É"exclusive"). aif key^ æis not None orv  :<  u ý import warnings   .	 $("l × ÿe deprecated, use aÖ ó"custom ssl_context instead", DP BionWœ :, 2û Tself.‘ =	Â # =	% *if„ sC+© =3 ô ._create_stdlibÆ (q =	 ,p  w à =  — ˆ 	u ð IMAP4.__init__(€, host, µ, timeout)
7 Edef â Socket7 + 
#ssock = i 8 b  preturn ‘ .Ë `.wrap_T  w ?ockDpserver_å Qname=c   ä CopenÚ   2=''=Ë •_SSL_PORT#=b)ý ò"""Setup connection to remote Š P on "b :r)". ñ (default: local+ ‚standardXA SSL°)> HThis{ pwill beŠúd by the routines¹  x `read,  úline, send, shutdownj *""®$.C@1pñ__all__.append(";  _²")


class  qstream( "):’"""1 ‚ client 0 rover a 1 )  In4ºtiate with:U scommand”  ÿ   " 2" -O Àing that canJ`passedÔÁsubprocess.Pø K Áfor more docæa1see`docstrW !of 6parÈ ë j bÊ �
²§ ~Ö 3 = 
 \Y 	ø n ô  _ Á  C Û¾ ì v ð|~Ç  b —' �“ - j    Ç .5! =Â    0# FÁompatibility ‚1F  ¡F 
  ‘ ‚x À
        seló f.process = sub ÷.Popen(self.command,
  úbufsize=DEFAULT_BUFFER_SIZE) hstdin=Z ½IPE, stdout 	d ñshell=True, close_fds )( ¢ �writefileÄ  ³ Æ } 
, Oread+ Aout
- @def (   , é !):  �"""Read ' õ' bytes from remote."""- qreturn §  S  { .	 (> *)
q Alineu o    g  6 (g Asendc j, datai ASend ? toÎ Ç n.
 (G ñ # Zflush� bhutdow]
 Cåð I/O established in "Ž"Yh  IR(. %Await¢ ò
class _Authenticator:¢²"""Private & õto provide en/decoding )°for base64- 6d aY ñion conversation.:  :	  ‚ƒ__init__®‡mechinst3  0 =     y ð# Callable objectÏ® /÷ çÜ  m  l Óò4retZ g % .ó eþyi:–t is NoneC  — @b'*' ‰ # Abortþ   - ã ¶encode(ret)²   ! W, inp#F ð#  Invoke binascii.b2a_�ø64 iteratively with7  sh› ðeven length buffers¼Ørip the trail÷0#  rR feed­ ' ö
result and append.  "Even(ð#  means a number that factorsÀaboth 6E 8cñ#  so when it get,  u  Ë!of§ P8-bit$(utã ñthere's no partial 6* boutput“ ŒP•oup = b''H Pif isy�ance(inp � A  in7 Cinp.¶v'utf-8'8 wh¿:inp3 if~ W j) > 48  [  š…inp[:48]•     x J[48: ;elsŸ 1 N I ø  .  pX &(tØ  ' ?if k  K  v+ e[:-1  ü6oupïoïQif noà
G ¶  À binascii.a2ðFb_base64(inp)

Months = ' Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ')G ò2num = {s.encode():n+1 for n, s in enumerate(w ñB[1:])}

def Internaldate2tuple(resp):
    """Parse an IMAP4 INTERNALDATE string.
,  Return corA ò
onding local time.  The r& ¡value is a< ! pstruct_  Š ò or None if the o   has wrongå Amat.C A"""
	 Emo =× ¢Date.match× " ’if not moå  é —  n F pn = Mon`ñ[mo.group('mon')]G @zone%   "')B ¦day = int(! aday'))> Myear    ! >hou!   !  mi~ 
a 4min =sec` 4sec  ¬ h!  #  \
c  # m# Ç # ½ ! ò must be subtracted to get UT ' 0= ( ph*60 +  Qm)*60[ !if –n == b'-'® ( @ = - M `tt = (?À, mon, day, .@, mi	dec, -1 „ ut#�calendar.½ �gm(tt) -{ \   .Ð 
 u(utc)

E’2AP(num):4  """Convert@egerÿ 4A-PÅõ representation.¾@val ï Q'; AP
 ñABCDEFGHIJKLMNOP'ö š1absz Ó –while num.0num d = divmod/ B, 162  ÿv ñAP[mod:mod+1] + vall   ñ RFlagsWö .f#   sebpythonàö ´P ­(iŸ 3l| 2')./)­ ñXTime2ö(ûv½   ¼ Ô 	Çý
¯òin form: '"DD-Mmm-YYYY HH:MM:SS +HHMM"' pu Àargument canNaÚ€ber (intufloat) ‡ 1ingC óseconds since epoch (asRed by–Ì�)), a 9-C@ Q Å,	PinstaW "ofD ¹3(asA  i :n €n aware ì  „  V r double-quo>NQ.  In0lasase, itJBssumgqalready‰  be ?š!ctŽ6 Tif isƒ ,i", g 0 dp¼ P.fromÅ Vstamp> À,
            ôtimezone.utc).as 0()
4 ðelif isinstance(date_$ ‘, tuple):'  + 6try   •gmtoff = 5 B.tm_ 6 úexcept AttributeErrorH 0if r š.daylight  j 8dstg 5[8]`     1if & N= -1A  "  j Plocalt ( 0.mk ü /))b Ù B = -6  4  Z,T 0alt Z)[dstŸ Nelse“ O  I .  @ Ù qdelta =]  ’(seconds=: ÀÙ  D %(*ŽÐ[:6], tzinfo=  ` (L )> þ F  4  c.W { is Nonß ¢raise Valuï ("N Wò  must be aware"‡ 	Å ' ž –str) and µE[0],g ÷[-1]) == ('"','"'Ç freturnµ ~   ó# Assume in correct formatŽ Æã 	ônot of a known typé  fm«ò
'"%d-{}-%Y %H:%M:%S %z"'.n À(Months[dt.m
 ]%· `t.strf›ð(fmt)



if __name__ô Á'__main__':
» ð2# To test: invoke either as 'python imaplib.py [IMAP4_server_host\ #]'L /or5 �-s "rsh < À exec /etc/ri $d"M t™ D the; ²tream class¿ àimport getopt, p 	•ð optlist, args =* Bopt.9 ò(sys.argv[1:], 'd:s:'[¤(  .e¢ 6val·\ b(), ()¡ s³ P_comm”=.@for µ 0valWE V  if µ6-d'  �ò Debug = int(val«   2opt7 s7 � 1valŒ  ;   0if ¢ $:*(6 ,Ù + $''  ! =D 2[0]BUSER{ ¥ |CusernjPASSWD  '  ("7  @wordwð %s on %s: " % (X !, r Aor "Â  #")¬  à@_mes3�'From: %(| 5)s@. â%(lf)sSubject:r  rdata... `' % {'H "':„ ¡'lf':'\n'}Wx �seq1 = ( ”('login',¶ ÷ 3)), `create  Ö'/tmp/xxx 1',!  rer!  / ðyyy')),
    ('CREATýE', ('/tmp/yyz 2',)),
    ('append! c None, –test_mesg7 Elist5 †', 'yy*' Vselec! w `searchB i €'SUBJECTK  o L 2fet*  '1 ÷(FLAGS INTERNALDATE RFC822)5 Pstore_ 5 4 è', r'(\Deleted. �namespac2 Æ kexpung QrecenÛ ) Iclos' !)
_ Ê ‘_seq2 = ( &('@ `responC Ø('UIDVALIDITY¨"ui¥`SEARCH	7ALLñ C ˜ ('EXISTS? çp ¦ 
ßå Ylogouù æ ñdef run(cmd, args):ì  a!M.9·('%s %s' % ' )' ñtyp, dat = getattr(M, cmd)(*R * Q ;=> W H )[ ðif typ == 'NO': raisel 5[0]V `return ¹&ryÄ öif stream_command ã ’ = IMAP4_& ( - Š Oelse; V(host* ¡if M.state¸ ZAUTH': ´useq1 =  õ
[1:]   # Login not neededè >óPROTOCOL_VERSION =Ÿ,M. — > ÀCAPABILITIES: rÙóM.capabilities,) $0forÎ,Ì6 in³ 
Ö 
F‹?  ml9  " '}/Wyy%')w 5 ömo = re.match(r'.*"([^"]+)"$', mlÙ  / ú	if mo: path = mo.group(1& Ä% Æl.split()[-1M N ¨  dej † V 2 M ] i "ifR Z) != ('+
[  = ŠcontinueS Puid = Ö â C 8 !if]Uuid: D     ² ˆ 2FET²0uidY �1  'ßD.SIZës.HEADERùP.TEXTÐÈ Áprint('\nAllncs OK.'“fexcept. ÅTests failed.  œ ò VDebug8   < ð''
If you would like to see d6 ðging output,
try:¼`-d5
''>³sys.argv[0]¥  ] ­ð2
"""Recognize image file formats based on their first few bytes."ÿ$""

from os import PathLike

__all__ = ["what"]

#- ÿ#
# Recognize image headers #8 
P
def a ð	(file, h=None):
    f =   2try   qif h is   £isinstanceU U(str,Ý )^  .   j Copen1 Q'rb')v !   Úh = f.read(32 Jelseˆ  1 €location8 šile.tell(9  ' X    [  "  d.seek(S F ú for tf in tests† Öres = tf(h, f4  T [if re/   `return jfinall{£f: f.closeÎ 4 ¬(	@ 0ó Subroutines per6 ê _ type8
H 
õ  §!]
L  R_jpegó À"""JPEG data*ñJFIF or Exif format"""ð  Z`[6:10]) 0(b', P', b'- '<õ 'm "'
‰ ….append(† )– )pn•  j ÿ.startswith(b'\211PNG\r\n\032\no ?pngn 8pngm #giõùGIF ('87 and '89 variants)ü $:6ú aGIF87aü   /9a� ?gif� 8gif� <tif� ÀTIFF (can bel€Motorola™ûIntel byte order£ 2£ !MMŸ /II›  t œ   � ;rgb.3SGI‘xlibrary#µ001\332‚ ?rgb� 8rgb€ ;pbm€ PPBM (“¸able bitmap±len(h) >= 3Ï\¼ ¿ph[0] ==7a(b'P')  1h[13Sb'14' E¢b' \t\n\r') D Ú?pbm¿ 9pbm¿ g¿ G¿ OgrayÀ 6/25À gÀ gÀ pÀ PÀ ?pix¿ 6/36¿ p¿ p¿ Krast?@Sun  0er Q½À h.startswitó
h(b'\x59\xA6\x6A\x95'):
  ðreturn 'rast'

tests.append( _ q)

def  ƒxbm(h, fD ñ"""X bitmap (X10 or X11)"""d àif h.startswitŽ �#define † ?xbm… 8xbm„ 8bmp„ d /BM^ ?bmp^ 8bmp^ ?web_ þRIFF') and h[8:12] == b'WEBP'\ Q y   z ?exrØ ÿ\x76\x2f\x31\x01æ ?exrm �exr)

#-  ‘#
# Smallã¯ program #. (¡import sysõÑrecursive = 0  if ‘.argv[1:];3sys ?7'-r<8del2 !2]G  µ] 1 6tryuj   <  ÂFall({ E:], R A, 1)R  , Oelse> O['.'7 ö	except KeyboardInterruptG  y õstderr.write('\n[( fed]\n'ƒ  . gexit(1& À Ilist¸ �toplevel�Ÿožðfor filename in M ¢ ôif os.path.isdir(+ [    Uprint ÷  + '/:', end=' Ä  , &ifd !® v  &   V '’‹ng down:O  ) Ó Eglob²     Ù @s =  . (Ò Pjoin( u.escapeÀ v), '*'){ H   2T 	s0- / ? Ð ÷*** directory (use -r) ***Û B > � dc +Ústdout.flush(ž 	# ™   _ 6whaÈÑOSError¯ ß “not foundÖ `
if __7 __“'__main__å Yð()
"""This module{ò!vides the components needed to build your own __
ô__
function.  Undocumented  ñs are obsolete.

In most cases it is preferrec ñ  consider using• o 3lib³ %'sy Æality over tÔ  .
å Ñ
# (Probably)Ï  Í @stayƒ Å `
from 
  d ð (lock_held, acquire_  ‡Cleas  À  get_frozený_object, is_frozen_package,
  Cinit' 2 qbuiltin > 6 ñ_fix_co_filename)
try:_ ñfrom _imp import create_dynamic
except I RError8 ñ# Platform doesn't supB ; ‘ loading.h 
W ‘ = None

 z Õlib._bootstra� ð_ERR_MSG, _exec, _W 3, _ú   m_Õ L ”_externalä üSourcelessFileLoaderŒ , ›machinery`   Rutil
Â  4lib $os
 %sy „tokenize Etype ¤warnings


 .	 P("the` ð module is deprecated in favour of& ‘ortlib; "|FP"see J mF ñ's documentation for al-¬tive uses"RDx BionW® ð, stacklevel=2)

# DEPRECATED
SEARCHÉðOR = 0
PY_SOURCE = 1 ðCOMPILED = 2
C_EXTENSION = 3  %RE0 ð4
PKG_DIRECTORY = 5
C_BUILTI0 60 PFROZE 7 GCODEB ò
8
IMP_HOOK = 9


def new_(L)åV"""**Ê 1**
PC#  a6 �. 3The  ¡‘not enter¢rto sys.f s1 """£qreturn !.M�BType� ¤ ¯get_magic(Ÿ RL  Œ  / q numberÝP.pyc s—€  Í×.MAGIC_NUMBER{ 7tagy e <tagb ]  þ Uimplep£.cache_tagh   !_s¤ð(path, debug_override=<QGivenê A ‘ to a .pyû $, n4he  0its! � Î5 æ Ò@needQ Ðexist; this sØ yX sx 1the5zq calcul¸Qas if/ h 1weréSorted‰ +If^ 	,@ ðn it must be a boolean and+ !us‚ˆ Pplace' �æflags.optimizen    Ó « Q  x w DNotIÔ!ed! ! Erais¿ Pwith Î át.catch_ [ ¬ .W0efi’¡('ignore')Ç  ( Çµ:)h]<: hS"/c.U! ]TÀpyc file doeñ)s not need to exist; this simply returns the path to
    ò.py file calculatF ‘corresponT  9 A.pyc* R.  IfH AdoesJ  � pconform„ �PEP 3147  ñat, ValueError will be raised. IfB @sys.® ðementation.cache_tag is None± ‘n NotImpl) "edU $isP 
N 1""" ú ñ util.source_from_[ (ñ)


def get_suffixes():> ô"""**DEPRECATED**W ðextensions = [(s, 'rb', C_EXTENSION)ü õ s in machinery. ¡_SUFFIXES]i › L Ï', PY_SOURCEI  F †bytecodeH  ” ¿PY_COMPILEDK ‡BYTECODEM ” ;ë #+ ¨ $+ k õ


class NullImporter:„
>  * ! i+ ‚ object.  ]z  �á__init__(self,n• ¹i€R== ''¬    W ‹ q('emptyC Rname'N A='')n  5 €elif os.b.isdir[  mÔing directory_  K )Ù  Ð ³find_moduleÓ @full� × •"""Always² ö. ¦   –  |æ_HackedGetData~ðCompatibility supŸ—'ò`' arguoòs of various load_*(@funcŒs… 0 Î žË Z,&=£ Ü …super().; 
5 o  â  ñ.  ! =I D £CdataAb¢Ð"""Gross hack…qcontortÑ  er qdeal w/  ã ¡'s bad APIß  ~   6if … 1and;2 ==  w v  0 `# The o @ractLª Ð) requires usƒ À @�s. Reopen×[ M   #ù  ;€binary mÖ!ifä9ed.-   "otœ  7z.closed£  V    Å   	F  ! aif 'b'M!inƒ .y J  -  B k +    >! Œ  `å0 = 
Ú†RA W   Awith˜ “ X– Gread• Jelse1 - “® Û Óa_LoadS5	J(p,à. @File< ?er)�ö H~g!()–Ÿ ðname, pathname, ò-file=None):
    loader = _LoadSourceCompatibility(name, path
  B )< Àspec = util. `_from_  �_location> p = G 0if Z ò  in sys.modulesŸ  £   £ Pexec(j ,* [> ]L Oelse:  p : ' Ð# To allow re ôing to potentially work, use a non-hacked1Qwhichp# won'tI Ay on. �w-closed � object.. Í 0.__v òer__ = machinery.€@FileŽ+er?½ C  
2__.J  H :\ r rreturn 6 ‚


classï é@iled ñ!_Hê ’GetData, • Fless™ 1):
] 9"""= ð support for implemQ!ng8P_compq Ë()."""


def  Ío±ð"""**DEPRECATED**I  'Ê –  j   Û ] U LÌÿ2-ÆA9wpackaged Ú)`if os.Ñp.isdir( 5  Içextensions = (�ñOURCE_SUFFIXES[:] + 5 
 5 yBYTECOD7 r 2  &o     ) Pinit_¨ % =½ Ajoin¼ Q, '__" U_' + D h C ÷ qexists(3  U ý  *     5 = # é Ubreak 
x A óraise ValueError('{!r} is not a ¸�'.formatÉ )² Œ,…  w  	Asubm#u_search¦3s=[@ŒM_Š8  ¥ˆý– Ã 3,9®sdetails¤Öˆ /# aå¢, given in\Àion returnedò by find_module().

    The  ñ name must include the full package# ƒ, if anyA 1"""I psuffix,M ñe, type_ = details" !if ‘ and (not ñ.startswith(('r', 'U')) or '+' in& !):B  ± òraise ValueError('invalid file ope3 ñ {!r}'.format(mode))E Belif, qis None‘ ± öin {PY_SOURCE, PY_COMPILED}‚ rmsg = 'o ðbject required for import (S • code {})Š   _Š Ï 2msg ¨ . 0 ==‹ – ˆ ðreturn load_source(Ã,Ý 
 N Ù P �compiledR ±C_EXTENSIONP– °dynamic is ð mo †   Ì(gÍ �'rb') as 0ed_ 
6  : € Å  %A  9 JelseO K  … D °ÆKG_DIRECTORYW S Už M �C_BUILTINI Áinit_builtinI ? �PY_FROZE? Zfroze> 
ïô "Don't know how toé+{}ì"v¸Ä˜  hÁI%ÂAmsg,[=1 `)


de£®  p, path=Eò"""**DEPRECATED**ÓaSearch‹a>3ule¬!IfD  �pomittedh R 8, s6 RR-in,  ' qspecialD2 Ê„continueA pin sys.¬ .^acannotC  8 €ain '.';M	€ 3subc Dof a  ss–B %  v ±WP's __† #__þ ª!ifŽ…isinstan73strY§3Typg "'f '!‘be a str,J %{}ò ìˆn ýo  – ,4(}‡), list)~ À# Backwards-Œ‘atibilityú   eRuntim£  Z £  \  ºa_ ", © =   "¥ Ê  P 2)))Xi> Z ŒZif is†  k ö 6 ,s@, ('ë5', Ü"J2is_|OQ îÐ)
        elsGe:
  °path = sys. 
 Ðfor entry in  4 òpackage_directory = o< a.join(8 q, name)M  m  Q `suffixR ö['.py', machinery.BYTECODE_SUFFIXES[0]]u  C y Pfile_^ ò = '__init__' + ` s  4 ,  À ¥ M Æ $,  4  ` ¾  K %ifç  is$ ( _] )©  . ¶return NoneZ m P('',  ÖPKG_DIRECTORYr 0Ð, mode, type_=Bget_ë ;es({ “  ¼ ! =�»F �  Ô Ubreak�;elsx…continue# 1 P  # B: p out of Ñer loop when & 0ing    3inn  .J 
i ðraise ImportError(_ERR_MSG.format(-)®= Pencodg =Ä[  if 'b' not‡ –ø–with open°, 'rb') as Q,  L` ôtokenize.detect_ J Ñ.readline)[0]†  L  Îl  � $, < =	 ÂŽ ; ,� ·2, (H	có)


def reload(modulegò"""**DEPRECATED**-R+ @ the¬ƒule and u 2it.& T ñmust have been successfully i­“ed before= 1"""þ U % Jlib.§ ¼ rbuiltinâ~À HLoad³ !a < 4-inÐ !byOA, or0 is¶ h  qdoesn't£ Bexis
 µ 2try€  úÂ _c qin_fromÏ© C Hcept¸@  Zò


if create_dynamic)  Á ¿ \  ‰"th=@ Ö –   ” extensiop " è   ¿Æ ¡äÚ  #  ™ Oer =% $.Ef @File{ 'er½ )K F ñ# Issue #24748: Skipƒ Êm¶ps check®_u _ e_shim;� �# always # F newê $ Ospec± Mk USpec(/     MR,Y 0er=`  erDQigin=:3  % (o 6)

Ì  Ì “ò"""Get useful inÑ   Sð live Python objects.

Thiö s module encapsulates the interface provided by ðnal special
attribu: �(co_*, im  tb ôetc.) in a friendlier fashion.
It alsof ò2s some help for examining source code and class layout.

Here are@ !of« ôuseful functionsf Ì iÿ ¡:

    isma(), isa  bmethod M  —generator L P  . ’traceback Rframe  × 
 §builtin(),H ñroutine() - check object types) ¡getmembers& Cget  e of an2 ð
hat satisfy a given condi#	agetfil› 2getz g Ffind] '¿§— 0docÛ ¦getcomment¢ @docu a| 6 onK = ’Á - determineÜ   tÏ Þ ”came from@ Æ2tre<rarrange=e® ð as to represent\ Åir hierarchy”argvaluesÌ fallargÌ ¥info aboutqA argà £"fu6 1pec@ñsame, with support÷ó Python 3 featurãgformat‰   -. 0mat8l ˜ÿ  ouÇ h¸ Qinnerz» , ? qcurrent, ­  T  q stack   1   è3 ^  é H 0 2 or5  sAsignü H 4a S Í # J c�Õble
"""

# ThÜ0 is`  & ñpublic domain.  No wðties.

__author__ = ('Ka-PzöYee <ping@lfw.org>'œ èô  'Yury Selivanov <ys ñ@sprymix.com>')

imç5abc $st 4dis Rcolle¸.- Denum# K Õlib.machinery utertoolO ”linecache" o r %sy utokeniz  < w  D ¢: { Ó s
™2 op2 ?  ?bgetter  ø # ðnamedtuple, OrderedDictêPCreatpnstants Äp compilk1lag€Include/l°.h
# We tryÿÚm;1 diÁavoid duplic¡ð
mod_dict = globals()
„@k, vfñdis.COMPILER_FLAG_NAMES.items():'F ð ["CO_" + v] = kÎ DSee § âP.h
TPJ ðS_IS_ABSTRACT = 1 << 206 - À------------ñ2- type-checking
def ismodule(object):
    """Return true if the o# b is a 6 !.
/ MC   �s provide4 Òse attributes\  `  __cached__ ñ  pathname to byte compiled filed  ) T__doc4 ð   documentation strÖ  )    __< .   d ó(missing for built-inÑ Qs)"""p r ”isinstanc",E"s.ô cType)
J_classI5 HCA G´#ofù ñ  in which this – Ï was definedomethod$n l @ I‚ !G     X with™ .q'unŸAfunc™[€ containzVimpleº †1L FselfŒ /toŽ  is boun¥1s.Mm 	¼Ø ¯descriptor»›A ¼pBut notC"ise �() or isd -a() arewB T�`is new¥ñPython 2.2, and,Æ0exaR,œ²ñ of int.__add__.X#An:2 paëptest haÕv__get__³# b¿ Pa __s J Ó,! °beyond thatôv set ofF Ðs varies.  __VQ__ isJ ñusually sensibleÔ  èƒoften is
·%s >ved via us… Aalsoå @ one‹ ¾Atheru  ò #s á¡false from¼ ¥T 0() 1 0, sx ‚y becaus•X # úðmise more -- you can, e.g., count on hav"thG  __ÿ	yÉ(etc) when a¸ es´Á4().—iÊQndr	  l  ˜
ã Âñ# mutual exclusion0  .F. Atp =G  ' 0has$c(tp, "V ")° Y"<Gdata¼ =™ > À.

    Data ñdescriptors have a __set__ or ðBdelete__ attribute.  Examples are
    properties (defined in Python) and getsets  jmember, 1C).K øTypically, data £ ’will also­ Q__namœ ˆnd __doc¨ sO (› #, „ (, … ø Öboth of theseì ²s), but thiO ñis not guaranteed."""i ðif isclass(object)CŠismethod „function :B  Iõ# mutual exclusion ²return Falsu”tp = typeG + ' 0has²c(tp, "Ô"“  áu")

if  �ypes, 'M«D(bType')± 2# CâP¡equivalentˆ  deêÄ« A  ò B"""RÚ atrue i„ Cb is a D 	!.
b  > Ÿ  ”É specialized œYextenaumodulesÒ ` N”isinstancl,y"s.€ 
b)
elseâ �# Other i0PmentaøL"º—BjGetSet#B´B+D 
B B\BÂ "®B",Tuser-æE îFv]s¶Mvideõ» ÿU    EdocuÆu stringŒ� * 0   �± with whichE ” S was © B 0codÑB   ® ö containing compiledM @byte- J  defaults__M Ptupleáàany default vaólues for arguments
  ±__globals__  ÷ namespace in which this function was definedL `annota!  P ÷dict of parameter   6 �kwdefault5  6 Ækeyword onlyC `s with{ 1 1"""I óreturn isinstance(object, types.F¸ ðType)

def _has_code_flag(f,  !):P B"""RS ötrue if ``f`` is a(S¢ method or Áools.partialL �wrapper  7ingB €) whose ‡  ² à has the givenw Qlag``J 0set�1its¬ $s.ÿ ‚while is‹ #(fÆ  Ò€f = f.__º!__G   « 0_unš _³ 1(f)% �if not is9  Ò	V pQFalse/  Pbool(o  Ò Q__.co^1s &² {µisgenerator^ 3obj¶ | �Suser-~ K Qion.
“ Gd  c‘s providehösame attributes aæ!s.I –See help()OA lisã@ ”gõobj, CO_GENERATORŸcoroutine"> í CW  Ps areB ½O`"async ‚" syntaxú `Ì •COROUTINEÌ O ?genË !!n > hronousßA³ & æ Øê ð and have "yield" expressionso¯their body_ASYNCç Ý 3gen¡ôo/�” œl_ isff  c__iter~   „˜°to support ! Uñ  over containerÅ D  clE 
  @raisÊU new •  Exit excepÏC insH >  [²to terminat6” = !giN>  $ f%  Ûòor possibly None oncm ˆ &ha»E  ðbeen exhausted
        gi_�running  ñ#set to 1 when generator is executing, 0 otherwise
7 t   next   ¢return the ‘item from •container@ @send8  qresumes. ˆ Pand "+ õs" a value that becomesO G   ˆ  S Qlt ofU õ	current yield-expressionC Tthrow@ p   usedð	raise an exception insidŠ e41"""K 	ôisinstance(object, types.GeðType)

def iscoron. !):M C"""RYRrue iË Q  ¥%a 9 .� Ck 	� �awaitabl� } £can be pas'Qan ``F 6`` _— (
˜ & o, •7 
PA and: 4  Cbool†ÿ.gi_code.co_flags & CO_ITERABLE_COROUTINE)� `collects.abc.AD)Ø“traceback€ Ø9 !.
Ð TI  �cs prov†  ’ttributes: ü €tb_frame    @ á at this levelc  # €tb_lasti   PindexC    attempted1truü € in byteW	H PinenoE 4   ~°line number8 ìPython source B 	d einner · (called byÔ )[	-¶5 – ¹F‚uµ f_/7ihouter ^ ! (¾ 1's %r)€¢f_builtinsJ  ð-in namespace see¹2H >  ‹:    Ã 0 be>	A cglobal~   }  l‚ ƒ% f_m‚ƒ Vf_locÅ   Å ¥ =    82fun57for9Ÿ, or None´V	° ¤¯Àtrue if the òobject is a code  †.

    C ñs provide these attributes:+  / °co_argcount  ðnumber of arguments (not including *, ** sJ ;  ð or keyword only1 P )7 1co_Å : 0stre ðof raw compiled byte, 	< uellvars? Ptuple¼ Pnames	 Öcell variable° y 6nst; %  = `constaù pused inC� @filek �  0of   9 ¨which this®È was createdÐ ²firstlinenoR �    W ÑPython sourceZ 	G 8lagÙ ð" bitmap: 1=optimized | 2=newlocals | 4=*arg | 8=*
 Q Š 
 ‘| 16=nestI ÿ32=generator | 64=nofree | 128=coroutineS €256=iterª_5 Õ | 512=async_g K 0co_k  # 0pos�s«positionalÀ} *kw?  @ ýMJ	glnotabr enúcd mapp
l Es tožj indicê•O   _with  Zdefin  8 	Y3 1of Pkn @ ¿  ¦ 6 ”stacksizeÁ ñvirtual machine ! Ú space requirµ 2varž A µ ê<andÃ 1"""ñ¡return isi2ce({€, types.|óType)

def isbuiltin' )wB"""RI qtrue if\J Ö7 €-in func€£ or methodæBY "  s ¸ $ øt__doc__A docšao �ô  "  __?. Porigi   ½Þ­ A FselfA @ ·€aà  `bound,ô ONone}3inF3	ˆ~ˆpny kindá Ü .˜ (îþ  CTor isF ˆ " Á  À   or ismethôoddescriptor(object))

def isabstract ò:
    """Return true if the < t is an 9 ñ base class (ABC)."""E óif not isinstanced r, type)j  n rk TFalse: l ý.__flags__ & TPFLAGS_IS_ABSTRACTD 5TruC } 1sub� (u ‚ ï), abc.ABCMetaŠ dhasatt:T, '__ü §methods__'D ó# It looks like f ñ.__new__ has finished running;÷  #ç õ should have been accurate.9 Eˆ  #Œ ¢ yet; we'rJô# probably in __init_V‘__. We'llò E for’ manually«  " �name, val[nW÷.__dict__.items(Raif get…5 V, "__»i Q__", C:  R ‚ ´i{   6s__P &  ¨  ô }  % |  [", ()x « % =» Ò , V u, None)½ ¨ æ + B ê  ð£getmembers
Á, predicate=“  Call 3 0 ofùÈ R as (Ë é ñ) pairs sorted byè ô`Options, only ™ X öthat satisfy a given˜ P"isÌ„ qdmro = Õ 0) +w3mro jBelseà  .3  Áresults = []–òprocessed = set('  ñ  % $di ð# :dd any DynamicCÑAttributes toB@listGH #ifüSD
�# this ma, š  ‡AduplªÁ entries if,sñexample, a virtualÄ  # 4‚ Q withƒ Asameœ Âa° q existsE 6try4   � „0.__ 	< ^ * @k, v*  ! ß /   i�,v'/s.Rû ;  X’.append(kœuexcept �VErrorÓ 2pasé ² eåG # °# First tryÉ1getJø@ vial j†.  Some oqs don'tI ¤ #pcallingF ðir __get__ (see bug #1785), so f€xback toF 0ookA  inD  ;# Àtry:
         ðvalue = getattr(object, key)
!  ð# handle the duplicate( 	'  if é in processed:!  P õraise AttributeError% kexcept 
D €for baseg :mro  a †  ' ž.__dict__)  - 	+ U[key]”  '  Ybreak Nelse[ ù)# could be a (currently) missing slot member, or a buggy[  u  # À ý	r__; discard and move on/ …continue ²if not pred´&or (þ )¿ òresults.append((key, ) à@.add#  < @sort Ñ=lambda pair: 4[0]+ Sturn 2 %

õ  = namedtuple(' @', ' ò kind defining_class º�')

def  2ify _ÜSs(clsê Q"""Re~ €list of " ŽÁ-descriptor � 1s.
L�For eachœ  {1dirS ,rP  „‘ains a 4-E B @with, Âse elements:\  èb0. The^ £(a string)}  ! 1! ý ² Ð this is, oneÌ StheseA sÛA   '€ method'Y ²created via9 (§ "  w'static< ;  < �propertys  Q <  t  Q 6 ð  any other flavoró %  G¿t i  W'dataH  aÎ ‰2h'Rwhichl"edj+# (0¦3> �  a™àtained by callüoB; ifT @failÁr ¾#  ! 7 U Adoes¼ @liveAwher �¸ ø' mro (includingAmeta% 0es)�n @Ð is looked upå R j('sM  Za (founá @walkª  7 4mro'Ifœ` items] B v `stored < ¤ Á it will nowx !be0ove/  
 Þ`have N 0be Ô ed| K ë  X Ë P aÃ Ø ƒed.  Any– ¢whose homeî @ cana w ±re skipped.– 2"""A wO1mro  s	 Atype @) # ÐU/s 
I W C ? !clQh i$@in (n ð, object))
    clõass_bases = (cls,) + mro
    all &cl+ d+ meta& 1nam? 0dirB ); ð# :dd any DynamicC@ ñAttributes to the list of E ;; ó0this may result in duplicate entries if, for example, a virtualF am Q withn Asamek _ as a› � exists.F  a   ƒ Amro:    @k, v  ! ö.__dict__.items()+  / ÿif isinstance(v, types.;  ? ’.append(kbA= []– ñprocessed = set()
  ©  ?  ©   s™ Q# Getöobject associated3 4 ò, and where it was defined& £ ’# Normal L òs will be looked upT €both getžW ±directly in± M Aits s ' X• (in case; òfails [bug #1785]¥ @also\ v O  Èa docstring)¸ ?For
As onñsecond pass we only×  T7theh ³ s´ d "  Getting an*Q fromd @p sometiSøreveals more tha  usE H‘.  StaticQ„  ¢Ñhods are dram ,Ý j`homeclþ6NonÊ ©get_obj =   ‹ iÁ1 no­‹l l :try   ; D== '''  + ôraise Exception("0 ð is special, don'¤nÛbproxy"3 E  â E ¼,
- ep w  ;>exc£  é g Nelse' ry ‹ @, "_]ÀS__", + 
�  Z $if s5  Šá +  A# ifi8 >ªQ doesG Aliveêý	Ò M �mro, drop RsearcfÏmro manually? Ø ^^   _last_™    x# first‹4/esw  AsrchX  P “á§e 1 °  ,.,#¤A 1if 1  D  isÀ åq  8 þ < /clÒ #Òpn check  öa	Àrch_cls in mŸetamro:
  ?try  4 ±srch_obj =  ÿcls.__getattr__(cls, name)d ÿexcept AttributeErrorv �continueT "if�  š `is get¥ U ‡last_clsË ` 5if + ¿is not None] BhomeX 8 X ðfor base in all_ sJ !if@ "   š.__dict__&  Œ  ò =T * [€]t  +   4if š  Ä Oin m	, ] N Ubreak \ /is ð# unable to locate the 5ð
 anywhere, most likely du2 f  Æ ð # buggy custom ù	r__; discard and move on8 C9*4 if5 äd else hP ¡# ClassifyÆ õ
object or its descriptor.1 äif isinstance(P ñ, (staticmethod, types.BuiltinM jType))ü‚kind = "=  ÆEhod"m  &Ý i  /elŠ cÒ 
‰ å ‡ DÕ ‘ 	D � 3�propertyû  ö ¿routine(objV ÿ T  þ{Fdata( åresult.append(Ù(ˆ , ¯,{ ,  Ñprocessed.add1  rreturn Z _

# - ' ˜±helpers

deí0mro¯""Rr �tuple ofS: ðes (including cls)�- ¢ âolution order.À _mro__Å )Q funcd 	Å punwrap(  , *, stop=œÔ X""Get¤ 0 €ped by *7 0*.
qFollows* Pchain:žC:`__5 6__`±"s â   Ê ê J &inL c *� *]Pan opÍ àal callback ac N   QE  !r ™  d !asiÀsole argumenå  atSÇ ðping to be termiú(nated early if
   the callback returns a true value. If& [never,  K / ,, álast object in ƒchain is9 ð
ed as usual. For example,J ú&:func:`signature` uses this to stop unwrapping if anyp  G s  haÑ E``__P ð	__`` attribute defined.
5 p:exc:`Vû aError`´ Qaisedi ` cycle ”encounter; @ """C  ( ¤ �is None: 0   j Q _is_» Ver(f)    �@ hasž c(f, '_- Qd__')I ?elsS 8� and notV"(fc @f = „Á  # rememberÆ‚original f¸ %¡ reporting¢ ð # Memoise by id´ótolerate non-hashable³Qs, bu� r 3 toK `ensure~ ðy aren't destroyed, which would allow) Qir ID+pbe reus¢ ` memo = {id{1 f}d õ
recursion_limit = sys.get  (ZwhileÆ7uncÉ9@.¾k  … 3id_#  ‡  <  4f ( 0in ¯ ¢) or (len( 5>= — ° {  _ r¬ Á#('n¨ loop when=ò {!r}'.format(f)ä  H  o [� ]© r&_

# - ó source code extraction
def indentsize(lineÜ B"""Rv  °$  % ,_ spaces, atýÀ start of a C  
 Ttext.ž1exp = ³.expandtabsáà  s+ G) -  ±.lstrip())
´ °_findclass(Ù´ 3clsJamoduleR! 2.__ "__o0if . /Š  Dz p@nameõ  j p.__qual ö__.split('.')[:-1]Z \ Q= getUPcls, 3 |  þ"isÁ 3clsÀ  �  7clsú sdoc(obj7 4if L   L  ½ 1bas½ 0objFro__§  % 2if $ s”C
#  ' >try   Qdoc =C �.__doc__9   „except AÿæN �continueD 0if j i¦   A 05docC   4 p -‡ismethodG ®  ¥  =%!._3P__.__ × 0sel®R   ðif (isclass(self)g and
  „getattr( ôself, name, None), '__func__') is obj. )):M Ê# classmethog `cls = ] 1 Jelse? % 1.__J !__/ pelif is† ‡tion(objz  ­ # =˜   6  æ S Q_findQ ; T   0if ! !isë D or 2clsó 0not_ 
® areturn: Q ¥ obuilti¤  À   À bif (is»   )Á  r.__qualü � + '.' +Å$ =! ; µEð# Should be teste
 ø	fore isdatadescriptor().B€instance¬§, property¶  1Afget<  Ê   0 =  0.__ J é'= 
 ' )< Aè  ¸ f  ^ º à Ç „1objæ /ifÃ) Ejkmemberº ¡  ( @slotÔ	21'__ 3__'?a 4 \ ß* a, dict×±1in  
n  > q [$]] 
H%  » °for base inì†.__mro__^ 6try  g Udoc =F < 
g.__docmúexcept AttributeErrorM �continueŒ  ^ 0if a 0is U § 
1 À 1doc3   ( A

deÞ0doc3ect """Get the\ `umenta(€ string  anÂQect.
Y ðAll tabs are expanded to spaces.  To clean upW L `s that5 F PindenÚpto line, ñwith blocks of code, any white_  E rn can bñuniformly removed fromÒ bsecond^ ponwards†( A."""Š 	Ç bø ð ¶²n
­ �©	m  ) q ]ž™   w (*R, Typ5É ,   ˆ   .%is<@doc,ß9 5  àcleandoc(doc)
ð
def cleandoc(doc):
    """C ñ up indentation from docstrings.
. òAny whitespace that can be uniformly removedC ñ the second lineF ¤onwards is, A.""" 2try˜  œ  1 0s =‡ ñ
.expandtabs().split('\n')6 öexcept UnicodeErrorF “return No~ Felse é# Find minimumñof any non-blankÁ Ñs after first .ƒ  ° òmargin = sys.maxsizñ   1for/ 1 in Vs[1:]ˆ  # àcontent = len(þ  .l€2p()è  %   3if , 
A  ÅD 4) -. ª  )   ² Bmin( ,r 1# RÒ  õ "ifÏ 
Š  ½ @s[0]ˆ 0ine Ì † 2if t ( <3
J  8i5…range(1,Bs)):| &[ii 2i][U %:]i Â  Ð�trailing ‘0ead àÚ Rwhilea r and noñKs[-1ºï V.pop(7? 0> 0? · åB.joi1s)
Éægetfile(objectË€Work out¥�ch sourceé `compil• Ô 2an : õ  was defined in‡œif ismodud  5£if getattr€ P, '__� A__',i’  .   Ì t ., Ÿ’raise Typ»`('{!r}²a built-in �  '.d#aty ® Tclass Clif has­ N ;__'©  Â Ds.gep 2.__" &__© á !  6 2 #ö nmethod‹# = } Qunc__”P@func
<  v< Ÿtraceback= rtb_fram(y   9  f_v °   6 cï 1.co§np y‹!, W", >$, %, Ú !, · ,]'†  Ò '’ `hõexpected, got {}·? 5typà0.__´ 6__) «   S(pathÉB"""Rðð the module nameð( for a given file, or None."""
    fname = os.path.base ( )# q# CheckM   ñs that look like an actual modulek ; òsuffixes = [(-len( 3), 	 '  ‰   ·   ò in importlib.machinery.all_" Qes()]F  ó.sort() # try longestp �es first,Y ñcase they overlapG  } dneglen¥  , ] :$  ­ "if=”.endswithÜ #  ' breturn+ 1[:nY °   �ð 

def getsource«‚(object)N B"""RI "th` ¥‰ñcan be used to locat•B 2's V .» G  v ³ if no way D ‚identifiJ 0get	? 8!il(  =· ± f   …bytecode©/ =Ìò
DEBUG_BYTECODE_SUFFIXES[:'K +L ŸOPTIMIZEDP pif any(³  D¿)ãsïu Œ Ö> D = (;…splitext[ a)[0] + 4  ÔWSOURC "0]€/el³ g d •EXTENSIONgÕ ‘ ­ %iffexistsÚ – % 5 ‡ s# only  aa non-B 1ent y ~ Ím4ñhas a PEP 302 loaderM i‚attr(get. ,M b), '__6 A__',å�) is not ² @r it1 !inõ”linecache… â   .# \ Ø0abs@ ¸ _  =‰„å R€bsolute s Ø ,É Å�compiled¸2an ñ!.
³ €The ideaÔ  ÔCeach"  O ðhave a unique origiñÒo this routinü �normalizeùðe result as much vpossiblU5if á    ä $ <Ô  )à 8get Ò rp ˜  Ã�0abs-(a B))

10sbyO a = {}
  `sbymodƒ ª0 ‹ ,È © •2  €Ð was defined Ut ñ ŽUfound�Rif isC u ]X aif has ù@ ð__'):
        retòurn sys.modules.get(object.__ ò__)
    # Try the filename to $  Qcache+ Eif _% ø is not None and n? 0sby/ :=  l ?retš m . [c ]¡ Š ± again with¶ rabsolut¿  ² o 6tryx  † � = getabs ,¶ l öexcept TypeErrorC »  ï ` !if0/ ií + � è aUpdateÖ    Ì ŒÛ  Ând check yet• h# Copyú   PorderI Bcope9ñchanges while iteratingE 0forÀ ~ ,	 u" 
Oæcopy().items()%aif ismt( )shasattr A, '_å7__'=  !3f =s .# ”      v2 ==·`sbymod¨ à ,“X  < ó# Have already mapped thiss É, so skip itv  > rcontinu	    Æ ‡ [ƒ Y] = fB  Ø ~	# €# Always™  ­ ’ Ü 1 ù knows itself by@ # Ef„ 
 	.  ¾ Àos.path.real	 6(f)6 0.__~ !__7  x*î8CÁ ç mÑ­ n  =Ç@['__ A__']# !if~YÜY¶ Y» 8  T ", > ò <    ?Æ>ain5 —  W7if 7 #is_ & % ”  ) 9 "# �builtins    sÏ  � } # Õ  ; Š  ³ 3if % = Û ,  


class C aFoundEeEion(
 sEpass1 _2 ñ	inder(ast.NodeVisitor):
˜ Ðdef __init__(`, qualS  º   ¢.stack = [A 0 % =; \ vo Ã_FunctionDefe Onodea .V0nd(! .‡ ¨ n † % ¢'<locals>'~& �generic_ L ! G Fpop( Àself.stack.póop()

    visit_AsyncFunctionDef =  0 3def ñClassDef(self, node):T  X   à.stack.append(! e.name)% 1if ( @qual Á == '.'.joinW B W  [ ñ# Return the decorator for c˜ µ if presentn  < !if© .7 V_list·  $   ßline_number =3 @[0].% )no` OelseN < 	= #Î ðrement by one since - ðs starts with indexing( :zer…  / ½ I-= 1e araise ½ FoundExcep÷(7 £ �generic_-É! épW
$ófindsource(objectÅ7"""¾rentire ) ’ file andê  Þ  “  ‡ à2an N .Ž�The argu3ñmay be a module, 
³, method, fàñ, traceback, frame,"tor codeb    ^ ›  Ais rz€ed as a <q of all{ ¯ sL ižÒ  «  Í ÀeD 1ne / !atQ Ò.  An OSErrorM !s ¶dÖ J • `cannotù Òretrieved.""" € R= get3   �[ fv³ð# Invalidate cacheu qneeded.3  a.check (] 
   …  
 	  L q# Allowˆ  s@formZ@"<soÀöing>" to pass through� ð# `doctest` monkeypatches `v      F eenableÏ q# inspeþ‡, so let: @.getG  s`< b(llV!t  ³0rts¦Q('<')Ñ ù C.end 3>')   àõ"('®� ÞPavail³ '·ãV X,H‡#ifßÇ ! =RÜ ½ ,1 ’.__dict__I 
ÐD 3 ,  ç `could á 4get kç Yif isà 8ŒË Bs, 0ò2 ù1 gä$__ %__}3= 'ŠÅ ×  ¬òtree = ast.parse(1 !  _> _C’Fó$r(p . 6try! ` ? .s s 2 e³Ä —€ ½ Àer = e.args[G0]
  Ñreturn lines, u_number& Uelse:  ; ñ"raise OSError('could not find class definition')
> öif ismethod(object)W  2 = 	 –.__func__:    O < Hcode< Ÿtraceback= ‡tb_framey   9  f_v 7   6 !if)shasattr  °, 'co_firstˆ7no'q
t 8   FlnumX
h A - 1²  ) ðpat = re.compile(r'^(\s*def\s)| „async\s+ ñ.*(?<!\w)lambda(:|\s))|7 E@)')\ awhile ‹ 6> 0÷ x :try    ! =� s[8 
¶Áexcept Index†B ¥ Q ÷no is out of bounds¤  w Ðif pat.match(3 ‰ $ UbreakÚ       ­  jR\1num7 š ?3ode :ó def getcomments2— b"""Get& Ô & ô
 immediately preceding anY �s source ¦. R
µs None when$ �an't be f3.Ä 1""" 	½ 1 E =f µ 2 »(?a, TypeÄÕ  R: ‹ � =ToduleN óÓ# Look for a ð block at the top   BfileÄ  i @star÷0œ   #ifP2and
 ô[0][:2] == '#!': 5 <à Q< len=6s) E  ü].strip() in ('', '#í) # =f +¢#if c 
3[:1¬ '# Ú [s = [O$ndq  2 × Oend r Oend]p  B t r.append[7 Ö.expandtabs()* 5    u  =    „''.join(b f	û$ofsÀsame indenta_ el È	¯( # =1 CsizeÒ  ]Æ  ¸ =ð!ifÒ G>= 0lN# \‘� x  < )š ñÀ= [lines[end÷].expandtabs().lstrip()]
  ¹if end > 0:  #   = =- 1 ÿcomment = lines[endr ; cwhile A ö[:1] == '#' and indentsize(Y )"  ¨  ¬ M “s[:0] = [ 
í  )   Ù  " ­< 0: breakÄ  & e 	ÿ sõ J Ss[0].¨ ò >'#'ï , 9* [ä ] 	/-1^ 1-1:J
_ ô return ''.join(Œ ô)

class EndOfBlock(Exception): pass#  FÍrÝ ñ"""Provide a tokeneater() method to detect the‘°of a code bl A."""¢òdef __init__(self)c  ®  .w µ00  ú slambda = False started  Ü  ª  q corator! #de hasargs& 0lask‡Î ñbody_col0 = None
·  G * r, type,^Ä, srowcol, e	  Á ,pif not ; .ý  � × b Nµ# skip any Ú s—     "if‡  á:"@"?  ! v a f = Tru“ $ ¡# look foráfirst "def", "‹b" or "Ö 8   %elƒ Jin (6 ,4  6   8 %==' À  * Ä UÁ % _å  E _ E  8 d!toü  Î!of  Ælç  ¯ (j"ifßiË ‚ È¢ Š i )i &‹  ø   ’ 
¶ü 0ypeeºize.NEWLINEç Q eI ‘   # stopÎÃping when a D … is seenœ ªc*[0@v:8 n ª�s alwaysæañÝy 	q  = TraisexÀock
        ð*    # hitting a NEWLINE when in a decorator without args
9  ¦# ends the. 	! ¦if self.inN rand not  0has_ :?  h @ u= False) $elf ŠpasslineE   
- útype == tokenize.INDENT7 U ðbody_col0 is None Á – zstarted8 ´ 9 Å= erowcol[1]Š (  Bnt = >+ 1*  Ê  à k = TruÕ .DEÕ · c 
q -q #ÖÀend of match(; Ð/dedent pairs‰ a block³ ò# (note that this only works for "def"/"class"A +s,C *Be.g.2 °if: else:" A Ôtry: finally:C )C Çº ^ <= 0°Éraise EndOfBÈ \ZOCOMM0 è4# >}$” ò# Include comments if Ç ðed at least as much  ˆˆil/ 3= s‡ 0Œç 	1= 0èü  Æ Ein (0,B:NL)Ã ²# any other& 1 onSCsameÇ ±ation levelF À |previouh×  ä °well, excepV‘e pseudo-œ #s š ¼ 9NL.æ�
def get] (ZsÆ ’"""Extracd !  	@code{ ª 0top    given list I A."""~ < f¸Ar = _F (© Ä)  ¨Æ ›’generate_ S(iter« ’.__next__I  @  W*  Ä3 
˜� .   eaR *6 J ^(@, Inó²SError) u  —Â PreturXnes[:j  {$]
pasource's(objectN B"""RD aN-  . ×v �  q number2an N !.
� 0The³u=ñ may be a module, wà, method, func� , ÷Âeback, frame“1or ýb    ^ œ  2is   �&s Á  ! « Ó correspondÃ !toU Þ . Ù �indicatesšr: 2 à @origü ‡ 0filnqe first2 �ž ðwas found.  An OSð0Error is
    raised if the source code cannot be retrieved."""
6 òobject = unwrap( )R òlines, lnum = findV % & äif istraceback : 	b [ ¡.tb_frame
" ñ# for module or  ó that corresponds to$ ,Ä turn allå ¨ N qif (ismN Š 1 or  Œ 1(isa  Cand ˜  f_-â.co_name == "<J F>"))Ð 0ret€ u 1, 0\ Melse" ‘getblock(+ [G3:])PÊ+ 1

def getVH B"""Ri  Întext oÚ <$anÂ RðThe argument mayøa>õ
class, method, function, Â,„,Ù "orC$   ^ °  #is‘ñed as a single string.  AnI $OS­©$E==6 Ïj  r''.join}o)

# -  /€ tree ex# -¸@walk (#  (óchildren, parent4Êåcursive helperwý1getD N )šÁresults = []Ù % òes.sort(key=attrgetter('__¬q__', '_ÄB__')Ê (Bc inÐ "esd f ó.append((c, c.__bases__?  ) 2if B æ C   G . V[c], !cY ¬> ê 
  ]Æunique=FalseYqArrangeò‘given lis*9 ð into a hierarchyFanested+ "s.5‡Where a   `ars, iŒdntainsAÑ derived from q ¨ñwhose entry immediately precedes/  ¨ t.  Each+  >q2-tupleH !cot Ring ax  ¯!a #  É @its ª bes.  I%'0'I ôis true, exactly on© í  $ q™ edÈRuctur“  He³ î - zÔ.  Otherwise,–   ud multiÜ ±inheritanceÕ ótheir descendants willƒ; e times"PQ = {}ê Groot2 ¯ µ ö÷ Îç
Ì 6 Â á 
'  ÷#ifì a `ð+  / ± [_ ]Ü    œ P 2 à:
              óchildren[parent].append(c)
"  âif unique and 0 õ in classes: break7  elif c not% eroots:  U  p 8forZ � 8 $if X } Z © Ï ñreturn walktree(ƒ $, Ï, None)

# - ó argument list extraction
A õs = namedtuple(' Õ', 'args, var	 Ðkw')

def get B(co)	P"""GeVPformae ¥ about theˆ ñs accepted by a code object.
.ñThree things are rPed: (q � �), where= ² A' isu ô %of} é õ s. Keyword-only m E lSed. 'û '\  1kw'•  Ô  7As ofl *# "**B ]!or½A.""" "if{sù <yðaise TypeError('{!r}Ë  T	*"'.c @ )6Œ ±= co.co_var s n6  ‚argcount )kw  kw	#    K(T ![:Q ]»2  H% $ * "+nf 2 „step = 0¸ srgs += % — v! =<  µÛ òflags & CO_VARARGS~ B8 
[Ž ]I  (  ø} ! 1 _varkwt zKEYWORDx : v Ä ]Ê6 + ?×
£ASpec© 	¡  Ÿž" kÕ«s defaults©Špec(func®È >; a valueÛ a 4  Í 'säsameters¬!A 6 Dfour¶/isµ¨ ,© !).€¼a®ZÃ´, includingó 
ÈåS À{ Ãè  ÀO  sbUan n-  I ?  glast nU =EThis^ èñdeprecated, as it does0Ñsupport annot\As or• Õ 3par¢�awill rXVÓY  if eitheru Sprese!onË m Ólied callable± ñFor a more structured introspeWÁ API, use in `.signa*  () CteadO ðAlternatively, use gòLetfullargspec() for an API with a similar namedtuple
    based interface, but full support K ñnotations and keyword-onlyG Áparameters.
 ðDeprecated since Python 3.5, use `in¬ ;t.g¼ !`.A 1""" �warnings.	 '("6 î Ois dp 20, J  ï  "… N ô signature() or  › !",“ E  
 ê BionW¬ ñ , stacklevel=2)4  ­ U, var	 ðkw, defaults, kwL   qann = \H  r — Bfunce 'ifH  É Eann:7 ðraise ValueError("FuncÕI hasÔ ÐG ÿK ” B   "Ù=Tˆ”hich can ZRthem"º °return ArgSÁ.s)

Full- ' =Ô'(' '¯'N |û �')

def f¡"""Get the“ ,È  vy÷	s of a callable object'sqA!A ¥ 0 òseven things is -"edu (ß 4)x.'g `a list�  Ñ Û - £'·'varkw' are!of *# '**ê  [CNoneL )s} En n- �  H  glast nU M D O Ì »7 	Õ < p � 1 di+²ary mapping4 X fromw%to×Œ %an>� M  `G to 8 1Not7²differences€ u 1  -g"self"ñ €is alwayO�ported, h ðÓbound methodsAð - wrapper chains²fined by __ Ãd__ *not* un � automatiô-Û4try¥ á  # Re: `skip_ ³_arg=False`‚ 6  #
 b There¨ _ Nû in behaviour betweenºL  ÔS:1fformer$  0s 'G'G.N 80, w£ !asP _ S Bshow aactual7ingI C…s¯6À.
        #
  õ4# To simulate this behaviour, we "unbind" bound methods, to trick
 J ðinspect.signature% ÷always return their first parameter ("self",L —usually)
 öRe: `follow_wrapper_chains=False`, 
 ° getfullargž °() historic` £ ignored _R èd__ attributes’  so1ensÙ phat rem}  Õ Ö case in 3.3+´ usig = _`_from_z –able(funcc H ù D Qskip_ÉB_arg6= tigcls=SÞ)e�except E ¡ion as ex:  Ë ‘# Most of'utimes '÷	' will raise ValueError.? óBut, it can also- A¥1 ð , and, maybe so¦7ingF €else. So“0be ñy backwards compatibleõ—catch allB @poss!  ò ‘ions here{ 2 reÄ \a TypÅ   ä('unsupported 0') 2 ex@ ±Q = []„ 3var DNone Ukw =  sposonly( 9 .kw qannotatÃ A= {}O Âdefaults = (Û'kw "{}— rif sig.Ð_J q is not Vempty% 2s['9 A'] =+  H f 2for  T p -0s.v'6s()a bkind =1 . Ñ  ~Ename   _   0if +  ¸ ö_POSITIONAL_ONLYZ  ) W.u0nd(J $ !   #if 3 W  ¸ . 1   , bs += (*  ,^ /elª šR_KEYWORD°   © o7VARW
¢ Í I­
ê Ü ‘ Óç <ñ[™  ¤	–ª  ë ® è ¢ M 	yV .+ s›  b !if‡Ë “ À# compatibilóity with 'func.__kwdefaults__'
   � = None
 tif not 2 :  3 Í# compatibilc / a  	_ ðreturn FullArgSpec(posonlyargs +  U, var	 5kw,� ,�  “  $kwD &, Ú ó, annotations)


ArgInfo = namedtuple(' @', 'v ~ ò keywords locals')

def getargvalues(frame)'Ñ"""Get informu ` aboutÕ ñuments passed into a particular H .„!A ™ ò of four things is ?Ped: (ª )ª !).(Î '8 `a listQ 5the� s, sð' and 'varkw' are 2  .s? *# %**H As orCK … y  =  @ dicˆ4aryI Sgivenú 1"""´ × # =to�.f_code)1  Ä^"f_‹ È¦"( à, base_module=ãiÿ9ttr. #'_, A__',Ò) == 'typing' ¯® 8repA £).replace(2 .Œ'á Ùif isinstancev 4typ{ \ 'ifï.’ ù  in ('builtins'Ü ×  ?   Ÿ 	p.__qual !__p' ,__+'.'+A 	d \”órelativeto(object± n  Ž /, Š ·  ¹_^ NX Þ - ", € ¡Ñ ^ 	Ò 0rgsí	ßYÄ#kw 5 º  “  é0=()ì ø6 ){}ó?={}2Ú org=str! q=lambda-q: '*' + 9 
,kw7 8 4lue8 `@: '=p - )w ˆsA °text: ' -> C   < ±=9A"""F×5 anú ÕQ from'¢ ¦0 by¹@fullø3pecáÀThe first se3arg  qÄåÅ ð, kwonlydefaultsðN, annotations).  The other five arguments
    are the corresponding optional formatting functT Q that9 ‘called toK óturn names and values into strings� 0las@ ‡   i/ r J fk B to ‚ ¤ ¶sequence ofÆ !.
3 ÐDeprecated si$ âPython 3.5: uså µ`signature`Ï ¬ %`S N �objects. 2"""d �from warnÌ q import    2("`± €argspec`ß dœ h. Use ˜  ;"x  Ÿ  "�Ÿ  › ¶ directly",, BionW¦  Òstacklevel=2)± 3def_fargand8e(arg):Z †result =. !   i�8 in{?  É C ”+= ': ' +K «(~ us[arg])_ !re[C   [as = [] ¶if defaultsv Sfirst ` = lenµ As) -  sg `for i,V Æ ’enumerate2 T  x 5�  ñ ” cXi >= ” V  / Z  B(© I[i -A " 7 �s.append( Ö `if var‹ ‡†not Noney  * 7 ¸0 (  "))a 7elsO �if kwonlyr f ß j 2'*'? 1  �I  � ßV �6 m  1   u YŸ- p   
Ê  C  8$ +§A 4 [ 
È; 	 H � ª/kw¨/kw¦$kw¤7P = '(x‘', '.join(�s) + ')'·Bif 'l'‘N ý 0 sŠ ÏV ]75  L )

ˆNsy,¾	 §kw, localsÖ S ²O=str# 	Äq=lambda²@: '* ¾; ,kw9 : 4lue: ä @: '=t Qrepr( )sP"""Fox0 an“¯ - ƒ 4`LÀned by getarõ&gvalues.

    The first four arguments are (args, var	 Ákw, locals).> F ?nexA ðthe corresponding optional formatt @func sL Athat~ ò
called to turn names and Á Ò into stringsŒ a ninthF É   i4 w l  W ƒ  ¥ ¶sequence ofA."""M Àdef convert(‡ =
,%  N Z Earg=
 ,ò ½   %):? !reê 4 m 8) +; (t [ˆ !]); ¡specs = [] ñfor i in range(lenÈ)i 2 „.append(Ú  äB[i])U $ifø  	7 ¦ ( ­  
\ /kwZ  kwX /kwV $kwT <ñ'(' + ', '.join(³  @ P')'

É”_missing_#@s(f_N,ú 	 Qs, poø )7  eCrepr™ j   m0arg As if«@ not äsšz 0 = •/ m 7= 1! =N 2s[0C Welif , 2, 1"{}#B{}".¡'(*h Felse1 ¯tail = ", 6 C[-2:e Û3delŽ   m   |B", "ro 0 + _ $ õraise TypeError("%s()Å Ð%i required %x‚‘%s: %s" %C  g  ³ƒ. P"posi\0al"š@pos ÿ  "keyword-only"? 5 d S == 1> ss", s))R…too_many–  K@, kw] @ð defcount, given bsatleast C D) - 4 R _> ( @[arg  ½ p#  ì   #in.ÆÖPplura	� A!= 1o  D0sig$2at ž s%d" % (, ,À–ª aZ LTrueR afrom %àT  ^ ¶U  D&  ±  7strú| _Ñ Ú#if¦T» !ms÷  	@ a@%s (‡8%d E  )]  ?	u (V Q% ("sXÇ ½ V"4Ž – X 3   F b M Éðraise TypeError(ñ"%s() takes %s positional argument%s but %d%" §given" %
  ñ(f_name, sig, "s" if plural else "", : �, kwonly_* 	D B "wa9 ) Ô == 1 and not5  R öwere"))

def getcallargs(func, /, *Î @, **¢ 1d):u õ"""Get the mapping ofó Ñs to values.
0 ñA dict is returned, with keysG  v  :E  p �s (includb 1theM  !of8 *ä %**8  s,=Qany), ˆ , ñrespective boundN   ffrom 'ò '= 'l ad'."""-  @   =/"fu/1pec2)   AU, var	 Äkw, defaults½ É `ann = b K 0 = !._!!__ Aarg2· b = {}
c²if ismethod‘ Á = `self__€ BNoneÈ „À# implicit '( ó' (or 'cls' for clasY %s)g‰  ? 31 = z 0.__H g__,) +3 ænum_pos = len(= @       +  )ð /0 P@min(V Ppos, 	 T  Ý Ãi in range(nÜ Õ b[/ g[i]] =Ê 1[i]Í $ifìO;  ; Wtupleî B[n:]Ù °possible_kwk  1et( +·  - p /kwn  kwl !{}œ  Þ  })!inP‡d.items(ë Qif kw% inã Ž h  !if' 8var‚     òraise TypeError(°got an unex{ edòEwordI< %r O  #2kw)" 	qQkw][kø 
) rcontinuE  û  inŒ Q
ñ Ó ƒmultipleæ(ñÑ Í É Â  z8>Åà Ïh¼ •_too_manyh  C
~5 >,0 #!  p >  €• <%  e … Preq =Z4s[:x! -) o E g  ­1arg�&eqE   iY{« ) ”_missing_Šs  req, True,’ ìÆ  9  ~ i  � ‘enumerate†[¼ Àaults:]):
    Ðif arg not in …2value:
" 	 2arg ñ[arg] = defaults[i]- ±missing = 0 `for kw] Öin kwonlyargsZ #if  } '  > q C and: Z  ^ · Ó [�  º � 3  ´ 5 ?els â A+= 1/ 3if  x _ ÷_arguments(f_name,†, False,ž )Q Wretur‡ð

ClosureVars = H ‡dtuple(' ð', 'nonlocals glob òbuiltins unbound')

def getcV ¢vars(func)À 1"""‡ ÀGet the mappÓðof free variables to! ±ir current 61s.
@ RÇ 2s a±  ² • of dictsW  c @ ¿ ,¿ H  éÆ ð references as seen by… P body]  O  Í Ñtion. A finalH 0set! • Ás that couldþñbe resolved is also provided.F  	 ¸if ismethod> = € 0 =  0.__ "__!ifg  is  £ ; ðraise TypeError("{!r}‹  �a PythonZ  > ‚".formatF )d Fcode~   !__² 3# N	H!redû0co_ä a@ pby lookpthem up5 #__J __Ž@posi� �al index< !ifµ .,  is‘ cÿ_€ A= {}< 
ˆ% $  w  °var : cell. P_cont	%  •Avar,(  Â @zip(). ,± žB   }i1# Ge*¢Z ¸s- WÄƒ__ or __c sÏ  _n O2.__ ! 0 "  ˜_ns.get("N 3", + @s.__ž"__ì äcodule(# 3_ns( o $ =E  d G w{ 
Õ: 
 �+ Ø Bset(‹  ´ A ¯«  
K   " Ñ("None", "Tru k"»  ¿ �# BecauseCpse usedÖ$beÍ �s instead;�keywords,/ yÜ  F   ð# may still show!asYm¡. We ignorr mS @    ¬EinueY 2try“    J[ë  È "ns = ¡except KeyJI À       try:
  ôbuiltin_vars[name] =  n 
5 ùexcept KeyError:  ) €unbound_N `s.add(
 !)
) ñreturn ClosureVars(nonlocal„ d, glob 3  T  ¡  ¶ ), q o)

# - ð stack frame extraction

Traceb  = È …dtuple(' €', 'file ± lineno fun? ñ code_context index')

def getm Qinfo(
 #, ) 2=1)VP"""Ge8 Pforma� ƒ about a© 0or ª   robject.h!A ¨ ò of five things is ‚„ed: the º ,  ¿ ¡ number of~ % qcurrentÞ ) á  ö €, a listm  B s	 Ì U fromI asourceQ, andu  3 k 0 wi· @ tha| 1st.I `The opð al second argum£ ‘specifies[ Ë » ˜ J #toð, which are centereT  ÇH A."""> Uif isÄ¹ ¯ 
Bno =«B.tb_ <  ! õ    Belse ) 8 * fI ‘if not is= … ¡raise Type­`('{!r} 5 F"'.sQ ½-  =¿Í  & 0 or  Í $ifÙF > 0× qstart =›„no - 1 -* 1//2<  ÿ 6try5    ps, lnum2ind‹ ‡ 9 ª!OSü D  " =”v = None9 	 s ¬ ±max(0, min( a, len(‘ )¾ %))K  =  é !s[8 : +%]/ 0 ' sÈ ( è ¨(˜¯ ‘ 3no,š f_¦1.co²,�"s,­4 cLŸ ·  9 ò¢•á, allowing for¾1mizÒO0# F} ¬.ãªÀw a descriptò øgrovels co_lnotabô E !

Y 0InfŽ Ä Q', ('6 V',) +5†._fieldsQouter+ s·qrecordsü u þòall higher (calling)•sÇREach ? Mains\
Ù‡,…Ð
    name, a Ðlist of lines	 ócontext, and index within the  á."""
    frameD A= [] Rwhile : ( �info = (5 �,) + get    c )<  d �.append(Fu eInfo(*> )0 " =ƒ q.f_backM breturn  P P

def„ QinnerK Ts(tb,ƒ 2=1)Â �"""Get a 6  %ðrecords for a tracef "'s] <’all lower 1s.
… REach @ h bains a$ ñ object, filename,˜ñ number, functionI   ” Â="tbý ¿atb.tb_/Å?’ <ÂRtb = g Anextï ½bcurrenE(®Rê ²¨  ´  õcaller or None if this is not possibleÞt Tsys._«0(1)8 åhasattr(sys, " q") else_ _cstack(8R¤ ÁU ­ : b above|½ d¥ egetoutÇ´ Õ)— ´— (Rbelow— ƒ` excepžš  a š Aexc_ôH)[2]› O
# - ð  static versionë0get�Ó

_sentinel =\( _6  ¹“mro(klass@öðtype.__dict__['__mro__']._5 #__4 Oð_check_instance(obj, „ T  O Q = {}Õ6trye$ o  K ribute__\ "š "g~Q Attr( VError\ Apassr Ý  Ö Y.get(u ³ %, 7))
ß c&ø + Þ  Ÿentry in Z KÁif _shadowed(i(?  ))‹~ ¿  9 	,    Ï > ­ .� $   ;Key    !… 1is_¨ 3objõ 	� õ  & ox KTypey º QFalse+  CTruet 
'£ ¿_æ  (	¨›À_getmro(klasSs):
  6try   Ðclass_dict =  ñ_attr.__get__(entry)["_# E__"]K ú except KeyErrorW Fpass* :lse Öif not (type(ƒ P) is  õs.GetSetDescriptorType andU  ½  B Ö.__name__ == ¶ : 2objJ _ˆ û 
¸  q rreturn *  2“  ð_sentinel

def getOÐ_static(obj,  ¥, default=1 ¥±"""Retrieve* ñ!ibutes without triggering dynamic lookup via the� E   d:Á protocol,  × � V__ or f D__.
? ñNote: this function may¶Åbe able to r« 'll¯ F Dthatô can fetch (likeÀ Çally createdC )D 1andz 8fin   \ $'tX ú ‚, ¡raise Attrî µQ). Itš 1alsÏ  Û<eobjectI °instead of  ùance members in some cases. See�`ocumenñ on for details.é 1""" V `_resul”!  9@_is_( R9 ›kÍ! =C 4    ¨ÚÁ = _shadowedÔ(5 oV if (. 5is � 5 orP  T � + ¼M
¼¦  < è  dcheck_  ¿ ,› eD´ b = obj³ 5M ¤á L Â i¿4 !isÜí  x	V "  3_r = A), '|1__') þ	l ˜    M s M  i˜� 2â F �5´ 8if ]  :	Ý E . ‹ 0obj:  2 #) NQs we c UQ metaÝA too‡  7 V¶ Œt È2mroj_ )",if q ú­©š  o   P    2� .>[{B (   J
 !   R$if= 2lÀreturn defauÿlt
    raise AttributeError(attr)


# - ÷ generator introspection

GEN_CREATED = ' ' tRUNNING   vSUSPEND:    FCLOS  ¥'

def get“ estate( !):ñ """Get current % V of aÌ 2-itÕ !.
3 ‚Possible- Rs areL '  Ø À: Waiting to* €rt execu.H / ë 2: Cƒ Ply be7 . �ed by theRˆerpreter@ B øsuspended at a yield expression@ 04: E� â has completed+ 1"""³ iSã´.gi_runningÿ �  returnÙ 8 Åframe is Non=	> — = ï.f_lasti == -1� pD ˜ 1
$olocals%F  * ‹@mapp£o <   variables÷Utheir\cvaluesE`A dict› �ed, withëAkeys	 
T ² names and L  $ ™ 5bou .­ Pif nod õÚ 3Typ P"{!r}š  = †a Python‡".formatL )Ö=v D! a, "gi_ !",ô)¡  m ½  q/  ü©E >elsC/{}Á#�coroutinoÁHCOROÂ !'
 ñ Ä  w   " ó  É› ¤( É* s object‚Ç¿ ?È0 ÿ ‡ÉA C 
Ê`n awaiJËB 3Ì?.crÌZ Ý q9if 9 ” Ã¿? ™ >  ÒÎD ?E 4  7ÐŸ @s,Àine):
    ""ð&"
    Get the mapping of coroutine local variables to, ñir current values.
K ð	A dict is returned, with4 Q keys	 
T £ names andL  $ N 5bou 2.""® õframe = getattr(« a, "cr_ �", None)F 1if   – 1not :  ý ¨ " 1.f_› s Melse( o{}


# ; P ð Function Signature Object (PEP 362)( z 9ð


_WrapperDescriptor = type( ó.__call__)
_Method/ % 8all$ _Class) `int.__ð
__['from_bytes'])

_NonUs… ’finedCalll>= (¡ ,� » 
¨ , ° 1  ”s.Builtin±äType)


def _s½Á_get_user_deÖ !_mAb(cls,  _ù)cð"""Private helper. Checks if ``cls`` ha' ÷Qibute
 E Gd ``T !``NÛ�s it onlyJ iœa9 pdƒpython f~. k2tryž  j ` wÈ : ±except Attr¢ VErrorD ’ * 	^0if ›°isinstance(o /, 6 ˜   —# Once '_�ð_' will be addedº‘'C'-levelƒ  :    # æs€, this c{` won't@ ™necessary7 Í Ìÿ‘partial(wddœ #,  ó , extra_args=()Ð  µ acalculGow 'N %' pì Ÿ ðlook like after apply×1a 'çSools.‡ 3' oe@or a6 4Von itY ×old_params = †  L bameter86new( ÆOrderedDict(A ’.items())6� $ =#.R or (” & pkeyword†  . 0or ¢ Ö'ifcƒ3 l †$ +y  š 	+baù 1binæ*Z 5, * � Æ " 6f as ex  smsg = 'M ŸA{!r}ÿ`incorróarguments'.format(4 h  praise V¡l ð(msg) from ex


 ò#   transform_to_kwonly = False
    for param_name, � in old_ ¡s.items():1  5 6try   ñ
arg_value = ba.arguments[B [ ]> ú except KeyErrorJ Fpass* :lse "if¢ ú
.kind is _POSITIONAL_ONLY/  œ ñ# If positional-˜ @eterD €bound by[ Utial,�  @   ò# it effectively disappears from the signaturY 7  4newLApop(} )j ™continue
 ÷ žR_KEYWORDý 9 n  ×0parã ž_keywords3  µ ð# This means that t ¹  6�, and all3 am ¶ A  A# affÃt should be | Š(J Fvar-£	û J A ñremoved). Here's why. Consider�ŸfollowingM @func  w ÷foo(a, b, *args, c !  #	  ¿ O   #ˆ "‘ÿ(foo, a='spam')" will haveÏ |V: "(*I ¾ ÿc)". Because attempt@to cÚ÷ž õ with "(10, 20)" â¨ Ü 0raiq Q Typeë‚, sayingS&"aH Ÿ receivedK ‘multiple f/s.' ì>Tru’ ›@# SeÙÒe new defaulta _ Æ×" =“.replace(I =åeØ �   Q# wasFwed as aºuž .d.Ô  i hZ\C?'ð /ifÐ
Ãcassert”&=not*b4×   =Hè" Ž =¬RœO 	<\  Ç  3 ð.move_to_end(par§am_name)
  ôelif param.kind in (_KEYWORD_ONLY, _VAR )):>  I Anew_A ás.move_to_end( q sa ¯POSITIONALc 
2pop[ .Ì � òreturn wrapped_sig.replace, geters=© ðvalues())


def 3 ónature_bound_method(sigò ò"""Private helper to transform sig@ �s for unG � �functions2   ^ !s.  A"""
	 2�s = tuple| . ¾ .³  vbif notºCs or
 7[0]È¹$, ÃÖÖ  J praise VãError('invalid§ Ü "')© )=r Ã 1if  FÒ%_OA8, _ 7NLY‹ ³# Drop firsÛ  ü ð# '(p1, p2[, ...])' ->  ˆ  Ø < O	 A[1:] FelseS ² sPì¡ (  R ò# Unless we add a new ¨ P type Qneverl  6   ©# get here {�argumentT '³ð# It's a var-posiZ&al… Tt  DoÔ Ûhing. '(*args8
 ÞMEM8 ãis_builtin(objÕ6àest if `obj` iÎ ñcallable that might)”support A÷ Clinic's __text¸¢_ protocol W Ï 8(isŸ * o¡"is”¡descriptorÆ ' €instance ó, _NonUserDefinedCÇ ,s)9 �# Can't tü D'isiG  4!)'Ñ, as it wouldÿ  À   á# also be Truebùregular python classes6 1objÏ c �, objectò4is_¤1likÚ ¿AduckªS of FðBType‹àA good example$ Csuch’ ds are � ñ s compiled withÐ Cã ò, which have all attributes6�a pure P. Q B R: Q, but
 ð their code stati„y º  EB o $  ¨ þ ä1 isz -U# Allƒ -V	î ¤obviously Q !s,g í nd¹Õ‹   ÌRFalse­   =^  ‡ A, '_wð__', None)
    coÿ!de = getattr(obj, '__code__', None)
    defaults.   2 ñ_void) # Important to use  A ...P $kw7 R   
T ±... and not› Q hereO ¯annotation¢  Q × 9 ðreturn (isinstance(þ ð, types.CodeType)x 1    1 žname, str& (æ "is³ 7or ;  �, tuple)B   D ! o, dictE  r / ñ


def _signature_get_bound_param(spec): ð""" Private helperá¡get first 1 Peter q from a: g__textf ñ_ of a builtin method, which should9 ñbe in the following format: '($r  1,[")'^bAssump‚are thatA ¤ óargument won't havFçÖ value or an 2] A"""
˜ passert ò.startswith('($')"  po�! ‚find(','O1if  B= -1X T P / )I c :J … !  O  ¶  >c ˆ  =Z =? % È ~[2:pos]3õ	strip_non_python_syntax(U@=D@func°¥. Takes a 9  ýA²�Clinic'sD ‡extended, .÷ RÝ M ^ o@threDingsy* q @re-rY 0red}  adard PÚ  Ú ,ƒ    >  ¡2dexa ‡e "self"à(generally 0),¢ ƒ3 ifD  �Q doeså š- aP ,Ž   last "posiRwal only� º  ‰ �  ha�  AD -D Ò s!if° A [$  <\U ¦ -h7=( É _È _„   ! 0inebP[l.en¸�('ascii')!! l¾z Ñ.split('\n')]? –Àtor = iter(lP P).__nª_% ñ token_stream =  Dize.	 Ü3torõòdelayed_comma = Fals` sk# [   B = [š 0addl ¢ext.append+ycurrent.0¦  OP0  « 1.OP ¥ERRORTOKEN  ÀKEN

    # tðoken stream always starts with ENCODING t) ñ, skip it
    t = next( _E ) òassert t.type ==? Dize.Q 
( ‚for t in  C : b @ype,ž Sing =O ¢, t.stringD  ) 4if j &OP@  .  ‡ :',' " @kip_Ì n_comma$  (  ü % … = False®  $   OelseB ²not delayedp C  G 	" n = Trul  ) ýcurrent_parameter += 1T †continue6 = %if`O= '/ µ c + þlast_positional_only is NonÂ T é T .= ü -û Dif (2÷ERRORTOKEN) and (0:$')Ëã GselfqÝ # ¬  	@Ÿ*if&
‰ Œ0if j(é .OPá ;)')â  ‚add(', 'Î   E \J F E òclean_signature = ''.join(textU {return + *, K/, v


def b ò_fromstr(cls, obj, sÁ°_bound_arg=U¶ ð"""Private helper to parse œ ent of '__° g !_'È :À 5a Sç Ábased on it.( 1""" ð # Lazy import ast because it's relatively heavyš8    Úu[  C0oth¯ Ðhan this func|r c ûP(f= cls.ÈB_cls$ ƒ"A = \¤  1" $òp_non_python_syntax(s)m °program = "Ãlfoo" +² + ": pass"6 6tryPmodulUAast.µ(V Z�except Sy _Error<   Á ;Áisinstance(ma ,©!.M 7 ì ±raise Value\ õ("{!r} builtin has invalid Ó".format(obj)	Bf = i ‚.body[0]ë Úas = []£ …empty = Î.  m =÷Cect(` \ Ð = None
    mòodule_dict = {}
    m óname = getattr(obj, '__ ‘_', None)3 (if6 : K r = sys.: bs.get( _d H  4 L G   2 «  !._» !__q 4sysž & v qcopy()
* ‘def parse� f(node)n ñassert isinstance! ’, ast.argò  “ 0if ; ñ.annotation is notQ  , õraise ValueError("A6 Qs are8 öcurrently supported"p creturnt &rgÌ `wrap_v\ '(sÉ :try… # ¤ = eval(s,´ .f ¢except Namª 
C T  Ý X Š\  - `  " ,SRunti„ ¹  (if›{ ñ, (str, int, float, bytes, bool, type(¯)  N T Ü!Coð!t(T µ � ðclass RewriteSymbolics(M ÷ NodeTransformerv  }ñvisit_Attribute(self,Ù)  Ÿ aa = []µ    1n =* 	 Xwhilen°c X  I °a.append(n.âñ     j .	m ø
!n  4i  A a  Š *idˆ ~ ú = ".".join(reversed(a)* Ê< ó k z © uà  rode.ctxç OLoadç ã  = ñ ^ ž  p(_ š, default g=empty~  1 ) =Ï1ame5 €  Ò  Ïªis invalidÖ< "Œ  .)if‚ J and ì_’ 
P &Ð . =7!).(( Ã  “   1o =Š�literal_Ì3 n–
© R ý   @if oÑ 9 6 9 Ž   =@ E  I T elseKr ¤parameters—P e, kind=e &, ~òð# non-keyword-only%ð ameters
    argñs = reversed(f.args ß)
    default%  ) piter =  ðtools.zip_longest(U ,L ó, fillvalue=NoneA ðf last_positional_only is not ) :“  — ñkind = Parameter.POSITIONAL_ONLY) Oelse3 ‘R_KEYWORD9 Åfor i, (name· õ ) in enumerate(3Plist(÷ 6)))n p= X  º if i ==ì ?  * ä 
± Z 0# *d 3if ÇfvarargV R FVAR_:>  z pA ‘, empty)
! ¡# keyword-Ÿ‘arguments b W• \	X W%zis  kwW  Í ,Ç 5kw_lÍ b� `# **kw?   > ©  ­ : 	= 
”if self_pƒ©ô# Possibly strip the bound :• #u Ó- We *always*5 [first7 5 if© 9 @  it… ša module. X _don'tU Qskip_² @_arga GFals^ uassert 	
 Ë _"ñ = getattr(obj, '_ A__',Õþ /  . 1_isl 1 = '  p ÿÐ ) ç  us (3 Q ¤T Zand (= :or á Ä ” Ö f.pop(0] 
^ ,  # Ý‘builtins,  Ê Ö ãD!Ù  F 6p =5 Ðs[0].replace(´=óš F — B  R ½¶return cls(Ú ",  p_annota}T=cls.öó
def _signature_from_ç »(cls, func,IS=TrueNñ"""Private helper2  i 0 to ^  Da ¢ callablesÐ2"""Ë !if˜ %is–  ‘ |  ðraise TypeError("{!r}‘ [”a Python r "€  8  "X  · �".format( ) %ë  —, "__text¤ (_"öÄ sª V« )no :g Ê Ž Ô¸ðstr(cls, func, s, ð%skip_bound_arg)


def _signature_from_function(cls,  *, : ô=True):
    """Private helper: constructs S[ ñ for the given python]  k Q."""
O uis_duck… ‚ = False €f not is•  8 (	 ‰  � iÎ %isG Llike- 1 o  Ü n    Belseè     ‘# If it's‹ Ša pure PÏ S, and   Î B typÂ  B   B# of;  Â  Ë 
f ôraise TypeError('{!r} iu p ‚'.formatâ )J±s = getattr —, "__textð‘_", None)ñ Fif s‡ lreturn9str} ôParameter = cls._p B_cls¡ &# & "inÂ Aion.Œ  q_code =&!._ !__ “pos_count  0.co× & €arg_name
P  & 1var & posonlyP  6argW @posi²Ual = d %[:• ]X �keyword_]  kw 	\ 5 	^ ] g 8 + / Á | `annota¥ ü 7.__ Gwdefault$  ! $kw i6.__ "__É4if ' ? ±  š s = len( ss
`4 0d @ ­ "[] Cnon_P d  D ¬0 -  	  ™Ô@_lef@ 5 X #-]-¥ € 5w/oð ­0or Q0 int -[:  ] ðkind = _POSITIONAL_ONLY ifC  t ¡  "
& ‘R_KEYWORDÎ  NÚ 4üP.get(™ ‚, _emptyu 3 Ð ….append(�2 U = ,t  E   Ü = )q Ø 	 E „“D-= 1ˆo... w/o uoffset,w¦enumerate(Ÿ[€':]- ¡ ‚ÎÐ,
             ƒdefault= Äs[offset]))
3 õif posonly_left:  !  a -= 1
 q# *args öif func_code.co_flags & CO_VARARGSS °name = arg_ ñs[pos_count + keyword_‹  ]a  ˆ  annotation?  `s.get(K †, _emptyØ ôparameters.append(P 2 U = ,t  x  Pkind=à Ô_POSITIONAL))KÊ -Ê  ˆ [ @for ² 9 inó &­# =Ô 7  Š Sif kw Ös is not None<  ' " ' =. ) W ý ]yÏKEYWORD_ONLY•ø íäo# **kw¯u ³pindex =$ªL ¬_ +Z  &% ‘?
@Is ''®Ña pure Python5Ññ- don't validate theP#<p list (=ócorrect order and ùñs), it should be OK.I ¶return cls(ŽT& _i'# 'mD $__Æ _j °__=is_duck_ õ ý)


def _signature_from_callable(obj, *`   �follow_wráßr_chains=True9 ïskip_bound_arg2 rigcls):ãp"""Priv­fhelperÎuto get Ø  ³‘arbitrary�å ‚ objects¥2"""] !ifØ&  )áðraise TypeError('{!r}^ $a 6 \ �'.formatE  Ãif isinstanciÀtypes.Method[ p ð# In this case we = ¤f first¤1 of ¡underlyingî  ¯# ò
(usually `self` or `cls`) . 0sigüCV À      obj.__—func__,
  ÿfollow_wrapper_chains= 
9 ú skip_bound_arg= + qigcls=s %)
€ :if 7 :  ¢ óreturn _signatureo µmethod(sig)0 Oelse> 2sigq °# Was this Rtion ö ñd by a decorator?V ?if f €obj = unF ÷(obj, stop=(lambda f: hasattr(f, "_È F_"))¼ Òif isinstanceI qtypes.Mé VType)v  ƒ# If the} òped object is a *"ñ*, we might want toÚ  B   #~û its first parameter (self)./ ‡See testÊ  ü 9pedšÊ for detailsC Òéfrom_callable(p  £  V —³ R 
q·
/ ´
»6try�Psig =~.áµ öexcept AttributeError; Bpass( 	½  igÊ{not NonÙ0if  3dsig, S&, Æ ’raise Typƒ h % –'unexpectN‰{!r} in Û ! 'µ  3  'êç �'.format¢ç - •	Krpartial½U	 y V&2	V ,Yools. JA# Unñ )ª O(seeC ³  û   0# T€°means, that¢ñneed to calculateÛöB 0as 1 t'êtregular‘  ˆýect, but taking in÷Paccou �  Gÿ0osi»al argument|  (usually ` ñ`, or `cls`) will˜0be Ù+ed< €automatiíQy (as'Pòs -[bt4	Ã.ì
Ž \ Cm „   Ü Cget_Á (,â+0, (,E N ÇËdG ð am = tuple(wrap÷ped_sig.parameters.values())[0]
  Ðif first_wrap9 5 ¤.kind is PC ù.VAR_POSITIONAL:E  P 0# FH ó argument of the X � callableV ï`*args`, as inK  ñ`partialmethod(lambda 6 =)`.1 ©return sig Nelse© Asig_å ¯s = tuple(-	N  å °assert (notn H -or*  .   ]  
A M[0])B 4new` ?= (H  G,) +† A ‘.replace(ø =_ !)
; ðif isfunction(obj) or I¤nature_is_ Alike# _ô	# If it's a pure Python 3 ,N àan object that	‘duck type„  2#:a? : (CP ðs, for instance),nn� þ À EfromÂ  ô@cls,� ,|  €  	ú skip_bound_arg= Hu ’is_builtiS  - ?sigŸ 
� ž $is5 Ã,¢@ools1 v)¦ ¾ Ñ ( =MÔ(A@obj.ö
WcfollowgŸr_chains= 
9 Ö 
+ 5=<R0get\ í (ã Ç’sig = Nonš
8 ¶+#K Óqa classðQ meta e ]*@, le/@see ^ `t has "Àverloaded __c¥__ definedh‡# in its`  [    2 
¬ î Suser_F _W Á  D), 'j '7!ifµ Ó  ¯  j # " 0  š 
±   = / !)à# Now we check  ÌS'obj'Þ­ 8 I _'‰&ho¡ n ?new‰1objƒK ‚ E 0if H ?is … $ ð sig = _signaturÿe_from_callable(
   Onew, ÿfollow_wrapper_chains= A ú skip_bound_arg= 3 qigcls=s )— Yelse:  Í ý(# Finally, we should have at least __init__ implementedH  # ô = _signature_get_user_defined_method(obj, 'U '¥  “ 1if N ¯is not Non¸   ) :sigs ® 8  ^ ?  ¡· E 
¬»7 ¸¿f0if í /is ð # At this pointÇðknow, that `obj` is a class, with no œ-b  ~ ## «Ÿ«¢new__', orE `-level&  I__'
H ÿfor base in obj.__mro__[:-1]‚PSinceN GtextB _'¹ vY as ak · ‚scriptorõ �extracts Q  :“  O theC  ñ docstring, if 'objƒ rderived@ Ÿa builtinF Ÿ, its ownÓ €may be 'Ø/'.E  ‘Therefore“ go throughº ° MRO (excepõoe lastD  Ï  in4 I @hichN Ô Ðect') to find" O firG 2{n-emptyUÂ >tryæ © Ž ß! =4.__  -__Ê ê ïAttributeError^ Npass@ õ � !ifÉ  � P  % 4# IRh‚ ¹ $ a¢ M 	‡return a“ (nd on iÇ ‚   7  « ) ÉBstr(è,f,Ï )ŽO# NoŠPwas f_ ²3theòë 
Ø0# L@opti¬ s>Pcheck( ïÑ* i‡#ž Dect.ó GEtype 
k  ™1ypeü
A[C# We®š  (3AmetaÅ e), butîß&#äÐor __new__ fokr it
  öif (obj.__init__ is object =and8  G 8 ;new7  /):4 ò
# Return a signature of 'u ¯' builtin.> r< ðsigcls.from_callableÆ Mect)8 OelseŒ ýraise ValueError(<  æ   7'no¯ ”found for­ ð type {!r}'.formatŽ 1))
Q ñelif not isinstanc­ ó, _NonUserDefinedCÊ s;C# An�q with _ñ !__Z  › ñ	# We also check that theR'Ï { 4an | 7 of= `_Wrapp„ óscriptor or _Method † to avoiP# inf1÷e recursion (and even potential segfaul— °E = _þ²_get_user_d!_m} (UH4, '÷ 'à1if L !is];Nonç>tryø:sig~ 
E [  g , ‚follow_wD�_chains= A `skip_bPZ_arg= 3 ý= ­ gexceptÒn as ex msÖÉü :Pmsg) K2 exö if2€
žà# For classes 7þPs we Áð first parameter&UtheirŽ #A, __v,¾ÌIs1  ” 	q
r^›šG F(sigoV> 5sigñ Ò2s.BâÉFunctionTypeòR—�a nicer ešˆ messageu× ÎQ# fp ¨ ×Î  ' yP èÀsupported by á
û  _Tƒõ"""A private marker - used in P4& S6d."""

K CemptïB"""MB V57 * uW . 
Q  óKind(enum.IntEnum­ñPOSITIONAL_ONLY = 0I ÑR_KEYWORD = 1 FVAR_" A = 2 ' J 3  ,  B = 4‰ódef __str__(selfŽ  ÿ‚ðelf._name_

    @properñty
    def description(self):   ðreturn _PARAM_NAME_MAPPING[* ð]

_POSITIONAL_ONLY6  û= _ParameterKind.) 
: ÏR_KEYWORD   : 
) W
_VAR~ u  @ 
) 
k 
° y ” ) p  h  p )  !<A = {c¿ d p: 'posiŠžal-only',) 	/ ´ or keyword5 
ø Æ: 'variadic f , ° ‡ J 	„  O ' L + Å'
}


class ùJô"""Represents a p  in a funcó Á signature.
ö òHas the following public attributes:* Á* name : str;  œ2The !ofG w a† qstring./ *	Ñault : object F 1def @valu� rP ñif specified.  Ip B x ehas nol O f, thisÓ ¥ is set toA `Pt.empty`µ `annota<,  õ  ? fo¬ ,L © )KkindžDvñbes how argument ês are bound tomü  šƒPossible4 ': (m`G 6 % U(`,H  ôL G ;>  ´2"""²ð __slots__ = ('_¿P', '_*	 t …"')? ” w  Ù   Œ
‘/ ê ò/  5 
ü _  += {. è 
� c  ,  Z  R  Z  ê ò 	   ¶�__init__³,é , >D, *,c!=_6 &, B å2try¨‡  Û.Š x } Æ(b )Å  . €except VZErrorI Wraise 1(f'à  {G 0!r}íPnot aÄ&id9.! 'i i§…iD"t Ú 
p  ˆ3elf¼ Iin (ªÀAL, _VAR_KEY‹WORD):
  ÿ!msg = '{} parameters cannot have default values'A ýmsg.format(self._kind.description)9 praise VW –Error(msg& F } =‡ F   ¨ a` 6 =  
' úif name is _empty„ '. ôa required attribute for P'*')g àot isinstance(H [, strtp    must be a(  , sTa {}'J2typI @).__2 &__! È¿ GTypeBü á[0] == '.' andÛ[1:].isdigit(¡ ð0# These are implicit arguments generated by comprehensions. In
—  ð# order to providë ðfriendlier interface" õusers, we recastÇ  N q# their½ T as "š !N"Õ Ptreat$ m @posi‹al-only.K  Sešsue 19611 2if [ Áð != _POSITIONAL_OR_KEYJ
G £ Ù(l     '¯ Iý@passe.s \< Î ¶ or keywordI 8.{}> 
, L ¤ ¬> [ 549NLY É sñ   œZ  Ü.isidentifier·NP'{!r}øWVvalidäJi ^ )u Í   ! =* êádef __reduce__é=�return (¶ B )),ø  &4 .Ì,h*  3{'_ý#':*  V 6 '_ü/  }Û À tsetstatÂ  ¥7ateÉ  ¼ .~ 1 = . [� ]× * i -  "']>‘@property?  Œ  a} FZ  ! = @ 
$ C ¤ F 
' I  ,C 
 ! =  ø qreplace2 A, *,c€=_void, +  ) 7 Š "  Gð"""Creates a custoómized copy of the Parameter."""

  õif name is _void:  !  €= self._ 	9 Okind9  9   	9 ¯annotation? ! E  	K defaultH  E  B Àreturn type(æ  )(æ  , ³ #, / = &, … = )O ²def __str__K K N  „   d”formatted eW# Addv D and– e valueK #if§™  ¦not _empty�  Úz ’'{}: {}'. ( Eted,^  3  2 z &._ )% D ª W§ 	, K / 	 _ Œ T_'{} =Û S repr¨ ‰ )))ð Jelse5_  =8] ^ !ifaú == _VAR_POSITIONALp 	Ë U*' +  L ,elN KEYWORDK 	L M f  Ú 0Û2 ¥'<{} "{}">F OÁ.__class__._Û1__,§Z OhashZ   (¨›X  FJ . Î¾ #eqb †, other)d X   ðá *Trl X±isinstance(9 ,e_ E áNotImplementedž  å ' S v ÷.  2   _	.  &an\  *   . 1  4 `7  A)


ä  BoundArguß sF`"""Res¡ñof `Signature.bind` call.  Holds¥pmapping´aI ù !to  @func7D's pÐ"s.€"HaD `followF òpublic attributes:* %* ] q : dictd  '÷An ordered mutable ” t '6Fs toL '’%s.N PDoes *xcontain, yÆ4 4* s"5 : .P 6The ð object that created this insñ
tance.
    * args : tuple   T à of positional) Ôuments valuesA #kwC EdictB @DictA keyword> A"""
3 ò__slots__ = ('argk á', '_signature Â_weakref__')< õdef __init__(self, 3 ,y !):j  ß  % .e & =% 
# { & =T v ‘@property3  „ u … o qreturn v S G  NB   Q = []m  Ã ò for param_name, - if .% Çeters.items(™  I "if< P.kindA ô (_VAR_KEYWORD, 
 [_ONLY<  @ RbreakÌ     6tryl    0argE6elfz[� Â Ú  - þ except KeyErrorN ÿ	# We're done here. OtherÊ  P   ñ # will be mappeì t'BoundAo.Ì'f 8   å  
  Nelse— 
M1== L®POSITIONAL2  P 0# *áv     Í.extend(arg)% ‰  ; u# plain;  % `  ` & ¶ { soù6´ U = {}T  ö _started = FalswÕ9Jnot o }
¯?in ü A
d f = TruÒ  "   ¦„  ¶ Å¡¹  S   }  *   Šcontinue®!ifv 
K s = ëPEpassA Ç LHÈ{ÇÏ  I B# **÷ 	`      p.update}! j ”©�“   sìapply_defaults‚q"""Set  Àlt values foór missing arguments.

  öFor variable-positional, õ (*args) the default is anD ¿empty tupleZ ykeywordW ?*kwZ Udict.n 5""" Ò … = self. # Enew_ U = [] òfor name, param inE ±_signature. åeters.items():?  B:try   	s ’.append((j ‹ [ 9]))O þ except KeyError[ "if¬ .ŠQnot _„0  � Zval =7 	u  $ %elZ @kindáÿ _VAR_POSITIONAL\ 	(Æ Q 	KEYWORDN 	/{}Ÿ  /se3 Ô# This BoundAàý was likely produced byW  © 5# Sîæbind_partial()s (  �continueM ö	7valê
ª0 = á(@ )¢°def __eq__(5 w, other„!if³ ° 
%—return Tr¯ 0if 1±isinstance(9 ,Cd  ú J €NotImpleF%ed ¤ .=2 ==°  &an6  X    Ú ¹6 +	…setstate ¯ O Ã  0 &[' '. j -  (']‹g~ w {g :�.y 6, 'Y   }i Creprã e  0Ä¥arg, valueÃU · H ™ö'{}={!r}'.format(O ´ß ¥'<{} ({})>/ BÀ__class__.__ÙÐ__, ', '.joinR as))


% q®F"""A € object  es®z†overall ^�of a func²¬ÐIt stores a PÓ ºQ  îBeach
  aco e ÐR �, as well "inð ion specific to5 ƒ 1 itÆÒ  2has1 Pollow‘ð public attribut¸ ²nd methods:I *° ñ s : OrderedDict¯  ABAn o ð mapping of parameteórs' names to the corresponding
  ñ!Parameter objects (keyword-only arguments are inK ¥same orderH �as listed$ Á`code.co_var„ 1`).* ó* return_annotation :z !  – GThe   1foru : � type of AfuncD Âif specifiedj  I I& lhas no\ 3its– \ e, this� ðattribute is setNò`Signature.empty`s ð* bind(*args, **kw
 ´) -> BoundAK] ðCreates a mapping from posi× sal and �‹%toC pÀs… �_partial� #= • ’ 6to • � (simulatÝ '°Sools.c Á' behavior.)A A"""
	 ò __slots__ = ('_ý7@', 'æ ½3s')7 { u_cls = àV b‰_Õ% Ÿ+ ÚA = _	 ^ ÷def __init__(self,ë “=None, *,N­ =E ,Y  š §__validateÍ •__=True):0  """Constru¢/ ÝQgiven‚ 
õ  m Ý P'Mg.  Allb í"op…Y F ž  'ifý    ³  # � †O,redDict(é  Jelse1 i`
(  > ]  #   €top_kindËõ POSITIONAL_ONLY_ (    ( €_default· RFalseû    ’~  ì	  As£  1  T " =+. v  &  &&   v  ' 0if C 4 < × u  , 0msg<o      b'wrong�  Ä ÕG: {} `before 'M ( ý   ¯ ´msg.format(â q.descri�B D   (; z ÿraise ValueError(msg. $el�>� ‚ N¤  ï ! =ã [in (_Îð , _POSITIONAL_OßR_KEYWORD):
  ÿif param.default is _empty4  K ƒif kind_7 s.  2 S# No / ’ for this} ßeter, but the«  E   —# previou> 0 of< Q same™ O hadJ a’ , ´msg = 'non-Å ôargument followsL O ' \P  Ê 4  'D '1 ÿraise ValueError(msg)6 Oelse”p# Thereñ˜ .c  Â 	� = True
2 @if n�"inô2k’duplicate1  %C ð : {!r}'.format(V 6¢  s[P 2] =u 	) T7 ñ = OrderedDict(( .L ,J )\   Ó &s)0aself._$  ò
 = types.MappingProxyType_ s÷ : ýreturn_annotation =  o ²@classmetho(Ðdef from_func< `(cls,  ?ñ"""Constructs SignatureÜ ñthe given python<  J .s  0PDepreÔ’d since P+ ¥3.5, use `T .Ž ¶callable()`Š6"""S �warnings.	 «("inspect.H  È  Œ  ()ñd‡ "é ª  "  W Ÿ /",C ó BionW« æ, stacklevel=2Å«4 _sW_» ‘þ ÄbuiltinÃ(B Äz” Ã º ÂY3 sobj, *,i�_wrapped=n�Àonstructs Siógnature for the given callable object."""
  £return _si< d_from_3 õ(obj, sigcls=cls,9 @  ùfollow_wrapper_chains= 1d)
O ‘@property ñdef parameters(self):  l °   &._' I / ¿_annotationP 
. W  ’ qreplace? G, *,£ �=_void, >  ½ ñ"""Creates a customized copy of³S‰.ô fPass 'í ­' and/or 's µ' arguments? °to overrideb @m in A newz i  7 i‡A is ç Š Ž” 1 = ” ƒ.values(å / .if%Z Ú a _ ¥ `  B typ©&)(� º	8 &= Æ  ­_hash_basižo ’s = tuple~ �  y% À  Œó.kind != _KEYWORD_ONLYœ  > 2kwo … {v b.name:°Œ 1 g  
— =— }™� 6s, ¦ ,6o; no_zLL G 5³)â‡ Ö = frozenset( Ã4 c  P (àÐ ! L)ŸÍ 2eq_Ë w, otherÒ !if  
kX U TrueÁ ñif not isinstance(9 %, E_  ´E €NotImple(%edO  £våB) ==® . ¥Abind¢,�Dargs*§tial=False‘ ñ"""Private method. Don't use directly­¢ ÝG = {`0q = iterŒ . Ê  v_ex = (åparg_valDM  Ë Æ FQwhileŠ
£q# Let's�  Ö qthroughm@posi€ al!¢ Çå correspondingé  g #´× 	 7tryy À       arg_v÷al = next(arg_vals)
  ùexcept StopIteration:"  - à# No more posi$ Íal arguments/ >tryD  H Tparam‘  Keter“  ) —  * ›  ] P ý. That's it. Just need to check thatµ M ÿwe have no `kwargs` after this while loop@ ]break Oelse1if ÿ	.kind == _VAR_POSITIONAL6 ª ã POK, jã pempty *³ P.  Le Pstartc Msing˜  H   "# ê ! ×  ; %elÃ sname inL º 1 ô ð __ONLY;  r àmsg = '{arg!r}Ü  amõ8 is�Ÿonly, ' \Õ  M  ÿ'but was passed as a keyword'@ 
� ‘msg.formae=Ò 
km  ÿraise TypeError(msg) from Nonex _  ò �s_ex = ( ,l ¾@ 
‚¯KEYWORD or‡ È 

 Ž €.default•Qnot _�)Ú#²´fine too - ‹$a N ‚value fo�› #É.  So, lets Þ,  ñ with the currenSw… §5@ {" , n DÂ e,´ #? %in* ÅOtialÔ �  5 ±  N    –@'mis÷� a requirÚ³#: @ßsÓ 3# W�aÚw Ïlproces�À  try:
       Ñparam = next( zeters)
' ý  except StopIteration:&  6 ðraise TypeError('too many posi8 ý	al arguments') from NoneO Oelsee 1if ® ô	.kind in (_VAR_KEYWORD, 
 o_ONLY)D  ­ ò# Looks like we have no]  — for this¾ ¨  J   #Ø # )  P ;H 
&1== %¯POSITIONAL	W±an '*args'-%ºÿ, let's fill it with…  É W# allB(suÿleft and move on toO 1the´^ phas9 t   ÿvalues = [arg_val]T + ƒ.extend(/ 	  W   "s[‰âname] = tuple(N G :   obreak
� µ R  Û kwk ôF!= _ÊèÏv’multiple Æ ï ÿ {arg!r}'.format(Ä  ã  Barg=¸  Ñ )ð< j Y“5`# Now,Ai’ e through –remainingÌÅs to process{ –# keyword” z_¾ * =¤  0in � ·tools.chainJG_ex,‚ ‹ìÓ¡ÆÏ�# Memorizë  atû ±Ra '**­ ¦š  ÀÌ �' Ô ) % †continuem ? ® …± GName[À don't referŽ	[Œ  µ -s.’ 0# Wñly arrive here ifìYo endedH  Àbefore reach -Flast¦ # ÷‹ ½ _ã" =K . 	� >try$Ø2 = ›B.popAN 
D‡1Key]N ("noÀà for this paraûmeter.  It's fine though,
  ð# if it has a default value, or ÿis an '*args'-likeF  Aparav ÿ, left alone by the processing of positionalH  ­arguments. ðif (not partial and ðam.kind != _VAR_POSITIONAL" F   Í .¿is _empty):N òraise TypeError('miì ´a required × ß: {arg!r}'. \N ‘ ±format(arg=— ù_name)) from None
G Nelse§ (if*7== &^_ONLY3  ˆ ð# This should never happen in caseÐaà¹perly built�  G   ð# Signature object (but le£0hav£Îis check hereG `to ensG @corrH äbehaviour justš )‡ ¬� 67 is¢� only, 'M  ‘  'Ñ €was passõ Skeywordð&.ð
æ v S&s[0] =kF_val1 Pif kw½
å _@  ø  ^ S
)  m 2# PÄ h2'**R ='¥ 1 l Ô  ¬  	6 Á¸	3  ¡   @'got«³unexpected ~ WXI  M  q¢next(iter(© F))))Xõreturn self._bound_ï P_cls( ,{ s; ƒdef bind 1/, Z$, Ug """Get a B_ AB², that mapsgw`ì`Ù  '`À A` to* @funcƒD's s—@.  RÊ5s `ÌF !if9 ÚŠ @can 71be ·5"""„ 
+ ý  ¤ ,˜ $ á!61%ly+™ Ð 3 0 +@ 2 Pô� *1,k W=True8ð __reduce__(selfC):
  õreturn (type(self), # b (tupl ÿ._parameters.values()),5  2{'_\ à_annotation': c . 1})
w ñdef __setstate__“ !,  ¶ F " =* [| ]b Crepr^ W ± ñ '<{} {}>'.format… ñ.__class__.__name__,Î 
º tW ‘sult = []å  Xðrender_pos_only_seY¼tor = False* .kw) 6Tru( @for D Am in™ . 
«ù … ß 1ted9!r(1 Ð      0kin  . G    0if  ú == _POSITIONAL_ONLYl  - õ 		Ì  - _elif 2 ] ð# It's not a posir0al-_ å, and the flage q   Ð# is set to '“  ' (there w 7posP ­s before.)H  reó¿.append('/'# 	V i7VARmøOK, we have an '*args'-like so& ©won't needr Pa '*'¢’e keyword	�arguments; »¸
á h íIqKEYWORDF°L û W÷ 
© Á  Ì P [ &=n'tÂ #/edD‘, so add /J  > or  � ÿs list ("foo(arg1, *, arg2)" case;	^*^ ±# This cond	± should be àtriggered once¿ µ  !re-F_â	S 
{oð Þ  �•Ð pñ€s, henceô	� #2 wa4ì 1o 'ž', 
¼ Ï  DU'({})6¢', '.join(? )ë Är# € Ãj_emptyà I2 = ;  VŸJ 
7Ðrendered += 'ó -> {}'.format(anno)

  ñ.return rendered


def signature(obj, *, follow_wrapped=True):F †"""Get a5 ñ object for the passed callable.""": | Sm d.from_' { x 
 )¯ f_main(� a Logic€ Ôinspecting an™ ôgiven at command line — ñ import argparse«   2libA  5r =,  .ArgumentP: 1r()= ' c.add_a  (  „'-%', ¤ help="The° òto be analysed. ? >  p"It sup· srÿ
'module:qualname' syntax"‘ ÷-d', '--details', action='store_true¯ ® ñ'Display info about‰ ˆ ` ratheóan its source code'�sargs = ,  .#s(  btargetl"s.53@mod_ä Ñ, has_attrs,  2 = 6 `.partiÄ 3(":2tryÀ Ccobj = ­ %= ç.
 _ (k F�except E ¦ion as excV ómsg = "Failed toX Ô {} ({}: {})"—[  ™  ±type(exc)._/__H # C U x òprint(msg, file=sys.stderr  $   cexit(2§&if‡
 € Þ—“.split(".Š H ��  @ : 0 in&tsQ 4 0getV . . ‰ ¶ G  ° sbuiltinÕ0Z ö p"Can't rÒ ‹ 8 '?s."1�  â.UÊ p !'Tß ª¼)m+ iOrigin+ 2getS © §Nule): iCached: $c '__6  if�3 isó µ  Ž iLoaderT Crepr… A.__l!  Y Ê  @ *¼… Ã, '__path__'Ì (  p 2Sub/ € search 2 	  .L Ñ JelseÅ 	j 1__,’no = find\ c
Ã 
\  O  ûÐ  ƒ   Ü ILineË  ˜3no)D* 2\n'‹ 
P H àgetsource(obj)ñ)


if __name__ == "__main__":
     ð!()
"""The io module provides the Python interfac ðo stream handling. The
builtin open functi9 ós defined in thisg Q.

Atc atop of ò I/O hierarchy iƒ òabstract base class IOBase. It
_ + Vbasic­ S to a® ñ. Note, however, tha€  rei ‘no
separa¶ ð	between reading and writ t Ás; implement7 Ðs are
allowed| ñraise an OSError iç ñy do not support a give;� �.

Exten} ì  ¥ 3Raw Ðwhich deals s† ay withEµ 
µ ¢of raw bytÂ¡FileIO subZ6es f $to'
a Û óOS files.

Buffered› • Ž b  5Eon a‚ ’% (j )Ê&s
… $, V @Writ¯ @Read  “ bWPair o 
ž  at’ÆQable,Ä
  ? õboth respectively.Ì dRandomþ 3s a] Ç r( daccessz 0. Bh IO´a eõ Âof in-memory� 
cnother×�b, TextX,îY šAenco  Ë "de 3
ofi sso text.G PWrapp<>ebRs it,© @ »Eext
ó è   Hc4 (`‚¤ ð	`). Finally, StringIO
isõ = 2forž `

ArguF ®FDpart ¥Aifici,‘Aonlyña? sþ  !()ø Â  ndÐ õo be used as keyword 7 ð.

data:

DEFAULT_BUFFER_SIZE
-Aþ€ containÑ ‚sdefaultC size b˜ mP#'s!  edK  ãj., ()š  ¯eS 0 !lkM `(as obs ðed by os.stat) ifK �possible.Äp
# New _ plibrary¯ Aform¯ ðo PEP 3116.

__authorð ("Guido van Rossum <g !@pü€.org>, "r  8 ò"Mike Verdone <mike.v ¯@gmail.com8 òark Russell <mark.r ¯@zen.co.uk8 ñAntoine Pitrou <solipsis@p O.net7 ñmaury Forgeot d'Arc <a /fa« óBenjamin Peterson <b !")S!llPq["Blocküö@", "– P_code 5 
 	(",g"� " R  Y  €Àse",
       ö    "BufferedReader", JWrit �RWPair",
:  A PandomA ¦TextIOBase PWrappN 	< ðUnsupportedOperation4 …SEEK_SET 5CUR  END"]


im: D _io �abc

from    ÿ(DEFAULT_BUFFER_SIZE, BlockingIOError, ‹ 	é ð `open,  ð_code, FileIO, Bytes	 1StrX *, [M  ! j1 h [A  ðIncrementalNewlineDe— 2r, …ws)

Open   = .Å ð& # for compatibility with _pyio

# Pretend this excep¦ÿ was created here.
Bð.__module__ = "io"S  s tseek()
êB = 0 rCUR = 1 pEND = 25 PDecla[ó ABCs in C is tricky so we do it� ñ # Method descri¶ @s an Pfault!l> Ò  s are inheø!d Hòthe C
# version however.
class æb(_io._ a, meta á=abc.ABCMeta):øQ__doc3 . 
U 2RawL X  ,o L ' O eT 
 Y 
, ^ g ì®  V ( R Ã ’register(^0)

3ktEin (m� ¾2RB> pX 0.‹ ~ Š îÒ cL   H Adel S R

trys0_iošðort _WindowsConsog
€! Iûº: ’pass
else J L ð<)
# Copyright 2007 Google Inc.
#  Licensed to PSF under a Contributor Agree‚ð .

"""A fast, lU  we ñ IPv4/IPv6 manipulç€ libraryÉ Python.

Td 3s u~ ie/poke/E eZ Ò^  addresses
å‚networks˜ C

__ÄV'1.0'Dðfunctools

IPV4LENGTH = 32 6 4128¦An QValue‰( þ  " A rel00to Y± T."""
W qNetmask6 5 W nC W sdef ip_l Ð(address):
  ð  """Take an IP string/int and return ðobject of the corr ñtype.

    Args:
   £address: AS Á or integer,C 3IP % õ.  Either IPv4 orF   6( ôes may be supplied;S ÷s less than 2**32 willH b´ °nsidered toF n £by defaultÈ Ró Ë A2v4AÒ  È EIPv6 < Gaise; ÒValueError: i:*õ ò* passed isn't e!a W a v6¾ 4 i1""" 6tryp© Ó š (5 )- ƒexcept ( ™ –, Netmask )W  ¤ v n n <rI “ ó('%r does not appearÆ¸6 ˜-1' %ù  �	 ô

def ip_networkÃ ,²sct=True%hž %( $jNJ$ $…! D. Oriô has host bits seèG½ OLv KW(OW îTrfaceCLoüL( qkAInte@O Q*Àisn't either€ a v4 or 56
  ‘address.
 aNotes:  " òThe IPv?Interface classes describe an AC õ on a particularF ð$Network, so they're basically a combination of both( X H Cand L ˆ · 1"""& 6try½ `returnÀ 4À (ï )/ ƒexcept (Á °ValueError,h Fmask )Y Bpass/p 6p Efraise • ò	('%r does not appear to ˜"IPòdIPv6 iÃ1' %ý  à	 õ

def v4_int_to_packed;	À"""Represent> b as 4 2 ² bytes in nó (big-endian) orderÁ7ArgwL A: An¸ Tger rm (aÜC IP 1 M RùP  Ç   H + £ ¯ ¨ R�Z ‹A: If¶i °is negativew•too large †ªÈ Ö	Ç A.to_¾ ™(4, 'big'Ú�OverflowÕ¸ óG"² 1forG3")
6%$16z· L6./16Æ±/16²O6²�_split_opf`al_netàÕQHelpeE2 Ó-  �<0ÿ¤ if needed ¢e = stre .S 3('/¦aif len \) > 2¢f ð	("Only one '/' permittedGT%r" %
 Š ¹`_find_ ‘ess_range eÕãð"""Find a sequence–0sori �deduplica CIPv#¤ {È es: a listI 5 t object}WYield]ñA tuple containingŽ@firssgd lastâl4the¹ Àe.

    """
ð
    it = iter(addresses)
 @firs !la snext(it Áor ip in it:.  2 Ðif ip._ip != 7  6+ 1#  ' ayield _ ,' A     “ p  K  ? ð

def _count_righthand_zero_bits(number,  )� @"""C0 R the   @ of 4 ' 1 on O  P q side.
– BArgsH  ³ ? Ñ: an integer.&    s —: maximumi   A to µ V gReturnY Tœ  À Î T 1"""Œ $if} F== 0¼ rt ó (  @min(£ B, (~ß 3 & Hò-1)).bit_length())
‚£summarize_Kq_range(Óë~S- ± a network / R give}9 A and'C IP Y #esß vExampleÐ Ÿ>>> list(� RIPv4Aêá('192.0.2.0'),ÿ  ³0...  C b130')) ; F õ  #doctest: +NORMALIZE_WHITESPACE‘ [q N$´ /25'),  h128/31Ö ( �30/32')]Ø: C <0 or 6 i²Âþ ºA  
  1 |@ û Aoderatorìæd] U(4|6)Ndobject*GRais(–TypeError; ¶'Ifï yJ ‹ are not‰ 8  @  ¦Æsame version1OValu˜ FŽ 1 isŒ €greater ô¼ R  š – n <ÔRO 4™6^=(ø ¥(isinstancÕS_Base)«» u  1 xlast, _0 ) + r  —#('Ÿ ýymust be|,>"s'}"if\.ï � ñs 0"%sÂ   êo­Z" % (æ  À  · í
‘ ! >Ç€ ó0('llç õ 	åb "')²î F== 4c @ip =4?à
    elif firsót.version == 6:
  ñip = IPv6Network Felse# óraise ValueError('unknown IP V 1')
: ñip_bits = first._max_prefixlen#  F_int% !ip Clast   #._ RwhileQ  0<=     ¦ nx ñ
min(_count_righthand_zero™ (~ #, ¬ !),}  (c ' -{ õ+ 1).bit_length() - 1)A  neÖ ?ip(h  1 - ¤ )/ •yield netA Ÿ ‚ += 1 <<4   'if� 0- 1ÎÆip._ALL_ONES É ðbreak


def _collapse_addressesAeernal( )A õ"""Loops through the % #, L àing concurrentÉ rblocks.‚Example:  ‘ 2ip1o4oö ('192.0.2.0/26'?ip2* ,64+ 3+ <128, 4, "92, m3
@[ip1D2 3 e4]) ->> o  [IPvé F4')]ôThis shouldn't be called directly; it is 7viae ‹×C([])‚BArgsÒ ~Á°: A list ofü¤ P's or "'s¦ gReturnJ ? p depend(õ on what we wereÂ cpassed° 1""" 0# F?R merg+ 1to_ ! =º ²1 Qsubnex!{} 46 ¢ V.pop(uRsuper" Dnet. " PexistÏ #= s T.get(* K 5if , gis NonR �? [; 0] =A½    (elC ! Ç  " 0# M ‚„secutive• F  ( 4del n 	"  ap¯Ï ñ
# Then iterate over resul	n8€s, skipp„subsumedv l  O! =	 0forð ³ in sorted( .vj3s()Œ Ã !ifò 1notE PSince¨Sy areT ,7 .¤ ú! <N —  n   #l ‰a given. Œ p.broadc³X" >W  
«  ^ rcontinuÛ  
0 Áé y #es+C"""Cæð a list of IP obñjects.

    Example:   õ!collapse_addresses([IPv4Network('192.0.2.0/25'),9  =  9 1128; _]) ->? 	x B4')]¿ FArgs¼ ³ ÷: An iterator of ‰ 0 or 6Ñ 8 obgReturnT I Dthe #dH _(4|6)L GaiseK ðTypeError: If passed a list¤ Ûmixed version— 1"""* â as = [] 'ip 3net  °# split IP 6 Ëb and nÊs& –for ip in% Pò	if isinstance(ip, _BaseA))  ø - !psb ”ips[-1]._Í U!= ip 
8  < r*$ T 2("%I   Qre no! |Dsame$Q" % (Æ  D   ¸ ’ )))/ Öips.append(ip !elÌ Ò._prefixlen =Á 6max 
Ç 3 ¶ m ð  ÿ „:tryÄ  C	.  ó except AttributÏ	U ' 
E qRisz9 fŸG ÐG|“ H  Ia# sortQdedup ±  Âed(set(ips))Ìô# find consecutive”p ranges¦áorted sequencec âsummarize theml Gf ip ë°first, lastN _r ˜_f ’ 
 ?Ps.ext)i 7 Z Ñ rL$ _02 Áes_internal(\ ! +öÁ)


def get_Ó_type_key(objo2"""¤ð a key suitable ß  Y°ing betweenV  µP k ûÇ?Á# av Q ^ °by default;bAy'reeðfundamentally different so' @ expE2ionä ä Œ| NP') <=Qj#4'%°doesn't makùñ y sense.  There¸ ðsome times however, where you mayñ* wish
    to have ipaddress sort these for you anyway. If @need9 €do this, M qcan use À function asO à key= argument?  i aed().
= QArgs:
 ó  obj: either a Network or A¥ qobject./ eReturn< °appropriatet ^ 1"""- ó	if isinstance(obj, _Based )‚ 1  rW  ‹ r._get_n† qs_key()M /elO ¨ O oN q €NotImple'ãed


class _IPU  ¯ :4‘"""The mo*) .ê ž â__slots__ = ()1 @Aerty" ÷def exploded(self° 2"""Y½Ðlonghand versÕ!of 3IP É  ç�a string„  ^  ×  _ #._n `_shortQ B_ip_5 £ @comp›¥ U ¦ ("tr	/ reƒe_pointe- 5‘Sname #2 S DNS 6 YFthe ?f, e.g.I  :6>>>˜C.ip_kã("127.0.0.1").` ’ Ù >   "'1' `27.in-? i.arpa'% g ¯2001:db8::i  ”  P8.b.dÂ ¡ S2.ip6› œ  É Å   	Eò 9 «2ionÒ\õmsg = '%200s has no2òspecified' % (type> ,òŒ Zaise §“Error(msgh Z¥_check_int¹ ,2m$if F < 0ª  o ® °"%d (< 0) i° ±t permittedytn IPv%dF ì >   r± >UValue¯  å  Pess, ž #._5)ñ ž >% �ALL_ONES« �>= 2**%d° Oåmax_prefixlen,> ù  ð < ºopacked½,9—ected_lenËN  s = len( P& )!=L Sßr (len %d != W"À raise AddreóssValueError(msg % (address, 	 _len,
  �expected9 ñ self._version))
J Á@classmethod òdef _ip_int_from_prefix(cls,  Qlen):-  ‹ ³"""Turn the  ò length into a bitwise netmaskx  : FArgsH   ` @: An@ ^eger,[ .E kReturnH = * 5"""µ r6 ð cls._ALL_ONES ^ æ  #>>Ò  ò s 0¸ 0< J ",  
-± Y + jç -¿ .^ +iÅ in expanded…bformatÌ  rŽ ?|Kaise< ÇA: IfÔ QinputÎõrmingles zeroes & ones–¢“trailing_+ ñ= _count_righthand b_bits(
 ý  3maxêì  ¦Rlen =-	( ; - § Ë @lead¾  à # =	? >>1 Call_- V(1 <<{ U) - 1Y 9if \ 4!= ; 
L_bytesº E// 8T  î udetails¬ A.to_C (  {y 'big')7  «B= 'NÜü  pattern %r mixé'; r> 0÷‰ g ¬d2len½‰ó report_invalid_
� G_str’Á Á%r is not a < ¯4' %  : Â ¾ ø 
Å !) ÏONone¬ 	Ñ 5 bstring¯  0lenw ± 2"""µ"	C¢a numeric K €  à?	a S: The5 ö to be convertedE y òm.@5”…1#b Tows a%À +/- as well psurrounœ¶ whitespace:ñ
# so we ensure that isn'tÊEcase} !if0(Hã.isascii() and£Å¢.isdigit()ÏÀ         clsó._report_invalid_netmask(prefixlen_str)
  Etry:   ( o = int8 úexcept ValueErrorF ?clsŠ Öif not (0 <= † 1<= M Emax_ )n .freturnh 
Á@classmethod Cdef w €_from_ip@’ing(cls,  � @"""TY #a yA/hos‚p stringU3o az r length~  JArgsÝ c ^: TheT ö to be convertedH Rà K  An~ šeger, the„ .= Kaise< NHñ1 IfF �input is¿!a wª N á 5""" q# ParseF /õlike an IP address.9 ¶sip_int , ±v(FøÀAZ Ö d  ­ zQR 1 °# Try matchèÀ (this would®ö/1*0*/ as a bitwise regexp)â P# Not!atðtwo ambiguous cases (all-ones and  ·zeroes) are— ptreatedr fK	r:uqIU I=intIBFpassY1# IªÓ Qbits,» t8u/0+1+/ 9vinstead‹ # ^ï…ALL_ONESó Ô ;O`split_ÔZK  :essLñHelper function to p3. ÷ of Network/InterfaceÊ:ArgN8 ¯: ArgumentB I(G ,@v) tupleŸ
ã`a packl4 or†±Pif isçAance]  ess, (bytef7nt) šÒ ˆ + ”	$vZb º [ ’# Assume Ùa)lP Å ðany object representa¦×  © t# which¤sü   `format—#IPI"I @ â B = _9 opd %alÚÐaddress)

     ð# Constructing from a tuple (addr, [mask])
/   aif len •ess) > 1:  ! preturn > 5ess 
 ñ	[0], cls._max_prefixlen
/ ödef __reduce__(self)d I   ò.__class__, (str+ c,)


_€ ñ_fmt_re = None

@functools.total_ordering
J ó _BaseAddress(_IP   "):Ÿ ò"""A generic IP object. @This N ñ#contains the version independent methods which areàused by singleO Î 1es.! 2"""o â__slots__ = () ??int<(ip0 #eq/ w, otherr6tryãor._ip ==5   ¡  &  Band ²3  cÿexcept AttributeError‚ èNotImplementedÏ lþ Ï ñif not isinstance(ñ ,üÿ  È up     +ifÝ !Ý ¾ ‚aise TypÛ P('%s "  !rež !of45sam9_' % (^ „   cñ PŸ 6ip š +ip• ¸ C  Ç/ <Ó RFalsen€# Shorth¿ °for Integerÿ itî  psubtrac !. " isæ Í õ# meant to ever supportB /> 0 of  �î?add¿ð?intçþ "zA(int	2) +2	‡?sub™ o-™  Creprš ã q'%s(%r)r
ï p.__namerq
ñ tW 2 @._stt_qD_ip_D y)O Ohash§   E(hex„@ A 5get2keyªùð  #._­,ÎF �0elf�  Œ š¦Vforma™(fm€A"""Rƒ ôb as a ; Bted ;o \ S1°ed presentai` typesSî À's': returnsó the IP address as a string (default)
  ð'b': converts to binary and return? ³zero-paddedK A ‹X' or 'xH `upper- ïlower-case hexZ 1n':Í @sameÇ Á'b' for IPv4G %'x %6
’ 8ForÆ  t ñpresentation types,Z �alternateX µm specifierL 1'#'j  TPgroupF!opH õ'_' are supported.7 6"""� 2# S" ;l eatting1  if not fmt2õ fmt[-1] == 's':&  ´•D °(str(self),< )u ôFrom here on down,ª  = u 'bnXx'[ ƒglobal _6u_fmt_re ,if Š is Nonež  im :  ´ V ÷ = re.compile('(#?)(_?)([xbnX])'Ç <m =y ×.fullmatch(fmÊCm‘ /òsuper().__format__= á 
$, èS _b¸A= m. 's(� ³# Set some XsP  if‘> K= 'nÇ0if ¸`._vers–J== 4»  : ‡‚  þB # B $ist ÎEipv4|  9 ;els›  O �x'  # HexÊÀ L NÉ bÉ ƒpadlen =Ï Õmax_prefixlen’ Ž 7 	V // 4Ë%if“
!D 3+= 
  8 I - 1< Ú= 2 0by&0x; :0E(inti%'{T 2}0{| !}{ Ting}{f}Êð
@functools.total_ordeŽò	
class _BaseNetwork(_IPA¸  )³ À"""A genericÚn- ‚ object.³ @This U �containsæcð
independent methods whichÇ¬ƒused by b sÒÎÂdef __repr__¡  [/±'%s(%r)' % " 1.__’ À__.__name__, )MX /stW 
6/%dV ¡ Y,~yX Rhostsn ­ @"""GP úñIterator over usable 6 T in ag ë kóis like __iter__ except it doesn't@ƒ° e C  £„roadcastª'esd  t )   = 4 = †.  À)
        bróoadcast = int(self.br ³_address)
  õfor x in range(network + 1, 7 %):0  7 ayield Z Q ¡_class(x)
* Ádef __iter__ƒ B c    M ž ‚ Î *Ê  Ù Œ Î sgetitemÑ 7, nH Á ¦  Ô /šif n >= 0…  ­6n >®
(  ã óraise IndexError('r out ofý'x5 _eturnçÜ F + n4 Jelse{ an += 1 Q   &if¨  ? 3 < M 
;  , ¶ =M¸ ˜ ©%ltÖWotherÚ gáot isinstance(" ‚, _BaseN‚0 ¹ :áNotImplementedo   #ifT±version != T #._ 
CType¼p%s and  Qre noÂ“the same D U' % (t  x   Á,{ )ÇŸ —À¦  ­ û  [ .) " <l  ¥ z Imaskr   j 
 ! b   Z r– XFalse¡/eqø?tryp Îª, =¼ ›x s? ,&an1F Ó0netã )‚   B Ïò except AttributDÚ ¯Å Chash)êU  (‚ á 6) ^†� \ ƒcontains` �¢  # always f¾Ð if one is v4l ùý  !6.\  3OVP e  0 Ð %    ò# dealing with ank ¯	m #!m ¬Ù iÐ# address
     ñreturn other._ip & self.netmask %== Àwork_address  

I Ðdef overlaps(? ,Q !):  # ¡"""Tell ifL ô is partly contained iˆ 5"""9 ¡  V  • � 1 U or (2  o / ”broadcast² 1  5 <nete  N d  3   7 m  9 2)))&ñ@functools.cached_property»  EE NGÖ ¡_class(int. &1) |`  «  ? 1hosû· 3 € ®  i1) ^¤._ALL_ONES6%ïwith_prefixlent ¡'%s/%d' % ! ,m G n K à l sl D i Jj E k 4num=e±Õ Ð"""Number of K s7ÿthe current subnet.¦ EÉE) -  cS) + 1$î© æRW1# RÁ“ing bare œÀ objects (raÛP than� õerfaces) allows for`# more‘@sistê ðbehaviour across ¾ k %, í J ˆ  anØ�dividualP9 5es.1 ômsg = '%200s has no associated2  êiBtype�%,)F ÿraise NotImplementedError(msgP ]	m& © ®ä r_exclud� ú•Remove anÉ òfrom a larger block.Y  £pFor exaÅ :    s s1 = ip_‡ö ('192.0.2.0/28'/ 2/ K1/32/ Qlist(c . 5essÜ   U2)) =m `   b[IPv4N5�  ^ /,  }2/31'),K . o4/30')K v8/29')]& orF 68 À1 = ip_netwo÷rk('2001:db8::1/32')
  üaddr2 = ip_netwo1 ;1282 Plist(7  1. ±ess_exclude Y2)) =c  n [` 
,0 � 2/127')0 _4/1260 _8/1250 ?...¥ Õ8000::/33')]
4 UArgs:  ò other: An IPv4N}0 or 6 öbject of the same type.Y kReturn\ ´An iterator< ŠIPv(4|6)Z ù s which is self¡ aminus § p Kaiseo ÑTypeError: IfI B and; @ are„ £differing 6	l °  versions,#if= “is not a �! o
ŒGValu€ ²  Ò  : ñcompletely contained by¥ Ö 5"""� !ift  #._— 2 ==’  
Ír$ TA("%s  !reP ÄV U" % (x    † ,{ &))ö¤ ±isinstance(ö s, _Baseä)¤ ` ™ Q s  °.subnet_of(¡ i –2('%Ç‚`in %s'ÿ P ,�)›!== Ê ôð# Make sure we're ÷an 8=W?~  Ü€_class__² /¡ .C _½‚ » e ¨.prefixlenÈPs1, s€ GV&s(£while s1 !¤ V%s2 
7J  1ž — �yield s2|� 1D Ž  ; /ele 2e 1e 2e *seÚ  { ð# If we got here,ðre's a bug somew à 7    ‘Assertion­!(' € perform›É ‡=: '·  H  ¡'s1: %s s2 ë 
 ?' %A (säc  iføx
À– Ið = other:
        ‘yield s1
 …   else:   ð# If we got here, t à's a bug somew .7 ñraise AssertionError(' ù	 performing exclusion: '@  {  ¡'s1: %s s2 oŠ  
 ?' %= ‘(s1, s2, 7 1))
3 ô
def compare_networks(self( B"""C* ò two IP objects.K  ¯ ðThis is only concerned about9l qison of qintegerŽ  C  representa9& œ Ñ addresses.  m ‘means tha` F ðhost bits aren't� PsiderŽ  t all in t¯ €method. é…you wantH #to³ %e S  , ' õcan easily enough do a9 Ð'HostA._ip <  B '+FArgs] ú ™F: An\[kReturn3 ID`IP verHs1 ÀB andë jtsame, rH «  | a-1 if 9 <7 
œ ²  eg: IPv4N&ÿ('192.0.2.0/25') < 1128  	n  , 6J ð2001:db8::1000/124P 2  ¦ ?IPv6 26 	4 0Ó "==Ô 	 Ó  ƒ  ==¨ ò ;4')M œ Ò +==3 Ó 7 	4 ¦>Ò ‡/ >Ó 5Ó   s) >¢  4  0  R0Ýb  Type4ié×are different)5"""’ P# doe²is need to ›ba Valu^ ?0 #._O# !: 
L § A('%sy  `re not�@the }¥ type' % (q +  ‡€g#Ÿ‰  Õ Qbelow¦¦ Ò A_A æ. 9  ” ,& -!O �O N Ó „ Ú  á HmaskÙ   Ñ À   return -1#
  ôif self.netmask > other :)  0 …return 1  !0
 ðdef _get_networks_key(_ )H B"""N ò-only key function.H  k Rk ós an object that identifies this address' s A andŒ  D Ô 0. T+ e  7 õ suitable "key" argument for sorted()I �and list. '()§ 5"""& ñ ¥._version,_ _°   u)÷  ?qsubnetsD ò	, prefixlen_diff=1, new_ Z=NoneXCThe A ð which join to make the currç ' É "In   as) !at· ¡ contains «eone IPð ¥ .� ‘len == 32BPIPv4 J [
" 5128B  mÀIPv6), yieldîðiterator with just ourE® FArgsS ì+Ñ: An integer,Ù aamount + u lengthŒ  E ó	  should be increased byB 0not! kset if@  g‰lso set.& $  : ³pdesiredÜòœ w mIbe aF ó	  larger number (smallerC )0Ôƒexisting 
�  Û 0 T
Ñ Œ ©
Ž ~È³of IPv(4|6)ËsÊ[RaiseÌ¢ValueError!±ˆ Atoo ð  e  Ú E  OR¨  àI  ×�� are both² X  	E  	 2thanbl —C µumeans aË ² `«
PF_max 
ŒZ ' 	„ ®z j  if�E  ã  ç d
N 
' <'
-  X rá ÓS('new[ Ûvlonger'r : #if' úO!= 1b 0can¾  ¢‡B 
óq , =-ê 	:: :< 0§ 2 é ß7> 0™ †c‡ + +%	˜ 	= À > self._max×_prefixlen:
  ùraise ValueError(  ) ': þ length diff %d is invalid for netblock %s' % G  K 6newˆ •, self))
r Àstart = int( õ.network_address)* 8end( •broadcast* E + 1. …step = (X �hostmask)' R) >> ä @len_à : Ú wW ¡ in range(¨ p, end, \ )S`currenÉ Å °__class__((  Ì  , 
 t )Ù  &cyield F ²def superne,² (=1T W=None– e"""TheB ô  containing thek  Ä o.t  ‹ JArgsÝ µ )@: An¯Qeger,L aamount + 8%ofV Z  # áû should be decreased by.  For example, given aH 4/24º k and a† of 3, aÿ OwithG  1G   Ü‡returnedR fAn IPv‚ hobject6  a5 oA: If..\len -Á û< 0. I.e., you have£a negative< v.( I  OR #If1 ûCžá are both set èÃ &Œñlarger number thançÌk * (' ]means�PsmallL '5"""Ä i>WZ == 0´ÌgÛ'if… Ì @not 8
< 
' >E .n 
-  ÙQD'newú @mustæŠshorter'ùi�O!= 1c 0can¿  ¤H¡Ïq , =Þ ' -$; ¯6 L À­
; <ª -Ž
L � sis %d,  U%d' %Œ  «  i½ X›F.Ô	R bÙ9 º' &#ne~#<<~)),O 	.	 7‘@property  'ðis_multicast(self):
     ð("""Test if the address is reserved for multicast use.

;   …Returns:   ÿ A boolean, True\  aQ s .C ñSee RFC 2373 2.7… wdetails 5"""7 r‹ ô  (self.network_] 6is_Ã 5and6  °   6 Pbroadæ 8 )÷ Â@staticmethoH ödef _is_subnet_of(a, b)6try  n Ñ# Always fals!0oneuav4 and‹Qother 6õif a._version != b 
f  j ñraise TypeError(f"{a}d Ò{b} are not oþSsame Y )")$^b[] <= a c � -b.d  >A   ò except AttributÉ 
ê æ °Unable to tß›Ö containment : ™  §f"between 0" ñR  í ;!, ¯ô2"""3is ™ Ø"a D  ~> .Ï  ] .]  p “� 3per" )’ F ” À  , y $‘@propertyG ¢ 4is_T¥
-†Y wÄEIETF•fƒpwithin xþ¨ © r IPv6 NNo range€%S  9.3W	¯link_localY�  ß A -A Y/Y 1perÄG4291W å ¶ D ý  ˜ Ù  ³	¢ ª69 8	qprivate Ž(is al&t@ Õ–$=	ï ôiana-ipv4-special-registry or  6 yÀ        retuûrn (self.network_address.is_private and
  4 Ÿbroadcast6  !)
4 ‘@property Ñdef is_globalx !):  ^ ó"""Test if this Š   óllocated for public ² "s.j  C vReturnsT   ò A boolean, True` e_ õnot reserved per“  ? ôiana-ipv4-special-registry or  6 — 5"""S r£  s DhÇ 1!un| Ofied6
	Ö 5 Œ # is{Gthe J 7Õas defined inÞ  1çRFC 2373 2.5.2{  Î |	s €: „	�loopback‚ †	P$a 4 Ü WT  Y3} YÄ V7 ò)

class _BaseV4:¶0""" Ã IPv4 object  øThe following methods are used by4 ñs in both single IP[ esŒù þ & â__slots__ = () ±version = 4 ÷# Equivalent to 255.  Óñ 32 bits of 1's.7 �_ALL_ONES[ ò2**IPV4LENGTH) - 1Ð_max_prefixles & E q# Thereý àonly a handfull €valid v4ß ómasks, so we cache them allJ Ðwhen construcà(see _make_netA 3())½  _J B= {}±  �à_explode_short� ¬_ip_string¼2str F @Úž W 	Š Šcls, arghƒMake a (Ÿ ", <ð_len) tuple fromû ` givenC Dumen\ n1Arg v can beûà- an integer (Ç_ r length  B B- a ð @ rep nt¬3 ¿ (e.g. "24"> à ? s0J  È �    ifì &tin cls.ÖÅç . ð isinstance(arg,ù m %   Àlen = arg
    ðif not (0 <= prefixlen •cls._max_ 9):
<  ) öreport_invalid_netmask(< 	; NelseM >try  e ã# Check for a \ 3 in± p length mg  <   † 1 = ®  S_fromß Í_string(arg)D ‚except NÕ ¯ValueError® aor hos º ±dotted-quad¸ .u  ¹ þ# This may raiseƒ 8 à  Éñ  /ipí [á= IPv4Address(3hip_int3Ý
30 K Ô_cache[arg] =»,¹5len÷ breturnŸ< 
( Á@classmethod Xdef _š ÆRcls, è µ@"""Td Òthe given IP 2 € into an @eger”Â comparison.€  “JArgsøh 3: AL  , a #IP� < Rä ? 0Theˆ F 7 as† ;  ÿ:  �3 ifv ‘ isn't a �Ï 0 V 1"""H Ù 
ˆ 
â |? o #(' @ canF¦be empty')0ƒoctets =˜ ¦.split('.'4 ifÂ(* o) != 4€ Â"Expected 4 >  [S%r" %o ‰ ^rAint.	’bytes(mapñaparse_W ,^ w), 'big»  Á?excÀ &%s± E(excµ ) “ R NoneKû¤  µ ¨  ß
÷`ConverrdecimalÑ  îöç
 [ ê¡number to � E ðL  +r7 ì b:å bE è Ætctly a â A‡[0..255]^ ô J Û  ÷z 0("EÞ< ñPpermiÉ"Î±# Whitelist	ðcharacters, sincevö() allows a lot of bizarre stuff×— ¤ €.isasciiC "nd�  wdigit()ü Ç ð msg = "Only dec÷imal digits permitted in %r"
  õraise ValueError(msg % octet_str). ñ# We do the length check second, since ðinvalid character e\ K ñis likely to be more informative forK Euser8  ifz (� U > 3:  ×  ¿ Æ= "At most 3„ 	8PHandlðading zeros as strict
 øglibc's inet_pton(I0See6õurity bug bpo-36384Ì &if„¶ != '0' and Q[0] = )Leœ ore not7pConvert¾ôinteger (we knoww ar"6galú ¹–int = intÉF, 10' ü  * Z> 255ã ´ "O¯Q %d (/ )í "Ñ6intg creturnRAint
}Á@classmethod @def 
Àing_from_ip_½ Rcls,  )  ð"""Turns a 32-bité  qinto do‰1dec¢’notation.|  ÁFArgsO   d D: AnL  , …§IP address? RÕ B FThe .   a¬ ng” &""56ô'.'.join(map(strò.to_bytes(4, 'big')))Þ I reverse_po8jr(self?Â â - S DNS 1 F namOIPv4 ñ This implementsL Ò‚ describ·RFC1035 3.5C
î ¯ º0s =7´ ñ.split('.')[::-1]- °"Æ _D �) + '.in-¼b.arpa'‘@propertyI  -Òmax_prefixlenv f  @)._* O  Ê /ioI $ 1


 aAe¡(_BaseV4, 	  "):o Á"""Represent© manipulate gl‚3v4 7 0es.gë ø__slots__ = ('_ip', '__weakref__'@q_init__,û…  ~ W     L u`ess: AÊ ½$orV$ rÁ   bÝ  L  @Addi±ually, a’@ canÈPpasseoÛ 5   IÀ'192.0.2.1')Ä Ë3221225985).C 2or,(Pgener‚ 
! À IPv4Addressû(int(IPv4Address('192.0.2.1'))) ==
  . 
* uRaises:  A ` òValueError: If ipax ð  isn't a valid d   .Y 5"""U õ# Efficient constructor from integer.. ãif isinstance(Z ,( )¨ óself._check_int_+ 3 )R  Õ - Dip =­ 	 freturn¿ 4# C© 2ingª �a packedA ² _bytes´ N · ?, 4º @int.5_[ é z, 'big'6 Ñ ðAssume input argum��to be strç õor any object representation/p# whichÊPvertsšÀo a formatteQ Õ œ`_str = º ³ ‘if '/' in] * 
ìr¨ š�("Unexpecw A Q%r" %G 6essb  6P —  | )	‘@propertyü 3def(A ÙÛ"""The binary7„ of this‘ .¥1 v4Š 2to_` O._ipˆ 0is_›Arved- � Pest ix ew ô is otherwise IETF A µ! Rÿ A boolean, True[  ¡within the+ q d &×Network rangew   b   !._5Uants.÷ "_nM ªò@functools.lru_cache(
 Å¯is_private<
´ =`allocagCfor @  … sÍ CB*9perD÷iana-ipv4-special-registryu B 1anyß  F0netŸ ¯   UÏ TsxVaglobalv ‘å u O not� Tublic€ A and+  4 .¯ìÑœmulticast~  œr Ñ@ 8 us›Î$O  ÁSee RFC 3171‘hdetail?
ÊÀturn self inñ# self._constants._multicast_network

    @property ðdef is_unspecified(I !):  0 ÷"""Test if the address is 5 .\  0 vReturnsA   ò A boolean, TrueM iF  U J a Õas defined inŽ  M §RFC 5735 3w 5"""% rƒ 1 == 	o _Ð À �loopback$a 4 Î ©  	mT @per G3330Y .in  ¯link_localÐreserved for A -A ­ $L  7927Y 1ink™ ð
class IPv4Interface( Aø"):* 8�__init__,ë; \t, mask †Qsplitu€_prefix(% Bess)X  ào .d  )è ª.Ý! =µ Në(W | þ ), strict=False? ¡ N  V   
k ³ 4lenÐ /  Ç ý@functools.cached_v@hostc >5½ †  ¹., ] |3str{= ¡'%s/%d' % ^  ._ãng_from_ip_int Eip),å  }
 bÝ ¥� #eq€ w, other‡ Ôc_equalšA=.__9 � $ifF; ú	is NotImplemented or not' 
lA	„ b ?try. é Î 4Ò €> úexcept AttributeErrorP d# An i;ð with an associaÂ f  Ü  OTU`  }�# same as7 'un9 Ò À. That's why> [ hashC Qtakes  extra info– ©o account.1 3 dlÞã l|â8 n â:  	á
N™ 
M Àtry:
         õreturn (self.network < other 0or
,  	4 +==5 õand address_less)D õexcept AttributeError:  g ô # We *do* allowI 0es W ûinterfaces to be sorted. TheG µunassociate� ð  is considered � P thanl  \ .K )aFalse
 Ádef __hash__@)Ä .   ( a._ip, 2°_prefixlen,n  {s_:2)))m ò__reduce__ = _IPAZVBase. , •@property§ !ipf ¡ CIPv4K "  § r F Fwith½ 0 R “'%s/%s' %Tñ_string_from_ip_int: j ,¢  ñ ,– qnetmaskZ ” Ml ‘ ?hos’ Wm  )


class ØNÎ (_%AV4, 	  "):,P"""Th7 ’representhñmanipulates 32-bitY  ­& +˜"..P Õñs: [examples for: } õ('192.0.2.0/27')] :7 ¢7 'N.þ ,  0. (31+ ”broadcast`4 — (326 ñ, E255. (241 áB: 271"""å 1# Cjôto use when creatingN� objects1 ª _Ù=[ ˆCinitˆ,I  , }wct=True """Instanta a newX Ú‚ Ô œFArgsß  ¢1: Af Png orÐUeger I × ”the IP [&_ ][&  ÙA/24'ø  c   t0(  ú0ž$ 1areæÐfunctionally   qsame in¼. Similarly¡Œ 1Z  /® * ,32 ¡ 9so ¢  equivalentä atÂÁto say, failfo8Óprovide a subÄÀ will createù an object with a mask of /32.

  bIf the# á(portion after A/ in	 ûargument) is given inL ðdotted quad form, it/ @trea �as a net�  if cstarts© O ðnon-zero field (e.g. /255.0 Á == /8) and Z 7hos[ M 	i  W  0.X  Z ,— <theL ±ingle excep0 ofu2all° à \whichþ I  Ê ‚0. If no‹e³, a defaultÂ S MusedÊ@AddiŽ Pally,� û
integer can be passed, so† ð	IPv4Network('192.0.2.1') »3221225985)B àor, more gener� !  G êInterface(int( w )y @ /  0 ÒyRaises:< ðAddressValueError:g2ipa á isn't a validf   .H N·H  ;ÅJ H 9for>  � Ã ] V Qstric:BTrueá 8 ¢A  ;notf `suppliå5"""$  Ù ,`à= self._split_ €_prefix( Fess)W* n!+ Qess =,^5 1  ,i ^ Dlen { Smake_=(+ A �packed = *N  þ  + 3if . &. Q 3 != 
2if d
  4rD ‘�('%s has ^Á bits set' %Ø ˆ  < NelseR À ?Â ª N  #õ º è ç~1= (’ C_maxô –J- 1)¼ &  ö  í …__iter__§ /elb ^ 	�lambda: [#	T]‡‘@property{ ò@functools.lru_cache(‹Ñdef is_globalé x �"""Test iô(isKQalloc¥¤for publicssklReturnd¡ boolean, ±` e_ ú not reserved pe÷iana-ipv4-special-registryy Èr…   (V ä Ð.network_addrÿess in IPv4Network('100.64.0.0/10') and
   ÿself.broadcast_addrO P Anot P ðis_private)


class _Ÿ ¡Constants:� Â_linklocal_n¹ + =Ç S69.25È C6')
8 oopback7  27û E.0/84 Qmultiå l !22h E.0/45 opublicg 
e� û 5 Qs = [·   ¥0¥ ," 1# ì G G' P72.16• _/12')&  92# _.0/29% o170/31' 2L 4% 
0168u ?/16' 38.1& 5& 
051. ?0/2u Ÿ203.0.113œ $24¢K F55.2 )/3\]7„reserved8	j 4 µunspecified»BAÉ#('Ÿ  Ò
} 4._cŒ+ =�´rBaseV6:n 0"""  ¡’6 object. øThe following methods are used by4 ¬áboth single IPü{ es¬ ¤sb 2"""k á__slots__ = ()9 Â_version = 6 €ALL_ONES$ ò2**IPV6LENGTH) - 1$ õHEXTET_COUNT = 8 `_DIGIT< ófrozenset('0123456789ABCDEFabcdef'� Àmax_prefixle‡ q µ q# Thereð	only a bunch of valid v6ò ñmasks, so we cache them allŸ q# when ºðructed (see _make8 A A())..  _J B= {}� @’§* ;defD ’cls, arg)© ºà"""Make a (netj ", õ ð_len) tuple fromµ ` givenC Dumen) H 1Arg v can bea ó- an integer (the_ r lengthl B p- a strl0rep8 nt 3 ¿ (e.g. "24"> à ? ¼'.0J  • �    ifì  zin cls.ç . 1isipce(arg,ù m %   aV1arg®  Ð        if noðt (0 <= prefixlen •cls._max_ O):
   ) öreport_invalid_netmask(< 	; NelseM - 1 = U  S_from† É_string(arg)R q ñ  = IPv6Address(F hip_intF — 
F 0 K ã_cache[arg] =  ,$ breturn² ' < 
( Á@classmethod Xdef _š Ù pcls, ipè o@"""Td !anß ! € into an Reger.l  £JArgsaT B: A j X, theN > RÒ A Ah 7 aeu \Raise6 % åValueError: ifÀ qsn't a 4Œ º� 1"""2 × cif not? 
à r}  ? o #(' @ can< ¦be empty')¹ sparts =X ˜.split(':# 3# A|÷ ñ needs at least 2 colons (3 P %).· Q_min_ E = 3 qif len( F) < ' 
Û „msg = "Ak "%db ö expected in %r" % (D Gp  B'7msgA# If í 0hasiöIPv4-style suffix, convert it to hexadecimalÿ `if '.'¥ ë J[-1]á :try  ª @ipv4¹Ó4Ç.¹.pop())._ipÞ nexcept~ as exce 0"%s° U5excN ) �Y None{ Û À.append('%x'Ž(Å ú>> 16) & 0xFFFF)x= < 5 s � caMõhave more than 8–94–²# The extra& b comesà Qusing@"::"vÀation for a  l #d1 €or trail Azerou 
PnmõHEXTET_COUNT + 1á 
&> ; 
Ærmost %dÌ Œs permit Ð € %-1Òs  v �Disregarö  Jð
endpoints, find '::' with<h¦in between „ikpdicates¶ prun of C0es ~Æbeen skipped@   Š_index =” ©iÄˆrange(1,lð - 1):
         û   if not parts[i]:
  ñif skip_index is/ NNone+  : ý# Can't have more than one '::'_  4 åmsg = "At most, ÿ permitted in %r" % ip_strF ýraise AddressValueError(msg)1 Ó E= i
  #
0_hië Òthe number of ò to copy from above/befé ä M /loM Àbelow/after z 	0‡ñ # If we found at,N pn checkð`it alsÇ @vers µ endpoints.
 ™ ="  ‘lo = len(1 7) -/ I - 13 	r0r E  v +-=;  ” i‰?_hi‚N÷Leading ':' onlyN!asÌ Ô d^	¥  j   UŽú)  # ^: requires ^:š 	ò /-1ó ?lo ó *loY  ¢   ó _Trailô X&:$ô 9::$AÅ gòped = cls._HEXTET_COUNT - / ê+‘Js_lo«íI >< 1ÿ PExpec.aI‚%d other] Q withñí(Ã 3-1,‘)· ;els0# O† Ðwise, allocat¢e entire a´ [7‰hi.  TheR#¦ð could still be empty, but _parse_hextet() w# ûM  fof*atò(ifÈ!¸ ƒactly %dpe� y?out|:z  
	k],/-¨0° Û0± ÀddressValueE÷rror(msg % ip_str)  # :$ requires ::$
  ñ parts_hi = len( )"  olo = 0  qskipped  Etry:  n ð# Now, parse the hextets into a 128-bit Yeger.= aip_intb  L  âfor i in range» J_hi)z  . A i<<= 16[  �|= cls._¤ _  U :[i]	P   *× 3ts_
	` ¤ -`o_lo, 0¨ P`return5int˜ Ðexcept ValueE2z as exc8Öraise Address, 0("%µÀ %r" % (exc,`  kÁ) from None
m Á@classmethod Jdef `Ccls,¯„ ó"""Convert an IPv6( p string+o 2int3c  ÑFArgsI   Î b 3: AA ,ˆ�number toÅ2se.º  4 R=I T» 5 an† ~ R97 @A: ify ±input isn't‘ `ctly aä  ”  NÔ  ’ ·  [0..FFFF]¨ 5"""& ±# Whiteliste ðcharacters, since° ö() allows a lot of bizarre stuff}bif notöHEX_DIGITS.issuperset(YÏ?ø a("Onlyß ðdigits permittedÃON Ó Ae doÏ ôlength check secondØ  T…invalid ö   eßK �is likelyñ`be mor formative ° K Euser8 !ifž J > 4b uÆ= "At most 4… ê Y  Õ) J %)0tet²{8# LÐmeans we can }  Ã   vès n¼R, 16)ú´@comp's(¸súµ+ e_ ‰#ofÎ s¶CR 	' Ú”s, replacÊ õlongest continuousÏ PsequeØ`of "0"K ü ð with "" and addN QemptyoVngs a 5 `beginn' Bor aA0end   � â such that sub 5tly‘ @callC ƒ":".join"âs) will producUÕed version ofI  s öaƒ<
àÀ    hextets:ó  A list of strings, the hextets to compress.

  …Returns:   J 1 5""", ÿbest_doublecolon_start = -1$ ulen = 0! @  ; £for index,æ ã in enumerate(ú )Ý $if- j== '0'  ÿ s 6+= Ð  !   8if ( ú  û Q  0 1# SÐof a sequence­ezeros. ,  a  ð . Ž  )-> Ÿ?len� qThis is2~longest¦  so far­ n ) =%=lenº  ì ; N	=  	? NelseÐ 5 l m   $ X ´^ /if=J > 1q º }end = ( f +b  †  = Ilen): a# For :1 atµ y !of 2addæa Ó  4 o== len, A F‰ += ['']ˆ  [² ï : _end] H  Ð  �beginning$ ÈÖ | Z == 0¬Í „ # +sr
 Á@classmethod Rdef _fò_from_ip_int(cls,  W=None{@"""Tjð a 128-bit integeÃ toq ÷adecimal notationw;Arg¥g D: AnI ð5IP +­  ø çÃ 8 5hex�  re("en‡ ‚W Kaise˜ ô ValueError: The�  ]0bigð @thanP bits] ‡all onesð g#ifT D  W
Ø	  = ‚V._ip)Ñ> ú > cls._ALL_ONESF rË  ½ h('IPv6¾ §too large'^ 0hex	Ã = '%032x' %­ %%ø%!  ntq 9 Ð[x:x+4], 16) ÐxÄörange(0, 32, 4)]Î M ðcls._compress_he�xtets(he 3)
  ö return ':'.join! " ñdef _explode_shorthand_ip_string(self):,  Q Á"""Expand a / õened IPv6 address.
- FArgs;  ? X B: A _ _, the? Rº B 
: eŒ ‚ 5"""Ž Ñif isinstanceØ ,z wNetworkå ª   =© - ".n( _è b/el[ ŸInterface] (ipP /se7� )e`ip_int @elf.º„int_fromÃu` 0hex Ò = '%032x' % F ,“parts = [, õ[x:x+4] for x in range(0, 32, 4)]: c(_Basehu¯P%s/%dš (º• 0), “¶._prefixlenÙ < ë1 +é°reverse_poišØ€ 2"""t–- S DNS 1 Q name·ñ This implementsL ðmethod describedC·RFC3596 2.54²‚ P_charŽù ­ð d[::-1].replace&N, ''.ø	M ò ) + '.ip6.arpa'#r@static¬ Ñ5ó split_scope_id(N¡ó"""Helper function to parsÚë a with O 7 idú ÁSee RFC 4007dodetailQM(Ð,‘ §_id) tuple˜ ’, &ep1   ==@str.oi 7('%‰¦if not sep4 b¡_id = Noneq  O2 sp or '%'44 
J rraise A€úValueError('Invali `: "%r"ZÊy ?ä } �property-  6maxƒIJ °_* O  ˜?ionI 
$ �


class½õ bAV6, k "):o Ø€present ¼ómanipulate singl©7 0es.ôë õ__slots__ = ('_ip', ' ³_weakref__'—  �__init__Ò ,ý
mI� tiˆ Qa newÓ , w objectŠPÀaddress: A sðtring or integer represent ™the IP

  õAdditionally, an< ûcan be passed, so9 ûIPv6Address('2001:db8::') ==+ (  - û42540766411282592856903984951653826560)D àor, more gener® ! c Hint( 	  )¢ 	/ 1yRaises:x òValueError: If aá isn't a valid .W 5"""S ô# Efficient constructor fromš.. ãif isinstance(u ,( )¦ óself._check_int_+ 3 
l- Dip =­ q  : ù scope_id = None" freturná 4# CË  ˆÌ �a packedc Ô _bytesÖ N Ù O, 16Ý @int.Œ _\ , 'big'6 ô ðAssume input argumÕ toUsª¦any object­a�Rp# whichPvertsßÀo a formatteX Q  á`_str = Ü Õ ‘if '/' in€ * 
1rë Ý�("Unexpecw A Q%r" %G 6essb ‚ -, 1 Tplit_T£  ˆ )8( ‰ ¾µò 7 Pdef _G 0__(4 2 ip  tuper().( ´ ¹ * |+ '%' +À ,if Celse5 ½ † Nhash‡ d   (£ L._ip%)I #eqG w, otherÕ  f™ess_equalÜ 5 / Kiš1 °is NotImplež+edÉ# N 4notúR @ FFals" ž.ÿÁ == getattr(µ 5, ' !',d‘@property‰  "D T P"""Idý€fier of uÐrticular zone  G1's L �ÀSee RFC 4007s‡ details# R& x îi‚ y  k w   S`pecifijO Ud $
AÀcope_id

   ñ @property
    def packed(self):   õ!"""The binary representation of this address."""9 ÷return v6_int_to_` a._ip)
+ ˆ Ïis_multicastŽ Pest iy ex @ is — •rved for @ R use.i  Í R” sÞ   ÿ A boolean, True\  aQ ë ½  ?   ñSee RFC 2373 2.7… wdetails   n@ in  Æ._constants.‚_networkÆ /ü .åotherwise IETF=¬ +$¢within onee(© r IPv6 NÙ o range(1anyÞ  ,x_x 7b 6sg	¡link_local\ öh A -A :/º A perMG4291W = ˜ — =Osite* A æNote that the # ³ðspace has been dY�cated byÿ U3879.>ÀUse is_privaZ 5o t � 	"ins ` ¡of unique O ÆPes asý&iny G4193x	$Ï035175.6] Õ EÆ Õ	ñ@functools.lru_cache()ø  äCò

R alw  › \ƒ—¸+0ª  S  ÿiana-ipv6-special-registryC-1net/  hÏ T0
Oglob,:
oublic 9 t˜5not» 7=Àregistry.

   B"""

 ñ  return not self.is_private
$ ‘@property ðdef is_unspecified(6 !):  T ÷"""Test if the address is 5 .\  0 R€ sA   ò A boolean, TrueM iF  U J a Õas defined inŽ  M çRFC 2373 2.5.2{   Í ’._ip == 0¥ �loopbackþ $a 4 ³ Š 	RT  3} 1�pv4_mappÓ RIPv4 ) ü I>DIPv63  C-a J ,Â9the÷v  – ïNone otherwise1if ßú>> 32) != 0xFFFF°E W „   ‡ AN &F  J )`ateredo5 `òuple of embedded + G IPsÌ ì ZT<  Hð(server, client)A @ or È to×  R€doesn't ü¤ar to be a† ó(' ©start withF “2001::/32 Z Œ€#96€ 9 O0000„(…QÔI64) �,£  “ < ~ 	5 Á *‘sixtofouru 
ÆŸ!F6to4ÒEÏ0he ¡  > ->  Ä{present×	æ . °×‘contain a` ž 	¹	$11:O2002¶ Ø :@µ+80µ€


class 6Interfaceö6A "):f À�__init__T ,_� ‚, mask =p_split_ €_prefix( 3essû)o .d  )tE`networb  åN (W | þ ), strict=False? ¡ N @.net k Àf._prefixlenñ+ = self.network._prefixlen

    @functools.cached_property Ðdef hostmask(I !):  ; jreturn_ , ]  > __str__= ô'%s/%d' % (super().1 %),j  n 
  ‹ Ì )p #eqo w, other³ òaddress_equal = IPv6A =.__9 � :if ; ú	is NotImplemented or not' , ¾ 0	I b ?try. é ½2 ==Ò Î> úexcept AttributeErrorP ð# An interface with an associaÂ f  Ü eOT the`  ¿ �# same as7 'un9 Ò À. That's why> [ hashC Qtakes  extra info– ©o account.1 3XFalseã/ltãMlessâ8 n â:  	á
N™ ú _3 K Ë»* <Ë5 orA  n  
E andr „ )D ÔWe *do* allowI eád•+às to be sortedåð  is considered � 0 thq'll\ ï IñÍ„  (\B_ip,�ç,n  áƒ_¾#))?ó__reduce__ = _IPVBase. ˆ@'!ipf ¡ e" C._ipr F  ˜½ 0 R 6s6 Ý cñ ing_from_ip_int: j G– /ne	” ;l 'mì &Mm “ ïis_unspecified” Ï0_ipË0¿ š
D jŸs_loopbac”Àn self._ip =ò= 1 and self.network.is_loopback


class IPv6N  ¡(_BaseV6, 	  ò):

    """This 7 ¡representsg ñmanipulates 128-bitZ  { "s.E ñ
Attributes: [examples for. ñ('2001:db8::1000/124')]  ƒ É ‘_address:6 A = &')8 ‹hostmask1 8::f& Ÿbroadcast` 	: /ne_ _ffff: 0ƒ âprefixlen: 12442"""	 1# C³óto use when creating � objectsü È _´=/S Ðdef __init__(,,I ñ , strict=True):P  „ñ"""Instantiate a newX  0‚ ñ 3 FArgsA   ­ 1: Af ång or integer [ × 2the^ I ) 5the�  N A  IP†>/Ž.% ]_/128' _0000: ; :V ðare all functionally Õ qsame inÝ û.  That is to say,œ Afail€o providy3subê R willCe an‚[ withI  a @ of È ¤HDAddi¦ ,J ”ûcan be passed, soX Fh[') ==+  ®sö42540766411282592856903984951653826560Ë¨ àor, more generTe � Hint( 	  )¢ 	/ 6…  ¼ ctÆðboolean. If true, ensure tØÃwe have beenD° A6 .„Neg, íknot anH  	1 on�ú+, I  Zþ[Raise¤W°ValueError:Ý ºá isn't a validÅµ 
wNF  ¼J H ;forÑ a"] V ±P was µ&  B  ;noth †supplied¾  wé ö ,;=SR_spli)_w(% Fess)$ Q´ †5 Þ1  ¥,i ^ Dlen { Smake_?(+ A À   packed = óint(self.network_address)
  Èif packed & . ƒmask) != :1  8 šif strict   ðraise ValueError('%s has host bits set' % ˜ ˆ  < NelseR  ( À ‚ = IPv6AÎ (Â 	¥  R  õ %)
G  è  >â_prefixlen == RG_max J- 1)¼ ¸  ö 1s =í •.__iter__` /elb ; 
a \ ˜lambda: [ é")]Ë 1defsº § à"""Generate It âor over usable6 c in a B.S YÔThis is like Þ õ except it doesn't return theû ð	  Subnet-Router anycast ¸ 7essg 5"""6 … ) =¬ÚQbroadT .  
Pfor xì drange(k U+ 1, 7 - +èSyieldá¾ ƒ_class(xK‘@propertyÈ  Žßis_site_local– pTest if2 h�reserved ¬  A -A -‘Note that; # F Qspace‘ñbeen deprecated by RFC 3879.©  ä°Use is_priv%Eto t› %isV  à ` ¡of unique ¡ O  ¶es as definy G4193Ê R4søÿ A boolean, True#	2perÐ —513 2.5.6] T�†h.©E andË    ¬ W
9 A)


  _¤¢Constants:MQ_link)_vàN¶Ã('fe80::/10'S`_multiÞ3  f03 82 Ä0  –[Î  — n ¯::1/128'),   ¿ffff:0:0/96E 1Ÿ /64! Ÿ2001::/23" _2::/4¬ F �db8::/32J 10÷ !fc³ 7F ¦:„_¼€/Ñ ã•0  •2� À, IPv6Networó k('400::/6'),
  áIPv6Network('8  Y5'),  !10 49 4! 3: 6 s  ” : A: C! 
® E ® F! è F!!FE	9	!]
Ö Â_sitelocal_nL* =” 0fecç p10')


]ðAddress._constants = _ C ôv
"""Keywords (from "Grammar/python.gram")

This file is automatically generated; please don't muck it up!

To update the symbols in tY  , 'cd' to " ðtop directory of
 ” ò source tree and run:(òPYTHONPATH=Tools/peg_g  2or @ Â3 -m pegen.ký Qgen \i µ   gTokens CLib/L ð.py

Alternatively, you can© € 'make r -3  '.‰ó

__all__ = ["is §", "issoft `kwlist   2]

  A Î r'False'�E'Non 5Tru  __&„parser__. 5and s
 Fsert 5ync 5wai Tbreak EclasB fcontin} 4def( 4del 5eli eÃ Uexcepf 0fin�5 5for 4rom UglobaZ X FimpoÌ $in0 i¬ dlambda 1non‚ ‰ y pë 6rai}Ureturd 4tryG Ewhil‹Dwith ¦yield'
]

äÚ  Ò = frozenset(ÿ0)._ô‰tains__
=	/ X 3 à"""Cache linesa 1m P| 
#s.iÉ`tended¿Hread: ‚modules qñed -- hence if aUñname
is not found, it will look downL ó search path forF � by
that O Tu ` funct
 4sys o
 tØ:ize‹0get n cly   Theckc Blazy ¡]


# The  R. Map= ™ s$Peithe¸ ²thunk whichð tprovidei�code,
# å òtuple (size, mtime,i`, full^ 0) oZ�loaded.
� Æ = {}


def Â 1():% í × `0 Áentirely."""$  .< (` J Àne(filename,ñ lineno, module_globals=None):
    """Get a+ ñ for a Python source file from the cache.; fUpdate ñ if it doesn't contain an entry] BthisR Áalready."""
O  ¬ qs = get (y Lname¿ )/ qif 1 <=¸ !no
 1en(: Û  ß areturn%  s[ qno - 1]C  �''


defz 9   X sß <e!ifU .2 in¥à = [W   qif len(' f) != 1<    (û? 2[2]¹6try0 , u2 Èöexcept MemoryErrorM RclearE õŽ #[]¶Rcheck% Û ¨rDiscard �ðies that are out of ÍÙ (T¦qis not _ õed upon each call!)¸	| s \Â ’  ÙQlist(© r.keys()Ô )elB ¾C ~ÁFelsel {” É9   s/ ï =g# lazyU€y, leave  M ³   Ainue¹   0sizÛ tiâCa, fullÅ=§y- @if m* , ib K \ ¡   # no-opŽ õ ñs loaded via a __ 5r__[ 	¿ N  stat = os.
 (” ® ! ³+OS¯  à7pop÷ > & 9ont0if  } u A.st_ #orø 4!=  	ÈP –v Ú�5ÞaáR and gP its Ò ;¾ïðIf something's wrong, prine£message, d“ ?3ð,–f  =Amptyk ,2ÐX 2Ú# .8 V!if G•5or Ö Ártswith('<')* C.end >>')� ¼ a [% =¿	“ ÷�‹À      basenaóme = filename

  ÷%# Realise a lazy loader based lookup if there is one= o w? dtry to2 ¥right now.- !ifa dcache(‰ õ, module_globals):0  ¡ :try   qdata = I [I i][0]()= ñexcept (ImportError, OS	 h  W Jpass@ >lse~ 1if � ois Non!   L  # No luck,9t PEP302[±cannot find VsourcU @  £# for this(O#   ™return []À   %M = ($  ( @len(× /),  ê  Á[line + '\n'­  !in%`.split Os()]A Afull“ ‡  
Í  ç Ô 8[2]Ï TrÄÑoking throughfhò search path, whichÕ•ly useful À# when handlM ¥a relativeGŽ`if os.V e.isabsáiÃ [³  â0dirb in syH 
z	;% =} Sjoin(N ,Å X 
KAType¢, Attribut ´  { Ñðt sufficiently string-likeù€do anyth+JV with# G   zcontinuñà BstatÜ  
 (ï 
Î  S Ubreak¹  ä î
L   	íeé§ - 	�  Õ æ tokenize.open™ j as fpn þ {Pp.reaK#es©¥ 
~  8�ines and 9R �[-1].ends� (~¶" 1 +=š‘size, mti SB.st_   . f2 = * " !, c $, ”3 ¸  _


deòb"""See{ MÞK+.ö3The `Ñwill be askedG Bthe fR onlyÙ"geš" i÷qcalled,c³immediatelyg IPan enð!in[°  alàPy, itS ªsalteredC : `: TrueTr 2 Qregis1   ´ Y 7om¤False. To 5 P suchÄSoad aÀ loader withC a
  õget_source method must be found, the filename ¥a cachableI $ _, and6  !noV qalready@ 1ed.? 1""" &ifj "in# :  ­ pif len(y $e[n v]) == 1&  * ¦return TruŸ Oelse& BFals' 0if ¥ [ T or ( ñ.startswith('<')å  3end F>'))g ‰ c õ# Try for a __loader__, if availRñif module_globalsq '4 K' in# x ¬= €.get('__ E__')Y‡  0 [n ]. 1¢= getattr(C 6, ' •', None)
:  ` E  ( ¶  »  ðlines = functools.partial( ­ , Ç Ä  < 1 = 1 O ,+ ™" ©ó"""Locale supportIc.

The ñ provides low-level access toÿ`C lib'  L 2APIÅ¢adds high
6 `number‚matting + Òs well as a l� Palias" `enginej ócomplement
these¥ * Pinclu® Ó  „ômany commonly usedi  ]® P
mapsÏ mm °values suitª ´ A pas“ ö 2setµ "()ÉÕion. It
also � ñdefault encodingsT 4all|” 0.

.1
im™4sys B  .e* $re# ô_collections_abc
from builtins e  tr†_ D_strA £"

Û3  £ 8_3ð.
#
# If this fails, fì ôback on a basic 'C'ŠPemula¡ .c ðYuck:  LC_MESSAGES is non-standard:  can't t=ôwhether it exists before
# try§ µ Ð.  So __all__W ª fiddled at` end oÂ $.
0 T= ["gô0",  Ý ”preferred°  uError",*E   "A ! )re R @conv 0strÈ LxfrmK  tr Catof i fformat
  Ù0ing ‹currencyI n2 @lize$ „LC_CTYPE TOLLAT 4TIM ‹MONETARYL £LC_NUMERICA 0ALL
 ðCHAR_MAX"]

def –  ß C(a,b[C""" õ ‚(string, ‚) -> intW ðCompares two strings añccording to the locale.
    """ ðreturn (a > b) -
 ñ< b)

def _strxfrm(s):/ E"""  �tring) -> 2ingZ  ^ RV 3s a ó that behaves for cmp� _-awar– �s

try:
{ bfrom _Ä ñ import *

except I SError0 1# Lð ¢ emulationH áCHAR_MAX = 127[ ¤LC_ALL = 6 µCOLLATE = 3 0TYP 0 ÅMESSAGES = 5 ´ONETARY = 4 pNUMERICp  0TIMK 2 µ � = Value ©  �ï Sconv(‚ _ †  ƒFdict� & …ônumeric and monetary|öspecific parametersE $ M S# 'C'6   default v² sÅ  $ Lõ{'grouping': [127],#  '   ÿ'currency_symbol': '''  Ðn_sign_posn':°$  ßp_cs_precedes& n& Hmon_¾ » ïn_sep_by_spaceq Ðdecimal_pointà .á qegativeè  & % Oposi% — @int_}yp‘ y�thousandsz ¼  R) ¯frac_digitÅ M X2 æ Q }X2setA¢(category,Î[=Nonek- ‘integer,sû,  } : ãôActivates/queries>yprocess1k"if‹ � not in (“ ,  „œ  f araise 6$('ò� only sup.Ss "C"… %')“¶ñ'C'

# These may or  … Aexis‹ a À, so be sure]0setasm.
if ' 'À tglobalsÁ % =^6 Ocoll6   6   3


�  # =Ú    É  With this ÷, you can override some items of= 3's ß.Áis is usefulÀ@test[´purposes.
_Z 
– ÷{}

@functools.wraps(# )i� ¼ 'dë  ±?if h �ð    d.update(_ovôŽerride_localeconv)
    return d


### Number formatting APIs

# Author: Martin von Loewis
# improved by Georg Brandl

# Iterate over grouping intervals
def _ $_i ( !):¨ Elast q = None 5forN D in 8 7  ã E# if ô is -1, we are dG  ) &ifJ ¶== CHAR_MAXJ  % 1{   À# 0: re-use ¤ i Õ ad infinitum, ` 0Y !ifA å !isæ 
&  t ò
raise ValueError("invalid} Bing"Ý -   ®while TrueM Zyieldz ±  ”  è § =5`

#per<E the� ÷ from right to leftöó(s, monetary=Falseò ¤6 = ±(Õ ðthousands_sep = ( [B © and 'mon_' j' or ' ]Ð /I " D  ? eif notë _' Þ 0¸ ö if s[-1] == ' '+ ástripped = s.r ë  ¼8p_spaces" Q[len(% Rped):‡  )  K Û 7elsðH !''$  �]  ä  O [^ c_! 5ings¯ ‘ s|ú  +ö in "0123456789" 3 ò# only non-digit characters remain (sign, Z :   
Í sá      Ï ß     Ubreak% Ô Äs.append(s[-÷&:]f  F 5s[:   ÚÈ I =  sreverseß$„ Á )+ ¯R.joinfBs) +Oº,A )n(7 P) * (2� R) - 1’ )ÕS0ð a given amount of excess paddÁÓ(  ~"ngÄ  #p_)  îE Ä0lpo30¡ †  ¨ s[    Q += 17  «5 - rX  Ù sÔ * a   ) a    M a ¢ :0 ò'+1]

_percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?f b   r'- ò!modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
v d3at(Ž 0, v,‡Hà, monetary=Falö
se, *additional):
    if     ÷formatted = percent % ((value,) +6 )I Oelse@ > . ð# floats and decimal ints need special ac­ !3 $ifŠ ö[-1] in 'eEfFgG'w �seps = 01  È @part Ð ¢.split('.'·  % ¶if groupingK   > S[0], Y _( ( ”monetary=	 V Ö ô_point = localeconv()[/  Y'mon_/ 'Á  ‡  Jor 'A ]B û $ =j” R.joinÌ ¶ !ifì 
C €_strip_p65ng( $I /el­ ?diuª	…b 3 = † O‡ Ñ 2ureturn r S

def  
e, val,K@=Faltœ  wA"""Fc@s a R ngÒðthe same way that  %j ñ ting would use,â‘but takes* @curr«l Q±o account.
0 Gé° is applied g ð third parameter" Qtrue.8  Conversion| $s Ö   thousands8aaratorÕ* ± Þ As ifI Wforthf I 1is o 1""") w ¾clist(_ ò _re.finditer(f)rPnew_f% Âsub('%s', f)ý Ðif isinstanceÌ�, _colleg�s_abc.Map	¨ { \ yval = [V� ¶t s5.	 ()µG=='% ]   a §.append('%œ   
[    6 _�(� t ’,¶6
Y mif not"Wtuple | B€  ‘ 
(i�?for6lAstarÙ+Ñ'modifiers').  ;('*‡ä «u¾ -  bval[i]Æ*   F?ing0 WÀry,
          
ü*val[i+1:i+1+starcount]))
7 ¥i += (1 + ' % ñval = tuple(new_val)
? preturn  ðf % val

def format(percent, ôue, grouping=False, monetary Ñ*additional):a ó"""Deprecated, use\ ñ_string instead."""1 ñ import warnings  .	 (  ü ò-"This method will be removed in a future version of Python. m F ÂUse 'locale.ø œ 6()'Ÿ ,w Ð BionW¦ ,q‘cklevel=2) `“match = _JA_re. [¡qif not  � or len( .rQ())!= G ] ¿ òraise ValueError(("Å p() must÷	given exactly one %%char K 	 F á specifier, %s¦ åvalid") % reprÉ Ê rQ_„ ° A;(, 5~ÿcurrency(val, symbol=Tr‚rinternat‡A"""FÆs¾p accordrtto the e U settk'in #t �cconv =   (èp# checkÜ€ illegalv "ueÁ�digits = 4 [´ ò  and 'int_frac_* '' ]V2if ! r == 127d ¸#"CE ” !maã " iÂ°possible us J 	 "*3'C'ó #."ð  Ì ä£'%%.%if' %� P, abs¼)2ñÉ-R# '<'ñ>' are markers if‡EsignÆóinserted between@ v # š  V ’+ s + '>'é#if/ 3?smb’ #_’   ™ – 2 ã0ede~ äQval<0› d'n_cs_  H p F Psepar*™ 	G Äsep_by_spaceH 	 ]ì  � 4if s ò    ¢  ú 6+ (n „ T  ')AL 0 JelseB >if Âpsmb[-1]˜:' '1  G  s  = & 6:-1ñ  ! =¬� 
"mbÜ  0_poÆ h nÊ &p_ s   [qegative0 < 6osi Y E2ign€ 6= 0ç  � 0'(': v!)'@+el2 12 À s = sign + ñ
s
    elif sign_pos == 2:   qs = s +  - 3- Ñ.replace('<',8 )9 49 >9 &se+ ñ# the default if nothing specified;o  ½  , Áis should be; ‘most fitt5 Åign position8 õ   A+ s
 Šreturn sÝ 6'')  µ ò'')

def str(val)¸ ð"""Convert float to" €ing, tak‰  Õ ølocale into account."""� ð_format("%.12g", e s !de@ ¤ize(string} ƒParses as   a nH Álized numberr !rdŒ o)O Ae se+2s."rconv =    "() ñ#First, get rid ofG �groupingÇ t[ 5 ñ['thousands_sep'] Rif ts4 ÀÈ  ‚Ñ lAts, k % s#next, vs ñ	decimal point with a dotd Rdd = ƒ ( _( ƒ /ddƒ rdd, '.'Û¦ ŽCatofˆq, func=ú”
" ˆ ÷ t  [ (û‡Catoi† z ‰ _ nnv/eg ?int~ c_test(y 2set3²(LC_ALL, "">I#do %Rs1 = é_¤ ò("%d", 123456789,1;  pr� ¢s1, "is", ð "1) “#standardM  òa  £B3.14, J  0f(sJ b
### L› name alias(òengine

# Author: Marc-Andre Lemburg, mal@l ò.com
# Various tweaks by Fredrik Lundh <f °@pythonware: >j ¡store awayêðlow-level versionvkö (it's
# overridden below)
_% =ãœ¼_LP_encot(code,  Ò if@ in  3Alang) g@de[: p.index(3ë(elÖ4 ¦## ¬ê }  <õa C lib compatibleœ åA  äÄ % =$  s. aþ (` #') 8 €: %r' %  9 0 	 	k .4es. Iget(. ‘.lower(),´  \ 	I Š º p d½ Àorm_encodingô)
    encoding = norm_  	 " r.lower(G *if? ¥ in localeR q_alias:Y z * [~ ]8 FelseB 	! Ÿ ò replace('_', ''¨  y 7 -7 ã   n Q/ =ç Ö#print('found£U%r' % Ñ õreturn langname + '.' +& ô

def _append_modifier(code,  )T%if ¢ == 'euro'  Ê !if\ 0notÞ B     ‹   ‡ ±ISO8859-15'½ $ U_, _,� 0 = . ×.partition('.©&if* Win ('R “, 'UTF-8'¼  ]   … u H  Ø G Ý < _:º. 	} Ä  ò @yTy lbalize(ä ¤1):
› Q""" R¿1s a?* d(Ô for the giveS>  ±  N .M   QThe rQ eE  isH `matted
 • use withJ 2set¡ '()Q IÖ — aŸq fails,‘ �original … 5 isz T šunchangedR Î 0is VRknown^ Afuncr µdefaults toY  B  !)Ç =§just like à G Cdoes› 1""" `# Normð eå M ã a‹axtract ¾   ö ˆï < +>':'C!#  °s sometimes§Fd aså ¡delimiter.¯ m  t .¹0(':¼K ¸@q   3 ŒÂsplit('@', 1æ
uê B = 'Ø ` .`  ”ðd o.')[:2Ú; • í t}  P# Firç°ookup: fullt¡ (possiblyêD¯á  n  í £H[ 8ê Ò - 6“ }92 	 7 §– !+=x+#{ ¢ lõ _ð =    Í½ Àlookup_name ð2+= '@' + modifier
    code = locale_alias.get(lookup_name, None)
/ "if2 ais not :H   areturn!  â#print('first R ¡ failed')
# %if� H ð# Second try: full‡ … without1 ¡ (possibly ’ encodingª  ‘ Ý xang_encÚ  0 Þ 
 ! Ò Ì ’ qsucceedà  0  !if| 3i!î $ >„_append_¦(Å ,õ Ý  8 ± õ.split('@', 1)[1].lower() ==: r  a � R â s‚é µlU c# Thir´Alang´(#1 *, µç Ø s z ™J ¡ 2 º 8 ì &  í  W ð 3 e ô ! 4‚ � ¨ó  1preplace¶åd ? ‘  å 3! =“
%P 0 {e ! +ÇCG —‚# FourthÍE and¬Ï ´Ç Ó µ % ¹”“ bÆ I à (  ™O = _iW 5  ¦! <  u �, defmod 2 #if/ H 3 � Ú C� = … 8Ö

def _parse_ ( "):; P""" P' Ss theÈðC for  S Íi + cðresult as tuple (¤AuageF ,W.r  î Tk [ �rmalizedi çpassed through› w kð engine. A ValueErrori0rai@  -7ase@  q E 0canT1be +d£ Àanguage codeó corresponds to RFC 1766.  code and encoding
  ðcan be None in case the values cannot" õdetermined or areC punknowns ñthis implementation.
) 1""" Š ñ= normalize(localename)! aif '@'Œ Aode:  ¬ Â# Deal with 4 ¥ modifiers%  ^ , ! =ù Ò.split('@', 1e  Q 'if) �= 'euro'%@'.' ö  	„  7 ð# Assume Latin-9 for @= — As. T…s bogus,ž ? õsince some systems may use other¤s[ FtheslC  ôs. Also, we ignorA .{ areturnò , 'iso-8859-15'£ z.z 8 `tuple(bQr.')[:2]SAelif\ v == 'C'º@  c,i– 
0 WUTF-84 ñ# On macOS "LC_CTYPE=% `" is a #idrX settÕ#:g  7 ‘ handling Ftext	¡ '/ '¤ praise VtError('ì‚s: %s' %‡ ÄÂ
def _build_&   çD"):pP""" B(  Ð + AAfrom…agiven 5 ¡ (language$ UÒ)i "€No aliasï %orm  ³takes place1 š6try´m ,Ž# =ç � Â  l 4if -  š æG  !  X  &if[ !is
8 –? 9 7els K * 0 + Â+` ; Áexcept (TypeÍ,Ù){ ô& 1('L¡A mus á ±, a string,ân iterable of < ™  C'two9 Fs --9 VkA.')  l 
Q¢getdefault)ð(envvars=('LC_ALL', 
 ) 4ANG hUAGE')wATrie$Öpc éWsekthem asž{–PAccor} *PPOSIXHñprogram which has{acalled¹ E$seø î Á, "") runs uæ ³Aport„3'C'Ã ä1CalþJ qlets it… K 	a÷ 1def!by2�LANG variy 1. SÜÐwe don't wantí winterfe4Ç j scurrent° s Ó²thus emulat“…behaviorð in the way descó ribed above.

  õ-To maintain compatibility with other platforms, not only theE õLANG variable is tested, but a list of" ¥s given asB ö(envvars parameter. The first found to be defined will bƒ dused. G €defaults5 ðthe search path * õ in GNU gettext;ˆ òit must always co D à `name 'ô 'IPExcep¬ r¡ code 'C', ‚language ¡correspond¡ 5RFC€ b1766. ' ðand encoding canÿ @None½ AcaseZ `values 5notG )@term,¥ 2"""÷Etry:* ñ# check if it's supported bäæ _locale modulp im'  O  ÷ ,¶ =! S._get–Q !()5 e7!(IP ñError, Attribute )® 2pas4Felse ¢# make sur † /;#‘are validx  ÿtif sys.ÞÀ == "win32" | F 	 A[:2]! 60x"y  F  } ¥p windows ê identifier…  =�  ? f =@ n�.get(int( B, 0)- 0 ‹# ...add›ð-specific process5…here, ifq @# ne eary... Pretur &de½-@# fajñack on POSIX behaviourB ošðlookup = os.environÎ * 5for Æ¯P $2 = J (x,ü6if . B  #ik ³«ZUAGE''  + C q  ê ~ á.split(':')[0]¼  .   Qbreak 
„	J 1'C'# Yc_parseÜ ` (. p)


def‹ ò(category=LC_CTYPE):ŒQ""" R«süÀcurrent settï _ ª^N  N nutuple (•f1)1 î > 0may€ !of~ @LC_*Q3ue Å–LC_ALL. I‰óèÏ _ 5’ M »r = _set ¬˜&ifo2== C0';'ñ6  G ‹’raise Typî%('t@ !isvš'm \À

def setlocóale(category, locale=None):

    """ Set the A for dgiven > F.  T$ acan beB  F óa string, an iterable of two õs (language code and encoding),K 0or   .Ÿ  ] IP @s ar< –nverted t[ Qusingµ ã P alia W ¡engine.  L•  S ð passed directlyY  WC libˆ 
‚ may be  Ras onì ãhe LC_* values: 1"""… $if` ù ò not isinstance(¶ ñ, _builtin_str):8  A# coö  › j ; Ñ = normalize(F "d_ 4nam` !))6 ²return _set# "ž)

def re# {=LC_ALL?s| @,!to ó default setting Ü  U ñ
 is determined by calling¿  5 3get4 Â %).©  s-® o ‹ú 5e ó))

if sys.platform.startswith("win"·ó# On Win32, this will { ^BANSI	2pagJ tÄgetpreferred6(do³ ` = TruÀ 	  B"""RÓ X QcharsÑaÖ@userRqlikely +. @ Ò ö flags.utf8_mode~ $ ¹ u'UTF-8'ˆ³import _booL 2  .Ü £False)
elss :ðUnix, if CODESETÁ PavailY±, use that.o 6try® 1  öexcept NameError& óif hasattr(sys, 'getandroidapilevel'Ê ÿ   ˜ A$  Ëainfo.hÈu ¡0misz !d 01 is�  F   €# alwaysÇ ñ d in mbstowcs()N ¢wcstombs()à  4    $ ;   ’Äz %   °# Fall backD0parÑ ð environment vari‹Ys :-(Ý ¥ ,Í < ½   pby look/at¸ 	 4   
 (   N    nres = C9[1]/ , ik ã ú¥   p# LANG 8Dset,å €servativÞðto ASCII
         ères = 'ascii'
   ¡return res Qelse:
   ödef getpreferredencoding(do_setlocale = True)7  ; B"""R[ ð the charset tha õe user is likely using,x  A Paccorm @ to D ù	system configuration."""6 ÷if sys.flags.utf8_modÒ  Z   ÷ j'UTF-8³import _booâ b þ 
ö  [ •oldloc = "©(LC_CTYPE)J  - >tryB   = N, ""A Ïexcept ErrorJ 2pasÜ W   ˆresult =ã .çZFalset ?if ÿ ¹ 
I ‚� ñ*


### Database
#
# The following data was extracted fromˆð.alias file which
# comes with X11 and1 0n h
 0ediG Premovc  e”explicit ë�
# definiosB !ad—¡some more y 2es.³  € òis usually
# available as /usr/lib/X11/¹  À E.
#
ÿ   _‹ _h ! tK åmaps lowercase¯ Œ € names
#;!C F #    (8 ò-sensitive). Note¢ðnormalize()
# first looks upAo )in sÅ `es dic20ary4 ‹ ñhen applies this mappxBo fišá correct C libÇ @ ford %
#v  $Õ A= {
d2# M^ s@ Ånon-standardG _  ©Ted in'D `'437':2 2'C'³/'c' 	&  ) /en* 
¤'ISO8859-1Z ?jis2 	W'JIS7, ° 		, ?ajeµ 	d'eucJPY Okoi8. e'KOI8-ü microsoftcp1251¿ 1'CP ;
. 5. 5Š 
. 6. 6.  K€ Ìn 1 2U 1  2b ´ 1  Á  b 12 “  2 †Ê ñÃPython codecÂðto C lib encodingð names
    'ascii':  Â'ISO8859-1',1 latin_13 1 0isoB 3 1 0e 1 0” c — 2 Æ 2 3d 3d 42 42 52 52 62 62 21  ú 21 ø 1 ø ÷ 1 ÷ ö 1 ö õ 1 õ 7õ 7õ 81 81 91 91 2022_jp2 E'JISŽ Ÿshift_jis+ d 'SJISX Otact)  ¿FTACT. ?euc‚  Ýd'eucJP[  - /kr„  [ TeucKR- Outf_>Z EUTF->_koi8_Z UKOI8-[ . tˆ . T‰ . u. U. Oz104¸ 1'RK  Û_cp125Cå !CP  . å @. å\ â.  âfó&# XXX This list is still incomplete. If you know more: ñRmappings, please file a bug report. Thanks.
}

for k, v in sorted(locale_encoding_alias.items()):h ñk = k.replace('_', '') l? °setdefault(o ³)

#
# The 0 af ð table maps lowercÂ  ¶S to C3 È0# (& ò -sensitive). En¼ õs are always separated from t| !
#K ð using a dot ('.');% ðy should only be given0 w  " ²
# languageI �is needed¯ �interpret+ = \ Û ð
# correctly (CJK codes often have t T !).90Not aU ðnormalize() function which uses this tables
# ð)removes '_' and '-' characters from the encoding part of ð	
# locale name before do'  4 ð lookup. This sag @a lo? °
# space inJ ñ! table.
#
# MAL 2004-12-10:
# Updated alias mappb Óo most recentŠ .$ bfile
#¾ ðX.org distribution usA BmakeÀ 5 2.py� ‘These areš ñdifferences compared to 5old� Ñ(Python 2.4
#Kqolder):Õ C   uÆ ð
'bg' -> 'bg_BG.ISO8859-5'V  ªCP1251'
# 9 _< '�ulgarian| $"cz9 Ucz_CZµ 2µ *cs ¸ ?cz_? +3ech~ Os_CS~ 4dut? Unl_BE? 1½ Wnl_NL ½ "et{ Fet_E< 4< 
 ,15²_et_ee@ ("fi= Wfi_FI¤ + } ?fi_@ *"iw} Fiw_I!8ú *he 6_iw_il? 'sjapanes;¢ja_JP.SJIS|  \eucJPql®Ult_LT1®
 -13= v² ]lv_LV= 	 = sï /sl£ Fsl_SÀ2y cslovenî A !Cth_t#¤th_TH.TACT/ h1WCzh_c²zh_CN.eucCNk ]gb231¶ 8 R.big57Pzh_TW= %TW= "TW! Czh_t^6 o8-05-3¡5�cs_cs.iso2LRñ  þU¥serbocroatçUsh_YUÊ®Ðsr_CS.ISO8859ð	-2'
#    updated 'sh' -> ÷	_YU.ISO8859-2' to 'sr_CS < p_hr.iso4 2H 'HR3 H 9hr_ H %sp? ‡ !/yu? ({ p55>%p_{ ? !r· r{  ¯r@cyrillicE )_zLr_SP¹rÿ Ã "¯_yu.cp1251Í  CP Š A ˆ ‰	‘ ÑH 5W*$yu� 5Û jh™ Ÿmicrosoft36Outf8Ÿ XUTF-8y x@ ß ó
# AP 2010-04-12:
# U•Ðalias mappingAòmost recent locale.$ ðfile
# from X.org distribution usA Bmake6 5 ð.py.
#
# These are the differences compared|   5old� ñ(Python 2.6.5
# and older):V ]r—Fru_R]ó X?ru_; %ÕserbocroatianÂ	Æ Ö  Û1RS.~ m@latinÛ>  !> ;4sr_½ ·  A ?lat;+Qr_cs.\K qXÅ ‚ G   � +Àr_yu' -> 'srñ#_CS.ISO8859-5' to 'sr_RS.UTF-8@latin'
#    updated! ñyu.utf8@cyrillic' -> C: K E @ � ó	'
#
# SS 2013-12-20:
# U™ Ðalias mappingË òmost recent locale.$ ðfile
# from X.org distribution usA Bmake6 5 A.py.€ ðThese are the differences compared|   5old� ñ(Python 3.3.3
# and older):V a"a3PÂa3_AZ.KOI8-CQ'az —_a3_az9 &S.koi8Èx �cs_cs.isoE2� (csY2½   Zn2bhebrew@ Uiw_IL+ 8@ *he  @ ‰ 8I '"sd< òsd_IN@devanagariŒ   ˆ  sr7nD M  d* - d-csC | r]¡D srŒ›?lat„ 1 Ÿ H §4-10-01§ðwith glibc 2.19 supporh|suõ8-05-05N /27N Ã-?6.5Ãâca_es@valenciaÉFca_En'15  x × 
{Ckk_kä³kk_KZ.RK104  |ptcp154crussiaÊUru_RU_ø nBR'

_üP = {
P'a3':	  '©,<  ¡? <  ¤c€ 
< Oa_dj7 
Î e'aa_DJ$1'· Oa_er? #ER; t; T; f8 Ÿ   'af_ZAµ  Of_zaB À           'ðaf_ZA.ISO8859-1',
    'agr_pe':  ( …PE.UTF-8< Ok_gh; { 'ak_GH; m8 Ÿ Lm_ET; ?_et> /'a; oerican> o'en_US, On_es< µ 7n_E? 50Onp_i}  ”[np_INö ry | 6r_Aç6{ Or_aaB /'a? % ? E9~ b)Or_BH? /dz½ /DZ? /eg? /EG? µü µ?_iqz /IQz /jo? /JO? /kw? /KW? /lb? /LB? y? Y? m±Mðoc ±/OM~ q~ Q~ s? S? d;/SD½ s§Lr_SSf/_sµSµtà+/TN¹ yfYfOabic8 ô#4bs�sØ? 'a; tUO'astU/ycÁÀ           'ð	ayc_PE.UTF-8',
    'az':	  ö'az_AZ.ISO8859-9E@ _C @ @.isoX /9e� @ 	/ir6 Õ  @ *IRû bn 8  #Äbe_BY.CP1251÷ �be@latinz '< r1 x¯be_bg.utf8C 
l'bg_BG¸ ?_by6 
À | ¸ 3_byŠ ø< ¸ Om_zm~ |'bem_ZM¹ ?r_dp~'ber_DZ< /max Kr_MA< g8  2l1?g_b? < _hb_inå{'bhb_IN´ ?ho__o  'bho< /npô < +NPx Oi_vu; { 'bi_VU; On_bd; Mn_BD; í N 'bní ?o_c‡Æ<o_Cdc? 'bc _okmalí e'nb_NO7?okm\xe5B ? òô Or_FR~  ?r_fB /'b? x›.rx®s4‹Es_BAº 2w?s_b? 'b? ulgaria0ÍOyn_e6k'byn_Ejcõ 4 'Cè �c-french8 V'fr_C'_ðc.ascii':                P'C',
 p'c.en':  
1 �iso885917 
 'en_US.ISO, &-1p Outf8; 
 ‰ ? UUTF-8; /_c8 7   « ?_c.3 1 aa o 'ca_EÜ Oa_adB  ? /AD Oa_es? ~ ¯es@valenciÉ  ~ 1ES.Z. Oa_frƒ /FRÂ /it? /IT? Otala�Â [Oe_ru~ Be_RU[_exten¼–z hinese-¾Å'zh_CN.eucCNz ; 7 ;  TW; &TW; ?r_us  0chr‹ò< _kb_iq-{'ckb_IQ-_mn_tw< [mn_TW< Orh_u� û  |'crh_UA< Ooati V'hr_H�2ó +{ Es_CZ�? /_cB /'c? z4 ? Ob_pl@ {'csb_PL8vvys 4Ey_GB4íOy_gbB /'c? 1ás?z_cB sOzech½ ~ dæ;^da_DK;_da_dk~ ? Ðnish':         ð'da_DK.ISO8859-1',
* €'dansk':  	? e< Ÿ   'de_DE~  Oe_atB  ? /AT? b�  ? B~ /ch~ /CH~ d~ ü iü Iü li.utf8Â 
 ü …LI.UTF-8ôOe_lu6 
; Uø ?uts9 ? ø _oi_in {'doi_INº /uty �  'nl_NLº   ? @.iso1ƒ  ? 0Ov_mv6 4  k'dv_MV¹ ?z_bíJz_BT; ed cFee_Eå4í?ee_B '? ?stiô (et~ _/el< ½ El_GR±7½ Ol_cyB o'el_CY? /gr? ~ gr@euroD 
 ~ ? %15¾ æ0Uen_US¾ <On_agz 
 > { 'en_AG4?n_aâ ; â ?en_X?en_( ? w¹ /BWø /ca? /CA? dÒ/en_en_dlX ? Lv/gb¹ /GB¹ h¹ HÊÀ
    'en_ie'/:  ð'en_IE.ISO8859-1',
2   ?il'? xL.UTF-8; n; Nz /ng? -NGz /nz; Zz /ph? /PH? sc.utf8D 
 [-SC¹ sô /SGz /uku 
 Ô z /GB? s? /US? Q@euro I  ~ ? 50/za6 ¹   @ /ZA /zm? Mw/zw; Wz wñ,ZSz Og_gb{  ô ²Oglis¬ ? Ec? @.isoö1ˆ  ? ²±? _t ? ½ ß_united-state  ? ~ 
? J.437Æ -'C¯ e  Z p oY .  e'eo_XX%3~ o"k   'eo"?o_ez  w /EOw ?_usz  ? UœOo_xxô  ; ñ g9_'es_ENOs_ar~ Es_ARø ¸?s_b76s_B7? c÷Os_CL~ c~ C~ ü Cü ðcu':               ð 'es_CU.UTF-8',
"   @do':  	 ( ÇDO.ISO8859-1? /ec? /EC? s? S? /gt? /GT? /hn? /HN? /mx? /MX? /ni? /NI? /pa? /PA? e? E? r? R? y? Y? /sv? /SV? uvUvu½ U½ vzVz_tonia¸_'et_E? 0<   ? 5ñ?t_e¾ 
 @ u¸€ ?u_E|?u_e»? f·?u_F· fq ½ Zfa_IRhOfa_iz ; ¯.isiri3342@'; aISIRI-) ãOff_s/¶ Kf_SN¶ ¡; 7i_F¤îOfi_fC /'f@ Ol_phò ±|'fil_PH¼ Onnis= | éfû ?o_F ?fo_B /'f? ,~ r©À-1',
    'fro_be':  ð'fr_BE.ISO8859-1',
2   /ca? /CA? h? H? /fr? /FR? /lu? /LU? Ÿan\xe7aisE 	 $~ /e_¾ ? /nc<? @.isoÑ1Á  ? Cz¯ench_franc? ? ü _ur_itu  Z Õ'fur_IT.UTF-8s?y_ds 9 �   'fy_DE; /nlv ; *NL; gæ v Oga_I( Oga_iµ ? Olegoº n'gl_ESª�galicianA ? d9 to'gd_GB~  Od_gbB ? /erñ0'deð¢Ogermú /  ? (?de_(~ _ y~ ?z_eâ{'gez_ER²Oez_ed< dg&îp?l_e
1? Oreek,<  ~ Fel_G×7!Ogu_ië ? [gu_IN4vw ; vêvê? _ha_ng� j'ha_NG¹ ohak_tw< '( ð TW.UTF-8',
    o'he':  ð'he_IL.ISO8859-8',
5   /ilB  ( ? Obrew@ ? i; ¦ åi_IN.ISCII-DEV½ Oi_inB /'h? Ÿ.isciidevH ? Of_fj7  ¹   ·'hif_FJ.UTFwn·@'hneú < ÷ < r° ´ Er_HR.2q?r_hB /'h? _vatskõ? Osb_d8'hsb_DE¾  Ot_ht k'ht_HT°u8 Ÿ   'hu_HUz  ?u_hB ? ongariaì? Oy_amÀ k'hy_AMø  ; @.arm%8D ; 0ARM£_^/ia3  g :'iaw Oia_fh[ia_FR; �celandicz e'is_ISª1â/id8 ³ o'id_ID? _B ? Og_ng� k'ig_NGø ?k_cnk'ik_CA; Xô nô +sñ  [±?s_iB ð1so-1† 
_'en_U/? 5@ 	? 5o/so~  @ À-1',
    'is¿o8859-15':  ¤'en_US.ISO.  ,
. P'iso_ /_1@ '? € 
 tw 
 £   f'it_IT¿  Ot_chB  ? /CH? i�  ? ~ _alian€ ? u:  û õ 'iu_CA.NUNACOM-8ü Ou_caB ? 
Ÿ.nunacom8H ? w3 ¶  e'he_ILz½ Ow_ilB ? 
O.utf¹  � 0'iw~ 6UTF7j4ô    'ja_JP.eucJPr_ja_jpµ ;  N ? v .mscode> ; ISJIS° O.pck7 ë 
: pØ%_panes« 	›%; O-euc³ ê ›; c; pÖ&kLôka_GE.GEORGIAN-ACADEMY§Oka_g/ §F þ.georgianacademyF'F .psA  ½ F PtÍ ‡ rA Ob_dz} ‚  ‰'kab_DZ.áOkk_k; õ  'kk_KZ.ptcp154Œ•Œ6l_G×1? /_gB /'k? ?m_kÏÐkm_KH.UTF-8', 
    'kn':	  ä'kn_IN.UTF-8',; /_i> ; ov ¥o_KR.eucKRv Oo_kr> /'k;  N ? ; kí N'kok(Oorea)w  ; ³ ; sæ ñ>'ks± sì  ; þ@devanagari.utf8‰ ; . ä?u_täåu_TR.ISO8859-9? wr ï  e'kw_GB? 1? ?_gbB ? y< zKy_KGROy_kg> .'k; _lb_lu; Zlb_LUv Olg_uv Vlg_UG/00_li_be{ Ki_BE{ Oi_nl; ,NL; Oj_it< |'lij_IT< othuani–f'lt_LTò 3ò On_cd{ { 'ln_CD{ úålo_LA.MULELAO-œ_lo_laz ? .cp1133F '~ aIBM-CP, ó O.ibmC @ �mulelao1‚ @ þ ð á¸?t_lC @ v³  x  o'lv_LV8?v_lC @ Ozh_tÝz'lzh_TWyðmag_in':           ð'mag_IN.UTF-8',
% `'mai':
   ( < ?_in? < /np< +NP´ _fe_mu< [fe_MU< Og_mg; õ 'mg_MG.ISO8859-150Ohr_r| Lhr_R| kv 'mi_NZ| { Oi_nz» ? ?q_n‚ {'miq_NI6/jwê.jw&k´ •   'mk_MKö q?k_mB ? l~ l¹ lô ? 'm;  ?n_ml 'mn_M‘/niw N'mni² rí r;  v ? 'm;  sv Es_MYá1×Os_myB /'m? t< _Et_MT~ 3~ ?t_mB /'m? Oy_mm� j'my_MMTonan_tw< '( +TW< b8  Ðe'nb_NOõ s_nb_noB ? _ds_de@ {'nds_DEº Ods_n”< +NL< /e_3\ 'ne_3onhn_mx³ [hn_MXw Oiu_nó[niu_Nó  µ'( +NZx 'åðl_NL.ISO8859-1',
À    'nl_aw':  	 ( °AW.UTF-8',
+   /be; ÇBE.ISO8859-1? /nl? /NL?  n< á On_NO? ?_noB /'n? < ~ o~ Ÿo@nynorskƒ 
?'ny? ½ ~ p_no.iso‘1@bokmaŠ /'n? É ? orwegiaÀ? r3
 š  o'nr_ZAø Or_zaB ? sùI'nso 5ö/so� A y¾ z;y;? ¶~ 7/oc½ ^oc_FR½Ooc_fÿ'? Om_et� j'om_ETìOom_kìOom_Kì o¶  7[or_INz ?r_i+ð; Os_ruð Js_RUv p$ ± -pa± /pa± ; p ë | 'pa_PK± /p_S± ;p_Ac?pap'(   cA< CA/pd�´ Nd_USOpd_d”Dpd_D”À9-1',
    'pd_us':  ð'pd_US.ISO8859-1',
2 ?'ph< Ÿ   'ph_PH? _B ? l~ El_PL~ 2½ ?l_pB /'p? Oolis ? �rtugueseÅ 
e'pt_PT½ zo? o_braziÉ  ? /BR? ?sixy 
 à5 'C-Ÿosix-utf26 
1 p) 
_ Op_AN¡  Op_anB /'p? Os_af? ¥s_AF.UTF-8ê t8 ¹ ™Ot_brB ™?t_p�  ? _quz_pR z'( *PEù _raj_it'( +IN< oó  5Uro_ROî‹Oro_rB '? Omani0? u½ Ku_RUø ?u_r> /'r; /uay  ; ”UA.KOI8-U¤/ruñ ,/ss/ { "RU{ R{ w´ êEw_RWê¸Orw_rB /'r? /sa£\ 'sa_£?sat< '( < ?c_i–Zsc_IT"/sd0.sd² d± / '; ô@devanagari.utf8‰ À          'sðd_IN.UTF-8@devanagari',
    'sd_pk':  	 ( "PKF ; Oe_no; Le_NO; ¿rbocroatianC b'sr_RS; e@latin| _gs_lt: Ì r'sgs_LTB < h8  ? } þh_ba.iso88592@bosniaT  A `CS.ISO( &-2€ >_hr/  t  o'sh_HR? ~ H ?'hr? /sp6 � ½ /yu? º_hn_mmB |'shn_MMº?s_cj ¶ 	 {'shs_CA< it  > \'si_Lé?i_l$; ?d_e¨Lid_E¨_inhalï ² ¯ þOk_SKc ?k_sB /'s? lkOl_SI~  Ol_csB O'sl__?l_sì ? ~ ?ovaý ü _ovene¿ ~ 	/en
¦;?m_w;3m_WX–Oo_dj·  1Eo_DJµ1? èN 'soè?o_k1z /KEz s‡Oo_SO?  +rn5ø /p_­? Oanis‘V'es_EKvp? Y_spaiHÀ            ð  'es_ES.ISO8859-1',
    'sq':	  e'sq_AL? 2? ?_alB ? /mk? …MK.UTF-8z r8 á Lr_RS; Ÿ@cyrillicD 	/'s; Olatn7 	 J ; Cv f@latin· ?_cs?  ˜$r_A 	; @.isoÂ2W ˆ | ê«Or_cs6  ¶  ? l . 	» /me» ,MEr/_rö ­/_r· ; · /sp· C!7/yu? € Ÿyu.cp1251xx CP( ó%yuó† < ó? 5? 5~ 5¼ ~ ? Ÿmicrosoft? ù Outf8¶  ® < v
¶  ; ² ; 
6 
 :  v ß�Es_ZAH‡Os_zaë 
z ? t< ~ t~ t~ ? v~ Ov_SEü  Ov_fiB o'sv_FI? s—~ ?w_k? <w_KÖOw_tz¹ Kw_TZowedish=  ô 3Ozl_pxÀ   'szl_PL.UðTF-8',
    'ta':	  æ'ta_IN.TSCII-0= ?_in@ = o.tsciiC 	= 0> = /lk6  = ILK.U/¯cy_in.utf8A 	@'tcy0
< e3 	u  “e;  i;  gv µg_TJ.KOI8-CàOg_tj? /'t< h9 �õ h_TH.ISO8859-11| ?h_tC /'t@ 	.tactisŠ @ VTIS62Ø | @.tis < aÐ
è< ø Oe_np² A {'the_NPžOi_er; ~ 'ti_ER; t; T; gw N'tigw Ok_tmw Kk_TMw l8 a7l_Pa`?l_p`? ø~ Fn_ZAß5 ?n_z{/'t@ Oo_tok'to_TO9Opi_p{'tpi_PG< _÷ Er_TR÷ 9ö Or_cy¶ Or_CY? t� /'t~ 		W  9'ts´½ s³? _;åt_RU.TATAR-CYR~ Ot_ru;? Àtt_ru.tatarc_yr':  ð'tt_RU.TATAR-CYR',
)   ¯ru@iqtelif>  ( …RU.UTF-8. C ourkish=  i ô  'tr_TR.ISO8859-9‚ _ug_cn= ‚  'ug_CN‚ ; k8  ; ¶k_UA.KOI8-U< ?_ua? /'u< ?niv; µ 'en_US.utfu �niversal> 9  N o8@ucs4C 9 §t Om_us. ˜ @'unm® 
< Q7  Õ'ur_PK.CP1256x ?r_iØ<r_IØ?r_pÛw zë  ´ k'uz_UZO?z_u> ; Ÿ@cyrillic‚ ; /ve/  ©  j've_ZA± Ove_zÄ; iv ”i_VN.TCVNØOvi_vØv: ?.tc? ': 	O5712º : _visciò 	: iVISCIIê .< ?111w < w˜ ›Uwa_BE1{ Owa_b'? ?e_c’Š 'wae_CHUowal_etí � < Kl_ET< ?o_sKwo_Sôx¯  | 0'xhF1/xh? y	 x  0'yi$é5¬/yi` < Oo_nglz 'yo_NGlðyue_hk':              ð'yue_HK.UTF-8',
# �'yuw_pg':  ( *PG< /zh8  S Ä'zh_CN.eucCNw _zh_cn> ; igb2312< _.big5A 
 < "TW( í v  ‰ 9 
 : ±  /hk7 ì !HKu Whkscs´ #hk F  z ? s¥¹ [SG.GB/_sg.gb¾  { < K´ /tw­  ð !  u h/twh TW( )TWu   {  ® ; u­ ° åu_ZA.ISO8859-1z Ou_zaB -'z? õ2}

#
# This maps Windows language identifiers to locale strings.
> õ@list has been updated from
# http://msdn.microsoft.com/library/default.asp?url= ð
en-us/intl/nls_238z.asp
#Ž Ôinclude everyœ  up É RVista¨ sNOTE: tì ÷ping is incomplete.  If yourÿ ðs missing, please
# submit a bug reports ¡the Python ¤tracker at abugs.p" ð.org/
# Make surex  Œ Ð  J w ‹ dŠP and $ ´suggested
#þ @codeï "
wÊ_²1= {7õ0x0436: "af_ZA", # Afrikaans! ¢1c: "sq_AL! ulbanian  õ84: "gsw_FR",# Alsatian - France)  5ej Bm_ETI õmharic - Ethiopia*  01* 3r_S” 1rab) pSaudi A - 8- "IQW    V DIraqR c% *EG% SEgypt& $10& *LY& DLibyq $14& *DZ& UAlgerÆ 1™ MÆ tMoroccov œ *TNP UTunisP 2ž *OM( %OmŽ2� *YE% DYeme´2› Sé &SyÁ 2™ *JOL EJords 3˜ *LB' dLebanou 3› *KW( TKuwai…à3801: "ar_AE",ñ # Arabic - United ø Emirates
    0x3c01: "ar_BH",5 sBahrain( $40( *QA( SQatar& Ã042b: "hy_AM& TmeniaF @044dn Bs_IN  ö ssamese - IndiaH c( Bz_AZ( ¥zeri - Lat“ ?082% …CyrillicM 6u Qba_RUM gBashki´   Teu_ES  qu’ HRuss“ ’3: "be_BY' ielarusÝ 5" nÝ cBegali† @201a 2s_BA0Bos; - ° /14* 	ÿ 047eQ Br_FR‘ ãreton - Francex @0402' Bg_BG' Pulgar· #0045¸ Bmy_Mµ3Bur”ÖNot supportedQ  	$ca0VCatalãò004: "zh_CHS",# ChinâˆSimplifiK , !TWœ , FTaiwT 8T 7( 4PRC˜ c% +HKM `Hong K cS.A.R.2 1« SW „SingaporF$14] +MO] iMacao Y 7‹ :CHT³Traditional† 1048PoÈCorsicaÊ Bhr_HñPCroatÉÈ1b$hrb  2 - mr 0ñBcs_C^VCzech ‚6: "da_DGVDanis 8t`gbz_AFÚ !Da˜@Afgh( t´ 46e adiv_MV* @ivehÄeMaldiv‚0041 Qnl_NL[ôDutch - The Netherland±$08/ )BE/ vBelgiumÇ ‚9: "en_UÖ`EnglisX 'St3080/ !GBV / eKingdo_ c0 AT0 uAustral9$10+ Cù+ TCanadô$14( N–( `New Zee…1° I- 0Ire0$1cV Z~ ´South Afric„ 2¬ J. GJama) ­ C0uCaribbe	2« BØ TBelizc2ª +TTƒtTrinidaý 3¦ Z7ý tZimbabwT 3§ PÞ* pPhilippœ+4W �- œ4T M	' VMalay34ú Q `0042.Cet_EÐ0stoœ ²0438: "fo_F€dFaroesè ð0464: "fil_PH",# Fiölipino
    0x040b: "fi_FI", # Finnish c Br_FR ärench - France' #80' *BE' tBelgium( c( *CA( cCanada' %10' H' ´Switzerland, 4, *LU, ¤Luxembourg+ ¦ *MC+ VMonac 62ô Cy_NL' Âisian - Neth~ sT Á0456: "gl_ES- …Galician  ’37: "ka_GXGeorg  0  Dde_D  !rml  Ge	 yH 8( C > - $0c, "AT” K — - Austrig| ;T ;4S L'+ ¶iechtensteiõ ’08: "el_G6TGreekÊ 046f2l_G_  nÒUic -  / 4¥ Rgu_INÍ uujarati  6l Qha_NG  ¸Hausa - Lat‘ ‚d: "he_It eHebrewC  39 ic FHind`  0e 2u_H`iHungarÂ Ð Bis_I2IceÎ _ ¡21: "id_ID¢ `IndoneS" 5Ÿ 3iu_�Inuktitutàuyllabicr8- 	õ  83•Bga_I[@Iris»!Ir¡ }  10Ÿ 2t_I.BItalï 
 �' �  ' ‚  41ó Qja_JPó uJapanes0 44v$knr0Kan e - Ind¡0043[Qkk_KZG VKazakœ 53I2h_KØKhmer - CamboF 8£ðqut_GT",# K'icheltuatemal0048lRrw_RWp �inyarwandRR	 75, 1kokÄ †# Konkan7 12� 2o_KGKore4tBky_KµfKyrgyz[ ‚4: "lo_L&1LaoÑUo PDR% 2Ö Qlv_LV¬ HLatv–2Ÿ Blt_LÖwLithuan"  82Ù1dsb{Â# Lower Sorb×ã  46/ 3lb_-$/2±Qmk_MK• ÈFYROM Macedo|  43M Qms_MY( �Malay -  s8( Bý  õ - Brunei Darussalaa 44ô!ml•" #Q  ! [‚a: "mt_M HMalt¡8ÁBmi_NzFMaorÜ7< `arn_CLQ–Mapudungu4à r‡ GrathA ¦ !ohñ�# Mohawk» ã5&Cmn_Mþ Congoœ„Cyrillic, 8, C, àPRC
    0x0461ð: "ne_NP", # Nepali
    0x0414 Bb_NO ôorwegian - Bokmal* 8* n* tNynorsk+ ±482: "oc_FRU QOccitS eFrance(  48( Br_IN( Åriya - India% ¡63: "ps_AF% õPashto - Afghanistan, ’29: "fa_Iy WPersi  15K Bl_PLK Uolish=  16 3t_B= �ortugueseGrazi+ #PTI + P8 9!44- aæ fPunjab‚ô6b: "quz_BO",# Quechua (Bolivia)  8) )EC) uEcuador) c) )PE) EPeru&  41}Bro_RúRRomanù y ±417: "rm_CHî  8 uRru_RU 'usu0243à `smn_FIŽ ÃSami Finlandb #10$ j]!# $ dNorway# G 1j_SÕ # VSwedeþF eE  F ithern O $08,  N , 
X c,  Á , 
Ë 2Ë sï TSkoltÊ { !ma¨ § ?Sou§  1{ )maö , 
§ u44f: "shtSanskrix @0c1a  2r_S	BSerbð„Cyrillic¢ * !BAÒ* {Bosnia 1 /08[ DLati¡1' X . 10459Bi_LK† Pinhal ‡Sri Lank$cÆ2s_Z± 2NorNSSotho× 0043—$tn& qSetswanR SVAfricX 1ƒ 3k_Sƒ Flovaç2<Rsl_SI¡ @loveCq 0rRes_ES! p°uh - Spa$08' +MX' UMexicÀ c( O „ (Modernâ$100 G¦S „Guatemalé $14+ Cü+ vCosta R1¯ Pm, UPanamT ¯ Da( ö Dominican Repubz2³ +VEuVenezue³ 2³ _ eColombB2± U  ­2¯ A„ArgentinÚ 3¦  ‰ Y‹T 3¤ qDChil3¡ U{ UUrugu3¤ +PYGPara* à400a: "es_BO",ù # Spanish - Bolivia
    0x440a: "es_SV",) ´El Salvador- 8- +HN- „Honduras* c* +NI* „Nicaragu‚ $50+ +PR+ ³Puerto RicoX 5¯ +US- ò United States
#ß r0430: "+ óutu - Not supportedW Â0441: "sw_KE, ewahili  1d 4v_S "edNdSweden( 8( Fö w( fFinlanp 5vôsyr_SY",# SyriacG ±428: "tg_TJŽ õ Tajik - Cyrilli( 085f( Pmz_DZF õTamazight - Lati˜ 0449) 2a_I¸UTamiln  44 Ct_RUn $taò0044© %te: Uelugu;  1e; Bh_TH; %ha4 85SRbo_BT `ibetan‚Fhutaœ ( Cœ ( 6PRCi ê 2r_T$uTurkish  42ˆ Bk_TMl Purkmel 3 483ug_n ÖUighur - ArabZ 42Q Quk_UAQ wUkraini¶ 2ú `wen_DE{±Upper Sorbiä uGermany¡ 2w Br_PKP %rdE8 �0Urd¨5Ind¦Â0443: "uz_UZ@ 0zbe	æ8% 2ÔBvi_Vr¥Vietnamese¯ 5ÿ Qcy_GBo 7Welm8žBwo_S? æWolof - SenegaW3WBxh_ZCPXhosa' ¤outh Afric@0485`!ah„`# YakuÅº 7{ $ii¾XYi - '6Ú Qyo_NG¸ PYorubu WNigerO3p $zuœ ñZulu
}

def _print_locale():
ô""" Test function.  ñ categories = {} M Vinit_ ( = !):1  ³ðfor k,v in globals().items‹  "  öif k[:3] == 'LC_'E # b q[k] = vg _” ) Gdel 1  S RALL'] 1('Ló defaults as determined by get A'` B R-'*72 ¿lang, enc =8  • 5 ÐLanguage: ', 7 ° or '(undefz )d �Encoding/  ` . 	)á úsettings on startup:d È  ´ @,?y¾ >ies¿Ö 3 S '...Z  · Ý EM y8 ( C O'   Àundefined)')#
  ûprint('   Encoding: ', enc or '(undefined)')5 !)
 B   ñ'Locale settings after calling resetl# 3():W : R-'*72L 	' j ófor name,category in  Áies.items():-  à U 3 S '...l   Blangç 5= g� M y‚  ( C   �Language  ? ! 6 V%6tryÈ 0¢LC_ALL, ""£ fexcept* ¯ DNOTEZÆ H ò does not support the default ¨9b Pgiven€ - ô	OS environment variablesqLelse¤ À � 5» ã  A \ 3 5 ã 7   ü; , K  	?
: C9 …)

###

HÂLC_MESSAGES
6¢ NameErrorœVpass
«÷__all__.append("A �")

if __$ã__=='__main__'K VÓPaliasZG_ _g(  	 Ñ'Number formaUû, ñ_test()
"""Interface toÐð+liblzma compression library.

This module provides a classu @ rea€ and wri×K ¡ed files,
0 e2 Pincrewal (de)y ,G ñconvenience function; œ
one-shot8 © 2ese˜  ¢ 'nd; ¿Abothô !XZi õlegacy LZMA
containK s, as well 8rawÖ Ðdata streams.V#

A = [fã"CHECK_NONE",  YCRC32 &64 ˆSHA256",@ fID_MAX$ tUNKNOWN% pFILTER_Â 1%  h  WDELTA  7X86  IA† v 1 7ARM! ‡ARMTHUMB wPOWERPC USPARC˜ ¡ORMAT_AUTO#  'XZ #ALF 4RAW> `MF_HC3, 
 #QMF_BTÔ 
  5BT46 �ODE_FAST9   NZ L ÑPRESET_DEFAUL!  ðEXTREME",

    "Lý	ZMACompressor", "LZMADec DFile  0Err-  
    "open 3   dA   ðis_check_supported",
]

im ” builtins $io
 ãos
from _lzma / *  ð_encode_filter_properties, _Œ  e _¹ ó	ion


_MODE_CLOSED   = 0 0REA   ó1
# Value 2 no longer used, PWRITEÀ= 3


class Z F(r â.BaseStream):
Rñ""A file object providing transparentO W (de)À .B !An  m ð can act as a wrapper for an existX n A, or‡ ó
refer directly to a namedœ cn diskr ‚Note tha— y ¶ ew ‚*binary*: ñinterface - data reads °is returned° 0bytÂ2and( ðto be written must Ugiven/ .I 2"""
ñdef __init__(self,„  È Ð=None, mode="û!*,<  · cformat+ ÅP=-1, 0e us% %):D P"""Opš �-§A2in ƒ H y  � ¡ »�be eithe°aactualÂ ‹% (ý Va strÁ ;¤or PathLikMð ), in which casµeL ×%isÁ  Ù ed4 it� 6  Ç °B Í  ®Ge toà  rO 1"r"� <  ‰Ò(default), "w `(over)H 6ingâ ""x AcreaÄ±exclusively´ ""a!  òn>p. These{ ä �equivalenã5be P0"rb»w @xb" †Á"ab" respecti Ö *  òifies the containr0mat'1useó     ë² ,!IfA is ‘Sthis s; àFORMAT_AUTO. OPwise,k Ò 0  E / 'XZ§ Ä¦  ‘bgrity   toÌ /€is argump5cane @only| ó` when - Áaž a³e. For Œ Â ® ÄCHECK_CRC64./ QALONE{@ ¥RAW do notŒ U Æ 4s -gqSmats,â <D  omTì2be ‹ GNONE:Wç »†" **7)is® ±meaningful,Ø `shouldL„  w3e *UI * ³ 1als7 ‚, exceptŽ�$isI 8(ùÀ case
      ó  it is required).

  ðWhen opening a file for writing, the set �s used by B ðcompressor can be specified either as a % 4et / 5ionC °level (with[ " *, ò
* argument), or in detailQ ecustomE Èfilter chainL  sM õ. For FORMAT_XZ andF  RALONEý adefaulA to£ ãPRESET_DEFAULTÝ F Ñ 	g 2RAWO ócaller must always0y5terG Ì ;p 5raw;óor does not support� # ^sô^ð (if provided) should¿‘an integer  ¥range 0-9,› õoptionally OR-ed ½“constant #wEXTREME€ ’� ñ	 sequence of dicts. Each ƒ ² Ñhave an entry¼°"id" indica·0 IDH  É z e, plusH BaddiÍ D 1iesF â As to�; .6 5""" û self._fp = None Qclose LFals ömode = _MODE_CLOSEDž1if    Òµ"r", "rb"):a  Åêif check != -1    ñraise ValueError("Can;§y<ðCrityK Û  B  /"w:œreading")¦ wi¹ )­ !ê  ¯ “ µ Qformaý±   =OIAUTOù  À(_cåEREAD# )eläwä wb a  x xú !isyP  Ÿ %XZz  Ö� YWRITE$ Ý·¥or = LZMAC÷(e = ,C=”0 n  #= ,ŽRters=|sR˜ upos = 0² Jelse qInvalid[‚: {!r}".½ ()))�1isiÑ0ce(þname, (str, bytes, os.PathLike)�1"b"ª"inq «  t j += "bÈá 9�builtins.ª‡  ; àclosefp = True'
  Ðself._mode =  U_code# ÿelif hasattr(filename, "read") or …write"):F  p i Tfp = H     ‚ ‰ *seQ ôraise TypeError("W ñ must be a str, bytes,v  ± õPathLike object")
ˆ 2if § ‡ Ì= _MODE_READ| ôw = _compression.De rReader(J †fp, LZMA 5or,q     trailing_eË =1 Õ ’, format= Å €ters=fil )J r Ñbuffer = io.B #ed“ 3rawî ‘def close§ «Â"""Flush and" A the=.)0Mayañcalled more than once without Ì 0. O D 5 is³ € ðd, any other operatioI ’ it will èba Valuë.C 5""" ½\CLOSE¿Ueturn: :tryßK  ¼v.Ô (—% f = Nond   hJ 
|ZWRITEž  0 + 1fp.lÅ.�@or.fÄ/()‰ «o(	� kfinall! ƒ %ô .fp¥  & © & m 6 +  S RJFalsQ& PËÉ0@prq!ty	dN
ÁTrue if this2 is(d.„rYEz  l ®ol  RD 2 descriptorŽ¡underlying� 	ƒ q¡check_not_%dy	¤ 3fp.‰ seekabl� 1whe±¥ �supports < 9ing“ r  9\ )b® ³.<  ¡ '0  * 
•Œ 0wasJ1ned1 B ’  M /._%B   €´  S   " B   92¡ ðpeek(self, size=-1C):
  õ."""Return buffered data without advancing the file position.
F �Always rJ ñs at least one byte ofW q, unles" EEOF.A ðThe exact number1  9 T öed is unspecified; 5"""G õself._check_can_read() ±# Relies onÏ àundocumented f~ cthat B
ñ Reader.peek() aä L î p(except6EOF€ 2  ¦ p^ Rsize)OAdef ·  &  ,  <=-1²�ad up to  Ñ uncompressedpas fromä  ³ª"If3 ñis negative or omitted,{   until EOFuXreachq0…s b"" ife  ,  al» yù ¤"$ U (
$/1(%*@, whÑ1tryáuo avoidã0mak �multipleZaunderl; €stream. 2sšaH ê€'s worthÛci‹©f	tœ^"t 6< 0  ^õ
 = io.DEFAULT_BUFFER_SIZEÊ rá
Á �1žOline¡ a '  Å .€terminat¢1newF @(if @ent)�¦retained. ÷Ì Dnon-â, no more than"qwill beü@ (in3%chE 0cas4 eÆ 0may, i�Plete) ^Ps b''."H ˆDwrit… u
HW # a3`objectUë�   £´  r 1ten\Uch is,AQ len(‹ P. Not>`at duey *Fing,Wuon diskG  e�not refl° !he\ z ¾aclose(HcallÁ2	 E e3Y=ø 4or. Ñ £  –R._fp.N & &ed# fpos +=B ri,sŽ > €, offsetjúence=io.SEEK_SETçðChange the file p³osition.

  “The new p õ is specified by offset, relative to theA p9 bndicat6 òwhence. Possible values for  V are:ˆ  � ó0: start of stream (default):‰ ° must not b¹ g” �  F ¤1: currentE £ 	' f2: endk ;a : &ve¨ pReturns8Efile=XðNote that seekingY@emul"°, so depend !onO µparameters,ª  this opera¸@ mayø õ extremely slow.. 5""" ðself._check_can_‡ %() rÈ  & qbuffer.# ð¦)ú �def tell(0 %):F 2"""Á w
• §not_closed— #if“ ömode == _MODE_READv  æÀ ¢ ã `pos


È Popen(£ `name, i †="rb", *x ©¡mat=None, F¤=-1, prese 0fil®% P encoØ s errors qnewline Hð"""Open an LZMA-comf @sed ¦ ñ in binary or text³ k "  È A canPitherL bactualC " @(givg 0s ac, bytekðor PathLike object),y �which casÌ e H – —@ned,— !itÿ … €an existÜ ¡ S  :�read from6 0wri%oÌ  ‹ Ž` argumÀP P"r", £@, "w w¸ "x 2xb"À1"a"• @"ab"È? \   rt1 w x bor "at.  cÎ  0 › cformat
1 an ¸ ByK Ôpion setBs, a öCõ1or,$De3 oÎdF  ) CFile• :ForÛ -Afunc, is equivalK¶\  C P Åconstructor: �, ...). I¤!is,Ø ë,æä´‡providedÅ  rÕ,¹æ 6 u "re7 npwrappedŸ!anÈ ¡io.TextIOW ð r instance with­ Ó³ A Phandl®`behavi… j  ª %cing(s)± Ï`if "t"†  (�  b  µ`aise VE‘("Invalidþ �: %r" % (Q ",)ÉIelse] À  P  ¢! f  Àr("Argument ó'encoding' not supported in binary mode")
  Áif errors is4 UNone:  & Àraise ValueE+ Â("Argument '< n newlineo #= p À 0lz_í ! =ô ó .replace("t", "ð_file = LZMAFile( cname, E ’, format= �, check= ,n  *  rpreset= £, filters= !)
< `if "t"¥ ± ~÷	return io.TextIOWrapper(¶ $, ó,É#, &å7elsÐR A  


def com¤ es(dataî ”FORMAT_XZñ @-1, ( 0et=)Ñ   )º C"""CN À a block of Y .ð �Refer toq, àor's docstringpà a descriptionD 1the1o Cal aŠ2s *šA*, *– 	 ª s* and *s*„ �For increÉ%al»ion, use anŸ ‘ instead.ƒ 1"""  9;Ê (� 63.šŒ A . 2res1) +� ƒ.flush()£)de& ¥ßAUTO, memlimiŸDJ ¡. £=™÷ ›™ �Áresults = []® whê7Trua ÄT ÆUÁ ï2tryö     reo T . Ù„  & aexceptaT
D 3if º 
  : ñbreak  # LeftoverYOqa validY ò/XZ stream; ignore it½ I   
    ñ1 # › ð on the first itera�—; bail ouS µ .¦bnd(resê U !if_J.eofÛ t  �u (C"edá �ended befÈ  �  [  ‚"end-of-ó marker was reached <  š3 = › punused_ ¯½ :ata· Ž' Î€b"".joiný  {ô )
"""Read/write“ßñ
Maildir, mbox, MH, Babyl,ð MMDF mailboxes.p�
# Notes> ðauthors of new mailbðox subclasses:
#
# Remember to fsync() changes ð disk before closing a modified file
# or return ðfrom a flush() method.  See functions _l _% Sand
#  g ô e().

import os
 Dtime „calendar dsocket Terrno Dcopy !wa¦ S Temail  u.messagi  …generatop i_ ‘ntextlib
ü ctypes ½ G8 ôicAlias
try:
    áfcntl
except Iî RError%  ñ = None

__all__ = ['Mailbox',  0dir m H PBabyl	 aMMDF',w  { R   'Mâ  gaildir  G  %MH 	D `    'g  È  a cNoSuch²  	I ƒNotEmpty õ  'ExternalClash bFormat ó]

linesep = os. ñ.encode('ascii')

ë } Vã"""A group of ìñs in a particular place."""
­ ðdef __init__(self, path, factory=¥â, create=True)o  sô """Initialize a� s instang  )    ]  ._] Ü  
 @.abs @(os. À.expanduser( !))¥ ? – $ =  Æ 3addÁ ü 
© 4AddC andØÑ assigned key l   ñraise NotImplemented¥1('Mú€ must beô! 5 by‰ § I  bcremoveŸ :key› R @ the† e¨ "; … "KeDÿ if it doesn't exist´ G•__delitem
¹ ÐÙ   ŠddiscarŽ  
3fë Í 2s, Q * iÙ ` Q  }     t3y   Fpass§ \__setá ,%£8¹ ¤k6getU‘, default´À  Æ¿ ,ã7 _† �5__gN ó¹’
B ‚ œN  _ ,
Ó ÀReturn the kó'eyed message; raise KeyError if it doesn't exist."""
  õif not self._factory:  % breturn" Cget_j U(key)) Jelse7 ñ	with contextlib.closing(j  H AfileE P) as  
A | ž (+ !)
{ @def L ”  ]  , š L B"""RÃ 2a M&ó representation or7a9	%TáNotImplemented_ö('Method must be i! Û by subclass'° 4str¯ 	' ®  3³Uses email..ö òto create a 7bit clean f P A Tf the`
W	m ¶_from_bytesë  —R).as_q (% Â & ² ëÆ> ‰å Ä	 % _-like¯ jriterkey”) n % �ator overFsïZ4� � list of†  u   |.¶ N )Q  Cvalu†ò 4allè
ú !fo# i ^ s J ;t<  ‡ ! =AU[key]j  eexceptw
P  !  CIinue6 ayield Z ú 	 __˜ !__ò r2 Z-7 s  " 8 9 o �Sús. Memory intensive+s  6 Ž 	x §Oitem˜ 4,¨) tuple¯’¹ l
ÿ 

? �À) tuples. Meómory intensive."""
  ñreturn list(self.iteritems())
' ñdef __contains__( q, key):!  K B"""RK °True if the$ ûed message exists, False otherwis� öaise NotImplementedError('Method must be i! Ù by subclass'¶ 3len± ¬ ¤a count of¥ As in» zmailbox-� 9QclearL
› ¥Delete all” 	… 0forX ¨ ±Wkeys(C  Ž €discard(©Ê1popu Áç, default=NoneE 3"""ˆ ÇCand 7dit, orE 	§ 6try ” �result = � U[key]=¡except Keyë8 ¢© 4  F .ã  e   œ p 	ù  Øý ê Ðan arbitrary 6,�y) pair ù 	í ” E˜› ] Â  � ¡)º õ
 # This is only run once.ö Kelse”;D('No¶ ËÇaupdate_, argü bChange½ð	s that correspond to cer �sðif hasattr(arg, ' ~'s'{ ó €source =‰ |ò M mI  ÁE 7x ' ’bad_key =£ ß|¹ 
Œôâ 1elfï$ =šY    ý
 ! –  [< 3if  
… rP with­8(s)Qflush�@"""W	á any pending csü Idiskø| ¾4Olock–  BLockš¢M/unƒ U …  ñ it¹ 3 /edGBclos½
­FÅ£" Ð the mailbox.S"""
  öraise NotImplementedError('Method must be i! ñ  by subclass')
M ñdef _string_to_bytes(self, message):)  y d# If a ð  is not 7bit clean, we refuse to handle it sinc	 J ôlikely came from reading invalidf ùs in text mode, and that wayO Åes mojibake. 6try¿  Ã dreturn] õ.encode('ascii')8  except Uni  ZH �QValue 1("SEe input~ÆASCII-only; ¾ ‰   ")sr or a Mr“ instead"¤ä# Whether each¼ d 0end!‘a newlineÂ ƒ_append_ ‡ = FalseòSdump_á
ïð, target, mangle_�!_=A 	óThis assumes the8 0 fiô`s open› abinary¾˜u"""DumpÌ €contents7€ H .ôPif isSance(½ ƒ, email. .Cª  iÐbuffer = io.Bã6IO(í " Sgen =L ’generator, G (G 
=, 0J „.flatten¥ 
! F k.seek(< sdata = "  § !   ð.replace(b'\n', þ:sepl Lp.write(6 
 0if ì.1 e Û 2 ¤.endswith(b 

 >±# Make sureŽ ;  <  ¡ 4  	£ c Ç " /el÷a(str, =,×;IO)û? 5io.2 Ð �warnings.	 ”("Use of 1 äïis deprecated,ß  À ãsØ3, D9 BionWl :, 3œ > H=)P.getvuæ ;str
V ýÿv 
� )if46  ¬ ¡Fã0', ­> 
` ? àC 
X ã5 æpthasattr5ð, 'read'):
        ñif hasattr(message, 'buffer'):
$  �warnings.	 ý("Use of text mode files is deprecated, "G  R Ö"use a binary> Ã instead", DD BionWx M, 3)M ¸ 3 = 
 .À 	) ù lastline = None ®while Trueñ 4 Z @read (‡ ð # Universal new& ™ support.o  ý 0if ! ÿ.endswith(b'\r\ns /  , ! =3 Ý[:-2] + b'\n'X /elZ X 1X aif not� $ ¢ ]break� ñif mangle_from_ andD d.startú _From £ 2b'>' ! +B M[5:]o '€.replaceY1n',4 >sep·Ðtarget.write(A # < ! 	w ôif self._append_úê t  ? ÷ P  — Uô # Make sure theÜ 2 3$ ag	‘  �Ô  c & ;elséõ	raise TypeError('Invalidu Àtype: %s' %  ,1))
W ñ__class_getitem__ =  ñmethod(GenericAlias)


 � Maildir( 3boxoô"""A qmail-style'   rbox."""v ²colon = ':' Ðdef __init__(—ð, dirname, factory=þ�, create=ôw  8À"""Initializœ ™ 1dir“Aance{  )      � q l W ™ ±._paths = {A Q    'tmp': os.  Q.joinÉ 0 !,   *),4 ?new4 
   4 ?cur4 
   4 }v ¦ gexists¨ S Õ #ifpæPos.mkv, 0o7000 C   @for 3 int  ›s.values(u  2   b  - \  8 cNoSuchëª £  0tocÑ( a_mtimeï'Z`: 0, '˜<: 00  o_i@ = 0‹   # Records    P A we ( ucur/new x Bskewö I ð.1      # Adjust ñ)if os/fs clocks are skewing

    def add(self, message):    d"""Add õ and return assigned key."""3 °tmp_file = V æ._create_tmp()& &ryf  j , Sdump_‡ ( $, S ? Áexcept BaseE :ionP 4 g.closez  m ¥os.remove(' Fname`  % Uraise± b_sync_M 5 0 Öif isinstance¹ �MaildirMX ` „subdir =^R.get_ ¯ dsuffixQycolon +7 Kinfo5 4if 8 Š9 
&ˆ ^ %''î Jelse* ™ v = 'new) A ðuniq = os.path.basebpa.split~.ž E)[0]… GdestD Bjoin+ _T ", “ !, l +î ”+{os.utim,“  ï  (Þ Ngeta6 )QÚvdate())  Q# No *òmodification should be done after the+ 0is ¸…d to its™ Á# final posiG `in ord; ño prevent race cond# Ùs with changeJ örom other program t¸  zos.linkî , Ñ  ) Èñ(AttributeError, Permission ’ 6   ÃSe ÍA  L
¦   œ !OSƒ K as ƒ B 	 g áif e.errno == 	 z.EEXIST` , rá ExternalClash| €('Name c µ„existingJ: %s• P  %‹&“ fü q@J Á,­A"""RhÁEkeyeL!; [ A Keyä  C¡t doesn't á 	Xnwð elf._lookup(keyn¼  çddiscarë  �^"""If¤ † 2s, ã 9 it’ ð# This overrides an inapplicable implemeno c PsuperÌ!s.�  ¦F N¤ ¬ * –(8ð, FileNotFoundError):
         `pass


 ñdef __setitem__(self, key, message):)  - à"""Replace the& $ed' õ; raise KeyError if it doesn't exist."""M àold_subpath = x Õ._lookup(key)( „temp_key% Dadd(› 
% N A S  › ”sinstanceM ­, MaildirMø  ü  # H ô's subdir and suffix were specified by.   B ‡dominantö  S  , Felset : | àdefaults from !){ z Û P= os.˜œ.dirname(» 	K»œcolon in + 
Ê 2ð5 +4 a.splitŒ.$ U)[-1]§ !W %''& — {discardR0mp_ß  é Bjoinp  ,íšî 1new  : 	ED# +#B {!£os.utime(t¹ ,å   (·Igeta1 )ÎÆ.get_date())– ñ# No file modification should be done afterú+ õ is moved to its” Á# final posiG `in ord; °o prevent rEAcond# Ùs with changeJ  ÑÖother program Qos.reŸ ¡)Þ ñ 0âšÕsturn a û� represenGo¾ Ýaß	Ëy	Çá Eopen¦tG Ú), 'rb') as f?#if)zfactory  	4msg)_% &(fé # ?  9 
: × qÿªÈh amsg.seëBdir(=  È Ý 6 V 
Í B Pinfo( T 1 Ý
m
 u!re:msgF_bytesD& B9elf"(Â ðf.read().replace(linñesep, b'\n')

    def get_file(self, key):  ! À"""Return a % õ-like representation or raise a KeyError."""E ñf = open(os.path.joino  ._  , { �._lookup(‚ …), 'rb')D r† p_ProxyF¯ fÄ �iterkeysU ¿  n % �ator overè s¦ „ †refresh(z !fo- 3 in§ 6toc! %:try   O Ó Ë   eexcept/? ‰continue6 Pyieldº ¾ __* aains__þ Â°True if theD ÿed message exists, False otherwise™9key"¢ 3len� ›” count of‘ sK  § mailbox‰ $le[7toc#Qflush"
… ùWrite any pending changes to disk} •# Maildir& ðare always written immediately, soqÅre's nothingÓ#c %o. Fpass9Olock±  @LockS  ŽD /unF U H  `it is 3 )edø X Bclos2
NFfQ and " ` P 
¿list_folderÅ	 (  )+ Z nameÆµresult = []W ÂAentr¢0os.E 1dir\‚Å  ž0if G4 Q) > 1Ò  ¡[0] == '.' \e  8 4   ã isb  ñL )w  C À 0.apŽ(' F[1:]�Š ( éÆ@× ", "b ËÅ�instance # q Qd< ± þÊ +A ,), â   ‚factory=% . qcreate=žÒ3add3ó C<  ¾µCaÎ  Ù )it ª ÉÄ	ú ù ¨$ =l (G #, ó 
å Û2dirÄ$z G ') / ifnð  os.path.exists÷(maildirfolder_path):
  ÿos.close(os.open2  â, os.O_CREAT | yWRONLY,K  V u0o666)) áreturn result
 ²def remove_— r(self,  Ÿ ó"""Delete the named% ñ
, which must be empty."""a  ˆ  ê   =¬  
 Q.joing .s, '.' +N ® Àfor entry in< plistdirG  
 Õ, 'new')) + \u  y  ?os.? 	Wcur')í  8 qif len(‚ d) < 1 � `[0] !=¶ 
¾ 6  raise NotE�Error('Fñÿ contains message(s): %s' %ü  ï ¨ ¤ “  C and9 ¦  Ü  Atmp' .0os.c ?.isjk +ù "ù ðsubdirectory '%s' ?" %µ W  (”,Ü × )óroot, dirs, files5Pwalk(Ó û , topdown=FalseE C Û  7 @ Û2os.*
‚z = ”  ¸ 	U  › T mkS  € ,  Ï )¿BcleaPÕ ¯6oldY"tmp"œ°now = time. (€ .Ç X ­ ü
 5 Ô	0if � -ü F Q.geta¤   ò) > 129600:   # 60 * )36G  Š ;å< _count = 1@ ñThis is used to generate uniqueC÷&s.{±_create_tmpÑ
�C " a< !in:Itmp  ® ì‘¢/it¤@hostŒ� = socket% Ì`if '/'Ý 
Œ 4 =  ö.replace('/', r'\057' R :R %:R '72R  ió = "%s.M%sP%sQ%s.%s" % (int(now), 
 ± % 1 * 1e6)Žgetpid()   M‰.,ô ß  c· ´ 5 :tryWàos.stat(path)
  óexcept FileNotFoundError:
!  ùMaildir._count += 1  :try1  6 ùreturn _create_carefully(path)@ † oExists„   S Upass
: õ0# Fall through to here if stat succeeded or open raised EEXIST.H  á ExternalClash€ €('Name c ñ prevented file Õ ¥ion: %s' %L  ¦  õ ( ödef _refresh(self)=ñ"""Update table of contents mapping."""H  h ö&# If it has been less than two seconds since the last~ w) call,O pwe haveN un= ñitionally re-readG ómailbox just in caseˆ M ’ ðmodified, because os.�.mtime()½ 0a 2® p resolut  W 7theO ð most common wor  w Ü(FAT) and a 1E @typiä ‡y.  ThisO presultsh õa few unnecessarí hs when1!is4'edJ �multiple Ñ Q 0thaÔterval, but oƒøclock ticks over, wæ wwill onqAas nÊC.  BD Ì Š÷system might be being› ó
served by an independent 9 Ñwith its own š  � p recordUL �compare 4  � Áas from‘ ª WotherJ } "'sr ¾ âskewing relati‡2our' ™  ad– K °extra deltaµ . Awaitïðe default is one Ih# on�u 'anO PinstaªAvariƒ Y`so can` adó edg@deal® aE Ðparticularly Ô …Pirreg }.3 !if;.@P() -  ._­_tS> 2 +  Q Lfact¦S  =sS ( for subdirï^ Btoc_Â€ ,    % =«1get ° ._¿"s[Q ]Ì > 1if . # >³ k 5 s  9 Ã :TruÂ   ¸ M " =p P - sif not S p  3 2# R“E toc r U = {} O ,# =	  9O  ¯  S Pentry¡¢os.listdir.¾ p�Ajoin( !, B ‘àos.path.isdir(_p):
   �continue ýuniq = entry.split(self.colon)[0]2  P_toc[< ò	] = os.path.join(subdir,R )> 6 ðlast_read = time. 1()
' ±def _lookup„ W, keyÐ ð	"""Use TOC to return sub|   for given5 ñ
, or raise a KeyError."""h  :try)%ifÇ zexists(Ö  _j ", Ë  Wkey])¢  Z   œ 5 ) | eexcept˜ 
ˆ Epass* j †refresh(M¾ q ('%ð('No message withOp: %s' % ²) from Noneµñ# This method is‰ñbackward compatibility only.Ý  ë2nexlAB"""RØ@the " � �in a one-3© iterationÖãif not hasattrEP'_one5 g_keys'n  «c" " =â c  2 xªwhile Trueµ� Z ”[Ê � .� )^TStopIà 
i X ƒ   > Ê9 ó

class _singlefileMailbox( %R"""A % -& " m' uÉ�__init__á ", %€factory=§ �, create=:[  ¶ À"""Initializªj  ,   � .q 	l -f³1pen° .ÕV'rb+'5 M!OS;K as óáif e.errno == 	 ~.ENOENTy#if  × � w�  (   ;els‰     ÈcNoSuch)¼ æ ß  1 'elÄ Cin (Å dACCES,Ó GROFS³ 9   ´ 'rbC ' ¯ « ? $ ‚_;= f Rtoc =o ,   0  R ÑK = 04 ð pending = False4 ð   # No changes require rewrit-  p „   4 h M @_synŠ R M @needŠ @ Œ Plockeî9   p s_lengthå  x B# UsY drecorduC sizu ?1addÛà, message):
    ñ"""Add message and return assigned key."""
0 û   self._lookup() Btoc[! ³next_key] =3 sappend_l ( B 8 U += 1^ :# _?   Us the¿ "to ÷ ailbox file. WeF õ$don't need a full rewrite + rename, sync is enough.> Ø  Ä Aing_& V= Tru` ;) É A- 1
E °def remove(# ,[!):  ]A"""R Å Ekeye™ð; raise KeyError if it doesÐ _exist¥6keyf3del� ¬ ¡�  • #._á  Ü   º ¶__setitem__¿ ,|È _placeÉ J® Å få �iterkeysâ Ô  n % �ator overÅs|y¦yield from€.l )¨__containsf‰  z  	- ÿs, False otherwise¥ Âfkey in¨ ¡ 3lenœ — ¤a count ofsK  ¦ m˜ˆ 1lenŠW._toc'Alock 
ƒ ALocktj cif notÔ  A &ed| €_ _5[ . À # t ( -ed! un < 
— U ™  ¸ ite 3 )ed/if¥ 	f œ k § ÃQflush< 
§ WDany ü changes to disk¦ O1 
PÈ  3
#  T2# M~ñs have only been added, so“1ingC ¡• =  #L± y _÷ 3 , Þ® " =E	p $P 7  # In order)0be Q ® Panyth	 ³out at all,Û…toc mustY ’# already °generated (™�presumabl$ s#‡modifiedH  by9w pr delet ðan item).
       ó assert self._toc is not None

  ó# Check length of1 ÷file; if it's changed, some other processJ õhas modified the mailbox since we scanned it.8 ¡  p µ.seek(0, 2) —cur_len =˜ f.tell($ 4if ' !(  9 Egth:M  ô ðraise ExternalClashError('Size¶  “ ú ) 'E  I  ð'(expected %i, foun
 O)' %A (¿ ,Ý &))·Anew_  ó= _create_temporaryC Fpath$:try B  I= {}› � Cpre_	`_hook(0  r S  ófor key in sorted} ºtoc.keys())w  5 µstart, stopØ‰toc[key]‹ - À z = 
… ' ¶ oessage¶ 	 1  Ð L 0 =  b Y (   ®while TrueÍ    ebufferÌ K íread(min(4096,×  7  
-ö)ü  H !ifÝŠ ¦  ' _break� bwrite(I l  ' ¬1 = G,F< Z_ost_m¥.  L	©jexcept÷  ª  > g.close/ ‘os.removeÁ ' Jname´ +-b_sync_M \ 0 #ª jòabout to get replac@` no ne! o R 	f ^ ‘Make sureY@new µ 'qeq  pqsame as# 3old# Â ãmode = os.statª'.“5ode+ Šos.chmod,ß%UW I8 Íl d µ± FileExistsˆ
ÅQ ¨B Ês E  : 7penv, 'rb+'u- $ ñ5toc¼  æpending = Fals>	 8# iijlockedö _ à   ² P, dot =m Qdef _÷ð ailbox_hook(selƒf, f):
  õ#"""Called before writing the mailbox to file f."""; qreturn
 ÿ
def _pre_message_hook(selo Seach = p ?ostq Uafterß p  QcloseÔ 
@¡Flush and " :	06tryx   .f> !()F  kfinall* ;  * 1if B z_locked\  !   "  un# e   i   3 _ñ.Ñ ò()  # Sync has been done by� Ã w above.alookup3ª, key=None=REù (start, stop) or raise KeyErrorHø ptoc is U 
ý Â Çgenerate_tocü  if‹  9 ?not=  lìï  P U[key]´ 6eexcept² 
‘  ! 
Ò E('Noð@with• p: %s' % a) fromŸ QdappendôY6
XA* b %toÍ ©Ï viffsetslJ–seek(0, 2¬3=' Jtelln1lenª .9a) == 0. `  Õ :ing4`# This¨ ‹TfirstÏ ,@   t§t	”#±rn't yet¸cì4. I<{  g [True,@ \bs haveC ³removed, soó [ mustD ; ~ ™ already.( 
 CP 9 Zw¢< .É<  Šoé ¸uinstallWõ 
5 d se QBaseE:ionÝN  × ¢.truncate(N
v 5(6 t  u_lengthÞ e – Èó Record current - $of R $-ð



class _mboxMMDF(_singlea M´„`"""An (  Ë , ^ ]c 0_ma= _ç@_ = ~ê%geÚ?^  Ã3""":2a Môð  representationz >ð  a KeyError."""#
  östart, stop = self._lookup(key)(  ¡file.seek(8  •from_lineE + @read °().replace( †sep, b''@ nstring= (™ -™ T ftell(); &ms8 òmessage_factory(W | :\n'D P.set_Ç ( Ì ø[5:].decode('ascii4 ±return msg
&‚def get_t (Kq, key, Q �=False):,  }B"""RC "a 4 õ representation or raise a KeyError."""B ‚ eemail.û  Šebytes()  o  � .   ™ T)).as¶ @unix¯ = *_)Ú :  I Ù L]•/bif notx_O£/Ž' �“B x
V _ . 2 _-like1XlrïÁ_PartialFileù .Š,å†“_install_î? #,  
]„Format a ø and blindly write tot [ÿlÐENoneQif is† Cnce(y  ¨ r~  c ÓB_to_G  ÈZ . )½ 3 .Çëswith(b'From '} 3new½ 4 pfind(b'÷Ì  §  $- Z!= -1( " N #[:a ]L  . " $ =w[+ Z + 1:0 Oelsep f 5b'' /elD¢_mboxMMDFM .fauthor³ ' ÷ Y().enÿl  ì  # )4 = ‰2 + O * – 	¸.› c [ž ¨Ð()  # May be ©.x  ¢ "ifþÀis not None:+
  Åfrom_line =  õ.encode('ascii')6 &if% • is None:  [ D ð = b'From MAILER-DAEMON ' + time.asc ( 0.gm 4()){ t ÷	start = self._file.tell("  fwrite(…  + Ü <sep. Ódump_message( ,d  qmangle_R D ?top“ 
�return (½ ð, stop)


class mbox(_ RMMDF)AQ"""A   !ic" Ñ mailbox."""
d_� r = True c# All Ç ðs must end in a newñ  character, andR t# _post	ñ_hooks outputs an emptyD… betweenf .B „_append_e – Ðdef __init__(¿ð, path, factory=?�, create=Î  IÐ"""Initialize‹  0	 &    Z .Ã \ ! =EMâ«  , v.™ 	” )^È (Ò f´ ÐCalled after Ž„ing each8@ to Å! fÙ •    f.-  e(ª¯³ z Ágenerate_tocu 
r G ‰ key-to-tù table of contentsv Ÿs ¡s = [], []{  • ’last_was_u= False y Í v.seek(0!Qwhile¡Þ N    ß  s=
) 
% @read? ù ) !ifŸ.Ë Swith(x'( *    . 0en(�as) < l Oarts-  1 	
Ð  #  U .Èé -d  ¹  ×"6   ;elsG   `# The Œê Ñ before the "a" ewasn'tž?  ð # blank, but we±sider it a ? (aA ar anyway_  
û t s2(  û ‡ z �elif not
£ ÷Æ¸  Â¾P à YbreakwÏ  41 ==Ó >sepÖ  CH ð se:
             ðlast_was_empty = False
   û self._toc = dict(enumerate(zip(starts, stops)))8 pnext_keW Elen(M ( âfile_length = '   ð.tell()


class MMDF(_mbox
 !):o Q"""An Ñ mailbox."""
 Ádef __init__ ó, path, factory=None, create=TrueU  ü ÿ """Initialize ad   &   ² ƒmessage_\ ! =• M �  , ¿ .™ 	” )È Dpre_d ChookÑ f³ óCalled before writing each = @ to ^! f) •    f.- ˆe(b'\001 ¹' + linesep� ?ost‘ _after� !z ? + š 1gen¤ ¹&
#G ‚ key-to-ÇÆù) table of contents&	ò• = [], []Þ
 ^v.seek(0ëupos = 00 `while yÍ ‰   õ _- 8 4   
+@read6 (r  ) > 
- X !  !ifä.á Owith

±  G ; „.append(z 
�  ( õ      Ç ý 	 $    ( 
Ø  -   “ 
5   -   ? ==} >    ± Ù  -    T" :   Ybreakù    �elif notµ p h 
¡ þ.Q^6, 2Í ~  |L2H(M/HHFN©H instanceZŽ    0os.Ùq.existsô ._ Ý  + ð    if create:
   úos.mkdir(self._path, 0o700)
* ð  os.close(os.open  1 Y.joinA ý'.mh_sequences'),L \  ] ’O_CREAT | DEXCL `WRONLYš J600)› ]else:a øraise NoSuchMailboxErroé G ý ñ locked = False
S qdef addÞ ¦, message)o d"""Add ñ and return assigned key."""O  ÷ qkeys = t   (ˆ pif len( f) == 0i  : µnew_key = 1N þ & 3maxL +2     ·  =h 
 Á@str(( 7keynñf = _create_carefully(  F Ç &I »   :tryÐ "if_z
  2  v_file(f_   L    lc_dump_Ã( +, Y  / Áexcept BaseE >ion�  * @# Un½ ù÷ õ so it can be deleted on Windows¹ ?  	) !_uo $ Qsync_� 6#   ¡OTrue’ Ÿos.removeß F   gB Öif isinstancek=MHMA E  §=> �	n kfinallX P SOV rif not <_w½ U^ ó ,#
TR|@ the ea!; qA KeyÎ jù t doesn't existm ™é
åZ öï L v, 'rb+'�,"OS� ;as � if e.errnoÒ	 ~.ENOENTD
Ý E('NoZ@withp: %s' % …  ñ	  R 2$ fÓ
L þ ô )¶³__setitem__?keyReplaceÅpÀ   f = open(ãpath, 'rb+')
  õexcept OSError as e:  $ áif e.errno == 	 z.ENOENT(  , ‘raise KeyM ð('No message with key: %s' % …  < ;elsz   R � :tryu ú if self._locked  @  z_file(fp L  / òos.close(os.open(4áos.O_WRONLY |  jTRUNC)S  B � Sdump_û ( +, ‚  / Öif isinstance* 2MHM8)Ó  7 f –sequences> :key™ kfinall< H @ % 0_un_FV b_sync_E1f)
»udef get ¾ ,Þ Ã"""Return a ü ñ representation or % acA."""c  ¨ ÒÞ Af = ç0os.ê`.join(Ÿ  ._ `, str(O)9 r ´V Ž¥ÓfÃ s‘emsg = Åƒˆ  % Ùqor name¤‚_list ini Çr‹).items(¦ ifÝ 4 1key@ 
% | „msg.add_M (q ¶r:msgCQbytes¢� y A& ?ÿòÐreturn f.read÷().replace(linesep, b'\n')
  ‰finally:    þ if self._locked!  % 0_un ‘_file(f)
F rdef get  D f, key)B À"""Return a : ñ-like representation or raise a KeyError."""b  { +trµ ðf = open(os.path.join(€  ._ `, str(Š g), 'rb	‘except OSg V as e®  m áif e.errno == 	 z.ENOENT(  , ¶ ´ ð('No message withp: %s' % 
Ž;elsz R ù r;|_ProxyFy�iterkeysù t n % �ator over† s[b  & ñ(sorted(int(entry) for  á in os.listdirq j
Ô  Â   V T ·.isdigit())CÁ__contains__] G°True if theÎ %edrÿexists, False otherwiseï 73 F	¬ 3len§ u” count of› s? ± mailbox“ @len(_ÿ .�Û	' €  
x ALock_ oif notà6 œUò '.mh_sequences'\+] üE. 
's  Î Ped = ÓOgç  U€é  bit is L 	XÕ
	Í�  
§ ±_sync_close� Ë 3del\ @ ¹ 	W š " =—ç QflushW 
ÍñWrite any pending changes toü Idiské ÃZ ± 
Z Fr Q and " M 2» 
ö £ º_folder�	 (  + \ name�•sult = []M†
¥  if­ 	oráÝ)( ¹   reˆ 0.ap†‘ r $ y	Ø", æ ^ Ñn MH instancei ! d8 å 4 MHÌ À.join(self._ýpath, folder),
  ãfactory=self._ ñ, create=False)
8 ‚def add_M (1 Z :"  ] A"""C< # aw õ and return an MH instance representing it."""I r2 `MH(os.Ç Q.joinw  ._ } × É oremoveÌ óDelete the namedÔ ù, which must be empty¿  ¢ ? = ¼ ï rentries3 €listdir(E )# 5if & ö= ['.mh_sequences']„ ˆ2os.ä 
? R +, ; )d +elf W Epass‘ Jelsev  raise NotE�Error('F~B not(€: %s' % BË€  · mû k  y6getì )z B"""R.a¦€-to-key-Gô dictionary to define each <	¸`resultˆ!{}~  Mšwith openMÁ Sö, 'r', encoding='ASCII') as f»  ^ pall_keyt 1setÝ . (˜ ( Pfor l¾ ,inC   :tryX      ¹�, contenÚ  E ¦.split(':'} -   � 0 = ‘ !  Ž uspec in\ U ›O  0if 5 Ÿ.isdigit(+  3  † �.add(int(9  $  Ž  ástart, stop = T 0x) É xÆ  ` Â ?'-'j  P š Øupdate(range(^ ?+ 1@ `[•�] = [keyƒ    in sorted(_ 5) \‚ s  
3if B O]= yif len(‡ o) == 0= u Idel 1 Z Áexcept ValueöM aFormat' •('Invalid�Pifica¶+p  –  Øhrstrip<JÂ ÍsT,‡ s™f"""Set 0 us° _givent		\fÞF+Göàos.close(os.opò	en(f.name, os.O_WRONLY | —TRUNC))
  Bfor 1 ùkeys in sequences.items():1  < pif len(2 n) == 0#  ' �continue@ €f.write(y j + ':'•  = ®prev = Non@ þcompleting = Fals#  Ø 1keyÑ ’orted(set² Ñ   q 0if 1 0- 1Ó   Ö , Fnot ˆ +  / ( _ = Tr  &  /'-  % Oelif| 	x ( P   u  %s %s' % (,3 /   Oelseø Q O >keyå G  g   =h (ç g 1str± )P/\n: ¯ D '8 zfinallyâ ñ _sync_close(f)
² ×def pack(self]a"""Re-äðmessages to eliminate numberÆðgaps. InvalidatesQs."""b  '—0 = i U.get_ (\P0: @chan| E= []  0elfìrÐï0!= \ 
 › a €.append(f,+ O + 1= +trV E   ños.link(os.path.joinV ._  , æ I%),É  8  @ 
 Ä ™ 4A ñexcept (AttributeError, Permission å:   Pos.reðÁ . ± ó Ã 
–_os.un`
p 5= 1v‚`_next_5 V" $'ereturn1  ’ =sQ_list½Ž 5 €old, new/ o ¤`if old# 1key^ $  Ä [	 à.index(old)] =h ² s‡‘W_dump« 7 #, î PÀ"""Inspect am B MHM=p and up¤ð  appropriately.S"""
  öpending_sequences = message.get %()4 6all  = self- ùfor name, key_list in C •.items():b  � !if8  . ¥ 
*  . ] 0.ap. F(key±  ! @elifƒ  P - G 0del% ¨ [' a.indexS ]£  Ø 5 T  v 	I
] 5if . .no
.  ± 	#[= @] = ™ ‰ ~s«	; ó)


class Babyl(_singlefileMailboxyò"""An Rmail-style1   @box.7ÿ à_special_label2ðfrozenset({'unseen', 'deleted  n 	 `answer K  é  €'forward. S 'ediM ¡resent'})
D Ðdef __init__(ó, path, factory=None, create=Trueñ  y ÿ """Initialize aó   &   8.v 	q † › .4&{}¿ 3addº |
¢ 4Add•ð and return assigned²ž §   okey = ±  h B 4 ãif isinstance(‡ ,M•  2 Ð “;8· 6keyú cremoveý  µ	A"""R @ theä eð; raise KeyError ¾ ù t doesn't exist z  B"inÚ³™  ý  )× P__set×“Dkey,ÅIå _placeæ C‰ ô ÿEd  ¥ PYñÚ sB repïƒation orúaü	è´start, stop™q_lookup¿‹  ¿» –a.seek(8 « ðreadline()   # Skip b'1,'   bfying ð.d ð original_header(§io.BytesIO`while ˜
c` ^_Œ e  Í "ifŒ ñ== b'*** EOOH ***' + ð sep or not line;:
  Ybreak òoriginal_headers.write(line.replac Åsep, b'\n'))A tvisible< æ = io.BytesIO(' ªwhile True’ ðline = self._filr  ad =  Â 0if  1 == ¡sep or not 
U  0 ç ª æ ð# Read up to the stop,‚  5endnÑ Xtop -Ø GtellÔ Õassert n >= 0; @body> 
&(nI"   �N ýmsg = BabylMessage(ìÐgetvalue() + V k ƒmsg.set_9( ë.; 4 “if key inû jlabelsŸX  (ü V[key]N ±return msg
Õ �def get_b`9 ,o )` B"""R5 ða string representation´ñraise a KeyError."""`  9astart,áŠ¦lookup(keyœ · ³Qseek(8  $reÒñ    # Skip b'1,'»€ specify« .Œ ®^Qñb'*** EOOH ***' +¦ p ½ q0l
= = Æ ö§ñ(EdatagM .ñ"   ñ0¾  + 6 
; d : % _-like=r|'´ CÇ L,`*))ª ¬ áòlist of user-defined 7  ‚ ¨zmailboxâ^Ô²9  �t©2forT _o Ú.='s(¢  EL P.updaJ ? n Ã.difference_- 1_2al_I 7 a ‹ ( ˆ ð_generate_toc(self)3:
  õ'"""Generate key-to-(start, stop) table of contents."""? + s, ¦s = [], [] õelf._file.seek(0) pnext_po5 0  label_list I ¦while True»  Â ClineF Q M   F = sˆ @read6 (‹  ) > 
- Ktell) 0if ? ñ == b'\037\014' + :sep   [  2 0en(Oas) < l ^arts)-  1 * €.append(m â -9   Jsep)¾ 6  S 7 Ð ( d_
 Ñ.strip() for  	A Z  /inYþ [1:].split(b','ƒ Q f‚ ” I2 ¡ !ê  se  elu6ine§ ' à  ¶k¦ 1not;#UbreakÃùñ toc = dict(enumîB(zipê¿)U8 [;  †4 yQkey =°I 6toc¡ ?, 2 _length’á ðdef _pre_mailbox_hook(_ 7, f\ó"""Called before writing the < @ to “ ) fà`babyl ëçBABYL OPTIONS:ñ‹   , +- ¯Version: 5) ? ‚ « R.get_ j A = (
 x.encode¦2 in-û‚ LJs¨  „R.joinL &s)­¼  Ô'  f.-!e([ !)
 xoessagexbeach m= yx '`	„ Cost_H … Uafterü„ t# +ò'„ tinstall‡ • 
…UWriteø PÂ and return ‘O)‰i {  Qif isŽ Cnce(� 0, BÂðMessage):
        ñspecial_labels = []
   Afor  ó  in message.getI 9():G  N &if2 jself._} 2  6 
$ �.append({ )c OelseG 1 s? ’ ú file.write(b'1'b 	ô 
˜ u P  R, ' +š.encode()b 5 ,† 	× ~ }  \ + b'` „ vlinesepª f4 Qb'1,,î = ãif isinstance(:ƒ, email. ".MQEö
orig_buffer = io.BytesIO(›  2' €generato* \  7 G! (0 W ¯, False, 0S 	„.flatten¾ ,  O k.seek(L Ÿwhile Truª  k7 = ’ P.read å  é v ( p.replacÀP\n',   ¾
¥  ?  �ñine == b'\n' or not2 R 2 Ybreakuƒ ïb'*** EOOH *** J _Babylý 6 ?vis * ñ# =_ Y U ýmvisibl× = ÷	    ¨6 = Š ú	 1 { B þ C  6  ( Æ	 $ K  R xÝ 	!ì ¢(4096) # Béùsize is arbitrary.� ó !if¸S º
À            ó&   self._file.write(buffer.replace(b'\n', linesep))
  õ%elif isinstance(message, (bytes, str, io.StringIO)):=  D ? 2 
1  5 �warnings.	 ”("Use of c ù input is deprecated, "w  F   `"use B« 0IO Æ sead", D9 BionWl 6, 3ö  :   î 3 = 
 ª.getvalue(- æ ;str
V —s;A_to_Td
b §body_startŽ Afind¼‰\n') + 27if 6 ž- 2 != -1o‡ î &[:@ ], Ü   O õb'*** EOOH ***' +i	° < ‹ <O Ù :Ú Oelse;ì ö !t thasattr9p, 'readÍ'>if - +  Ž iˆ text mode 3s‰†a binary> ”1À 	KÇoriginal_pos0Ktellº�first_pas( ITrueH `while  û `\ s`  Gñ # Universal new9 ‰support.o  - !if�.endswithàrà‚  / M =3 �[:-2] + ÍX * . 
Z ÷X 1X îd Y d   ï 2 ==¸ q or notÑ ò 6if µ#  Y $ z = FalsÚ #  Ã Å
”@   Yh.seek(3 N I   YbreakÂ‰Àine()
        Õif not line:
 	 ]break ð # Universal new? � support.- !if` ÿ.endswith(b'\r\n')r M =3 q[:-2] + =sepZ /el\ Z 1Z ´ Z 
ðself._file.write(ð )Û ;elsŠñraise TypeError('Invalid message type: %s' % ( )V wstop = | Vtell(! ð return (start, 0 ²)


class Mi s(email.^ . Æ3"""  ä + ñbox-format-specific properties."""
ø Ðdef __init__(¤ ,Ü S=Noneb  •ô """Initialize aš ‘ instanceT  )   Tif is /, Æ 	 7    … “._become_ñ  (copy.deep	 P e 9 t Ê  -   ] Á._explain_to›åÉ [bytesS ¹ 	ò a_from_< Ä  m ?strk $ostringl ÿ io.TextIOWrappey % dw thasattr �, "read"ã $abinaryÕR Tè@ is Ô
û	¡Y."9�î Jˆý"""Assume the nonã„state ofÅ	• ­_Z= get‰)'_# _ ¶ibutes', []µfor name inj Š__dict___ å )  ê!in$ƒ 
*  ’ ù .I [b =] =b  ÀÀ;\Copy 1$toe  Ïÿ ofar as possiblÚfÛÀ # There's nóothing format-specific to explain.
  Uelse:   ðraise TypeError('Cannot convertF R óed type')


class MaildirMessage( )a 3""" T with-   ñ properties."""
– _b _q ñc_attributes = ['_subdir', '_info	 bdate']? òdef __init__(self, m� S=Noneš  ÷ ô """Initialize až ² �instanceš  0    Q .„ � = 'new'¶   –     ¥ € = time. %()9 s .¸ )Ù 3get} Û 
Í bReturn” ™ or 'cur'¾ r" Å \ s\ ", j
d 3Set  ÿ k $if( =' ( S    � & ;  — # =? $·CValu¸"_ {must be
s: %s" %X U_flagsT€as a strdAthe / Ù that are seth ý Aelf.¢p.startsW('2,'Q ö 	” <O[2:]ö 	Ä*''º’ Á ,ž g 0"""¸ ¹ Rgiven! ò and unset all other‡ —   ‘ ”  Ðñ2,' + ''.join(sorted(w )M@add_ ‹ Š 1(s)�out changf�  ¦ ` %s(Š !etm . @)) |•Ÿ )Ÿ oremove¢ U.ø [ « “ ì Ì -Ì  ]  Uþ 
e�delivery ' 4 of
ð, in seconds since ï YepochÉ	� E 
u  ~ ,b 
„  s� .?try9 _y � = float( Lvexcept 
@ ìY"can'ëU -\ ` from >ÿ  } ÿ 
ù 1GetOw@'s "* '" Ff + g  #  g  ·%fom À  """Set theó message's "info" string."""
  àif isinstance(' ,' %):"  ) `self._ 0 =   Jelse, ðraise TypeError('0   must be a^ âing: %s' % typw 1))
U ðdef _explain_to({ ,Ë — ô"""Copy Maildir-specific state to4 ÿ insofar as possible5,Y MEz  & ¡.set_flags¨ %.g !))Î  ,   0 fsubdir1  2 Fdate0  . *elÅl ¿, _mboxMMDFÄ ¸ f = set]  (^  ¾ ¡if 'S' in  
ð ! s A.addJ('R'0if Ê"ñ Ÿ == 'cur'Q OQ /'T” DC  FC FC  RC AC <Kðrom('MAILER-DAEMON', time.gm ©f/MH 4?notPsequeQ{'unseenó  P6L repliedM  ÆM  ÊgM A_BabylD^olabel(AýI Ydeletñ  º‹J oanswerK PK yforwardL ˆƒEpassl�0CanÉpconvert);!edŽšS  & ¶¹ ¹m
classq(² 3""" ` with ŸP- or ¤Á¡properties§‰ _r _© ðc_attributes = ['_from']

    def __iniót__(self, message=None):
  ò"""Initialize an mboxMMDFM0 Õ instance."""6  S õ.set_from('MAILER-DAEMON', True)- Tif isG (ˆ ƒ, email. .o š  ¡ @unixc $ =À T.get_ (e  . 4if  € is not î E and û.startswith('From 't  J 
à U F[5:]r ² m.__inih!)
 @def ²  Å ‰m ñ"""Return contents of "• Z" lintr, › xb Š   , m �_, time_ð 9Setf Á, formatting,`append C Ù if specified"ife n[ I"  
  " c =I 0.gm ×Ï ’ += ' ' +) 1asc*   _”  ." =%‡Olagsˆ�as a strû @he f/ Ù that are setÿ ’ñget('Status', '') + Ž  (X- ” ¹ e ” ,q 
# ®’the given! ¥ùunset all othersš ¹ =² ( #¤ _ G, xs A = '½ » �1fors p in ('R O0%if# U ã	d !+=/ c  g   < q.remove´ ³ 
† D† F A‹ 
ð Œ  A á''.join(sortedº &s)¼ :tryçreplace_header9+E ÿ except KeyErrorQ  ?addM ’ ²	ó • %P 
 ( Ä  @(s) Ë�out changº um´!etm U { es()) |7'))Ç›95 ®
¢ U•¯L [ « 4if H v º U or 'A  â Àags(''.join(ð	set(self.get_flags()) -    ñ	)))

    def _explain_to5 ±, message):$  ( ô"""Copy mbox- or MMDF-specific state to: õ	 insofar as possible."""P ãif isinstance(p ­, MaildirM€  „  ¹ 1s =Å Ý Z  * ¡if 'O' in 4 Ç     q ý.set_subdir('cur')G FG 1addf?('FC  AC RC  RC SC  DC TC 4delÝ ['ïIus'].	" /x-$ pmaybe_d-¡= ' '.joinuªúrom().split()[-5:]’?tryÍ [ ð(calendar.timegm( P.strp	 („ ,À   ð'%a %b %d %H:%M:%S %Y'T@ ñexcept (ValueError, Overflow _8 Epass• /el&_† �(Ý ad  y 	0  ‚]  )ƒ’ /MH‹  ³oR' not· pPseque={'unseen° yL repliedM  	M  þ gM 	(&	" J ‡_BabylŠ^olabel(‡zI ]delet7ÑJ manswerK 	`‚;}×*seÅ’raise Typ'P('Can	pconvertXjéed type: %s' %ÆÐ             ò   type(message))


class mboxM !(_ 3MDF £):
    """ Q with3 õ	-specific properties."""X #MH4 ( M /MHK  } _¸ _n ñ_attributes = ['_sequences']
­ ódef __init__(self, õ S=None†  Z õ"""Initialize an ³ ‘ instanceÒ  ,    M .q  € ]s   å .{ )œ 6getD ¡ 
“ õReturn a list of â ô that include theÙ 	¦ r@ ­ '[:sƒ ,f 
Ž 1Setj � $† ! =Ö (Ó 5add” 
“ 5Add® 1 toR 
(#1ing» þ	%Tif iså� W, strm  Øfif notq ;in Õ $ ,  ! u.appendg )5Jelse? ôraise TypeError('+¿€ must be¨ q: %s' % [ QoremoveTR, æ Afrom=ø]:tryÕ š µ ¢xcept Valu 
H FpassI³_explain_to0êÂˆ"""Copy ePstate9/  íú ofar as possiblø
-6 “, Maildirùu  · ¦1set¡ .û) 2 Áif 'unseen' eØ
 * ‚ .Çºubdir('cur'P \< *  ˜{flag('Sb  ²   ?ged³ M FM  _repliM !RM /el°Ý ì   ²+ $¶'RO·  ƒ ³9 8 ‰Àes:
          ómessage.add_flag('F')
  ùif 'replied' in sequences:'  , M AM óelif isinstance(. R, MHM† )S 5forn z ulf.get_ƒ (2 … ) (	 Û Ž _Babyl‘ F ®s = set(se‘ b  �  =ounseen<slabel('9 R � S �answered—•EpassùJelse´õ)raise TypeError('Cannot convert to specified type: %s' %S  6  ( /¸))


class ª(²3""" R with+ -z ñc properties."""
} _f _#  _attributeí1['_Aò s', '_visible']9 Ádef __init__#, ÛW=None£ò """Initialize a– ¨ ’ b| Q = []«    ‹ 3 = G (. .œ )½  Sß ¿ 
± òReturn a list of * t on theê 	µ r3 ¢ / '[:-3setÓ p ,S 
x 1Seta w p ! =° (~ ì  è { 
z 2Add’  ­ 
Ýd W, str]  ¸iB O3lf.
K . Ô r.appendÔ ç„� p must bxcstringz†U )bremove™ ,R& /Ofrom´:tryõ 	ñ „ œ ú²except Value
B ¡-  ™ Ü%Æ Ž5"""Ý,ð  representationï= r header0 š  é= ` .K ðG $ #,  
� òO Œ 9Y  ð)

    def updatóe_visible(self):
  ð"""Update and/or sen) qy gener ƒ set of C Å headers."""H 3for @ in e .s g.keys(t  { +if/ “     
E ‚replace_} ( ,j [ %])Ž  ? NelseU 1del4 ž = < 
Ê à('Date', 'From €Reply-To   CC �Subject'é  iü =not/´ 		° ! =È  
À ñ def _explain_toí—, message™ ð
"""Copy Babyl-specific stð$to2 ð  insofar as poseöãif isinstance(h ­, MaildirMx  ˜alabels¿ t¡ R.get_ *()Ä°if 'unseen'(% !y ú.set_subdir('cur'M <  ¹ * »add_flag('Sb  ¯ —forwarded² · or 'resent È b Pb  ianswera K RK  _deletJ TJ /elŸ_mboxMMDF;2
B'RO®  Ç9 8  Ý0#D‚  J Å$AK {/MHt;?in pPseque³
ö "T   ?ied ÖÄ *Ï„ …   ƒŒ±{8 ( ¹1ApassÞ¾ðraise TypeError('Can&Ðconvert to spÿecified type: %s' %
   ( ò	(message))


class MMDFM g(_mbox !):R 3"""" Q with3 1-sp� õc properties."""X ¥_ProxyFileE òA read-only wrapper of a file=  À ódef __init__(self, f, pos=None”  ) ö"""Initialize a s M  #    C  ._d A = fÒ    ifT @ is W ¥     3 0pos2 u.tell()9 3elsÔ  +   / Apos
+  Ç  ð Ã OsizeÁ  ƒRead byt> N   rreturn Y F Cize,  Ì . )k 1l I1m Olinep  a ) 	‘Ý  8 t  su OhintU�multiple€ œ Z  ±result = []«  1for* " iw
2 .´2nd(š  6  0if á �  R?notV  - & o-= lenK   & O J<= 0�  "   UbreakÁ Vª c__iterJ=¢terate oveü 
&›while Truî þ " =‹ …   š 0if   » © ¸  0 Qyield¹ v 
µ R0the¿_ition]	�Cseek<úoffset, whence=0c _Chang_ #if5 Z == 1Ý  ­ i.l V._pos<# 
‰ ( �4 Bclos…Â    $+ ˜ g  £if hasattr''A  ' :tryÝ   < ì 1, '‡ B  1   ¿ ( +ofinallm  2deld  _t¼  N,Vw_methodÆ 1"""] $ bh using/ 	:u À  cE= -1¸Ø îŒ( =s (� é @  3à result

    dóef __enter__(self):
  õ"""Context management protocol support."""3 preturn I 
 da 3xit` g, *excf  , †.close()4 Œreadable” a u._file.* > Owrit> * > Oseek> * > _flush· ' 8 •@property4dG áif not hasattr 1, ''S À)ATrueU   ?  E2, 'q F FFalsG [ ¹| ¿d¾ñ__class_getitem__ =  ñmethod(GenericAlias)


 ð _PartialFile(_Proxy Õ P"""A éð-only wrapper of part !a  Œï x'inxÐf, start=None !op d  !`"""Iniˆ Yize a– 	è¢ ?.__f )‡  U ({ " =ƒ  !op "opD ¾ Atellâ
  Rbòthe position with respect tod 	° ³· _ ! -°!._£ �  Ý� ú, offset, whence=0“ VChang� ,™ 0sib©™ ‰ or stop¡ #if] V == 0„A0pos$4elfª    š E = 1\)elU 2U %op=  X T  AÔ Ä_´DQsize,Å_

EPRead $ È bytes using/ p, honor ©N andH`remain% =Ö%opã5posã 6if . <v38b''2 ¢ 0is DÉ )5< 0 >U q * = V i [7¢´_L±# do *not*    +punderly (@ obj,1forB1ial@%s,– ð# since it's global[ M smailboxE 2 /if™3delš Š 1


)AlockLp(f, dot =½Ú q"""Lock¦ # f % f@dot  5ingWF †_done = ÄÀtry:
       Ç if fcntl:
  :try   ( ’.lockf(f,7 ¨.LOCK_EX | 9NB)O þexcept OSError as e_ ñ if e.errno in (
 ”.EAGAIN,  ECCES ^ROFS)I  ¬ ñraise ExternalClash| !('À  :  ù unavailable: %s' %·  I  
jf.nameì  1 ?elsá    ˜ e `if dot‹ 
Æ @pre_+ ò = _create_temporary(Š A + '¡'” ? z.close(! ¡)“ôeturn  # Without write access, just skipEing.+ =  [ , G  . …os.link() Ü/, Z = ÇÎ_done = True» ¡(Attribute’Á, Permission ÒPos.re“ ¡ H·^os.unE¡FileExistsÏ 
Ú ,Ê JmoveÊ 
M  ) -Å?dotÂ/Úw ¬ "UNH  · ÖU   ý  ³ø �

def _unôs_file(fA"""U   � f usingPf andA  B1"""ŠÒ Î Áif os.path.eÒhÞ Ú 	Ì ¶ carefully(Z Ô CÕ" aÖ áif it doesn't  Ü Ðopen for read÷  ñ  Jí @fd =»  - f , ’O_CREAT | DEXCL ²RDWR, 0o666É	'r»N C'rb+egfinall0#osd3fd)Æú °ú  ! ÿ �based on * ù ª !kC'%s. Às' % (path, �int(time. o()),
  ÿsocket.gethostname(D  os@ ñpid()))

def _sync_flush(f):• ñ'"""Ensure changes to file f are physically on disk."""; "f.K ) ðif hasattr(os, 'fm "')f  þ 1os. 0(f.` :no(˜ Xclose˜ C Œ 0, e¦ uing all¬ ¢ 
ñ § "f.h ó
)


class Error(Exception² ð"""Raised for module-specific e4 s
F ÓNoSuchMailboxS  % O CThe A Bed m* ú does not exist and won't be createdg otEmptyb i`  7 ` @deleê » was requesf ßExternalClashk ðAnother process cau,Qan ac\  F8ail¼ oFormatO çaappearƒáhave an invali†1matO 0"""h2cap6 ñhandling.  See RFC 1524, ¤
import os
 òwarnings

__all__ = ["getcaps","findmatch"]
7ólineno_sort_key(entryØ0# S_ �in ascend¡æorder, with unó 8 áies at the end’Bif 'c P' in & y6€return 0Dtry[+ ]< Melse, ò1, 0


# Part 1: top-level interface.Û ÷ (Î  õp Aa diÉ ary contai6¹  » }pdatabasL  à à5 ðmaps a MIME type (%òll lowercase, e.g. 'text/plain'K`to a l&ofˆ  ;‚correspoi!toG Œ  6`ies.  ‡  <  �collects5u trI  ÕGthat  Afrom( ”available^ K  ´ ` FEach• ñs key-value pairs8
c QwhereI@view1@commù’is stored< ° Pkey "( 1".
‡ } ®Q = {} @A = 0  Þ ¦!inK Æ ï ¶'trm  £fp = open(3 C, 'r™   e)1 OSÉ}   )Ainue…   *fp& @more¿ %, · S_readp  £ 4(fp  M  Ö Rkey, f4in J h.items×  0 !ifY C0in r 
ˆ  $   r[key] =W »   
_    4  À+ value
    òreturn caps

def listmailcapfiles():
    """R, a$ ƒ of all ,  - ñ	 found on the system."""B ñ# This is mostly a Unix thing, but we use= ñ	OS path separator anywayK òif 'MAILCAPS' in os.environ®  ²  ? Wstr = [7 ]J  ) Ã 1s =s Ñstr.split(os.E 1ep)- Felse`  … OHOME�  \ Khome‚ 4 ~ 
U  4 ò# Don't bother with getpwuid(Š  '   _ ñ'.' # Last resort¯  ! Ü [- S+ '/. •', '/etc/ 8  <   Z'/usr$   Ylocal Ô RS Ñs


# Part 2:Ùqparser.mCread)  @8(fpnIad a`S and ` õa dictionary keyed by MIME typev�warnings.	 +('r  Ž±deprecated,~0get­ instead',3  D4 BionWa 2, 2› < {, _ = _m ’(fp, None) É  0 
|1 olineno6
Î FEach- ñmapped to an entry consistingí÷A }Aies;Ø 9P will8 €tain morÌ·an one such´F §if a given�  ‰  ar&?  ceæ U/p.E Ì � ·   sö-value pairs for thatl q, whereG  ] @viewï @comml’is stored… # Pkey "( "~ Þ ÇQ = {}M vwhile 1- Æ` = fp.  Êpif not  q: breakE  €P# IgnH “ AentsQblank0 s* i¼ñ ne[0] == '#' or# �.strip() '“  _ rcontinu  @nextˆ ! =< ^ a# JoinÛ@inuay! € ó @ B[-2:‰ K\\\nv %  Š , $: 
 u = '\n'›  - ³ u[:-2] +/ ( ‡^ 0  ¢key, field0rse  ( « c � ( 1 ˜ !   P– nod å  
„I  ['o Cno']{%no¡  Z  U += 1  # Normalizheñ   Ï 3keyÎ2'/'Î À    for j in÷ range(len(types)):
   d[j] =  ….strip()( Ôkey = '/'.joiH g.lower& õ# Update the databaseD 0if G zin caps„   ö[key].append(fields� Oelse3 B = [/ ]l Rreture ð, lineno

def parse ( @"""P ó one entry in a mailcap file and W áa dictionary.
q ðThe viewing comm. Áis stored as¡value with  
"5 !",D  4  6qrest of$ Õ € produce=-F Ppairs§  2  � .D 1""" 8 2= [ i, n = 0, ü (  whÜ Vi < n[= R, i =0 1 , I “ s±  @ ñi+1 # Skip semicolony !ifŠ A V) < 2€ g`None,  2 Akey,d!, ""= = D[0], 1 "2:ú % P = {'l!':D }S 2for:  I U „  ½ ; —.find('='Ù  f 20.  KfÐ• ^     f²#= œ  Ì? M[:i]€ 7 K › ^[i+1:) 1if M "inÝ h¹# Ignore it§ Epass    Ž[Z  'Š 0 ¯ ˜ sl <5€"""Separ* v7keyÙ �’.Ú‘start = i| À1c =õ"[i :²if c == ';'‚     QbreakL   %el) +\\*  7i+2, �" 1"  k[´ Ô�, i


# PË P3: us8Ê2.C |`match(`, MIME¡,
=Ñ ýölename="/dev/null", plist=[]åAFind×@tch üdÌR=ô a tuple contain¢ Þ Ù , ¸ +¬ pused; (¿Å�) if no Ð ð is found.  This mau1vok:B e'test'O¢of severalC  ‘  o pies befÒPdecid QwhichE  " ƒy to use¬J   = �= lookupdõR# XXX¨ ñ
code should somehow checkQ òneedsterminal flag› qeÚx ‡3if ì ;in ã ² = subst(e[( æôè¨  Â  ðif test and os.syûstem(test) != 0:
  …continue õ#command = subst(e[key], MIMEtype, filename, plist); sreturn B ", U  `None,  ø

def lookup(caps] @key=% )« Áentries = []h %ifŠ @ in ? *  Ø . 
 +" [½ D   W  ¢.split('/'Ð  % =p ¿s[0] + '/*'‹ 6Ñif key is notÎ €[e for eò Ú : 2n eÖ  “= sorted( ,b €=lineno_ B_keyå ›) ˜öXfield˜õ3=[]¢ð# XXX Actually, thisÐ ÑUnix-specific0rÈ'=Ñ, n = 0, len(o ” ¶while i < nAc = $ Á[i]; i = i+1U  ÷@if cß6'%'3  k== '\\   U O:i+1Y   & ¶   "+ È   Jelsel N J §  Ž §  Q  a  =  g   %el9 sÆ   3 9 ¥@ t@ õ@ {@  Pstart‘	5  y Ê RÁ«}K   5 Ü     qt ":iø   > 
%€ndparam(T Å K ÔZTo doåð# %n == number of parts if  øPmulti )/*@# %F;  3 9 ²alternating< #[ï E sD v ® Ý D'%' AÞ2resÚ/fiù á  0 =  €.lower()ë=­ ª §  ¦ �p�D  Œ …if p[:n]E  -+am,š Bp[n:Ä €''


# PR04: ¸’ program.Ä   (z’import sy% ` = get
 (¨ !ifYÆsys.argv[1:]­ Ashow�,  À ‰ u ã iã rrange(1ªJ C), 2ˆ  8 0argN b[i:i+2Ü   !ifç & V) < 2„   õprint("usage: mailcap µqf] ..."©  8 ­   ¾À = args[0]
   ò file = args[1]
 °  command,  ðfindmatch(caps, MIMEtype, 'view', F )= dif notD :  ]  print("No ; ð er found for", U G Oelse= ÄExecuting:",f 7  f ósts = os.system(Ï % úwaitstatus_to_exitcode(sts1 jif sts“  n Ô RExit H  ™ ? ‘
def show;)< 0 qMailcap=2s:"l ò for fn in listm#  _Ss(): : ‚\t" + fn3   {Paps: ®` = get
 (" . "} eentrie  * @ckeyGbsortedÁ Ì ¤  « ¦ % ×   D   c ! =‘ [ i L eI & K  ; 
‚ eT    ; k;  & 
8   Ë ú"  %-15s" % k, e[k]F ' ò)

if __name__ == '__main__'[ ñtest()
"""Guess the	µQ of aÉð .

This module defines two useful functions:

gK _ñ(url, strict=True) --   k Âand encodingx DURL.L  extension(V R 	*  }† a givenÓ ò.

It also containô ¡following,8 0tunˆ  ñbehavior:

Data:

known½ Í  Ñ ±  ð to parse
inited! Àflag set wheðit() has been called
suffix_map3 !diL€ary mapp‹ !  t$o  
1s9 0 
G6 , 7

Fâ Þ !([ó ]Óõ ! aß,)Wault 3À(on Windows,%
 & ðvalues are taken from$ ñ registry)
read_mime` s(„ ‚ 1one±·, return a Mpor Noneï´

import os
 %sy ”posixpath qurllib.ç B
try>C ²winreg as _ ‘
except Ic 0Err? ¾  " =ˆ `
__allš! [„")@", "g ed
 ²MimeTypes",) D    L  s  = 5add;  d  + Y+ l ` % A   �!onZ Is"
]*=â P/etc/Á.< h  Yhttpd  5 ¢# Mac OS XÀ/etc/httpd/cúonf/mime.types",  �# Apache
 q"/etc/a 5 	 , 9 - 1; 2< ; 2; ‘usr/local€ |httpd/c¹ , Élib/netscaper *  Ö V  Ë  ‘ /1.“ A= 3z ð]

inited = False
_db = None


class MimeT’:4 �"""MIME-¥Á datastore.
 FThis ö can handle information from ª Á-style filesF òand supports basic determinA 0of …  … N a? qname orE PURL, J  … ð
guess a reasonable extens� vgiven aS .A 2"""Õ `def __*…__(self,m òs=(), strict=True)& ­pif not 8 &ed  Qnit()f    T ù.encodings_map = _ Ü_default.copy; dsuffix8  5 
 <l ò
({}, {}) # dict for (non-Ú â ² B t_inv = F Ø G Aext,©f) in _5 Ò gitems(91add0 (5 ,²!, eb 
acommon9 se î  È [&inú
ÒÃPread() 1ª  AÌ  * Ò d>ñ"""Add a mapping betwe¨ Ú anÆ� <xWhen thãPis alŸ �y known,  1new   5 U Áwill replace" •old one. T  ( 5 W 4 YO …be added5 !to' rlist of� È sÉ #If[™ is true,G	_ 5 tob [ �standard‹s, else  æ( A  å s  
     ¿¢ p[½�][ext] =i F zexts = 2  ,6 C.setã&[]v ifD  ss _ Æ.append(ext)­î¯4url“h G 1 ø  ”N` which|àeither a URL o	 ÷path-like object¶ÀReturn value= ƒa tuple ã ×ð) where type is Nƒone if
  ð!the type can't be guessed (no or unknown suffix) …a stringE 0of H AformM @/subU ð, usable for a MIME Content-  A ð
header; and encoding is N®  = &no !orn jname oÊ �program uÁ t4 ðe (e.g. compressÃ µgzip).  The… ámappings are t¸ ¤driven.  E• e% 6cas? ¡sensitive;1* Àfirst tried 6  . ,Í n…  %in %.
 6TheU ¡.tgz, .taz5Q.tz (< : !!)É 5allB  â ðed to '.tar.gz'.  (Thisnô -ô @ too¿ ‰t%£dictionaryŒ f_map.)¦ !Op  0l `%ðct' argument when False adds a bunch ofœÅmonly found,² ñbut non-standard[%s.  5""" õurl = os.fspath(url) ‚scheme, % ðurllib.parse._split�
3 2if 6 µ == 'data':P  ?€# syntaxÁ   \ URLs#    u `  := "  :" [ mediat ð ] [ ";base64" ] "," ' k 1 A:= [S "/" kö ] *( ";" parameter þ ®  V  
 ‹ ‹*urlcharg > ö:= attribute "=" valuï I #‡ î� defaultsa¶"text/plain¢ 4 pcomma =‰š.find(','© iZa < 0N @ Q# bad! o	¾   areturn9, 	" Isemi| a;', 0,a† . />=† ºÅ  [:' ]g Nelseº 4 
5 ‘if '=' inU ¥t'/' not R 'l'ˆ  y  " p# neverû Sed, s2 õ~P  ¡Ð, ext = posixd.;:ext:Qwhile, ‚in self.7 ,
Æ V   , +C V[ext]®)ifk @sn  " =S  + V ï  & ~ ó   † ô^ * =‰ �r ‡  V[TrueÙ " 
>àQ Ã ,*Í Àelif ext.low÷er() in types_map:
  Wretur €[ext.low7 µ], encoding4 ¿elif strictI ONone7  ~ … = self. u[False]a oif ext² ª Î S /seþ Õ ð
def guess_all_extensions(,˜,Rf=True)Z @"""G: @ the: ñ for a file based on its MIMEQ !.
{  èRáòvalue is a list oÆ¡ngs givingd �possible\ EnameG ¸ p, inclu4 1lea Ødot ('.').  T°  v 5notK ð,guaranteed to have been associated with any particular data(Eeam,L òbut would be mappU  0  `mC' byˆ  '()$¢Optional `Úð' argument when f£@ add?Pbunch@êcommonly found” Ánon-standard’%s.´ 5"""  ‹ ! =" q s5P_inv[-`].get(F U, [])< `if not/© =b ‚ŠU Ž
V ‘ Q  ¥ c 'inš*  . É .¢fnd(ext¬ ƒ& ½8 3&2, $ng)z ú þgý0str% ? ­ T(ÌIKê @ canm& !edZa , ýG 2is Ú/edkrFsOÃ – ø �¤PD 
êé 
  3 6[0]ÚCreadÏ È Nv  UòRead a single mimeÀq-format¸à, specified byÓ pathname.

  õ If strict is true, information will be added to8 `list o= ôandard types, else to the $ bnon-st( A 0 . 5""" àwith open(file± õ, encoding='utf-8') as fp:5  Ð ó self.readfp(fp,Ú )î Cdef   ( &, " f=True)L � ñRead a single mime.» -% £ P�fhile 1à  ,‘line = fp1  )()Mpif not  
:  > Ybreak/ qwords =0 k.splitP ñfor i in range(len(4 )y [   1if  Þ[i][0] == '#'†  + 4del, ):]’     ¬ Û c V ‰continueM  ô�, suffixeè = C[0],~ 1~  ï  /  ò    7 l  ŠP.add_` ( q, '.' +k Âð_windows_registry(G - Í	ALoad›BMIME³ò database from W[  [ Û„œ#² Eonly â *:regxbreturn   Aenum„ s(ã+db•Ui = 0^  6 wU 9
^   >try   câ3 = ˜ ƒ.EnumKeyt :, iƒ 3 ïexcept OSErrorW â: ?lse0 qif '\0'à1in – *  H Ryield% 	  fi += 1L»Þ @OpenÞ  òHKEY_CLASSES_ROOT, 'É;hkcÛ ?@bkey  E£ / ¡ � w–  E  Òd R su Á# Only checkû½ extensions ”   �\  Ï p.starts— O("."Ë   7  �   „# raises% q ð 'Content Type' va_lue
  àmimetype, data
 ÿ	 = _winreg.QueryValueEx(C  Z ÿsubkey, 'Content Type')4 &ifp !q REG_SZ:7  k ocontinÓ �self.add_Î (á ¤ Îname, strict  ïexcept OSError‰ � ¢
def guessk 4urlZ b=True)@ @"""G% P the ” ñ of a file based on its URL.
ü €Return v{Ð is a tuple (? ó, encoding) wherU  is None ifi G  . ’ can't beª ð
ed (no or unknown suffix) a ng¡ "th5Aform¶ @/subQ ó, usable for a MIME ö-  Á header; and† ®  É ¢  9 %noÆ  z   šz Â program useE t0 ðe (e.g. compress= ðgzip).  The mappings a ¨ „ £driven.  E;÷ e) ñ case sensitive;ð 	" E Êfirst tried 2 ,sn %inI Î ˜ fÐes .tgz, .taz!j .tz (M !!)½ 1allÎ ð".tar.gz".  (ThisRtä -à @ tooŸ0ing‘ ± dictionaryÀ „ S_map)š !Op  2l `p' argumÁàwhen false addƒPbunch¡ñcommonly found, but` Ánon-standardC!s. 1""" `if _dbµ   ÒRinit(ŒrùO_db.Y7)

wpall_ext¹3onsË ‚0 Â‰Ô Ì'�@list l  n4givuQpossi 0ileÔü v p, incluÀ¥1lea „dot ('.'Ê2  1"nocñ'guaranteed to have been associated with any particularl‡ astream³` would 4Q  ‡ý   `2' b>� £ 0If Ä} g L & !ed[@ ,—~ 2is á#edZ�2\ Obut �Ac)‹¯†*ˆ+…} |D  qð extension, inclñuding the
    lea ñ)dot ('.').  The extension is not guaranteed to have beenE ò.associated with any particular data stream, but would be mappQ � °MIME type ` °' by guess_ (Ÿ WIf no¡ 0canL & aed for• @ `, NoneÅ ¡returned.
 ñ6Optional `strict' argument when false adds a bunch of commonly found,J  Ò Ánon-standard¿ !s. 1""" `if _db‡  � :  ainit()    ' .Ë _ƒ(û ,B�ict)

def™  4ext! b=True)c �"""Add ai ÷‘between a¥ v and anLWtàalready known,BA new¼  … Ñ will replace •old one. P  ( 1 9is O 0 ñ K b!ed1 !to# @listˆ„ ¸ s¹ #If& jÐtrue, informaí
W 1 toZ S 
¿0, e w ç=  Ñ ë*?addÈ")
ê#`files=<Úñglobal suffix_map,Òs @enco× ¶h s· >  [ 0ed,t  0 = C Ÿ0# sxð at MimeTypes.__' ò__() doesn't call us again_1if ´  ‰ · 0 org  Ÿ c Fdb =^    3fwinreg-   0db.ˆò_windows_registry()z  $ ~ 
B ™ =É þ  9  õ- 0 + 4(: ¼
7 Ó 2_db� 1for1 in s` Ðif os.path.isO T â �   ð  © 	Þi = db. % "   ¹ -  [û]# 6& F' R# MakñSDB a \ðvariable now that itþ`fully CSializß  É ôáBmime´ü 82try	  �f = open! $, ƒ='utf-8'�Öxcept OSError= q žð »f  Çøš’Qfp(f,+h  ‘ T <db.RÍ—_default_Ý ð8¨6, _ 9 ª + ï æ_ 	1 Àglobal typesÀ_map, _types ò_default
    global common$ 8, _ / 0 `suffixG F = _ & A = {)  ] ‘'.svgz': 	 W.gz', t =tar a6   1bz2l  6   	m x8 xˆ !}
“ �encoding" Û 	 Þ Á IgzipÙ Z† ‰compress  – ‰: 'bzip2 ž 	™ @'.brI 'br* ® °# Before adµ Q new àò!, make sure they are either registered with IANA#ñ# at http://www.iana.org/assignments/media-f 2ð# or extensions, i.e. using{ ¢ x- prefixa€# If you³ 0 to# ð se, please keep ñm sorted by mimeÖ .p MÛ b entryÊ 1thel  erÝ Ffile™ ö for a particularX W “appears bS@ny o1@s of” Q same6  ý �  
 + '0js'÷ : 'application/javascriptá3'.m/ . @json^ .   Ý { Ð'.webmanifestUˆ  +L 5 0doc\ ¹ imswordµ ?dot* ?wiz* !biÚ ~ Éoctet-stream„ aX  0 1dll2 ;` ?exe0 o. � 1obj2 � sa 0 "od"0 )daG?pdf‡   /p7`pkcs7-»
U Opost !ai‚ Ê. "ep] Ø . 1m3u] . @vnd.™e.mpegurl¿ @m3u86 5 /xl˜  j zms-excee 0xlbd ö 0 /ppt0 Às-powerpointC',
  `'.pot' ú: 'application/vnd.ms-powerpoint5 /pa5 !s5  /wz5 @wasm6 Ô  ü ‹bcpio'  ( "x- + * +  	*  sh| *  )shE?dvi)   R @gtar* §  * 0hdf) |   ) _latexú  + /miT   ) c} 0net , !nc¨ © ,  1p12- ÿ ipkcs12T pfÖ Ò ,  !ra%„ Êpn-realaudio^ y· Š «ython-code1  _� 1 <” </sh j/sw¿Üshockwave-fla_ !v4Øé s 	b ov4crc'´   , Ê,   	) /clõ9tclcÈc   	R !expÔ jtexinfê - 1rofd-  	… Õ ® + ô+ 1manX � - … !me. …  … *-mÄm¶. s� usÊ¶   ‡ s5 +  ªwais-sourcŠ /xsmrˆ' 1wsdO 5' /xp' 1zipUN   ô !au& M _i/basicB1snd$  J # :mp3# ImpegE &mp4E Àmpeg',
     ð   '.aif'    : 'audio/x-aiff',
   $ c% $ I $ 	 raF 	l qpn-real{ 	t 1wav- P   — 4bmp# `image/ ! gÜ !   ! !ie´  ý !   ! :jpgc Ijpeg¨ ?jpe" E 2: 'e D !pn! ‡   ‡ +sv! ysvg+xmlŠ t·Êh  G t" :icoÎ ùvnd.microsoft.icont :ras0 Éx-cmu-raster*  œ NPx-ms- ¢ <pnmP ù portable-anymapU /pb/ =bit/ g/ >gra_ p0 <pix_ <rgb½   à x± x©  xy xq  <xwdq ªxwindowdum*4eml+ @mess.irfc822P?mht& N ?: 'L %nw& %cs& Ptext/ 1%cs  v² !ht‹  ;   A %htÄ! %txô ! Jplaiå/ba" {D hXû" "ks$ ?: '" pÃì ª 1rtxh D @richM 	3tSùtab-separated-values1 !pyU x kx-pyth
e{ Mx-se{ s�  [/x-sgÆ K#  %vc¶F Yvcard´  o$ g 1mp4Õ �: 'video/ 8méˆ ! ú%m1›" pñe D >D û" oˆ ™quicktimeqÅÀ  : 'video/qÃuicktime',
  ñ'.webm'   : 'video/ " 0avi! " Ax-ms, 	I gmovie'I bx-sgi- P !}
} ð-# These are non-standard types, commonly found in the wild. ; y lK ) ñmatch if strict=0 flag is given toC ÄAPI methods.‹ °Please sort$ ase too\ ‡ _• H = _ Á_default = {-  T`'.rtf',Àapplication/ ñ'.midi': 'audio/  C  1jpg `image/ = @pict\   	 'ct=  /ic 	1xul Ptext/ [ D}


R_mime6ñ()


def _main():+0impmbgetopt‡ðUSAGE = """\
Usage: G |p.py [opM!s]$2

O Q °--help / -h‡    -- prinÒ`is mesS ‘ and exit† �--lenient8 l8 p-- addih óally search of some–Y, but¶N  @  ¾   °--extensionp e£ fguess  pinsteadr  ; ñ 

More than oneú ` argum¶ bmay beàR.
"""J nuî Ó(code, msg=''z ¢ (q)›    if) :5F(msg @sys.5P )e 2tryz < Popts,˜ Bs = Õ. (< Øargv[1:], 'hl <   ['ÑC', '¤  ("']ž dexcepts �error asÉ Ù 1½ #A = 1& W A = 0 qfor optÔ  } á ï  if   @('-h™ d × z 0«   )el; l; á ¢ - ¥ “   @ e@ ¿ €  ê  Ø gY ½ IargsÕ 0   v ¤!=  _% (I ,på  3 bif not2 Sñ"I don't know anything aboutÙ1", S 
K DelseC ‚   ° t   ! p, encod] µ  ó ° `'x 2:',	4, '™     !ñif __name__ == '_.2__'Š  ()ãðFind modules used by a scri° us÷ ðintrospection."""

imp°ort dis
imp  þlib._bootstrap_external% ”machinery Vmarsh* oY o# ðsys


LOAD_CONST =� †.opmap[' ê']
IMPORT_NAME&  �']
STORE&   % jGLOBALM '  ) bOPS =   € , ' Ó
EXTENDED_ARGN  ð$

# Old imp constants:

_SEARCH_ERROR = 0
_PY_SOURCâ 1 ñCOMPILED = 2
_C_Y ðSION = 3
_PKG_DIRECTORY = 5$ `BUILTI" 6D PFROZE 7‹ ðbModulefinder does a good job at simulating Python's, but it can not
# handle __path__ modifications packages makeU ðruntime.  Therefore t
 @
# i‚ °mechanism w aby youp ð register extra p €s in thi` ”p for a
#u P, and­ ðwill be honored.

# Noty #isv 0appé ²is lists ofa 2.
pÃ ÀPathMap = {}A öA Public interface
def AddP1 (= Qname,Q d):
   £ U º.setdefault2 °[]).append(ï £)

replaced ‘ TR  M`allowsžôóto work around
# situ¹�in which icÄñ injects itself u8@the Þ  
#30anoÍß  qo sys.mlsê by calling
# ¸ s("real_=_` š", "faked a)
# beF@runnÃ×F×!.
•^ 0oldS P, new	 ”[[) 4] =+ 
Q _6_Õ (C ÝS=NoneN P"""Anëñortlib reimplementc /Gimp.J   (Âñour purposes)."""
2ð
# It's necessary to clear?q caches @ þ p first,$ƒcase anyK º €s are be6ñ added/deleted/mÅ'ed°ó. In particular,J Ctest	 Ê `er.py Â õ�file treeï0ten=2n a® `-break| Bway:å iD.$Ð Â.invalidate_ñ "()8 fspec =n.?  ¡ _+ ³A 0if    Ä¥ ©qraise I“Error("NoGù0d {±!r}".format^ = !),#  ª a# Somem @ial ˜  k „ @.loa’ ›w  xÐ rBuiltin’ 'erª `eturn ¿ ,  ("7c", _C_
ð l Àmportlib.macó	hinery.FrozenImporter:
  Ãreturn None, P("",  Á_PY_FROZEN)
1 òfile_path = spec.origin "if ÿloader.is_package(name)s 0os.Q @.dir' (c 7), ‰ ÃKG_DIRECTORY� áif isinstance(� { 1, iç slib.mac±SourceFileL¡ ‘ pkind = ï bSOURCEÑ /elc ŸExtensionf 
¿C_EXTENSIONh $Ë Olessi 
´PY_COMPILEDi ñse:  # Should never happen.á 
ÃSEARCH_ERRORˆ ²÷  = io.open_codeÆW ”suffix = î‡splitext) B[-1]§ �  X  ,  s2, (G €, "rb", ¶ò)


class Module:B ðdef __init__(self, ]N =ì v 	 + 0.__, A__ =5 Á   ‘    	   U :  	     �  ñ# The set of globalx ñs that are assigned to in the mï µ F  is include< 3oseH  ? ²hrough star Gs ofŠ cPython] s^ û œ  gs = {}8 Â \ CthisM B didÑ c{Wot beC ÷ resolved, ie. a¤ É from a non-¡   z   ^ CreprïB = "9q(%r" % -!,)C  ý Ý`elf.__÷‘__ is not2Ú *  zs + ", T 9 T  .T "9 T ~ %)"¼ Ps+@Find	' &	1 [  Ò, debug=0, ex_ breplacs ]0if C  ) ð
% B= syþ„ = d   
 õ ã ~œ?bad ¿ " =Ç 
R  jnt = 0 é % =ô 7 if þŠ else []A 	: =  ,if P ‘processed 0[] Ë@Usedå ðging only

    def mósg(self, level, str, *args):
  "if @ <= . f.debug   ' áfor i in rangeU w.indentI  )   õprint("   ", end=' ')o " Ž    o 0argq  ­ 
Œ A Ÿrepr(arg)g 
!)
| ‘def msgin¾ #0 = q 1[0]4  k 7 E 5+ 1J  N * Bmsg(†	› ?outœ Z-œ ”run_scrip  ‡pathnameýÙ F2, "1 5", - 	õwith io.open_code($ j as fpñ°stuff = (""\ êb", _PY_SOURCEY† öload_module('__main__', fp�  7uff6 2filÞ* ä Pdir, ø ` = os.µ f.splitÀ ä  ' \, ext, @ext( ¹ %?ext z 
³import_hook�6 ócaller=None, fromlist >7=-1.Œ ëG3, "T "D", P K §PparenAK ¢determine_ (@ |  < tq, tail�ðfind_head_packags ] Œ 7 #m À B (J $ eif not
­…return q	pif m.__-*__, × tensure_P&(ms V  {3 P W“|in(4, "A "= € ó r3 or2O== 0Ó  0msgÌc @ -> Æ "\  à     pv# ='0.__ (__Yã ò >= 1: # relative m)  M &ifH ‹ $ N +-=î  6 �7w!s[½ E )   sassert 4 #is• 	«  (  Ê.GZ Ã
JÐ    return pagrent
  ùif pname.count(".") < level:)  4 ñraise ImportError("relative i ù path too deep")B h Á = ".".join( R.spliy 1[:-y ]8 a¶ ñ = self.modules[= ]a   òsgout(4, "determine_pC R->",  
c creturn T Àif caller.__Ù *__J ™ cassertM < isi  \½ @b'.' inà
º 2i = ª.rfind('.'^% :[:iiù 0 0.__jC__ =~ jAQW None¦  
œ @def !à_head_package(Z H , Ô )_  a.msgin„> ‚: h   3if ± R Q  ! =h .O ® ž " ¬Dtail Fi+1:ÊJelseg H —   D %""  7T
A q»  ã«%s.%s" % (ü , e m… D  ( p qfg_($ !, 2 ‘[ Jif qŸ œ! N	Û "@(q, ó )L   ›  £ ,  G ! =}	 å ! R é   í + B ñ Y R: No ¢¶#d"¤P4 +("4 B " +Ú)ŒPload_›„Œ1  ƒ ÖtUm = q Qwhileø
5 , s | if i < 0: ) @len(- ê  I } ! =b  ¦ [” . mEm<@1 	àmname, m)
      £if not m:
  ð'self.msgout(4, "raise ImportError: No module named", m	 )L < +("< L " +> ‚ Àload_tail ->l h ‘return m
z ðdef ensure_fromlist(L T, m,  æ, recursive=0)ÿ  )  ÷ ô F  u B Š ¥for sub inj \  \!if  j== "*"   �œ "  & aall = « Ñfind_all_subm�6s(m�  .  oif allR  $ P ó 0(m,5 :, 1T #el:phasattr( 7subI R   0subð = "%s.%s" % (m.__ 0__,
\ 6 4modå iv_à A(sub6  A /, í  › ð ’½ )Yp 9 ‰ k ‚  ç fpath__  Þ °­  Ø es = {} ð# 'suffixes' used to be a Ñ‚ hardcod €[".py",  Gc"].E óBut we must also collect Python extensionËÇs - althoughG `we can›ñseparate normal dllsìR sˆ Ê U = []W  2+= ãÿlib.machinery.EXTENSION_SUFFIXES[:> oSOURCE; "BYTECOD=  ã0dirãà:tryñ æ ¯ ä0os.Âzdir(dirû’except OSb* @    jž’2, "can't€directorU  9 ‰continueR  Ê  –  Ë   sµ …:Non:  S  >  Â >    ªA  * €n = len(& 
ð      0Àame[-n:] == * L  . •  ² F[:-n   Ybreakò    ifëA and Ï!= "__init__‘  2  p[mod] =6 U Ê  §ules.keys(.Ö¹�elf, part¼ B, fq gparent<çyin(3, "F "B — �ðm = self.modules£[fqname]
  õexcept KeyError:    Epass Jelse õself.msgout(3, "import_module ->", m)@  Q …return m 2if ’ A in P AbadmA sm o None"o   r ²parent and  Á.__path__ isH { C:tryY @fp, y  “’, stuff =CfindJQ(part# Å  L â í  |  	4IÈ ¡ñ lQ  ¤ ô  
Á mù 5loaù /, ( d kfinallZ Xpm Œ –fp.close(? #if
. psetattr|1ent+„Ó	mHdef ì  L ,ò ¦file_info)¥ õsuffix, mode, type = ) i W  ¤win(2, "r "n  @"fp"ê  thn	#` ö= _PKG_DIRECTORYŽ  ]
Ã„package(ÄèW  4 Ÿ  C  Aœ ŠY_SOURCE˜ öco = compile(fp.read()é †, 'exec'š CelifS ó ªY_COMPILEDY Å Ò @dataŠh Š    &ðlib._bootstrap_external._classify_pyc(M §&{}£  J ¯z as exc§  + hhraise éÇ " + str(exc
r  K ; 	Ö a€marshal.bÁs(memoryviewÄ f)[16:]L LD $ d   O+adH Am.__ô5_ =Jœ Zif co"if_qreplace÷i | Ž 4	) ¶_in_code(co„  0  ˆ   _ˆ %co‚   G 5sca; 	 SA_2(M  , ½ð	, caller):
        if na÷me not in self.badmodules:
   µ[name] = {}' Ÿif caller: [* 0.__I  __K 1J OelseE 2"-"9 : ðdef _safe_import_hook(¹  , f ,Ÿ ö, fromlist, level=-1)o Ò# wrapper forP ñ) that won't raise Io QError‰  7!ift XU_add_z(­ )R  V ereturn 6try¸     í .® K î ô X hexceptÅ  as msg[  ‡msg(2, "ò Æ:", str(msg)U � Û ƒ aSyntaxHƒ - ƒ 2s%if(

 Ü  ubßM% ) 0ull…" =µ+ "." + subÇ (   v 3 ”4   úmfI ù
Ÿ 6  �continue“ f6   x r_[sub]y ?  X/   z ‘ 6  > 0 XÃscan_opcodesS)co5�Scan the $ ò, and yield 'interesting' D Ñ combinationse  ˜  : � = co.co_   Bs   Vconst   Poparg ¡[(op, arg)Ø3_,   ÄÂdis._unpack_2 (€ 1õif op != EXTENDED_ARG]p  1i, m J )` ¡enumerate( s: ù T Îin STORE_OPSMM‘"store", %!s[O .],© Ò if™ ñ  == IMPORT_NAME«ei >= 2Æ  •   Êg �s[i-1][0]A  2 «LOAD_CONSTÞ  I tÁ ­·  P V2][1]> +   T2  12 "ifÌ œ â0: # absolute �	Û À        yielû d "absolute_import", (fromlist, names[oparg])
  òelse: # relative C (  7 tyield "+ n level, u ‘continue
g ñdef scan_code(self, co, m):   {   � = co.co(   : `ner = : . 0_op0 s$ ñfor what, args inp gner(coe  i !if* ¶ == "store"…       R1, =M d     €m.global%  s[ Y] = 1( (elg ¾q 
Xz €have_sta0p  ˜ %ifŸÎ is not Nonem - 0"*"){ (  , w 
ç     D ` = [f �f[  › � != "*"]¸ ÖD_safÞ`_hook(Y8, mt….=0ä5if ¥ È ò	# We've encountered an "  *". If it:ýa Python module,²  ó `# the †ñ has already been pars` ðd we can suck out5 O UÍ.$ Amm =Ó ßif m.__path__¸ A† €is point¡ ðdon't know whether '~'m J 2sub#Ó of 'm' or a É  ÿ. Let's just tryN  PAfullo first } :h `s.get( º ¡__ + "." +M 1 C  1mã & ' j  f W �[ J™.update(m`d =  
Às=  = ü !._i/__q ø (   uì'm.¥ J 
B’à- ¢I!ifF  ¼ V�z kdparentÐ¢determine_ ð(m, level=level)
   ø2self._safe_import_hook(parent.__name__, None, fromlist, level=0)
S helse:
   ð# We don't expect anything 1 U ý  the generator.D õ
raise RuntimeError(what)
* úfor c in co.co_consts� úif isinstance(c, type(co))(  µ �scan_cod- mm ðdef load_package(+ @, fq+`, path
 T  ! ¸.msgin(2, "= "9  Ó 0newJ ² = replacePr ‚Map.get(s ƒ3if 3 
Ð ( $ = a Am = � ­add_moduleU Åm.__file__ =Ý B 0.__ò  [
  ² ]—ð# As per comment at top of V Â, simulate rÝ Q –additions �  e o  #+ �JPathC, []º Øäfp, buf, stuff 5finÆ"__init__", c f:try_BÕ	C*, l B  ˆ 5 mmsgout0 ->| 
1 …return m{kfinallŒ Zif fpŸ  n “fp.close(
 Äô � ‰¸ M Ö W $ .á Wš ! [s]­  0 = �MxV mK ± ¥ P  , lr   ²=¨
Ã Ëq is notÈ
 �# assertÝ' ½ B0ullo  j P+'.'+ 0  Ö
d f> 	*  b "inŒ{excludee ñ  D 0G3, "R -> E5 dPQ ?AIã@ ‰  á %if D
À  Z1ame£ys.builtin3$¯  R Â(O AP("",  ·_C_BUILTIN)…  7  à˜    Q _ü (Æ  ý#thG  * reÊ™`"""Priƒ P or‰` stdouÐ0ist’ ˆcfound ìP withŸ%irá —  s, as well - õthat are missing, or seem to b Ò6"""W  ž (¸p ð"  %-25s %s" % ("NameFoFile")/ À"----", "---c-"))
  õ# Print modules found ókeys = sorted(self.) . (I  for key in %s:D  i mE > Y[key]" Úif m.__path__=  A p¥ Ö("P", end=' 'Ã    Oelse6 m6 V €%-25s" %¹ ,‡ åfile__ or "")
© -dissing5  m t, maybeô Cany_ _ (¼  ÷ 5 
¾ š (  ä  ""M0 } *:"&  ˆ@name‰v 
[  K <modØ3badÛ[? ]á 8   ‡ @?", ) a, "imp!@ frol ', '.join(h $@m@that,C be ¬ ô, but then againLenot...j 8 d
Û › 
 C"Subß  v �appear to| �could als :aglobalsqÿthe parent packageŸ
Â  a 5 <Tu�ITGdef ¨v )]ô"""Return a list of€OQ. Use^  Ö ^ À if you wantŠ¥know which] &arB pcertain* 03and5 W*may*Ð/5"""‰ iŒ i ™Ÿ  2 rû 9   +³"be9Û  *?1twoA¦s, one witì ˜3re é $lyŠ  ì 8 ü ³ The latter ÙK `either.s¯*or* just ÚÓ.ú  Õ d ðreason it can't alwaysY Òdetermined is(Pit's 0•ssible to‘ CtellÉ XQs are+  |  w"a 0 *"] 6don)VÃan extension3 a, shor½ƒactuallyF  Í/it0
F = [³< y  .µI 5!if‘ 0( {exclude3 * vcontinuÚ   1i =@ ›.rfind(".‰if i < 0u À     missingû .append(name)
  ‰continue 0sub. 0 =  i[i+1:]! 0pkg ! -:i ó = self.modules.get(6 
… ùif pkg is not None:k  ° $ r "inX 3bad[ [ ]5  9 ò# The package tried to import this F 0 it¯ M and~ I ÿfailed. It's definitely missing.7  ƒ
Telif s inp.globalÚ sÚ ‰ "a * V in të :¢  X‰ ¦ Mpass – ‚pkg.star1‹ ” could be@, bub~‚did an "L = *"s iórom a non-Python£ð, so we simply can'tq Osure~Oaybeÿ?elsp ‰ a =e,r didn'tÔ �do funny M@s, iL€very likM toÒ ­
ÓfsymbolvÙinserted into˜ fO*thá á   ’# outside¯�since tha˜  ú §good stylez?lisè $it ’-�7  Vsort(\mý dreturn¤ !, % 
µðdef replace_paths_in_code(V, co)Š€new_file¡¹ = original  s.G P.norm	 e(co.co" © €for f, rÃ k .† t  °.ifl ¡‡tswith(f¤  0   ¬ >r +D @[len= 
Ç > Rbreak"   ª ×Pdebug.L È§’processedTÎ 	� !J 
2  ƒ $·msgout(2, "U’ %r changçQ%r" \Ý 8  	=% (Ä,œ &,)± I ¨› £remains un¥ Ÿ *’ | oÀd_paths.appeó	nd(original_filename)

  òconsts = list(co.co_ )$ ófor i in range(len(# %):%  P Óif isinstance$ €[i], typ )0  4 J ð[i] = self.replace_paths_in_cod=  ¨ 7[i]¼ ”return co4 (½ T=tupl6 U), coý E=new Ó)


def test(ž ñ# Parse command lineç Ñimport getopt 6try�opts, argO% . ò	(sys.argv[1:], "dmp:qx:"cTexcepW Ö.error as msg\ ’print(msg3  9þ Êñ# Process optionsž ’debug = 1 @omod› 0 0addbQ = [] vexclude  ÷@o, aú Ü Ž Æif o == '-d'  • s  +{   4 m4 ™ ¨ 
- p- · 
 Ð+ a.split(os.Ó 6sep&w qJ £ "= 
v x, “.append(a…wÀvide defaultþRument�Qif no s'òscript = "hello.py"€?lse&   P4[0]è€Set the é   based on `  °  e ‘directoryb " =- "[:ù   [0€A@.dir'(F M & 6 = v  W 2if L6> 1Á ²"& é d U@itemU C     5 °   ", repr(, )oaCreateámodule finder ø  ‘its crankX amf = M* F) (t ,° #, ×á  š 0arg™ t61:]Î  ifÛôÀ Ì rcontinu;   (ëW  �arg[-2:]` +.*} % 2mf.~`_hook(1 ò:-2], None, ["*"]Ç  .   eO    H 6 2 qmf.load. t , rmf.run_	$  e$(* £p mf  # `"-i{Àging


if __j!__û ƒ__main__	^Ë§Û6öKeyboardInterrupt]MD\n[i ñed]")
"""An object-oriented % ð face to .netrc 1ƒs."""

#Hk1docçamò by Eric S. Raymond, 21 Dec 1998

»ð os, shlex, stat

__allü 1 ["q P", "Nz ‚E»"]


class  !(E93ion¹2""" Àion raised oð4n syntax errors in the .netrc file."""
    def __init__(self, msg, % ñname=None, lineno !):9  =  0 .* ! =Z  5 
! < # =E 
 Pmsg =s  ®Exception.˜ !)
' µ 3str´ “ âreturn "%s (%s¹ � %s)" % à  .mß 	º !,  ¨ ¡)


class .í q 	& ÷ �default_: @ is D¹  5!if( a      V ô = os.path.join( òexpanduser("~"), "Ñ%")\ È ªhosts = {} [macro  with open(z z) as fp“ T a_parse% P, fp,8ë —)  5 E/ a álexer = shlex. 6(fpÑ   ô#.wordchars += r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~Þ SC �commenter ö.replace('#', ''€ vwhile 1±  R ð# Look for a machi#ý@, or  3Ðtop-level keyÅ ‘ G bsaved_v  . 	( 2topE E= tt) ¦get_token(®  V šif not tt´   Ybreak[ þelif tt[0] == '#'5 2if /š  ( 	¹ °and len(tt) + w   C Ðinstream.readP ¼  * �continue¨  a 'q«  Pentry€%ø P ¸P '' ˜ 	Pdef':Å  ó# Just skip to end of"sN  6 Ä  .  g.Ø[: m] = []Z ƒýwhitespace = ' \t') ô n    ¶_Ð 5 ”< !or{O\012x  3   ² N\r\n¶  1   å    -€.append(� 
J 4 Ž.se)praise NcP-E|(^ V U"bad ×Æ0 %r£$tt6ý  – #no` ;   ð# We're looking at start of an en÷try for a named machine or default.
  ©login = '' ù
account = password = None& ðself.hosts[entrys i] = {}' ‰while 1:  „ ta ýlexer.get_token()' ý
if (tt.startswith('#') or* U “in {'', 'þ   þ   žmacdef'})’  A %ifõ !  % û (Q#, A,K ×  G   Cpush/tt- _breakø Oelse° ÿraise NetrcParseError(I  ”   p"malforF1%s áÿ %s terminated by %s"E 
Â% (toplevel,D  %Ï, repr(tt)),? 
bfile, "nlinenoPelif K1= '~'î _user', # =^ �	b ÙT  V fW `if os.:ô  == 'posix' andÕ _nÚè  Ì`prop =E �fstat(fp.[Nno()Q 1    	Árop.st_uid !@ getuid(< 7   ¯import pwdß
?try´  H   `fowner‹ wd( pw�  Ò š O)[0]g 
¡except Key÷s 'ù g%s' % q m 
Ô  —Ò  osÞ  Ü )Ò ?q Ð o Ð 
:  ¶Q("~/.– j Åÿ(%s) does not match@ K ± " current Ç  E b") % (, J I  ‰ N (    uó€mode & (;·.S_IRWXG |  /O)F#DÀaccess too p�`ssive:gàess"
           ÿ" permissions must restrict access to only"
A  ÿ" the owner", file, lexer.lineno)A £password =- ®get_token(1 _else:G ñraise NetrcParseError("bad follower V ¯ %r" % tt,H Ï 
 Í ? ödef authenticators(self, host)« ð"""Return a (user,^dount, ñ) tuple for givenE 6.""z!if @ in g .f sf  ³ rg  [% ]®    ïelif 'default'J 7 O ’� QNone
v  $�__repr__
ADump: class data–  Làformat of a .nÜW	grep = $ ? ó  E g.keys(z  wattrs =L- %  a à+= f"machine {^ Á}\n\tlogin {G f[0]}\n« ; 2if  *1]¥  X P\taccJ 1J - /. 2.  ÿ Umacro  sW 0mac§{, È  T  ÄS [. Û  3  ï   o "(/òrep

if __name__ == '__main__'>aprint(ò())
"""An NNTP client Bðbased on:
- RFC 977:ówork News Transfer Protocol* ³2980: CommoY QExten# 3N P (ver5 ñ 2)

Example:

>>> from nntplib importÃ   Œ Ð �('news') aresp, ! Vprst, la  * ¾ó	.group('comp.lang.pythonA 7 'G% 0', 6 u, 'has'W õ'articles, range'j B'to'p !)
B  f ‹ has 51 C P 5770<G5821É 0subç òs.xhdr('subject', '{0}-{1}'.÷5(fiì )ñ Qquit( €

Here '&A' isJ`serverÉ`ponse ‰!.
 `s are “àed into exceptÔ.

To post anÙ »a‚:Ñ �f = open(Warb') #% ´ containingD €, includ aheaderI  ½ Ø  s #(fÙ ¢For descri– �ll method«1eadð €comments  8ðcode below.
Note tható@ all arguments and return values representing article numbers
are strings, not  ñ>, since they are rarely used for calculations.
"""

# RFC 977 by Brian Kantor• ð$Phil Lapsley.
# xover, xgtitle, xpath, date methodsH ÀKevan Heydonc ð
Incompatible changes from« ñ 2.x nntplib:
# -�commandsÈ ðencoded as UTF-8q Pa (usñ!the "surrogateescape"
#   error handler), except
³raw messageM ÅPOST, IHAVE)† ‚response‡ /de‡ OòARTICLE, HEAD, BODY�  ç e`file`9µ to various~ñis keyword-only
#Ì PNNTP.¦#()i0s aù Æetime object* ±newgroups()? `newnew Htake? 1(orL )I ,~ðrather than a pair of (†  , w )Å Z$- e z Elist¹ 0 a   L G¤ öInfo named tuplesÇ qdescripï@ ù €ict mapp@p B sQ5 K ù	D … UdictsM SfieldM  (header oržPadataË f ( íp; each I ø£ wGview*2(),: m ¯Ebody± D a (Ì2, AP :‘  9\  g "internal"¹ Õðhave been marked privö(mánow start withÿàan underscore)OÿK/3.1àutomatic query¨Ðof capabiliti’et conn¹eÒ ƒ8get/ (ê ;- N&  Y °helper func6 ò_\$er(  L!po“ ¹¸i! cc$ilVÅs, bytes-lik  V&ðrbitrary iterables yD ò Rlines—ñAn extensive test suite :-[BTODO<G structuredš6a (,ñetc.) everywhereå°support HDR« Im 1s
i 4 re
 dsocket Qcolle*+  ß Ý# ãsys

try:
    P Cssl
�j Eª# _Jþ_ssl = False
else aTrue

Ebemail.¥c 	º 9_& _ ? Ô 9 ð_GLOBAL_DEFAULT_TIMEOUT

__all__ = ["ô!",Ó  × 1    Ç "", WReply ÀTPTemporaryE†rror",
  ò "NNTPPermanentE!   yrotocol CData 	G Ëdecode_headec ð]

# maximal line length when calling read ñ	(). This is to prevent
#!  ) ”arbitraryG  6 ðs. RFC 3977 limits Ù 	o ðto
# 512 characters, includX ðCRLF. We have selected 2048 justŽ ñbe on
# the safe side.
_MAXLINE =/ 
ñ òExceptions raisedï @an eeð or invalid responseó Òreceived
clasÅ o(P !):y‚"""Base ( õfor all nntplib e~ 1"""0 ó	def __init__(self, *argsO  c .) G  ( 2try„      O .Æ  = X 5[0]1 Ž a IndexÎ ? 6'Nowgiven'
QReplyG (ä
 Æ ‚"""Unexp»�[123]xx r1 HpassN PTempoOH R 24xx´sD 
@D 5D nC R&ÿ
does not begin with [1-5]Ÿ ´W ÷ 6 inrJdataK ð
# Standard port uÐ"byd€servers
�²_PORT = 119 4SSL 0563È ðnumbers that are followed by addi>ñal text (e.g. article)
_LONGRESP = {hô '100',   # HELP 1 ÂCAPABILITIES $21 ñLISTGROUP   (also^`multi-]c" )< 5X  <  2€ tARTICLE g ¤HEAD, XHDR 2E DBODY 4 pOVER, X  t B 3s dNEWNEWÚ 3s 1NEW·  8r �XGTITLE
}’‚Default Ä`d valuŽ r Þ  ƒ ±VIEW.FMT if0sup	Äed
_DEFAULT_' _' 1= [¶ ð"subject", "from @date  message-id  references C:byt
  ‚!s"EðAlternative namesô2/in¬  ’
œ Ö_ALTERNATIVES?q B': '{ '&'~  
 ,3LÇðterminators (we always output P€, but acs any of �CR, LF)
_' € = b'\r\èð GroupInfo = col† E.ð …dtuple('$ ¦  „ À  ['group', Ã'last', 'fir	 ÷lag'])

ArticleInfo = collections.namedtuple('& O',
  €['numberw  message_id Qlines} Ñ
# Helper funw ò(s)
def decode_header( a_str):~ à"""Takes a uni+ ð string represent ’a munged A a valueA 3andd `s it aJ ò(possibly non-ASCII) readable< A."""@ ¡parts = [] ÿfor v, enc in _email_Ä  Eóif isinstance(v, byteså  !   l ¢.append(v.W (l Áor 'ascii'))ˆ  / Belse&    
A * ñ return ''.join(# !)
|ñ_parse_overview_fmt(´˜ @"""P" ¯ a list of}ñthe response to LIST OVERVIEW.FMT²  ‰rŒ O ¯ /metadata ‹!s.0 ù	Raises NNTPDataError if n ñis not compliant: ò(cf. RFC 3977, sèU 8.4)×:fmtÕ ø  Ó  sV0if  ¦[0] == ':'  q8# M» ‘ (e.g. ":Þ"� (    Ü Ò, _, suffix =Z @1:].•i�N(':'6  z ! +ã  P ÿ e G( Œ ÿSubject:" or "Xref:full� ™  Ë ! =g v.lower(µ  _ð_FMT_ALTERNATIVES.get(& ,A : ð# Should we do somethÞAwithø:?4fmt/ Q K adefaulµ‰_DEFAULT� >  Øäen(fmt) < len(7 ü brƒ
‚-("Þüso short]‰if fmt[:_ T] != m Nl 0defWC s fieldsr a?fmtâÞ,–  , q�_process_—S=Noneÿ û	oQto anÛ MXã |mÜ`accord¯ to­g[Õ format `fmt`…$n_ ?en(°ÖJ 	‹ œ¶ Q = {}‡  Ía _­€, *tokenÛ E §.split('\t€
3 z = int( �  `  1i, V  “ ¡enumerate( ì 1 >={ †
 M   P# XXXP"@an eð? Some servers might nKot
  ÿ(# support LIST OVERVIEW.FMT and still return additionalH  �headers. ‰continue ùfield_name = fmt[i]  °is_metadata! . ú.startswith(':')5 ñf i >= n_defaultsÄ Gnot P :4  c# Non-4  É  œ ðs are included in full ºthe responsÙ P €(unless ' ë ú is totally emptyº  6 hé } + ": "¬ �if tokenÚ 
 þ[:len(h)].lower() != hæ  d ðraise NNTPDataError("õ /X Ó „ doesn'tü ‰   O  "9'of/T.s"ö Ã " =Õ [Ê 5:] ç  el± *onfT"s[9]? -òoverview.append((article_number, @ )� rÞ5 ð

def _parse_datetime(	 `_str,   
 b=None)h@"""P0 ± a pair of 2 . ¡) strings,¶p  a T  N r object;qIf only; !  :€given, iÈá assumed to beD V  I ¡concatenat% Ægether (e.g.à!toa ÒDATE command)€ """u ‚0imeê  ƒ  í ì  õ m  =�   F[-6:Ä º    ! 2:-6! Ähours = int(J B[:2]�mminute  32:4! msecond! #4:  Cyear^ ‡ 4[:-> @montk }  D-4:-€ <day> $-2\ ¥# RFC 3977#psay how�ðinterpret 2-char ‹ Qs.  A´B thaƒ#~!re_!noDós before 1970 on Usene!ifK V < 70† ^ � += 2000û&el) /10*  #19* „  ‚.	 (T !, %q, day, ®#, —#, )(,un*çt, legacy=Fals#rFormat ù1 orø   ? asAæ  in>" fN ¢required b4qNEWNEWS”NEWGROUPSä ŒAIf aH  ô z ¡is passed,\ • +islñmidnight (00h00).
H T "Ðed representa*0 de�sÐ R flagÇ*ê 1is 1  (+ �a ,2 haT„YYYYMMDD «´  : cHHMMSS À
    * if leñ gacy is True:
  ñdate has the YYMMDD format and time cHHMMSS .= ðRFC 3977 compliant servers should understI Cboth>  s;R qrefore,J $le› ôonly needed when talking to olda � 1"""? °if not isinm pce(dt, Ú  ¿ .	 )ô  × ‘_str = "0 J 5els
& ô{0.hour:02d}{0.minute asecond "".>A(dt)� ±y = dt.year 2if ï Ž  # qy % 100#  ™ µ ¢ !{0[ „{1.month 1day s 4y, v 
É M ?4d}M areturnQ “ ,?ñ


if _have_ssl:
¿ ÷def _encrypt_on(sock, context, hostname� """Wrap a , ö	et in SSL/TLS. Arguments1-( €: SocketAwrap}  <-m :F   ' 0use… € ¢  ed! unectionC Ró s  GNew,; ° � { “  p# Genera™a default‘ ¸Öne was passedI  if—  2 ²7Non˜ ] Oó = ssl._create_stdlib_ (‚ / Ã ./_¼ Ÿº_�=	 À)


# The cl£ )�mselves
 R NNTPœp# UTF-8²  OÑcharacter setx1all/  3Qmandse responses:™y…ð# are automaticallywo(�sending)C 2dec  l`receiv K rby thisÃ dð# However, some multi-lineèÁa blocks canˆòain arbitrary bytes (foÓò# example, latin-1 or utf-16N  inÚ ñ	 body of a message). Com
« !taïÐ(POST, IHAVE)N Á 
ô
(HEAD, BODY, ARTICLE) rawU J �data will{  ren _RaccepßsproduceÑ tobjects!€Furtherm§Q sinc
Are cÝ~be non-ý2outs ÝP# we yó'surrogateescape' wÑerror handler(,“toleranceÒ  Üñeasy round-tripping. TÝ– ausefulH ÛpapplicaàsJ R(e.g.Š � bways).¾@encoX@ = 'Ã!8'4 ¤ s Æ 7 õÂ_init__(selfép, port=#`_PORT,
 r=Ð,ôBword g  ¬ @read€"de"  < £netrc=Fals<.  	  ððout=_GLOBAL_DEFAULT_TIMEOUST):
  ö"""Initialize an instance.  Arguments/ q- host: õname to connect toV q- port: 
# à (default the k ‘dard NNTP. )D `user:  k ÷authenticate with. ¤password: 
  z "us) G 2 ðreadermode: if true, send '    õ ' command after@ A Eing." -u ðnetrc: allow loading rÔ  W ¯ �from ~/.3 U fileK f  õif not specified explicitly0 ¤- timeout:	 Ð (in seconds)� Äd for socketÄUions
E  pis someU °s necessary6uyou areB  ngw%anF Û‘server on÷Àlocal machinuPd intx N5all< ‚ -ë cŠð	s, such as `group'.  If Œ 5get? ’unexpecteañPermanentErrors,0  might need¸ s> }  ÿ Ó5"""^ Pself.! =
  ! =Ô
  r1 = > €_create_ 0et(_6out%  	f = Non6try• *   S P.make? f("rwb"X 2 ¶_base_init(ï 
(  if.@r or œ
{ M `login(°,„,5 V jexceptE "if ® 
 _   v.close(L  ð  RraiseÕGdef ò  (,æ ç
0Par Qation5 »×†protocol!EThisDñ method is extraŠv up   L 0tesƒ&deH i`debugg2 := 0RuwelcomeU’getresp()ö  #ö# Inquire about capabilities (RFC 3977)€  l._caps{ 8getC 
k Ð'MODE READER'ý ;²to enable 'z ' „‚ ¡# However,4ú order in which d  G¤'AUTHINFO'Î&ñ	# arrive differs betweenÔ|¡ s.G _sA‡() failsN  z , �Coriz0ailŽ ]À, it will seë is^WTrue;H  ü5`) rout5  1rpr;  atè`a requ(¶to try agaie#�€ perform'ðits normal function.
     ò0   # Enable only if we're not already in READER mode anyway.
   Pself.*  er  õ_afterauth = False* 6if ( b and 'Y  ' p 1in L e_caps:6  f  6set@ )()" !ifD ) % � 
P  T ñ# Capabilities might have changed Ê S MODE	r  D o ° f = Nonì     " Ggetcl 5()
J ñ# RFC 4642 2.2.2: Both the client(  ðserver MUST know­‡there isO ô	a TLS session active.  AO @ ñNOT attempt to start : J D "if U %is` 6 ï etls_onÿ P# LogO ûpencrypt¥ òsetup order is lef– ›ubclassesm ]šenticatedg àdef __enter__(Ž )úRreture�. 3xit- w, *args4 ’is_conneck ñ lambda: hasattrb †, "file"‘8if 8 (P  6try•      ¬ [.quitÙñexcept (OSError, EOF
 U  D 6pas  ofinalln  ¢  <   • d_closeµ4Ócreate_socketwtimeout— 3if   × ã #Ñ   
±raise Valueæ ò ('Non-blocking r # (< 4=0)[ ¦supported'ˆósys.audit("nntplib.Í!",l S.host  D A 2è .ö C Aion(û ? ,÷ è 3¡getwelcome4 &a"""Getò" Ñ message from üIP(thisù  êP€squirrel¶±way by __inÙ&))@!IfP  response cÒÀis 200, posteàelowed;s  1Yt 201'  Ç!al+ B."""V 9!if`ó.debugging: print('*å r*', repC. ){ ^ _ N	Q ¨S: . A, as‰
&%ðCAPABILITIES comm·"ishnP, an Hhy dictŒ=!ed   5!is6
 Í .°A_verÆ5= 1‰ E " ¡implementaJ… mÀ     resp, c÷aps = self.capabilities()
  ðexcept (NNTPPermanentError,  ‘Temporary )):=  H ø
# Server doesn't support u 6 — "_c¤ ){}  Nelseh 	2  9 	4  Š ð if 'VERSION' in� sH  * r# The s¸ Àcan advertis TveralÆ Íed versions,q K ÿchoose the highest.* Á Snntp_R ñ  = max(map(int,° [Â *])© m  â ¿IMPLEMENTATé t ðimplementation = ' '.join(L+['W ]} breturnI²
ß ðdef set_debuglevel(n !,  )a"""Set , Bging% p.  Argu– ! '7 g' mean¶f0: no 8 ö output (default¦ ö&1: print commands and responses but not body text etc©s2: alsoD áraw lines readJ ðsent before strippÇ ‚CR/LF""" £ .° =ê 21bug“6;  N@_putv H:ineGñInternal: send one¦ 1 to^Ð‚, appendŸ &LFä  ô`a P` musÎ ð a bytes-like object.Ï  Ê   °sys.audit("ºClib.¥ !",,‚ ‡ _ ! = � + _CRLFü  M i1'lf$> ·ð ('*put*', repr(G  U¢file.write X  zflush()S?cmdR@
U¥ (through ¥/))Zbunicod.)ngW
½o('*cmd \0.en\ Ø  2ing’ .e½s“·  E !(getÚŸ_crlf=Tru�IfromƒH "* Rae1EOFO1 if7 aconnec™—is closed4 �s­¨ Ö Z1lf.( ¸  Æ(_MAXLINE +1bif lenG4 > $ 
-r«  AData°  ('T © too long'R hú Ü£ ÿŸ_('*geè!if¤ e ": € +K  < €¦
² àif line[-2:] =«= _CRLF:
  pline =  Y[:-2]! Belif -1:] inF 1F areturnD 
[ ödef _getresp(self)” ð"""Internal: get a ' ñonse from the server.M  Ì ñRaise various errors if, > Âindicates an$ A £ õs a unicode string."""f  J 0 = ± .¿  0%() "if ðdebugging: print('*: �*', repr( )7   ! =å 0.de| ¢.encoding,V Õ 7 c4 '[:j¶if c == '4'R !r!àNNTPTemporaryE&� Ã @ 5@ ŸPermanent@ 0not&O'123F rotocolE / 
/@long  ¿, file=None>ÿplus following textR@LRSe Á,ðs) tuple where `Ó   7` i�H ‰` and `rs(  list of byÓvobjectsÒ@If `".   b-like * ð, it must be open³¶binary modeI  �  * PedFil0 | :trysc# If aH° was passed•ns aÄõ  with that nameR  ¸àif isinstance(Å r, (str,÷ )û /   	£  2 ! =n > R"wb")X .    �Ø  Ø # !if¡S[:3] àš_LONGRESP÷  . nIReplj	Þ ÏF = [, ? "if!isl  gd R# XXXP0 = $  (Iead?d  Q €terminat’= (b'.' +Ç†, b'.\n'Y 1    whæ1z    º 3  n(FalseI  0 C e� \  0 ]breakÈ   J p.starts; Ð /.'
  /    � ß*1:l      )p.write(/ 
Æ Nelse¬ É   =F'° C
x  ™   ô  Úu ‘  +   =À            ÿ  if line.startswith(b'..'):
   0 ! =7 O[1:](  $ �s.append( )' zfinally` ð# If this method created the file,
 õn it must close itV  ¬ Úif openedFile`    .? 5()
? Áreturn resp,Ú s òdef _shortcmd(self ð
"""Internal: send a comma
 `nd get¼ \ Uonse.u bSame rz Ðvalue as _get‡ e().""",  { A._puˆ 
QB " > À Jlong¿ ,T_=NoneÊ (ÿ plus following textÞ  � â +B  Æª  —cmdstring¯ð V Á… 0()  Ð  ò p, excepa e @ed `Ö%s`òÂare unicode Ñ ös rather than bytes objectsw5êUst = ;© Y 6  r¤ Ã 0, [¨ 0.de™ c¢.encoding,I ferrorsñ B  1fora— in list]©ágetoverviewfmt] ŸV0 ñ format. Queriess`serverä&no+óalready done, else…5 qcached ‘	ƒ+trµr>7 � &fmp ò AttributeE 
ŸEpassùh  ¬5nes­ ªêö"LIST OVERVIEW.FMT"€€ ßNNTPPermanent„  À# Not supporz2by @?š  Æ fm2”_DEFAULT_t W_FMT[ W
ä 9 dparse_(_è Q0P8 = V}     PgroupV<«sC0# P ��s into "4 � last fir 6lagyh  [G[ `Info(*° �.split())yP Ñ7nesÒÁcapabilities“ Œ ô
"""Process a CAPABILITIES>.. ’3all–óRˆn-l �ÿ · y ð successful
    ð    - caps: a dictionary mapping ðability names to lists of tokens
E   ð(for example {'VERSION': ['2'], 'OVER p], LIST õACTIVE', 'HEADERS'] })S 5"""  ¦ U = {} ö!resp, lines = self._longcmdstring("CAPABILITIES"X  ª  8 2 in@ :U  Ê  ë 2, *à ! =# v.split(D  )  ” [. <] =rreturn ¥  ) 
d àdef newgroups(µ ö, date, *, file=None)‘ ö"""Process a NEWGROUPS command.  Arguments4 -S Ôaate or ±time object‹  Â R¦ :  ± �: server¾ °onse if suc† 5ful> -:  AnewsÚ .( Èòif not isinstance(ÿ   £ .    ) · õraise TypeError(j     A"theõ ð parameter must beê&, o E   "­ ñ '{:40}'".format« Ð.__class__.__6__) ¾ `_str, Ä  
 À = _unparse_   I ,»önntp_version < 2L vcmd = 'üˆ{0} {1}'�  c m =  Ï%2cmdz5 ¼ ¤!._× û(9)s)Î øÌ( Ó?NEWÑX !:  ^ Ö5'*'úôe¦message idðÿ6î6 {2òfùÄ¾
ò? ”Û - ,d�_pattern�� Õ – Ú§¦Ç j  ¯u € indicatƒRwhich” Qquery·  Ÿ-4`: File… ú ‡  Mï ·ðstore the result in
  “Returns:
 ñ  - resp: server ÷onse if successful. `list:  ñ of (group, last, fir ålag) (strings)= 5""" 1if ; ö_pattern is not None�  ¥ úcommand = 'LIST ACTIVE ' +B [ ?elsC '+  û ò, lines = self._longcmd¾ (~  Ü &leË rG.,8 Ï  (P !)
f ðdef _getdescriptions(i ,¾ ", S V_all) K  #ñ = re.compile('^(?P<q ¡>[^ \t]+)[ f(.*)$'¨ ñ# Try the more std (acc. to RFC2980) W¢NEWSGROUPSÇ¾  €$˜A œ‘ !ifç U ÷.startswith('215'ø  y Q# Now¼ ðdeprecated XGTITLE.  This eith¶åaises an error¼ G "orË@eds n T ñ	same output structure asA Û .  Æ ?'° ¯È €%{}^ €for raw_ 2 in£ Ø qmatch =  #„.search(7 .Â6p()i  6 1if 9 
L   `name, ¨" =$ .š Z(1, 2E  / É P ¶R  ' ÖW Ý     _  s[y :] =$ 'if
[ S }D [ ü Fµthing found*  � J &''¬  ¨§›�"""Get a° +  °‚a singleÙR.  Ifv…than one| µ dQes (' '#a )­YR /noG 0  @mptyÖBing.Ü  ï 2QlidesV  Bì‘code from 
,Î •ce it cant �only be ±° or '285' (ò xgtitle) anyway°  |i F q  ò¡eeded, use{ '—s' methodÂ RNOTE:únûcchecks�€wildcard3V…nor does}  Ò  5 A whe> £ ƒø actually exists.²- ¼.Ò? w, FalseúÏ O ° öW2 Õ Prangeme • Àgroup_patterñn, True)

    def group(self, name):   ö"""Process a GROUP command.  Argument/ -L R: the Q O xReturns1 Ðresp: server  °onse if sucx 5ful? ÷- count: number of articles$ qfirst:    2 &  la%   $  Ì 5"""O  ¸ 0 = CÂ._shortcmd('11' +)/ aif notî ÷.startswith('211'} �ðraise NNTPReplyError(o N swords =O Vplit( 1# =!= ñ 5= 0Œ �n = len(F 8  £ F > 1« Ž N - 5[1]F   3 23   ‹"= 7 27  ! ; 3;   ´ > 3>  $ B 4B  "  Í „ ‡4].lower*rœFa, int(í ) Â   � )*D4helC¿*, file=NonK7HELJI C a: File¹ ‘string or\ ñ object to storep•result in–o.!li%0istl„ "s *Qed byy ½!in=À to ‰  €  ÷  
I !Irlongcmdw  ('= '\½£_statparseÂÑ"""Internal: (  š ª @lineÝ õa STAT, NEXT, LAST,¢ ÐARTICLE, HEAD„EBODY	À  ‡Ú2Ù=‘art_num =¬&1]Á¥message_idõyÃ,  K &, 4 Ù` Î Ý , /£
^*K . M. «7c |ª  ~ .Œ Ä&  Ã  Å Ospec„
 ¥ — ÎL :( lL Ú   S id (û w Vified? rucurrentF  isçVected¶².¶à number
      ô  - message_id: the S id
  5""" $if" e_spec:  , ôreturn self._statcmd('STAT {0}'.format(s  A %))B OelseP 1')
8 �def next(t )> ò"""Process a NEXT command.  No arguments.  Rµ pas for ­ .ñ Ô  S „ ?las„ ?LAS„ = S „ 1_arq ú, line, file=NoneµInternal: p&õHEAD, BODY or ARTICLE7
"spa 3s =î@longîw Ù re0 …art_num,@%id>  ,`parse(, : Q  ï, ArticleInfo(M  ’ Aheadt  s?, *: 3  A7h@ Z 2: a¤ p numberIíP-—: °name string.  °ñ object to store— Ì aers inø n¹s�  )�: server  °onse if suc5ful? -Q : S _» 30 idZbst of † \s¦ € is not ƒ©  ¾  cmÿ'b­ @ '' 	­2cmdêObody+(Th Ì lƒ  ú4]( @ ¼*n96jÓ ÀReturns:
     á- resp: server ðonse if successful
*   ò- ArticleInfo: (a ô number, message id, list of $ elines)K 5""" $if: õ_spec is not None:%  € ócmd = 'ARTICLE {0}'.format({ A f ?elsC 
'_ ñreturn self._artcmd(cmd, file)
(  def slave(' )œ `"""Pro.ñ a SLAVE command.  RZ s. t)	¥ 2sho§ 'r '¥ Axhdr¤ Ò, hdr, str, *Ì =W¼ dn XHDR¼ ¤ (optionalùextension).  ArgumentÚ öhdr: the header type (e.g. 'subject'Ÿ-š E: an&Tnr, aHñor a range nr1-nr2Œ -� : FilenameN aing or ! op ‘ to store˜ •result inF  ,-ê:  ð(Ã cvalue)� sk Ì÷pat = re.compile('^([0-9]+) ?(.*)\n?+ § USnes =§ñ longcmdstring('¼f{0} {1 )þ| Írremove_¿(¢ bÒm = pat.match! Í    ‘Ðm.group(1, 2)< m z R 0 , É [{  A for3 1 in 1s]
>  « DxoveÔ¯start, endÖ?OVE×Õp !:   ãŽš  -‰ :   ?¢|Ðdicts contain0 ° —ú_field³ $ „jH{0}-…:±%),8 <  <± fm1 zP._get†viewfmt(% 	et_parse_* Àgs, fmt,  ,DZï ì!Ife ð  isn't supporteM&alN@back�XE .{“ B 7p- eithe% /tindicat×~ðto fetch
          ð    information about
  ù2- or a (start, end) tuple, indicating a range of article numbers;N @  ifD q is NonE ~ ûup to the newest message will beK ™retrieved ± \ ¡  U {current¢ · must be usJ ð- file: Filename stré !or p object¯ Qstoreµ •result in� …Returns: á- resp: server @onse§successful. `list:   [Ðdicts containŽ  Ö  Q D ufields
> QNOTE:™ "H@id" oõ
 isn't supported by XOVER= 5""" pcmd = '  'ª 
 ñn self._caps else 'E ': ãif isinstance(† ƒ_spec, (F Ý &))# ym$ =7 Z  &  ˜ à+= ' {0}-{1}'.Ü 'at¬ ½5'')7 IelifQ  ‰1not�
„  ^  =  y+ ' ' +8 R  “, lines =rlongcmd3Q(cmd,5‡ 5fmt- ö getoverviewfmt(% r=$”, _parse_* (q b, fmt)ò�def date(”O`"""ProZÕDATE command.Å ¨. z :€ Ctime_ M 0ü  shortcmd("˜ "ü 0if – - .·swith('111'Ý  ðraise NNTPReplyError(9 N aelem =JX.splifpif len(# j) != 2^ OData]  û 0 = A 5[1]ô X   X /14Y   O  b(	 ,¶ Q_post,ä7, f0 }00# RU@s a ¬¡ific excep$0if h  €!is§Wallow=¾3¼ 
C°f, (bytes,  \array=Rf = fè&Sp# We doü€use _put# ¦() because¤T# - w-  wa70ddipal CRLF
 € ( g€iterableRualready#g�Qright…aim  ñ spurious flush() after eacho h fwrittep3for 6n fÌ  '”ð line.endswith(_‹CRLF):
  pline =  ð.rstrip(b"\r\n") + _6 	4 "if, ÿ startswith(b'.'Z   ! +5 	I ðself.file.write(‚ )"  2b".• "  fflush(< qreturn C ±_getresp()
: �def post( g, data» ö"""Process a POST command.  ArgumentsD-@ ð: bytes object, iterable or à ñ containing the article�  �R¯ 	W  ² �: server  °onse if sucž eful"""B 	ñ Þ '½ 'à ú Sihaveû £message_id' Ø n IHAVE	N #:  o-id ofó 9G�Note that? VXfusesŸ ÿ	 an exception is raised.k Ã{0}'.format(C_id)\ƒR_clos„y6try  ì!
    ½<N ü    2del ckfinallk M Tsock.M 0  *2qui*« T QUITQ and C U R _et.  à/ " =á °_shortcmd('Ž 'î …+ B X «Slogin.óuser=None, password ×usenetrc=True(ÂÚauthenticatedË`ö ValueError("Already logged in."¥ pif not ‹ l ~ Y Ò  Ð"At least one§`W `X   U ÷` must be specified� 0# I‘  ¬ 4in/F was/ Q but L  ¥requested,‘ À# try to get8¡m from ~/.7 ( fPresumÍ! A has¹·ntry, NNRP sÊ…equired.P T ifZu ^rZ @Simpor× P     @credïRals =û © ¡ (    ¨ 7 = 3 .  ? acators}V.host 9   !ifè Ÿ    Íð  = auth[0]
      ôpassword = auth[2]
" õ except OSError:     7  á# Perform NNTPH õentication if needed.1   kot useW ereturn( ðresp = self._shortcmd('© AinfoA A ' +	 )7 0if : ú.startswith('381')Ä †  Ë  
  å QraiseÔ QReply(Z k  ' Oelse=  ¼  w ¼  	  € 
U  Y ¡  r 	Ì 2Ì  /   ³ ŸPermanent· ö# Capabilities might have changed after logi�ˆµcaps = Noner GgetcV (Ñ ð# Attempt to send mode reader!êit was request 7À# Only do so6 Äwe're not inM Y  al[ y: "ifE   er$ _á  JÔ and 'READER'N Ñ _ë 
Ú 6setJ è  ‚[RMODE v G @ b  z e iB Zdef _›  M ö?tryÏ  welcomei  )Y'Î ì
e
\ !# zñ 5xx, probably '¯±mplemented'»  Û     h ‚Temporar„K as rPif e.)Ionse-<480ù j @# Nehruthoriz«ˆbefore 'ø �  6    T.ÿIV= Tru -  Y
Z @if _yF_ssl@ Ë¾@tls(q  , context=xÓ e ð"""Process a STARTTLS command. Argums`  6 -S T: SSL  ¢ðuse for the encryp“`connecÓ¹  C   9""" ¦ RFC 4642,� °MUST NOT betc ƒ.oQ  a Ð @sessPÝv existsä � èjtls_onð    QValue� ("Z 5is U †nabled."ï 8 X ­ /ed_ 0canõ ÷  ‘ v]M <ions  Í“ ß�¡  1 	ú2382úÀ            û  self.file.close()
  " õsock = _encrypt_on( ¢, context,N OhostG  i " ='  S P.make o("rwb"6 Ýtls_on = True  û0# Capabilities may change after TLS starts up, so ask for them
î � # again.h ð ¾_caps = NonŠ " Ggetc� Q]else:[ ðraise NNTPError("´ ’failed to¾ ò.")


if _have_sslH Qclass< P_SSL(E 5):
c Ádef __init__³ ,  p, port=.  7 e_PORT,5 Puser=ï £, password Cssl_ú @ ¢readermode% ÿ  usenetrc=Falseu òtimeout=_GLOBAL_DEFAULT_TIMEOUT)û § ð
"""This works identically= ã .„, exceptÿ*	¹ ¡in default$@ and*' `ð ’` argumenJ 0SSLŠnections<9"""` &L  J
+ euper()¿ (»,Hr”&, iT. 9 �#, g)/pcreate_¡#et5+ 
z #  À ¨ 
: 4 	Ô :tryD  ˜ H 	_3ockQ-  
-ØZ Ûx	ž  `eturn ¦ +ð__all__.append("e H¤ñ# Test retrieval when run as a script.Ëò_name__ == '__main__'Å  im¢ hRparsex  5r = #.AˆP% Br(de_ …ion="""\Ý ánntplib built-äÁmo - displayâ0lat¹ ó
articles in a newsgroup"" … T.add_¡('-g', '--+ $',Cÿ='gmane.comp.python.general'§ahelp='K  Ãófetch messages from (¤4: % B)s)'¢ s¢ hserver£  ã .¨ /io—  ì E K Ã� !p�  æ� Ï-1, type=int!Š  @ x number† ±s / %s)' % âð NNTP_SSL_PORT))ñ6
    parser.add_argument('-n', '--nb-articles', default=10, type=int,E  I  ôhelp='number of I ³ to fetch (Q 4: % Q)s)')S ˜ S˜ ÷	ssl', action='store_true¥ aFalse,K š   ž óuse NNTP over SSL} dargs =‹  As()
R pport = ' .  bif not Assl:  l 0if % f == -1    „ U_PORT4    š a(host=i qserver,L =9 )FelseU l ?SSLp O_SSLt £ 0cap¢ ðs.getcapabilitie! × ðif 'STARTTLS' in 0 ¥ ”s.starttl0 ðresp, count, first, la ñ name = s.group(	 ý 0pri°G 0', . P, 'ha¯O 'y`, rang$b B'to'h ×ö def cut(s, lim)± °if len(s) >   í 	ñ[:lim - 4] + "..."(   ‚return s;|  Ò 0tr(¼  ç 2) -74nb_® B + 1ä  ¢Aviewn  .x (L Â  k 0forhBnum,Ó!in 9 ¶ ðauthor = decode_header(T õ['from']).split('<', 1)[0]Ð `subjec ?  "']½  – @line·  ï d : $ É "{:7} {:20 õ42} ({})".format(ƒ  V  ê  ³Ó b, 20),Ä¦ P, 42)Ï6nes’ @ öðs.quit()
# Module 'ntpath' -- common operaoðs on WinNT/Win95 *  xbs
"""C.  ‚ manipul: ,8 ðdowsNT/95 version.

Instead& imÚ¢ing this m‘ ¢directly,   Ð os and referQ - 
- `as os.ƒ .“ ð

# strings representa qvariousÁ Â-related bit[ ðpieces
# These are primarily h exª  ; internalž Athey+ @hard[ó
d.
# Should be set beforeÉ sK `resolv” ð	cyclic dependency.
curdi­e'.'
pa À.'
extsep =  
  \\& #th T;'
al& `/'
def4 €;C:\\bin Pvnull enul'

g
 5sys 4tat pgenericS 
9  ã ñ *

__all__ = ["normcase","isabs","join","r@driv   Iext"ÌP"basevc","dir
 ¬ð prefix","getsizM ðgetmtime",
           °"getatime", c õ "islink","exists","l
 öisdir","isfile",
  ð"ismount", "expanduse-  0varL ânormpath","abs
 	F 2curd #pa	 `sep","+ 
 0def  B !lt 	A "ex ó "devnull","real3 ðsupports_unicode_É @name� #re' 	Q @same&  Ù   Hopen 1staõ acommonh ð]

def _get_bothseps( !):[ Ñif isinstance s, bytes   VÑreturn b'\\/'6 Belse@    ð
# Normalize the case of a w  á ó	 and map slashes to back  .
# Other £ I ð0ations (such as optimizing '../' away) are not done
# (this is  1 byO  „ "). _  ž (í 6"""¼    ¸  2  ¶ !.
û ñMakes all characters lower1  Û   Ì ; inÝ 1"""H �s = os.fz1(s) 
Žs‹ñ s.replace(b'/',›1').‡ (K £8 7 7'\\6 R

# Rë1whe�´ D€absolute�ðTrivial in Posix, harder on Windows' 4For 8 itE  è ò t starts with a6 orð (current
# volume),! iMAfterj$ ð-letter-and-colon3 °UNC-resourcz !Xisabs_Test Ü
à# Paths beginn¼ù A\\?\ºtalways i@, buË Òñ# necessarily contain a drive.#  WÍ? 6if 	; ’ (è – '\'èATrueo 
c	\ _Z ?'\\Y  QsplitÜ a(s)[1]r Š¡len(s) > 0K@s[0]�
å0s)
ÒñJoin two (or more)ˆ!s.Cjoinö*é
  	¡  Y
e  §`sep = I0 > z F  ¢ , :+ 
UI  ¨  2 H n    G 'F 6try  ifE÷   7  ¾ p[:0] + j ð #23780: Ensure co"ðible data type evenÁpÒ ×| O qresult_¶#,   d 7 = Ððpath)
        foðr p in map(os.fspath,  Ws):
  °p_drive, p_ � = split 9(p), $if& 3and 0[0]j JsepsY  d `# Seco, ù ath is absoluteW  * [ u â or not resultž Z  4 " 3 = Ê [ ' Þ ç % zcontinu™ 'el— ó £ /!=Ÿ 8 ›.lower() 4  Û Á# Different s ñs => ignore the firstÑ� entirelyÔ $+ ( ) ,  b# Same±  dÄ :cas[ / ™à ÀA¶relative to	ú $ifœÊ  ·i   A[-1]_?in ´-  ç ;   +2 	l , 	i`## addB ðarator between UNC ¥ Dnon-Ùj Hif (j  .   ‚ 1Ò  M ; g< xP[-1:]œ[colondreturnO0 $ +  n 0 « * ôexcept (TypeError, Attribut ÇBytesWarning” pgenerict ò	._check_arg_types('join'å0, *% s¿°raise


# Sß! ac ¥a°ô specification (  letter folÉ’d by a
# / l‡ n  B a.
# Itô�lways tru»aÑQpec +†  8 š == p
def8"""¶ neBintoº /B¡sharepoint” '™ Aers.‚RØÑs a 2-tuple (Ýr_or_uncDñ); either part may be empty.
G ÑIf you assign oHä ;  Ð`2[1]_ &Ifm …jained ª,Ë c will , ± everythingO  upF ‘including` Üx.  e.g.�¢"c:/dir") é¢s ("c:", "  ¡yy ¥  ¦  ,d p
¥  = Phost ç¨  ¢ à ² 3butÃ¶ Ðfourth directü>ory separator character.
    e.g. splitdrive("//host/computer/dir") returns (  B", "$ 
P ñPaths cannot contain both a b ò letter and a UNC path.> 1"""F �p = os.fs 1(p) ñ if len(p) >= 2:  Ã öif isinstance(p, bytes)!  %  seT Ub'\\'9   4alt / ¶colon = b': OelseY X 'W V @normŸ ¢p.replace(— ,¸ý  ¬ Aif (+ €[0:2] == 1*2)L a2:3] ! G# isr
Æ ?# v  
²%or¯	Cò# \\machine\mountpoint\directory\etc\..p È   #  * * ^ 	g �index = Æ.find(sep, 2! P  * J= -1æ    rÊž p[:0], pc 2d  | :+ 1l #P ôù't have two slashes in a rowi P# (af°the initial6 
_ Ë 2ëƒ Ó !f : D  \	§ ,&  1[ %:]* "if”#[1–:
§ J 2E 2@  ŽP

# SŽ! a ?ðhead (everything up to ;‚last '/'õtail (the
# rest).  AgPtrail? 0'/'‘stripped,J ðinvariant
# join(v  , S )àp holds.
# The_ 0ultN  (   won't end°  ` �unless itj  ª ¢root.

defn#(pŸ8"""ñ CnameRªituple � Qwhereœ  _ URfinal…yÿ
Either part may be empty.t
Àseps = _get_Æ  �0d, µ=©p# set i¥-Á beyond p's ²@8i =yqwhile iÑpp[i-1] H inêsSai -= 1B  €¨  =Öi`¢i:]  # now'Uhas n•9  $ mo®— ‚es from X ÈS's alQ!esA  " ! =) !.rN ‘Qs) or % rÅ1d + ª 
ç "ù ”extensionm îAstar„!atÄ\ðdot in the last
# ñ,pathname component; the root is everything before that.
# I  ¢always tru 9 ð+ ext == p.

def splitext(p):
    p = os.fs� 1(p) óif isinstance(p, bytes2  6 àreturn generic; &._[ p, b'\\' / ".'X Belsew E D 'C 'B a ¯.__doc__ =�   b


# Rª  K tail (baseiÁ) part of a Á ! !2"""D s�Vfinal¥@  T 1"""@± l(p)[1]Œ �head (dir7 ‹  Š ŸdirectoryŽ  0]#Isù ó a symbolic link?
# This will XÒ ðfalse on systems whereAólstat doesn't exists isV (dBp"""Test= Dtherˆ i’ 	‹ .N� ò	for Windows prior to 6.0< ’6tryy"stõ´ ™ i óexcept (OSError, Value ‚Attribut Ê ÇFG , ð.S_ISLNK(st.st_mode)} BeÉ­ À Pdangl 	þ sø³also usefulPl]s¸ Õ Q) #. 0s T q PbrokeÆøs,5 ‰  …°mount pointƒòAny drive letterÑ°(eg c:\)
# !  share UNC  ‘\\server\ $ qvolume _  ed½ba fileÃð: folder
#
# No one method detects all three situations. Historically we'v¨ !xi #
#= .edÃ as and ¢  ¹ Às. The canon> Å approach toH  À Ï €s (query  Üðreparse tag) fails è  `most
#%Ÿmon case:–  ‡ €alternatwPwhich{as GetVF£PathName
#e !if	©i*SresulauSUBST.
†òfrom nt import _getØ  & 
ŒI! ƒë+ q = Noneß!is'm- s3 (a r,Ö  
 á×³0, o°9 2ed µ ): ¾ [P2athûaseps =ê ð_bothseps(path)
    pàath = abspath( ÷)
    root, rest = splitdrive" !if% A and	 Á[0] in seps:C G ¡eturn (notM a) or (W , o  M  l  A QTrue
V Ðif _getvolume° Mname0   €.rstrip(’ O) ==8  Ï 	) e >elsT ÐFalse


# Expö  e ðs beginning with '~'ä ¡'~user'.
# Ómeans $HOME;    Qthat - ðs home directory= pIf the k ‚ doesn'tr n ,o i'  G   i æ is unknown,
#G Ais r—ðed unchanged (leavÆ Àerror report ðto whatever
# function] bcalled‰  ¥ e"ed® Àas argument)Ê ñSee also module 'glob' for 9 sV qof *, ?UA[...S ý  æsG &(A„ bshouldV ðbe defined to do full *sh-style environ� �
# variab  ´  { r.)

defŒ dI[3"""õ~œ ÞÂ constructs.�!IfÊƒ ” ±nothing."""h Ú | = os.f�Âif isinstancw‚, bytes)’  ^Átilde = b'~'P 
¸  0if ˆ u p.starts²(' V ÅU Òi, n = 1, len ±while i < n X 1[i]d !innP_both€7 º bi += 15ðif 'USERPROFILE'F3os.±4  ”!1 [; ]™ #elê 'pOPATHT ì A&ry  q±€  d bDRIVE'~  ( °except KeyENE '´ 0 Û Qjoin(h ,	g Ë %])7!X dtencode( J � != 1: #ÙF˜  ir‰A ,'D[1:i— Rc " +" >i:];acontai<Vshell—€substituk÷ The follow”àrules apply:
#ª r   - no¿ Ð— OÇingle quotes, @'$$'Åøtranslated into '$'& /%%&   0f ' 1areô@seen¼`%var1% '2%K A${va>}w  ac" edÓÀ 3- $!    S  %! @ ðs can be made out of letters, digits and theô characters '_-'
#  ó (though is not verified in the ${varname} and % ø % cases)
# XXX With COMMAND.COM you can use any€ àin a variable [ ,F ðexcept '^|<>='.

def expandvars(path):
º A"""E e shellP As of¸ ²forms $var,Ä À 1%.
D wUnknown< ñare left unchanged."""-  | € = os.fs �  Ñif isinstance s, bytes¬  ° qif b'$'c0in B P9b'% Þ  2   Rretur. j   Õimport string 0varã2s ={ (  ¡.ascii_letû+7 ‘.digits +1, '' %')O PquoteL E'\'' qpercent % Bbrac- { r } adollarA $ óenviron = getattr(os, ' ‚b', Nonež Felse%?if VU?O/ED'C 'B'A'@3os.6†  re mA[:0] ‘index = 0    lez1len»fbwhile , <®6lenw1c = [" : "+1a ¤qf c == ‚:   # noÊòsion within single& s�  =    ˜ 	d V + 1:a $ ¼     6try²     « Z . "(có     8b+= c +ç â  „ 
ƒ ±®ValueErrorq K 	æ  o „ ‘  Î 5- 1$ 3eliIz:J;8or DN f± V  4
  2]‘H c  5   §  @ =—  0 
‡    ·+µ&  ë *= u   ½  � ÁÕ ÇŸ S ü G ô	 * }  Â ­       vú $[Q
M #   û   3if á ± s ( ð         value =ñ	 os.fsencode(os.environ[ !de �var)])
  _else:  5 „value = ] Ovar]1 ÿ except KeyErrorV R ópercent + var +  ] qres += ; ! ðelif c == dollar:  #L Õiable or '$$'.  Í ôif path[index + 1:
 '2]H 	4  8  c ? 9= 1 š j 
Obracz  4 ' =¥ >+2:o &  len = len( â?tryƒ³ d . !(rŽ D ÓVÕ…1 + N  Ñ9ath K  v ç  È -? $ š .¿ [¿! A   $ifÑ is NonŒ  (  y/ =r¬¢ K"+ ÿªÛÿ 	! Ÿ P ›0—ø+. ec›Ø ¡E ðwhile c and c inò_charsï “ >+= » v ‘   • mife.š Ï   d Ï
øËJ U9var# o @   ¾µ˜-)× \ Ú6 _ñreturn res


# Normalize a`ñ, e.g. A//B, A/./BSqA/foo/. ñ*ll become A\B.
# Previously, this function also truncateda ànames to 8+3 f~ ²t,
# but as? `moduleƒ called "ntÏ"_ sat's obq ð wrong!

def normpaðth(path):
    """Normalize  ñ, eliminating double slashes, etc.""";  . € = os.fs W  Ñif isinstance s, bytesv  z ±sep = b'\\'4   4alt / acurdir- . &pa  ðspecial_prefixes = (e q\\.\\',q q\\?\\')w Belse � ~ ” '“ '{ ’ ''. ‘ 4'\\�  � !if†Ì.startswith(A Dò # in the case o<  s 7   4se ã  # { ñ -> device names    ?\ qliteral�   ó do not do any n>òation, but retur˜  [ ðunchanged apart from© ‡ call toMž ’ O K  	 ! =— ’.replace(9R, sep9 ø ,& Â = splitdrivŽ!)
• ó# collapse initial backî# �'epƒi 0 +=| 3  ´ ¤ qlstrip(› ! @comp˜ % .š   9 Qi = 0& áwhile i < len(4 w !if… u[i] or  2== 3õ [ 5del$ b   Eelif   =W W
:  Ï„ > 0 and- _-1] !/  X m u-1:i+1]s     ii -= 1 Ž i‡ l ]C.end	{ E   l 
f 
Ü +   i­x % ! A# If¡ ¬ô is now empty, substitute –· . *™R ‚.append(©´éº  +QD.joiý‘

def _abnP_fall®_F"""R}PabsolŸ pversion!aTas a B P func¿ N J”À`nt._getfullþ  '`€t availañor raises OSError. See bpo-31047 forP Rmore.x B  X C <Xisabsã Â_ ( 2cwd^ ‚getcwdb(h  ö- , ¦ ‹"wdUK ³  & © C

# ‡5an † ! R.
tryü¬nt import k¡

except I  [1: #ö@runnžðon Windows - mock up someth ðsensible
    abspath =ô* _abspath_fallback

else:  # use native Windows method on “
    def H (M !):   Ð"""Return the% ðolute version of a 3 E."""5 6tryB  F rC @norm- �(_getfull Bnamev )A ñexcept (OSError, Value œ Z R %

‹ ñ from nt import ‚ 5inaƒ ô, readlink as _nt_ 
Ž I: … Þ #3 A ° is a no-op\ïsystems withoum  @ sup‡ .ò "re‡   =a Ä  œ‹ R_deepÛ ƒ  �# These e+ð codes indicate that we should stop¶ Pding í Qs andi K ª í ‰  ; âcurrently have³ - ÷
1: ERROR_INVALID_FUNCTIONQ 2$ çFILE_NOT_FOUND" 3" ŸDIRECTORY' 5' ÈACCESS_DENIEH 2�  f ðREADY (implies dr ‘– no mediao5# 3§ ÐSHARING_VIOLAÌ ð (probably an NTFS pag@HfileE $50£  � –SUPPORTED… $noùø for reparse pointsJ $67J ÆBAD_NET_NAMEI úremote server unavailab� 8E Ÿ—PARAMETER~9439· ú A_REPARSE_POINT* &R , JDATA+ Ö# 4TAG(* ²allowed_win¾ð= 1, 2, 3, 5, 21, 32, 50, 67, 87, °  2 %3
M ¶seen = set(L`while y3cash€ not in 1 G Ó  Z.add(1 O  % S   Aold_1=•    XÈ* ñ# Links may be relÃ°, so resolvÖ em against™/irG  Íown location "ifBsabs‰ 

¸ À# If it's so= øPotherZpn a symH,*­don't knowp  P 0# wŽN °actually goS "toì ß dÛ  ô J bjust rW ­1oldyŸ r  î  « (¬K-   ¯* …  ( _break B  I  ‘(join(dirïX !),µ )apý �'exžÀ       if exô.winerror in allowed_ ?:
   ]break Yraise Ðexcept ValueEc O ù# Stop on reparse points that are not symlinks^  ™ 
Š Áreturn path
+ Ðdef _getfinal ð name_nonstrict( )• ‚# These âcodes indicate‘ °we should s· Òresolving thex  –   c# and ’   vñ we currently have.© 2 ÷
1: ERROR_INVALID_FUNCTION$ 2$ çFILE_NOT_FOUND" 3" ŸDIRECTORY' 5' ÈACCESS_DENIEH 2�  f øREADY (implies drive with no media)„ § ÐSHARING_VIOLAÌ ð (probably an NTFS pagDHfileE $50£  � ySUPPORT£ $67" ÆBAD_NET_NAME¦ úremote server unavailabg 8E w—PARAMETERÒ %12X'  l " %92± SCANT_Y ©
' Y' €RESOLVE_(  S ¿ @unfo‘ ² !¬ñ = 1, 2, 3, 5, 21, 32, 50, 67, 87, 123, 1920 1%|BNon-ñ algorithm is to find as much ofì÷target directoryá !asæ!anAjoin2 Frestí•tail = ''9 BwhilD‘ › :try    ¹. =ÜÒT  +   ‡ Œ "  , € A) if	 0 ely 7 .  ¿!OS¼ .ex‹ Vif exE ¯I3 | ò    Q OS cƒ k ‚ ž!is�  fully, so†}attemptN  Üa¡ bà ourselves. IfB �succeed, =(  ;Q óê k  Dnew_»@reads Q_deep–Û0   5if 7 !!=ä … )   é6 í É 
õj #fÅ4to Ë ý
(), let's keep traversingf  ¬ >pasÑ  , §s = spli¥B ñ# TODO (bpo-38186): Request¦Preal RM Afrom ²Àtory
         ô0# entry using FindFirstFileW. For now, we will return the path
G  �# as best2 „have it
  !if= í and not name:&  . o  k } + tail'   € = join(I ,' A) if	 Q elseb : U  9 
 €def realg ( )Ž   p = norm  6    Ñif isinstance w, bytesB  ( õprefix = b'\\\\?\\'D    Nunc_$ <UNC) Onew_-  
N ùcwd = os.getcwdb()m ö# bpo-38081: Special case for	jb'nul'; !if
 - î 2) = ûos.fsencode(devnull)	 í €f.\\NULÀ  ¯~ / ;# :, y  k 98#7+
÷  � *ª )6had3 ›Â.startswith(4¼¸'t 4 |RisabsÌ
€  S XAcwd,³R ?try0 r_getfinM �\ 	�õinitial_winerror = 0! ¡except OSE Zas exj ?  4ex.M I  AÅ • «_nonstrictŸ 3# TÛëmed by A qalways y y Ü% -„  # f ²p off that ™ò unless it was already provided ob@origKO  Ñ . ×$ ” 	
E#Ü1UNCØ"s,Ó§ê±actually beÖ  Sy  \‚# HandleÙ   üFwell¡  ( îŸÂ sÀ  s
ë+© X[len(? ]” > ‚ R  Y A †*):= s# EnsurÑ  ãBnon-, !ed Á resolves to2?sam
  † .ifG(› F � 
£ 5     1 = + 
î + ? 0# I}àe path does noót exist and originally did no ‹, then
  p# strip ý  prefix anyway.+ ôif ex.winerror == initial_ :4  n €path = s ! qreturn  ñ

# Win9x familyÈ óearlier have no Unicode filename support.
	 2s_u# _# ðs = (hasattr(sys, "getwindowsversion")n —  °  Msys.: ð()[3] >= 2)

def relÏ ( Ò, start=None)B"""Rõ a+ cative † Q of a1"""�  E q = os.f9V ) Ñif isinstance s, bytesi  À ±sep = b'\\'4   acurdir . &pa  Belse´  7 K J '2  ( I Q'..'
v "if@ is 
U  2 = ” .  ® ú ) Àraise ValueEwA("no)Â specified")@ r	4 56tryU  0_ab!"ab`@norm{ ( )6 Ø /th,  1 + ; c_driveQ_restý1lit `  Q c  ,Ü 6   j 
5 0if ´ CcaseT B F) != 7  ÿ  Ö X +  ©³on mount %rÅ   Q" % (Ý F   < 
ø t š ' l§Ò= [x for x in"ò õ.split(sep) if x]h ` <    c; ð# Work out how muchn"thK B  ö ’shared by�  ‹Ui = 0’  ¿ `e1, e2Ä 3zip„ ¥ Å  “ ´*e1«+e2-  1 Ubreaku   bi += 1ò  @rel_j B = [ƒ‡] * (len’ a)-i) +Ñ - 6[i:]• t” (³¨ q   ¾djoin(*‚ Ð²except (Typ²,¾¤, Attribut B¹óWarning, Deprecation pgeneric²ó._check_arg_types('~'}º“ ²  H
j… @long °common sub-^  €sequence   ðs given as input.
# TH0unc³  H ��-insensiâ ”¨'separator p', i.e.ë�the
# onµAfferw ¢between twósa  ¸ ðuse of '\' versuð0s '/' as separator,
# they are deemed to be equal.
#
# However,* ñ	 returned path will have Æstandard '\'d � (even if$ P
# gi  ? Ps had Á alternative¤ ¡ [) andg dcase oO RfirstŽ Z !inS ÷sequence. Additionally, any trailing¥ ñis
# stripped fromF 	ï Ð.

def commonÁ ( Ás):
    """GÛ $a |  ¦  # s names,=sZ slongestN P sub-+ Q."""
P Rif noÚ sb  f ÷raise ValueError('� õ) arg is an emptyŠ "')U  c ðs = tuple(map(os.fs ,E4s))~ @isinÓ"ceè ”[0], byteò  � ±sep = b'\\'8   4alt / acurdir- . FelseÚ 3 I 'H 2'.'Õ 6tryG  drivesplitè [
  ²(p.replace(¡ ,ÿò).lower()) for p in]Ï C _#R !p. B(sep4 "d,7 f  "s]™  	�   ðisabs, = set(p[:1] = p� M  ‘ ; gexceptþ÷   ñ"Can't mix absoluteP2rellÕ "")ðFNone¸ ñ# Check that all ß ò  letters or UNC+Ñ match. The c5 Åis made onlyHÀ# now otherwÅ`type eÅsû 1mix”PtringÄdna would'beN ucaught. pif len(WdQ Lo) != 18€Paths do>ß2ame"N u< Ô y 4vÔ¿! =K[× ! ![cÖ c£ Aif cÒc× b|�ºA s‘< b sb < ‡1 = min( Ë  s2 /ax  _1i, ¿ Ãenumerate(s1? L  Ó Š!= s2[i]¨  ù =86[:iž      Ubreak@
f   D 7'1):‚prefix =ð  ++ 2½ S  f ) 8 0 b.join(m %ÀB(Typ¾¢, Attribut pgeneric¢!._VP_arg_5sõ@', *% sc  à ð


try:
    # The gñXenericpath.isdir implementation uses os.stat and checks the mode
    # attribute to tell whether or not0  f ò is a directory.
@ @This òoverkill on Windows - just pasw G Ãto GetFileAt{ sL ¦ u š @from "rev   ntò Rort _ aˆ ódir
except ImportError:a ]Use g9 9 , sed abovf  · ð
"""Convert a NT Ã 1nam.¡a file URL`Ñvice versa.

ðmodule only exists to provide OS-specific c‘ñfor urllib.requests, thus do‹3use�0ly.›  
# Testingƒódone through test_N P

def[ 2¿ R(url):"""Š  î sBg’a relativé  of‰  'ú r' schemJ3to asystem*;· Àrecommended ä ‚ al¢C."""œ2e.gÞó#   ///C|/foo/bar/spam.foo* 3and
 ) :) by Ÿ  U ¹C:\foo\bar\R iý€ string,( ƒDpars< Ñ`itself¹ Ðs ":" even ins½ Purl =C ñ.replace(':', '|')´ !if0'|'8 2url…LPNo drj2er,Bcƒbslashe/ 3 iÖæ[:4] == '////'Q  " #ˆ `someth+@likeb`/host/¡/on/remote ª  >   $# ~ tëPto \\9 \9 B\on\9  9 @(not@halvy 3of Â 1 atHcstart U Q & x   NE[2:]] £componentskƒsplit('/d : ±# make sureq%toÇ equotedŠ &:-t `return¿1.un1 ¶('\\'.join(€ );   
‹ ï"le2  ) != 2 or / q[0][-1]œ #in|æ.ascii_lettersÉeÄp = 'BadlP: ' +¦ @raisRî(0 › P=t r.upper(   Œ L  K[1].P ˜# =›Q+ ':'x  Ë 2  É  G ¶ !ifv   ˜L   + TÊ p S ¤ ð# Issue #11474 - handP Ásuch as |c/|— !ifó�.endswith�)¡7url #/'— !+=‘ F 
 ¨ > 
  ùc2url(p; < '   
Rn 	V<Àr general usóe."""
    # e.g. ó  C:\foo\bar\spam.foo sbecomes ù  ///C:/foo/bar/- óimport urllib.parse7 ô-First, clean up some special forms. We are going to sacrificD ðthe additional in8 a q anywayl ñif p[:4] == '\\\\?\\':  ÷ •p = p[4:] 1 �.upper()9 9UNC7 ; k'\\' +B !elD §1:2] != ':p  9 ñ
raise OSError('Bad path: K )Š `if not< V in p± “# No driv0ðfier, just convert slashes and quote +2nam: ƒ ¡    £ #Ž 1 is– thÀlike \\host\¬ ¡\on\remote ³  X #… @this¶@////7 /7 B/on/7  7 Ð(notice doublr &ofÈ tÁ �start of  N * w    ÊáF[  componentsêp.split(·> ireturn§.8¦('/'.join(F )8   Q q:', max_ "=2$ Rif le< )	E2 or †[0]) > 1Úe< = Ë 
8/ !)
 =Ã  © 4[0]Îš     =[1] c � 0///Sd +“t @for ;     P Ï !if  ¥0ath7  1+ 'Y x P ª œ Œ ð
# Copyright 2007 Google, Inc. All R ðs Reserved.
# LicensedŒð4PSF under a Contributor Agreement.

"""Abstract Base Classes (ABCs)�ð numbers, accord¯ð to PEP 3141.

TODO: Fill out more detailed docum «!onÐ‘operators‘£
from abc C£ABCMeta, aœ ñmethod

__all__ = ["N— °", "Complex AReal o  ÐIntegral"]

cß  ; Q(meta =q )¿ $llø ‘ inherit ¦ é5 .�bIf you“@wantzñ check if an arg   xdaV ‘, without]0carVówhat kind, use isinstance(x,´ )´Çq__slots( 8`ncretel Àeric types m6aprovid$°ir own hashyl8•  __ [ €None


#Žàtes on Decimal -     ]   aÈmÈsüqfied by ¸ ð , but it shouldK  ñbe registered as a 2 @beca+dŽ As doIRintereÀe with
## biòbnary floats (i.e.  Decimal('3.14') + 2.71828 is undefined).  But,
## abstract reals are expected to interoperate e ðR1 + R2 should beG e4 àwork if R1 and+  are both Re ó).

class Complex(Number):
    """  ° bs the … 0ion 1at f !on ’builtin cP q type.
N  In© �rt, thoseá À: a conversiA o8 ñ, .real, .imag, +, -,F ñ*, /, abs(), .conjugate, ==,å $!=p @f itnògiven heterogeneous arguments5 ñdoesn't have specialo ð knowledge aboutä  m,X tÀfall back to  E  À as describe«Alow. 2""" â__slots__ = () @amethod1 cdef __as__(self±µŒReturn a� ô instance. Called forsH .� g Oboold @True[ ~ Y != 0T  7 Q  ˜   r™ 4 å  prS!tyß ó  S � P ±"""Retrieve} $ Ð ñ onent of this nÕ 8 T Â2sub “ #       raise NotI% 7edErrorÀ  ÉÀ  $ iM ßÅ [j3addU, oth 1"""Í+ 5p rq „ 0 + y q 23negá 
G-b 6?posb +b ”3subN ‘-‘ }1+ -GÁW rX 1 . -xX . 	X ËD__muVÃ *Ã  ‰Tq Ü *Ü q À    @abstracñtmethod
    def __truediv__(self, other):"  & 0""" " / õ: Should promote to float when necessary."""D ñraise NotImplementedError
# Ž@abstrac� rž ± 0 / ¦ u 25powŽexponent$** ?; sPor coó xCª Jbase¦   ? **73abs
i ñ!Returns the Real distance from 0. Called for absj)"1’conjugateS 	¶†(x+y*i).$ 3) rª 1(x- 02#eq="==>p C5£.register(F‘)


classg(' �c"""To  ," B add—�operatio¦ ­€ork on r¯‚numbers.Ž InÐõrt, those are: a conversionóñ, trunc(), divmod,Ïó%, <, <=, >, and >=[ @also>Pvides…Qaults A†derived ² .V  ;	 â__slots__ = ()´ Bœ )Ö2Any%ccan beá 0tedà ƒa nativeÜcobjectÆ  @ Ñb €Ó1’/nc³ o é@): T|Aatesáµ §n Integral« ža Æ i such that4±  * i>0 iffS 1>0;q ð    º`i) <= 
 † 
! ß%ny… Ñ j satisfying�first twon!di‘5e  [ Bi) >e ð	j) [i.e. i has "maximal"' A amoW Bose]$ E / "*aŸ†wards 0"#  K +   ›&_floor¦3Finv0gre¡t!<=[)3Oceil‚ ðleast Integral >Ã= self."""
  ñraise NotImplementedError
# ñ @abstractmethod àdef __round__(R ñ, ndigits=None):'  a @"""R( sy 4 to) ð decimal places, defaulting& "0.  D %If5 àis omitted or l õ, returns an Integral, otherwiseŠ ' s Real. — õhalf toward even.1 %Vdivmoƒ 
" 2  ¡ The pair  2 //½ ,2% )ðSometimes this can be compuÔfaster than t\ %ofØ ¯operationsì PŽ �÷ rÖ 
Ø p 2"""" ( Ø /):ø †¦  ‡Ù %Ž)ø @floo	 W  _ Y 7 Q() ofg / ¦4\ ?div“ 	p  ”  œ “  / “ 3% i  ÷„•rq à  âq 2/ltm	à <×P åA< onšs
ðines a total ordering, except perhaps f/aN–3/leµ =¶ %Ä# Concrete i`} í Co $x d e™_ Ø3lex� 
P 9A) ==’lex(float I, 0)± ß; * Þ pr#!tyÂ … BrealM 
Ùð eal numbers aren0ir . ‰ Zonent�| +û@m Oimagm €have no , _inaryp 	Àn 0

    defó conjugate(self):
  D"""C õ
 is a no-op for Reals.""". €return +E  

  ð.register(float)


class Rational(& q ñ""".numerator and .denomin ò	should be in lowest term„ … ñ __slots__ = ()
 ’@property áabstractmethod Edef x ÿ
raise NotImplementedError^ Ç ` Ä# Concrete i� ;1 of‚ 's¾±version to i.Ù !__ ,__y 1"""  0 = ¶€/ » ò  @It's�  ortant tha i‹ `use th­Öteger's "true.Adiviµ `ratherF õn casting one sideÒ € before 6 Adingá  Œ  so: 0t rs5hugw “ öt without overflowing.Ò Ç Í`IntegrÍ „ 6nalÑ @ add?7con¬1intè (qbit-strý p?ionÛÍ___intò2intð	ð ã  R ?dexT àCalled wheneve¹` index0ð needed, such asºyslicing� 8� —@Þ 3powŠ ó	, exponent, modulus=None�  0"""Ê5 **, $ %- à, but maybe fa©PAccepÙe/ P argu‘ if you wÿ�o suppor, ™%3-. ó±of pow(). Rtaa TypeO R Ì E < 0G yz Tsn't X0. O= wise, just—¨ ~F 2� �described– Co^x87= ©TlshifŠ0, o« › "<< 	!xt ru ˆ 1 <<âu 3é />>é 9ru é />>é  Àise NotImpleñmentedError

    @abstractmethod ñ
def __and__(self, other):  6 0""" " & 5""" ïraise NotImplep rq „ 0 & y q 2?xorá ^á 9q á ^á 7à |à 9p ß |ß 7cinvertÃ
�~%Ä# Concrete i·±ations of R �al and Re	 5 6!s.ÿ8Ofloa–  RR) ==  2int )Õ]eturn# ´…propertyv ’numeratorK 	©õIntegers are their own 3 /s.y  +An denominp whave a .  M1o 11

§ ðral.register(int)

� ñopcode module - potentially shared between dis§nm2 €s which
5°ate on byteT ñs (e.g. peephole optimizers).| ó
__all__ = ["cmp_op", "hasconst Cname Djrel Qabs",¦ 6!  8 Dloca" dcompar; 1fre $opP [opmapC ÐHAVE_ARGUMENTj €EXTENDED   ñ(hasnargs"]

# It's a chicken-and-egg I'm afraid:
# We'rü1ortNbfore _y€'s made.( �ith excepñ unheeded
# (stack_effect is not n Ä)
# Both ourˆ ¦2egg˜pallayedc  *ò--Larry Hastings, 2013/11/23

tryâDfrom¥  ¹Hort ‡ zÀ˜.append('! 2')
Í q Import\ bpass

ñÀ = ('<', '<= = ! > d>=')

 +]  Æ   5abs     Ø ± # unused

%b = {}
: ! ð'<%r>' % (op,) for op ðin range(256)]

def def_op(name, op):
    op p[op] =   @map[   "opB   C  Y B 0has/ ².append(op)D OjrelD  / D ?absD 9absD ð# Instruction opcodes for compiled  ô
# Blank lines correspond to available@ ß  – Ð'POP_TOP', 1)z »ROT_TWO', 2 †HREE', 3 $DUA 4 E 5  Z ‚FOUR', 6eq N‚ 9( ÐUNARY_POSITIVr ,10 DNEGA ¼ : 0NOTÓ 2d  QINVER 5 !BIp ð MATRIX_MULTIPLYB 6w �INPLACE_&  7L @POWEç 1Ö g ` .20: QMODUL}~; 0ADD–€ pSUBTRACÚ 2‰  SCŽ 2Œ °FLOOR_DIVIDi2ò " GTRUE! 7D 8# E 9ø `RERAIS} 49 ñ WITH_EXCEPT_STAµ4MqGET_AITe5 0NEX5ÐBEFORE_ASYNC_] H', 5!3END  FO,5Hü€5F �5C T5.  õ5ã  ST² 2SUB½6æ vDELETE_ ê ÎPLSHIF6HR K ANd6þ X6ý   ö  64  ·6ï  ´YIELD_FROM_" (�PRINT_EXPž7÷LOAD_BUILD_CLASS', 7W    t €AWAITABL7T ÑASSERTION_ERRæ 7¼i7 j7  k77 l7! ‡ ±LIST_TO_TUPÇ 8ã °RETURN_VALUâ 8â RIMPOR\G', 8Ù ÀSETUP_ANNOTAþ  Q8Ü QT Ù  OPBLOCKR è  Í  Ð9)

HAVE_ARGU©MENT = 90  ò2# Opcodes from here have an argument:

name_op('STORE_NAME', 90) N °# Index in + V list5 VDELET6 16 �# ""
defY áUNPACK_SEQUENC^ 2( ñ# Number of tuple items
jrel9 €FOR_ITER� ,3)P  EX &4)� Â 1ATT2 5d  Ä Â 6 66 Â  ñ Š Z `GLOBALv 7& 
% & 8& % ñLOAD_CONST', 100" 7   ¤ Rconstg1has €.append(1 ï L °$10{K  À J €  BUILD_TUPLˆ!10‰€ Œ
8 #LI¸ 3¸ 8  Ã
7 "SEî 46  û?set6 1MAP$È	6 Ëdict entriesË$10Ì’COMPARE_Oo Û “ñComparison operator
“  e•7„dIMPORTG"10‚  Ÿ_5 AFROMó 9) + ÊÀJUMP_FORWARD7 1N\ñbytes to skip
jabsp : ÒIF_FALSE_OR_Pý Ð11) # Target < @ off B�beginning± ZQ 9TRUP  _ 
{ qABSOLUTƒ1L * IPOP_© ä D*  ‚ ) 7* !¢#11#jÆ#IS&17†uCONTAIN >8)
ÐNOT_EXC_MATCH— 621)ÁÑSETUP_FINALLY  0° # DistanceºtŽ…address
þ"FA‘2îñLocal variable ne ¹l ·&24Í àN < M 5M N d? # M &6)è ÐRAISE_VARARGS%3çUraiseÕÇs (1, 2, or 7ÑCALL_FUNCTIONI 3u# #argsYJMAKE( –g # Fla( K1SLIÓ$13È€ÑH³aCLOSURû035)—6freM  	0 QDEREF¯ 6. Àppend(136)
dñef_op('STORE_DEREF', 137)
hasfree.append( d/ XDELET0 80  D8)

1 ðCALL_FUNCTION_KWe ð41)  # #args + #kw
 3 !EX3 23 ²Flags

jrel¾ ‘ETUP_WITH% 3y ±LIST_APPEND %5)a bSET_AD 6 5MAP 7J •OAD_CLASS'4÷    c ÁEXTENDED_ARG 84)
 m = 144Ê UASYNCÐ '54† ÀFORMAT_VALUER 5Ñ ñBUILD_CONST_KEY_MAP# Ý # QSTRIN‘ 5â AnameHLã QMETHO&60Á 1” d×  p &627  dQUPDAT­ &63 ’DICT_MERG 4 5 5k "l L#, ¯ #,  óZ, jabs_op
"""
Operator Interface

This module exports a set of functions corresponding to the intrinsic
oZ s6 óPython.  For example, o# ó
.add(x, y) is equivalent
U ôexpression x+y.  The ‰ á ð,s are those used for special
methods; variants without lead½ �and trail A'__'O àalso provided
R Ãconvenience.(!isø Rpure æ   iÞ Pmenta) ÿ 3theQ.vñ
__all__ = ['abs', 'add 1nd_ �ttrgetter cconcat
 Atain3 ¶countOf',
  €'delitem-  eq €floordiv "ge t# gV i~ KiandO i| iJ bilshif> `matmulZ 1imoÇ i 	˜ Qindex$  	  · A 'in– RinverK oð Aipow+ re 
J s#Ris_no6 1sub/ 6tem5Sitrueø "ixY +leß ¡length_hinJ Õ l Ú FBcall“é 	— ó 1 'nc0neg’ 1not¬ !or !po¹Þ Ý %seœÖ Ç PtruthX  Ï ð]

from builtinsyòort abs as _abs


# Comparison ïi¿* ##¦¡ lt(a, b):P"Samet qa < b." qreturn  5 e5 =6  2= b7 /eq7 =7    7 nn !7    7 g7 Àme as a >= bñ."
    return a >= b

def gt(a, b):! €"Same as# - b6  5 ÿ# Logical Operations * &#‡ lnot_(a† Znot a†  4 Vtruth5 RÝ úTrue if a is true, False otherwiseQ 0 e& , ` ?is_.is  8 /noW0is Ã \ À

# Mathematf@/Bitµ n&a6abs+æ 
_* Ë ?add++ T?and:&7 &7 �floordivr .//<   ª _indexâ  1.__ J__()é a E vC ~‚ò ~a
invert = inv: _lshifô.<<º   ; /mod%7 %-?mul(*6 *6 /at9 @9 @9 >neg-"-aÒ /orÿ|c |c /po¢ +c +c ?powÿ  r¨	.>>Ÿ   Ö ?subs -7 -Ö  ‚Ô: /: ?xorp ^6 ^6 ¯# Sequence.&È:_concaÛó+ b, for a and b s‚ sm!ifðahasattÑ Ó'__getitem__'ò �òmsg = "'%s' object can't be „ ñenated" % type(a).__name__½ E ñraise TypeError(msg) û¦�containse0b i(ð(note reversed oò;ndsJ- &ycountOfU šñthe number of times b occurso 3C A = 0¹  ]i £ æ –if i == b   9 ð+= 1
    return counðt

def delitem(a, b):
    "Same as q a[b]." 1del 9 ?get9 5 greturn8 yindexOfq R% ¡the first % £ of b in a� €for i, j ³enumerate(a·  » ’if j == bÊ     … iÇ Felse ñraise ValueError('sequence.… �(x): x no•   "')s3, cŠ A C = cÀ  < ôlength_hint(obj, default=0G "x°an estimate -`number  ‹sAobj.ç ð This is useful <ðpresizing containers when build ñfrom an iterable.
M 0If p ñobject supports len(), ñresult will be exact. Otherwise, it mayN õ over- or under-Ö  by{ ûarbitrary amount. The ` !anJ Âinteger >= 0÷ "5"if´£sinstance(_S, intb Ómsg = ("'%s' á 0canñ be, €erpreted s 1" %‚  C  5typf µ).__name__)' k3TypjBmsg)_7try’ \2obj? uexcept < . OpassE   V1 = “  F 7.__p!__• V ‚Attribut— [ r‰ 8e  `val = k  Áª O  50if D ÿis NotImplemented„ 5  �iÚ?valÖ'÷ P must 9,% úÎ?valÊœ  Ñ 6< 0Ã aŠ £() should  Ã'— I ,—- –ñval

# Generalized Lookup O¥?s * ò#

class attrgetterÇ UŠP call1Áthat fetchesQgivenH ZA(s) [²its operand°‘After f =- u  (';'Z l S f(r)*@s r.  @  Ãµ @ y, 'dateH gH (I @, r.) )R h’  .�1',   Y.last] h] Êa 8  g ¸  8 l Y�__slots__‹ '_Ë sh _ý  m ú ¯á__init__(self,41, *0 Ôý Â @ à    if not isiûnstance(attr, str):
  ðraise TypeError('- ðibute name must be a@ Ying')C `self._4 Bs = j 
"  F    $ ›.split('.F Ïdef func(obj¤  2for� !in sÇ  Ö �obj = getk  K ,. 
�  ) ¯return objÌ  acall =�  Jelset ø 0 + { s8  m `getter‘tuple(map' ', J )« Æ V N  õ  ) / 0 in € 
[ u ë ´  r  __ 0__($ ,%’t   .( r 
= Crepr= 8 á'%s.%s(%s)' % b ñ.__class__.__module__,Q  > € 9 @quali; ‘', '.join‰ ® ƒ)Î OduceÐ 
ˆ 	I !

× R item�A1"""Ý R„ a n@ablejñect that fetches the givenH ñ(s) from its operand.N ‘After f =( p A(2),A  b b f(r) ¿hs r[2]9 g9 h, 5, 3? g? (@ `, r[5] "3]]Û �__slots__ '_sw1'`Cinit^,» 1, *0 <aif not ù0  k  	 ,‹ 7 ÑY z[= ]L< ^ = D  é (	 B,) +½ 	^ š Ýaobj[i]ØiÓ W sé ­ n  f Ñ¢Í-#)m/reÍ I Í`method/erÏ 2 ÍH   o×Ê%  ; @er(''’
Ñ.  ð().
    After g ð= methodcaller('name', 'dat Àfoo=1), the # ð g(r) returns
    r.3 (1 . 1""" ð __slots__ = ('_0  c Q_args	 !kw !)
/ ðdef __init__(self, 3 `, /, *) B, **3 !):2  ˆ  ) .\ ! =0  ñif not isinstanceU , W, strF  J òraise TypeError('"U   must be a9 Uing')h ‚  ¡ 0 =   ³ 2 = 	 í  [í 7obj’ lâ getattr(obj, j  2)(*  p   b 	PCreprc ^  7 @ = [ %)]¼  " À.extend(map(* ‚   )  + ð'%s=%r' % (k, v) for 
 3 inÀ ¥ w.items(G ò ¡'%s.%s(%s)F Ù õ_class__.__module__,«  ½ 9  87  ™`.join(× )LNduceNjr ß ¡ š Û ! Ì ', zC,) +  x Ü JelseL õfrom functools import partial8 v  m ~ Ž  Aéÿ


# In-place Operations * %0#

ì“iadd(a, b˜ò"Same as a += b.E Ø Fa? n? &?   ? oconcat� ,¼óa and b sequences˜ ô1has �a, '__get×3__'Ô  ‡ñmsg = "'%s' object can'O… ñenated" % type(a)._Ò!__¹  E �2msg� �floordivã (//& n f_lshif'(<<D  D /moª%@   ? /ulÄ *?   ? ?atmB @B   B /or€ |>   > ?pow? *³ Poa **=b@ r‚	(>>ƒ  D ðsub(a, b):
    "Sóame as a -= b."
     ñreturn a

def itruediv(a, b):" %"SC /C   ! C ?xor? ^?   ? B
tryt ñfrom _operator import *
except I RError0 ’pass
else ? ð__doc__

# All of these "__func__ = 	 ô" assignments have to happen afte‘ king
# m Àto make surea €y're setD ‘the righth ‘tion
__ltz  lt e ae
__eq beq
__n n g g < g< "no   a
__abs@ 0abs "dd  dd n ánd_
__floordiv"  �
__index 
  % 2inv "eru Pinver† Rlshif  R
__moo  mo} 1mulT 0mul %at  î g" �neg
__or  or« "poÖ  poÖ 1pow vpow
__r{  a
__sub" csub
__Þ  C
__xb ²xor
__concaÁ   Btain{ 1con ¡
__delitemP  e
__get   Š  s  Ca™!iaš#ia› 	    „ b i   ¥    u    ‚iƒis 	   {6 m   iim 	   d4    qirQ' tiu 	 ð
"""A powerful, extensible, and easy-to-use op7ð2 parser.

By Greg Ward <gward@python.net>

Originally distributedð Optik.

For supc , d  § h kr ðrs@lists.sourceforge[ � mailing  �
(http:// +   Winfo/\ ð).

Simple usage exa  :
[1optî  · 1onP&  Hr =   ()A  .e u ð
on("-f", "--file", dest=" `name",6  #
 àhelp="write re* ÏñFILE", metavar=" x qx _quieth  acÞÆ="store_fals¤ Sverbo ¯fault=True± 
ðdon't print status meshsÀ �stdout")F(!¤s, args) =dD_  ()ª±

__versionÖp"1.5.3" "alÛ"['‹'ž '_g  ßSUPPRESS_HELP [USAGE kValues ÐOptionContainfer',
  Ï'OptionGroup MPars5 ½HelpFormatt �Indented$ 	OTitl" 1Optz OErro³  �Conflict" _Value 2Bad ôcheck_choice']

__copyright__ = """
C ñ (c) 2001-2006 Gregory P. Ward.  All < ¾s reserved.? 2? ðPython Software FoundaºJ °
Redistribu' ñ and use in source ñbinary forms, with or ±out
modifich  , x ðpermitted provided that the following condiv s5 º
met:

  * ” Ds of� ñcode must retainR eabove e¸ðnotice, this listE q n“ Ž ¿disclaimer.† 7in † produce‰ B †1theÑ �documentf •ö/or other materialsn£ nÝØ 1Nei7   @name  ¡author norÍ   {1its‚ 2con( ors may be+Àd to endorseppromoteŒ ñducts derived fromI ”s¤ « €out specG@ pri]rA!n KñDssion.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" ñ2ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO,u 7 ñ OF MERCHANTABILITYp @FITNl ð
FOR A
PARTICULAR PURPOSE × ñDISCLAIMED. IN NO EVENT SHALLq ©AUTHOR OR
Ú ¡BE LIABLE ` �NY DIRECTÅ 
 ðCIDENTAL, SPECIAL,
EXEMPLARY,ÿCONSEQUENTIAL DAMAGES (	Ð TO,
PROCUREMª ñOF SUBSTITUTE GOOD_ÀSERVICES; LOq°F USE, DATAy  C PFITS;… ABUSI+ñINTERRUPTION) HOWEVER CAUSEDT0ON Ç THEORY OF
s�, WHETHERG*APSTRICÆš | W TORTä °
NEGLIGENCEŽ OF ÐWISE) ARISINGS  w pWAY OUTñ €2USE 4IS
¨,À€ IF ADVI· !OFÇSPOSSI3#CHo .
%ô 
import sys, os ñtextwrap

def _repr(self):^ñreturn "<%s at 0x%x: %s>" % ( Ð.__class__.__æð__, id(self), self)ûJ


# This file was generated from:
#   Id: option_parser.py 527 2006-07-23 15:21:30Z greg7 0 20 õ6-11 16:22:03Z gward1 Bhelp/ 7/ 7_ aerrors0 #090 Ô4-20 00:58:24_ ‘
try:
   × ô  gettext import 3, n ‘
except I  Ef > 4def. ’(message)  \ sreturn  
p  2 W ÷(singular, plural, n? –if n == 1R V < V  J T

_ =› Ð


class OptP²Â 1 (EÖ $iou  œ ÷__init__(self, msg’   `.msg = Ñ S__str4 /  6 ‡ 3ion… 	” = 1"""× ÀRaised if an½ ñion instance is creœñ with invalid or< ñinconsistent arguments.  ` 	 ò ,ßŽ  ]Ä ú      ’id = str( ):if @ è"O ± %s: %s" % ›. B_id,F  ªÔ  ˜ OelseN q 7msg¶ionConflict“  1 X ‘c3 3ing.æs are added to²rryŒ†ionValuew ,  y aê…  vD  ñencountered on the commandMline‡ ABadOG v / (�o>   Kseenx  t  Cs 0optAó  % §   =a ! Rq _("no such: 1ion:2) %*X ™Ambiguous
› Dan a@ m 1ó , possibilities  
˜ .¯Û )ð / I	L * =\ UL(_("ë  Xv (%s?)"s  w   © ½², ", ".joinÁ	– 5)))âHelpFormatter:  zâAbstract base JRfor f0 Ž : 6X@ðs should use one ofð the HelpFormatter subclasses for
      úing help; by default IndentedE ‘is used.
@ ñInstance attributes: ñ  parser : OptionP   ž €controll~ % # iV . i‰ ó_increment : int K ònumber of columns to 8 � per nestg Slevel: @max_õ P_posi£ X  Ámaximum starA _  8! oØ 8D tex‘ S ¯calculatedV ;® ±  initially=qsame as ¦ * \widthÌ ^otal &ðfor output (pass None<°constructorí [  mqis valu& Ñbe taken from‹ ñ$COLUMNS environ°“variable)G †¢ @currÜµa�( 4   _  = D (in~ ¡%Pavailº  ñ& (Ì] =’_tag : stg k # Zóreplace with eachX %'sz`C, "%N " Ÿ`.  SetQ Vfalse”1dis² <  £expansion.L ¾Ã_strings : {©· # }( d  maps š` bpsnippetz X	µ explainingE , Pyntax+ Cthat÷ à, e.g. "-h, --D #" � 6p"-fFILE Pfile= Ð_short_opt_fmof÷ ‚ økAhow : ‚ s‹uUs areµ 0pri6 inæó.  Must be either "%s%s" (« )")À 4%s   ½ ð), because thoser ;Qtwo s#e×aQ }¤k supportsÂ__longþ ±similar but» + ï =; mÁ ¤ -e¨ oä =Ç # ˆ)‹ 2"""ó	NO_DEFAULT_VALUE = "none `def __Ç…__(self,c  ë ßì#  ¸$  ß  øt_first)©   Œ .°=™  • # =\¨ 1 1if } " iMf  à :try   0  T St(os.:#['K$']] - ð  except (KeyError, V�ð Error):
         ´width = 80
    E-= 2 Rself. !=  
 ñhelp_position = 0 Lmax_ \8  j   Mmin(* a, max(i õ - 20, indent_increment * 2))N q Bcurr%  , 6 = Ø   ^level ¤ l `= None—  ú# computed laterp °short_firstô  
' ódefault_tag = "% "&  op<Ú_strings = {}! _o `opt_fmq k"%s %sG i_long_% =% L ð def set_parser(",  !):"  ÷   . # = 
 @ Š udelimitM  L 1if  ÷ not in ("", " "#  s ñraise ValueError(o    ò"invalid metavarW  z Q for ’  D‚s: %r" %# $F2" +, M + "-QÉ  r 9 É ì =í C ’ ì  ) 
ë aÛ Ô X+à2 “´5 mF+= 1< de™d -d basserti  �>= 0, "I2û decreased below 0.2© -© Áformat_usage¯ !,  ³qNotImpl“"ed¼`"subcl¡ „s must i" &")c sheadinge  g 8_h Ctexte   b &""Fø   aöð agraph of free-H  ; p`inclusíein theü M  output at  ŸÃaç u.6 „  d _� O -ñF, 11æ– i1 "*; € _ t areturnÓ  wrap.fill(} ,# }	  #   ) sinitialx = 4 vsubsequÆ7 9adescri5Ø ß–Ðscription:
    ôreturn self._format_text(description) + "\n"
6 Uelse:   G 1""
 Cdef M pepilog(a ",  )< #if  O _\n" +�  H ˜ ™ ãexpand_defaultš oê ‡ "ifx òparser is None or not B F_tag8 ¿ T R.help  5 rvalue =J e . cs.get(> Qdest)¼  > 3if % _A  ˜ �O_DEFAULTž  +on­
# ƒ NF f_VALUE² Ü�  Î �.replace<¶  i, str(` "))J J = ",  `# The g  CS each% ö consists of two parts{�#   * the0  Š õings and metavarsH + À  eg. ("-x",:ô"-fFILENAME, --file= "ƒ ; f Òuser-supplied² ostringg hÿon expert mode", "read data from q O ñIf possible, we write bothqhese onxsame liý »  -xH/  �  h 
 q But ifR 3optVP list�too long� 1put(  ¼B  — �a second— Ñ, indented to8 ² ù column it wouldH `art in� `it fitT  ïQfirstU .0 /  Ñ	( /  Œ, µresult = [] DoptsÇÌ_ñ "s[ 	+ d_width0  )P_posif" -‚current_E - 2l `if len@s) >æP  Ê ’ `"%*s%sB!% l.Z 0, "ø6ptsÜ ? x _T	© �  3   @# st¯ :  §Ü Ž0 as¹ ‹ = ³ -*s  " µ ù ?À 0¯ ¾r.appendE  if• 1ion®
PAhelp·Aç
E4  ï   PPwrap. (   ,ð 
C 
¯ 	Î£ÇE p O[0])I Àextend(["%*sÿ%s\n" % (self.help_position, "", line)
  1for% A in @  2 fs[1:]]8 ùelif opts[-1] != "\n":W àresult.append(  ? ò return "".join(+ !)
@ Àdef store_op· �_stringsÒ –, parser)l é vindent(b ±max_len = 0V  ð  Ú 0optÙ F .b FlistQ  + t 1 = _ lformat‘ 6optq 6  tT B P[opt]G Å Œ  / ¤ Cmax( c, len(> 2) +� ‚current_è v ž  ý  é ^groupë  sí  /   ¶ ›  Ô  ï :  0  3 ? = #++de 9 õ5 z $in�R + 2,’ š 	* • PwidthC !ax¿. -C # i G, 11W ¶ ,x7ionB"""RRða comma-separated Ü! o­Dion ¾õ& metavariables."""œÛ÷ion.takes_value(p š? # =� .P 4 or §dest.upperœ < AshorNPs = [Õ %._ A_fmtÁDopt,¦ ] @ 
  ¿sÀ^N %s]×  6 @longÇy  x lx  w  ,  dw L v Jelseoê  … :  ° + e 0 × "ifRF <firÐ « ²y&+ H  C   ¬ 8 +  �D € Ð#, Ò 8 ¡)

class I�qedHelpFJYter ( ^2"""" {b with ß`ed sec� bodies.) ¸	  7�__init__l,  ×  J Ï_increment=2%  Ù?=24'  Ê_=None  ˆ#=1Û  † 	ó .¯ 	ª  ,õ « ,_2„ à, short_first)ñ

    def format_usage(self,  !):#  ' °return _("U& ¢: %s\n") %* L sheadingN  P Ñ"%*s%s:\n" % - ô.current_indent, "", @ ñ


class TitledHelpF¼ Yter ( l 2"""" ñ help with underlined sectiona Aers.ð 6"""Ð �__init__� ,    § Ï_increment=0%  @max_€ P_posiq ?=24'  ¯width=None  Óshort_first=0Þ  † 	ö .¯ ) (« Õ¬ -, ™ !, … ', o )*B"%s %Ú= Í(L4"))pi , À  ý —"Ž  G' p, "=-"[; ã.level] * len(  P))


ÿó_parse_num(val, typed ðif val[:2].lower() == "0x":| Õ# hexadecimalv¡radix = 16 /elK bK �# binary1  [ D 2 Qval =“  2:] or "0"*  ñ# have to remove "0b" prefixE ˆ "1]Ë  D o # octË  8B &seý 5 		 /# 0ä¹ kuì )‘0int ‹2 ­óint)

_builtin_cvt = { "int" : (0 iK _( @egertÎ 	· _"long6 Bfloam 
 ,&
 `ing-poŠ /))Ò �"complexr  =  R")) }Tcheckå Ð(option, opt,u¯ä(cvt, what) = 0  [4 .q]ú =tryß!cvr1ue)# ÷except ValueError1 aaise O‰   
u2_("v ò  %s: invalid %s³ A: %rA Ï µ Í õ `choice% ô XPue inBion.3 s® ¾vÉ Ú 6lse 0 ñ = ", ".join(map(reprfU ) 8r&q  ö (choose from %s)"`  d  % ú ", 9 s»ð# Not supplying aËÐault is diffeGX  À of None,
# ò4so we need an explicit "not supplied" value.
NO_DEFAULT = ("NO", "D ñ")


class Option:
    """ òInstance attributes! ñ	  _short_opts : [string]6 }  _long   aci 2 : 4  Ltype Ndest @faul 3any< @narg† 3int 1con; $ `choice& ¬ ácallback : funœ E  __ l(any*) #kw {Ñ ƒ : any }) LhelpÅ zmetavar  u4 þ # The list of i„ó	 that may be set through> �keyword ˜ qto the qructor.' ¢ATTRS = ['�!',  þ '‘  ’  “ — Š  Ÿ „ � ž   • –1']
‡ _2of %ás allowed by o1Ã parsers.  Eˆ!ly½#edG mhere sˆ@ can¤�idate its±cuments£PCTION¥‹("store"¤"   _T ?tru; Ofals oappendT   s _count7  g   �  pversion£ ’�	€involve $Ping aVus0mew};‰Calso›˜ just for� A  —“ion.  (IfA  J
p is one¡`these,f@re mW Pbe a +0inaì.5STORE_AÖ ï Ü	$ â	# è$ Õ…	 ô% ú)= opwhich i¿Âkes sense to·y¼p’ype, ie. 7  ó ì0umeù1arg0P from�Ò command lineE_TYPEDu
Çè 	­ ”*require*Õ  SÏ  ¸ä aalways‡× 
Àand line.
  ÿ  ALWAYS_TYPED_ACTIONS = ("store",
  ¡"append")
' ñ%# The set of actions which take a 'const' attribute.9 ^CONST~ _. „ } % ƒ ðknown types for op“ ð parsers.  Again, listed here( “ !# } ðructor argument validaG º  80°ring", "int "lo Afloa pcomplex fchoice8!Di.1ary;n Áchecking fun! #s,P³convert and¯ š eæ ³ €s accordG Uto th"  Æ #D �Signature† } C is:* !   (S1: O\,~ P : st,/%ue ƒ) -> anyD wq  9 aion is£ O á instance callÂ "hez (er: 7 dactualL qseen onQ Åcommand-line:    (eg. "-a•P--fil• ò3#  ¾ ’ ê W ] c  creturnM ²should be i˜ ðappropriate Pyth¯ $yp£ ¶.®@ -- ± Óan integer ifî ! "==€
ØTIf no8 ,pdefinedî! a",ä„s will b„ !unë edms remainásg  Â_CHECKER = {ƒ  F:u �_builtinN"+?   / R/ x^ œ�  » $}
ùþ €_METHODSbaV Hðunbound method objects;–By arÜeÇ by },+öorder, after allBsD oÑinitialized. � Û � @creaä and filledV 9latV G  $® ]  Ëcually 7ò.  (I just put it;“because IG slike to6 >2docH Ã XclassÉ 4sam|Áplace.)  Sub/ ePat ad�qother _ D_*()df‡ µ  V0ir 
¬""thT  ^ 2eir¶N G <áose from this ’ 
T e= None@-- CøM/¦Hf ?s - g`def __? ð__(self, *opts, **R"s)Ÿ zÒ# Set _short_% _gà_opts attrs fróom 'opts' tuple.
  ö-# Have to be set now, in case no option strings are suppliedF Àself._short_g U = []d  Olong  / $ Pcheck% _p ( )J !sef $ % ð
# Set all other attrs (acÉ ð, type, etc.) fr! e' dictE �  j  ( %)
  0# C¬ g 1thee àibutes we justN�.  There7wlots ofC ð$complicated interdependencies, but luckily they can§gfarmedH 0outÂ ˆ _Cò *() methods lisa ÷ CHECK_METHODS -- whichI Pcouldc ñhandy for subclasses!Í   one thing” !seWshareH pis that" ‘y raise OH‚Error if `discov£† problemS | Ì  er��	À :p  Ë+ (( §Cdef 5opt. " ,×&s)C �# Filter KNã ðbecause early versionÀÊ Õk had exactly‰ # a  81and  þ A, ei™/of� „   T1opt•   inP sM6optnaif not à  #ˆAType†¡("at least¡ o è  mÁ ë"„Rretur| h *f Ô» 
Ÿ `if lenñZ) < 2 À H(y   €"invalid ‚Jo %r: "1 í ð two characters ¼0" %Q  , ? u (el» /==¼ • Þ ±[0] == "-" qpt[1] ! ’ Z  ºú  / þ 	†; oŸ iñm -x, (x any non-dash)S O ) *0.apó V.se	H#:2JK2K@   ýN å "Jö
start with --, followed bKE* —  ,sD�“Àset_attrs(seÓlf, attrs):
  1for æ in self.ATTRS   ' %if# ? 
  " 0set (B d   s[ %])o  -   1delT ! 	  Nelsec … Î== 'default'&  \ � ®NO_DEFAULTŒ p J 6oneD – sŠ  õ ±s = sorted( v.keys();  a ùraise OptionError(
 # ò"invalid keyword arguments: %s" % ", ".joini -),D  —1)

 ñ# -- Constructor ^ a‚ ¯ methods - J Ðdef _check_ac@ ÿ\"ifS { is NonÛ › .! ‘= "store"©  ý +elD 6notª[CTION¬RAf @: %r6y ,§ )Ö OtypeÔ   Ò ² XßLWAYS_TYPED_A»  ñ = pchoicesb  ó 8 -   s# The "0 "UÔibute implies  " ³ .[ =    % =/ ) 'A# No^ € given? ÈPring"À óthe most sensible ¿Œ !stG Œ „ r# Allow òobjects or builtin áconversion fun¬sT  ú$# (int, str, etc.) as an alternative to their names¾ Âif isinstanc4.P,€  m   r 0.__[ "__Š (    Q ! =%*r"q ' G  Å9	æ 	I  Wœ •H R Lo³Þ 	Q ¤ O C  { „ } … 	Ô a Q"mustX �supply a�  àòøMú
 ‡' Šé  Á½Ø Ô „list of _  ß  t" ' +'"~À     elif noût isinstance(self.choices, (tuple, list)):
  ýraise OptionError(#  2 "Q ¡ must be aR ÿ of strings ('%s' supplied)"H %/ J(typ¨ ð)).split("'")[1], Æ )C Aelif Ù Ê is not NoneÕ Ñ "Å  ? ® $y Ý @for œ b %r" %q   � � ñ def _check_destpYP# No  0inaUñ	 given, and we need one l `his ac' a.  Thea  p#}  l  ñ  3 ðcallbacks that takŒevalue.>   !s_ 1 = ¢ .g 2 inZ õSTORE_ACTIONS or<  ~   ˆ. �  3 r™— ñ  "   ë ƒ ):
] ™# Glean a&ñfrom the first long o– 2King,E ;or 4 Zshort5 h if noN s& æ À _q Z_optsN $ ð# eg. "--foo-bar" -> "foo_ 	—  / 2=k\ ö	[0][2:].replace('-', '_'P A ;elsÔ  W ð ´  X "1]gŸ>con ò  ÓUCONST ±u G  Ý ,  á
#q'D '> G %be*
Ž x 
ö)ë Qnargsé‹ë ç TTYPEDç 
Ì 2 O  ó ï „ .$ 5= 1¦ ¤*'D 3HJ6D== "+ ". Ì  4ablÒ¡ˆ 3  * ' o â^ :•   ™ 7  #ifò% _ Í ­  Ñ ¡µ7   FÌ B !, KE*
P  n/,Yg :ý /%rGÀelf.callbackç_args, self)
  @if ( À.callback_kw, ù is not None and5  @   ¯isinstanceD �, dict)):= ýraise OptionError(#  d "• ñ	, if supplied, must be ah :° ?%r"K %ü æ Jelse®  q 5elf9 
*  ± Ø Í ä (%r) for non-÷ ! o"Ò Ë  � ½ Â ;S ”Â ž zb/Ï¢ 
?ðCHECK_METHODS = [_check_ac³,$  b	 $ Otype" _choic$ OdestF /on# nËF ø"]
ú ÿ# -- Miscellaneous methods - J ±def __str__ñ return "/".join â._short_opts +¯Q_long )T ±__repr__ = 
   j ¢takes_valu�n ç �A !ge|  ± 1ing“ D K’ 
œÒ d $ 5[0]+\	4 ý  5 — Œ¯Processing‰2---J  "Â",_!,  ê ' Ber =ƒQTYPE_aER.get.GI4if 6 !is3j K i 	¤ Ë gonvertï	) ~ "ifà ó  ¾Ù+Z == 1   $ ©ž y 4opt@×  0 ë  F qtuple([*M Bv in¹ ]ù Áp
„ ±s, parser):*À     # Firstñ
, convert the value(s) to óright type.  Howl if any
  #3 ¥are bogus. O ƒ = self.h _ R(opt,< %)
0 P# Andy øn take whatever action is expected of k `# This" ða separate methodÍ mO ÷ life easier forw  subclasses- sadd newv Ð breturnÏ  ¡ _˜ (J  í  ,+ fdest, ò ù “s, parser1def÷ V  I ,… /, E :†  ¤1¦== "store" ¤ atattr(Œs]  )G /elI  o_constO  À  ö/stT ?tru¢ OTrueM OfalsN F* O kappendë $ƒs.ensureÌ›B[]).3 WY J_ YOcoun§s o0) + 1È ‹callback#Eargsõ# _ For (O  ‰!kw #.  Uor {}� 0 û ' ( 
YQ0, *W B, **J u ÕKhelpÀ D p.print_  ´   Gexit Y version\ 	# E  ã _ *seÄpraise V²ãError("unknown3b %r" %‚�h e ÊQ1

# ú0 Opcô


SUPPRESS_HELP = " 0"+" "" [USAGE#  2"

V Ÿ "s:ã áƒ__init__¼ædefaults=None)á 4if    ¹ fD ¼EE) in) w.items(F  1   "seï0> — 3str– A '1str° “.__dict__J±__repr__ = 
 P #eqO w, otherV áif isinstance( ,És&  ¹ €  @| 2 ==R Ž "„[  ´ Y À   return seólf.__dict__ == other
  Uelse:   ñreturn NotImplemented
# ðdef _update_careful(self, _ )H 1"""1  P U0 ñ the option values from an arbitraryF õionary, but onlyH suse key8  q õ that already have a corresponding attributeG 0in ³ b.  AnyQ !inz � withoutE õare silently ignored.c þ 1for…  e r/) !'if" &ctF    adval =¤ [Ñ ]j     1if % «is not NonÕ %   0setB ‡ ,w ,: )áSloose)  n¶ á ß#Â !us§"ll‹ + r ù regardless of wheÁ?theü | ô0 or© ! (.å(† g, mode!if  i"#"Òi a Fi  ¢  (elG ‰E 	! ¬  ?   Ø `aise V|ò Error("invalid Œ ¸ q: %r" % ù  bd_modulrmodname =ë 
³__import__(- )ö¢mod = sys.U #s[# Û'P(varsF )p š %fi˜   ™  M U = {}� ¤exec(open(?  ).ó @(), . ¹ – ‘ qensure_ä) r I +lu* ¬0has  + )¨g©O) isÚ Ò} µ ÒS  ¡


class Oš¢Container:èáAbstract base 2 ." C>  Á fsë’standard_ó’_list : [h æ 4of 0 #sÛðwill be accepted by all in0 5cesÂâof this parser£ Ð (intended toG  overriddenI 1subÊ 3es)Í IW 
Ð Ç  ²Ë ã £ objects cT½ ¤ ! lÄ 0_sh- op(P{ str:š ­ +@mapp& ; ;: Àgs, eg. "-f"³ or "-X",
  ðto the Option instances that implement$ “m.  If an- C òhas multiple short oO õstrings, it will appear in thisB 0dic 6aryI £times. [1]' â_long_opt : { [ # :� # }& (  M papping : ” õ eg. "--file" or@ ß"--exclude", B ÔAgain, a give/« can occurä ÿ Šdefaultsþ ?anyû Špdestinaf@ namá#o S ¸ øvalues for each 5  ˆ) ²[1] These m^Às are common0ð (shared by) all  ponents ofIG  €controll£�ÐParser, where, y] ñinitially created.
E 2"""	 `def __' ƒ__(self,ïð_class, conflict_handlc adescri¨!):N  “ 2# Il !iz€ G Ð list and rel� P data…‡uctures.B ñThis method must be providA sub– 1es,S !it' B  É 0ial„ qat leas‚p follow/©¸ attributesÅ ö_¶ 1, _” :%, E,þ»  9"._c / 1ionC "()f !$ _ Æ # =$kÆ ) Lset_{( )4 �( ˆ î
§ Œý	Ð£For use by+d ³structor --Y sU main“ #Þ î"usÇ Â
S   7all< ÖTGroupS]t ownu£P = {}i ó# single letter ->u ­p sâJ ) #	I sH   #s ' — 1  G
3«Q	ª1, pò²@± ÔY dˆ ž  øas fromÔ‰ûÜ ††Oe ÇL—ª .Nq ,  e å # =Õ .‹
* ( YT  49 h #, Â3$if @ notPð	("error", "resolve"):
    ð raise ValueError("invalid conflict_resolution v( ô %r" % handler)
L Uself.6  $ =) 
) ð def set_descripV (9 ',  !):,  Y   . ( =) T gT  G |return N 
A qdestroy� 9 �"""see Oª `Parser� + U)."""ª 2del` ¯_short_opt  Olong ƒdefaults” C# --w ÿ-adding methods - Þ t_check_žæ 1, oÖ î    ¢ es = []Ã 0for0 0 in Fion.è s° ´ if#  * p( 
'  + 	q Ü.append((opt,Lf[opt])n�  \� ' Ž  ; � &if0;opt‚ õ  F  $if1` == "e•"« ¸—CªÁ	N  R   "t  H÷æ string(s): %sÈ /  ð% ", ".join([co[0] x coÝS -?]),y l · Z +elå b/veç   n cg Mion){  e …÷.startswith("--"ì %  a $._æ€s.remove� 
Â 8 ø8 Oelse¯  R ‚ Bƒ 9 „ �if not (n F or  Ð s6¢container.óT_listAT )’3addÒ�°*args, **kw
 t 7""". ô	� áopt_str, ..., K A=val 4 ¸àif isinstance({ @[0],ƒ  ŸØ " =š |_class(¼ ýë1lenX )ÒQ1 and‚� *V 3 = ˆ I  � º® / ,(°  3 'ðTypeError("not anñ
 Option instance: %r" % o 3)
  Uelse:   õraise TypeError("invalid arguments")
2 ôself._check_conflict(e 
&  Å_list.append)  x   # Ð.container = a H 0forÂ 0 in ú ion._short_optsÇ  8  s[opt] =7 Q 	OlongP  O P #ifb ð.dest is not None:à # # p has a % ‘, we need UfaultO  4 S  V šO_DEFAULTú  5 þ !de0 s­  , n . 	m (elo !st¿ !in†1 io  þ 1Tretur¿ pdef adduPions(½ ,)/)á Û$ # ‘ T ií D# -- ÿquery/removal methods - º !ge6ion¹ G_strµ ô   ”1.ge,. 1 or�  ¾   	$._t	/ ƒ ;3has;a :S � 0opt  @\ > . Š } :e€ ØÎÿ ƒ ê >É  M • 	L íDValuîsno such[6 8ø  … ˆ J� Ö !2del@¬ ’]¤ L  Õ K ! 
J ‹ @. E.«€ ÿ Help-formatting(D S_help“ (te!if^‰¨ 
íº!""®  z­result = [BR w r .¤  gÚSUPPRESS_HELPƒ u ·Î .
 ñ [^¾ b.join(» F »? adescriš0M 4 4ter} > Àon(self.get_ódescription())

    def format_help(self, Qter):&  * µresult = [] 0if 1 .Z 1 5 q.append] .n 3 (  o )[ o° __list[ 3 Ð [ òreturn "\n".join(Û ±)


class Ot rGroup ( qContain¤  9�__init__Ù ÷, parser, title, â W=NoneL5/ # =8 V  4q .f "  &  C s .ò ¾  àconflict_handl™ ’ i I .³ " =» ƒ_create_`  …ì Ë   
!] U_sharE �mappingsI .�Aset_Ž   Mp ! ¯ qdestroy: 3 c"""seeÖP¥ ²+ U)."""Y{	Q & 2del÷÷ 4£# -- Help-xßing methods - J  _D ˜/ 4tercqheadingâö- vindent( 3 +=2ûX ) Z -deZ ya n˜o¦C¡¤attributesˆstandard«B : [Ò² ÃD of 0  Äðs that will be accepted by all in0 5cesæ sof this¼ zÐ (intended toG  overriddenI 1sub' Bes).åIW  Ð åusage : stringw "a    ¨õ your program.  Before it is displayedA �to the u© "%8 "÷ Dexpa¿  & uname of= k  W A ð or os.path.base7 ó (sys.argv[0])).C . Õ k � tcurrentÕ S (to KeI  q òMA¾`agraph€text giv´qa briefw @view  þ Ñ  @Ä  ry0matK[ ito fitÚ …terminalÎ ðwidth and printsÀAwhen6  ­  requests ×r (after,F Pbut b‡ e8 ðlist of options)1.
  ó epilog : string ñ  paragraph of help text to print after option  
;  Á_groups : [O$ G ]$ `  listZ .  . pin this} Zser ( 5are@ áirrelevant for1 õing the command-line, but very usefulA  6 pgenerat9  â )Ã ðallow_interspersed_argÍ §bool = tru‹ f `, posiøal arguments may be M S with;sˆp  AssumŒ õ-a and -b each take a singleZ ,ì Û ñ  -ablah foo bar -bb
 z# Ewill— apretedP usame as( K C %--T &baN "If·ð flag were false£ $at� �l wouldz q k | q ð-- ie. we stop proces!V€ as soon  & !eeß UfirstÝ Cnon-b°P.  (T‚!is1 AtradÔ0 foUed byA ñPython's getopt module, Perl's G a::Std,ÒUotherÂ-H 1par½ ’libraries·@it i\  ¥�lly annoy! toÎ5rs.²ï_default_value±ý 5  5 4areRÀed similarlyû1 ¸ 1 Afrom.zêP: thaÁ  1ey V 0assio. F  type-checkÜ @funcE× Ït 0's ( � (as longÙ&th…	Ä  7aÑ)Ó0reaF€only matÝu if you‹ ðhave defined custÙ ñypes; see SF bug #955889.)  Set iòI ’to restorx�behaviouró qk 1.4.1„earlier.~rl[’4 ©A€currentlc = I`ed.  Oå …set when–  Ë!()$Rctiveœqcontinu#°trimmed dowB@ w]0nsu$á`.  Maio  Ýe·`benefiä? „callback¥ûlñ 	)gleftov? ¡ at¶Æskipped whil ò  Es.  If ß&is¸i‚ ô is always empty» 1: Vqë  « #ofí ]²•accumulat·D  @  ¿Ýe·’.  Also m~ ÐasLpBecauseu ‘ Ð'rargs', 'larñVgs', and 'values' attributes,
    OptionParser is not thread-safe.  If, for some perverse reason, youH �need to pJ ñ$ command-line arguments simultaneously in differentE y fs, use ¤ ¡nstances.
4 2"""	   adard_oÓ ¢_list = [] òdef __init__(self   ¯usage=None  W # bclass=ZI  versionE ÿ	conflict_handler="error"J  adescriï N Ÿformatter! ƒadd_help7O=Truþ OprogC Cepil !):• R ¥Container.}"  & Š \9,, ', é )?  ; Q.set_·(   ¶ 0 =  
7 „3 = 
 
 Ðallow_interspð�d_args = 
, òprocess_default_j+  ifE‹ h e, 
ªô = IndentedHelpFÂ(Ý 1  
œ  (œrýK Â2 = 	 2 • ã# Populate the¨ [ ; Láial sources ar% ‚ /# “åˆ,Y ' Z 'B <Æñ (if applicable): _ÁÅÄ ()ôF $ åµ() methods.& N#_pî J E(œ …  '
  ’  n =	 N )Xn  B_–Âing_state()
%  ¯rdestroy±- òq BDeclx atŒ…édone with this?@.  T •cleans up !re‰Áce cycles so`Ç!(LÅall objects 6 Ed byL ðit) can be garbage-collected�ðmptly.  After callingåï )M 	� pis unusÿ». v	DT �for group„Œä sl h .I :Hdel <  ¼b  E s ¢ø�# -- Privs¥/ - À--
    # (usð0ed by our or OptionContainer's constructor)

    def _create_op0 Á_list(self):#  '   .  _ = [] ogroups   f ˜mappings(‰ ƒadd_help‹ †  $ Š  ("-h", "--4 %",�  ²   acÙ /="'   à=_("show this  ü message and exit")³ version¶ -1 ³ *  ¤ ¶ £program's 9  number½ _populû", c , th GTrue1if ƒstandard6 = ‹'  G X sÛ.8 )Ç(if† P X z 	B y C  _”  ¾ (@     û <   9 ¼ dTñinit_parsing_stateó =ð# These are set in 0 @e_ar€ for theµñvenience of callbacks.m ]r7 z = None l Pvalue­5 ÿ# -- Simple modifier methods - J  Pset_u?þ !,  "if 1 isº g 3 p = _("%à" [ì6s]"ª(elJ ïSUPPRESS_USAGET ø  C  `# For \@ward.ñmpatibility withSRk 1.3Qfarlier‰† €.lower()ã0rts= !("Ê 7: "  x £ " =6[7:^OelseÃ 9 qòenable_interspersedQ f y a"""Setrñing to not stop onx¢first non-p¥, allowing_f  D  æ Bches+@comm3Àarguments. TT is^ C ÿdefault behavior. See also disÌ )&thé‘class docl aðq descri 9 L†attribut9 Ô /E."""¤  ;.) 0 = �¶  G ‚
~	R. Use–%ifš ðyou have a commaónd processor which runs another command that
  ðhas options of its own ( ôyou want to make sure these3 G õdon't get confused. 5""" ñself.allow_interspersed_args = False
. ƒdef set_Ó ð_default_values(I ,ð !):3  Ó   .4 $ =0 
b Z S adest, f W )  s[$ 2] =& M ¡ @**kwÜ K ƒ.update(& L “_get_all_�ž F  1 = ò  …_list[:]Éfor group in)  s7 ;D ‘s.extend(# . Y )W ereturn  ° ´ %¨· bif not‹ ¦
” P# Oldèöe-Optik 1.5 behaviourd À – V!.� "s)Y &  : f.copy(ä  ;ý <”Ù [ 5 = U Bget(F .5_  0 ãif isinstance(4 [, strY  - “opt_str =w.m 7ingº  .   Q 's[�  ¶ Rcheck§ £  ] ,¹ 0
VT ")
RP# -- š1onGhŸmethods - J  @3addð_~õ0, *B/, L €# XXX lo¶ãf overlap with• ¦Container.\ +
‚ g ?[0]‚� # =V ë �  �elif len(W a) == 1W  ï
ëc  / &[0Ä L 7.. ,� 4 ðraise TypeError("| (an6  €r: %r" %/¨o ¥.parser isÅ
Ã  « t …u yinvalidv r(wrong Q &)"p JelseU Q Å P §arguments"¯µ Us.appÐi Ø$ ‚U9ion‚hcE1 = p._short½ ˜PE) or  ¤ ]_long1   #ifé5o $.cÏ„Àself:
        ñ	return option.container
 3     aNone

 a# -- O0 ÿ-parsing methods - J ðdef _get_args(self,  !):i  ƒ !if @ is ƒ    œ Åsys.argv[1:]9 Oelse.  a 0[:]@  ö# don't modify caller's list¬  î e­ =˜ �, values ¿ 5"""’ >  „ è : [string] = Ä ,3 ¡ ` A : Vi ! =)+ B-> („ $ Mh )Ë  V óParse the command-lineÀs found in '« ¦' (defaultR± ð).  Any errors result> aJQ to ' ¥()', which¸ 3by \ q prints• ‘usage mes Ñto stderr andS s@  ˆ âexit() with an‡ = À.  On succes›  îvs a paiå:1’) where 'O'|aw¢instance (n %llŠ CyourA®)° CiÚ  R! oÖ0umeð EleftE °over after 0 \›%s.$ Ur  @Felf.L  #if‘  Ë  ¯Ç è E  �’_ (8b# Stor:`halvesÍ  H1argÑ 4Ð as attributeOr×Â  # convenieK!ofÔVbacksš #} È 6  ®  l Drestx 	À( @"r" ¦dy ? ö"remaining" or "right-hand"1 | l|  ¯¦ñ  ö� ie. what43eftÃ‹removing„ ÒPtheirä="s Â lÂ $ "t M ¢  Á   À  K. ‚  Ü 4 =  [8  ø# =776try¢ ŽDstop:@_prof"\ !, ~ b²except (BadKE<,Xä )J;errv  îR‡str(err)¤ ¹Ý +‚  4 B Tcheckåô ò   	$  Ì * ™ —	6 Z —	 J  ÅCÀ P that^š supplied…f %ðover arguments aCre
  õ)valid.  Returns the option values and leftover argumentsA õ(possibly adjusted,  ðcompletely new -- whateJ 5youD ðlike).  Default i6  g a‰  W ' r¡ •passed-inB ¬ p; subcl `s may ´ õride as desired.4 5""" ^ " (H ,è 1s)
 ð
def _process_args(self, l 2, r 9 !):3  \:"""6 0 Å : [string],+  / 	 T + x A : V®´  N P³ Ð command-lineØ À×¢populate 'G Å', consumingž ÿq from '© ñ'.  If 'allow_interspersed/6' i.áfalse, stop atn¢first non-j ¤ W ²true, accum¬ 5anyœ m C as in 'z'ùRwhileÅ¼ ?Rarg = 5[0]r   ñ# We handle bare "--" explicitly,] C" is- @d byó M €standardù * pr since- a short °case ensure©@M alen of9 Bopt l ƒ ægreater than 1 Ñ !if` !==Ê 
   ?del
  ;	‡ "elR o[0:2] W ## W  að „gle long€ZBwith�I(s))k  ‚  �.m C Q_opt(�,8 s6 ¡ #:1  "´Îlen(arg) > 1°  clìrl¡½*s ¶ ¬ #� `(s) foŽú e last one only¨ Þ m  ß sà •Ý %q.append» NelseQ  Â 
 #þ�now, leavæ!is�"ingy 7 @# Sa4 isÄ�priginal1 ËV list q# [arg0Ãa1, ... S(i-1)
  + ! FN-1)è#~  ^@# (wV¦e about toÔfrg(i))j#6 3Theì  Ø  ² 7(i)® � “ ` % ×a *subset* ofK  = 0;  é c] (anyI»Àtheir argumeó nts will have
  ö# been removed from largs).$ 
 ò  The while loopQ ðusually consume 1 or more argumez ‡per passV d If it6 €s 1 (eg.4 ð is an option that takes no S '),— ð
then after _process_arg()K ádone the situaT 6is:> 
 "  ý ð	 = subset of [arg0, ...,~ I(i)]2 r/! =( W(i+1), 8N-1. 8 ðIf allow_interspersed´ s³ cfalse,� ¶ˆalways b»Ð*empty* -- stÛa· 	 ‹ W, but† ±not a very ˆ cestingF !!
* ð
def _match_long_opt(self,¡)H<"""' óopt : string) -> X  ‚�DeterminU0ch a  W  ø7 q 'opt' € pes, ie.�Vch on it6òan unambiguous abbreviòñfor.  Raises BadO]�Error ifé  ‘ n xdoesn'tN "ly„ O any§  Ø5"""N dreturn>� `(opt, A.P)j¿ lf‡, valuesvaarg =  c.pop(0L  Í 0# V/ ñ explicitly attached tKñ ?  Pretend it's&8nex#Äâ �if "=" in  r Ý  B  Ë0) =# å.split("=", 1) 0 ¸ ¥insert(0, : 	& Dhad_Ä _f = Tru JelseŠ  {~ J Fm‚ ” : ¡w§ Þ À Ÿ=ÌF[opt!#ifÏ.Â¾ (À r nBR . 	· qif len(.A) < " 
ð  H ´ eÓ©(ngettext(H  %    "%Ë Sion)sŸ ð requires %(number)d¼l"k >  F sG Í b) % {" ":• 2, "‰ "":ð }{ ‚ Belif ^ == 1)6 :  5  7 Rtuples1[0:¥ ]‚  . 2del}$ I¢ ¼
ª ´E_("%� ƒ Ÿ 8 ¤ Ê"'7optäÅ Á ð None

        oó	ption.process(opt, value ós, self)

    def _, À_short_opts(# t, rargs8 !):2  6 Rarg = u.pop(0) Åstop = False Ui = 1 öfor ch in arg[1:]Y  ] åopt = "-" + ch6  Qion =Â .° @.getê ‡  . `i += 1
  ò# we have consumed a character6 �if not oY
¬  # ¡raise BadO! _Error�  fA q.takes_“(T K   V# Any‹ cs left-ð?  Pretend they're 	#C @next^a, and ”è 8ing\  of& .B ïif i < len(arg¦   g  .insert(0,J J[i:]… )   „ j= True^  nh$ =" ”  � v A) < & � P  ¾!.e‰�ngettext(P  )    "%®Sion)s� ð requires %(number)dÞ ument",J 5sK Ý b) % {"x ":� 2, "‘ "": }n el±R?= 1"Ä   Oelse? atuple(“1[0:µ  2del1( 
l  u   #û  ù€doesn't C" a×ŽÛ ;NonkJ‰ !ifA	bbreak
Ç ÿ# -- Feedback methods - J  ’0get•ag_nameŒƒ � 0elfÇ Pg is è 
� òreturn os.path.baseI —ys.argv[0¥y	E? EFprog˜ kexpand› 7, sž = °.replace("%D "v ©? )† ô adescriGö X  ú ‡ .= W AexitL ð, status=0, msg=7¸  if 
Hösys.stderr.write(msgp  ^ X t z @k f 2"""—Ãmsg : string:  pñPrint a usage mes  incorporat¿’'msg' to › âÀexit.
      ò4  If you override this in a subclass, it should not return -- it
     òeither exit or raise an exception.
0 U  """ úself.print_usage(sys.stderr)%  Z ñ
(2, "%s: error: %s\n" % (G ñget_prog_name(), msg))
G @def   e Qelf):  • 1if A     ó  ¢formatter.
 ² G  0   - gexpand�  b )Ú Oelseq &""¸ 	çelf, file=NoneÅ 8""")  # ! :* “ = stdout ¤ PsQ the “ @ mesA for €current P3ramb, E) toô 'h ¤' (defaulti ’.  Any ocH Qce ofX �string "%Y E" inJ  ñ is replaced with:  ÕF V ž D T(base)  Jð argv[0]).  DoesÆh€ 	ò p UemptyH  or* � definedº	C 
Äˆ”6 � ,= ‰•qversion2 Òb  
d ™l7 m"< ’ o+  Ø q1 s+isl' ns*{™I), a…àf‚üo  |!byzn%'sH  k[Q ] /unS; 
ñÚ ‘.É$ #()Ÿ W¢o{Q_help; ,áÅ@&if   _
‚ T 0terQ ¸  s.store_€ ösƒ �0res3E= []A  †.append(O 
 Ñ_heading(_("OÛ 7s")O&  ¢vindent(m M’ JlistÞ 
z ^ vContainò> P‡  a
O F"\n"Œ  ePgroupoøX  s˜ 	" €‡ ô � À
        forómatter.dedent()
  ñ	# Drop the last "\n", or ðheader if no options  … groups:L ñreturn "".join(result[:-1])
% ódef format_epilog(self, Mter)M /  » 
 9 .E ] Lhelp[ W=None` i‹ tâ  s  ~  q    = ¨ . Í  # ã U = [] "if. ZusageR / q.append¡ Q.get_* A() +~œJ adescriP ¤ _3 (  ^b ‘  . _ã_J  A œ : •v 5 ! ¿Rprintt  ql, file¹7"""(  " ! :) “ = stdoutR  ¡PR Ð an extended Ò @ mesžÕ, listing alláuand anyÑ2  text proviE @with"pm, to '… ¤' (default† .B 5"""  x_ile is  b= sys.Ë 7  c b.write8”,Ñ))

# class O'�Parser


ró	_match_abbrev(s, wordmap;"""" • : string+ B : { # :c S}) ->( ÞRÿ K, ƒkey in 'q 'é  which 's'áan unambiguousî ¨  ianT.  If, Pfoundp5be 3  ��doesn't è  »1 ofK y Òs', raise BadRErrorŸ›@# IsÒ"re.#acP ?J  ‹ Ë Ê ‡ô» 7elsò S Qolate^ : !s 9Òs as a prefix‡  ¬ÐpossibilitiesT 3 37ord~ W.keysÄ = 	 !ifäp.startst 6(s)¢u# No exã C, soü `had be+Ö be just one › y° vif len( –ies) == 1 — #	( &[0� !elatf 'ieWD Á &(sZ
z 2 ·# More thanÃ �le comple^:G� C 	² H.sor9 ! WA¿] g	?  )
¤“Some day,oPmightjCmanyYÉ¡es.  As of Qk 1.36 !
#9�erred way€instantil… ðs is indirectly, ð&via make_option(),
# which will become a factory func* ñ when there are many OE Ç
# classes.
\ $ =  õJr"""OS routines for NT or Posix depending on what system we're on.

This exports:
  - allž �s from pO ðor nt, e.g. unlink, sta 1tc.< Ðos.path is eiÕ ;  ?  
 * Gname* 'f '¿ D'nt'& `curdir( Pa strÎ �represent òthe current dire_Ä(always '.')J /paJ /paI J 0sep‘  { ð(or a most common) ä Ü Òseparator ('/Ù &\\� 7extI §extension 7 Æ  (al6 Ÿalternatev ANoneP/v  ž w `compon=w ôused in $PATH etcBlgü   ® óin text files ('\rô n 6r\nˆ 0def‹ Hádefault searchÎ Ð´executables† tdevnull:  o 0  ofI  `devicey@dev/  ',Ë à.)

Programs t imýÐ and use 'os'×ðnd a better chance of being
1  “    ¡ween diffe:ðplatforms.  Of course,˜ `y must
 an
onlyn Œ  ¡defined by‹Q   (z,{
° oà1r),¾ Rleave4 1ath‚�manipulaj3to  
K Qsplit< ô join).
"""

#'
$bc 5sys ±tat as st

a_colleÏcs_abc ? ð"_check_methods

GenericAlias = type(list[int])

_´   òsys.builtin_module ò

# Note:  more 0  5ô	added to __all__ later.
 B= [":B", "T 
  
 0sep  ”  ß &
  "¸ ,      4   ™  …SEEK_SET YCUR",I # 0END# ‚fsencode $de @get__c  fdôJ p " "Rð"]

def _exists(§ !):| areturn8 á“globals()1 o  Þ s_™!(m}= 2tryF  J & .l pý  except AttributeError? ![nån� 4dirp ð if n[0] != '_']øsAny newÕ`encies’ …2os ª  Ì"/o±0gesW  :¥ñ
# requires updaC¯0libÖ”well.
if �2in ~¾  Nð = 'posix'
    linñesep = '\n'
    from posix import * Atry:	 % U_exit  ñ__all__.append(' !')  �except I] VErrorX Apass% { ˆ €path as  
 Œ Òhave_functionQ v Y w  É 0extÉ p_get_exqs_list(¢ )Ú 2del:ò

elif 'nt' in _namesæ    o"nto5lin‚r„/nt�" `±  žµ ~- nts
{"nìj 'nt/nt¿Ê ¼"Belse`Xraise]ñ('no os specific module found')

sys.m `s['os.ô B'] =p �²(curdir, pa 0sep !th	 0defD Q, ext !al   devnull)

.`


if Äjsts("_"")Ú ³_globals = 
 (wãf _add(str, fn0  
aif (fn„4 `) and +  
k :  > P_set.Y { R[fn])Ä  c = set† ‚ ò"HAVE_FACCESSAT",  "access"¬ & RCHMOD%  "chmod% 6OWN% ?own%  CSTAT$ o "stat$  TUTIME” ^utime% DLINKH n "link$ TMKDIR% o"mkdir% CFIFO& "mkfifo& N_ "mkn4OPE o  "ope EREAD¼ _"read¼ dRENAME—  re�— 5SYMM _ "symM &UN& O "un& /rm/œN�2supm�dir_fd = yƒ*S Àeffective_idVZ PCHDIRÚ   ·Ñ FÜ% Ü% ÜDr "sq 	' Oscan' ðEXECVE",    "execvðe")
    _set.add(stat) # f	 Ò always works(  $ õ"HAVE_FTRUNCATE",  "truncatP ( pUTIMENS' o "utim% $ % €PATHCONFK “"pathconfÂ Àif _exists("¼ –vfs") and Ô  ñ: # mac os x10.3Ü ¸ `STATVF” Q ) Ñsupports_fd =;
  Es = set(VN �ACCESSAT¼ caccessº ó# Some platforms don't f ò lchmod().  Often the function ó  ô	# anyway, as a stub thatÆóreturns ENOSUP or perhaps EOPNOTSUPP.J c(No, IŠ �know whyN '\ ðgood design.)  ./‰óigure will detectL Athis‰áreject it--so E�LCHMOD st6 wø óbe defined on suchH !@.  TT ó is Very Helpful¼ . ÐHowever, someusb‘without aÛ5ingf£ *do* haveH f!at�ð(Examples: Linux kernel 3.2 T Ã glibc 2.15,@ ð OpenIndiana 3.x/FAnd W ! h¯Aflaga àò oretically make|p# it beœ U like´ q.  So i0ory' €would beduitablÐ ø replacement forE …But when P doesŒ ,´ '’ ¶ & � *either*• IadlyiN `sophisá 3ted'“enough to<  tâPcondiè‘--it only `rmines¬  k  Ê$nonYQminimE À s pTherefo²Àe simply ign C Pdecid%>wheq 1os.#±ðs follow_symlinks.  Just checkG Ò$ iGñsufficient.  After all--if you�¬  , rCW @almop Pertai4ÿ J too_Ÿˆž! "Ð ž
% 6OWN% ?own%   7$  9$ pLCHFLAG[ n  Fp  1 ' 3modL í1lch‰ Ô€LCHOWN",u 5 ;s 4INK½   "¿r $ Ñ½ ¬L» F$ n +l "NS& > “MS_WINDOW�  m D(s_“Ànks = _set

Õ    del _set
 æhave_functions gglobal ðadd


# Python uses fixed valu ðor the SEEK_ constants; ö	y are mapped
# to native' ð if necessary in posixmodule.c
# Other Bsiblf z  \ ðdirectly imported from0 F › �SET = 0
 rCUR = 1 pEND = 2æ bSuper U ñory utilities.
# (Inspired by Eric Raymondì Â doc strings÷  os™ ñ&his)

def makedirs(name, mode=0o777, exist_ok=False):‘9"""3 ( [5 ,][7 1])
8 Å ÷-mkdir; create a leafÚ ðand all intermedi& ñones.  Works likeP J  m Àcept that an­: ðpath segment (not jus- Áe rightmost)N swill be™ d€it does 7 
@. If@x target· alreadyJ + ðs, raise an OSErrorS  q_ok is T.Jw+ Pno exÍ Rion iíE €d.  This6 ¢recursive.V1"""v Ðhead, tail = ÷ a.splitÕâ  Ó!ot# É v7   7    š_  	  e Ñ  s("  V 6tryc   1 )  ´X? 2_okk  * ` FileE~s<
N Ñ# Defeats rac¶ di1‘ when ano� th”Ñ  ³ . j   2pash  Õcdir = curdir' aif isi?0ce(w, bytesð >  (D –, 'ASCII'ß !if�@ == o ::  â# xxx/newdir/.|s5  œ  : areturn 	wÿŸ„ _“WP# CanÖñrely on checking for EEXIST, since`operat  asystem€  � �# could gP€priorityc•e
Å€ EACCES ` EROFSC © !  š  ½a.isdirÖ )ÑVremovÓ) <""" B˜!rm˜# ˜Jemptd· ¢ P Ð�,Ë …òé0sucobfully † %d,bàies correspondw&toÂðˆ ë$s Ïópruned away until eiqe whole= o (@umedt1an ®0 ocs1.  ‹@s duN  t’@latt	 haìrš@igno� --,ðy generally mean that ña directory was not empty.

    """ ±rmdir(name) ÷head, tail = path.split" !ifM  # :3  O 7   Y `while  A andb ? 6try  P —  . >   êexcept OSError0 _breakŽ p
def reô ²s(old, new)P =""" 1bSuper- …; created@ies e�ecessaryã ñ delete any leftž ƒÃ  Works likeŠ #, ß Z aion of; ÁintermediateC Ø t ðneeded to make theÌ ¸ ß À good is attz !edB Ñfirst.  After5 × ,Ð Ðcorrespondingc ‚rightmosÊ  � segments­  } Aold y ò
will be pruned until eithq ‡ Qwhole¬  £ ðconsumed or a non± y’ y$ SfoundÁðNote: this funct3Pcan f»AwithÙ 7newC Òstructure madNö	if you lack permissions ZaunlinkN GleafO !orÈ Cfile• V ¹F"ewÐ*if1 ¤ W€.exists(F ˜   ã3dir { ¸Å  7 } ?old} û c ˆ[emovev  * ®�ôpass

__all__.extend(["À U", "rX   5Qs"])
�ðwalk(top, topdown=True, oneûÐ=None, follow�ss=False,E"""Düãtree generator§‡For eachÌ!inâ]!y 9 �rooted at‰ s (inclupl°itself, butÁ 1'.'Ñò'..'), yields a 3-tupleQ F0dirñy , N & "  þ‘a string,ª  8  – w¶  . Ó ? 2 qlist of¬  *  !ofC 4sub:  M in= X 4(exê 	Ì .I £ 	d S 	` Dnon-a yÙ &s e L  Ç0 thb ½1ame$  ¬  ¼ ¡s are justX1s, Û"no8`compon‚N ÒTo get a full# Ò(which begins> @top);a”  q¦ !inã w€, do os.e.join(  ê )PPIf op‚ƒal arg '·'!@trued  Þ€specifiec°he triple fów ´$is¶‚ed beforß3 s4  nyyAits ËÀrectories
  ð  (directories are generated top down).  If   ô is false, the triple
    for a P y) M Wafter2 s/ ‘ll of itsB 4sub?  � œ Ábottom up).
; HWhen£ 3tru¢ ñcaller can modify† òdirnames list in-placÈ ð!(e.g., via del or slice assignment), and walk wiÄ ðnly recurse intod ˜ Ó bwhose z �remain in4 a; this« Qbe us…f pruneQ `earch,— `to impQ ða specific orderUÁvisiting.  Mø 5ingj Q when¡ 9top×ð has no effect onz � behavioY 0os.ú †(), sinc› ¼Ö ÷ have already beeneb�Etime� ˜ iitselfE„. No matJPvalueë Ä ’Ñ!ofE ~ñis retrieved befor½ b tuple’ ÔÈ yæ�	,…ñBy default errors fromAÐos.scandir() “mqignoreda± ñoptional arg 'onG 'áÀed, it shoulÄ p a func6 A; itE “!beg °ed with oneT u¿ ¾@ OSE£ � instance„ t{C areportº ƒ Â to continueQ  ) ŠBraisKAexceÄ G Tto abI  . `.  Not+ a^ @fileü ã €availablk { C ! ‚attributò5he k } object…#, «@ doeÕðt follow symbolic linksÝ *oôsystems that supm.nlPto geÎ  Œ�ality, s WÛ‡" 'Ž „ '…  µÆ 0CauÔñ:  if you pass a relative path9 wðtop, don't changav Ãcurrent workï ‰ twŒQresum³sL¦  a never†V  	$e S ' PduQ, 0cliz  |"n'šceitherã ‚Example:Á ÊBrt o
80os.æ å€rt join,k2sizÝ  û Proot,;0s, ,sQøÐ('python/Lib/nAl'):Ð  °bprint(@ P"cons¿ «", end="")( psum(get| (Š 9  ƒ!))Í   } † )H P"byte¥ t", len(. U"non-SË … €if 'CVS'a FdirsÇ  Ë   �.remove(' C)  #@ CVS%ð ectories

    "ñ""
    sys.audit("os.walk", top ñdown, onerror, followlinks)= €return _7 Ï(fspath(top)= C
def7 l :m ‘dirs = [] :non  „ _ % ò# We may not have read permission forî óin which case we can'tF ñget a list of the files
 ódirectory contains.  K? ñalways suppressed9 `except… ñ
then, rather than blow upŸ aF PminorÁ  so¬ ðen (say) a thousand ddable • Óies are stillH ñleft to visit.  That logic is copied here.1 2try€ .`# Note¤ Pt scaƒ 5 ðglobal in this modu… !ueB 9 òto earlier import-*a   L T_it =Y JA *@ OSEˆA as ‘— $if¥ Ž  íFNone   c Æ(; ¿  rÃ
h Dwith~ 6_it@ ›while TruT 	 N      Öentry = next(ò Œ  %   ð �StopItera%�  "  Qbreak¼  < ,) 4, < D  is¢1 = . (
Á ÷ T# If : P raisän,‡2sidJtjy is	- ­ 5# a/óy, same behaviouŽ0os.Û†.isdir()· @   � ‚ = FalseM    i® Ë  ®‚.append(Kname+lsu U þ= 	á  ifô  â Ë $¬ � ô# Bottom-up: recurse into sub-Qñy, but exclude sym9 tox  ¤ #W †(if? §, *  
( §  , ë› =•{ e5 ; —    3is_Ñ £ § 0   ¯ $   ·N »Ú  K   #C H ïaŠ`bolic �Çð 
                õ# os.path.islink().
 	 `is_sym& � = False+ öwalk_into = not 7 
0 5if / :  €  ñdirs.append(entry³ )P ñ# Yield before recursion if going top downa  if   q yA Ptop, k P, non	 a  ‡ 1# RX !e Ú ñ sub-directoriesY  ' E—, join = Y,   . 0forp 0namW   s”  O @new_D ! =R (¢  2 )G  * ý # Issue #23605:Öû is used instead of cachingH `µÑ() result durN he loop ong 0sca,‹() becauñ	# the caller can replace B!y u a "“"œ Zabove¡�if follow˜Cs ort  (@)W 1` p from _d, ,¨, onerror,b wFelseT  ï’ 2 inú gJ š / B _after•bottom up``st__all__"-ó")

if {open, stat} <= supports_dir_fd and { ' 2fd:bPdef fY  âE="."…U=TrueŠ„=None, *’�!s=�¾1_fd' ôC"""D­òy tree generator.�  6ñ
This behaves exactly like©ñ(), except that it 4¶s a 4-tupleK  O 0dir»”  °ss, file Vdirfd1 `. 0`,  % `@`5 ó` are identical to™ … output,Í x G 0fd`øay   descripto2ferÍoŠ 8  ¸ `°e advantage:¬d) over… $is°'s safe agan 5Ÿ ³races (whenZÈ ¯ Ë)  If Q!isÞqit shouú ä  œ $a= ©y" \ C �relative;P will0n bT  P þº�(÷”is always0ed ü6.¶ #vCautionÿSSince
)` ½�s, thoseñ only valid unti² h0nex¨ éð ion step, so yoñu should dup() them if you want to keep #
  õfor a longer period.
 †Example: •import os$  B ðroot, dirs, files,  õfd in os.fwalk('python/Lib/email'):G  � `print(: ÿ, "consumes", end=""),  ñsum(os.stat(name… @_fd=E Àfd).st_size ¦  !  ‘ ¢ )),O    i ó"bytes in", len(D ò  "non-directoryý ª €if 'CVS'{  #
ô  y   �.remove(+ ð)  # don't visit CVS_f &ie}5"""Ç ´sys.audit("sa", top ôdown, onerror, follow_symlinks8dñif not isinstance(J qint) or rhasattr ¬'__index__ÖÀtop = fspath, d ð# Note: To guard agao  — @ racL`we use¹ Œ Edardö 1# lþ¢)/open()/f u trick.( Ð ø 
Œ�orig_st =g t¬ )V=Falsgfdir_fdÒ �topfd = Œ 1„O_RDONLYb=3 *ry† Kif (§  rÃ(st.S_ISDIR(©  Þ†mode) an R  „Q.same%G ,ï [fd)))• K Âyield from _Ìé Y,$+` L  ?top˜Zkfinall+Aclos™ „ë>def£  ö  § ™ µ v ‘£0his…Ás O(depth of‘üQtree)ñ descriptors: ifš  ø ð# necessary, it can be adapted¢÷only require O(1) FDs, see issueK g#13734®@scan^iÂ  Å  ~    kU = []I  no5 s `entrie @NoneG« Š�HelseR  l A yò• U ‰ �!= ( . ‘   Qif is¯
6    - Qaencodeø( " tS  #ifm is_dir(ç  '  !.appendZ   "   M  #!is (¬  ,    ç 4iesY   y´ & ?lseD ¥@  ? À         excëept OSError:
  >try  $ ý"# Add dangling symlinks, ignore disappeared files[  F Ãif entry.is_C /()q  / €nondirs.Z �nd(name)X ?excÓ 
 I Upass
: ªif topdown{ Pyield `path, { #, „ , &fdE @for ‘ 1 in*  Ü òies is None else zip(K  û ;iesñ sÔif not follow+s¯  Ù   Ï    áorig_st = statJá ¬_fd=topfd,l _=Falso  R  Ø Œ   aasserté Ë  ‚ '   I,2 1y =W+ Ê  O!y.Ð (¼ Ãdirfd = openŠO_RDONLY
f
bo as er< `if oneX ô () J(errl  ‰continue'û @ or ¿Q.same1,ú)ƒ u   0dir< " =C €join(top ,–¬  7 8°from _fwalkð SP ©, isbytes,Ò  ;  ž,P�
ˆ ofinall¹ Rclose� )º\e 
 Ë ô ¸t__all__›"ø à")

def execl(d, *argó>""" ™ ±Execute the? autableKð with argument list �s, replac�"th.@curr% Áprocess. """u x v“ ’ ª e « 	  £vJ±  B and� anvironÏ ;envÉ  Å Anv =ü B[-1]K Dxecv¥  Ù T[:-1]© �pã 
 �`(whichä`searchòâor along $PATHŸ·î  Û �  Û ^pô µ
 ð , env)

    ExeðDcute the executable file (which is searched for along $PATH)
    with argument list às and environm áenv, replacings qcurrentG Áprocess. """ Qenv =K B[-1] pxecvpe(  , P:-1],h a)

defÆ 'vp" !):; 0"""á 
 
 Eù Bñ  í € áargs may be a A÷or tuple of string_É 	ý  ! 	N!>ñ

__all__.extend([2l", e	 p	  v Svpe"]pŠ i S=Noney ifž G@not  Ž ; Ér_func =¹e  °argrest = ( W pOelseC B >  \ Zœûâif path.dirnam!Á 2 1xec© Y*Ÿ T areturn} €saved_exÖ  ð   ^ _ÜQ= get:_ B(envG 0if | † != 'nt'ä  ï£ = fsencod� V  œ  E Z Dmap(' ,Ò  `  ¾fdir in e 1ull = ¡.join(dir,B  o 6try5   Å#(fC .,  ñexcept (FileNotFoundError, NotADirectory W) as å g 0las6 U&V !OS7 6  O 6if ¨+is™ "   # "= v 8 ÕVraise] ¨ Ã 
«7A"""RSs*qsequencd, ie pat will=	¨"th±  Ôd^Ýð(similar to a shell) when launch�a�À  *env* musth  anÓÙAvari7qdict orLb.  If 8 _,K 3os.z¸ Qused. üA# Usðocal import insteadfa glob �to limit,‘number ofS ð# modules loaded at startup: theðN os module is always loaded at startup by
    # Python. It may also avoid a bootstrap issue.
3 ñimport warnings
H `if envr QNone:  -   = Biron+ ò# {b'PATH': ...}.get( r) and {  0 �) emit a^ ‚# BytesW‡ Ñ when using pÒ f -b or Ôb: ignore the¾ J Dwith „s.catch_Þ &()Ì  ò .simplefilter("V )",� )ì  6tryD   ¡path_list  �  $ ÿexcept TypeErrorB  pm `if sup¡0s_b @_env|
A ”  t ˜ b™ [w]–  & š A(Keyš ,¥ , *   Jpass? 'ls #   5if ~  E@not Ù 
¶  *   ¢raise Valu(b  "  "€0canP ‚contain ^já } keys")F “ =Ÿ bm f º ` µisinstance(L !, ˜,wfsdecod8 Rp 
&f ` = def Ö freturnÅ a.split• ô sep)


# Change¬ð to automatically  ‚ putenv(©Bunse ó
from _collections_abc +óMutableMapping, 	 ¢

class _E£(( "ðdef __init__(self, data, en!Rkey, ,  v  N  ³ E .( 1keyìJ ,# V M# F a H  J  L  
' _Ù  ! 2atafý ugetitem 7keyÏ ÌZ 1 = è T [ ­ @key(A ÖÒÑ
t"# n  . C€original> t Î  C
7 s  & ²* ™  pJ ( ós,w ÐN 
î q Y $  r  »   éT! _ Xbkey] =‡ ²?del²w d­ a2 ‡ øÀ      del seólf._data[encodedkey]
  õexcept KeyError:    u# raise ù with the original key value9 
7 ñ(key) from None
+ ödef __iter__(self)| s# list(4 ñdict object is an atomic operationQ  ± bkeys =>  T ù )  1for²  in sr  = ayield 7  de*1key» ± >len° ¡return lenÊ v w è ?repè  8 ñ'environ({{{}}})'.format(', '.join(K  ¥   €('{!r}:  , ¸  ,Í ¥( ) O ,È2 in7 4¶.items())))Acopyé ³Ë  ¬ / ¡setdefault ,{m A  if D not‚ 
ž à [»" =© { ! z D__ioww, otherr  1 ‚.update( S N M "if» ƒsinstancS —, Mappingx  t´ åNotImplemented gnew = L 3   ?new² 8new± r² `K³  q{² %dcreate1 X¶ame == 'nt'õ# Where Env Var Names Must Be UPPERCASET c “check_strN  ] k  ~Ã.H, st7 +   äAType:ñ ("str expected,£%s" % typeq –.__name__K @o ± ®5 = ¶  Ÿ  =š  "f 4 ¸
ß p# Øv.upper(Œ  &U = {}U  
d  A g… ]°Felse3 Ä0CanÃ–Mixed Cas[¼ 0ingú àys.getfilesystBhcodingÏ ez  vðs.Õ !e( Àing, 'surroggscape'¡2ef ýÒ ãð value.decode(enócoding, 'surrogateescape')
  Âencodekey =   Adata Qviron ¡return _En (# ,  O @ pkey, deW   €)

# uni$ " eL 
 p = _cre¬  k()
del ã


def getenv(s Áfault=None):• ”"""Get ane ó ment variable, Ï  2 ñ if it doesn't exist.E ñ	The optional second arguL °can specifyg Áalternate deŽ C   ñ and the result are str."""o rcI.getß ó)

supports_bytes_* ò = (name != 'nt')
__all__.extend((".O", "C �"))

if  S¢def _check T(valup òif not isinstance" !, ® ™ )   ñraise TypeError("% ¡ expected,K “%s" % typK @).__ê &__Ç6� 
H#q ú +bdÃ *._Ìä ¼ Î  ‹ ©‹  4|bÌ« ¯2 I ³0 G ·­¹ 2 ‡Tb¾ ' š1  œ*"�dn fs(#c(<f�ing = sysc ¤filesystem (�eUs) e  &()§!fsC  e(T  eu  ¶ A"""E.  ô (an os.PathLike)0 orÔA) toë 0 ¡ ‡ M g  Æ Nwith¡ › … handlerªr¢ unchanged^ O ú	On Windows, use 'strict'H  å { �  =2temõ ‰ %is� ñ'mbcs' (which isÅ Ò1 )~ ¼ Š  \  9– = fspathK�  # DoesÌ-E y Dof `6 `U  ‘E! ,YŒ o   v# .\!e(  Ms 1 OelseC 
ËÆ 9 A"""DèAfromN ­ 27strà On
        Wiò4ndows, use 'strict' error handler if the file system encoding is
   ñ'mbcs' (which is5 udefault1 2).
. U  """  \ äname = fspath( ð)  # Does type-checky Dof `$ `U Õif isinstanceE •, bytes):q  … areturnØ  | „.decode(Ü ,%s)5 OelseC 

+ X sJ Re, fs[ =

f ` = _fsy uc()
del ö8

# Supply spawn*() (probably only for Unix)
if _exists("fork") and not F v . ‚execv"):¼ ¡P_WAIT = 0Ë CP_NO  RO = 1- ò__all__.extend(["> D", ".  BO"])9 ò# XXX Should we support P_DETACH?  I qse it c)  Ø Q()**2› #á Qclosejôstd I/O streams.  Also, P_OVERLAY“DsameB !s ÿ B*()?š Rdef _)`ef(mod¿÷ile, args, env, funcLñ# Internal helper;" p  b  ¼ 6 ption tonƒ  ‡!if§·k @(tupy Wlist)o  4 °raise TypeE«ñ('argv must be a ; ` or a ? 'Än  c    1notÚ ;[0]Úb IValuc ðfirst element canA ‡be emptyg 0pidÌMork(| :pidl u# Child â :try%    if� Y;Non‹      gù³~     Æ    ; î
@ nexcept™  NVt(127/ g ‰# Parentè 0if fD == 4_ R UQ# Cal–Ñs responsible‰waiting!a  wh¸1U Àwpid, sts = : Apid( 0Å    üif WIFSTOPPED(stK $   ‚continueM   Ã  i ‘status_to6 ûR 4  �€~?"""% ó -> integer

Execut¼@withíu¼`s from þs in a subprocess.
I• Á  
 ˆo3 31 Y 'oÏ deVð
it exits normally;
otherwÝ? ð -SIG, where SIGü ƒ 0sigpù that killed it.TA ÎÀ, args, Noneñ", execv)

    def spawnve(mode, file, args, env):(  , ?"""+ ñ -> integer

ExecuteP P withT °uments from òs in a subprocess) Ðthe
specified… @iron: P.
If § ò == P_NOWAIT return the pid of R 3 1 & ñ's exit code if it ôs normally;
otherwisep ñ-SIG, where SIG isx õsignal that killed it. """Ir± _Nfz©eªs# Note:®üp[e] isn't currently supported on Windowsçpm â&  Ý`(which òlooked for along $PATH)Ö7argÿ
bÿ­àÈCNoneápá‹pŒ, °QÙ y {l®ðp¯éó__all__.extend([<3", 
 e p óe"])


if _exists(0 "©°# These areÿz!by€TbasicþÑ� ð
# but can be easily impleX ¤‹n Python1l0*¶ˆ & �»î	ONq
ýr'  ±x Àe file with ð.arguments from args in a subprocess with the
supplied environ9 ð.
If mode == P_NOWAIT return5 r pid of Q 3 1 & �'s exit c\ Qif it ôs normally;
otherwisep ñ-SIG, where SIG isx ósignal that killed it. """
  Qenv =ÿ E[-1] rÈ €spawnve(è r, file,, P:-1],1)

5 ñ__all__.extend(["; Cl", 
 0e"], ²if _exists( Qvp"):C A# At·  moað, Windows doesn't imple  ] cvp[e],;  so) wo( Bhave# l# 0 ei0.* 4def 	Ö *‰  """Ÿ /lp'  ñ -> integer

Executep (which€òlooked for along $PATH)U
~
| ~ ~È	g
j )\´
‹µ(  ¯»ÿ79p‡ Ó[:p;p<0# S‰Ðy os.popen()
 Acmd,‘ó="r", buffering=-1Øñif not isinstance(4 3str!  ù raXðTypeError("invalid cmd type (%s, expected ste A)" %  S !))ki t 1n (— $"wïm LValun  r0 %rW   R ×  wF0 oré  vBNoneN_ +)S ]bort unZ Ò Seams"t  mp  I, ioà f== "r"v  ?' =I!.P­ m9  ›  ¢shell=TrueÚ(   vstdout=› _.PIPE8 À        bufsóize=buffering)
  ð#return _wrap_close(io.TextIOWrapper(proc.stdout),  @ Uelse:J   ` = sub
 åess.Popen(cmd,% v  ¯shell=True, Xtdin=h ?IPE7 Obufs0%inñ 
# Helper for pî `) -- a%!xy Ña file whose aa waits 0the+ ¨cess
class‰[ó
def __init__(self, streamŠ&  Q  "._  ‰& z  ›! =t   ^ • [ )M ." õ j 5@codeh Pelf._Y .Ù (' 8if * 6= 0` G Q None�   ÿ if name == 'nt'1 U 7 
‹ I % � ñ<< 8  # Shift left to match old behaviorU  s__enterx\  S- x¤W*args3  , 	Ha dgetattc ,ü 6 i & ¤â, € i¬ 	  	@ ò)

# Supply os.fd¿
˜  Afd, È g, **kwÒ  ¦àot isinstance(, 8int¼ ñ*aise TypeError("invalid fd type (%s, expected integer)" % B(fd)K‘import ioì 1io.±  x ¤ 
Û ðFor testing purposes, make sure {ñfunction is availab«!en áC
# implementa) qexists.&€_fspath( ø B"""RQ _   u represA  ofñath-like object.
Û  IfÛ� or bytes– Apass0, ipÐðed unchanged. Otherwn"thJ€os.PathLc  YPrfaceP uN ato getã £  @. If “     G 9not« ,è  rûdI �rovided R 3is C ,ì ,ö ¶ Q “ 1""" (if€ W c, (strR )“ $ j°# Work fromë ‡!'szÑmethod resolu @of ona magicˆ "# ' !s.  e _à=N  6tryÐ(   �1ath4 #._U'__8 ò except AttributPJ `if hasG4 I ð, '__fspath__'):
   draise
 Uelse:     ù) TypeError("expected str, bytes or os.PathLike object, "J  N  ñ"not " + path_type.__name__)9 áif isinstance(& vrepr, ({ &))¯ breturnO  ) E 
Ò Î q{}.__fsf s_() to P 0strá ê Ô 	Ð ¢{}".format± 	× ,’   7 A  É )ð)

# If there is no C implementation, make# ð pure Python version +
#3 ð as transparently Ðpossible.
if ­’_exists('('| 3 = @æ  ¹ B = " ¤"


class 0±(abc.ABC):
; ò"""Abstract base / 6for¶ 0ingÉ Á file systemùÒ protocol."""O @_ aQ amethodg Gdef óCselfÑ  –B"""RP>theg  —$esr! o’ù{  D   rDNotI¤!edJ� Ü – 1sub Ähook__(cls,  ¥ `if clsL} Â r_check_f $s(I 6, ' 't6 
´ ¯ !__— Â_getitem__ =ž\ ñ(GenericAlias)

9²ame == 'nt'ž C ò _AddedDllDirectory  ‚ ›pinit__(™,Ýô, cookie, remove_dll_d?  D  7 .Ï! == ô     _N  Ã W "  h / = >  ½ Qcloseº – _W . .” �® Ë 6Non¯ k s__enter)o Ã9elf  _Ë][*args; #È Ž q  ýp 1if 8  ­ Ï Ä   Ž -"<ûu({!r})><E { A #)>ï £ :addLá  cAdd a ì å¡DLL search .ó x HThis  rðused when resolv’Ódependencies °Borteq J Qexten‡�modules ({  0 itù  ^ T  ed throughäÎ)EÐand also by c2s³ R"$"Àory by callióng close() on the returned object or
  õusing it in a with statement.& 5""" •import nt õcookie = nt._add_dll_directory(path)- Œ µ _AddedDllD( #  ›  5 , f 
  q jremovet 9 #)
¯ ufnmatch „unctools $io
  nt|  o" Xposix $re% ósys
from _collections_abc ~ ‚Sequence& Terrno áEINVAL, ENOENT òTDIR, EBADF, ELOOP8 „operator; ¢attrgetter   ¹ AS_ISG  	 PLNK, 	 2REG	 3SOC #BL	 2CHR BFIFOQ Äurllib.parseY `quote_î Ü_bytes as url `


sup*ñs_symlinks = True
if os.name == 'nt':±-Zòif sys.getwindowsversion()[:2] >= (6, 0)<  4 • 4 ntª �_getfinalµ n e Felse3 ¤ QFalse,  U F † = None
I $nt Ñ

__all__ = [C Â"PurePath",   G WÞ  4 0 , ( ò]

#
# Internals
#

#8ð	 - guard against macOS `#p` throwødÿ
_IGNORED_ERROS = (�
&)
2 0WIN5 R6 ½ q21,  #  ò_NOT_READY - drive exists but is not accessibltE123,@ ñID_NAME - fix for bpo-35306r )19t üCANT_RESOLVE_FILE= croken •` pointðto itself
)

def _ignore_error(excepÙqÈ@(getˆ  1, 'á!',()Zb€ cC 1winx F v$)
« Ðs_wildcard_panx¬ ó # Whether this ! á needs actual  0�, or caniò # be looked up â lyba file10"*"û  pap9 "? [ ò


class _Flavour(¤º b"""A f  Øl™ðs a particular (platform-specific) set ofë h¼  semantics.Ì ä€_init__(ùt  “  �.join =  1sep 
; _‡ s> ,“ sE " d]6 Y pS  Ualtse   �drv = rooh%'' i ðreversed(parts)
    ñfor part in it:
  aif not 
    Œcontinue2 naltsep0 e =M ’.replace(, i, sep)H ðdrv, root, rel = self.split (M 
2  ifF  Æ >rel~  ç x ¢versed(relQ (~ )3  å ÿif x and x != '.''  +  paW ú.append(sys.intern(x)ª NelseG !ifê  l  ò n 	j ;rell ‘if drv orMv  â>drv  Õ 0# Ið drive is present, try to find one[0the  YviousÎ J   #þàs. This makes 5 �result of  Ÿsing e.g.C �("C:", "/ ÿ	a") reasonably intuitive=   : ­ ì    ø
%      2if ä_' • 5    Ý?[0]A 6 “ ]breakB 
 H ^
¥ ¨ +„" !re‘( `return¹+ 
� ’def join_   0ts( ,3 !ts 2F  2,^7ts2ë1"""T  AJoinŽÃtwo paths reïQed by `respecc9 (e d Â) tuples.  RÍ oa new + ±”  Joot2«ŸAdrv2œ¾EF2, [†C2] +6[1:*"elÔr n  ==c ñ p .casefold( 3) =Š m e  c# SameS‘=> seconds b@rela` ^ Ufirstm A   ß yÖ r:# Sv ðnon-anchored (common É —w ¨   ó


class _WindowsFlavour(_	 3À# Reference ¹. (ps can b Rund a ð # http://msdn.microsoft.com/en-us/library/aa365ñ247%28v=vs.85%29.aspx

    sep = '\\' 3alt / áhas_drv = True$ Àpathmod = nt I °is_supporte ò(os.name == 'nt')& ñ<drive_letters = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')Œ @ext_g Âspace_prefixÐ 0\\?Õ & ‚reserved+ A = (   ±{'CON', 'PR 0AUX yNUL'} |' úM%d' % i for i in range(1, 10). ?LPT. Z ð# Interesting findings about extended o!s:< 0# -·`?\c:\a³ A//?/ b and ' Å/a' are all Ÿ@ T  butD  ) cis not -v G 0way– üsolute; "relative"/ CwillK s  fail.ð	ef splitroot(self, part,‹R=sep)à  �qfirst =  Q[0:1]Q   Pseconh ; F[1:2 Dif (  apK  b  L \# XXX¿ ðshould also disable the collaps¥eof "."“ K ðcomponents (accorÈù  to MSDN docs).3 ´Alf._!_÷_÷(ê ); Ô   Œ  	#Felsef - †  :÷  Ethirc?2:3ctA !t�is a UNCÔ
� ?# v  2	ú# \\machine\mountpoint\directory\etc\..q#Ü  + ) ^ 	g @indeV ‚.›z(sep, 2Ž2if ) Z!= -1Ò  o  2ÎG  J + 1O  3 ##ð can't have two slashes‡Ya row² = a(after·pinitial: g º C2 !=Ä /+ Â   V , =ç  %   ×  ï ?len¼  #   2if |1    creturn' $ +Ða ]8?[ 6+1:« A  ÷   g Rart[:J ]  —
:4if ~Q= ':'®0in ô.	
ü V  m[Ø ¤   B+[2æ ` != và
        if fi×rst == sep:
  Éroot = first 0par   Å.lstrip(sep)$ ðreturn prefix + drv, N  , 4 
) ödef casefold(self, s)� D žs.lower()5 _L s;  ? $[p@ ‘ for p inƒ 's]P åompile_patternQ  S Bre.c2 ó(fnmatch.translate(D ñ), re.IGNORECASE).full- x vresolvep 0h, M‡ct=False{ 0s =  _ hg†if not s5 ½9¦os.getcwd(1 �previous_P ANone‰ 5 ñif _getfinalpathname is`  ) 
c  ifŽ :ict  I ~  Ðý._ext_to_normal(a 6(s)œ  = NelseS Btailìð = []  # End of the ® a after ­A one» Ufoundå  c   Ÿwhile Trum     >try†      ;Þ # >   ð except FileNotF£ _Errort 	¸sÐ  U   0s, ,` = os.Š.split(sf +   0 \€.append( 0  ifÖE=}X   � · ò> Î òjoin(s, *reverse­ ¿ Jö# Means fallback on absolutñ™  Ü’_0 ·PendedhŸ0s, ÎÓ=  #bspace_ ¯ U = ''ö  4À.startswith(C ( 9  ù   ñE[:4]@   |:[4: Z {'UNC\\'W  @ [ z+= s[:3F     ` §'\\' + s[3g .@ 7, s3 È ä 
È0# T‰ anE\¸rinto a !‚ DOS-likÔù |  Z .¡7)[1Ï¤is_reserveWq# NOTE:0Qrules5  Ùð  seem somewhat òflicateOð# (e.g. r"..\NUL"1F 1butƒQr"foo %).Ô €# We err› Å@sideÑPcauti¯3nd ø  §   D¦s which arÊ#g 0conE  re9 þ ¶ by Windowsz 4Ðparts:
        Ñreturn False
 ð   if parts[0].st
 Õwith('\\\\'):(  0 ù# UNC paths are never reserved+ l  p @-1].
  ition('.')ƒ ôupper() in self.] q_names
d Ðdef make_uri(& ,” ­ ñ## Under Windows, file URIs use the UTF-8 encoding.Y  ä qdrive =R .  qif len( ±) == 2 and  0[1] <':'3aIt's aP ² on a local6 P => 'œ µ:///c:/a/b'o  Ž Drest� ûas_posix()[2:].lstrip('/')3 æW ©%s/%s' % ('  ^ º ð, urlquote_from_bytes(y .¶e('utf-8'))i Oelseé ~networkë ¯host/shareò ¿ ?' +ž  ƒ.© (£gethomedir*@userL.ðif 'USERPROFILE'}ªos.environç  ?  Q 6 = # [? ]h el[ �HOMEPATHX 
:tryi  vh  L fDRIVE'f  * ÿ except KeyErrorK '^Í Ydrv +Ó  k · j öÑraise Runtime{ ñ("Can't determine /²directory")� ¶  if��
² Ñ# Try to gues´rG ñ.  By default allJ s{ _ $# v "ie± {0tedá ¡same placeÉÓ{amed byI �correspon-k  Dás.  If current § l point— âto nonstandard‚ c, thisñ Øis likely wrož × )if¨ º‘NAME'] !=„  › 
P 7 �drv, root.Rrts =b`parse_Š4s((,ì =   *!-1k  … y  < () "ƒ E  ¥"for %r" %þ ©4 à [º $a 0if !or(Ê "! =, ++ " +LRjoin(k >1:]† A  W  Ò.J F ?+  

class _P“Flavour(_	 Ð):
    sep = ò'/'
    altsep = ' ñ has_drv = False$ ð pathmod = posix 
 °is_supporte ò(os.name != 'nt')& ñdef splitroot(self, part, sep=sep):N  � !if A and	 `[0] ==) $  ( �stripped_I  ™ Qart.l (R Q  - ð# According to POSIX Æ º resolution_ ð# http://pubs.opengroup.org/online û/009695399/basedefs/xbd_chap04.html#tag_04_11’ !"A‚ /òthat begins with two successive slashes may b“ ×    # interpreƒðin an implementaÙ ð-defined manner,òœhough morM Athan~ 1lea/{ Ðshall be treak £as a singl  )".â pif len(Ÿ1) - ž´)×2v Ñ ‘return ''i * 2, 9 	f OelseD @ < |  €  ¼ ÂƒcasefoldÁsµ8 s- Ÿs3  P 7   ; åompile_pattern<  u Bre.c2 ó(fnmatch.translate(D q)).full i ü&vea h*1ct=ûl " ºE.sep‚a¢!or€Dth._ " •seen = {}  _{  „,…tm  !if p.startsÖë B ½b  @ Afor [#inI  €D bif not0 8 n== '.'p  ] Ù# current dirw     zcontinu^   k  !_ ` /pa_ 
 õ d, _, _zrEiïä •  R O.endk	 À 0new+ w ! +5n Z <   @  ZF  ,o 0in J�qAlready$ Q this[—  � ¾  N [� ]) ‰Qth is?Noni  R   ÿ# use cached valú  '     Ô# The symlink{ -ðd, so we must have�+ Jloop€ O   ð	raise RuntimeError("Symlûink loop from %r" % newpath)
  ý# Resolve the symbolic link, Mtry:  P ðtarget = accessor.readD (y ÿexcept OSError as e] ÿif e.errno != EINVAL and strict5  – _raise° p# Not aï  ¥ ’, or non-R ò mode. We just leav BP ¯untouched.!  : $ =†# ?elsý Sseen[Dò] = None # not r¸dÆ V  y _- ( ", ° 2 r  2 . #n 	o preturn ,  p# NOTE:ðording to POSIX, getcwd() canÌ bcontaiA · componentsL �which ar¤ µsjÁbase = '' if„ ð .is_absolute() _D os.v W ·  I ,X( ))Asep
1 `def is, öerved(self, parts)…S VFalse8 …make_uri5 'th4 #l‘represent‰ J1 us6ð	he local filesystem encoT,›  ¸ð# for portabilityoøother application6d r= bytesñ M Æ 'r ð://' + urlquote_V_5 bC )ç £gethomediré ‡usernameí !if¾ : Å b� õos.environ['HOME']¯  ; P1KeyQ
X  !  imI pwd8   b 0pwd$bpwuid(0 
 •)).pw_dir8  Q
a ] Ð 	n Dnam(k  Ÿ Û ê� Runtimeÿ ð("Can't determine ™Å directory "Í  b  "SA¡ ò	


_windows_flavour = _W F ˜()
_posix# P ! £

class _A5RP"""An5Ip implem! am‚icular (	�-specific«±not) way ofÞ Ž D ¨As on\ Õ> U."""
ˆ dNormalŽ (˜ "):â0staä0os.
  l   =^  Bopen  
  `listdi,3os.  Escan   RchmodI   ðif hasattr(os, "lchmod"):
      â  lchmod = os. ¡
    else:
   3def) ö(self, pathobj, mode))  - òraise NotImplementedError("a ñ() not available on this system")
y Rmkdir™   bunlink   ðif hasattr(os, "& "š   2_to9   d 
ç Ñ@staticmethod   Ð ý cink_toþ gtarget]  ' ÷  [?inkø %rmø  à brename¿   Eplac   Vif nt›ð if supports_syms  Â  d  
* /  & r(a, b, Û_is_directory% 8 )O ! H 
’ à# Under POSIX,ÎM åtakes two argsÓ ï; × hreturnu  : È4uti¹ žñ# Helper for resolve()œ  Y@read£r pKp ( " [  @ _owner= :tryø im6 pwô `e Ápwd.getpwuidQ .&(p À.st_uid).pw_Ÿ¿  < �except IZ ý
s RPath.¿ s) is un·/ed) ð QgroupŸ �-ð 5grp°  ´ ð 0grpð ?grgð gð /grð ;¿ ð ð
_normal_accesso!!_N A ñ()


#
# Globbing hjPs
#

,‘_make_sel£ Êótern_parts, flavourAPpat =ï# 1[0]8Rchild6 # "1:$  if< † == '**'ó
cls = _RecursiveWildcardS• a Aelif8 0 inG ? ?QValue]�("Invalid'  ª :8 ðcan only be an entire$ Âh component"um  »w‹ @_patK    &º ± 5* yPreciseÚ k0cls^ ', K�'

Ô�functoolÛ„ru_cacheà
Ñ5 = . $.l, 3()(' Àelector)


cólass _Selector:
    """A s ñ+ matches a specific glob pattern part against the childrenL �of a give) qth."""
 òdef __init__(self,9 _P ²s, flavour)“  —  % .] $ ( =2 U  ' (if ?   C ôsuccessor = _make_ì (^ ‚ Z B ådironly = True  Oelsep ´Terminatingu%()B b  VFalse3« S_from6·parent_path-ò"""Iterate over all ¸whs of `: `ç•d by this“ q ðor.  This can contaiÒ{ 1 it] à Æ    “ Ç_cls = type(p ó Pis_di‹. . � PexistD !  ! DscanC � 3._aæ.  0 rif not g 	• 
½æreturn iter([]²  ï ;�à ,_ ", ­ #, † R)


cu :é	Z  l ,jê` Ä Xyield5 { uPrecise‚)‚ 
žOname¤ * 0 =  ub .õ96try—( =.þ0relj^.Ä ú > Bif (;0 if&$f.  ð )(D � ;   ‚for p in: ‹.ï < â Q  îq€except Pp„ssionErrá4 Ê�Wildcard?patI$ =Ú€.compileº I 2k0xDwith¿	/4 as :_ite c`entrie»Slist(6_itç  '   + y 	 >iesM m!  K ì   0# "^ ày.is_dir()" caÿ
n raise PermissionError
  ÿ# in some cases (see bpo-38894), which is notF °among the ep âs ignored by _ _ /()F  ife ÿ entry.is_dir():/  Ò �continue% ‘except OS_ as eN } 
¬ e l| � 
cname =é   C àif self.match(# Š àpath = parent_ ð._make_child_rel B f  ¥ Qfor p p ðsuccessor._select_from(D ", “ÿ, exists, scandirš  ] uyield py ’�
•ñreturn


class _RecursiveWildcardS™ Dor(_
 1):
c Ðdef __init__(@r, pat, 0par¶ hflavou¶ H .= 8 k piterate©…ectoriesw �80 ½Ç  ::tryDwithr(ï)ØZ :_it5  J  O¶ies = list(+ 
‰  + y 	 ?iesM "y_	~ = Fals|¼  ‡    W >  éû  *   -¿»·"if’ß :and�symlink” %‹ö Óó  ÷  ‰‘_d j W	 G  go Z‡ H X\å — ‹ed = set-  ˆ ž�: 5lf. 	¶ï  ;    Zàstarting_pointì Ì .gà  @õ c ½I« (y ¾0 ³  Aif p‘3in ;¡À              ‡yield p
  $ ™ed.add(p)+ ‰finally:  A 4 fclear(5 úexcept PermissionError@ ò(return


#
# Public API
#

class _PathParents(Sequence)E ó
"""This object provides s' ñ-like access to the logical ancestorsÏ ðof a path.  Don't try3 ñ
construct it yourself."""7 ð __slots__ = ('_A ±cls', '_drv Aroot	 �parts')
9 Ðdef __init__(S ,~ Ø  Ua# We d‹  § e½ @inst¹  š °avoid referb cycleÎ  @  U .’ € = type(¡  # Qdrv =~ .µ Ÿ A  ¿      Ö !  â 3lená Û 6if { #or  ] × ~   A len# Î …rts) - 1† Oelse6 – sgetitemš Z, idxŸ  idx < 0 or 5 >=… ( £ ¡aise IndexÝ(K � Á í  |ðcls._from_parsed #tsÞ Gdrv,,G  i  h `rts[:-Ä I- 1]rCrepr÷ Ê ¨ b"<{}.pk“>".format� ¾ ”_name__)
¡@Pure¤(†W ‚"""Base Åñfor manipulatingoâs without I/O. M  ©  esõÑ a filesystem9 ñ and offers operations which57øimply any actualG  r €  Depend� !onÝ f {m"ti² %a œ Swill 4seither  @osix 9a‹  5 rWindows «ö.  You can also k #e R  ofòBÙðdirectly, regardlÙ(of¼ .w ¡  Ižù # 1str¸Ahash	 pÞ ƒcached_c Y 	hónew__(cls, *args Z E"""CU8@ath @ one<ò several stringsñ`r exis?p  L  ^Wys.  The7  ¹!ös are combined so a01to È  a— on%Aizedr,]ò is incorporated inV‘ 6new(‘ ® •  `if clsQ Ä 
Æ  =K >`if os.‚� == 'nt' ( P}Ð
        retuñ$rn cls._from_parts(args)

    def __reduce__(self):   Á# Using the ; ò tuple helps share interned path& @  when picklH Srelat+ %s.' qreturn ~ ².__class__,m   )¶ @# amethodF Ç `parse_Ý `(cls, 
 	Í ñ This is useful œ ñyou don't want to create an instance, justi ðcanonicalize some constructorx Wumentâ ¾ U = []F f* 0 in/ ss a Tif is} Ç(a, PurePathÎ  (   Z R+= a.Þa   Jelse\   �a = os.fs³9(a)3  ! � ?str|   + ñ# Force-cast str subž esM  Þ(issue #21127m  F Æ î.append(str(a)) Í  ? ýraise TypeError(Ñ  %   A"argœÁ should be a· pobject •n ooLike "M 4 ¿ à¿str, not %r7 i% typeâ B ¨rlavour.Î( ü
Þü·, init=True½�# We needŸPcall 891 oní}a, so aÊ0get “# right f°   D aQ€.__new__’Ò¢drv, root,10 = 6 ÂŠ ¥ µ   ™drv = drvm  ._K ! =R  :" =g   à:nitc  3(ª š  1{0sedN tsð ,ª 	è ’ ] 1 # /._ÿ ‡Pormatú ˆ if q ¾
‹v ð +Ö* +BjoinF[1:]¯#K «> T?ú i¥ °# Overridde ç`crete OBpassI ¡make_child¼‰þ2 } Ò Àts(
        ã    self._drv, Droot qparts,     )
:   creturn: °from_parsed >ts(9 : Àdef __str__(€ !):  Q B"""RT ðthe string representation of  õpath, suitable forF @pass9 õto system calls."""$ 6tryw  { 	Ì &stN úexcept AttributeError<  Æ .Ò $ =Pormat&  T’  …  > Œy or '.'F Ë  w fs9z4 "tr”
4 ‚as_posix ù ¬P with§vward (/FjslasheŸfJVlavou�© ö.replace(f.sep, '/')½ ~__bytesð 
¾ % iñ .  This is only ¬ùrecommended to use under Unixp· ²os.fsencodeP«  éª : Á"{}({!r})".f]@ ó.__class__.__name__¾·)aas_uri: v  ù as a 'file' URIË bif notéÇis_absolute(R ’aise Valu3±("relative c °can't be exà2sedv  u  t ""øfV.makeÎ H‚@propert¢òc(ó ð# Cached casefolÁ) ,£P hashBåand comparison÷=cZ _y 4 G	? .°  [!ts× . /~G3	S *3_eqpw, otherÃæ±isinstance(" §, PurePath, q åNotImplementedþ 	Â2 ==u .+ n± äp ˜ #._ ½  ¥¿ Œ œ 4 • “ 6 ! =R(tupl¼¸ )z : ´ #lt² q! ì  ‹š$£˜Àemented
    ô    return self._cparts < other  

) °def __le__(- ,$ !):  ! ñif not isinstance(F ã, PurePath) ori ¡flavour is4 ) #._ S  W ¡ åNotImplementedu   ’ ¯ 2 <=œ  À /gtÀ �>¿ �>÷
class_getitem__(cls, typeHÓ3cls¹õrive = property(attrgetter('_drv'), 2 Ádoc="""The dE ‘prefix (l>  �PUNC pœÒ, if any.""")y Orootx   y x  ' q of theh g  @Ù Å  gaanchorgÊ Ôconcatenation[ ß @and q ,Ú  ''Ë T  T # =�Sdrv +  3 ( ~/ ¡ OnameŸ Qfinalë ¨ componentõ i k�   qif len( p) == (1Ÿs .ó á ô ½ ‡) else 0- ó Ë %''X  X O[-1]à asuffixo T 5"""J  Të æ ‚'s last = ô d  � ÑThis includesðleading period. For exaèv: '.txt¼ ~  €Ë  — @i =  ¶.rfind('.') ‘f 0 < i <] ' _) - 1o  E[i:]>  b* "''â &	/esH	dA listÇRD O4esePO sPæ['.tar', '.gz'Ú YfX�endswith[[Z  E‘alstrip7 T�@['.'�u  f% "inu Qsplit; O[1:]¶?teml «ðpath component, óminus its last suffix."""
  Àname = self.  @i =  ¶.rfind('.') àf 0 < i < len(' e) - 1:"  ^ areturnE E[:i] Oelse* 
' �def with_[ (� ,H )8 B"""Ra ¡a new path4 ‘ the file2 ‰ changedõ fif notõ V ¸ ñaise ValueError("%r has an emptyY B" % š )ôdrv, root, partsZñ _flavour.parse_ (8,> @if (˜  õ 1 org �[-1] in [.H Bsep,À  faltsepg Ë `or drvL  •    ° g) != 1Q 0 rû qInvalidŒ 1 %rö    · è¡ 0romà 0sed !ts$!._#  ‹ ,ç s  3 ²  [:0+ [€ +])*Asteml  ,  Ù * - %× ŒRtem +{O‰ e‹  � ·W ” A  IfÔ â7 �#noÒ³, add given .6  & iÅJ ástring, removej ‚ Afrom  z .1 ?fâ& €if f.sep½P Ror f.§F and i· ‰ŽQ � J h  T 0.st— ÏÒ   == '.'� ) ¢   Ž   k uDold_Å ™u ( 
{  � í Ú²< ­/ 0[:-PY .)]B H_S Y³relative_to–o*other– =1 TQto an1  Óidentified byEssed3–arguments…�operation‚ ðpossible (becausx#is J @ sub}" o‡ <), ­¢À   """
     ò6   # For the purpose of this method, drive and root are considered
   ò	# separate parts, i.e.:
  h ð
  Path('c:/').relative_to “')  gives% ?/'); /: õ raise ValueError< Æif not other�  • 3 2Typ2 ö("need at least one argument"Œ Ü ‘ = self._ l 5drv 5drv 73    !ifT
™ 2absY � = [drv,$ 2] +YE[1:]A Oelse> 
Ÿ 1to_N 0to_… E, toh Ï �se_args(1÷  if.  7 
n 9to_¯ d  µ f ¸ J 6 ê ˆn = len((   %cfzòflavour.casefoldä H @if (È � or drv) "` == 0 ME cf(Ò €[:n]) != 	x 
–formatted„   z #se�  ¹ Æ —Ê‘("{!r} isÈ!in«psubpath«  "Þ  B  A" ORÇ+ 4is sÌ òå [ Ÿabsolute.J R " .ë P(str(30),   Vted))Í creturn)Jfrom"''Ø€1€?'',Î „ 	 ¨Qn:])
7 tdef is_ë  ^ © 1, *í )ºB"""R£ @True‡  ,Qto an<   ‘or False.o  � &""66tryb    } 	ìˆ >  % + ˆ  gexceptÓ
X 3 ‹ ú ‘@propertyC  ÿ¨= ð"""An object providing sequence-like access tonP  § ³components ˆ¡filesystem. # We cacheE ` tupleR ¡avoid buily Qa new§±each time .º x #£“ €ed.  XXX ¥ neª Eary?/ „,‹*_p\ g‚Attribut. ÷ 8 " =É V ó . m ›  ’@joinF? 0, *k
“`Combin3!isT0 wié ne±useveral™!s,Ìt ah  …  S h   representäðeither a subpath (óif all arguments are relative
  ðpaths) or a totally different  ÷  (if one of theQ %isG ¥anchored). 5""" ñreturn self._make_child(args)
' ðdef __truediv__(, q, key):   ° 6try   X u(key,))9 ÿexcept TypeErrorF €NotImple.(ed– r— )ófrom_parts([key] + ¤ 0‘@propertyï  H pa¾C>ò """The logical % Ö ê.³Sdrv =ª 1drv\ s5oot Eroot Ð    qif len( À) == 1 and (f 0or H ª h 3F 	ïX3sed_Adrv,K ,Ý sts[:-1]_%s& “A sequencô!is	+'s<s1� a_PathP�\ J¿is_absolutew  bTrue ie �D is / Á (has both aã  ?,. µapplicable,(‰a drive)  cif notÒ qFFalsÔ 8 Ãflavour.has_¼AboolÎ . o †±is_reserved  áB"""Ràõ ˆcontainssäspecial names U ï !by™bsystem)nyü È  T$._Ä   .GÂ Qmatch¼  Rªth_patternÊ ˆ Ó 9 H !es¦ PgivenP I .%cfF¬ …casefoldl  !� h = cf( V	tâ ^ Rparse (H D@#paF ?’aise Valubt("emptyé "’ 0if : ÿ  !½ š7drv[
–%if	 D  ÚE ‹
c ^¤ š
ê ËG) !=Ý
- Ä   K  =(�E[1:]ˆ .eln >m àreturn False
   ðfor part, pat in zip(reversed( Gs),  "t_ 2):
B  ó if not fnmatch. AcaseE _ 3  9 Åreturn FalseP  ðTrue

# Can't subclass os.PathLike from Pure ð and keep the constructor
# optimizationsç 5 .Ï ·se_args().
^ ¤.register(- B)


…  @osixy   1"""  6ath·  iñnon-Windows systems.
÷ £On a POSIX ð , instantiating ç sshould &Áthis object.K 0How¿ç, you can alsoN óe it directly on anyu A 1"""I Ð_flavour = _pì   Ê_slots__ = (ã 4 ‰ 	
 |wÏb# Fileòp-accessÔK&esU?athLAthatÛCmake3T call8 {õ  represents a f�  é�h but unlE¬,*aoffersäÙmethods to doh  8pàz�s. Depend×  on{r0 ,J Í < DwillÇ`eitherç jÀ o ý  I p ?. YÝ8a PB @  õ“  0can¶ž He a 3  	˜� or vice "a1®  ã"'_ò2or'y )óðdef __new__(cls, *„`, **kw
 . if cls is e [     =´  if$öname == 'nt' else› `self =\  ._K 0ts(~  g1it=™)1 æ 8 .óÚ.is_supportedœ ÿraise NotImplementedError("z  %rVyr+‡ å   % A0.__ô F__,)± ª Vinit( :  ‹%   ¦s  # Private ÀXP arguÖ .2 Ütemplate=NoneO 
Ø+  Ý ‹ 2 
E “ .D4 = 3    è> Àr = _normal_ñ#accessor

    def _make_child_relpath(self, part):)  - ð## This is an optimization used for dir walking.  `A —` must beH �a singleb à relative to tb  ƒ ./  E @s = ” "._ 0+ [	 ]% creturn$ @from) 0sed !tsÐ c._drv,# Brootá 's)�_enter__1 û _ 	. 3xit- §, t, v, tb7 õ# https://bugs.python.org/issue39682Ã ð# In previous versions of Blib,Òmethod marked  ! 7 asK ðclosed; subsequent attemptsgðperform I/O would raiseÙvIOError€÷@funcíðality was never docum7�d, and ha• ·e effect of–  mað Path objects mutable, contrary  €PEP 428.P6x 3.9 thF_å  Ù aribute– cremove� O1­de a no-opÞ $  Á _R)/__eãA) sh(Ðbe deprecatedñ ß { 0 inª v futurek Gpass>aopenerjù
, name, flags, mode=0o666LaA stubhBthe @ A arg€ 7pbuilt-ižEen()› ¿$._.A  y Oraw_& g=0o777Ÿ 5"""o 3Opeiä0oin,(by­3nd – 0a f' µdescriptor,I Ras os¨ f) doesMp I !ß Â# Public API”b@class�  zcwd(clsè RlQa newœ  pã 0ing„ ›@currs1worñ‘directoryY  L3(as Ped byç 0geto /))å 
ucls(os.- ½ Ohome¾ !puser's ?  Ñº ' (`qº  p.expand< O('~'Æ  Ê  )._flavourÒ  r —dir(None)ˆ@same$­`other_u ˜0whe!  '  ³ — H ¢ or not asŽ X –	 g .9  ) (× $st¡Gstatz6tryA ù– 0  a 
6 ¢except AttÙ’H ø‚ \ ð )
        returñ)n os.path.samestat(st, other_st)

    def iterdir(self):   ð2"""Iterate over the files in this directory.  Does not yield any
E   ’result foD €special œ ø s '.' and '..'.|   8 @namew  £ ÿ ._accessor.listº   u 4if 5 Q{'.',a }Þ  $   0# Y± `ing a “ e objec¯ õse makes little senseœ  B   zcontinu 
³  D  _child_relh (Ÿ †Aglobƒ,‡ OternŒ
¡is subtree?l �all existÏ ¬9(of�Àkind, includ& Ä ies) match  ìägiven relative• ¤°sys.audit("Ü Plib.P{ Õ 0", × > ¤$otZ 
œðraise ValueError("UnøUptablŽ ñ: {!r}".format(pat9)c •drv, root �_parts =• ò ._flavour.parse (H &,)I ‘if drv orN ¬ ãNotImplementedµ LNon-Cös are unsupported"g 1selSA = _4 d(tupleš © )ZÅ G  4p1P .H Q_fromf] Á@pr»* :3 ä"""Recursivelyô~ vŸB~,Ì@wherF � æ ¡>·¯("**",) + H\�absoluteKB„turn an % ² version ofb M@.  TnPfunct Uworksýe¦i0 ðh doesn't point to3tÖ.Þ ï@No n3AlizaT  Î one, i.e. H™ö will be kept alonghÐUse resolve()p 1get-scanonicë  aA; 5"""È õ# XXX untested yet! "if®4is_+(L Ò ðreturn self
     ñ<   # FIXME this must defer to the specific flavour (and, under Windows,
    õ# use nt._getfullpathname())% óobj = self._from_parts([os.getcwd()] +!  É, init=FalseH  ._  (template=U ! ±return obj
} Àdef resolve(* t, stricY :%  È 5""" AMake
 Ë £ absolute,I ñing all symlinks on- Åway and alsoK €normaliz5 ðit (for example ª   ôslashes into back rK z%). ´ s`¶.÷ þ 0Æif s is None D# Noä ú �ution => Å õconsistency, raise an error if£ J  VLàdoesn't exist + sN ibidden5  ­f.stat(­  M è !trÍ.›k ¸ µw we have nÄ  `¨ ‰ °, it's safeö¦Fe it_  -edX @ @mod.   &(s¢ è(, Oed,)Ö8 &)¸R
 {‘result of 9  ) system cËÂ0is Ï e, likeŒ#os† ¼k u � ¢._accessor7   )‹Bowne¼¶ `login Jº Qfile C ˆ 1 0‰ Rgroup ?, ‰ ?gid‡ F r 1pen ð, mode='r', buffering=-1, encod  £,˜ o!s= � newline ^2Ope¬J¢pointed by
 þÂÐ!a ' ¥object, as}  U built-in oÄ a) func!(1io.4  ø ô ñ ,ß ,Ú ý   N !er
"._ ë¡read_bytesj1in 2 – ù@ad irnd clos BwithÎ � (Ü†b') as fr ¿ n f.© (¹ Atext¸ â Ô Àfile in textó mode, read it, and close the file.
  5""" ð with self.open(F ô ='r', encoding=	 ’, errors= u) as f:I  \ �return f.‡ 1()
 ðdef write_bytes(m v, data)> “ EOpen¶ A in 8 á J ? toå ñ# type-check for^ ñbuffer interface before truncating'  ;È  á Ðview = memory (È   N?wb'-
Ó (N 2Gtext1–ENone’  M S L)ñif not isinstanceW, strƒ  -°raise TypeE9 (',€ must be0 ,J U%s' %B 9   8 õ.__class__.__name__)5 wÅ-˜ } ˜ ÚAlink–ñ ÁR y@path®QwhichP�symbolic F  points›< =�‘_accessor[ ; � Dobj , Àfrom_parts((E æ,), init=False7Pobj._  (template=�! Ð6objËQtouch} ,Gÿ=0o666, exist_ok=TruePCreat’!is“ ¹ (bgiven å W ò , if it doesn't_ ("if 6_okQ D°# First try„@bump\ 0ifiàuon timeB2 àImplementation¡qe: GNU ø Q usesÇÁUTIME_NOW op* +ofJ  × ub £nsat() / f p() func7 û € :tryÃ    ”.E �ù	x ‘except OStM ‚# Avoid (  ã ‰chainingG  x Ipass NelseR %) òflags = os.O_CREAT | eWRONLY) I8
Y F |G EEXCL8 %fdéAraw_·/ �¾1os.7(fdÁSmkdir?îâ0o777, parents$Ï4ž éÐò	a new directory at this Õ ‚¹îê« Û ¾À FileNotFoun—dError:
  òif not parents or self. 1 == 
3  > YraiseI 7 r.mkdir(D ñs=True, exist_ok ); 4 Tmode,Ž X=Fals; D ? Ÿexcept OSÛ  P# CanÝ ðrely on checking for EEXIST, since the operat  isystem¤ ð# could give priority to other eZÐs like EACCESKYEROFSG oÉ  %  ¢ =0is_7)nI  def chmod(4  , 12 1"""'  ¤RChangÛ ápermissions ofî Rpath,± 2os.S %).= I  j £._accessor,    
6  š lH  Í R L(, )Åi™ @ poi�Ñto a symlink,·  !'st  ç Ü Qare c÷ Qd, ra›ÿthan its target'så Ê æ  un� � X ngÚ¯�PRemov�pis fileú F � Iÿ ñis a directory, use rm† instead9 Y6tryr  ‹¼» E¿FileNotFoun*Hð 
i  m š ²  ‚ î f.  Theþ ï must be empty÷  d æ y ¶QlstatµŽ •% ”. F ÿ
us information is returne›8 Šå Ð å arenameæ ,ñî R* ` this  Ì & .X  Ú ’ @ may“qabsolutÎ³relative. R
 E Fs ar*Äinterpreted 1 z 0cur…A wor¦p, *not* \ ‘  Ð·Path object¸ Rss; Q new &  Baöf ñ!to" â hD
n¢ 	¶’_class__(c )Z%_eplac³5‘, overwriÈð if that path exƒists.

  óThe target path may be absolute or relative. R
 + Us areH µinterpreted1 ð to the current working directory, *not*% I  0 of   P— gobject¸ qReturns" 2new& àinstance pointk ‚ â .j 5""" ðself._accessor.replace( , )- r|   ².__class__(d )[édef symlink_toH P E_is_í …=False):d � ‘Make thisx$ aZ ç 0Not>  Ë0derV°arguments (¡ ‘ 2) iPpreverse+ 3os.Ç 8, ,#_ 	ð ' ƒ $	
²pa hard G 16üis function does not mfW Bto *ß%*,¢Sdespi[qimplicaQ ·a Dand r€ names. vUorderN %of% %s @ Õ — ™…_to, butK `matcheË#atÄ H ]Æú * ŽÔ # Conveniecà ±s for queryqò he stat results;   ex{ßwWhetherë4 {6try/ ÎÊ  | («úexcept OSError as e5 !ifý�_ignore_e' (‰ Z   Fraisï º}q QValuet 
o ñ # Non-encodableÑ< U qFTrueP?PFis aX~ qS_ISDIRq .g�.st_modepS#å ±An't   Õ dbroken	Sð# (see https://bitbucket.org/pitrou/üÖlib/issue/12/Ó –ë:²  'bis_fil{(€regular ? p (also 2ð  for symlinks p“ointing
  õto regular files). 5""" Etry:  ; õreturn S_ISREG(self.stat().st_mode)0 úexcept OSError as eM ðif not _ignore_e' :(e)% v EaiseX   û# Path doesn't exist or is a broken symlink8 ö$(see https://bitbucket.org/pitrou/pathlib/issue/12/Ó  { 7Fal” ì QValueï 
Å ð# Non-encodable c 	˜ 	U  Ádef is_mounth£ÑCheck if thisY aPOSIX ?   pÿV  Á > “# Need toCÅand be a dir1 ¨íj0s()m ½ wis_dir(¢  h Ô   SÑparent_dev = O  X5dev� jV
gr Z «S 0if $ 2!= z  Œ Y 6Tru‡4ino± W 5inoª M (  Ù / ½ / Š  ! Q Ô	|Whether�symbolic î1LNKu &.lí ïk R  =•TPblock&1iceú^‹?  s?iceŠ#BLŠ‰u x¾Ocharâ' > _acteræ&1CHRZ-oÀf not _ignorÛe_error(e):
  Yraise û# Path doesn't exist or is a broken symlink8 ù%(see https://bitbucket.org/pitrou/pathlib/issue/12/)C §return Fal” Ðexcept ValueEÈ 
Å ð# Non-encodable c U  ÷def is_fifo(self1"""#  &ÁWhether thisW UFIFO.% 1 :tryœ Ð @S_IS6 m ö .stat().st_modeè !OSå Z as eN ßif not _ignorÔÿ sosiÖ9 ØASOCKo ØÿI¡expanduserj
Ù" R5Ra new§Rwith 5  ed ~ and ~? µ constructsÁB(as ¨�ed by os.C.@  6 £í@if (�“ P._drv% Op._root)w f  P Pparts   ç[0][:1] == '~'á  8 “homedir =2 ³flavour.get „ [  K 61:]µ  C á @ Arom_, #([A 3] +  [A ½ > à


class Posix)( e, Pure Á 0""" B sub5 ñ
for non-Windows systems.
k £On a POSIX ð , instantiating  šcshouldµžbobject¾¥ä__slots__ = ()¸ {  ˜ º  ¼ 	' Ÿ 	¸ 
 º ; Â´Qmountï¨   Äð NotImplementedError("Path.ñ>is_mount() is unsupported on this system")
#! /usr/bin/env python3

"""
The P ÿ  Debugger Pdb
= ä

To use the d1 ó	in its simplest form:

  `>>> imŸ I pdb ñ
pdb.run('<a statement>')
™ a �'s promptì À'(Pdb) '.  Tè °will stop iú ðe first
function call 	b ÷.

Alternatively, if ƒ € terminaQðwith an unhandled excep] p,
you c  seÝ  ª Post-mŒñm facility to inspect:°contents of «
traceback6	´ 9<€  9 > n3pm(^ðcommands recognized by� Úpare lis^qnext
se\q.  Most¡be abbrevi5€as indic ô; e.g., h(elp) means
that 'help'@ ô typed as 'h' or ‚(but not e a',
nor H HN  : ¡HELP').  O¨pal argu] s Ô ð enclosed in
squ ·brackets.   Ç .q syntaxE Psepará ð
by a vertical bar (|)dñ blank line repeatsN p)Dous W pliteralŠÞ E 
'|±', where itŒB  ˆ1 11[ Ts.

CÎY	Ÿvdoesn'tè¾ passumed›#be
„Qs and( Wexecu¼#xt» ™³gram being
²3d. R Ösçôalso be prefixed ^pexclamaV¡
point ('!Ãæýis a powerful waS?proˆ  ;5ðis even possibleó ðchange variablesp*8ps.
Whenù‘ LQoccurHsuch1,×* Àname is
prin= Ä•"'s Ò Ü� *d.ù ×�s aliases1ichK°save typing´ ¯%    
h   ¢meters (se¶J  y  entry) whS ðallows one a certain
levelëuadaptabÎ Ì 
‘under exa2äion.

MultipleáPs mayùRenter§pa singlbEne, O†�
pair ';;ëNA�telligenc[b appliÁ; 1ing‡U s; Q
inpu:€split at &^ ,#if,éamiddleü @
quoÅ0strm0

I-ñfile ".pdbrc" existðyour home directory^W …current
 ,w 0rea�xt G˜ ðhad been typed aðRt the
debugger prompt.  This is particularly useful for aliases.  If both
files exist, the one in` ð  home directoryX äread first andO €
defined5 ðre can be overridden by ´ local file« ƒbehavior4 �
disabled2 qpassing: "y ñrc=False" argument to °Pdb constru« Ô.

Aside from¥ Þ 3cis notÞ  lyCPgramm �; but it
M@mplel Òed as a classZ ‘which you¿ `derive dr own k 
2 *, . @makeQ Pfancy	  G ”like.


DÙ¬commands
= Ñ

"""
# NOTE:sactual 3 A doc$Pation¼’collected½ Ðdocstrings ofA $
#< sÝ�is appendÙð o __doc__ after0 
phas beeð Ä.

import os
 $io
 $re
 %sy 4cmd 4bdb &di! %od8 5glo# dpprint1 dsignal einspec utokenizG ”traceback0 ²linecache

²à Restart(ExcepFð ):
    """Causeå ŠBbe r3  do%! „d pythonh.¾ M  æð

__all__ = ["run", "pm 0Pdb sruneval 4ctx
 !al Aset_Ò !",£  Z  ª ¡post_morteN phelp"]
°  find_funcÚ (	 Qname,Ÿ 
 í ðcre = re.compile(r'def\s+%s\s*[(]' % eescapeH !))ˆ 2try4 ‘ Tfp = ˆ`.open(m . ei† OSError9 ±return None(  ©bnsumer» §`nfo exòs�¥ Õ›1; vwith fp\   & @no,  ` in en\ �ate(fp, #=1 É   Ðif cre.match(9    $ ¸ \k !no“ & Þ š�getsourceW Ss(obj\  < 3 = ã.Ë2 - V %if qisframe Ú`obj.f_I!al/ Ÿs`# mustËpa modulQqame: do=0try]ð cut a block out”!it… ¼ †)elŸ m]   ~ 	8  ø 1getv € s[+ Tno:])#"+1ëblasti2 q(code,  W êÁs = list(disU 3 ÿs7 Õ ’.reverse(î Li}  I* Ø "if} V >= i +
ð0


class _rstr(sñ#tr):
    """String that doesn't quote its repr.""". `def __ s__(selfF  J preturn  ðB


# Interaction prompt line will separate file and call info from code
# text us  �value ofF ‘_prefix s¼ �.  A new`  M ðarrow may
# be to your liking.  You ca­ òt it once pdb is imported v  the
# commX P"pdb.f € É= '\n% '".
#™ `= ': ' # Use thisˆ ñget the old situa ]back
X !->B ñ+# Probably a better default

class Pdb(bdb.Bdb, cmd.Cmd):
´ « òvious_sigint_handler = None% ÙCinitÙ,ô ðpletekey='tab', stdin=6  4out 2kip s  ÷  "nox ÷=False, readrc=True>¾ 9.__… sY   )Y ß * 4com¯ � !in 6out; ¡sys.audit(ÉFPdb"  ifà 2outÀ  Ðõ.use_rawinput = 0�  Þª= '(Pdb) ' Êaliases = {} pdisplayÞ amainpy ;= 'T ©_wait_for_' c
d 0tb_Y*no€ P# Try‘Aload” & 0 ifeexistsH :try$6 )  4Ð# remove someE2monææname delimiter_  6   � T.set_Ë!r_. ös(' \t\n`@#$%^&*()=+[{]}\\|;:\'",<>?'È�except IÈZError½ 6pas| À°allow_kbdinÞE Ä4 =  8 ¼ ñ # Read ~/.pdbrcÎ. i QrcLin
%[] !ifI*rc§ u k ôwith open(os.path.expanduser('‚ Ú')) as rcFileV  E   � ‚.extend(0 I ( M/OSI    	M  · "$"¡ [l÷ Í‘ñ  # associates a± ê@listpbreakpoHnumb¸	M 5_doð{} # for each bp num, tellsa ÿ, ˜  : `# mustÇ /@. af@exec8 M @cmd ° O 
š ðsilent = {} # for eaÿch bp num, tells if the stack trace
  ñ# must be disp. after execingP …cmd listM ðself.commands_defin, ñ= False # True while inD ´process of 0 O £ C# a m ‡ 	¡bnum = Non‚ Ðhe breakpoint%pber for— �ch we ar° " a ¸ ðdef sigint_handler(, ’qframe):-  á 0if ! Ö.allow_kbdint  " ûraise KeyboardInterrupvômessage("\nProgram i* õed. (Use 'cont' to resume).")‰ † Ÿset_step(  9(À 
7  í Qresetä Õ ‡bdb.Bdb. 1  Ï h †forget()H    I   ‚.lineno Ä
H ÓJ= [] Ícurindex = 0 Ã O 2tb_m h.clear  Qsetupè |, f, tb¦ Á 9 t,ã• Ø gmBack(Q © "*tb°# when settVðup post-mortem debugg bwith aèåback, save alla  ˆ#€ or­0al ø s"ø”layed aloôaurrent/ O ònumbers (which can=0ffe3  , e.g. due_ ö finally clauses6 ›  Œ ñblasti2 q(tb.tb_½p.f_code‡  ' 
C aÏ[< 1] =¾ )noÀ Rtb = ' ;nex^1curx " =Êw[d Õ6][0„ñ# The f_locals dictionary is updated from„qactual b ” ## =  õAever+ .T  ac8 orR Æcalled, so w¼á# cache it herv@ensu
 Àhat modificaš sõõ not overwritten.Œ é ¢ Õ š 6 Pretur°0lf.7tRcLinesU2# C"  uQearlié Aan 'q'¼qdesiredY  s 1 M  › Š!ifÆ   ".rp 
E• K  jf� copy bec� Œ•recursion* N    .r«'se@#4@ute  y|‡ only on‰³  Ñq 
Î  ð = rcLines.pop().s‡trip()
  ±if line and	 ¹[0] != '#':(  3 ð if self.onecmd(8 )&  * R# if ' ð returns True, the commp Ýwants to exitn H Afrom5 ñinteraction, save leftover rc» sC a ÷ecute before next Q 9 ë órcLines += reversed( 
H ®   î í 
W ò# Override Bdb methods àdef user_call(q ÷, frame, argument_listfs"""ThisH @ is < ped when) re  gñremote possibility‘  ¦ €that we Ó P need†`stop iE ais funlE."""7 ú_wait_for_mainpyfile	9  c a_here(ç Ø  –  ú.message('--Call--'i% ¼J {, None)W ¢Wp Hè  5J0we ­ à or break at ty T $1if Ž .6 lÒ rcanonicÎ °.f_code.co_[Jname ."or,0.f_” wno <= 0ã  %   Œ  s Æ� = Falseº3bp_·s¤ i R —G  3 ðM 0"""ø›y+± as set forê� current "ve¨FpoinL0(if*  !." R˜ ¯ 3hnormal	ƒ must bep,"0© otherwise#1©  bpf Â `in bdbmABdb.a ˆ aÉ g was h¡if getattrJ5, "\ "",»)Ì\   ì -  ‰ n Œs¿U # =' k)bpW  Â., 0 Älastcmd_backI  	( G Rsetup[Íº   ô ç 40 Ž[€ ]Ä  7 * ˆ¯x ‘ 3 = 
 ¯ 	( cif not	0_silent~ ñprint_stack_entry¹. [  šcurindex]ämé �_doprompt q_cmdlooìÀ           sçelf.forget()
  ereturn  1 1
 ’def user_ â(self, frame,  �_value):0  X ó"""This function is called when a9 P trap Åset here."""F 0if m ö._wait_for_mainpyfilel  p ‡ 9 � Ã.f_locals['_¼ c__'] =| µ 4 j Ámessage('--R6--'+# ainteraÖ (h {, None)-Pexcepû 
0�exc_info,eif an K … occurs,´ ðbut only if we are to stop at or just below t�_leveld3 Ê Ptype,  L ±traceback =  ï ² 2	šÞ �X  [ èp# An 'Iƒ�nal StopI� i'n t R	9µdebug event‹ ñ# issued by the Ùbpreter¥÷handling a subgenerator run withJ À'yield from'x&a / acontroü÷by a for loop. No³ 7hasQ ‚actuallyóbred inÃ¡case. The Õ 0geržs  è 7 toP { ë ' 0gee(; ç  ¾ V such½ %s.D ‡prefix ='x@(notÇ _ø3  ² 2and6 !yp‡ 	Ë•) else ''K {ž’%s%s' % (•  n ˆ  ìFmat_b ,(a ï)[-1].strip())ñC çú1# G"lI"É  J@_cmdþ›while TruÚ:tryë ã �# keyboar°terrupts alè _ üpasy wayacancelƒ  >  #÷ócurrent command, soJ €them dur Ô v)&puGN ¢ƒ ‘_kbdint =Ï w ) lH 	]FalseI Ybreak ê# K( B… P---3 ù] 2# Cºabefore¼!, òes display expressionÇ ì?preë3  W=á .�� 1cur-"$ifn :ingÓ  õ ‚ Q, old� 0ðdisplaying.items[():
  ýnewvalue = self._getval_except(expr)5 ÿ+# check for identity first; this prevents custom __eq__ toK  öbe called at every loop, and alsoN ÿ instances whoseM  ýfields are changed to be displayed5 5if ¢is not old ƒ  %!= H Wd @ing[85] =Z v  0 q“message('> Ð %s: %r  [old
 O]' %?  C  ª,p ,« 1))
> ðdef interaction(} ÷, frame, traceback"Ñ# Restore the„ðious signal handler´  ±Pdb prompt.n  ˜ €if Pdb._ ; ƒ_sigint_; 
D:try  B l . ( �.SIGINT,\ 

³Ì  Vè™Error:  # [ þ
 only works in main threa5Epassé  « NelseÁ  	f = NonÅ"if‚osetup(™ o H# noÏb desirD‚útime (happens if .pdbrc contain½ €# a commï`like "' Zinue"J 5Š.forget( ereturn)  prï±stack_entryu. [" –curindex]M  @_cmde  { i  Ó6Ahook^ W, objÆB"""C„* ¹ ·@execëñdefault(), whichï Áh  q as$qment of _ variableB  N †builtins5"""B ¢# reproducR„behaviorP  ÛDdard« Ó ,�H=ing0Cobj ³ K
€1^ { (õ  ) g, line8!if Á[:1] == '!': ! = E[1:]Ú dlocalsB1cur½_ & Oglob'  3.f_ * 0cod¡€compile(« ð + '\n', '<stdin> vsingle'M º°save_stdout£ 2ys. o % &in$ iÏ# Eg= sys. 	R Å D ~ f  o¼ 	8 ' ² ( ?out) �  ¼  .  À
             ðexec(code, globals, locals)
   ‰finally:   òsys.stdout = save_ ) 'in( /in' ´displayhook-  3 jexcept“ €exc_info8 4ys. e()[:2]: ¹ òelf.error(traceback.format_Z ¤ion_only(*G ñ )[-1].strip())
P ödef precmd(self, line)– ñ!"""Handle alias expansion and ';;' separator."""U  ¡ aif notO s V  ! areturn! 5 aargs = v.split(È0whi†  rgs[0] in ° .– *es[  Ä  C $! [[ :[0]Feii = 1  —  for tmpArgd 6 :1:]`  ( d   ù.replace("%" + str(ii),W  3  m è & Lii +�  n  u Ô*", ' '.join(² )R   : Z!#  Y intoÓµed commandsÍ ó# unless it's an( ' 0if s  «A!= '†'Fdmarker• Pfind(P
¸ 3if ( J>= 0A  *ó# queue up everything after9 “  /   0nexî L[\ c+2:].l0 h1cmdi €.append(E 
ª  [  T Ñ "[:\ <].rY ún  …/on…
ÐInterpret the[ðument as though it had been typed¿�responsef  ¡ !to@ rprompt.  ñChecks whether this†3 isN az nc"l A G or Äa breakpoint9õ list definition.‹ - jr_5 *ngõ=Žcmd.Cmd.7a Oelse< g hÖ_¸ m (¾"   : #Ws oneù `ne dur�f @cmd,Ù` ¿Pparse™ ž  ­  _?cmdã ûif cmd == 'silent„ Ñ .ž "s_# [ ¶bnum] = TruH ƒ Šâ# continue to 5! oG {  Ü!inv   ž 'el  ?end� yð = []
          ó  return 1 # end of cmd list
  0cmd ù = self.commands[ e_bnum]4 uif arg:  K H õ.append(cmd+' '+arg)( Oelse6 . õ# Determine if we must stopR :tryQ ð func = getattr(Æ �, 'do_' +ý _ ÿexcept AttributeErrorM  E v.defaul8P# oneRÔthe resuming ?¡ 0if “ Ê.__name__ ini_< 
{ t N Ÿ_doprompt–… = Falses  Ž? ¶mdqueue = [½  r4  
 ñ# interface abstractionÈ  	 s' ³def messagegFmsg)Æ ñprint(msg, file=“ vstdout)B ev@ '***', G 	�# Generic~0ple¤ ­ Ô.  Individual" òe_foo methods can b@÷# assigned below toè'seX Ä @_comx `e_loca Ñ ðtext, line, begidx,ˆ7idx(3# C? ! a*€/module/8 M  V Â for break/t aclear.¶ ×!ifm ÷.strip().endswith((':', ',')y  2 `# HereAes a> ñ number or a condi… Pwhich…Pcan't2 ó }  O GnÀ# First, tryM find match/ã ös (i.e. expressions)Z å4ret°|< (x,ÿE6ion¹É 
6e# ThenÇ ò± Û–s as well¸ Pglobs�@lob. ( q.escape¥ v) + '*'• â fn% + s• ûif os.path.isdir(fnÏ» … fn` /`  ! )elI  � J Ú and fn.lower=0.py?M.pywB R :rets :s ?ret2"bpo2&	Spoint¹Ð.  (This woulÇÓ more helpfulJc Â# display adïàal info along D è÷  `, suchõ A/åP !of0 � .äq[str(i)ÕPi, bpöð enumerate(bdb.BìÜ R.bpby*I  {  !if> ðs not None and stð,r(i).startswith(text)]

    def _complete_expression(self, + ñ	, line, begidx, endidx):@  D 3# CA æ an arbitrary N ., pif not ^ –.curframeJ  N •return []4  ` ñllect globals and locals.  It is usually^ !re ÷sensible to alsoQ ò ¡ builtins,T ÷ they clutter the namespace quite heavily, so weQ Pleave3 Vm outð ‰ns = {**ñ 3.f_Ê +,  _× }[ ‘if '.' inŒ
+a# Walkuðttribute chain upõ  Â ðlast part, similar Ewhatc  vD# rlPr doeZð	This will bail if any ofè T Ps aresL  siQ% a– Ðaccess, which¯ � w we wan. Š �dotted =ð ¹.split('.')c :try : ’obj = ns[C 6[0]D     1forº  Q' ^1:-1]N  . R 0getÊ Q(obj,= 
Œ ôexcept (KeyError, Aø  * T   ä  €prefix =ñc.join(¢  ¡ 0) + 	G 9 @+ n à nÝ  ir± )¶nþT F-1]);els‡ u Å@te a:"plÛ ³ ‚ y Žns.keys(z  Mx_ mÈ�definitio…òcalled by cmdloop(lÑ# The argumenð ÜÐremaining str !on›1com[  ¸12# RV1trušexit from0 6oop do I s7argÍ3"""i ¶s [bpnumberS†(com) ..1 1end”  ?R(Pdb)r   àSpecify a listia  Ø²breakpoint m  v d  '5 ’themselve¨ƒentered &`follow7 (sD  ypõ  S contd just 'end'B�terminatõ s E %he &PexecuÚ2whe§Ð vis hit.ÖTo remove allI ³&a : 0, t® €  Æ^á ð it immediately  ÄP; thaKP, givÆg ˆ uWith noj„,. q refers0he qƒ © 8 seà ·You can useÎ T 1to ²õ your program upZ �again.  SkyH   °ðinue command, oró step, or any other
  õcommand that resumes execution.
) ¡SpecifyingF 8 3   4 õ (currently continue,G ‹ ò
next, return, jump, quit ‹ Àeir abbrevia‡ %s)@ ô terminates the ‡ ²list (as ifË  5was< ñimmediately followed by end).  This is becauseç …time youD ð e"ð (even with a simple ß  o í  ),@ E mayD €encounte�Žõ breakpoint -- which could have its ownA Ý  ö `, lead‚óto ambiguities aboutL  ) 5 toA ­eß!If§  ø  X…'silent'a-inp, UusualY smessage} Pstopp› Hat aå ãis not printed|E ÷ay be desirable for>  ú Q Rre toD  { &icF ‹ Þ%en�À.  If none o.eë 0Ÿ  RthingÈð will see no sig!at	Äu…reached.˜ 5""" iˆ et arg:  ™õbnum = len(bdb.Bõ.bpbynumber) - 16 JelseD :try Y vint(argW  nexcept4 Ðself.error("UÞ:+  [ª 0]\n@   6... Jend"c  # ö¹ ^ Ñ s_O 0 =  " 0# S¡old defini «1casÉ°a keyboard VVrruptv!ifU I in r 
ï Cold_Œ ™_defs = (/ ð Ï Ñ  	5 Ÿ_doprompt> #‹< Oñ½  ENoneH	” O _ = []! µ o = TruM _£ † = False;ý r_back = 
z  º = '(com) ' ˜s™ inV“ ññ wmdloop(:è# K.IŠ -
«# Restore yT ù if  	5
H  % ‰ jsz°&[0‹ 6   	: “C 1C À          seólf.commands_silent[bnum] = old_ §_defs[2]
  Yelse:   gdel seW P ( ƒ_dopromp� 1 ° 	/ € serror('Â ð definition aborted,â    Ås restored')L zfinallyå ] 6  Õining = False<  + Õ 2 = 	 a_back
' „completef@s =   ‚bpnumber, Ðdef do_break(X ö, arg, temporary = 0)ª P"""b(- p) [ ([fÛðame:]lineno | func‘) [, cond&] åpWithouti ñument, list all ˆ "s.œ  ë  , 0 a ^  ¸ 7 Rset a4 ‚ at this* Vin th4€current ® 3.  T © } name, M qe firstS ‹ ¢executablee uof thatñ  .  If a seö § 5 isC Apresñ Pit is,  tråpspecify Pan ex( sSˆwhich mu‡ ðvaluate to true beforeñ Apoin_ 0honyN#Th¼ Kñmay be prefixed with a( Õ and a colon,Å 3to ° }r ‘n anotherA Ð (probably onŸ aKðhasn't been loaded yet).  ¢  § õ searched for on� ‘sys.path;ô ³.py suffix Ï …omitted.1 5""" Qif no|Õ Þ"if_‚@:  #Œ @re's[PleastÈ H  4    4ð.message("Num Type  öDisp Enb   Where"  !  Þ °bp in bdb.B]QR.bpby©
« 9 _if bp  # 	š Úbp.bpformat()„ Vretur^u# parseÀ"s;Ì° has lowest1fcedencd#-0can^PoccurÒ  Ë J7 f = Non?  á,no I* #  =  ‡.find(',[#if® :> 0Ø ²stuff after+ 0: "h §( B  j [v Ê+1:].lstrip(D arªQarg[:* <].r' 
€ µ- /: H	;‡� ".rú :ú  Ï kDllon >=�» ?lon»   2f =!Ôlookupmodule(B À         if ‹not f:
  ñ self.error('%r & ýound from sys.path' % filename)D ireturn Nelsem C I = f/ úarg = arg[colon+1:].lstrip(o >tryW úlineno = int(arg3 Ðexcept ValueEé A BBad Q @: %sù R  Cô ð Q# no Î ƒ; can beW º or functio4Ü CV  Â  „ p = eval5,‘ !  &ÿcurframe.f_globals9 z_locals¤ k ¨�  ¬ =arg¦ à °if hasattr(? P, '__	 O__')f j  ) .0 t  ) @codeÈ`unc.__ /__) €#use co_<ñ to identify the bkpt     $ sF PcouldFÅaliased, butX Îis invariant[ °  Ò  _ 0 = ­ .’ m  * Rfirst 1 Ù]  0 è	À# last thing,=try@  Í E(ok,‘�, ln) =   ¥ @infoÓ	!ifæ/okJ ñThe specified object %r isG aÌ/ '«  ¯  b'or wa< fiUalongj.rE z   ä÷ok # ok contains ©  ¬  =I&ln@4Ô
: ƒ·defaultFile¾õ# Check for reasonable breakpoint’  † L c4   (f ,G	�  " 
•  @w seMf  g  14errj Aset_� j À, temporary,N!d,ò Dƒ  L jif err†   M:err4 7 2 $bp• g• s– U)[-1]2 5   k ðmessage("Breakpoint %d ßat %s:%d" %
  	ñ(bp.number, bp.file	 qline))
= ñ# To be overridden in derived debuggers, ñdef defaultFile(self):  ‡ ô"""Produce a reasonable3 E.""",  Œ pname = F ô.curframe.f_code.co_# 4 4if  ò == '<string>' andG `mainpy& —  ›   o ( ^ ereturnb pdo_b =  Break  complete_b E = _ �locationV   C $  % T1o_tL RZ, argW T [ ([Ê  :]Æ�no | funcu  ) [, condi 1] ]a  ÿ SjÑarguments as o €, but se ¢ temporary •point: itE ðis automatically dePd whe8…rst hit.1 ðåGs(arg, 1‚'æ PU  , ö Cinfo+§identifier2öfailed = (None,  )H  ¶# Input is D P, mayò in single quoteÿ 7 "idu' =7 ¦.split("'"` tif len(0 )²1•P# notnk o i t @[0].
 &p(g /eli 3i Æ dý [ 1[ *seH #_M Pif idß O'': # QpartsÊ +6'.'Ä q# ProteÄO for~µ !f L 1[0]r  W'¥ 5del$ ¤ <  ’@ �09  $ ¿ �# Best fiãpguess a Æle to look a(fi/ò ´‹ nitem =Ç ,el“ñ # More than one3 ‚ Ó 1# F¸ pis modu se& û¶method/clasä 6 f™ Þ "up: (± 6[0]Ê  ,  ˜Kf…Ú 1¢äanswer = find_Ò(	!, K t ¥3 2or ð� $Pcheck)%4 ,  'no+@"""C.  Å�ther specPd, ` seemsæ�be executÓ.l  ý R7`Z  `  V0, 0  â°(e.g. a doc¿ ng¦m‹u, blank" E ð or EOF). Warning: testing is not ócomprehensive.
  5""" ó8# this method should be callable before starting debugging, so default
Z õ  # to "no globals" if there is no current frame†  . Ás = self.cur 0.f_ 0alsE €hasattr(# 4, '% ¶') else NonO pline =  �cache.get ¡(filename, 1no,¨ %s)‰ aif not :  Ý  w ð.message('End of O '=  ( …return 0=  x Œ v.strip(1 ñ# Don't allow setbñbreakpoint at a blank“ U Dif (¨ P or (f å[0] == '#') or,  – ! ":3" 1"""$ U [ o"'''")ö  �error('B‡ ¯or commentù 
 š 1no
� �def do_enZÊ7argu 2""" µ bpnumber [
 A...]H  Ó EE s] 2õs given as a space separated list ofC 7  l s$0arg�—arg.splitÂ�for i in $ 
<:try  ¶ $bpæ‚get_bpbyz &(i ( Ðexcept ValueE€ Ò >errR ™£;errF >lse2 2bp.dÈ  t   N ç ©²d %s' % bp)Ç WCleteÉE = _ ­* ñ0disI ò óDG ô="  Y  ÞaLö  means it cannoåQcauseypprogramõñstop execution, but unlike clear^ { ,a Premail nW ©Œ Ps andˆ & bçR(re-)ËdºÕ,»Óe¼I ½PcondiÔ¿! Á ± SeÍEnew   ?7theéõ, an expression which7Ðmust evaluatev5tru£I Àeakpoint is ãhonored.  If
  ùcondition is absent, any existing " åremoved; i.e.,F àthe breakpointK umade un= 5al.. 5""" õ	args = arg.split(' ', 1)! Etry:  µ  S 2 Es[1] ÿexcept IndexError6 ENone3 [ ð
bp = self.get_bpbynumber(¦ ¶[0].strip()ž v L eŽ 6('B V ­ expected'P QValueÆ k as erÍ W 7err> :lse÷ 3bp.0  ú  Haif notß
4   b ymessage»  %dÞ;nowÝr' % bp.Ú ’  L e–   
b 1NewŠ ‹xset forS;%d.c Í �complete_ß = 5= _ "bp‘ 
- �def do_ig(� ,y)ÿ 2"""  : v [counth@Set ï(  ­   Xgiven·  su$Žomitted,P 0is ‡to 0.  AR É  @ÿbecomes active whenH €zero.  W  @non- 
¹Ã ñ	is decremented each timeU 
Ür %ed‹ ?and&   ]�disabled #  V‡associat> ºÿevaluates to true3oÒÜ R= intÅ1Å _9 0æ \ .Â×!= ý  "if J > 0- 1  " R ðstr = '%d crossingsØ 	n  2 :  0 L 1K 'B  å.ÈSWill â §next %s of^ gG  s  (} ,ò„ ( ¹ �  Qstop ‹ lhik.Ú  g  	|¾ Àe_ignore = _ñ complete_bpnumber

    def do_clear(self, arg):  ! ô"""cl(ear) filename:lineno\n [T  
 U...]]E òWith a space separated list of breakpoint œ 1s, ’ A Wthose( @s.  U 0out° Sument4 B all* es (butD ófirst ask confirmation)J , aà Y C • a €at that 2 in  (.4 5""" Qif no² a e:try   ðreply = input('C£| E? ')Y  0 ÿ except EOFErrorQ I'no': j  ú .strip().lower(d 1if %  ì ·('y', 'yes'0 Š   !bpÞ=p for bp5 Ubdb.BïR.bpbyóf if bp3 D    ”.xQ_all_+s–  ( c z ÿ  & N °message('Deªd %s' % bpì ereturn)`if ':'Ä :arg^ ñ# Make sure it worksô "¹ ö C:\foo\bar.py:12 ” 0i =k›.rfind(':× N v& :[:i$3arg Ji+1: W «!noX t(ìâ  � E_ValueGâerr = "InvalidûÄp(%s)" %Ï 
V :lse3 l #–4getÞó ,] *no˜ ; „ 8 c: (9 _if er G e4J(errm eº mNPB—arg.split÷ ‚ i�* 
aüQbp = ï n}+(iö K? as<5 µ�  ä) ¬»% =Ãñ # 'c' is already an abbreviï—¢'continue'— E = _ 1loc8 Ï /cl% & S_whereS w( u Prýða stack trace, w6ñthe most recent frame x†e bottomlðAn arrow indicates the "curórent frame", which determines the
  ô%context of most commands.  'bt' is an alias for this% .F 5""" ñ	self.print_stack_trace()! pdo_w =  2her‡ Xdo_bt * ±ef _select_Ê (Y ¡, number):%  Å ³assert 0 <= a < len0 .ƒ |  -  D ¤.curindex 1 L  q 1 =  C [ : O][0]5 t_locals< 1curL #.f 
6 'Wentryµ r Ä álineno = None
V 0defY!upE W, arg'æ"""u(p) [count¾ @MoveF cur7 & ð (default one) levels up in3 v V è è@ (to2Rolderƒ)("if_TV == 0×X  KÃerror('OldesÕ' ' ereturnŽ :tryG Ì æ= int(arg or 1B Ðexcept ValueEl 
= ø„ rInvalid× #a%s)' %nƒ –  #if1 <æ 1new$E = 0B Jelse‰ ' kmax(0,?-` Ù º 
CD % Bdo_ux)upC2dow?E _d(ownG1 e IO newH0+ 1L
MÖ?NewZÏO - 1l?in(=  ~+~!d~ 
	€_untilÆ‚nt(il) [ÊpWithoutŠpument, Ýñ inue execution [  ½ ? u with a
]p greateíaé0one reached.  t ! aL E ~ 0 | ´t F úor equal to thatx ðIn both cases, also stop when
   òthe current frame returns.
! U  """ uif arg:  $ :try   ùlineno = int(arg)3 þexcept ValueErrorA `self.e !('# 0 in| Àument: %r' % 
Y  { Á 	p 3if ‘ 1<= Z 1curï 2.f_ ‚ q"until"F õ number is smaller thanG'{  ’  'n B '¼ Jelse™  ? XENonei Ó Aset_§ ( â ,µ &nom !! 1?  do5 2 = 	 2il
  ef AstepO ,lŒ †"""s(tepV ˆExecute R ® ‘, stop at ñfirst possible occasiont  'P(eith]Àn a function`tpco@d ori ? 2 )¿ (Ø ¼ s & 	OnextVn(extS ¡Continue e Æ � H —È ò Ñ ’is reacheö tŸà  a © .š í ní  3 	í 1runC û Õrun [args...]¬ bRestarèðdebugged python program. If a stringÒ…suppliedE iéñsplit with "shlex", and=Qresul& qused as 5newD ñsys.argv.  History, breakpoints, aWsS ª @r oplsF òare preserved.  "rà "¸ ÿan alias for "run"r1qimport Ø n  ý ´ D0 = À F[0:1_ "   %  .)a( `[:0] =¼%v0k `# thisÆ dcaught…Umain Eloop3 craise á&#o_@3run ;gB(g–0
¢] ¥& ƒ rÈ ™ 	Ë cÌJ  `c(ont(î)Ñ 	b, only0wheâ– �¿encounteredN2notÂ†nosigint” !�ðPdb._previous_sigintï_handler = \
   rsignal. ( Ð.SIGINT, self 4intI )F ùexcept ValueError:  p # ÿ happens when do_continue() is invoked fromH  ôa non-main thread in which case we just U � withoutK  á ð  set. Would pri‹ ÿg a message here (once) makeH  msense? Epass E'etí  �return 1  $ =
  !
"  ef Pjump(W f, arg)tñ"""j(ump) lineno5  …ÁSet the next õ that will be executed.  Only available inD  @ ðbottom-most frame.  This lets you œ ” back andY D âcode again, or- ñforward to skip $ Ÿ  P –don't wanÇrto run. Þ QIt shÆ‚be notedß qnot allg Ps are µowed -- for— °instance itˆ 8 Ppossi!to@ Q intoDµmiddle of aA €for loopÕ 1out õ finally clause.- 5""" "ifeñcurindex + 1 != lenâg.stackã ð  û .eo°('You can o¸} ö#"e ¯ª'ºzˆ 6tryG d Parg =õ (c( ñš `"The '’ `' comm¢requires a…vnumber"š Jelseˆ ™  � 2# DŒ _ ð, fix up our copy~ ­;,ˆpdisplayÀË  I   Ö# new positioï    Ó 2curï"f_Z  ={L - x [ ×2] =è 1[0]ÉN ™_8 g_entrye H ¹ «K as ^ ( © NòJump failed: %s' % eV Bdo_j“ t|d�Qdebug– Ç ­1""" Ôß ñEnter a recursive % 2ger·Pstepsã@ough³
? ¢argument (üðis an arbitrary expressionŽQstate/ Fto bÄó D -@currU penviron2 )³ósys.settrace(Non! Ktglobalsí6 ?loc)  _ & qp = Pdb\Ä.completekeyš tdIÁastdout¬À     p.prompót = "(%s) " % self.prompt.strip()
   ömessage("ENTERING RECURSIVE DEBUGGER"4 Etry:A  H ösys.call_tracing(p.run, (arg, globals, locals)I �except E :ionV °exc_info = a  j()[:2]€  á `error(‚ Òeback.format_d ¤ion_only(*G T)[-1]“ 
OLEAV � 1setz (@  ›_dispatch] Ãlastcmd = p. 
Î õcomplete_debug = _ ¢expression+ ±def do_quitr f, arg)?ñ """q(uit)\nexit_  ©áQuit from the h õger. The program being executed is aborted.G 5""" ñ ñ _user_requested™ z = True) 1set ‚ƒreturn 1Ú To_q =Ý = 0do_Å   ?EOF1EOF*  ú qHandlesø ÿreceipt of EOF as a commanä 	%+''Ñý 8Ó OargsÔ Va(rgs� QPrintÕ Áargument lisÛ  â@curr �functionÃcc Dæcurframe.f_cod¼0dicSì$ _Ïbón = co.co_argcount +  kw| 2 #if  ðflags & inspect.CO_VARARGS: W ?n+15 KEYWORD9  ÷for i in range(n/ !EnameÂ 0var :s[ii0if   F  q B   "*À%s = %r' % (8  , 6 [ ] 9 OelseO ö*** undefined ***^ S Bdo_a- IWZoretval\ j\£`value H \ ¼  _of a ebif '__0 0__'C-O
" OArepr» .4 [Y YUQ *ƒ'Not yetÄ 3ed!ÙRdo_rvA t/_gAì   er	} ¼ 5.f_	 XäÂ
ÆÀinfo()[:2]
   ö4self.error(traceback.format_exception_only(*exc_info)[-1].strip())
M �  raise

 ³def _getvalJ (m ñ, arg, frame=None):/  3 6try   "if) @ is , 
  " Áreturn eval(Y  d A.cura É.f_globals,  z_locals½ Oelseb Z  T @
R Dt = sys. e()[:2]	 Ú oerr = •#	I #’_rstr('**¥ö d %s **' % err)´Fdo_pªžõ """p expressiond ñPrint the value of * .+ 5""" í¡Ámessage(repr† .D Þ&))±]JpassÉ Ê Ë oetty-pÒ ApV ".p]Ü (‘complete_Q E = _ tg p& ' N  Ñqdo_list¾ Ê
 òl(ist) [first [,last] | .]— ØñList source code for1ðcurrent file.  Without/quments,†  C  ƒ ù 11 lines aroundC   Á or continue ‰previousG 3ingl @ . aM gn /, e G n° E one± C  starting a.!at¿  ð E two@ sA  Zâgiven range; iaesecond‡ "arº  ,‘less thanù Ž@, it †a count.‘DThe |9i7  ß ; öindicated by "->"½ bIf an ”0ion.  beì ‘debugged,Š _ Awher’» 8 äwas originallyª‘or propag} 8is Š F P">>",ñ it differs fromz Í  ‚ · � ±pcmd = ' ']   ! =…  if¬A and j!= '.'ïå ¿�if ',' in7 
0     ³v Öarg.split(',' )  1 q = int(  À            Ð  last = int( ¿.strip())
   "if0 �< first:%  8 ÿ# assume it's a count.  y " =T ! +c , Oelsep ‹ Ã ?argÂ - cmax(1,s :- 5ð þexcept ValueErrorz `self.e !('# ð in argument: %r' % 
Y  ereturná Qelif N ðlineno is None or@ z == '.'� Æ > ³curframe.f_I 	× @E > 3 5+ 1™ í� 
‚ ³%107 ¢filename =Ö ˜ „code.co_# 4 qbreakliŠ� 1get& _ $s(2 N;try’ pines = Ê �cache.get > ,’ vglobalsW  ¡‚ a_printK!s(G [10-1:ü ]<!, ¢  ¼ ,Ï  E  W r   e �no = minŒR, len| � › ! <2
  q ö message('[EOF]'x äûKeyboardInterrupÕApassØ pdo_l =  Bist
 !ef 0ong(q ,µ)� C"""l  Q | ll9  ž Lïðthe whole source #P for  ðcurrent functionäF 5""" %zb,yÀ2getÎ  Òs.ø€"OS>[as erh Pd6err» ?F+ ´– §
V  ×ß®	ãÐ Ë á  ¦ expressioÝ¯Try to getáõgiven object and display it.×ãö4objï²_getval(argÕ  'f�  ;T ·:  =¾ â  L(obj` # (ÇR, Typ3/) ÓK)¡’complete_£ E = _ ‘Nðdef _print_lines(sóelf, lines, start, breaks=(), frame=None):
  ò"""Print a range ofB E."""& "if> 8  ? €current_r Bno =$ #.f >  , 3exc £ = self.tb Q.get(� U, -1)7 Oelseq 	V %-1; 1forÆ "noà in enumerate(° " § sž !tr# ¶no).rjust(3•  % Úif len(s) < 4¢   …s += ' 'Ž    4 Pineno‹ •: B:  P e :== žm ,->n ª 6== aA >A Üñmessage(s + '\t' +�±.rstrip())
àdef do_whatis(: W, arg”2"""   4  ý ²qthe typ³  •argument.( Ã:tryÃ Pvalueï �€_getval(~ ? jexcept6 $# + °) already pA0ed … UerrorB  ­ ereturn 0codv  ‡ õ# Is it an instance method?$ À I Ç À.__func__.__ %__8 Å ! EÌ :ionÏ Epass+ 0if = 
"  –.Ð!'M– a %s' %- Š.co_name"ô à  ¦ OtionØ  ’ Ï F@Func� Ñ 'VclassÎ 4if ‘ Q__ is¦V	CE B %s.X(C •module__,U @qualo?__)r a Í •vabove..	Õ Ds ˜ƒcompletešE = _ ©expressionÄdisplayÅ & [? ]@  #D= Aü ¹ . 0 if" ch¥ðd, each time execuÅÈPstopsh ü œt †Without c  +tst all ¯   s TQ   À   l`if not³ö
?$lyo Zing:'× u @itemÎ µš 1ing7àself.curframe,û  {}).items():
  ð	self.message('%s: %r' % 1 ). Jelse< aval = > ö_getval_except(arg9  n % ñdisplaying.setdefault( �curframe,ª µ[arg] = val~ E ¨ N  °  w ,6 1))
9 ”complete_, 5= _ ¢expression- “def do_un- ™  , Ë ÷ 5"""! & [C ]D  ¦ sDo not F V the ( Á any more in �current þ .F wWithout; µ, clear all] Y _s forR  “   1"""   if× Ö   :try   2delàÎ  »/ge´a  < ž KeyError] ùe '('2`ing %s€ {S @ ™ 1pop´.MCNone ßüÄ1 ÷, text, line, begidx, endidx/‘return [ekÂƒ Ä    ðif e.startswith( )C ¨ ¢do_interack†   2SP D an   iv¤ õterpreter whose global namespace� �containsa ¶(+ ¢and local)6 l foundÁescope.N o�ns = {**.�2.f_` ;s,  _n %s}M Tcode.× 4("* bive*",� 7=nsêƒdo_aliasà J�1"""   [` [commå 0[pa„ ,
 u...] ]]Œ `CreatehD €called 'K P' tha´ƒecutes 'Z h'.  Thkq ñmust *not* be encloseZöquotes.  Replaceabl? � Ps can; ðindicated by %1, %2, Ó õso on, while %* isÉ rZ 3  T óZ “.  If no Ã   is given,eE ¿ ƒ  - cshown.E  B &alÙ: ×es are listedAÄ`es mayç  ne  Ù  ù ² T th7~  b-ðlegally typed at¿ ö pdb prompt.  Note!  You *can* overridD p1nal8  s » ¿ !á _+ ' + á ñthen hidden untilŽ D  4¡removed.  ù  Ó 	±ñcursively applied toB Ñfirst word of àcommand line; Sall
  õother words in the line are left alone.
1 òAs an example, her- õtwo useful aliases (especially whenD dplacedp Ö.pdbrc file):i ð	# Print instance variablY õusage "pi classInst")_ € � pi for kg ð%1.__dict__.keys(): p^ ×("%1.",k,"=",& 6[k]P Š |in self{ s~ 	 6"""% örgs = arg.split(k õif len(args) == 0:6  ± ¼   = sorted(a .í #es× J  /       < 
N  # D 0mesQ0("%˜ q%s" % (9 ,ß e [ *])f VreturÝ ifÚ @s[0]v ` 7 e9dß 1‘ - �  rgR �  ‘ OelseU  ‚ [Yâ[0]] = ' '.joimR[1:])|‘def do_un4 e,Ò )W 3""" U name£aDeleteEúBfied.$ 	& h©  â;delÅ6ï  coÍ+teõ Qtext,÷, begidx, endidx– 1 [anaô À.startswith(U ")]| Ñ# List of all7ñ commands making ò	program resume executionT2 _  4 ð= ['do_continue',  Cstep Cnext ¾ %',Ÿ 2	  < 4qui1 Ujump'¿ ¢Áa traceback ê  † !at½ 0top ‚ck frame´ ò# The most recently entered' A is  �ed last;  `# this ðdifferent from dbx and gdb, but consist!  u>  e Python in ƒpreter's¡ Å ¡  Ith LalsoM × „up/down ~p (which7m  Tpatible ƒ ¤ ð : up moves towa{ƒ'main()'=  Í ` 
&  ž6¸ Y)£ ¾:q_stack_Õ Å´:try$ )G _ý%noÆE 
,  ©g hentry(C $ðexcept KeyboardI{JruptW BpassÃ \  s ,¥ ð, prompt_prefix=»  ì ” à, lineno = fra³me_lineno
  ñif frame is self.cur :#  * Õprefix = '> ' Oelse(  ( Y ƒmessage(K +F  `  + ñformat_stack_entry(” ½ ’, prompt_K 1))
L â# Provide help pdef do_ ([ f, arg)´ ‘"""h(elp)B  † pWithout( Pumentm ùint the list of available commands.@ $ a   n\-asO  ’ 0 abj Dthat0 H "" ¡pdb" shows� Áfull pdb docž \ation5 ±exec" gives1 on> !f  %""º Qif noù   þ return cmd.Cmd.OB :try;   P ó topic = getattr˜'ð @_' ++� 1   … < ( úexcept AttributeErrorˆ  B «y .dow T  O .el B('Noišfor %r' %Å (þif sys.flags.optimize >= 2¹ i ±; please do»÷run Python with -OO†  Ä'if you needÊ Ã 9 ˆò    Þfô.__doc__.rstrip(¤ =$ =“¤ý ¸
¡�(!) state�z qExecuteÙP(one-Ù) " iõacontex· ÃucurrentG dÑ.  The exclamY0 poûñcan be omitted unles�F  first word h ± ô resembles a debuggerl s Œñassign to a global varii ¦Âmust always ûþ s� û2a 'C 'l f, e.g._T(Pdb)h  Ú_ˆAons;è • = ['-l']` 9  "B	
Ê.Ù‹ or '').!efxA_pdb9  C (äQother, per funcsJÁlookupmoduleJ `, fileˆT w"""HelpC  ¼ñbreak/clear parsing -- may¢verridden.p  þ	p ñ) translates (possibly incomplete)�  ¢  L inüpn absolÝ º # ãpðif os.path.isabs(0 ê R and  Àth.exists(fi§lename):
  ’return fi  òf = os.path.join(sy E[0],/ )0 5if 0 ðexists(f) and self.canonic "== `mainpyy ’ [ —root, ext“ �splitext(@ × / "if, J= ''Z , % =Á ˆ + '.py'> ÷ Visabsa 
L 8`or dir“ D in 6
= Uwhile/sislink(6   « ÿ Iread0 »  + Afull| ¾C º 7 %ifŽ ½I �  û " €  QNone
 ð def _runmodule(	",  _¥ \   ¶._wait_for_q = TrueP  ª ) ðuser_requested_quiFFals* Åimport runpy? 1mod{ ˆ Ò_spec, code =) c._get_¤ ƒdetails( ³ J ‰ 	¨  é U D.co_t*˜ _å %__Q  ö.__dict__.clear(: " …update({E  #!"_ã d__": "4 ,",$  š $ ¸ Ê ) qpackage,  @ 6}.parent, jloader+  +  G 	) " �builtins& &__ * }Ç @run({)‚cscript‚ ù Ì•b# The & p has to ÂA 3 ¢space (or ^es fromZ%# . Æwill break).  
 q So we ãv up the= 7 t several +×ial variablesH ñ(this gets rid of pdb's globalsƒ f fns oldC Ç on restarts£ Ø ‹ i Ù ž!‘ Ÿ•   !"_E0__" :»   "68":  @ }G ] À# When bdb smðtracing, a number{Acallrøline events happen´ñ BEFORE debugger) � reaches Ü"'s–(
 @exac•quence of™#>  ts dependsØðpython version). So weó take special measures to
  ÷4# avoid stopping before we reach the main script (see user_line andL  õcall for details)." ð self._wait_for_X Úpyfile = True) 	 ; €canonic(3 Zname)1 _€ örequested_quit = Fals[ öwith io.open_codeN u as fp:U  $€statemenI ð"exec(compile(%r,  ' ‰'))" % \<  @  Á(fp.read(), Ì Þ Æ Erun(v Ð)

# Collect Yñcommand help into docstring, if not run ç ñ-OO

if __doc__ is  BNoneæ ð # unfortunately÷ñcan't guess this order fromñclass definitionò _� _* 1= [  ú ' �', 'where	 @down  up Pbreak	 t
 Pclear –disable',N "en b 'ignoQ Acond‰  4 s 1sted @next XuntilN 1jum! Qretur• `retval- !ru qcontinuº 1lisH Blong ™ 1argt P p Qwhati QsourcC pdisplaya %un G qinteracg Aalia? %un Pdebug>  ÚË !]
@  q_ÿ G in ’ë �ô	+= getattr(Pdb, 'do_' + A #).* .ZÁp() + '\n\n'l  € += Pdb.ä_6 ’ 8del† ,^ 
Ô SimplifiedÆ°erface

def¾  , globals=µT, loc )Ø iPdb().55 0 )Z õ eval(expression* _  è f A k ?ctxÈ  ( ¾ `# B/W S‘atibilitycÐ  m (*ƒ, **kwds¸ )  ñset_trace(*, headerH Apdb ç(§#if% M bÂpdb.message(M 7   j ñsys._getframe().f_backì¼Post-Mortemapost_m ((t¤ p# handl¿ ¯qdefaultH@if tª  >r ¦  # ‚ ²exc_info() .ñs (type, value, š  Z€an excepõ1 is_ M  be{ „ õed, otherwise itZ  � 3  M
‚ 1[2] °  raN V– €Error("A¤ &id£ ð must be passed if noO "
  ñ"exception is being handled")
8 ’p = Pdb() e.reset pinteracB ò(None, t)

def pm():4 òLost_mortem(sys.last_traceback)


# Main program for testing

TESTCMD = 'import x; x.main()'l  - n Crun(4 )Z ¡print help—  	 + iP Rpydocª  
 ñ.pager(__doc__)

_usage = """\
 ñ$: pdb.py [-c command] ... [-m module | pyfile] [arg ö

Debug the Pythoõ ƒgiven by5 ô. Alternatively,
an executablec por packŸ Ato d\ ðcan be specified usI s ô-m switch.

Initial¾ ðs are read from .pdbrc À ðs in your home directory
and  Z vcurrent @, ifç ²y exist.  C'ps suppl™ qwith
-cz Ü †ed after– � �.

To let^ ñ script run until 'ÔÑoccurs, use "ª�ntinue".D rp to a �dline Xã ^1gedT 
T 'x rX'"."""�m�þebgetoptSÒopts, args =  .  ðargv[1:], 'mhc:', ['·C', 'l3=']Ÿaif notM p  ëô(¸¸   |cexit(2< M  † ![]‚run_as_mÁq= False  ”°opt, optarg Ç t  if   @['-h¬ !--¶ ]$  † œ     ³ )elW cW ¸ 'Z  ’s.append(ª M m@ ý BTrue± ÐÌ! =k0[0]² d # Get… ,2nam0˜
T  1 ®�os.path.e&s(_ 2 \ (`'Error% q, 'doesøB 'ä D1ä  Q#:]¼  ] ¢  # Hide "È " › 0pdbÄBionsPargum×3lis¼Ø á¥ 4 = æ @realï è T Š �# ReplaceR 'sA U  in‘ Tnt ofûpsearch Y .N  î     � 0dir˜	€ 3 ð# Note on saving/restor J  8`: it'säood idea when   C wasL 2modq(byœV>2. IP (baO 'itI @chaniH @userÿ mV æ �p. There¼0a "½ ðart" command
    # ó@which allows explicit specification of command line arguments.
    pdb = Pdb()
 ó.rcLines.extend(? s! Àwhile True:
1   6try   ÷ if run_as_modul+     ‚pdb._run  ²(mainpyfilef  #   ?els= oscript= 1if g úuser_requested_quit¯  j UbreakÒ   ðprint("The program finished Oöwill be restarted"¼ ‚except R 
n X  fing",  v, "with¨:W — ý\t" + " ".join(sys.argv[1:])ˆ ŒSystemExù ö# In most cases ( ò does not warrant a post-mortem sessionE —   Ú 2°exited via £   @(). ‹ ö status:", end=' '¸ N 6 ¶c_info()[1]% eºSyntaxErrori¡traceback.™ V_exc(>  c ] Fit(1 V J b ²("Uncaught F  "‘ Entering@ @`debuggýz  ’ H @Runn3 ð'cont' or 'step' wur& t›%3t =p:*2]Þ@db.iš  ac(�(None, tŽ P"	¹ %er . ð �Å) +l  Ù 2  "½ 2à

# When invok[st, í 6‚er on a ÿð
if __name__ == '__‰ 2__'Ä`import
”     Ð()
"""Create " ñ
able serialized representHsI@PythS@bjecAR
See Âñ	 copyreg for a mechanism Sregisøcustom picklers.D  Átools source? ˆAsiveÊ¼¡
Classes:
Ö PO  "UnH ar

FunÞ' adump(o¿ &, n  s p) -> st±N Qload(+   <  qs(bytes4   
Misc variQy P__ver1!__= dformat  ²compatible_  s
¢Ó

from types Ì× BType ~!  dispatch_t… # _V2on_Ÿ�ry, _inveË ) Ccachq Biter©s Sislic fwÆ ƒpartial
 2sys” %syÔ cmaxsizA dstructï €pack, un Ð
import re
im¡port io
im
 dcodecs ñ_compat_pickle

__all__ = ["P ‚Error",  5ing !Un6  3 Vr",
  ") eG @dumpO   s	 Dload ‘s"]

try:@ Sfrom ›  ¿ b aBuffer% ² ‚.append(§ e! "")# ñHAVE_PICKLE_BUFFER = True
except IÚ { _3 ð2False


# Shortcut for use in isinstance testing
bytes_types = (b  ,  `array)K ðThese are purely informational; no ´ f 0s t- ".
! ö_version = "4.0"s
 `# File¥ Dmat / ’we write
ýRible_R  ¦ t["1.0",C   ñ# Original protocol 0[  
 L"1.1> P5 ÿ with INST addedE 2E ƒ 1> 3> ƒ 1ƒ BINFLOA‡ 2
I 2~ 35 35  Àtj 45 5j 55 ]¯‹   # Old$Òs we can read¦Ais i�† highest`number3 ±know how to; ò.
HIGHEST_PROTOCOL = 5Q eA ’ð	 by default.  May be lesx <an L ð.
# Only bump th£ f$@ old¢ �still supû%edÀof Python alâ ùy
# includes it.
DEFAUL¶ ’4

class ƒ-!(E@Bion)8ò"""A common base 3  &¤the other 7 ~�ions."""±Ipassi _(w m Tô G  ¡òraised when an u¥°able object%  f  ed¥1thex  �±() method.
 ” Ì– ) e† aDblem¦ 0ing´ ¨ Dñsuch as a security viol§ “Note that_ s may alsoG0durg Cing,ú ° ñ(but not necessarily limit2±) AttributeS, EOF
 G¾ ‘and Index! ° 
WU# An 9€of _Stop± 3by u0er.-p_stop()sÑresponse to
#ùðSTOP opcode, passiñng the object that is ò<result of unpickling.
class _Stop(Exception):
    def __init__(self, value)  #   . 1 =  ò

# Jython has PyStringMap; it's a dict sub| awith s% ’ keys
trya ¡from org.pP È.core importX !
e¸ ! I RError@ | p = None� Pü ñe opcodes.  See ðetools.py for extensive doc( ðThe listing
# he� ðs in kind-of alphabetical ordern³1-characterg  z 3.
# v a groupªðm by purpose.

MARKk ó= b'('   # push special marköÓon stack
STOP7    ; .; Severy€ a ends ‡ 1 )
P5  6 06 ò discard topmostf P item5 _ª  5 15 “  ; € through G » 8
DU± | 2G €uplicate7 z PFLOATß   z F3  Sfloat£; decimal p·argument
INC  x IE PintegÏor boolH 8BINK  � JH òfour-byte signed int
4 1¿ | K4 11 'un3 DLONG0  3 L3 Olong¤ 2@  ¤ M= 2p  DNONE0 p N3 [ePERSID&  W P$ –persisten�!idœQaken ì– Q  N QN # "d    ;      qf
REDUC½  I RI Ðapply callablW÷ argtuple, both H'RIq D SD c· ý ; NL-terminatedcVBINSTH  E TE  @coun? mbinaryF eSHORT_L  F UF   ù   ;"   `< 256 ……s
UNICOD N VN Ù 0Uni«… r; raw-u  -escaped'd6E8BINQ  N XN  ”  • $; ê SUTF-8d M ZAPPENOaM Pappen`1ack!to˜æ below it
BUIL; Îb<  îð __setstate__ or __’ð__.update()
GLOBALF  Ê cA öQfind_Ã (modname,  G); 2Î Xs
DIC] M dM Tbuild Õ  R…s
EMPTY_>  8 }8 … QemptyLÀ
APPENDS    ó    = b'e'   # extend list on stack by topmost �slice
GET>   F gF õpush item from memoN ø
; index is string arg
BINO  L hL 0  "b 
   U"  ;  a1-byteL 8INS™  L iL �build &   öclass instance
LONG_‡  6 j6 . Î 4‚ -LI‚ lL ‚ _
X e …s
EMPTY_D  Š ]> Š Qempty¢@
OBJ  * o* h ê (PUþp6 Sstoreäatop in¼³J  } qG •¹¯®xL  G rG sxSETITEMsG ôadd key+value pair to dict
TUPLE3 t5 @RtupleÄ©E  » )? ©D 
Ÿ Sm  + u+ amodify�  i0addo 
¹ s(DFLOAÁ H GH s `float; `8’ P enco[ W

TRUõ  `I01\n'ðnot an opcode; see INT doc,÷ pickletools.py
FALSL  � ?I00K "ó
# Protocol 2

PROTO.£A\x80¤ Pident5Ž # p8 H
NEW � A\x815 Òaobjecti@pplyk°cls.__new__2arg³FEXT1� 'A\x82M mL È8ó sion registry; “ï^
EXT2N 3N Âditto, but 2³4 44 44 4 Ž¸ 54 !1-à ×á2top£ 9 69 29 ;two½€ 3¶ G 7G 3G OhreeI 8NEW©I 8I @Trueò„& 9& BFalsÝÌa' Blong±< 256 bytes‚^ b7 °really big B 1

_\Psize2AB = [Ï!,  1 2 83]
þð 3 (Python 3.x)
ôHBYTE<Bô« ÷; counted binary\°ument
SHORTàð BYTES = b'C'   P#  "    ;	    øL" < 256 bytes

# Protocol 4

SHORT_BINUNICODE = b'\x8c'  # push short string; UTF-8 length Y D 8Œ  J dJ “very longN “
BINBYTES2 4 e4 À : ’EMPTY_SETl : f: ôempty set on the stack
ADDITEMS9 ¨ !90: Rmodif6 òby adding topmostA Ý items
FROZEN� !91G Àbuild frozen‚ OfromG ”NEWOBJ_EX� €!92G Rlike # ñ# but work with keyword only arguments
STACK_GLOBALR O 3O ƒsame as    R  usá Ynames'‘s
MEMOIZEF  K 4K @toreÒ 6 of]× in memo
FRAM; Ÿ!95= �indicate9 `beginn† éof a new frameª05

)TARRAY-� 6S ª "ñarray
NEXT_BUFFER¼ å7- õnext out-of-band buffer
READONLY? h 8; 5mak÷ PP read†ð


__all__.extend([x for xð	dir() if re.match("[A-Z] ð
0-9_]+$", x)])


class _F@r:

Â _RÝ_SIZE_MIN = 4 òTARGET = 64 * 1024< ñdef __init__(self, file_write):H  d   . ' =' 
% �current_©v = Nonel Bstar 1ingq e @ @io.BžFIO()H 1endb F  1if ® 
I  Æ ¶.tell() > 0ì ð Rcommi® Õe(force=True)ñ * õ 
	H  … ,þxce=Falsf» 
™ ?f =ß  	’ Eif fÙ . $"or† 
`  Ó @dataâB.getú(ô  % "� 	Š  (  if(T ?) >�  >MINƒ  :  # Issue a ‰¡le call to dmethodh­underlying† P  § p objectü I ¨bopcode@3izeW L  ƒ�. The con³ðnation is expected­ bbe les _nsiveP 0tha<  suï!an` P %alø ô .@ ð write(FRAME + pû	ack("<Q", len(data)))

  ð# Issue a separate call to write	 ÿappend the frameE  ðcontents without concatenationE  > BabovR ovoid aI  Ímemory copy. ’ Ì Ê QStart§ 2new« � 0 a  ýio.BytesIO instance so thatj #G ôfile object can have delayed accessÛ ‚previousw P  "òvia an unreleased ô qview ofy N H  Æ  )Ñself.current_´6 = : (	2defæ(1 !, &:u 0if  
I   Joreturn'  .¬ *   Oelse@  n_7 ‰ ¤ €_large_bÃ° öheader, payload)\ G " =™ Y R  Š Û €# Termin ½OáÔ and flush it h 
Œ?Commi‡³(force=True„ Ž Ð# Perform dirm¿ æ r é 'u binaryÛ #²0. BÌ�reful no¦ –eh[  ã _ K Ppriorà  Qing '› ¡' as we doZ 1wan_ @alloö1 a › I ¡temporary Á¤ " AWe iEtionally] óinsert a protocol 4„QopcodP6mak–#“qpossibl ‘optimize ¡AreadäAs in <&erºã ()¢  #Ñ)


class _Una"r:“ °ƒ__init__§ w _w ,‚  Cline —tell=NoneÀ98 & =9 � 
#  P '   
+ À r ³  Ÿ Cinto³ 7bufŽ .nm	g .W  Q �  ô‘if n == 0Ù ¤ # V != 0Ç )   ì 	Z 1 = Á     ˆ M 	p  % dbuf[:]ª _&(næ '   ÙnD ´ <Q ­ ¨ ùraise UnpicklingError(D  ]   "$ ðe exhausted before k"ofã"™ • QÀ   n = len(bWuf)
  ú
buf[:] = self.file_read(n' ‘return n
= Adef &  5 Q, n):  W "ifJ Öcurrent_frame  # Ddataq 	' .T z qif not 5 ªand n != 0R  V  ‹ .O u = None›  &   Ì 1 ñ pif len(w ^) < nq ýraise UnpicklingError(n  r "$ ñe exhausted before end of %"r � T ;elsLÌ 4 ¨Pline(ð ©9U 
´ ¬0 € ¡(o  @[-1]Žb'\n'[0]{ «‡Ö ®Bload4°,__size¼ eU)!' "beginning­Ra new˜ Ç~ Ï• Ñ = io.BytesIOê {ó ñ)


# Tools used for M`ing.

áô_getattribute(obj, nam/ 1 ¡subpath in «.split('.'S' Ï== '<locals>1An ó±"Can't get 6  Ž � {!r} on "å  €.format(À f, obj)`:try½ paa  =( 	[ Pobj =�  ˆ N zexcept Ê 
` 
" (ì  ^ tÞ æ +V from®ÖÌç ë®whichmoduléÂ"""Find the # 0 anòect belong to.""ˆ# _j-3'__ 1_',• 8#ifY 6 !is™ c9º @  ^ ›`# ProtŠ  Ÿ ð iteration by usX°a list copydBsys.D ós against dynamicP  ðthat trigger importsB Sother° Às upon callsó to getattr.
    for module_name, ‚ in sys. ñs.copy().items():;  ? Bif ($ ? å == '__main__'&  * 
h ) p, ß  # bpo-424069 ‡ is None  Y …continue5 6try¡  " Cif _õ Sibute²  , ò @)[0]Z :obj6  : creturnâ f ±except AttrU ZErrorB Apass0 G ó
def encode_long(xÖ Qr"""E 0 a   ²òa two's complement little-endian binary stringÙ°Note that 0ß òa special case, “ ´ing an empt> ,q asave a¼ @byteð the LONG1 pickl:  zQext.
) 9>>>Ò !0) "b' 4255! �\xff\x00) Z32767+ /7f+ F-256*  00Y *  V 8, 8� 7-12* & '12¥ ¡ 1""" @if xû0)‰ 'npñs = (x.bit_length() >> 3) + 1I áresult = x.to_4 (;  ,  rorder='&â', signed=Trueõ Š ‚< 0 and : F > 1˜ 2if e A[-1]´ 1xff. ( ç2] & 0x80) != Ô ;¢ . C:-1]» T 
	&de	GdataD _from v  g 2b''	0 "< •"' ?255) 
#7f)  Y7+ ”+  ¯* 
$80*  V 8, ( /12& £ "12¡ –ƒ@int.aO ‰MT

# Pñmachinery

class _ 2er:$ öð__init__(self, file, protocol=á0, * ‘x_imports·,þ  Z ñ buffer_callback< ; $ ô """This takes a% q ÷@writÇaÒ e ò  D3eamÔ G äThe optional *© a* argu‹`tells   erB us~•Ugivenç P; supÜ %ed ñs are 0, 1, 2, 3, 4o5Ð‹ @defaû‰  Ýð4. It was introduced´ðPython 3.4, and
    ñis incompatible with previous versions.

. ô   Specifying a negative protocol2 õ selects the highestC - Äupported.  T1 r< , Pused, G °more recent { ñ	of Python needed to read% epickleD ‡producedá  � À*file* argum_ ð
must have a write() methoU Åat accepts aY Åsingle bytesH ð . It can thus bN  i õ object opened forG abinaryt Àing, an io.BV õIO instance, or any other customD ^ �that mee•÷wterfaceü  If *fix_im�ôs* is True and *Œ 0lesÞkan 3, V€will tryz1mapy4new—p3 names  ¢old module ¹  ó4 in7 a2, so Ç  7 t À data stream®  é'abâÑ2ë ñ buffer_callbackØ `None (a ¢default), ( P viewÍ?ð serialized into=8‘s part ofû ª ¥ ƒ @not ‡ ï2n i40be © !edêVnumbe( j iTï a² B.  Iˆ  ?  è ö returns a false valuÕ �(such as„ )… d givenV ò is out-of-band;v@wiseî ¾59is &4 `, i.e.À!id6 BÉ$tÖÒan error if *Y 
¶3©� iÎ  (`smalle^Uan 5.# 5""" &ifÒ; :  
õ = DEFAULT_PROTOCOL( E ?< 0A oHIGHESA  Pelif Ú F0 <=‘ <<= 3 
\  raŒVÕE6#("‚¶ Ð beW ]%d" %Q )Æ q ‘ –  £pW ?< 5Š L  £sÜ V>= 5"} lself._4 =‰­ :try� A  e_¸0 =  . 7  ex¿¡ Attribute6
I T2Typ  ("G  H'T 4' aF È ±framer = _F
 (� ø P   =K"f.= ¸ A ( r_large_p4    À_bytes
     ó   self.memo = {}
   @prot Aint( Jcol)# dbin =  Z >= 1! ‹fast = 0 çix_imports = f 6andO A< 3
9  def clear_« (ž !):  ° @"""C ðs the pickler's "- "".C  ) @The  " i+ ñdata structure that remembers which object0 q c ò has already seen, soF ôshared or recursiveJ F $ar­ ð d by reference 0not õvalue.  This method isC ôuseful when re-using%s.' 5"""  <ñ.Q"() bAdump\,¬ 
asWrite a] ðd representation of3   tÿ Èe open file.z p# Check® bther P©ò was initialized correctly.÷ ð Ð# only neededn Qmimic÷€behavior‹ _¡.b .Ù )0if `shasattró  "_²  _wé "ý  9Rraise± ¤ingError("^  __¾ A__()Ë  Z QcalleÖy H  F"%s.C A" % ‘ ö.__class__.__name__,)~"if»{ x2 f çÌ ÷(PROTO + pack("<B",; S 	4S  Ðframer.start_ Fing(— w ‹save(obj Ž KSTOP  G ger.endR ± – ±1ize™ @Stor3 €aect in 6 ~H   # ÿµPa dicÃ€ary mappBô@ idsdv2-tuplev#äScontao "UnsrY 1keyÆ �M  beZ  —  åŒ—    6 0is (0ten{  @ Y O ·will become×  % ; ú ‹ '2!mo>~ ús2d)H 	É“transient` s ·pkept alÖgduringG ° 7ingxä 0use� ¯ ¤ /�length af Ñ ‡s just a^ `conven±Ø  Prequiº ntâ É h WD¸s be unique|0But/ Bðppears no advantageƒQany o°qscheme,Š)th– b allowÅ â  to€ °implementedí @a plAG(butã ògrowable) array, indexOÑ 6keyÄ 	 i
°ereturnY ðassert id(obj) not ãin self.memo
  ¥idx = len( )  Rwrite ‹put(idx)"  Q ñ[id(obj)] = idx, obj
I ò# Return a PUT (BINPUT, LONG_ ñ) opcode string, with argument i.I @def ‚  – ,e !):  Ê "ifÜ ¦proto >= 4    rƒ uMEMOIZE7 $el9 :bin2  ifc j < 256 P ¿ Â + pack("<B"™ a  , OelseB G IG C Ñ  Ra+ repr™0.enHý("ascii") + b'\n'Š"GEŠ'GEŠ?GETŠ1get?, iˆ OM — 
MkK	E K)  B 8$ 8)6 w2savØ ,  ÷_persistent_id=True	 ¥ñ .framer.commit_ (Œ Æ# Check for M ö id (defined by a subclassSpid =ò† ƒ}0if ) ÿ is not None and½  
ž» â F(pidy CSÇ @the €  ZM   .1%P Wif x ¡ Š  € C Gx[0]�‘ Ðrv = NotImpleB%ed” óreduce = getattrÄ" Ár_override",1	ª $ ¯ x % ‰v Pif rv9 
– 
î Hõtype dispatch tableM  ó @t = $ h    f> ytÉ  ) @if f� 
‰  " f Ôò  # Call unbound method¦�explicitŽ	¤  G o,  è lprivatç À if any, or ÷	S ¤# copyreg.Þ _‚ã'3 %',`D ))O ¥ Ó ú    Æ a ý!a àQ€a customfa ù; treat as regular h #B  Àif issubclasßs(t, type):
   ÿself.save_global(obj)* }return
 ö!# Check for a __reduce_ex__ method, fall back to# _L <   = getattrŽ 9, "U ~", None¥ 3if @ ais not' ö Crv =- (^protoS OelseB æ ª _§  …«  / ¯ ¥  " ©   ðraise PicklingError("Can't p ýe %r object: %r" %š G  À(t.__name__,G &))&rstring ITed by„p), mean "�B as �"Š ûif isinstance(rv, strÖÌ A ÎJ, rv5� ¤ µAssert that“ ¨ xa tupleŠ  _Ž $ � y`%s musi  Q Æ  ø "orf 3" %ƒ 	F¢ i< ò
ed an appropriately sizedK ± ˆl = len(	!if$p(2 <= l 6½ T
4by Ï Vhave ¯-@"twoÏsix elementsô SR 3theð() output and finally memoize ( Ã÷  Np=obj, *
( ñdef persistent_idÇúñ# This exists so a subclass can override itV  ý r0…k k œ p g 7pidv!# ó a’ É id referenc‚Ý 6bin¥  u   e `(pid, 
 _o ß [=Fals=5 ö write(BINPERSID2[:tryv z E B   +Û ˆ ö
).encode("ascii") + b'\n'e  B  except Uni- E3 ¬m Xy L  "ý � IDs in ëRcol 0‡€be ASCII® Sings"x¯= &À, func, args€@ate=�², listitems � 8dic$ Ò state_setter7  >
 	|PAPI in"ll;Esome†"esd ø Ðif not isinst÷ance(args, tuple):
  ðraise PicklingError("/ ò from save_reduce() must be aK %")K ÿif not callable(funcj  ( j 	Q 5")
l  ” € = self.  Twrite  5  i @_nam  qgetattr¥ A, "_ j__", "Ó c ÷ proto >= 2 and I =< ºewobj_ex__"[Pcls, K@, kw ! = °  ‡91has“ 4  ’ [ew__"B 0 °2[0]I!{}f ± has no __nL 	v  J  q.format)ã 0 €if obj iZ at None4cls Úobj.__class__ A ¿ ¡the wrong Q "Ä 5
Ø4§  WJ(clsþ  Á   Í ê �ª(NEWOBJ_EX! Nelse…  j  = partial� .Í!, (*ˆ O, **u ­  G 
o È (ß  © fREDUCE7 BelifrS# A _Iñ__ implementation can direct _ ùcol 2 or newer toù`# use ò more efficient ^û opcode, while still@ †allowingn 0È°1 to work nîlly.  For this‡  * ,‰  dÊ ¸returned byð ›should be‰  ß"ed¤ F!_,ˆ �its firstÊu( B , aD  ll.  TheX7for\ 8 R @s fo °�lthough peF>way averify
¾#k 7defˆ  Ê!, ½á#� D ãð2 
[ 
   P¬Tcols ÑDwillÌ °a referenceéMvG :‹(úabove) R F ¤ §`remainp ±<é  ¶´B QwhichUsa at un­ a ðtime
            #÷% (see load_newobj below).  If __reduce__ returns a
  ñ# three-tuple, the state from athird   Û item will beG ñpickled regardless ofA ñprotocol, calling __setg +__G Qat unL  ) Gtimeá Tbuildà 
9 
 Ð Note that noÑ sndard _#û
__ implementation exists;F ðyou have to provide your own.  This is lenforcñcompatibility with Python 2.2 (ç ûes written usingƒ =¦ 0 or 1 inC a3 shou5{able byE u )). Ùcls = args[0] ñif not hasattr(cls, "@Y__"):,  Opraise P�ingError(%  ) "n aR Qobj__†  p  ²  i 	C 0if à!is› �None and Å  ßobj.__class__¥ J )awrong n )")ª  ä Y*1:Z@saveP
2   7 
  †e(NEWOBJ JelseÞ ? Ffunc%  m V …REDUCE)
º `
e #R ù `objectûpalready—  @memoE is means i& a  “ ð# recursive. In tE1cas}ðrow away everyth€we put o+ aastack,Qfetchpž Bbackeš 
ü if id(obj)¾ Pself.¿ 
ó  ² „aPOP + ' Aget(	  0 [E Z][0])~§ O : 1ize �ð# More new special 1s (ËBworkFPolder“YEs asdß# well): when Ì�4V5Ø's,D  314thZ15th! n’iteratorsdGlistE  .sC  di/òtems (as (key, value)Ž 0s),Š  Ô.0if S H ã # 
¤Qõ _batch_appends(7 
ß ˆ N 1set. (8 
O Ã  +™  if{ teî0ter) %  M 
A  ~UBUILD À     else:
   ú2# If a state_setter is specified, call it instead of load_build
 O ò # to update obj's with its previousm .;  ²First, push% ’ 1andC Ptuple‚ ÿexpected argumentsO  R(obj,I  ) onto the .ck~ Xsave()R # °obj)  # simŒ ðBINGET opcode asõ  Aÿalready memoizedq 	j Îwrite(TUPLE2 ›# Trigger¹	ð �functionÀ~ b oREDUCEb ‘he purposp ß ý to carry-out an+ñ# inplace modificaŒ  of °. We do notF @e abG @what¢M  ñmethod might return, so`output• ÿeventually removed fromP  QPOP)
9 1# M} ðs below this point are dispatched throughÃ  b tableJ + S = {} 0ef V°_none(self,!!):{  [  .” 3NON«J æ[type(None)] =J ] Obool] 1if ` ¦proto >= 2y } �EWTRUE iÂÓ else NEWFALS•  1   C @ = Ò  ¬ Ì   Ì OlongÌ 
:bin‚ â ñ ³ ÛmÑ"en¬1o fÜ Kõigned 4-byte 2's-compŠ à ð# format, we can storem ñefficiently than{generalH Jcase–!# ÿ` one- ñ2two‹ 2uns› JintsÝ �J>= 0  ®  ~<= 0xff   $  `òBININT1 + pack("<B"Ž  : ‡	×   
u w 2w Hw À# Next check¡Ã6	R-0x80 0 <=u  B0x7f .*² i² %q enGBd = 
 _ï s	h‚n = len(% d ¥if n < 256Ä À         sel÷f.write(LONG1 + pack("<B", n) + encoded)
  Yelse:   8selN 4N iN 
ereturnO ‚if -0x80 p <= obj B0x7f 
| x òINT + repr(obj).¾ €("ascii"Ð Vb'\n'Î Ê N  O LP ñdispatch[int] = save_long
Ü 2def `float(h ,Û )Î 0if  F.bin [pBINFLOAè ¬B'>d'H Ö > &Ö · Ø  Ù _bytesÙ 
šproto < 3ß `if notA: # G   Áect is emptyC  )cqreduce(7 A, ()= 	5 ë K G  ï#cs:,B  0  1(stm¹, 'latin1') >objŒ óqn = len´r  ÷*ff/´ ·æSHORT_BINBYTESrÀ	!elU B> 0xIbff anduœO>= 4n  _o q_large_j(u 8v Qè€�u =g ÿ
framer._FRAME_SIZE_TARGETv u Iu ¢5º D   +vº 3 vmemoizeœ  _array5 6L 4 / ß K   s,má>4�YTEARRAYŽ	F 		 	öif _HAVE_PICKLE_BUFFERçÏpicklebuffer, w©+< 0 # praise PN ¡ingError(" !eB] ð can only pickledŸ with "
  ù"protocol >= 5")5 H ù obj.raw() as m:!  a þif not m.contiguous%  ) ñraise PicklingError(" ±eBuffer canL @be p' ed whenË  d ö"pointing to a non-— ! bg å  7 ïin_band = Trueã bself._A Á_callback is° ONoneô Y _bool(F Z(obj)y” #f > [ ð# Write data in-Á º  I þ# XXX The C implementation avoids a copy herü  B ßif m.readonlyŽ  ' Þ ò save_bytes(m.to
 ß   1 ?els8  
O _arrayS O 	,oout-of0x w\Î(NEXT_BUFFER¡ ¤ S …READONLYW ´˜dispatch[A] = S�
4 2def 1strZ , J 1if Ì 6bin  ¶ `encodeï Ý ú
('utf-8', 'surrogatepass'ù ‚n = len(5 d  � <= 0xff P b _4†  Š ! ÿSHORT_BINUNICODE + pack("<B", n) + u !elw >v f | _} T_larg·ƒ 8„ Q„ ,ƒ =pÿ
framer._FRAME_SIZE_TARGET „ 
ƒ Iƒ K_Ö R YKPobj =aû.replace("\\", "\\u005cV/ 0/ /00/ n/ a/ r/ d/ 5x1a1 ñ1a")  # EOF on DOSa ¡  Fœ:praw-uniU¹-escape') +D  H  Gb'\nV^ qmemoize8 5str;strûðtuple(self, obj):
     ðif not obj: # tuple is empty
!  Éif self.bin:  !  ùwrite(EMPTY_TUPLE)( Oelse: 
MARK + ;  ureturn
O ¶n = len(objd bsave =¥   . Dmemo     ü ’ <= 3 and9 ªproto >= 2« áfor element in/G     u (% —   ð# Subtle.  Same asE ±the big comX ibelow.W Qif idç  1  ½ 
—  ] 4getÞ @get(% [5 J][0]Š  1 ­ÚPOP * n + get* ¯_-¿size2code[nk  ’ 1izeÇ 	Þ ×"# C0 or 1›j b isn'tš," '> $ _ ô# has more than 3¾sa°; ?  (‘
ÿK ÃQd was�0in 6ð when we entered d xe(), sof  Ø # R process of. 1ing B%'sp must h3 T dI  3 0 it/&: F  €recursivÒ0The­«per actionL 0now3 ðto throw away everythŸ ‘we put onc `stack,öG ¡simply GET( ž û(it's already constructed).  This checkK Rcouldý �been done` ?"çû" loop instead, butJ :�s are a r Þ n ¢«q
¡@POP_¥À6   U5-- 1  ô™availableÕ  ¨ ^ � * (n+1)a ¾3No &onù M Ö U.ã… ‘dispatch[ß]�2aveòÿ!deØpe_list(G ,Ž)8 - .Ž ¥FLISTàñ1 catFuse 3 ª  '  U ŠV % ! 	ê  7     _bð ‚_appends$<  é 
  	ò_BATCHSIZE = 1000   T  h ð, items):
        # óHelper to batch up APPENDS sequences
  Àsave = self.  Ewrit  
 bif not5 Ebin:  U êfor x in items     f 9(x)4   d (ª 
 greturn 0t =^ !r(c - ªwhile Truew òtmp = list(islice(it,¿ ¶_BATCHSIZE)H  � n2 jen(tmp  ý J > 1c  3 Â JMARK2   >tmp:  " SY  el� O K jtmp[0]1  h ¦ hp# else .ù	is empty, and we're done¶ } , <H� À@def Ÿ `_dict(wf, obj)6 "ifR Y - .¾ ¦EMPTY_DICTà  ¼ ö:   # proto 0 -- can't use 3 	Ä U  ¹2 + V % ! €memoize(ª 
 _dA_setŒ " .
 "))²@dispˆ[ò ]l1aveÿ J ñif PyStringMap is[7NonÄC * 
J K  \�  ¿ ,-'msd/# % wSETITEM&;K‘>= 1 onlyg  E Ã Ë 7;Ok, v:kò ‰    � .(v ,× 
 “ C iS¤2V4  õ 8s‰ =<5[0]' f   j †   º¥Z/se¤ ¸ ÿ! Ž.Ÿ6< 4ô$Lá_reduce(set, (¶ x!,)*= 	aðreturn

        ówrite(EMPTY_SET)
  õself.memoize(obj)
 ’it = iter 1 Å while True:+   ñ	batch = list(islice(it, b ¶_BATCHSIZE)|  6 n2 1en(> 
 Šif n > 0g  5 Î JMARK2   0forµ Qm in U ?  ' 0savŸ .emB ^ ŠADDITEMS  ” <Ô c areturn @disp€[set] = z B_seti2def  frozenset(1 , ŒX  5  <  ®  Z  È ­   X   "if© –proto < 4P    h .M …_reduce(ƒ 1, (Æ „ !,)Œ = v  ? ã  } (•�;obj€ ƒE Qif idp À¢  �
9 €# If the$àect is already5    4 à, this means i& f  ¿ ò # recursive. In- @case8 ðrow away everything we put o+ eK Ðstack, and fe … 0objž ‘back from³  š .> 8@POP_<" +´g	œ[K][0]@†oFROZENé �ü£ Q©fglobal¦Æ, name=None)¨Ö 
˜ p       `    ^0ameÑ O N    f ‘ = getatt”�, '__qual P__', 6 ±O bobj.__A ‰ amodule   =ò"ch  ›ñ g :tryª ²__import__(6 I –, level=0:  × "  2ys. "s[ 7 ]-°obj2, parenž_Sibutem Ÿ ‘except (I” £Error, Key
 AAttr?  Â � áraise Pickling" (�  % €"Can't p& ýe %r: it's not found as %s.%s" %= Qð ¿ )3 Ñ4 ;elst if21 o c Ÿ Ä  ) È  ÏsšÔÒ 	 K Ö c
�J>= 2Eðcode = _extension_registry.í#3) ƒ àif code:
       öassert code > 0
 
 "if �<= 0xff:!  ' ñwrite(EXT1 + pack("<B",: -))3 +elV X 2X HX 	/se¡ 4I iI ereturn¸ °lastname =  õ.rpartition('.')[2]+ ûif parent is modul’  A 4 = S 9 õ0# Non-ASCII identifiers are supported only with protocols >= 3.H �if self.    4 Rsave(ž _‘ 
£#  êÆSTACK_GLOBAL< ×þ ?not_ ò_reduce(getattr, (= ,<] ; Ú 3Ú › • ˆ + byteså  , "utf-8") e'\n' +7 Æ 8  ú 1 ì ky`fix_im°s   _ roý_mapping = _compat_pickle.REVERSE_NAME_MAPPING¤ r` G oIMPORTI :if ! ö Z) in ¨ È  Ì @,+ =8 [^  + D   ÚM € Cã ‚ | 
4 [T 
v >tryQ ?_ascii? Ò 	C5 C *  except Uni�!En Nrror  praise P(@ingE% ( T r"can't Rw globalS° '%s.%s' usƒ"D > l”col %i" %.ï,ip)) fromÄ%e
R ¯Âmemoize(obj) @def ‚`_type(%  ,  ô  if  C# VNone)  å ¢‚ L L 0 0, (2 !,)W =[ “ m7obj\ ÏtImplementedf < p ?...e ?...Z êhð
ispatch[FunctionType] = sðave_global
    dispatch[type] = s!   ó


# Unpickling machinery

class _ Ber:
L ð
ef __init__(self, file, *	 ñ x_imports=True,2  ‚  õ"encoding="ASCII", errors="strict", buffers=None):C ñ"""This takes a binary} € for reaY 1 a Î âe data stream.¼  † ð
The protocol version of t  õe is detected automatically, so� "noH � argument8 kneededo ! **ñ* must have two methods, aÃ #() U thatn ö •n integerv S, and< Jline@ • requiresI %no; ƒs.  Bothq ðs should return byte# RThus » F kcan be†Øobject opened” ¤ P io.BR %IOF 1 ò, or any other custom  € meets tþ ÿ [rfaced ZT-like9 e‹  m[eE m eB lÌ nE 
 RrjC rCIf *§*÷0ot ¯D, itF  n iterablec2 0-en dl ê àaDøconsumed each time�Ñ— referencÚ°an out-of-bn Ä view.  SuchZ|�been giveïe order“ !tos ä _ýPback*Æ 1a P'rU‰   (Z�default),X n � 1areyn~ Afrom# Éó p, assum¦Pthey 8  serialized0 5re.D IK"an_�Î Ps* to½ž iúj E 0wasäñduced with a non-: O 	OÊ†optionalqµ 5*fi'D*, **Ê| *�*, which:  usé ðo control compatibility sup{ ì F 	Bp genera×àby Python 2.  ¸•  Ó
ÀH €will tryB0mapuE oldL ` names  õ2new � Á $in0 @3.  �
 û T tellÎ5howG Ðto decode 8-brðtring instances ópickled by Python 2; these
  ö0default to 'ASCII' and 'strict', respectively. *encoding* can bI p'bytes'I Breadg €s 8-bit N ñng instances as 0 • objects.‘ 5""" óself._buffers = iter( S) if  ñ is not None else
 G Pfile_› pline =  . , ( 
$ šmemo = {}  4 =  ! 1rroÍ e	 
 @protV 0  fix_import 
( �def load(0!):  ß@"""R‹$a 	nð representation from°R openY  E aReturn Óreconstitutedº° hierarchy (rified i0 bŽ  ò# Check whether Un¢ ð
r was initialized correct|wThis isE °only neededxQmimicª Òbehavior of _[ .d v.dump()s!if>qhasattrF@, "_¿ 1"T Traise´ @ingEÊ&("a  __Ã A__()Ð  ›3calŠß L  F"%s.E A" % – õ.__class__.__name__,)) ÿó ._unframer = _U > Ò ", ,   I  # =) U 1
q  ( !in·U 	,   0  o \   
0 êmetastack = []  dappendb & . 
@ p Î 8   0 „dispatch  ! 6try{ ×ªwhile True   `key = a &(1x    ‘+keR     �1EOFz‚     ”assert ispR(key,qn_typess Ï �[key[0]]2' Àexcept _Stop½@stop^ 
Ú r, b.valueK## I`a list™¦items push3«ñ after last MARK80ruc­¶ ò‚pop_markª ‰ W ¹P !  Æ]V.pop(ð * 2+ 8 Fò t é › ¥ersistent_˜W, pidIÄ4EPunsupêEed pG 1 idO“untered")l ”#{} Àef load_prot£o(self):
  €proto =  µ.read(1)[0]  Âif not 0 <= , ö<= HIGHEST_PROTOCOLO  V òraise ValueError("unsupported pickleL ¢col: %d" % )w � p x  ‘dispatch[z Á[0]] = load_, 
% "ef \frameñ  ÷_size, = unpack('<Q',&8)‹ 6if 4   > sys.maxB ø 8  * 8 õ   Œ o ú 1_un !r.Ý  ( . XFRAME* lpersid:tryÅ 8pidöline()[:-1].decode("ascii"²  except Uni  D& ù
Z !Un1ing# (² 6 "© Âstent IDs in÷col 0 must be ASCII stringsŒ >Rappenë .N _KC(pidÜ?hPERSID@5 dA2bin D3¦stack.pop(“ !>BIN– � ™ =nonæu BNone� ó 9NON1 C V OfalsW 
F! X iEWFALS\ I ] ?tru\ 
=Tru³ YEWTRUZ  F Y <intŸNdataÓx2if " "= » :1:]¹aval = ï 6 'el8 ˜ 7  Ê 6 /se\  ¶  … 2, 0Q Ã2val Â8INT²;int
0binW  F ï  . üiü 4)o ;BINr ` u 1ƒv  ih 1Û i 1j 2j 	à Hà 2à 2x 2x Llongu !Ù 4ú0if & 0and ï[-1] == b'L'[0o1valvB _ º Ù0val/@HLONGÅ ðlong

    def loóad_long1(self):
  @n =  µ.read(1)[0] Idata %n) 4 Ñappend(decode` (4 )' ôdispatch[LONG1[0]] = loŠ 
L 6def 4ž ÷, = unpack('<i',¬ 4g  É †if n < 0Ø   ñ,# Corrupt or hostile pickle -- we never write one like thisœ  D   �raise Un;  ingError("× O ò	has negative byte count"
 E  M54M4M\floatM³! ù³line()[:-1]V½XFLOATp ; p 1bin s 	Ç)>dÇ 8)t(u =BINx d { _yastring| w, valueáò# Used to allow - ð s from Python 2 2be P ¦d either a#ÕsI0UniïI ð.  This should be up Õonly with theNÒ# STRING, BIN ¶ and SHORT_  opc %s.9 "ifúÐencoding == "h*s"ôbreturn> Oelse' .÷ @.a jeë&s)tÀD1 jâUŠ ö# Strip outermost quoteibif lenGQ >= 2  [ 0[0]ö  9-1] šin b'"\''æ  , 0 =   [1Ýˆ  å3the´ •à argument mustðÂ dëi © Ü“cs.escape ò -[0€&�~“2bin –Ç# Deprecatedvðuses signed 32-bitx5gth#?len~/le€ 8çQ/e = /leŒp  ×… ZE]l\#IÚ¡ #Œ> maxsizŽ|ð
BINBYTES exceeds system'sF Pimum K % "³ h À           "ó
of %d bytes" % maxsize)
  Áself.append( ’read(len)$ ñdispatch[BINBYTES[0]] = load_binZ 
O 2def qunicodeP !):  n _ k !tr .o óline()[:-1], 'raw-B Œ-escape'Œ xUNICODE‹ 2 Š 3bin n � ñlen, = unpack('<I', ¡  ‘ #(4r  · „if len ><Ñ   óraise UnpicklingError("BIN¥ ð exceeds system'sH Pimum ‰% " N  "ÅZ(Éý
, 'utf-8', 'surrogatepassX¶ [E^8_Q_8_78`£8a8ba``í^_ �ƒ ºƒ=#;�ytearray<^�YTEARRAY=R1b =Þë ïQÏbinto(bM b ‰ ç¾ 	¢Mf¢next_buffeÐb"ifQ Ÿs is None@Oÿe stream refers to out-of-band data@‚but no *© ös* argument was given":try¤ `buf = ë ç.Ò 3  äúpt StopIterationD (¸not enough Û © • 	´"uf{ ¶ðNEXT_BUFFER[0]] = load_nexót_buffer

    def load_readonly q(self):$  ( `buf =  ¥.stack[-1] ö
with memoryview(buf) as m@  D ”if not m.l 
  # 
a t = m.to/ !()r ÿdispatch[READONLY_BUFFER[0]] =Î ì ü short_binstringì 4lenì  { V(1)[0í Idata 2len™ Á aappendW “._decode_k  > )/ È ø SHORT_BINSTRINGÈ ª È Qbytesp ³Ç j© ë  Ì ž _BYTES�  œ 0uniž (!tr= 7(¢ ÿ, 'utf-8', 'surrogatepass'[UNICODE¿ ¢ Á Qtupley TTitemsþƒpop_mark˜ÿA 2 — ITUPLŒ , � aempty_ ‡ ½(] mEMPTY_c O i c 1d ì1 = ! þ,(q 1aX m 2L XÑ m  2:Ç[# o ;2],})’E 2 2 3\  3  3 � 3� 3� •Olist“  +[]lãHLISTb M f ¯dictionaryl 	/{}l ?DICl  S r /se× 
  ½/SEm  ;setf `frozenG  @Ðu§E 6 ‘ kFROZEN‘ 4 ‘ ÉV Œ , €æ d w  ‡ÔK w Àpop_mark()
   ó d = {items[i]: 
 B+1]
   ñfor i in range(0, len(. e), 2)}/ áself.append(d) ñdispatch[DICT[0]] = load_dict
# ð# INST and OBJ differ onlyu óhow they get a class object.  It's notI 5 àsensible to do= P restM ña common routine, 4two sI ñpreviously diverged¡ Cgrew¢ “ent bugs.3 kš !isS § ñ to instantiate,B €k pointsž  th¥ £pmost markJ Þ ñ, following which are] `argumeD  ›x ’.__init__Ž Wdef _{ (š!, + �, args):m  ã@if ( 0 orK2 is: 3ce(1 …type) or3  7 thasattr$ `"__get…  L G__")c  0 6tryt     rvalue =š  (*; 8    þexcept TypeError as errJ Vraise( ð("in constructor +™%s: %s" %É  g  Ö ö.__name__, str(err)), sys.exc_info()[2]² Jelse› 	á  P Bew__^ 7  ž81 ) Ç- ‘ÄTPmodul<> öreadline()[:-1].decode("ascii"k  Ð ? = 4 5 Qfind_ß!(m‚  , T b [ 	}@ ,t @pop_ë"()2     ó <objá# Stack is ...E>) @arg1ö2% ü mÖ —  Pcls =6 rs.pop(0°  )â 3clsW? Õ 8OBJÔ ;objÓ ?newÖ  š sà ‚ � › ‡  •obj = clsp  ^? ­2obj^ º ;NEW½ « À <_ex™/kwÅ   å (B, **� Ö µï 8_EX¯ò ;_exõ lglobalò Q�_utf-8�4 Pi �àappend(klass)
ñ    dispatch[GLOBAL[0]] = load_global

' "ef Sstack q(self):!  % pname =  .( e.pop()  _modul" 
€if type(J ò ) is not str or mC    ƒ òraise UnpicklingError("STACK_ã � requiresY "ž · aappendÙ Â.find_class(w !, ˜ 3 9\ ?*EAext1d =5cod¥read(1)[0]<ž àget_extension(2 Œ HEXT1„  i | 2| ò, = unpack('<H',ÇŠ "2)g  aˆ 2ˆ 2ˆ 4ˆ iˆ 4ˆ !4ˆ 4ˆ 
O Ú !, UTvnil = [ˆfobj = †¡_cache.get�V, nil.0if 1 É6nilZ Ms6obj8   ereturn0keyy õinverted_registry{ > !if8:keyo !ifß € <= 0: #% €e that 0l†forbiddet  ‡   �# Corruptˆ�hostile c%e.¡  )   ƒÖEXT specifiesˆ �= SValue»"unê Uered ýA Q%d" % ý  p„ÁF*key$ ¿[ö ø5objÐ  .� Gdef X  % ), tQ# SubAàes may overridu&is:³sys.audit('Ub '^ …  *"if¢Òproto < 3 and ¶fix_imports� 4 
ËÃ in _compat_{ ÊNAME_MAPPING>  B ê  �< [j B G Celif6ƒ  oIMPORT…  
8 [¬ y _%__› vlevel=0
VJ>= 4•ð  _getattribute(Àm su +ÂOelseM L G ³™lreduce=p	,@args ð tack.pop()
    ð    func = stack[-1]
    ! =% q(*args)  òdispatch[REDUCE[0]] = load_reduce
' "ef ¡pop(self):  _ 0if  .g    7del 	• Jelse- E ›pop_mark(Ÿ 8POPœ >pop™ 9  G ž   .V [_MARK[ I ` -duù [ aappend æ ½ )DU½ ,du½ 1getB ¸ bi = in ò.readline()[:-1]_  a?tryE ” gmemo[i3 ú except KeyError? 0msg%õ'Memo value not found at index {i}'ÿ ‡ ñraise UnpicklingZ ñ (msg) from None1 o8GETu;getp?binw V(1)[0ç/ as excd;BINRlong_ 4ò, = unpack('<I',},/4)69*k^LONG_/4"puI`Šif i < 0ïVêö"negative PUT argument"r´‹ ¤6elf.
)PU/pu Ð f î
Æ ?BINÉ /E æ>binÏ ¶Ô Ðà ‹> maxsizV¬Gë /J ð Û ‘ <izeÁ     a  P[len(	 )£àself.stack[-1]ò
    dispatch[MEMOIZE[0]] = load_memoize
) "ef Ñappend(self):  H €stack =  .  Pvalue  # e.pop() Dlist I[-1] .k A 4 ¯ hAPPEND® - ­ s® Pitemsx 0elf’ [_mark— D_obj# Ñ 	  6tryý  `extend;0ist< . Ò úexcept AttributeErrorD Fpass0 :lse Q (½  y   ereturn; ó# Even if the PEP 307 requires H b) and 7·() methods,F `fall bÙ&on) W Öobject has noT G E !orD õward compatibility.& … = ! @for ø 1 in s. (S)s*0seta *ú	” —  Ø ?key ?dicò  @[key[ i É xSETITEMÉ ³ É ô €  ´  ö 	ð� ~Árange(0, lenqWs), 2
 � L [O1s[iP 3 + äØ 	¢Ù £1addH ¤ » <popÎ!se‘" Ý ãif isinstance(/ [, setØ  s.updateÿ ¨ ö e² ad6 5add,  0 T0temWÄ 
Õ # 1addf Ö DD	5Obuil®Ostat® # FItack4set8 €getattr(, T, "__ ’__", NoneÌ  Þ  ifd: iGt! 
@ (( =  A ø5sloˆ  j ná ã r, tuple Ì_ [ == 2� / ] , ^  
7  _	0 =  !._ %__8  Â `internU2ys. 	   $@k, v$e .*(™K û f type(k) is st] # Ð    inst_dictû[intern(k)] = v
  ]else:  % ºinst_dict[k; »if slotstat; ¶for k, v in# Ž.items()f €setattr(j ,9 )Š ðdispatch[BUILD[0]€ ²load_build
% 1ef  —mark(selfb   ñ.metastack.append% . h  æ *  Q = [][  8 6 = & L ( ¨ HMARK§  “ ¦ Astop� ¦ Zvalue^ Fpop(� €raise _S< -  x HSTOPx  e ð'


# Shorthands

def _dump(obj, file, protocol=None, * ñx_imports=True, buffer_callback+ ¾ š_Pickler(N 
F %fiR ,0 X Z  $).¯ )¿ sÀ º ,ãf = io.BytesIOlÏ Ì @ ü ±res = f.getÒ‚ �assert is°ance(res, b§ b_typesû”return reÙ †Åøencoding="ASCII", errors="strict"›ˆsêq I_UnpóÝ= 6#s=L _    — 	 ˜ Ÿ !).Ù    os(s, /¬G ç Ú	è (if}cs, strí ³ ŠPTypeE?q("Can't� Ð from unicode> Bing"µ %
w
Î]= 	 ^ó# Use the faster _Î ò if possible
try½ã " -% (Û ö ;ing O 0 &erA *   !   s  +
 s¢ ¡)
except I¸ � Ö s  k 4 = &, žH  o  ,  !s,   Öf,mAs, _‹  s–rDoctest’ 
 x# d  qé .. òmod()

if __name__ == "__main__"Î ð import argparseñ
    parser = arg ¡.ArgumentP (&  * ñ$description='display contents of the pickle files')< V sr.add_a[ U '1 _1 …', type=Š ñ FileType('br'),N  Š ûnargs='*', help='z y °-t', '--tes
 "acÙ ¶store_true'q f �run self3 o suitej Ov', ` ÷verbosely; only affectsx 3runv  # =Â.g b"s(x ifÔ s.á :<_ " Felse bif not4 –!  {f €r.print_K   
O   �import p/ ƒ   �for f ino  + Âobj = load(fÚ    \ . ñ	(obj)
'''"Executable docÐaá " z 0ðmodule.

Extensive com xs about×Óprotocols andìñ-machine opcodes
can be found here.  Some funeqs meantŠ  external u‹‚
genops(í ÁGenerate all‹ g <ƒ b, as ( ,R`, posið ä) triples.

diZ ó, out=None, memo Ñindentlevel=4~ Pèð a symbolic disassemblyóa‚ .u#

ð $cs $io
 ×  $re
 ðsys

__all__ = [^ � 
 ðoptimize']

bytes_*sþq. ó	

# Other ideas:
#
# - A« ô verifier:  read Ä Ôðcheck it exhaustivelyªð
#   well-formedness. Ð() does a lotpthis al] &y.~ < – $nt‚ @exam=	… ´return its rq number† 1(==
‘highest .% ÿ attr value among2ù!).L  )­  ¨!s Á binfo aÿ7endÉ r “ H T Ê ðple, tuple-building ñ is sometimes more} QelaboÝðthan necessary, cater>  Z µ Óossibility th— j J €is recurÀP.  OrŒ•s Pa PUT† gOdF °'s never ac{ !edM  byÌ ‚ ` GET.
Q"?"F a˜@gram¤ a virtualb�(PM, butò  d uí ñly
# called an un í 8 p).  It'R€sequenceWàðs, interpreted b Nk taX€bitraril¥ðmplex Python object.
ñ#
# For the most part, ðPM is very simple:  ñre are no looping, test	 ð	or
# conditional instruc  s,4 àarithmetic and 1fun  ð calls.  Opcodesf ñ*
# executed once each, from first to last, until a STOP oC  ¿ r2 @ed.
é ðThe PM has two dataf Pas, "astack"™  Rmemo"; CManyW ðs push Python objects onto E ±; e.g., INT.  Ï 2 £
# integer< 6 on9 Ð, whose valueÁ bgottenó ð	a decimal string
# literiñmmediately followingW  ƒ i �pickle by¸@reamu0the½* cs take± § Qs offR â 0.  OÁresult of unX  w ¶is
# whatevæ yis leftî B whe”  fi/½üƒ o  ’ ‘ y an array€ ‰ñ , or it can be ¹0menBð as a dict
# map¼ @4tle’sPI á r @servÃs €PM's "loa0ermN qemory",; J9litW Pindex  S  D@akinr ð variable
# nameFSomepBop aY� ± oM ¡t a given j 1,
#‹ oÖ°!a + Þ + a2 Àb againxSAt heƒat's all K°.  Subtleti#brise fR±se reasons:€1+ O.� identityy s°àarbitrarily covxV2sub»  \P  mayß€shared (q 0exa0 ½ñlist [a, a] referÛ ~ saZv õ a
#   twice).  I7@vitaå (atØ€recreatex£isomorphic“K @grap¡ðaithfully reproducý ® 2ingW³+ RecursiveB  ø ŒÉ ðafter "L = []; L.append(L)", LÁ  í &@L[0] é   Ê is @rela¬R�Ã RpointN s…€sequence  ã™ ÅsýÁ in order toG 1get%cright '!in=TcasesdThingsZ Ðdoesn't know ? yt  ¢ about.  Eå�  : u  > ;  èÐñ's builtin scalar+qcontainÁ  types, liks# Atupl�€They genzPly haÃsss dedicd” 0thea Ù± V Pmodul 2fer_  0amÁuser-definedK Pclass˜ ‡!'sì Aledg+ðlimited.  HistoriR@y, m¼0enhY ðments
#   have bðeen made to the pickle protocol in order  ñ<do a better (faster,
#   and/or more compact) job on those.
#
# + Backward & €tibility@ ò micro-optimization.  As explained belowq ¦ ôopcodes never go away, not even when± EwaysÅ Qthing» ñget invented.  The repertoire ofðPM just keeps growing ou 0timÞ ö    For example,@¤0 had two ­ �for buildD ñPython integers (INT˜ —and LONG)L Ò1 added threen M  w¢-efficientÂ \ �of shortP b ,mß2S /woQ K Glong² 0beføS ,4Tonly u°#a ð  C L ðtook time quadratics Š`numberƒ€digits, í Fbothã 1andG !unb ‘ing).  "Oð bloat" isn't so much a subtlews @ourcêI Pweary= ¡2lic‰ ¾J
# P s: ø . aÏ @meanI Bof a± e¯úchanges.  Instead new
#,  s ¡÷ºó each version's ù ðer can handle allƒL !in «H Ãate.  So old… �s continu@
# b`adable� v4† �generally0 tN ðto restrict itself to
#¥  Ž0setç!Qavaild  unz†previousU¸  o,Ú0thaç usD 
TcreatÎ ' I  V@curr&C 3 reÐ  byù Der
#_ ›0Howæ ,Ä doq!ot0ainÑ 2  ´@embeªP
# wil0 itèBf anf ¹Atrie‚ ‹ h  us>Qa lat• µ^ðresult is most likelH` excep>! d¶A seeI Ón unknown (in| olD)¡® ƒoriginalô
 used what's now called "� 2 0"§ $ C was" ó 
# "text mode" 332.3F0entvM@ byt51eamè  ¥Pup ofØArint#ñ7-bit ASCII characters, plus`vnewline ,a± R.
# TÒ gwhy it·  ´ D.  P0�  smf ¦°elegant, bu„@someÑ€s painfu%inŸ\Ósecond major @addi½sc a1a	\obinary^
#isëàmany opcodes wð&ith arguments
# consisting of arbitrary bytes, includ 2NUL ò and unprintable "high bit"
## `.  BinG ø2mode pickles can be substantially smaller than equivalent
# text A ,{ àsometimes fast: ðoo; e.g., BININT represâ P a 4-Ì ²
# int as 4¤ p followÛ ñthe opcode, which is cheap^  í Â ¤ ð
the
# (perhaps) 11-characŒ °decimal strZ ð#attached to INT.  Protocol 1 also added
# a number†Œ so ñt operate on many stack eleÂð at once (like APPENDSP Ând SETITEMS)9£"shortcut"î s6 ¡EMPTY_DICTa ðTUPLE).
#
# The third major set¨ €additionÚòme in Python 2.3s  H ßCd "pù Â
# 2".  Thisþ :d p- A betE0way170 in.0cess ó
new-style classes (NEWOBJª  F  ? Sfor ay L Ôidentify its ‹ u (PROTO; QTime-òspace- efficientJ  Òpof longMÅs (LONG{1,4}D Sd s ƒ Ý@ tupÿ(S‚{1,2,3}}Zµ- Dedicated• 9 BboolÜ ÔTRUE, NEWFALS‘-“ñ"extension registry", a vectoJãpopular objectR‡Apush{ è lù± index (EXT­  Þ ° ³0kinR 5Amemo0pGET, bu¶    �  `t‰ðre predefined (there's nothYaX 'žS  PUT\A* !erž 0penÑ� change wÖ| ¿ … pabandon) <Pany
#„  5 Ñ±at it might˜0afeÚ Bloadññ	es received from untrust7õparties -- no su,ñsecurity analysis has been donc €guaranteJt	 nd8óre isn't a use cas¨ 0war1  Â�e expenseÔ qsuch anñm X To±ò s end, all test”Ñ__safe_for_und€ing__ or³
apyreg.'   0truQ¥s are remo fE  C°.
# Referen´t‰ €ese vari/s( 8 rdescripAQbelow` !toŒ!eeÕ "s ' b#j l2ƒø
before.


# Meta-rule:  Dg  Á `stored† 	Zh p9.2,
#ZPplainÊs
p.  No mg planguag¹ Ý,J#
#Á  Y ps couldà Wóed.  If you want,ÊðXML, write a littl,pprogram¦2gen2XML� UéF.

# À############# #ô&
# Some pickle opcodes have an argument, following th( 0 in ö
# bytestream.  A8 ð is of a specific type, described byh  instance
#/ Av D& õptor.  These are not to be confused with­ qs takenL f¡ ® stack -- Z Ð applies onlyW ó Às embedded iL ÷ ê ×, immediately #anGñ .

# RepresentsŠ `numberå 3 Â 5sum} ‚ delimit  thÿnext newline character.
UP_TO_NEWLINE = -1x U two-{ P wherw  ø Ufirst`_ giveÏ u second1 ð.
TAKEN_FROM_ARGUMENT1 ¬ ’2   # numC 0 1-q unsign~t@ 4@ 3@ 4@ > ÿlittle-endian inL UŒ 4L Œ N 8N 5N 8š N o
class§ ñ(object):
    __slots__ = (   `# name\_ 9ñ record, also a module global0 ;žUtringI 'H 5',
 €# length\ (,þ ª"s;Â:t; ‹7andB  �{1,4,8} Õòegative values for variable-~ M Ucases *'n­  a function
 ´@a fiH Bike J`, read ˜this kindÞ \ a# from¼9 1 at Àcurrent posik ‚, advancS #e   I *  ônðÄ, and return9  Œ  znG '· *erñ `human-  /B docAÛ 3argp ïQdoc',b )ôñdef __init__(self,+2, n70er,e Ž |”assert isÊ(Da, str)Z  %  J . ! =P m   ?   `!t) ¥(n >= 0 orK  5   ê) (�á 4 
 ¯ 1C /4C 0UD À              ô	TAKEN_FROM_ARGUMENT8U))
1 ºself.n = n
 ’reader = 	  ûassert isinstance(doc, strV ð doc = doc

from" òuct import unpack as _ Q

defn ¡_uint1(f):“ Ar"""	 4>>>> %io    2 óio.BytesIO(b'\xff'ê 12550  J 	 �data = f.> "(1º 0if  v  !areturn 1[0]9 ñraise ValueError("not enough) 0 inê aeam toÏ  Ï A")

	 ñ = ArgumentDescriptor(]  t   aname='. *', *=1  À 0er= 
 ðdoc="One-byte unsigned integer.• 
w2w-2(wL\x00{ ½¦ 4 ¯O6553±
2±@len(µm) == 2»\a("<H", )Ê-25 œ2Ê2Ê2« Ê Ê?TwoÊû , little-endianÙOint4Ø1 × Û  ß;  003  8 ­c-(2**3{ATrueé¢4ñ4ñiñ1 Î  ð  ï¸ , 
í9n=4ìë . 	 éBFourê
²èÀ, 2's compleQø ¦ù2 ú#< ûùïø@Iø1Ì  ù	 ú û. 
ü ýé
 1&=" ´Àendian.")


ñdef read_uint8(f):
    r"""	 Õ>>> import io 2 ÿio.BytesIO(b'\xff\x00 1'))D 1255  ^ L 	ñ' * 8)) == 2**64-17 ATrue	  ¦ 	 �data = f.N "(8f pif len( C 8Ü à ñeturn _unpack("<Q", ) 1[0]R ñraise ValueError("not enough* Ñ in stream toD DA")

	 ñ = ArgumentDescriptor(]  ƒ   aname='. *', *=8  Ù 0er= ¬
 ð!doc="Eight-byte unsigned integer, little-endian.¦ 
ýðstringnl(f, decode=d,á �ipquotes T "ó "'abcd'\nefg\n" 
@ 5 óTraceback (most recent call last« 1...X ÊA: noÙ 2ng Û ¿ around b''… 
RFalsevD &''Ë 3  '"<"D +‘newline fù µwhen tryingÍ€ðEmbedded escapes are@done	¢the resultnÆ�r"'a\n\\b(öc\td'" + b"\n'e'
# Æñ Ê (~0if ¨ Ë�.endswith™#n' wÜ "k  d ! =P[:-1]Z p# lose P ?!ifrKˆPfor qA·(b'"', b"'"©  S !ifc b.startÐ q# ' ù )  - îq1 %rE‚at both  >  
"vÃ of %r" % (qX4; @1Aâ" Ubreak Felse: ( Ç Ú�  r )‘éR   0 = þ2cs.è_% DC[0]. c"ascii	rM @ !

IOgnl þ2   4    ê=UP_TO_NEWLINEô ¨4eadF % 4""AãÀ-terminated ®string.

  òThis is a repr-style 1 ÿ, with embedded escapes, andK ÿbracketing quotes.& ò """)

def read_k Rnl_no` A(f):8 jreturn& 1(f,� pa �=False)

F ñ = ArgumentDescriptor(X �  name='F /',2 ï=UP_TO_NEWLINE)  æ 0er= í 7 ñdoc="""A newline-terminatedÐÞ Õ/stÔ>out×ë >or Ûÿ  It should consist solely ofK ÿ
printable ASCII character,Í 1V_pair61""" Õ>>> import io ‡C ñio.BytesIO(b"Queue\nEmpty\njunk"))G '   '  s 	 ³¿"%s %s" % (p J(f),ÙÿÐ¢ Õ>ÚP ß< ä.  ë ép îA ó Ñ? ofûsÌF  �These arË	ÕsÖ»7  –?s, CThey	I & !£ AThe %2is t@ed aÅKsingÁ– #a 3 Áblank separaÄsthe twon¡“ ¦Ø1˜ )1(‰E\x00{p Û nP1 u3abcdef7 2abc: ª2n =�@uint¦ &Ñassert n >= 0 �data = f.p "(npif len( b) == n± Ž   .decode("lP2-1"= ðraise ValueError("expecØ@%d b�S in axñ	1, but only %d remain" %ž  r 	 3(n,› Àta)))

strinùg1 = ArgumentDescriptor(
  ü name="string1", ü=TAKEN_FROM_ARGUMENT1& preader= _J # òdoc="""A counted ( +.
q ³The first a» û is a 1-byte unsigned int giving the numberL 0of 5 As in% s R, and Yecondi ›that manyK H . ·""")


def û Q4(f):* Ar"""	 Õ>>> import io 	4 øio.BytesIO(b"\x00 aabc"))9 !''  R @ 
3@ 5defC ?abcF † G3abcF óTraceback (most recent call last"..6ðValueError: expec†50331648§añ4, but only 6 remainù  S	 2n =v0ints ‚if n < 0€ èfraise ~ (ë4t Ž2 ‚ %d" % ng�data = f.e( pif len( g) == ng `eturn  ò.decode("latin-1"R ‰ !%d� ¨#%d1" %ç  Ù 	 6(n,› B))

ë444ß '
# -4ílittle-endian   L ®Ø‡313 ºbþ1 «%b'ò?@uint¦ í Ñassert n >= 0  Ò	$@ ÷Ë ÷ö D õ1 ôö
I ó' ãûAÀ         of ñbytes, and the second argument is that many , 9.
  ñ""")


def read_% Q4(f):) Ar"""	 Õ>>> import io 3 @io.BŽ ˜IO(b"\x00 aabc"))8 1b''  R @ 	3@ 6defC ?abcF † G3abcF ðTraceback (most rec4“call last"..4òValueError: expected 50331648]R in a ñ4, but only 6 remain÷  Q	 2n =s@uintr Ñassert n >= 0  if Â sys.maxsize› Çfraise š "("À„ ‰ count >; ‚ %d" % nŒ�data = f.‰( pif len( g) == np `eturn  œ € !%d… s#%d1" %K  Ï 	 6(n,ˆ C))

Û 3= Aß»Descriptor(C Sname=,", ü=TAKEN_FROM_ARGUMENT4U'  0er= " ‚doc="""Aieñ ‹string.
w ™The firstŸ@a 4-Ù û little-endian unsigned int givingO  ï’number ofk>8�, struct,c  
Õ/8(
á  %P 	% D  
ï)b'50bigL38 =Å ¡.pack("<Q"Ï m2//3,Û 	L E+ b"v ñ  #doctest: +ELLIPSIS&z12...öa8u ß� u2uxu% %u8u8u8uÀc="""A countùed bytes string.

  ðThe first argument is an 8-8 û little-endian unsigned int givingP Òthe number of{ `, and  isecondj ’that many, .O ð""")


def read_” ¡array8(f):- Ar"""	 à>>> import io,ñ …uct, sys D @io.BŸIO(b"\x00 	aabc"))L ‡ B(b''  ~ _ 3_ ?defb 7abce £bigsize8 =ã ¡.pack("<Q"í @.max! ?//3š P r+ b"abc… ñ  #doctest: +ELLIPSISü ðTraceback (most rec6“call last—"..Ìò	ValueError: expected ...ðQ in a Öñ, but only 6 remainu  ä	 2n =
@uint Ñassert n >= 0  if  ý. ýfraise ™ %("Ð8Œ ‰ count >? ‚ %d" % nU�data = f.ô( pif len( g) == nt Qeturn^ ê % « � (%¾'#%d(1" %O  â 	 6(n,— G))

î 3= A÷»Descriptor(G Wname=#,",! ü=TAKEN_FROM_ARGUMENT8U'  *0er= È& ‚doc="""A„¿3¼£d»runicodeˆ/nlÀcT< 	¸`abc\\uº�\njunk")}'  'M ATrue	 L ¨ÄRline(Ü <0ot  ó .endswith(b'\n'Ü _¶`no newH ñ found when trying to· « A  "æ "Ž  ‡ ! =Ž P[:-1]8 a# loseTs Ú re1str_s, 'raw-W ³-escape')

 ‹  w   'B 'Æ *   ÿ n=UP_TO_NEWLINE'  [ 3 (ð-terminated Unicode string.

  ðThis is raw-unicode-escape en ÿd, so consists ofI ðprintable ASCII characters, and mayF ßtain embeddedK € ¯sequences.( ó""")


def read_À ±string1(f):9 Ar"""	 Õ>>> import io °s = 'abcd\u ' ‚enc = s.˜('utf-8')   b> ¶xea\xaf\x8dD ðn = bytes([len(enc)])  # little-endian 1-% q lengthU  ¬ ?t =Ù @io.BT `IO(n +¨¶ + b'junk')  as == tN BTrue X -T S[:-1]O óTraceback (most recent call lastj"..«òValueError: expected 7	j in a «ñ, but only 6 remain·  ¹	  G¶ 0intÚ Ñassert n >= 0 �data = f.- "(n ifY( )n ¡return str #, åó, 'surrogatepassöfraise Þ %("Þ /%dß 2%d Œ ~ 	 "ø v" % (n,² J))

.ñ = ArgumentDescriptor( 	R š   name="? /",+ ÿ=TAKEN_FROM_ARGUMENT1,  ^0er= u0 Ðdoc="""A counUj y�³The first aï  ©a-	B’signed inñ	ögiving the number of±  6¬ Oecon¢� !--Q PUTF-8† odd "of 	ã ? --v0con²s that many– HÆ ñ
4ñ…2, 0 ú4ú.4(¦ú-T úW4ú ãGú ifð sys.maxsize:
        ñ`raise ValueError("unicodestring4 byte count > sys.maxsize: %d" % n)
    data = f.read(n)
    if len(data) == n:,   ¡return str ò, 'utf-8', 'surrogatepass'J § ±expected %d¤ zs in a ¾  , but only' "~  ‚  p"remainÍ 6(n,² J))

O ÿ = ArgumentDescriptor(V [name=L/",+ ÿ=TAKEN_FROM_ARGUMENT4U-  _0er= _� 0 ‚doc="""AÃBed Uß z_ing.
“ ³The first að � is a 4-ÿ	little-endian signed intL ögiving the number of²  kQ, and' osecondM � !--* °UTF-8 encodd "of 	ã ? --K òcontains that many– .. ¾""")


def |Q8(f):7 2r""fÑ>>> import io   °s = 'abcd\u ' �enc = s.Ë #e(ü 9 1enc, b> ¶xea\xaf\x8dD 2n =Â ú([len(enc)]) + b'\0' * 7  # »8ÐQengtha  m ?t =å àio.BytesIO(n +w^ fjunk')¬ sëBTrueb X 9T S[:-1]O óTraceback (most recent call lastv"..µÇ%:  7 8"6  Å	  S¶ 0intæ Ñassert n >= 0  if 	  d»	¸8Ÿ ŸbŸC2%d ü ö 	 b8b+8b8b8bP$n “cHÀhe second
    òargument-- the UTF-8 encoding of  nicode str =--
H ÿ   contains that many bytes.. ñ""")


def read_decimalnl_short(f):8 Ar"""	 Õ>>> import io < @io.Bz ñIO(b"1234\n56"))6   

  R @ LA óTraceback (most recent call last¹ "..ù ð'ValueError: invalid literal for int() with base 10: b'¦ !L'§  	 2s =,ˆ€nl(f, de›q=False,¢rpquotes )ë Ð# There's a h»  z ‘True and =  ! ³ Òif s == b"00"‡ ñbreturn. ‘ 'el* 1*  a € ;  ì /s)öOlongõu ¶ < õ	µ P‹ @ `5678909 
 9L\nI 
 ¦ µ, o \Q[-1:]‹6'L'Š 
as[:-1]m ^
LC = Aç±Descriptor(:  h 
 kname='B /',. ï=UP_TO_NEWLINE'  f0er= é3 ðdoc="""A newline-terminatedô , ;DegerO.á
Ð  ÐThis never haPtrailÏA'L', 1intS ?fitó  Q Qin a ¨p Python‹ 1 on.Pbox wM opickleL ðwas written -- but8 ¬ÿno guarantee it will š W!iso ÷  Æ. Šon @ mnl dk X ji<hb can repres2ls0of GOsize†…KPfloatŠÀ  r"""
    >ñ+>> import io
    >>> read_floatnl(io.BytesIO(b"-1.25\n6")).  
 1""" 2s =@ ðstringnl(f, decode=False,  rpquotes L qreturn x Q(s)


 ñ	nl = ArgumentDescriptor(m  ±  cname='2 ,', ì=UP_TO_NEWLINE  ð 0er= ÷ # ðdoc="""A newline-terminatedÞ Bimalº Ûing literal.
‡ `In gen û# this requires 17 significant digits for roundtripK ðidentity, and picklz uthen un ñinfinities, NaNs/ K ðminus zero doesn't work across box> ¢or on some [ evenJ ðon itself (e.g., Windows caV  `A theû ngs it producesJ  û ¼ 1 or¾ +).' ’""")

defsÿQ8(f):( r” Ôæ€1uct#   Praw =” ñ uct.pack(">d", Ü›' 3 ïb'\xbf\xf4\x00 '( 4 I8H r + b"\n"H@ �data = f.7"(8‰ pif len( b) == 8ê  ?7_unÄ ) 1[0]R ðraise ValueError("not enough * 0 inaeam toSÔ8f�8Ž�8Œ;n=8\ à 	~! |òn 8-byte binary representation of a° Ì, big-endian…0TheYÐmat is uniqueî aPython Ä shared with°1 j °module (forL  ÔÀng '>d') "in8 cory" (ñ6uct«e�H   PimpleàÉ @s do/†  H  =0 -- û y should).  It'8pstrongll› to5 ô  IEEE-754 doublí ,õnÅ l• 0casø is! Rfact t0cal0 × f ] «ƒOn other= > Ðdynamic range�@limiPµ "atÑ:754˜ Ã ¼ Á "add a half]Rchop"4  á0sed¯  reg
J  … `precis?ñto 53 bits.  However,æ ùaâ ;box½¥a S@may gúbe handled correctly� (+ rsurviveÈ  üàlintactÃ# Protocol 2ãrs

from@ eêÀdecode_long
ñ
def read_long1(f):
    r"""	 Õ>>> import io 2 ñio.BytesIO(b"\x00"))( 0  @ . X2\xff6 ?2558 $7fn _32767:  00v : O-2569 8á -t 8;  .	 2n =O@uintO �data = f.
"(n pif len( b) != nz~ðaise ValueError("not enough 1 Ñ in stream toq  À"[ Ñreturn decodeÚg !

& ñ = ArgumentDescriptor(ª aname="& "", ò=TAKEN_FROM_ARGUMENT1  Ï 0er= f  ñ doc="""A binary› ñ, little-endian, using 1-byte size.
p ¡This firstØ as one % áas an unsigned4 c, then) AthatC Amany3  1 Àd interprets.  m H 
Ž ° 2's-comple± .K  If4 l P is 0q ¢at's takenK Áshortcut for.  ?2 0LB Z""")
g4g,4(g25 ED QF ]E iO0‰£0intŠè�if n < 0„	 ×4Xa count0 s %d" % ÔœéP4é4é4é	4é éñrepresentation of aLýêAfour`sYé@ (buQquireÈ· 8 €be >= 0)Ÿ	 E /  L 0int;AalthÃÀLONG1 should½±lly be usedF Õ°instead (anÄ ÕÀcase where #_ ˆs < 256)o/
# À############# ð6
# Object descriptors.  The stack used by the pickle machine holds ob@ ±s,
# and in+ = q_before  øafter attributes of OpcodeInfo
#‡ ó we need names to !beb ²various typH ‰ � that can‘ wppear o”  .

class Sß ý (; ñ):
    __slots__ = (   #‡  ° *õ record, for info only3 '¹ 5',
 #­  D q  , or tuple  É   ¡s (meaningë  Ô  ‹   1# b5 2anyU xN )r 0'obW 
… ñhuman-readable docsÂ �this kindŽ °� ¦; a stringY Qdoc', )á ñdef __init__(self,2", ƒ ,h b Á ðassert isinstance(.,h ¿  G . ! =M j ? g  ð )Y[   l_ (if€ 
%  k    á�containeä- 
%  ) × 7 ,©~ Ý H # =&á 	?docPdoc =]< ‡Crepr‡tqreturn y  Vù


pyint = pylong =ß ) S='intï² B=intÿódoc="A Python integer93.")c   �_or_boolf 
% 
n (o  = )v 
r$ :ean�  9 v   
o   h   ] @floaCQ: 
_  `  » @ytes1str¨‰Î 1 
w  (b D~   :@(Uni”)Ž …�Î' * 
y  r ‚^ _arrayâ # f  j  
^ué l :strf ?str` 3Ononed b"None"U ] Ä( î ”f  
É øÀ = StackObjeñct(
    name="tuple", qobtype=  ádoc="A Python  ñ object.")

pylist = StackO ]   
\   [   
Z ?dicZ   
Z   Z   
Z /seY :setX ?setW  E 	
`frozen # b . 
¾ obuffert'  '´ Ò©  
Ó. X-likeg 2any4 h ?anye £ny kind of\ ± whatsoever@Omarkh "$ 
0mÓ p""'The / Å' is a uniqu× ö

Opcodes that operate on a variable number± ÷s
generally don't embed the count+ 1 in og °,
or pull i% f s'’.  InsteaG RMARK 4  · ñused
to push a special×  ™ c µ  ‚ O A, anJ  n
some oth) … ¡s grab all kas from utop of
L ô down to (but not including)1 Cmost� 
Q @.
""� _slice6"$ Ô$An;òrepresenting a contiguous s ocd

ThisP šñconjunction withÃ À ,ò _  .
M p followw  )5top@ ñ .  For example,OHPOP_ÚQchang|!e …
wY[...,� " × E]
to% ô]

No matter how many !arÍ £ ? 0 af'   ³ 
³ %, ¡ qgets ri¦ )û 5m (û ú
D § T too)ü# :ð
# Descriptors fKSickle)¢s.

class ÔRInfo(Ú "):UÂ__slots__ = “ ô¡# symbolicÿ¾*;lQtringn , '!"',O   #	 D ¦ VÊa bytestreamF xÖ5; aT À# one-characžss  ] 
s I×K ó  has an argumenŽ0dedŒ  r  Ž  U  x À# instance oó'f ArgumentDescriptor specifying its type.  Note that
  ð# arg.reader(s) can be used to    and decod< e1 n W fromI ñthe bytestream s,9  _ qdoc doc6  s ( ‘format of 7rawH aÎ M B.  I& !opƒ ö doesn't have an� ‡embeddedK !in` – ,/ p shouldè UNone.1 u'arg',
 a# whatC ðstack looks like befor3is š ¶runs; a lisa': _/ ] �after th\ . 
[  dù	protocol number in whichX ð was introduced;Q'in¾ E 
\ `human-@ableÙIs fo¯  estringLa'doc', )bð
def __init__(self, name, ç©/ ª N",   !, « ,� !):h  2 òassert isinstance(d Estr)%  } . ! =ƒ   ? � 	? d @len( j) == 1]   ! =Ú ] parg is ‹8 or« Oarg,Ý ¹  @ =ØZ ö *†,¢F  ½x% C@x, SfObjectM LI # =§} ¥ Ï FW ¤ $ £ 0H ¢  ¡ 	cAint)ÝB0 <=x	 úickle.HIGHEST_PROTOCOL
C  6 l 	0docá§ L=åq

I = ORInfo
†Rs = [X `# WaysÇPspellèbegers. IS='INT™ ¡5='I ôarg=decimalnl_short•ä:=[] Jp=[pyintt …_or_bool' $=06 ³doc="""Pushƒ 6   6 ± G  Thñis a newline-terminate« ° ’ literal ‰	D  – bnt mayG0bee*ì W  lw90fita0�rt PythonF¶ tbut INT5Qgenerƒ Ain pø
s written on a 64-bit box†”require ac Blong1 $321 .þ ðdifference between athis
  ð!and LONG then is that INT skips a trailing 'L', 0 pproduce SshortK óint whenever possible.
 ðAnother differencen adue tou ,= Ò bool was inth cd as aG ñdistinct type in 2.3, builtin names True© ó	False were also added toL °2.2.2, mappà  tot 1s 1< ð0.  For compatibilityq óboth directions,M u ±gets pickle¶  H¢+ "I01\\n">• !ase 0 .H @LeadŽ @zeroc3re RÀfor a genuin°teger.  TheH (ª’later) un” ð rs special-caseôs*breturn}ƒinstead;I xearlierE Qignor? # l¯ 1"0"7I !thš Õ R"""),
 I(¥”='BININT'?ucode='J „arg=int4  ú stack_before=[] Åafter=[pyint tproto=1* ðdoc="""Push a four-byte signedúG¥  M�is handleñ	e full range of Python ( )> Äs on a 32-biCbox,/ lyÊpbinary } Ps (1 Ï / opE4 !inÞ)I Ifµp  B²non-negativË0fit=r 1 or 2h ,• X$viK‚'  `2 save$4acer »1¬ ¸ 5='K  ¼Euint|½<2one¼/un¾	i¡Ðpace optimiza²\©ery small J5intÛ"inùE(256Š2M 2”<?two6AposiY3 in Â, 2**16).  I«|  R) can}"be…<ed „2Â"t †#1 �ŽaÃ� ¿dtL  tïdecimalnl_long}-0A 
R [ ˜õ “@sameø±INT, exceptðÉöliteral ends withfTalway§Âs.a t ùðre doesn't seem a real purpoéào the
      tráailing 'L'.

  ñ2Note that LONG takes time quadratic in the number of digits when
F q unpick^ ò(this is simply due toB QatureB ãecimal->binary� ñconversion).  Proto 2 added linear-› Æ(in C; still¨  J ¡in Python)Ø Q1 and
 £4 opcodes.* R"""),€I(name="
31",!  . t='\x8a' ”arg=long1 ú stack_before=[] Åafter=[pyint pÝ $=2* ðdoc="""Long integer us­õ one-byte length¹ñA more efficient encod2 3f aþ  ¦ ;| 
 1% Ü Ïsays it all.	4	b	4È 	H_found640# W$ðto spell strings (8-bit, not Uni%)œGu'STRING, # 5='S  EN /nl? ‹s_or_strQ0J QFPusho s object® °  The argumFó is a repr-styleð à, with brackete qu9¤charactersx  hÁperhaps embe¼‹escapes.l Ñextends until¥Cnext›0newó c > s¬ pe usual]eWd40o a® “ instanceH F5theñd given”Uºñer constructor. or‘ tdefaultÞ Á'ASCII'.  If  uT Qwas 'Ÿ ' however,( 0y w«b• d· 1as . “¼ ?eadœO'BINXTX –Š WéWr­5twoa s:` first%3a 4Ô´ittle-endiaVQsigneÝ ´ w Èˆ² ŸÝ,ê$thj`secondj åBmanys±, which areöqn literV!as¥ R Hcontent†Æ‘ 2†GÀowever, they¡ will be
  ódecoded as bytes object instead.' a"""),
 ñ
I(name='SHORT_BINSTRING',    P 5='U ´arg=string1# ú stack_before=[] ‘after=[py� u_or_str$ eproto=J òdoc="""Push a Python n Ê .¶ ð  There are two arguments: the first is a 1-y ó unsigned int givingá  0 “number of6!inG z R, and PecondX “that manyE  d ‚s, which• àaken literally‘ i R ‘ content.Ç sÇ I 1usu0 É`into aÄ¡ance using‘ Pencod ƒgiven toF  k �Unpicklern Ástructor. or: ðdefault, 'ASCII'.  If B Z Qwas 'å  ' however,. y€ ± zH €1# B©(Qcol 3prhigher)ï¥…BINBYTESŽžB  ž§ 4†�–3C –f • ,–4–Ùlittle-endian¤?ª> ¤–
Ç�O t–Ì •, $	…C…Ø"…X!w qQ' x ÷8cøE\x8e û8¸v'>û?2n 8ü’EüN’7 …¡farray ¥5¥ŽYTEARRAY¯-96¯Y ³Àybytearray],!
  ƒproto=5, ódoc="""Push a Python bytearray object.
. ðThere are two arguments:  the first is an 8-E ó unsigned int givingK  1 ‘number ofr As inH  :  Q, and `second\ ’that many4 È Rwhichš ñaken literally asB U “ content.‰ R"""),á  # Out-of-bx �buffer (2Qcol 5� rhigher)2 ôI(name='NEXT_BUFFER'“ ¥code='\x97 „arg=None# ú stack_before=[] ’after=[py‰  � ÂÀ>n oÀ Ãå ³ �READONLY· 8· ¡ Ö ¿ @Make6¿ µ read-only.É ð# Ways to spell Yªä ENONEÆ �N �#Knone‹0¸M‹ Œ " oÏ· ñbools, starting with äñ 2.  See INT for how this was¾r# done A5 ›LWTRU?\x8àî É _Ø5ool ± .=2
‘True onto†C ¨oEWFALS¥  9¯, ^¥ OFals¦ i0UniL‹ stringstlUNICODË VÈ uB A $nl6= Ö R0,  #ñmay be pure-text, but it's a later additionF!  ¹
ç   ˜ca raw-œ Ð-escape encodÕZof a Q õ  k0so µ  šÓain embedded G àsequences.  Th�yr extendq  untilgÿnext newline characterò �ŸSHORT_BIN¾O\x8cÁ1Ë À)4E Œ#—À the first iñs a 1-byte little-endian signed int
  ðgiving the number of 9 As in óstring.  The second is that manyI 4 4, a Ðe UTF-8 encodc !ofO ƒUnicode W > a"""),
 ñI(name='BINUNICODE',    9 5='X Rarg=uP O 4* ú stack_before=[] “after=[py<  tproto=1. údoc="""Push a Python À ‚ object.» $ñre are two arguments: ü Pfirst=?a 4ž/un ¢8‘¡E\x8d ¤8_¤)é¤H?n 8¥£�ó# Ways to spell floats¥`UFLOAT§ºF  ·7 /nl°5 R0C ®ó
Newline-terminated decima«  µCeral² WM @qrepr(a_l )uPn gen6 Á requires 17ñUificaòðdigits for roundtrip conversion6ðbe an identity (thisw  so7 �ñIEEE-754 double preciB Ðvalues, which8 w,@´ @ map K åon most boxes)ö IÓ !, ®ð  cannot be used« ðtransport infinitiz ƒNaNs, or` òminus zero acrossj ð (or even on a single 2, i­£platform CJ plibrary‰ q't readÙ~Âs it produceaósuch things -- WindowsL qis likeJP), buPñ y do less damag Rn BIN on  ses withH wgreater�äor dynamic ranE ±.? {o G ÍýoF­Q stor©@ binr ‡,÷ # 8¡sof data0À  This generñ,ally requires less than half the space of FLOAT encoding.
  ò In general, BIN% ó!cannot be used to transport infinities, NaNs, orL òminus zero, raises an exception i’ �exponent  ed± `e rang§ K òan IEEE-754 double, and retains no moreì p53 bitså `precism 3(ifL —there are3 Âthat, "add a, ^  chop" roun#4 is J °cut it backá53 significant„ )Xa"""),
8 `# Ways1 Âbuild lists. ñI(name='EMPTY_LIST',5 •  code='] „arg=None  ú stack_before=[] �after=[pym  tproto=1+ ‘doc="Push§Amptyœ .º ž eAPPENDŠ š a š „  ¿uyobject� Â « 	0« €""Append¯ K  Uaµ P0  S r:  ... ‚ 3 an� a*  (: * %+[+ ]W „althoughM Qis re}ÿextended in-place 
IS:Je JBmark !, D_sliceW
1""EÃ  Ja by a S  Ra  o ¶f	� œ rf t q;R lnÉ f$½Bþe0out^ ¢rtopmost/y!, — „ 0R  AllØèñentries following R ? ÿž ¨#to‘ñ a single PythonJt, which  Aÿ1 reC Ss all¾ I À_ from� óonward.  For example!O ´» ³1 2 3 'abc'n 
º / ’[1, 2, 3,( ]) †TtupleÑ ‡UTUPLE&¤) ¤†o  ‰0 Š› À',
      cod�e='t',
  „arg=None ñstack_before=[markobject,  jslice]- Öafter=[pytupl tproto=0, ñ doc="""Build a , ò out of the topmostg  h !, [  † #.
· 1All6 • ñ entries following R ? ó are placed intoM ò a single Pythonœ t, which ° 1 reE Ss allÀ K � Ofromƒ ôonward.  For example,× S~ ~W: ...ü Ã 1 2 3 'abc'n / %!: / ’(1, 2, 3,( )) C""")e åI(name='TUPLE1¥code='\x85 2any2Cone-bPitem —"hePThis º ò pops one value ofU�¦and pushesyfálength 1 whoseC p sis thatP óback onto it.  In otherD dwords:Ä Wx b[-1] =N( /:]”2� Ú ”6 ”/, Ÿ:?twoŸ0 tw em|ñç   .  s¡2¡ �sÈt±P ¡$ 2:¢[{£S2:])]Ú83‘¤7 ¤¯=?hreP  t  ES0 eV3µB3µ 3µ±# Ways to bxSdictsŸ	¥EMPTY_DICTÂÕ} Ò m  1 àPush an empty / .§˜  d˜ øà, stackslice],!
  óstack_after=[pydict], tproto=0 ð doc="""Build a + ñ out of the topmost R � slice, Y Ó markobject.
\ 1All6 . ñentries following R ? ó are placed intoM ñ a single Python› t, which ® „ 1 reC Ss all¾ I Ž Ofrom� Èonward.  Theë ³ alternatesL Èkey, value,  ô....  For example,SŒ� before: ' ú ³1 2 3 'abc'a / b!: / ’{1: 2, 3:( }) C""")e ôI(name='SETITEM'Üucode='s „arg=None  _› (R, any× >3 Ÿ 2  Z AdXAkey+7ð pair to an exist ÈE– Ã q|* � ": -* |0whe[ò has been modified via 1 r[key] =^ ._ bSScu c,oYIe1Ã¿eðn arbitrary number
zs{
ÿ ä 9  ÿŠ Á¤is taken a(%an< á€sequenceX ‚keys andm€s, added˜  r  €ÿimmediately under¿ .  Everythk !at]  1 M w ð is popped, leav=  ‚ qmutatedp0 atD  H ³ê ¾"_1õ !_1ÚSkey_n n` Ô;%_iÖ¤_i for i ik  1,X`..., nì ~¿ that order Q# WayCb0Bsetslƒ•EMPTY_SET"E\x8f %,seÅ4APushV�mpty set.!0ADD!¿O\x90� gpyset,üÁº /""ÀAitems1 Þ yà  The slice ofñ the stack following ñtopmost markobject is taken as
  ña sequence of items, added toG ñset immediately under a J g  .  Everyth‹ ªat and aft7 ˜ spopped,M @leav=  Ü €mutated ‰ $atz  ¯   ú #.
8 Sð before:  ... py9 ž å !_1  ð )_n< ¨ ': < \ SwhereO òhas been modified via Q.add(Y Bi) =n ”i for i il P1, 2,ƒ A, n, ãin that order.“ R"""),€ P# Way”òbuild frozensets ôI(name='FROZENSET'K¥code='\x91 „arg=None# D_6&=[+,Xjslice]- 'E=[py‰ ! tproto=40 �doc="""B· a¹ D outÅJ j ,,ˆ ß1All ± � entries÷a¸£laced into]ö a single Pythonš t, which â  F0repM Ss allL 'of˜ Afrom × Ê ó onward.  For exampleâ*  ¾ ½: S1 2 3o ) „æ¥ "({\33})- 	E: Ãmanipulation]A5POP(;0 82any!
§_§ %=[  0 tDiscard6x<„, shrinkT q by one! .#Ã ,DUÃ 2Ã 3â  ³í × OPushÔ  4 on]°ð again, duplicatë .itØ EMARKÉ œ( œ}?“^  Æ !""È . À B Òƒa unique7a, usedºpther opÃ sÓ£identify a³dregion´ € containð a variable numbM ff  žmK ÷to work on.  See¥ A.doc™¿more detailz WOPOP_ƒ WA�1,ð ""Pop all the sòtack objects at and above the topmost mark% A.

  ùWhen an opcode using a variable number of sd ƒis done,G òPOP_MARK is used to rem� 4oseœ ,š  e– M Àthat delimitK @heir  rt� ±position onÝ ˜ .; R"""),Ü ð # Memo manipula3 ñ.  There are really only two oper& Rs (geCBput)ã ò# each in all-text, "short binary"Û T"long ƒ flavorsnÂI(name='GET'V    v5='g áarg=decimalnl_a + é ª_before=[] ¢after=[anyá tproto=0. ±doc="""Read÷3Q fromMm3 ={push itef�The index a7 y  ú= ¡s given by[ ónewline-terminatedN ï @ stràñfollowing.  BINGET4TLONG_ õre space-optimizL �versions ~D q�h  �Tuint12w)E wgÕ1-byte unsign(†integer m�A1z&6j 646´46ïlittle-endian D,PUóp<ó!êBStorÉ  º o” ¸ ` ck¿£not popped·5ð 1loc0 ò@writ toC øaÿ õ ù*PUù #reG ÿ ù‡q‡ù}ð}JÀation to wriñte into is given by the 1-byte
  €unsigned+ ó eger following." a"""),
 ñI(name='LONG_BINPUT', •  code='r ”arg=uint4! ú stack_before=[] Wafter tproto=1% Ádoc="""StoreÄ M @ top¸ o ²memo.  The  âis not popped.Â   …index of8 ÿ location to wri;4;Ðlittle-endian‘ IuMEMOIZE5EE\x94  HDNoneÜ GŸanyobjectP Y•Yasw“number of@ñelements currently present in2 á. •r# AccesV `extensÉðregistry (predefiå,ps).  AkW ;1GETX ƒ# family-ïEEXT1�£%82  £ ë¯
¤›2é›EÒ  z š  Ç!istA andÁsimilar EXT2 `EXT4 aÎ” using a î  @popu6 ð that are pickled5 õô, typically classes! Itc@enviyeŽ òat through a global negotif3andƒ ’  0proÊð, third parties can set up a mappÍ sbetweenG i: 
È  ³ s-€In orderÞ„guaranteâ °àrchangeability€ %e Kc  A Ü tP #beá `, alth  i O  ` 6 Ss mayF 0be Öõrved for private use¯  pc has a¬¤  �@argu&è isx usr"o Ôñ$thÞÄ ¹ , *«ae  is pushed Kêv	 í m='\x83×P0See01.  2K1two¾M›Þ ŠÞ   úä”"ù
Ý 4Ý ðfour-byte integer ar‘gument.
  a"""),
 ð4# Push a class object, or module function, on the stack, via its mo' L ’and name.]  I( ¡='GLOBAL',& •  code='c ôarg=stringnl_noescape_pair2 t ª_before=[] ¢after=[any¾  tproto=0. sdoc="""ð cglobalñ " (Ç i.attr)ê Ë ò
  Two newline-terminated ¹ �s follow"ï 0 opé ó .  The first is¤taken as ah * , AeRecond! š   L  I ó E . ª is pushedÉ ð  More accurately,® 
H ñreturned by self.find_W #,*)f I «ñ, so unpickling subD ðes can override thi:Ïrm of lookup¤ GbSTACK_^= de='\x93  PDNoneù“ >Ppyuni6 %,  3+ R4Y R%… †ÓWays to build–s8Lñe doesn't know about directly�À# (user-defiÈ? �).  I desV W 1doc žt†H  ‹ðcomprehensibly -- you really have³ @readJ £  \3 toG  AA all" Óspecial casesZÞeREDUCEÅ F 5='R Õý CÕ'n‹˜`t from,qallable¯Ran ar`T tuplýø - Ád0@mind… êó__reduce__() method0  Sk ÷t: ... cz !pyl e) ·): ) #(** )“– G  å † 
Â 0 arœ¶¤two items w Vby a Á ¿ r  Apply[e´ !to1arg¼ ssuppose0pro, eorigin¨™ð at least get it‘Drted9!If: — ½  s!3-�    lK  é@onen£3 anà ƒo be pas¥  3zð 's __setstate__,ÔN ,f è tcreate K %'sVT aK SBUILDa = ap Š à to that argumqent.

  ñ0If not isinstance(callable, type), REDUCE complains unless the
D  3 ð
 has been registered with, ó copyreg module's‚ òsafe_constructors dict, or6 � \ sa magic: 1'__= òfor_unpickling__' attribute~ ña true value.  I'mõ 4surÂ  why it doeØ Ðis, but I've &   sÕ Ethisót often enough when— ó	I didn't want to <wink>. R"""),ó I(name='BUILD',! ucode='b „arg=None  ðstack_before=[anyobje2 ]+ Wafter*  tproto=0. ôdoc="""Finish building an b ðvia __setstate__¥ ®u updateVS£  £ e: ... œ “ argumentî + £ *: + % \'reB ‚may havek muŒ äd, as follows:: !IfD¿ B	À cmethod�Íª .* (· )\  Ualledö AElsep , £ must be aÔ3theL Æ  S Es__, and+ #is`Td via€  ® ¬ C .Š¯  ( /  v EINSTeui  uôstringnl_noescape_pair.
‡Bmarkg!,  Uslicej _æ‰B‚” a class ¡oT�i°!e Êöcol 0 version of  1's OBJ opè Š $ i6òed by two newline-terminated as, giv¦Ì ·¦  Ñ0, jø�ÅcGLOBAL P (andRD  ñfor more details about that).  self.find_(z  , q )J  )0sedt5get:˜8ñIn addition, all³$ As on °O ð  Ždtopmos¸ñ‘ are gathï°into a tupl´ò d popped (along�:T  N )>STUPLE=Æ 0Now²3get” icª ßfÖ oü!seŸ   `  + Th g§ ¦is empty (ˆ ` was a€Pe topO o Z" estart)� b «ò] möÖgetinitargs__µG uthen weIPcreatV£ old-stylew` 7ƒinvoking« Ðits __init__(ñ+) method (pickle has waffled on this over the years; not
  ócalling __init__() is current wisdom).  IJ ócase, an instance ofK ñ	an old-style dummy classQ `reated: d‰ ón we try to rebind itsI !__8 À__ attribute(  À sdesiredY `objectž fè “succeeds,J  3 7new­ 2  ’ Dpush"re stackž Ãwe're done.
G `Else (M €argtupleB ð not empty, it'sU Æ  ¥ ’ oˆ ð does have a __get‹Hargs ),8S code– PfirstÛ ’ists that" tv V ±safe_for_un(Sing__I fã.  Unlike as f« /__< ô check in REDUCEá !itÐ ñn't matter wheth€'isÒ ¨Àa true or fadPvalueOš ConlyG sH Qit exô B(XXXù Z A bug«‘º  p   F 5, UPErrorÛoraised  ¸& \) B	B ñobtained from INST's argument9sapplied †
@  _ É  `resultá°J ?is 	 ù bNOTE: ëTw/@away³Python 2.3.h I  “ ødistinction betwee8sand newF-!esRJ ¶ m§make senseu s R"""),ÂÄI(name='OBJ'Œ I5='o „arg=None  IÒ_before=[markS %y % jslice]8 “after=[an+  tproto=1. ãdoc="""Build a×«‡TÄiä!e A  col 1 versF&of 10'sH0 opâ  ® 4d iZ¡very much æi<ðThe major differeÕm Q …   ak¹fz@Allownt²¤be retrievã CmemoH 1repÐly if severalÓ[3s o^ 3ameRare cM0.  K  caOÝ °more effici—à(in both time b`space)4&n „ J `embeddÆ ® Bodul6 Ž Ksq ¯gs«@   , OBJ take×í \ ¤p streamÇcnsteadˆ  " s o ™ N àn off the stacñk, immediately above the
  ótopmost markobject:
 ÷Stack before: ...% b class1   s) DslicU : qafter: : Ònew_instance_7 g ÀAs for INST,™ Ñ remainder of ` º ‡ #is­ ðgathered into an argument tuple, andM n ó logic seems identical,K õ0except that no __safe_for_unpickling__ check is done (XXX this “ Áa bug).  Seeß è ôthe gory details.òNOTE:  In Python 2.3,8  ¼ vOBJ are¯  ¨  =0howØ yÂ  ge¿ e¥ o@.  TÒ  was always2  /Bent; @mple4TationZÁhad divergedÂ 1acc4³al reasons.x R"""),Ð ô I(name='NEWOBJ'\¥code='\x81 „arg=None# î_wR=[anyÀ  Â ]+ h*  tproto=2. Àdoc="""Build"X  —‰2TheÓü� should b8Pought™ò as containing alZ °followed byp 
’R (the�0 beD   ý F 0top>@CallŸsÐsÈAargsÐ!ey—popped of0ö  < Z Âvalue return“ `cls.__š€_(cls, *X )Ó@push% 3ack� oW H ¢ ñ5_EXáô%92 ôÿ&4	ÿ| ˜ † keyword±Cdictv$  # J #M Õ6 #U, *kw, -/  (‘# Machine?3rolx1UPROTO)<%80  <Tuint1Ù’1þ  P*ócol version indicatorž a  For =  ' 2:LA, a `e must:rrt with opÄ 1 \iƒV }  ë ˜ô in range(2, 256)E g ESTOP"Ðcode='.',
   á   arg=None,
  ú	stack_before=[anyobject]  uafter=[ tproto=0% ódoc="""Stop the unpickling machine.
p aEvery  òe ends with this opcode.  The ˆ 1 atR  Z !of ² N ñis popped, and that's& —result of� Z A £ should beK Pempty; #n. R"""),¸ `# FramÐ ssupportÐ äI(name='FRAME' Æ e='\x95  wTuint8$ … xY o4< o€Indicateµ p beginn¢ Öof a new framy T˜�er may us; xó to safely prefetch data from itspunderlyk ostream0@WaysR Bdealãëpersistent IDsAePERSID/BP  ?ÿstringnl_noescapÃKÙÃtPush an~ùidentified by a Ä Ã ¯Òümodule doesn't define what> “ means.  û _Pargum%"isÈòline-terminated str-style (no embedded Ss, no©pbracket©ðquote characters)F ðing, which *is* "»	â "Û
=Ppasseg#isH  êVself.? ó_load().  Whatever— Ù ¬� returns È�ushed onÏ° re €no impleTationN f•t Ä in Python'sÿðer:  it must be ÈlØM  „subclassô3BIN»˜¶Q¶l&²1n ²"CLikeyr, excepg¿0 IDw^7 of|– (insteadƒ befa•iÎÙR byte3  Tp L v  adUî V X­ RG X$Se ú for more detailòð]
del I

# Verify uniqueness]. |.þ  mû @rs.
 €2i = {}
  
o @i, d¥¢enumerate("1s):Á Bif dZ 2in J   ³ñraise ValueError("repe + 0 %r5iðes %d and %d" %
  �(d.name,  22i[ p], i))
5 Ðif d.code in  12i:   ñraise ValueError("repeated+ õ %r at indices %d and %d" %C  G 	 (o ,B ’  v ’ 7 
« A = i  ' 0  C
delÚ P Ÿ, i, d

# :¢
# Build a· ðop dict, mapping opŸ ñ characters to O ð<Info records.
# Also ensure we've got the same stuff as pickle.py, although& ð	
# introspection here is‘ Pey.

‰ à2op = {}
for dÛ¡ sÜ# [‹Q] = dKPd

de}  � _� ó_consistency(verbose=False):
™Dpy =b.copy(] ~  Î � N ‚.__all__ˆ  ðif not re.match("[A-Z] ‚0-9_]+$"½)3 7 � 
   ¢print("ski�ô%r: it doesn't look like an¹ ¦ 1" %M¼  I   �continueë   É  C² = getattr( ª + Ü £isinstance(  = ÷ , bytes) or len j) != 1× ?if ï ð vµ ¡ö  [% "©  Ø  "¡  (,0   )7-  8 0.de ¦("latin-1"e'if`  * Aþ `"checkŠ ²  ø !w/’   ‡ÆÙ û  > 
ð 	) dè6py[Ú ]! O E  Ä  
É  7U   Q ³ ƒ �.py uses˜ Ë ³ Z  @"butYWre us÷ g  ‹,¸ ;   Ý D -ŽSp# Forgeôis one.  Any left over$ | 7ùend are a problemÚ ù# of a different kind.#  F uÖJelseÅÁV ­Rappeaþ1hav” ÇhOwithx€"[ í N «R %r, Öa don'taÀ              ð(name, picklecode))
# �if copy:   ó
msg = ["we appear to have< 0 op? cs that ±.py doesn't+ 5:"]P @for 1 a, d inm †.items()u y .r @nd("  ± � %r withB   %r" % (d. , Æ  0 òraise ValueError("\n".join(msg))

assure_ÿ_consistency()
del   ?

# :C
# A;Oó# generator.

def _genops(data, yield_end_pos=False>Óif isinstance. ³bytes_types&    J p = io.B  !IO. !)
ª¡if hasattr ‡, "tell"? �getpos = H . 9 FelseÈ% Âlambda: Noneb —while Tru/ Q 5 (� ª  /i fread(1 ~! =þ€2op.get(1 !.d×§("latin-1"$ifg!is“ ²  p šde == b""    ZCö exhausted before seeing STOP"´  D 
(    Z  T´osition %s,¸ ¡%r unknown{ A  #"<0 `>" if jü  ‹   ,F  YHS.arg P 
0  =d^  p % Ë K .æe{7*ifø
D a, arg,Ô  N ; ° :'.'w cassertx ‰ 7'ò'B  –RbreakÌË5SB"""Gó“e all theU s'a.='< 'tða file-like object, or stringPntain‡ T 9 G CEachf  e    X ‚�ed, from’ dcurrenç aš:Pstopph qafter a÷_ ùs delivered.  A triplei A for4e˜ :ñ  B Ü   H Aan OŒðInfo record, describ˜  à Â 7 !IfÞ   ù0 anC umí qembedde¯ C Cˆ  w  itÛ  d½ vrÓ, as a Python—:.  i #r [ L S
§ € §  y‘() methodó0 wa�ð e value of pickñ%le.tell()
    before reading the current opcode.  If ñ
pickle is a bytes object,I ðit's wrapped in a B$ $IO& A andH ’latter's ‡ ¡ result isH Ðused.  Else (� w ãdoesn't have a< ,U { ñ not obvious howL Åto query its× Ðposition) posÎ QNone.0 1""" ò return _genops(‚ O)

# :R
# A \ õ optimizer.

def A(p):“ #'O" $ a4 0str³€by remov  un?C PUT¾!s'> ¢put = 'PUT !ge #GE àoldids = set() # q of allV "id¦2new1 "{}*  1   Œ tby a GE‘ � Z p #[]9  ò# (op, idx) or (pos, end_pos¯‘proto = 0H  ²header = b'Ý 3forþ `, arg,èG  ›Øƒ, yield_c S=Truep � "if3 4 ³ R.name‘ !   ;‚.add(arg¦     5  s.qnd((put“ )' 0eliîj ] Ú == 'MEMOIZE'j ¢idx = len(t E l Ãˆ  @     ˆ  & C ˆ 'FRAME'ð 
2pas Y 6  G4 
ã ²1 >  
ß  P  # =¿. 	Ê x€[arg] = º	 é /geq\PROTOof>¬ 9arg„  ifq È0á ²cp[pos:~]F ;elsi  à 	!Í= 9 Bdel Y
Š a# Copy²> € except añ	PUTS without a corresponF1GETC   S= io.tq# Write[ z �¢any framinZPout.w2 (- î ? þ
 1._P¦0r(ol0 *  —=F>= 4™7  r.p �er.start_ 3ing¯ xr û  £6argòsO  : @elesÜQFalse » o6put0   O  Á2in â
"  & vcontinuQ   cdata =`r.put(×u  $ ðnewids[arg] = id7x
  …idx += 1 õ elif op is get:  4 õdata = pickler.get(newids[arg]), Oelse: @[op:, +  W ðframeless = len(g 5) >h   õr._FRAME_SIZE_TARGETF ’ * qcommit_ q(force=  d ¦ 5if  
® O ¢file_write› w è : .  q Qr.endž Bing(‘  return outW¯value()

# :Ó
# A symbolic_  disassembÓP

def (² ,’ ³=None, memo òindentlevel=4, annotate=0)IÆ"""Produce aq j cy of a‚ !.
Q'r 'z a tò$-like object, or string, containing a (at least oneMJ c.  Thee  V € ñed from the current position, through–  " ófirst STOP opcode encountered¾  Op< ¿al arg 'outÈ ‘ to which| ’ Ay isq ðprinted.  It defaults6 psys.std"1
s  žt �Python di7qused aso !'sËb s �may be muÄAd byW), if7 vPs PUTŽ1BIN
 !s.K @Pass— 7Asamej Ã Å ranothera P callb €n allows ŒyO €to proceÃ Ôcross multipl× Ø pat wereD q createÄ ƒ I ú Rr witz� ð
.  Ordinarily you don't nu  ­ÿ orry about thisð„ | `numberé`blanksXú"o 1 › ±a new MARK Q˜	ú4t u'§`nonzerX astructK!()s�dd shortn adescri­ ›  © ÔÀon each line œ ed2putä U¡` givend '� @mustN0an Épger andŠa‰ €hint for ¡ column whÈN0ion¸ “uld startÏD † @is 0ža$no�4ion®aIn addß ¯ d§è òy, some sanity checks are made:vÀ+ All embeddþ öóuments "make sense"¸¢+ Explicitm �pop opera;Ps havZ {‘ items onUstackL tWhen an‹iN �ly refer,da mark:àa markobject i1s
  ñactually on the stack.
 õ$+ A memo entry isn't referenced before it's defined: ãThe markobject< ‚stored ik  [ 0 j U  « 2"""— ‘# Most of± phair heˆ ós for sanity checks, but m0 i‰ q neededâ ð # anyway to detª òwhen a protocol 0 POP takes a MARK of{ ,H a(whichÛ curn isg  Z bindent< óblocks correctly)L P = []ì  ð# crude emulationô ’unpickler« "if¨�is None:  D  cP = {} ?   R  / < 1maxU = -1< 6max@numb… 3een3 ,rkÅ ð # bytecode posiÃ sÄ Fp ˆ"âchunk = ' ' *  Qlevela ¡errormsg =å  1ann¥ = 
 Atateä ¡olumn hint 2ionn  &o~ `, arg,�  ºrgenops(`)F"if" Qs not}   àprint("%5d:" %, ò, end=' ', file=out)½ 0 ðline = "%-4s %s%s6 b(repr(— .�)[1:-1],é  7  ';`* len(wŠ)< n GnameŸ ýDmax( #, / )— = { _ t do9 mu 7 kafter 6  é /# 7 ¡numtopop =ì g ½ Ô# See whether±Pshoul°P popp¦c !  £T   Q½në4or £ 5Â == "POP" anQ =  	. @[-1]P ×N› l aassertË   §1in Nq + Êif __debug__Ä e  ^)  - v # ¤ ß \slicew  Y  N   Qpos =Ã % V.pop(c p   — - ë     R Ö!"(l£at unknown¦ ÄYset)"¨  @ 7elsA   V 0%d)½  "po^/   ð# Pop everything atýš¿1topž B ¾.“ Cwhilši ‰3 T } JÀ           sËtack.pop()
  ý# Stop later code from popping too much.9 Mtry:  ] þnumtopop = before.index(markobject† ÿexcept ValueError[ �assert op© ï.name == "POP"‹ 0! Nelsec ez `msg = ­ 
 ð"no MARK exists on sP%"
R  # Check foCörrect memo usage;)if» ó in ("PUT", "BIN
 VLONG_ šMEMOIZE")¯ K  * 
)  ’ Œ °_idx = len( ƒò ¡(as %d)" %Ç  ; ì  P >�ù arg is not None9  =  ~  R i = arg %ifp 1 in Í ¥"L ð key %r already defined½ ` Aelif™ Á[ #  É ñ
empty -- can't store into  
xa : @[-1]>  Võo ] 4  ?thej Á [  a2] =ª Œ h£ A†$GE†
 †  {ä¡ j`after)¤1�     1 = ° `[arg]] ! #G0bet‘L© emulationE †Ðhas never beeÃAoredÈ*]  ifš ¾Å4 or
Çð# make a mild effort to alignF euments[  â ñline += ' ' * (10 -—•)Ÿ‘ 
† V ­+ repr(argH  \?msg@ ' ¸  ‚ knnotat7Í sannocolÒ   Ë 1d :ion3W ÀW ›  ý Ÿ  z N> 50Þ A  
  Ç 	@  R “+¤õdoc.split('\n', 1)[0]7 `print(9 ¶, file=out)4if Š
Ž ð# Note that we delayed complaint`until ø`offend ~  õ a# was ˆ &ede  ðraise ValueErrorÓ(errormsg)

  õ# Emulate the stack effects.% qif len( Õ) < numtopop:"  N Àraise ValueEi ó("tries to pop %d items fromj iwith "F  J 	 U"only> T" % (€ ,— %))G /if¢ 2dely $[-C (:]7 úmarkobject in afterä wassert ( !no, ebeforeL  Â  % 3·.append(posz 0ext k  ñprint("highest protocol among opcodes =", max ¢, file=out"ifç ¼ œ  ¾ Remptyí � STOP: %rg" À)

# For use &òdoctest, simply as an example of a clasúrickle.
 "_E% ™ ðdef __init__(self, v>)  D  . " = p

_dis_� ñ = r"""
>>> import po  ñx = [1, 2, (3, 4), {b'abc': "def"}]( cpkl0 =: Á.dumps(x, 0) @dis(" Y@0: (— AMARKì@1: l   @LIST @   (! 0 atF   @2: p $PU" ! 0@ @5: I %IN 1 @8: a aAPPEND 9, 2 -12, +13© #14=  T m 3A 7 4 P20: t6   PTUPLE	 ã !13.21ä Ë -24Ÿ +25Ÿ R26: dX T  DICH"25e 7e P30: cA `GLOBAL
 0 '_*Pcs en	 'Î .46A +49“ Q50: VH ‘   UNICODú B K #55K  % Ù6/58> alatin1Œ 6Œ A 5^ /69w!49#70† ‚ 6A P73: RZ aREDUCE 4, 7 7® è 1def§ 8½ 86 P85: sb qSETITEM 6íQ87: .' OTOP
Öá 0

Try again  ¤a "binary"¥
›Opkl1¹ 1¹1&P 0: ]„ `EMPTY_ª ® P 1: q 4BIN@˜@P 4: K*   pBININT1 â/ 6 š# 8Y /  y 92   S �/11! a â— B ›ð 8)
   14: q         BINPUT
 ± 1
   16: } Ñ   EMPTY_DICT D7: q 8 2 D9: c aGLOBAL °'_codecs en	 ', /35I 3 A7: (; q   MARK D8: X   ñ BINUNICODE 'abcW '46W % Ü 4F 4F 	alatin1I /59I 5I P61: tb  RTUPLE (´ q at 37), 2M 66 B4: R8 �  REDUCE !7 71def¿ 7> 8> T77: sr qSETITEM D8: e pAPPENDS Ï Î P79: . ðSTOP
highest protocol among opëð4s = 1

Exercise the INST/OBJ/BUILD family.

>>> import pickletools
 Bdis( T.dump ! �.dis, 0)› # 0‚~: - A dis P17: pÄ @   0/20Ý 0¸ Hfrom¶ É �_ExampleÝ Tx = [ ‘(42)] * 2 á xÓ  T ¢ P 1: l»   2LIS¹%  ¦02â / 5$ ñcopy_reg _reconstructor,.30J (#33§› #34[  › ƒ\ #56\  2 ŒP „Pñ_builtin__ objectM  ™ÕM TP82: N   1NONe'83ÅÁ3M#84§ £ O#87½¹.88, 2+91/P92: d�    b   Ê!91~ .93R ;P96: V5 �   'value/108   ?`106: I8 $IN>  4s3110`111: b. ±�
  112: a % @3: g %GES  ö 1M, 7d!$1÷]} ­ *­så ¹ ¹	2#c í —  2   $4> 6 l  µ E( ! W _,À
   76: q     aBINPUT ¡3
   78: N  ANONE C9: t  QTUPLE
 Ð (MARK at 31), R80: q '  b 4 D2: R QREDUC` /834 54 D5: }4 ¡EMPTY_DICT 68 6 D8: X8 ðBINUNICODE 'value'# /98@ §7
  100: K@ @INT1 !42 @2: s   qSETITEM @3: b   QBUILD @4: h   RBINGEw á `106: e   pAPPENDS Z Y`107: . ñ\STOP
highest protocol among opcodes = 1

Try "the canonical" recursive-object test.

>>> L = []
>>> T = L,
 ¡.append(T) áL[0] is T
True T L  &   )  ? ðdis(pickle.dumps(L, 0)õ `  0: (õ  f ³P 1: l   2LISH ‡08 @2: p# áA   0@ 5Q @6: g*   ˜. ùõ5n .10n 1n P13: aY × 4Ç0›#1#]d   h  )ˆ„3�. 6û3# 7Jn . 90ð1

Note that, in Ò÷"0 :1 of àq tuple, ñ
disassembler
has to emulaW pe stack[ Porder brealizu C 3POP] ì´16 gets
ridy  ¡  /0.²TÕæ Ç I Á2ê   Ú   ît# 3€  ò6ð  ] 7ö  ú Óó6ü/11~  #14  e @5: 0   0POPñ *16     Û1» ³ k 2XZ7T, Z—611: k — o2  E4ƒ56 Ó 6 7{ ! 4ƒ Éð10: a        APPÓEND
   11: 1  ÁPOP_MARK   ( Qat 0)' @2: h& `BINGET
 ! 1 @4: . öSTOP
highest protocol among opcodes = 1

Try  ñ2.

>>> dis(pickle.dumps(L, 2){ à 0: \x80 PROTOk 0  2{ P 2: ] ¡EMPTY_LIST @3: q RBINPU« 0 5Ä  7b q5 TUPLE× . 8E  P10: a^ 7APPC2ò Tò ›00POPZ142ÿ3 with annotations:=43),* ?e=1;43 P�ðversion indicator.Í W `   Pus‰ ² empty list- mñ
 Store the stack top into …memo.  T Òis not poppedV ªõ Read an object fromQ ` and p¤ Qit on | P 
á ºñ   Build a one-tuple out of= Ïtopmost itemQ   ÷ -\§ XAppenù Fto a‚ ÁŒ2 ¤   DiscardË ˆ Í ±, shrinking &0 byî 2Ò‚(1'§ S '!uný ” �machine.L�2

"""

_R _tx0= r  Rqimport X 'e
 !io ñf = io.BytesIO() 3p =2 !.PŽ0r(f— Ñx = [1, 2, 3] p­#(x= 	 ±f.seek(0)
0,  ¥ Q = {}  ð0f,  = ¯ê&(f ÅÔ06: Ö  q BININTõÓ ì {  ” 3W  &eT 2   S =5Ø /13$2" G/16Ü'18| À
highest proñ'tocol among opcodes = 2
"""

__test__ = {'disassembler q': _dis 7,
  
, Amemo%  1  	2 q}

def & 1():M  import doc…  dreturn . ðmod()

if __name­ É= "__main__"L �argparseM 
 Dr =   .ArgumentP$ !r(&  Ö Èdescription=Û ñ one or more pickle files')< b c.add_a[ U '1 _1 …', type=Š æFileType('br')+ùnargs='*', help='thz y ÿ-o', '--output', default=sys.stdout� w� „  Æ p where “ [ ÿ should be written  m   +R', acy¶store_true'‚ �preserve 3 – between ±i“"-lz  indentleve 4<int�  ô ònumber of blanks by which to R Â a new MARK ^ )"-a– ¿annotate', / ð each line with a—#rtî ÝžpŽ @prea@`"==> {†l} <=="&"if+Athan<4ñ is specified, print this before'R Ž'Ñ Þy¸  ê0'--5V�run self3 o suitej v` ÷verbosely; only affectsx $ru6 ü3 = V  X"s(E ifÊsö .S>Felse  T= 30 >   - ! 08  H bif notb ·ºO  % ” !r.½_››   �elif len(Ç .C j) == 1I =dis( B[0],€ ^f, Noned e   ` pd$, Ô ( $  Ý 
r :E= {}
  ) h 	 ? ‚for f in� Ì 
T  + 'h$s. €.format(.0=f. Ÿ  9   Ë î .B$e(? T + '\ +   :f( Ê  Àtlevel, anno÷(tate)
"""Conversion pipeline templates.

The problem:
- ñ

Suppose you have some data that ‘want to cg  óanother format,
such as from GIF image  < 9PPM Ò.  Maybe the
Y À ðinvolves several steps (e.g.Ý ðing it through compress or
uuencode).  SÆ  of^ · ^ M  may requir aN ñeir input
is a disk file, è  s 4 pbe ableÏ Òread standard: �; simila0
thS �output.  ‚`  = pthe ent ú  b €also be _ 
LŒ 2 or`san open¡ 8andz S its x ú±module letsÏ°construct aR
/� by sticki0oneYNmoreF@togeð.  It will take care of creatF �and
remov  —Qorary¾ 1s i¤ y 5 `necess `to holY°termediate
• .  You canÛ@n usÃî _dª ó“ðmany
different sources.     Ãdestinations¸³ 
` namesy dµ ; ‹each tim’ i- ‡ M —= ¢objects soš"an7Ñ sD ¥ ¿ 6Òt§qthem inÄcÆ @ary,D 0
in°¡ce.


Dire sD

To� aB³:
    t = TT!()* \add a T< ñt.append(command, kind)
where  v0str# ·àwo characters:ì` first) 3'-'7
Q 0sú ä ” 3!'f/ $itô á Ê;W ñ 
second likewis³  Cºg @mustŸðvalid /bin/sh
syntaxf
 v ‚å Ýq d,^ ðàpassed as
$IN ÄR$OUT;s � ,ëu c possi€øš 6in
Í k/o žî¡ beginningÝ_t.pre¢öaÍ ßý`ile us´
òð sts = t.copy(inm,Q 	 0)
I'  (  #0mpt‚ 
,b ý  ”èiðis written, respßCvelyÄÀreturn valueG  v@exitb 0tus° ~ YIMp1forq ø !orw   “	F g!fp L (õ 0, m¯   › 0'r'eé  ” * ðor 'w' to write it -ð!- just like
for the built-in function open() or $ Bos.p ð	.

To create a new templ ÿ*object initialized to a given one:
   t2 = t.clone()
"""  ô # '


import re
 $os
  ‡ £file
# we )  Ý VquoteÚ Prathe÷ !anü amoduleç òbackward compat
# (= "usÌ ñbe an undocumented but  ;ôin pipes)
from shlex� O ó 

__all__ = ["T?Ð"]

# Conversƒðstep kinds

FILEIN_ ¯OUT = 'ff'7 0# MÝðread & write real Ws
STDF  G -G 	@ aB ˆ 0STD‡  A /f-ˆ @ � ?  @ -@ aNormalJ€line eleru
SOURCEû O= '.B 
’be first,Õs stdout
SINKE  ‰ .É Pbe laF  ZE @in

¢¡ É œ]", ë   POUT, 	 2IN_û   \� ä  , ¥ ¤]


class )FQ """C ærepresenting a1  —Q."""
` `def __Ÿ‚__(self)K  y %""‰ÿ() returns a freshU  8    K p.debugg„ 1= 0o   Ÿ 8t()…  µ … Ct.__ )5ö s  1(t)Í  Y   ¦ 4 '<° instance, ›‘s=%r>' % í . ,‡ ˜  ¾ 
	"t.  Pstore	 Ó‰X Ü4itsïi state   Z v   ] ü  y   y � b| pwith idö5calo Ü2ialŒ 1 asápcurrent�	Ÿ 5t =T%()D t³  ¡  7[:]  ë$  % ›tô $ ‰l, flagú     ü  R �Yr offÀ 
{ ! =W q cappendr Acmd,Lw &   @ addð x 21 atF9end~ òif type(cmd) is not '''d §ôaise TypeError('¯.} p: cmd m¸ `† string'’!if» c !inÛv¾g NValuh Àppend: bad kóind %r' % (kind,))
  0if  µ == SOURCE:  " óraise ValueError('Template.append:7 ð can only be pre 9ed'i ö self.steps and  q[-1][1]… ?INKƒ úalready ends with SINK}  æ ![0d 1'f'� ÿnot re.search(r'\$IN\b', cmd)… àmissing $IN inD �  å � ?OUT‚ 0>OUTƒ o»a((cmd,ÿ1))
÷4def½(0 # S"""t.äD À adds a new æñ at the front."""c  Vpif type< P) is ‰ /''x=Typ€ :iP mustyŽa stringzd !in™  sÏ  ’ èi 1bad-KÆa  µ	HcG0FË‚ ITbeginKL RMBŠ Ngƒ O insert(0, Ò/RCopenO‡file, rwçN#  p returnM€pipe or  € object - E forP þ {²or writing;z0ile` †Pother"1 of  Z Llineš rwˆ;'r'"“ µ � 0_r(” 	á; w; w; ~ k E: rwãP\'r\'a\'w\',Ø5%r' Î	 P% (rwó#  â T '_r’Žà *!t.4 ¸ ¡ implementS  n ! × g, 'r')7  üw') respectivelyy  u#~ † O r“: NÀ] == SINK:
   ó0raise ValueError('Template.open_r: pipeline ends width SINK')
 I ô cmd = self.make2 ‡(file, '* °return os.p` ±(cmd, 'r')
M @def  0_w(N  , B !):  l bif notj Vsteps   ^ 4pen| w} 'if: û[0][1] == SOURCEJ wPbegin L t #''Ý Ü ½ 
 À #  Ccopy inP, out	 $H asystem1 
˜= ~	À„. *Ý 	3 -  ; .£¤ È  ¨‰–debuggingS   Pprintb  n õ'set -x; ' + cmdU ø    

.˜  6“ y ô# Build a list with for each command* a[input™€name or Ì& Ñ string, kindg - ]ìk A= []Â  o  9 A in <u  ý  . ‘.append([q  : -  a]*#K ñ# Make sure there is at least one\ +  V c q  'cat', '-- 's Ts pcare ofv  '0and£  ?o ¦ [î 1] =x’":3!ifC![0£@'f' K  ýb© ¡insert(0, ¬  á  e  T  G ‘ \-1][1’ 5’ „“ ­�  d -T  ( Ë“ ñ# Invent temporaryxòs to connect stages that need" E ‰garbage kicÐrange(1, len()Gl\ši¦ 2š Žr '][ 1if ; ] (1or 1 Í+ N A(fd,ã 1) =  0.mk¾"p(Û (   ºos.close(fd ç $ 2
!  á [É o ]• v 4 Ž@item& ( ° P[inf,xãfÂ / B  ¦ ¾ ØV= 'f'A   Ê@OUT=Æ`quote(F^) + 'ÛO  ¹O 'INN 9infM Àd
        if÷ kind[0] == '-' and inf:
  `cmd =  õ+ ' <' + quote(inf)* "ifM 1M ?outN 
>N  + O @tem[L  y e #  cmdlist =  a[0][1] ²for item in 61:]È Q[cmd,¡ 1] =( B[1:3:  ë "if ':  0'f'Z  0
     P= '{ Î   q+ '; }'™  !   º 
  O3|\n5 - Jelsed 1 † ø J + '9 —if garbagA  rm’ †= 'rm -f”  1@file× 5  ± 9   ­  ª û 9 ­Ctrape   ( < €; exit')º ö  1 2 3 13 14 15“ è  G  R è 
ù Z 4û `return. ( ñ+
"""Utilities to support packages."""

from collections im& ¢namedtuple# …functool! ósingledispatch as simplegeneric
H  =lib ^.util ”machinery &os
 T.path $re
 2sys¦ Etype¢ •ModuleTyp( ñwarnings

__all__ = [BR'get_¬ ¥er', 'iter s  " Bload  Tfind_ C Twalk_^ 2 D m† B bdata',1 AImpInS EImpL` �read_codeI pextend_ý < Ý ¶Info',
]


 6 = ¾&('  K � _¿ !er( ‡ ispkg')B a.__doc!'A% Ð with minimal'¢o about a X  .'


def _.Rspec(j ,F )ÕB"""R¬Bthe ! -- CificJ   £ ‰r# Works€ clegacy8 !s.L2try\  .  R _@ # =& . . öexcept AttributeError@ ×= á (Z÷3if - gis Nonu ‰ ’  x  l1lib.® _ŒTh ,] p 
[ Ø 1 )~=s(streamxð# This helper is needeðp order  “ÐPEP 302 emula1 toÁ ð# correctly handle compiled s& Ü ‘ marshal
 ‚magic = ‘ .¢ "(4Ù 2if  #!=~ÆMAGIC_NUMBER ü W] U ð12) # Skip rest of Ó  heº. Ðreturn marshað2l.load(stream)


def walk_packages(path=None, prefix='', onerror= ñ):
    """Yields ModuleInfo for all m Ñs recursively5 0on a �, or, if @ is X ,: ¤accessibleE !.
; '9 ñ' should be either;  w r list oU �s to look“ @ “ %inQ à '€ €a string6 ñoutput on the fronV Severy” Q nameV 2on 0 U ñNote that this function must importç *q`* (NOT P ¦ $!)€ Dgive5€in order¦ (£  __!__A pattribu† £o find subV ¤ 'Îú ¤ ðwhich gets called withüÒ argument (thù   m $Ì  A `was beMð 0ed)ë�any excep«  oc 6 `le try3 %to& W €.  If no‰  …U!isH ±supplied, IaE& ðs are caught and ignor% Pwhileq  oAC ™ 7 €propagat/ �terminatž “he searchK’Examples:¤#„²python can ³p 
t)> ´ dRctypeì 
9  .%,   Ÿq__+'.')q 2"""e  òÃseen(p, m={}Î Ò �R in má    ¢return Truú  bm[p] = `  ùiƒin iter_sPKl y; 2 —  U !if j.ispkg„ :try  0 "__a0__(I .ô î     ×F %ifYais notR(  P 9o EæE m 8 � Nelsee   Frais¯  ,  :  =õ 9S(sys.º[TD], 'c!',)r&[]¼ b   ó# don't traverseâ�tems we'v@Šen befor   > Ž  [p¶  p� i "t ¸)w  OOfromÏ ,W  Î° ¸ò
²°é†top-leve-0on € ò _ô1Àles in.

   ð6 'prefix' is a string to output on the front of every module name
   & 0 . 1""" pif path[ QNone: õ    importers = iter_ !()% ðelif isinstance(G ,ž )E ðraise ValueError("& � must be r q or lisº   sÚ ’look for ¥  �  !"má Ts in"‘ sÀ umap(getÃ ,ô !)
È Áyielded = {}  x Fi inÑ    Sq, ispkg& _– B(i, ¶ Ã !if“@ not= } a  $    [m Q] = 1›    " ! M@Infos  . › ú)


@simplegeneric
defË® íµ 3=''¸  ° ´ot hasattr(1, 'ï .  œ ‘return []²  8 .6 ("`


# Iª ñment a file walker ßcnormal”1libÃQ hookØ _Y  9 _finderÜ ˜  { “  0os. V.isdiû  ð L` � inspect6tryï ±  µ f0os.	l 7 ‘except OSIB ó# ignore unreadable directories like6Q doesM  ¸ { ­ ð.sort()  # handle packages befn Psame-º djs ! fnÛM ¬ 0mod3  RB.getC  2(fnÊ Ÿ  ifY   À=='__init__'›F 1in &edb  : ‚continue‘    Æ4 = ÐEjoinÊÏ), { Ûg= FalsF  5andR " g  )  4'.'â*fnž ? E= fnŒ ¥ 	    0dirÏ ;ent"l 	@ ! G   )& =   
Œ 3    ø' 
ú  ' 0subÓ 0   3if 7 
\ , »ITrue    Ybreak (el7 $    v E  #ÌaX¤öæ
¥ ®[ ×! 8Àix + modnameð, ispkg

iter_impor	 òmodules.register(
     ñlib.machinery.FileFinder, _E afile_f _H ƒ)


def a   1():T `global[  ôwith warnings.catch_ 3  ‹   .simplefil¦ ò'ignore', DeprecationWN )`  < Pimp =r 0ortÍ × ¬ ó('imp')

class ImpI° ²"""PEP 302 ÷ ñ that wraps Python's "> 3ic"g ± algorithm
‡ W ô(dirname) produces a c Gc �searches F ¸directory. © O(NonO J óthe current sys.path, plus any Çz ò	 are frozen or built-in.Ù BNote' ã ” does notd `ly suplñ	 being used by placement– !on� Pmeta_’ . 2"""l Rà_init__(self, & =ÿ ® ïb  > 	 ±("This emul0S is d?0ed,œ  .±' instead",Ž  O  r	 ñ0ort (ˆ ³ j! =¹ Ö  ÷� & `, full&ã  # xR: we   '
`' arguO� since itÝ @onlyÖ ed via ^Ï 0subk % =v õ .split(".")[-1]* 4if - !. P and · Ý 0is ’‘ /areturn 	N ?elf6  Õ * =6 Jelse\ & "[oÈP.real $^ )Ã :try>  ¿ ,   R, etc..–$�Ó`except�ŠortError] ÷  ¦ImpLoader(ì † Œ )&n›Ü ³, prefix=''^ k ¥W º �#QisdirD  ¶ y  R Æyielded = {}¾' 2pecÀ , ` Zºs = os.list| R M/OSI #é´unreadable „ies like| ~U  ”  Wƒ [ ð.sort()  # handle packages before same-C d•for fn inEsO0mod;  V ns-B.getÈ  6(fnQ ¯  ife   C=='_ñ'ÃJ 3in ”
j  > †continue¡ À    path = oñs.path.join(self w, fn)
  êispkg = False
 óf not modname and oV `isdir(a ) 1'.', iin fn:F  l C M= fn >try2  6 Ðdircontents ={ Elistx H ïexcept OSErrorS ý!# ignore unreadable directories like import doese ˜ -[]% �for fn in\ Ã ‘ 1sub]ð= inspect.getmodule (¯ €   3if ; Ï=='__init__'d 0 çMTrue°  !   ]break OelseY  Û @inue< # Ža packagJ F. ` ƒyielded[! ]] = 1› % ” prefix +ª!, Õó


class ImpLoade²"""PEP 302  ñ that wraps Python's "< 4ic"‘algorithm† 1""" Àcode = sourc	 3Nonü Ddef ™�`, fullÖb, file  Fetc)�warnings.	 ò("This emulation is deprecated, use '³@lib'Hatead",   ›
 D< BionWh _H   ( > ² ! =¹ Y   Å    ! ö  !  
! ’etc = etc 9Rload_<' w_reopen¯ PPmod =Ç.W �H  à %,   Ç   œ± kfinall± � b D ÆwT g.closeª ð# Note: we don't set __¦ �er__ becaß°we want theä¦ule to loo­ Àrmal; i.e. t3‘is just aÜ@per ™€standard ç•machineryä `returnj ‘ƒget_dataŽ ú #ŽQwith ‹ ¡, "rb") as7
e  3.‹&()m Ô :b gv   .B Zdb pmod_typ–) Zetc[2­ ifæ & ú ==imp.PY_SOURCEK  ËD  m  Œ r  	V, 'r'3 1 'el_  (b �COMPILED,ƒÇ.C_EXTENSIONì  A   e v &b':À _fix_name(sóelf, fullname):
  %if † is None  $ 4 „ = self. B (elD !' 
M õ(raise ImportError("Loader for module %s cannot handle "l  ‘  $"m9 Y" % (§ õ )G ereturnù 
 ádef is_packageF = È P_fix_V( i ’ ö
etc[2]==imp.PKG_DIRECTORY |get_cod} =–´h ‚ "if· W á„mod_typeN ¨ k ifœ& À †Y_SOURCE, UsourcM  Ò   3  X¡ ¢= compile(5 ,½ @fileb†, 'exec'a C �Æ   �COMPILED¢   o Š_reopen(K  O >try4   Æ§ Fread«.¡ J ofinallN 	 8 k.close‰ Ô 4¢ ž  _|°delegate().  ¾ j /   
Šƒ	Œ1Y ŽSì)¨ Ò@ile.øA   ê</Y_¾ñif os.path.exists¡‚ #W[:-1], ž  Qwith öò }3 ¾, 'r') as f\A 7 f¹$U c »" |½ ¿
A  T 0finr=ˆ‹*erEËqspec = P   (= ·, '__init__�’ Qpec.l×’  ~qm \S)÷½À  if mod_typ÷e==imp.PKG_DIRECTORY:
  ðreturn self._get_delegate(). ¥filename()7 ñelif mod_type in (d £Y_SOURCE,  ‚COMPILED ÏC_EXTENSION)ƒ o m   ¢None


try< ¢import zip
 0 Ffrom  ‡ 	$ 1er
' •def iter_> €_modulesÉ ÷orter, prefix=''­ °dirlist = s& %d(A .L ò_directory_cache[› ¶er.archive]D_` # =¦ 2er. ¢   ³plen = len(- > Åyielded = {}1 n … inspect `for fn§¿ A c   õif not fn.startswithq 
+  / ‚continueJ    fª 0fn[´ ú:].split(os.sep)* !ifÒ øfn)==2 and fn[1]} È'__init__.py~ i    if4 !0]¸ 3in ¬  -  µ[fn[0]] = 1   ' ô" +` L, Tré ¿ >!=1r 0modB ìœ Yr  (œ Ý ” a  %=='q > b4'.',‹  y  ÿG	3ed[0 E% A, c, Fals-s¥$err–.registerL ~, ^- ±)

except IÿRErrorppass


Û ¶g £(path_itemÇð"""Retrieve a finder # the given 3   mºQThe r%$ed1 1is âdW@sys.4 _u þhijò was newly created by ai Vhook.j W ° (or part o@ ñ) can be cleared manually if ah 0res$ 5of Ž  Y 0s iz �cessary.+ 1""" KpP erÛÏ [ã Atem]? ‰7Key† K  M,  � 	   s¯ )   	…     H! =#_8 É  (  ó 9 �¶.setdefault> Œ ½rq L Ybreak^ å n .  z Jelseâ ” 1 = Ä * Oú¸ô/ as(full&""¼Yù†s¸Rà name

    If ñ!fullname contains a '.', the finders will be for ´package
   8 Ding L °, otherwise/ y@ ñ	all registered top levelI m ñ(i.e. those on both sys.meta_path and   ‘_hooks).
D  Ifq  Ñ ód module is in a µ  Ú $at  �mported aý 2sidÙ ð effect of invoká Öthis functions $nol  y  S °specified, ô é RÑare produced.» 1""" %ifHñ.startswith('.'):!  uù msg = "Relative Â{!r} not supÙ ”".format(¡)I  ra¥I’Error(msg  if	 <7 € Q# Getk7 aA's _¨%__g Apkg_=Ý `rpartiJˆ(".")[0]/ A = i– Blib.
 !_mÑ(M §   	  = getattr! 4, '… v', None. 1if 1 !is Ö  K areturnŠ Felse ¡yield from|Ž+  : T =     1@itemF  O Bget_Ý 0er() p)


defË ‚_loader(ö 1_orB0"""‚2a "& P" obj¯ r 
2 RØ ò " i'( @ can/àcund or{›V 5 ualready1 X, its€(if any)"ö  d,ñorder to establish\< O)Á  J )'sl' ¤ "s[ D „#ifV  ¶  IX  ö0Iä Ûif isinstance¼1, M› CTypeÈ C ‚ + =p O    âà1 ã /__å  ·  ª» ' n i}Hh  Ñf  T P   N ;Þ !._Ç
c- {O j '1 6 °�"""Find 2I ,Tçi€backwardÓñmpatibility wrapper aroundŸ Ñ ®Qutil.‹  6P thatðverts most failuresó|H  ÝRonly ð s
¤0 raX R n  ·  e : BÀ    msg = "Rð$elative module name {!r} not supported".format(full$ 3)
  €raise Im) ’Error(msg Etry:( �spec = i) àlib.util.find_ Z ‡except (X ±, Attributeh T, Typ BValu v) as exy ð# This hack fixes an‡ ðedance mismatch between pkg› E and½ #1 ñ
ortlib, where the latter �s other e²s for cases/ J ` ¢previouslyA dE0 qmsg = "ò p while 4¡ing loaderj ²•({}: {})"= ™ W  œËñ	, type(ex), ex)) from exF preturn ¢.p !if 1 is$ None else 
 ð


def extend_path( ,Y)•A"""E  Ð a package's ' !.
u  In> `ed useg rto plact`follow ycode inF Â__init__.py:M  §Ò x‚£ u  ( _² H__ = ( @, __ý2__)\ Y±will add toÓ 8 ñ all subdirectories ofv 	 `n sys.	/@d af_ jU ". Í is1fulE 0if …Pwants† 3dis)ð  different partw ò a single logicaC `  <—multiple œ ™²t also lookãð*.pkg files beginnš"!* Y!es 9® „argumentÌ afeaturépsimilarÄ S*.pthY á(see site.py),E  ñ that it doesn't™@ial-zÁ lines start• Rith 'þ!'.F &A À i°rusted at fpvV0: a<PcheckN 1forC ±duplicates,ç1entàRfoundžd 0are+e-C  ñ±, regardles¥1wheNPthey 6 QexistIm�ystem.  (ƒF Sis a L. !If2 @inpu thå  Ù0a lO 0(as  a2 µafrozenS  s)c2is  ˜�nchangedÄ …a ? �modified;qped copyu M �.  Itemsæ Âonly appende~U6 a6end� ÷ @ssumS B  • sequencee &ofd =©  ` A(uniU or 8-bit) I ngû @ferrù1to Œ1ing= &Ã QignorUN iß z a causeC 3@when×d† æ 3Rs may,   tÈ€function%àa®  1(iný  wóoSð.isdir() behavior).
   ñ """

    if not isinstance(path, list):#  ' ð# This could happen e.g. when t   ÷alled from inside aC ðfrozen package.  Retur?  e v À unchanged i …at case.C r0  , ¾ Àsname_pkg =  ƒ + ".pkgÝ  ) ! =\ ñ[:] # Start with a copy of the existing, \ sparent_® ±, _, final_i p ñ.rpartition('.')ª :if < G6try  Xssearch_© Êsys.modules[C 1]._% !__c  ; ñexcept (KeyError, Attribute ¾ / ð# We can't do anything:Ô ²d_loader() bas NoneÜo D ñ passed a dottedu  $ B H  Felseô ð  û qpfor dirü' < «‹dir, strë ‚continueW  … ò
finder = get_importer(dir² # !ifQer is }  #  7 ™ions = []²if hasattr(k 0, '	 k_spec'Ÿ  K   # =r .+  > bš  0   1if 7    %   ¨  1 B.subV_X@loca´Ls orË B# IsÑ – ùer PEP 420 compliant?û /elý Vÿ 7_, ¥ i 4 		o  %;  ) s© R# XXX¶ñmay still add duplicate entries to¯9 onk F  ‚ý	-insensitive filesystems/  û or[Cií.th�  [  ù.J#d(Ç )²¿ ‹ £Prightš0ng 3subœ°s like zopeQ  ¡# It looks2 a¼ ´4d "/ 0 ’   0pkgá a = os.£ @join+%, nœ%if(  is9 (A ôù l ff 5pen4 	Pà!OSÎ~ as msgK 4ñ stderr.write("Cåo£¹%s: %s\n" %\  ~  ‡ ,i )ä  ) 
Æ    If”    £@line¦#  ' #  =  ³.rstrip('\nJ !   1  ¾   .s×sŽ ?('#pð            contoinue
  ñ path.append(line) # Don't check for existence!
H preturn ; ñ


def get_data(package, resource):3 …"""Get a ƒ from a 1 .Z ÀThis is a wr• õr round the PEP 302 loaders ” API. TheK p ñargument should beD vname ofx ð, in standard moduleô 1matH ’(foo.bar)c Ö  `  !inc Bformc rrelativ|@file~ á, using '/' as2  H¢ separatori 0par¾  directory < Q '..'— òis not allowed, and nor;brooted2 `(startq `with ax )m²e function Ô zðbinary string, whichY  „€contentsá "thÚ •specifiedÜ` 4For”`s loca– &”ilesystemb ñhave already been imported,ó t ‡ Ðrough equival("of@ åpd = os.V@.dir9a(sys.mÝ#s[r@].__•1__)` ; 0ata> Dpen(C gjoin(dÑ€, 'rb').ª "()x #IfÊþ@ canŸ%be÷ "or¸0d, §Pt usem
Õ‰ q2doeä0supð0(),l `n None˜º1ed.> 2"""“  —# =Eàlib.util.find_ ªý 0if   O  W ´ ] l _ }=/ .  "ifá „ D  è  ‚hasattr(, 4, ','g ò # XXX needs tesŒ moÛÌE.getÉ 1 orŠ  P '  ù À_bootstrap._† (ë )ù  W !isã ´ dmod, '(± v €# Modifyœ	„ to±compatible ‹ È Ž  erÆ >I äsignature - anÌ–  "µ Õ"¸Ü Q ð3 ofL   ñ4's Ê  uparts =­ ¢.split('/'  ¤.insert(0,ˆ T6modC3 _   I‡D*Q ) B (@ ð)


_DOTTED_WORDS¬ ÷ '(?!\d)(\w+)(\. ð)*'
_NAME_PATTERN/  e.wùile(f'^(?P<pkg>{V  }) Pcln>:	 =obj! P?)?$'‰.U)
del A  » @lve_ú ( Þ � ’PResolâ ÛSbject/ ItPexpec)`that `J `` willDa– µ þow fo1ingØ �Ðats, where W ðis shorthand for a valid Python identifier " ãdot stands
   1 ñliteral period in these pseudo-regexes:
3 gW(.W)* ":( ")?! �The first^ Âm is intende  ñbackward compatibility only. It assumes thatf Àsome part of™ À dotted name^ ¡a package,â �the rest vn objecI ¡where withæ &at= Àpossibly nes` Ãinside otherG !s.’ qBecause� bplace W  { Œ e stops‘ †   hierarchy„"rt„ðcan't be inferred by inspection, repea’ ñattempts to import mus< Adoneœ  Û Q this~.“IÒR seco&!m,½ ¡caller makqðe division point clear through2 c 3pro& ðof a single colon:% 	¡!to 5lefÀ* ŸO ¾ Õ  Ø &edÍïN Arighá r\K ` âP. Onlie=`is nee™+ 41 IfN qit ends.Å ¹ :£n a module Ï ƒreturnedu!unÅb will ! $ a–‘ (which mÏ %beU Ä), or raise Ùýð following excep"šðValueError - if `"@` is`i³ ‚recognis‹maIs9 $an"`failedß@n itj0uldO 2havpˆAttributy  a 8 �ure occuÓ°when traver0O¹u –	 Ê·$ed´ 30get  	@desi?X )O 1""" ð	m = _NAME_PATTERN.match(#* ‘if not m:0  ƒ €VR(f'in]�format: {@ B!r}'D ògd = m.groupdict( öif gd.get('cln')c #	rÇ_@ - aôT-step‡ais all'´§  mov Blib.
 !_mŸ¢(gd['pkg']‹  Ø  L5s =” 3objÀ  & °.split('.')R � else []�   Ï "no	0 - # ›] te @findò Á�boundaryL ~  X}   0mod ! =vs.pop(0Û #z ©   **Z­/žÇ p =n ` Bwhil�sö  H p’ "[0     i3f'{J e}.{p}'Î  ! :tryK   — Às)
           Òparts.pop(0)
  ¹modname = s ùexcept ImportError:   B Qbreak ð# if we reach this point, mod is the áule, already i\ sed, andG ¬ 1 ƒlist of  nF ðobject hierarchy to be traversN #orM ‘an empty I qif justE `moduleh qwanted.2 €result =ª  ‚for p in‚ ) ‚getattr( 2, parreturn  ð
#!/usr/bin/env python3

""" T+mŽ PtriesÏ  re òve as much platform-identifying data a¶ðpossible. It makH  Z  in7 ñ	ation available via func aAPIs.
ï áIf called from)òcommand line, it printÐ– < j ÀconcatenatedÄ  single str¸ ñto stdout. The outputD ¬  –1useª !as{ `a file¬.; 
#ƒ@ò&is maintained by Marc-Andre Lemburg <mal@egenix.com>.G ðIf you find problems, please submit bug re‘s/patchesJ2theE PÙ( òtracker (http://bugs.ùP.org)òa assigÕmö""l¤ B".
#Q ÒStill needed: P* sup„  œ‚MS-DOS (z _DX ?)' QAmigas qother sX #unK %eda`s runn¦S N @addi:°al Linux diÚ bu s¼ ¡Many thankÓðall those who help ddk H’-specificv Ñchecks (in noäicular order):j ð!  Charles G Waldman, David Arnold, Gordon McMill ÂBen Darnell,n ð  Jeff Bauer, Cliff Crawford, Ivan Van La¤ham, Josef= ðBetancourt, Randð @HoppM ÀKarl Putland7 phn Farr| T GregD  ªPuk, J¦ q ðRossum, Thomas HellP ðMark R. Levinson,ékF PHammoi B=ôTutt, Hans Nowak, Uwe Zessin (OpenVMST)øColin Kong, Trent Mick, Guido œ  AnÎ`y Baxt� CStevt  Dower¨uHistory¸�<see CVS™ASVN ñ±in messagesãh6 >F ô1.0.8 - changed WindowsÃ  I ^  öÊ keëb32.dll( G ö7 - added DEV_NULL 6 lä_ä(e D è5 - fixed Java† UallowO Q on J*n 4n BIron{L & 3& ‚normalizÙ&ofÐystem name
# ó   1.0.2 - added more Windows support
# ( ö1 - reformatted to make doc.py happy. 0. òa bit and checked into Python CVS; @0.8.; ‘ ñsys.version parserB òvarious new access=  ª   qAPIs (p[ _@ C(),  €compiler Retc.)> 10.7ðfixed architecture()í öuse sizeof(pointer) where availableI  -Ä Hö for Caldera OpenLinux1  õ Psome  s. ð WinCE; untabifis€he sourc' o 6¸ ±;  a 1VMS„squires ò 1.5.2-V006 or highV‹  ?  òvms_lib.getsyi() configured) F0.6.å @code$ðprevent 'uname -p' »0lat8£s which ar* j   �known notD È i| j   pd win32Õ•àhopefully workm ±Win95,98,NT-bWin2k;µ  l   Adid màcleanup of the“’erfaces -! K¦have changþ Q5.5 -­`d anotF0typD K `MacOS °... should I 
Š $usxPcoffeEeday ;-•65.4i Û few typos inh Y U0.5.3ÒÒexperimental “ _;ôÓbetter popen(u  #   Saaroundo s_syscmd}�-- still·³100% elegan¶ @   fthoughœ  nÊ#Æðreturn '' instead‘1'un  B allD  T   3 €values (¾qsystem X P commn te¾ 2to 1 
E c x Ájust leavingc³field empty! e ýPinclu: èyäslackware diste`exceptÆ{handler±ðto cover up situa,  . ^p>Qdon'tEA os.³
Ð P(e.g.è)Ü@fail`socketË@host™3();»JlibcD  deö ¬ "RE  î  �@API J s1err,#o ƒ}sÏ*6*ƒBjavaP`; madeA c‹a privat. | @(was- 2tem@   ~ì`s) -- ¸ßl@; ex&`a4als<@ prom"or ‡  ÷ â¹ 70.4ÊV  —6modÓâ‘() outputKTWinXXL 30bugð ô_follow_symlinksá 10.3h(!()Ð"file" commanõJd invocation bugs
#    0.3.2 - added architecture() API and support for it in platform()
G õ1 - fixed syscmd_ver() RE toC ¦Windows NT€ 0€ Äsystem alias3 ( ö2.3 - removed 'wince' again... oh well./ × -  ˆ › Ø %edÐ  2.Ï ±cache logicµchanged the9 p string#6mat…  Ü 0  S°to use funcŽós instead of module globalŽ  ¨  só q some a: à take too longg”be run onI  imº�  1.� ò first release
# ñYou can always getà °latest vers9tof this^ 4at:@  ¡  óhttp://www.egenix.com/files/python/p>4.py? IY ðat URL should fail, try contò  ä ðhe author.

__copyright__ = """
„ C ò! (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@l  ± H   C ”-2010, eGÙ å Software GmbHN Vinfo@ÿ 
O aPermisH , À ,NAify,] diJBbutejs`  ‰1itsJ ‚documentÎñ for any purposeG ñwithout fee or royalty is hereby granted,P Pprovi2thaøQaboveŸ _ð notice appear i(l 1iesp  9 K Pboth    œ= n4Fis p	X D ˜ P
ê 0or Ï@ionsžÀreof, includ- bmodifiäsÚ Š ’you make.ˆð2EGENIX.COM SOFTWARE GMBH DISCLAIMS ALL WARRANTIES WITH REGARD TO
dETHIS? ±, INCLUDING; xIMPLIEDC ñOF MERCHANTABILITY ANDï pFITNESSE À NO EVENT SH„ òTHE AUTHOR BE LIABLE FOR ANY SPECIALé ðINDIRECT OR CONSEQUENTIAL DAMAGES  6  òWHATSOEVER RESULTING� ðROM LOSS OF USE, DATA? ðPROFITS, WHETHER IN AN ACTION. ‚CONTRACT“  NEGLIGENCE= O2 ƒTORTIOUS5 `, ARIS70OUTB OU QCONNEV ’  !USK �PERFORMAZ )F ‹@ !

 
_€ m’'1.0.8'

a colleEs o
 $re %sy •subproces Á5ool Qitert b
### GÅð & Constants

# Helper*a compa85twoecnumberRsÒPBasedÖ spdescrip; 2  TPHP's@ _V ð e():
# http://pð|hp.net/manual/en/function.version-compare.php

_ver_stages = {
    # any string not found in this dict, will get 0 assigned
    'dev': 10,
L ã'alpha': 20, '	 ) 0bet 3 cb': 303 Tc': 4 `RC': 5$ r 5 –# number,‰ ,10‹ !ply  = p
 P
}

_àonent_re = re. ñile(r'([0-9]+|[._+-])')

def 4 `arable3 I(Q!):Ð ±result = [] Pfor v5; o k.split;  )Aif vm@in '| 'W     :try   áv = int(v, 10)w     Ž 9100 þexcept ValueErrorV  7  å 1.geb a ð â.extend((t, v)ƒ rreturn ! ú

### Platform specific APIs

_libc_searchŠBb'(_ iinit)'Å á  ?b'| q(GLIBC_ÛO.]+)N *0r'(µ ð(_\w+)?\.so(?:\.(\d:�.]*))?)',VSASCIIA 4  Up(executIó =None, lib='', O ñchunksize=16384):
 ð""" Tries to determine theF cC Q that Vfile r E  5á(which defaultO  E `PythonS@erpr` ò) is linked against.Œ  G RêÒs a tuple of 7 s %,Ó )) o  ½ 5the� °given params s53casØ ·ookup failsz 0Not  ç ä0 ha> ñ timate knowledg˜ Õhow different{  –6Ås add symbol<� and thus…probablyI €only useØ û9 #s ^·d using gccÊ AThe §qis readh qscanned
 [T byte1"""† 'ifé ¤  ^Ý@ñ
ver = os.confstr('CS_GNU_,‚VERSION'Ò ì  #¦Qse 'g9¢2.28' as ( A', ' 
6 @part^Bver.ÿ1max	 *=1* qif len(1 f) == 2Á  €   ^q*    Ý’(Attributâ,îA, OS÷¶ 6   #
_) or    v6¦Pavailí|  F Fpassv = sys. % ?V =YS  ifÍðattr(os.path, 'real '¾ ð # Python 2.2 inðtroduced os.path.real	 ó(); it is used
  ÷%# here to work around problems with Cygwin not being= 1abl= øopen symlinks for read, aexecut0 =�  )^ x  U ( Ñ, 'rb') as f:&  Ä  binary = fë ²d(chunksizeI  # upos = 03 `while  b< len(C )T  5 âif b'libc' in # · or b'GLIBC 
8  < Pm = _< ‚_search. i ,{ ž  1 OelseG ENone¹  + !if‰mŒ ¯m.end() ==È  4 #
 &   1if - �   =˜[max(pos,~ Â - 1000):] +L 	¿  G    ~”   zcontinuø   ü ž Ireakm  ƒpinit, g  ð version, so, th©s  I = [F  z ðs.decode('latin1') if sO  ¦ Å- s;  sD¹m.groups()]% 0if ž  © A andß>libå blib = •	B Belifã 5 ^ Q != ''#  á \ # 	]     %  + Œ (V($ c) > V(1 g Z    " =È  	^ Z .soÀ ã  l'Y  €    Òoz Š(Ü dor V(s  
Ô Õ  U ? %= < } Œ{ 7  [-¡  T$!=³ o   < 4 = 
 +5 	{ „E `return�,< Ã

def _norm_O ËÑ, build=''):
@ ô""" Normalize theF Ô . � strings p va singlñi ,   u O f] ât major.minor.V ô(or patchlevel).�  l¢.split('.'‚ ç Å NPl.appXY & 6try! Á ð= list(map(str, 	 ‚int, l))7 ÿexcept ValueErrorE £ ò  = '.'.joinU  )B[:3]O .+  

�ð_output = re.comðpile(r'(?:([\w ]+) 	 .	 ?'
  Or'.* 
@\[.*J dJ ù8\])')

# Examples of VER command output:
#
#   Windows 2000:  Microsoft ù [Version 5.00.2195]> 0XP:¾ M> (XP< j1.2600; oVista:y  t ‘6.0.6002]³ ó Note that the "™ õ" string gets localized on different
#Õ vÏ ñs.

def _syscmd_ver(system='', release 2   
«ðsupported_platforms=('win32', 	  16	 rdos')):@ ð""" Tries to figure›Ö 3OS p ` used ·ureturns| ƒa tuple ± ® ,; ").i  ™ ItI s] µ"ver" shellõfor this which is knownm �to existsQ3ð, DOS. XXX OtherÉ 7o ?u Pn cas­‘is fails,� Ðgiven paramet8 0areŸ 6d aß pdefault¢ Á 1"""� tif sys.h� not in ‚ :0  < : 8 >tem(± ¡# Try somecon cmdU–  imå¢ subproces  : * €in ('verèj /cŒ 3md  )™ 6try  ª ginfo =c r.check_³U(cmd,Ö  0  vstderr=² �.DEVNULLF Ÿtext=True6 `7 )³ øexcept (OSError,é rCalledPZ 0) a�#“#print('CÎ%[¡ed: %s' % &V why)y  (†continueŽ :lseQbreak  e A1ParîÈ1putJ Ó  .£"p(— @m = pÜp.match('   @if mˆ á7Nonª ¡È³ = m.groupsd  ÷ Ð# Strip trail!�dots fromœÔ^ë³  7 $ifþº[-1] == '.'.% =* H:-1]B ÄB   $ =‹ [B a# NormÉ8/  ° EbuilŸ  (eliminatá ¥additionalŒ r# zerosZ ß K p= _norm‰ ( ) ÷ñ_WIN32_CLIENT_RELEASES = {z ð(5, 0): "2000",
 òH   (5, 1): "XP",
    # Strictly, 5.2 client is XP 64-bit, but platform.py historically
F °has always  ñed it 2003 Serverm   2    ‡   @None @post! 2",
6 @6, 0 TVista1 6Ê 7 \ 8 37 78.1 f  e #10f $10.   /  C}

#Ô ô release name lookup will default toQ # òs if necessary
_WIN32_SERVER_RELEASES = {’ 15, Ñ  - E2008  ‰( $R2Ð 6Q -126 +$20 	6 # ñ}

def win32_is_iot():¦ creturn òedition() in ('IoTUAP', 'Nano�   ðWindowsCoreHeadless ¸IoTEdgeOS')p U q 2try	  
	   `import� 1reg¡   �except I VErrorC    6 ¨_winreg asA = 	Apassf FelseT — ócvkey = r'SOFTWARE\Microsoft\ñ NT\CurrentVersion'[  ¡   Cwith˜ ².OpenKeyEx(³ ñ.HKEY_LOCAL_MACHINE, u )Î 'ke4 L   ºò	reg.QueryValueEx(key, 'EÎuId')[0]Œ /OSI * ^  UÍCver(Qb='', vê  1csd ƒptype=''b	M“from sys ³BgetwNJ } £ ð™ … ‚ q, csd, | ’�winver = d !()f 	™  major, min ð
build = map(int, _syscmd_ ò )[2].split('.')M ³ ‚
¢[ Ÿ #.p² Z  40 or%bver[:3µÿ	 = '{0}.{1}.{2}'.format(_  )$C = (ÇeCLIENTÇY.get(A B)) o c =  (< „ ’ #�ò reflect the compatibility mode Python iªñ# running under, and so= àservice pack v $ponly go3 Qto beý#   idí w d�s match.# i2Šj2] == */	s=F'SP{§ð£ _£ _»à)
        exce÷pt AttributeError:
  úif csd[:13] == 'Service Pack ',  7 @csd ' AP' +: Q13:]
S ñ# VER_NT_SERVER = 3 ðif getattr(winver, 'product_type', None)€ 3r órelease = (_WIN32X ñ_RELEASES.get((major, minor)) ort  «  A ƒ @ Œ )é 6try§ 	  s Õimport winreg� �except I ˆ " _7 8 asA = 	Apassf Oelse— ñ(cvkey = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion'[  ×   Cwith˜  .OpenKeyExÕñ	reg.HKEY_LOCAL_MACHINE, u )Î 'ke4 L   pÿ$ =S óQueryValueEx(key, 'Ž T'E)[0]� /OSL * sreturn ¿2, vÖ ,º!,  ò


def _mac_ver_xml()H fnëó/System/Library/Core&s -b.plist3ó	if not os.path.exists(fn[  þ �  yX GS 1libÏ õ EN ­Ñopen(fn, 'rb'‰fÜ  � Tpl = a �.load(f)i 1 2['P­æ '…K@info£B'',  B `machin¾³os.uname(). c 3if  � in ('ppcC ÷Power Macintosh'0À# Canonical Q G  È H 1= '? 2PC'QÎ ÿ ´ ,~  ÿ(, =Ì ã  =(  )<  ='  ˆ p""" GetV $OSh j Ãrmation and ‘  itdtuple r ,G  Ï w j !) Ï “ being a G  G ó dev_stage, non_Ù  ä Ù").# q ðEntries which canºðbe determined are set to the param   v¯� K C adefaul. s''. All¦ ej O qtrings.ø 2"""� ð# First try readä  r Jófrom an XML file¹ ashouldO ñ# always be present  F + =í f­1 is¸ •)·4nfo¦ ô
If that also doesn't workä µ %K Ž“’Ðjava_getprop(ñ#, Q "):‡ 	 ' c.lang 3àSystem
    try3:
  õvalue = System.getProperty(name)) 2if , vis NoneC  J åreturn default5  9  öexcept AttributeErrorK 0 G ò
def java_ver(release='', vendor pminfo=(  ]), os 1):
ƒ ò""" Version interface for Jython.'  Ö RÖ ¤s a tuple ƒ € 1, v} p c) with a beings  L D 0vm_Z < _Ó  Ó S) and¿ B % aD † #osB  os Ê  ‚ g_arch)¿ VÜðs which cannot be determined are set to th ¿sq àgiven as param8 2s (P 4allï ? $''z 1"""@ �# ImportZ ¢needed API] 6tryöi(  é3.la4*D '> F ö   ÈW@ = _`  _getprop(' . PîW 3 ;3', ( 5 Ö# =, a  m.  • *a ® 7   9  ; ¬ < 	× $vm—>  MÂ w"  s_k Ú š	# =×*  ¯‘ 0os. 'Ë×5  5   5  
 À %8 v;  > þ Û 	j½k$S

###o ¦ ` alias+ïs‰_ ( k T §Ì¥- b  ed¨acommonN –‘marketing‹ as usedRsome  sSÑIt also does $ preorderC !ofì 1Brmata& Bcaseú v ðwhere it would otherwise cau @onfuÖy R#if’ ¶ == 'SunOS'F¥# Sun's OSÞ $if¥W < '5-  † t# These# ý Á 1old Q N  4 r‡ ˜z „# Modify] & (j! u Ã # 2- 3t i 4l = ¦.split('.' Fif lû  1 	R    pmajor =èÐ(l[0])
        ñexcept ValueError:
  Ipass Nelse' ‚major =  9- 34  P ±l[0] = str(% )" örelease = '.'.join(l& 4if ! Z< '6'„ `system; …Solaris'_ ± õ"# XXX Whatever the new SunOS marketing name is...L  É k    Telif  —= 'IRIX64¨  #  � reports ð64 on platforms with 64-bit sup) �; yet itd  € õ# is really a version and not a differentX  , since 32Y I Ôapps are alsoq 'edñ Ð Ï U$ifz 
ˆ� = Æ + ' (64bit)? ”9 '- !'
¨ UÐin ('win32', 	 F16') `# In cAaone ofØ0othâFrickÇÕ sWindowsm ð# bpo-35516: Don't­²lace Darwin SmacOSS@inpu& º1and¶ #þ ÷arguments can bežAthan¤ 0cur¯ply runnz.creturn[,,d ô

### Various internal helpers

def _c‚(*args):Z Q""" H( @ to ƒ!at“ /  ¯ ‘ �in a fileã  Š¤compatible< be.g. "`-Æ ’-machine"G1"""A o# Formp ! „ C= '-�x.strip()q P x in– ‘ter(len, Ü )Ü ò# Cleanup some possª Æ • obstacleáq  @.rep 0(' t"_'� % =d* /* -* /\\+ :* ;* "* (* )* Ã�# No need_øÒ 'unknown' inr4iondY
9 E, ''å¡Fold '--'sÀremove trail¹"'-uvwhile 1.c/edÂ$--Æ  æ  5if 1 ôN  $ Qbreak÷   Ê :  ˆ  a[-1] =àL  › R[:-1]×% ßànode(default='n 
àÀdetermine thñe node name of this machine.
    """ Atry:	   Ñimport socket �except I VError. C# No, 2s..W  F Òreturn defaulG 	f   f €.gethostª (()t -OSp ÿStill not workingw ñ
def _follow_symlinks(filepath):
l Ä""" In case  c is a 3 ", C ± it until a9 é !al6  2 rreached^S P= os.y @.abs Š O Uwhile$  is® # tQ  AnormR I  ˜   o Tjoin( 1dirhF  ),s Jreadp )‰©. "

Tpsyscmd_ „(target,í:=''Zòterface to the system's6‚command.‹ ¶ ñThe function uses6 Q-b op Ëª >  [ bhave ik G Aomit:  ¤  ò ñ in its output. F# èbs. It ò sJÄ ? # Ä x ³should failÂ ö ifé �.platform> ã('dos', 'win32	  16	  emscripten< ¿   õ# XXX Others too ?• ¥ s=º‚ubprocesÃ ž. = ç0# "(" Íðlocale dependent: forÇshe usagUBe C + � #Œòget deterministic behavior env = dict—òenviron, LC_ALL='C'• 	2�# -b: doû!pr– C Ü » òlines (brief modeM  QûE = s$r.check_ 0([' ’R-b', "!],Ú  A  wstderr=` DEVNULLD renv=env· }(
,» rCalledPí))&" º !if=ì * 
a# WithÞ, <  øðbe mostly ASCII-co†3iblaP# Dec„Àfrom Latin-1!±prevent Uni  d' e]#¿ p .  2('lC  ')

### In\aBabouñðused architecture

‰ Šp valuesË	# ð; non-empty strings overrideù $
#lðs given as paramç3s
_&_x A = {;ò@: ('\²WindowsPE')   ;16'    7 PMSDOS }Šp ð (executable=sysõ0.executable, bits='', linkage=''):

    """ Queries the given e= Ñ (defaults to" ñPython interpreterI  M òbinary) for various architecture information.€  7 ðReturns a tuple (° ­ ø) which containsE e about€  Á :bitt 1and¸ ü  � €mat used   A 5À. Both valueÅ 1e r¦ ×ed as stringsÄ V) ðthat cannot be d0min6 )reC i)by€ Pparam4 Á presets. If¿3 isœ0as Ë ì ‘sizeof(po�)Ç C(or  “long) on ·ðversion < 1.5.2)X %as? ”indicator ³ supported l _ ÿ €The funcÚ@ relO onÜ ñ system's "file" comm”1o dRx ðactual work. This� PavailÇ Å €most if _…all Unix? @plat_ð s. On some non-$   a where™ 
� G Adoesa aexist « (heois set Bcfrom _ _1are“T1"""‘ B# Us® Ð€)†I ” number o* ChingC @elseKs$as‘ .  O t:  “ imð è&uc` „ # = P.calc F('P'| H $ ( Ò * 8) + 'bit'ó±# Get data  Ê'',#Ž 'if{¡  0 àout = _syscmd_ (Á3, '–  ÿ 9 '�  @  R  ñ\{ '  { 0 ==Ÿ XT #Ü1didCr4P anyt�°; we'll try>tprovidel " #µpsensibl>zRhen..¯žf‹ Õ? inV¢  6 @b, l07	€T[sys.P ]’  7 Jif bI   çb+ l+ y5= l.  F éFif 'Æ'G8in žì'shared object# � 1# FnD Ã„ R# Bit � 032-¾ g‡ d  Â ` = '32# \  el5 ON32'2 #ž‘Irix only2 Q-'nJ /64 ð64bit'

    # Linñkage
    if 'ELF' in fileout:   0lin) " =$   el3 /PE2 ñ# E.g. Windows uses this formatB  Z  D % I  %  , 5PE'C Felse« 0 ) ® ?COFâ % ^ 5 oMS-DOSž š  MS& 8 ’ ó # XXX the A.OUTò also falls under�class...H  Ì Qpass
 Óreturn bits, y ò


def _get_machine_win32()€# Try to‚„ ñPROCESSOR_* environment variablesl p# avail 0 onÇò XP and later; se7ð# http://support.microsoft.com/kb/888731< Z 1 Ñwww.geocities- órick_lively/MANUALS/ENV/MSWIN/¹ RI.HTMà# WOW64 procesbAmaskæ ònative architectur¯ D(‹  _3os.c.get('f ÿ	OR_ARCHITEW6432', '') or8 RCTURE8 5 A)


Ý2 _P° "or£@ amethod+  Ò � 3clsÆ ª ðfunc = getattr(cls, f'ù�{sys.plat\ó}', cls.from_sub)Z  H  O (Ó 2 ''Ow 
@2 +ÏIDENTIFIER',Œ)b tOpenVMS¤ d 2try     imO… vms_lib¾ �except I 4ErrE 3   / 	   ôcsid, cpu_number =b  ÿösyi('SYI$_CPU', 06 O :p'Alpha'2I p>= 128 s W 'VAXU‹÷ 5"""Û �Fall back¯¥`uname -p`  , /œ ñÖ.check_outputð È   !['a  ¡U-p'],f     wstderr=Q ~DEVNULL+ štext=True †).strip(E½1(OSº', ^ cCalled ü ‘ Úïòunknown_as_blank(val)@	' ƒval == '0 'Ÿával


### PortäÄ() interface­ c_resulFÀcollections.¤fdtupleb"3 f_base"ó"system node release version Á"1Ô ú(A \ ñ that's largely compatible with aÔvsimple ª à except that 'ð#processor' is
    resolved late and cached to avoi Ñlling "uname"6 ñexcept when needed. A"""
	 ²@functools.P ‘_property Edef Œ q(self): “ ô
turn _unknown_as_blank(_P¿ r.get())l  M �__iter__L   Ž Uhain(l  p …super().D )),  T .¯ %,) � Á@classmethod ’  make(cls, ~ Vable)ä ñ# override factoryqñffect length checkP  ¦ Ànum_fields ="  [ . ’ ðresult = cls.__new__* 5, *† S !ifI 4 W) != e 6+ 1¯  � ömsg = f'Expected {. ó} arguments, got {len(Y %}'r  H øraise TypeError(msgÀ ü: ß‚getitem_âW, keyO!re7 Qtuple¯h)[key]A 3len= 8  ­ <  %A 
^oreduceA _¶ ", K Ö [:\   ¬R]


_1   = None


7 2():» ð """ Fairly portE " Ñ interface. Rý 2s ay mö%of strings (system, node, release, version, machine,–”€identify¡the underl ’platform.¯  ßð Note that unlik Re os.· âion this also ¼Ž A †possible‹ 0 ine  at9  as an addi "alõ g entry‡ ðEntries which cannot be determined are sety#'';  Á … `global„Aame_¨ã )if @ is Z  Â/Ó 	) > ¡# Get someÔ ps from Uvbuiltin*RAPI..V6try\ Ê# =b =S (Ó¼‚Attribut†` t = sys.àT @@ = _ P  /Q$ =R$ =SF = ' Ê Á(;!if?Aany( œ#êbPavailJ v Ð# Try win32_vÃ2 on  ¹ W ifÒ �tem == '5 'ö  O Å Âcsd, ptype =Y h  7 ;ò ƒor _get_ _m ò  3 ¹  ÷T'ver'™ @comm‚ë  Ð  -p #Ù  ‚(¿ ÄØNÀ          syðstem, release, version = _syscmd_ver(sy' 7)
  Â# Normalize   á to what win329 1) n% «ly returnsD (g p) tendsH . ú	 the vendor name as wellŠ $if� ù== 'Microsoft Windows':t  Ã ° 4= '$ 	# /elS T' and- n @ d t# Under† a Vista@ 4 Ù Server 2008,€  £ &# É qchanged‘output of  @ Ïcommand. TheG  Ûð is no longer printed.  This causesR A  -ú ýto be misidentified.: 8 e å €if '6.0'KzN[:3]M - É 1= 'L'r Oelse< %'
8 ÷,# In case we still don't know anything useful, we'll try toD Öhelp ourselveàCQin ('0', 	 J16')¨ dif not~
  ü M  uL &  * GŸ = '32bit&< -16< Ð 2@[:4]Ðj'java'¥ Ã g ÔÀ, vminfo, os 0 = 5 :\  Ö | JV 	 ¶ ’, '.join(X 'd
H r(1# Sýð  specific exten%ì
›wOpenVMSø ##  Q seemÝEhaveF X{ …mixed upà 85 or7  0g  &' =IH   e 3= '## Ÿ Ä `0 
Ñ †ü§ä~œ ¾m cvals =Àn, nodeŽ‚, machinßÐ# Replace 'unªàn' values withÆà more portableð   _uä ’_cache =  Óresult(*map(_P  _as_blank,Y "s)HrÁ F Ð

### Direct R@rfacIdo some¦j #() T tues

de¹2():nQ""" Rh Ž1/OSÿÐ, e.g. 'LinuxLf '.H  ï ÀAn empty strÇ#is� Ðed if the valñue cannot be determined.

    """ õreturn uname().system

def node():0 ! R, ð
s the computer's network C Ã (which may { Qfullyl  x ¢qualified)X   òAn empty string is — Qed ifo ?valÐ " Ä Î oreleasÑ ú '{ ) ÿ, e.g. '2.2.0' or 'NT'µ R« ¸ version‰¸  1 À ¿#3 on degas¾ S€ ¾ omachinv  T type² Oi386« S~ « Ÿprocessorku(true) ) ò¶ Oamdk· +$­ñ Note that many platforms doa`provid# %isA  in$ Pation¹csimplyTORsame Tsas for 5(),F  ° NetBSD doeù/is@ò

### Various APIg qextractæ¥ •from sys.=S_sys_ Ð_parser = re.yAile(§ ór'([\w.+]+)\s*'  # "5 s<space>æÂ'\(#?([^,]+)' ”(#buildno" p(?:,\s*Q 3 ]*& !, & Odate( –:]*))?)?\ 2 \time)„ `[([^\]­ @]?',Î aASCII)¸ [Ú ÿr]"

_ironpython
QIronP2  0d\.õ  ‚?: \(([\ S\))?'  (d(.NET  ¤ F

# c Q cove­¸2.6 and 2.7¶ /26¸  Œ  ¢ ¶ &\(j  g[\d.]+ É = )¾   ]+À A.]+(ë p\d+-bité ß)\)'
)

_pypyŸ a*M3%+) :ã1 b[PyPy þ@\]?'† â¢cache = {}�ž () _=None”ða parsed version oóf Python's sys.version as tuple
  s(name,   à, branch, revi2 “, buildno	 õ date, compiler)H óreferring to the À implementat€ n F 	v s number{  | P/timeÇ !stn 1ando ’ K ’identificy / %.
  ð Note that unlik µ 2,^ Öreturned valu=1for kEò will always includ^ åpatchlevel (itŠ €defaults:W'.0')¦ �The func=† ‚s empty Ò !s …  Ô� entriesÖ ^ ÷cannot be determineda Csys_ý@ may( Pgiven� ôparse an alternativeå ` ‡ ‘, e.g. ifQ ó
was read from a differentE pinterpr¡ œ 1""" Q# GetU 
e  ifÝÀ �is None:  àÝ =+ Q# Try\ 0caci2irs—§result = _C _& W.get( ,t 	3if : 0is v
� À# ƒ Pe‚if 'Ironì @' in¶ á Ù &# & î  \) =A  
*È.startswith(p )b  ?m° QironpO	 !r.'  B 7els�  - 
T /26V Î H ò c praise VªeError(8     v'failedäN p&}: %s' %? Ireprð )Í [ û,4¸01 = ¹ †.groups(*f À'q   ö  "elÌ™.platformÍWjava'Ç1# J¸;    % k —  ˜Û_á"ifÑ  Š5˜ †$ á   …A¼  F?, _�"ifù~Ý H  6= 'I‰ q¦"½o"PyPy"Ü   ±5  ¯Dpypy?Àsion_parser.ómatch(sys_version)
  1if  • is None:  ! óraise ValueError("failed to parse PyPy sys.Z y: %s" %F  J 	 Irepr� � G “, buildno	 Cdate btime =¶ †.groups(@ ácompiler = ""
‡ 7els× ‘# CPython  —  7= _!_Þ !r. 	« 7 :8  s   'K˜ N'N A.', )\œ õ [!nay'¨ '6 "if® ¥HÍ 6= '9 $el;  Õ
{3  r+ ' ' +p  5 ã‘if hasattW–, '_git')R ð _, branch, revi! =j * Ê � F ŸmercurialL 0 R y€  Œ "''Ë °# Add the p¶clevel  taissinga 4l = ¢.split('.'æif len(l) == 2	³l.append('0*  Œ` �= '.'.joi: � BŠ¡ and cacheœ aresult…  @ = (!,‘ qÀÔˆ· 	„o [–B] = o z Dturn a
def pÛò_implementation():Ì `""" Re5 ðs a string identify  w C .A  ,¡Currently,
`follow= 
2 Ts are] 6iedƒ%  C; (Ci B of ‚ !),å  s r  'Iron ' (.NET8 J' (Java4  Ô2' (o 4 1"""© rY	Fh()[0]
™i’}' 4 as¦Ö'major.minor.5 %0Notœ€at unlik  Ÿ ëéT ¶­ @ed vÜÀ  D òwill always includG q Ð (it defaults/0)1o_tuple0 ! (!, ,)E Ê Ðof strings.

  ð Note that unlik óe Python sys.version, the returned value
C ò will always includG ñpatchlevel (it defaults to 0).
@ 1""" [ Ã tuple(_sys_z ñ	()[1].split('.'))

def p£ ¥_branch():N ! R¥ ðs a string identify  Æ Þ áimplementation…  Ñ R ž   SFor C4 qthis isBSCM - ° from which K 5 ÷binary was built\ õIf not available, an empty½ sv8  2c 3-)2]!@reviÁ#9T ‘ %/ '_ š &3& ˜d#“! (# 1no,Ä€ddate) s< ngõ4™ w / À number and 2 3 asØs< Í / ¦ :4:6¨ �compiler« ñ6 ¢ used for  5ing° ¬–  ” ô### The Opus Magnum of platformæ t :-)

_ ³_cache = {}¥0 ÿ(aliased=0, terse=0ÓSingle_ Úaunderlés á @with€@much	`ful in­    €possibleí´t no more :« ¨ ô `output€intendedÒÐbe human readÌp rather]^Ðmachine parse& ö. It may look different on Ä Õ sR�† ½ § CIf "S"© BtrueÃ@funcðµBuse ( si uvariousÐ ò�at report“tem names÷¹ âE Atheik2mon- Â, e.g. SunOS� #beU Ued as; �Solaris.dqsystem_¨ 5() Â  isÈ}ÌB  ASett  ] ¯ ` causeÜ eV #toqP onlyÛT ùabsolute minimum@3nee
p < BŒ ð{sult = T.get(�), None)ˆ Qif re< !is<  :  ùrý# @# GeÞàame informatioñ,n and then apply platform specific cosmetics
    # to it... ñ-system, node, release, version, machine, processor = uname()A $if$ 6 ==& :  q 9 !'' ¦if aliased' ‰ ƒ 2 =  _3 ( « $)
[ "  Ž †'Darwin'f #­ QOS (d r kernelÊ  ­ cmacos_„   =. ‘_ver()[0]`  % ó ( _    r 'macOSò     	Z B ¼ yWindows½ %MSàÎT ±ñ, csd, ptype = win32¾ Îç Šif terseº ;4= _ pD /el@ !ª [3csdµCelifææ in ('Linux',)  ð# check for libc vs. g
 —   ™,! ô ! = ¼ Þ  ê ü,m  y o'with'% § +	 ¦ š ‰== 'Javaÿ  ò, v, vminfo, (os_ os÷ Èð os_arch) = java Á Æ ƒ or not C  % 5	Ò  7 (-s b ?'onu ' Õ ,Þ ¦  ‚
¬ õ# Generic handler‹ 0!ê � 
l   @bits½@nkagÁ ™ €itectureˆ¶.executableG  9 šËÆ  ;  ³), ” ¯�_cache[(š2ed,UE)] =¦m freturn �
### Comm¼ñline interface

if _Á!__Äƒ__main__
À# Default isËPprintS ¼Eboseo q stringŠ öQ = ('
 'o€sys.argvý>'-- må  =  #C'non 
F  Ô ! /--# P ¹ (»D$  › ðexit(0)
r"""plistlib.py -- a tñ.ool to generate and parse MacOSX .plist files.

The property  (" )# ò> format is a simple XML pickle supporting
basic object types, like dictionari Ásts, numbersŸ ôstrings.
Usually the top levelS ‚ L y» æo write out a Ø Q, useF ±dump(value,Ï Q)
fun� 1. ' 'Û q 0, '$   @
a (j Cableè … _� Qrom an ˆ Pload(O $) � í,
with a (read[ 1 asÂ ò	only argument. It
return &`(againy K&a 3)¯ Qwork | 2Ódata in bytesn¡s, you canK ¿ @s()
M S s(L VXs% 3be Æð, integers, floaíæbooleans, tupl
œ ‘ies (but ï � P Ò keys), Data,£  ôarray, or
datetime.	 Ä D.

GPÛ0exaÂ±:

    pl =(   !aSŒÆ = "Doodah", L8ð= ["A", "B", 12, 32.1, [1,  ']]1 F g = 0.1 §nInt = 728 0Dic  Ž ’ fnother˜ °<hello & hi!Gre!>¥ 3 qUnicode  Ë üM\xe4ssig, Ma\xdf1 5Tru.   ™ P EFals   ! ) @some¨ø = b"<binary gunk¡  % 7Mor) ‰lots of 1 V * 10[  aDÌ$= ãìP.fromþ`stamp(
 0.mk  g 3())¨ )ÏaAopen”°Name, 'wb')v1fp:%  û  í±(pl, fp)

PHKQ rQ  t O(R  c ñprint(pl["aKey"])
"""
__all__ = [� ð"InvalidFileException‡tFMT_XML `BINARY  e    Ã     s	   	  UID"
]

imÄ€Dscii  C$cs z Penum
}C io B BB$IO# …itertoolD o
 $re% bstructJ Axml.M`rs.expw› y¡rCreate


‚F™ = Š w.Enum(' C', '  ð', module=__name__)
globalÓ upæ (F Q.__meª * ²

class UID#ðdef __init__(self,¢"a)  ÞPif no?�instance(o%&  * ðraise TypeError(") p must bÇ X"¿ / !ifk ð >= 1 << 64:
      óraise ValueError("UIDs cannot be >= 2**64")
3 Õ if data < 0:   M 1musK ‡positiveK Qself.M =T 
P àdef __index__($ )i preturn  : 3 Orepr2 ±"%s(%s)" % T ð.__class__.__name__, B   – *))^ Oduce` ’ T ,e  G ,G #eqC w, otherÜ 0if w±isinstance(" W, UID' láNotImplemented> “  ‚ 2 ==m 3Chash� b e  ó

#
# XML support
#

 ð\'header'
PLISTHEADER = b"""\
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD Pa ð 1.0//EN" "http://www.apple.com) ñs/PropertyList-1.0.dtd">
"""· ó+Regex to find any control chars, except for \t \n and \r
_( ±CharPat = rv Qpile(„ó)r"[\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f"= ñ6\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f]")

Ffóe_base64(s, maxlinelength=76õâ# copied from / .= úbytes(), with addedF P argu�¾ émaxbinsize = (o a//4)*3& ±pieces = []  dñi in range(0, len(s)± P «  àðchunk = s[i : i +’ ' Q  & e  ôend(binascii.b2aH )Ûô’b''.join(> )IVdecodIŒ 7if ­Xs, stÐS z 4a2bz s^„("utf-8"kMelseí» A ){ð Contents shouldÂ@formÖñ#a subset of ISO 8601
# (in particular, YYYY '-' MM ÂDD 'T' HH ': ð:' SS 'Z'.  Smaller units
# may&romitted#�#  a lossz úprecision)
_dateParser3Òr"(?P<year>\d P)(?:- Qmonth  5day T$ 2hou:  # : eminute&  bsecond $)?  Z"õ„.ASCII)
í@ate_
“_string(sð1ord½  ('® A', '   	 0day  Œ   ‚  
 x 'eWgd = 	ò.match(s).groupdict(*  lsY0key!ƒ "Æval = gd[keyú0if  dis NonPÀ       break#
  ñlst.append(int(val)) ôreturn datetime.	 à(*lst)


def _ è_to_string(d):= ’'%04d-%02 T
 : aZ' % (0  � ð d.year, d.month	 Gday,  2hou  Pinute! asecond# )’ ³escape(text� òm = _controlCharPat.search& ? òif m is not NoneÈ  ˜ òraise ValueError("í €s can't Z Aains	 ñrol characters; "]  G  ò"use bytes instead"z » 0 =  ó.replace("\r\n", "\n")K #r ñvert DOS line endingsu  @ G  E &  G ?MacG &F W&amp;Ž zO '&'€ <9 &lt8 4 # 9 <9 >9 g9 >9 ³ ù ò

class _PlistParserÓ·ó_init__(self, dict_type1 `  ±.stack = []Ò  Ñcurrent_key =/
  Oroot _k & =w 
>  ™ p© – |fileobj” # Br = Õ rCreate(:¡ % ð.StartElementHandle9 Û h ‚_begin_e# ‡ D ?EndB 
?end@ 
 rOData… Odata| �tityDecl9  en  __decl@ #TFile(M' , ¯„\ ‘ òname, is_parameter_ 0, v%ñ
, base, system_id, public �notation_G Ü # Reject p± ° rs with ]  å !ar< ñs to avoid XML vulnerabiliLu expat.ë  [ Ygular\ 'do½a thosed ed ñ, and Apple's plutil tool doe(a öaccept them either @pInvalid� Ex- Pion("¿ à 1areŠÈsupported in¾ -")°	Ê²Øw, attrsn÷ w
Ýû $0get4 H "] C" + +,öv4if = E V! (Y sÁ Iw l ¸ C ; = ¡  = Ÿ Àndler is not‡ None:
  ¡handler()
 Bdef  À_data(self,  )8   . €.append( A £add_object@ WvalueA 1if D ÿcurrent_key is not¢  !if ¡isinstanceU ÷.stack[-1], type({})b â praise V€ ñError("unexpected element at line %d" %?  » ‚parser.CÂ ¹LineNumber)@ + ª [ õ A] = 5 & ! =$ #elO ^ œ ² `# thisR’the root �C  & >  … ;els&q „/[]„Ž³w´6getòI Û¢ = ''.join{  èH  U = []careturn;[#pa"rs  s…begin_di2Xattrs‡ " =3% _òƒ vd $ú dö 1endQ Ø o ¡ 
cXrmissingÐP for ÖO'%s'`‰ .ý,_né 8popÐ å 1key[ ä ? orl$h 	dò a' *"Êè`Barra,, aa¾] Raiÿaj  mh oR ‰  2truØ2 „ KTruej Ofals8 F% 9 |integer?rawG  .  `if rawzÐrtswith('0x')6 'X'Ê  =  Î Æint(raw, 16)]{8 )Ñ LrealÎ ; Àadd_object(fñloat(self.get_data()))

    def end_string& !):   5 žadd_objecE 
D Z  3 B á_decode_base64p – Adate$ R 
ˆate_fromÅ U ò
class _DumbXMLWriterè  �__init__l ô, file, indent_level=0 \="\t"�  1 ! =8 
<ªstack = [] _] ) =l 
* ) # rÂbegin_elemenš#,  Ÿ † „.append($ 
g wµln("<%s>" %K 
' 
¸ F+= 1‘  G] H � passert %.L 5> 0k & ¼ „pop() ==— + J  -–  ¾    Ý /Þ I  osimplePÇ, value=NoneÍ "if € is not  T z   7 ± = _escape( )t     ¡ d%s>%s<§ ­� á¾ A Jelsev S /Ò€  ô  1 L, liÞ   
[ ò# plist has fixed encoding of utf-8 š   `# XXX:"ñthis test needed?‡  $   àif isinstance(y W, strn &     ! =® .} 1e('y 'Y  ™.ç “t*‰c>  v "  1.\ „b'\n')

gP%e(tÑ  ~u		 [ ‚bƒ!, × šHeader=1,E ñort_keys=True, skip @FalsÃ. (ifH 
íá ¶PLISTHEADER
Ú .Ð Ã CB  * 4._s® 5 =  ¢ $ Â  #  i J
á)f /? ! Þ¿ûversion=\"1.0\">"“ 0 _®´P /Q  A ± Ž =  . ” 
íg î = .˜"©"U  é (el�ÀTrue:
        ñself.simple_element("true")

" õ   elif value is False:  % F f( G ±isinstance(R j, int)O ãif -1 << 63 <=z "<  4,  òinteger", "%d" %G )¸ eÊ  O òraise OverflowError¬ Ì LfloaÎ ¤real", rep\ ] ?dic\ `write_ § €(bytes,  karray)‚´ X  $ sY ”datetime.	 X o , @", _ £_to_strings Ï(tuple, listÈ è U ÛÌþBTypeúð"unsupported type: %sP  P ¥ Hdef 5 Fg, data  f.beginq # "›# õ_indent_level -= 1»õmaxlinelength = max(  Â916, ‘76 - len(Z Y ñ.replace(b"\t", b" " * 8) * ' 	� )ã  ^ @for € ð in _encode_base64(É ,�      p).splitg 'n" J !ifI ÒK0ln(L 
+¼ =end^£0 - 7, d— Jif d�  $ ±7ict±Ì * ª_sort_keysG $ ptems = # `ed(d.i &()Þ  & –+ 5 = 5 Å 5  •Bkey,ç ›1 „  gf not ¼7 7str R  #ifOskipØ + �continuek  Y L ’ must be õsU < V4škey", key;0 <_b¤	” T 
%Ò& …4 ˆ  Fä\l 1 !,  ["if 
š , e:  çÖ  â! 
H À          seólf.end_element("array")

  Uelse:   ¿self.simple8  ò	
def _is_fmt_xml(header)D óprefixes = (b'<?xml', b'<plist'x ´for pfx in 1 ?   2if S ó .startswith(pfxb  #   ²return TrueÍ Ð# Also check b ñalternative XML encodings, this is slightly ñ# overkill because the Apple tools (and Ë `lib) w, 3not? ð generate files ¹  B &se{ .+  ž Ebom,  
(  Û  ÿ(codecs.BOM_UTF8, "utf-8"),, S16_BE0 _16-be4 L4 l4 ð
# expat does not support š -32˜ #Å &32™ /32™ 5  š >32-š !if— C7bom'  ddcontin@   ™v ‘› #  ‘ = bom + . 0.de«¡('ascii').k!e( Iing)áb[:len(Q S)] == q   í ðFalse

#
# Binary Phô
#


class InvalidFileException (ValueErro¸Õ€_init__(³, message="C Ö"CE /._; ô<)

_BINARY_FORMAT = {1: 'B', 2: 'H', 4: 'L', 8: 'Q'}

_undefined = object()Ï _ç æ bParser-1"""dòRead or write a b³Á °, followingœr descri!of 4 O ïformat.  RaiseMÀin case of eR€, otherw1 §1theO Rroot Ó .µðsee also: http://opensource.ayR.com/ ó/CF/CF-744.18/CFaList.c` Î —dict_typeÁ è%._ 5 =  ž  H pf'fp> 2try| ¡  ±# The basick …<mat% aHEADER°  6   #.      # O­d->offset. [TRAILM Ö yfp = fpg  ú.seek(-32, os.SEEK_END¥¥trailer = 6 zread(32( 0if Å/ z) != 32ó  Ê r@(P ü c_size,� 3ref Bnum_Q Ö!op Àct,
          Òoffset_table_ 
  ù) = struct.unpack('>6xBBQQQ', trailer)3 âself._fp.seek(T 	a / cobject‚ su F âread_ints(num_% 3s, U OsizeM  F ÷ [_undefined] * E 	³ rreturn º t k C(topv %)
2 óexcept (OSError, Index -e ‚Overflow B [�   Value )): ñraise InvalidFileEt Cion(‰ �def _get_(º ‡, tokenLK C""" Ü @the + @ of  Rnext æ E."""~ #ifG z == 0xF˜ mš0fp.)Å(1)[0] & 0x3D  ß  ~i1 << m ùf = '>' + _BINARY_FORMAT[s]( ¶ N{#f,£}  s)~ š6  ( ª G)!n,*MdataÜ 06* nd!if9 ; inÀ 
'ˆ ¾ l'>{n}{ø €ize]}', ‚ i JelseT bif not qor len(3 2 != :* n2  ‡I
 !  ³ ñtuple(int.from_bytesh q[i: i +k †], 'big'¯ F  Pfor i'rrange(0q ƒ
 )ÇŸCrefsÈn™˜  ¸!._) 1refP ÜR 7refT ð S 0 â by reference.C Õ  Ma €cursivel rad sub-7  s (content`öan array/dict/set)
{ EsultvJ F[refQif re' !is Ñ
í(- ¸ *d g
k c
¸¹ TH �þ¹$ Hˆ" =J#F0  &0F¢ qp,00× ý f= None5 +el7 87 OFals8 	98 7Tru7 V# Theõ!d source code also mentions URL (0x0c, 0x0d) and!a# UUID  ñe), but neither can be generated usingš÷ Cocoa libraries–fÏ ðb''

        elif÷
 tokenH == 0x10:  # int
  €result = ò.from_bytes(self._fp.read(1 <<N 9L),@ K 	 á'big', signed=‰ …L >= 3)
@ BelifV £ ¥22: # real#  T £ ðstruct.unpack('>fa 	¨ o4))[0]b 3b db 8b !33gIdateÅ Lf = À ^  ö  ù'# timestamp 0 of binary plists corresponds to 1/1/2001| p# (year= ðMac OS X 10.0), instead  ; Y1970.< }(Ó  ‹ .	 (i ™, 1, 1) +6 ½ $  - .; �delta(sec¯ ?=f)°4°Idata[ sIõ’get_size(^)' ¸ 
És& rif len(- y) != s:G  É ÿraise InvalidFileException(Á 	5Á Pasciiû9ing[ É  ó �Ç  + Å " æ    =º¡a.decode('Æ 'ï 	6ï 0uni2 ñ I * 2 Ê õ o�utf-16beø 
8ø 9UIDÂ ò# used by Key-Archiver¶i files/ vUID(int‹	+4AL), fG
AŸ Yarrayr vobj_ref.   (…Ã *[]i ­ò objects[ref] = - 	(  s.extend€m ; Ô(x) for x in – ‘#>ðB0 is documented as 'ordset', but ¶not actualls# imple7 ðin the Apple reference ã.g
| C| y  se· an~ "be'%in#$s_ (Þ DÕ:dicÍð s = self._get_s×ize(tokenL)
  ñkey_refs = self._read *(s* 1obj * eresult( ªdict_type(Q p ò objects[ref] = < 	£ Itry:  ¿ ôfor k, o in zip(È $, ¨ )5  9 a [} í ‚ 0(k)€  o¶ þexcept TypeErrorf ñraise InvalidFileE3 7ionJelse; 7 
   ³ 5dreturnKð
def _count_to_s
 !1if  – < 1 << 8— I !1
 ,el+ -16, 2, -32, 4, t  8

_scalar›ô(str, int, float, datetime.	 ò, bytes)

class _BinaryPlistWriter (7ø €_init__(Wð, fp, sort_keys, skip
 1  > ( ‘._fp = fp :  úF $ S  #   Ž w§ ‹ rvalue):  d °# Flattenedã@ect Û U› 0obj X = []= ÓMappings fromA "->%id¦ €# First ´a has (¹( )]÷ect) as the key,< bsecond= Ãis used whenp p is notX ˆhable anz  o $id¥c .c ä t@ N= {} 'id  �# Create6s of all˜ sE Ï p;2 m fv(‘S@SizeI ¡ referenceO õserialized containers[ Á# depends onIfnumberN D “ Bnum_p  1len/.  ¼ «½ + p_offset2 G[0]*D ‘ / 1ref , =14 )6 Pformaóå_BINARY_FORMATgX 	’•Ë file header� 2fp.1b'b™700'| "# A ã ÖA  0obj×£ - R d  @0ect|c  drefnum. N es 3topE  ÛJ2get: < u   A _A œ5 wfp.tell*.  ¸˜ K Àoffset_formaó&t = '>' + _BINARY_FORMAT[offset_size] * num_objects
  óself._fp.write(struct.pack(> ’format, *+ A _ Es))
K 0# WD … trailer õsort_version = 0 ) E = (  — 1 ", j Å ", „ 3ref Ó ,D 3topì B Stable¹ , )
 [ 
ã'>5xBBBQQQ', *· û Ðdef _flatten(E •, value):[ ò# First check if the Ih is in § Ö, not used foK÷# containers to ensure that two sub! AwithZ Asame: 'enûò# will be serialized as distinctÇ %s.Ç áif isinstance(å §, _scalarsï  Äsif (typ' ) ì  $.�ê & 7   freturnX ely dq )B /idD  @ P# Add.rÕreference mapÜ £refnum = lÆ¢ Llist"0obj d.appen– H  « $
	[0B] = › b Jelse5H $[i— ? @ ñ# And finally recurse into#]. Ð Kdictð•keys = []:  Ë$  @item   . (h : #ifì ^ 
ô $ F  # 1ed(G � # €for k, v6  F  flÚkk, strá  N   ™ ?kip˜  '    ‹Iinue    ðraise TypeError("L Q must’ztrings" 8  ' |k Rs! v oÐrtools.chain(V ¤Ê u båoV �ò(#‹, tuple)J ”… ¬ ‘m g2geti®¢'f1objJ…Á|F ƒÉ¿ dºÀ ptoken, ¡% cŠize < 15ð p.write(struct.ópack('>B', token | size))

  Aelif ¥ < 1 << 8:  # ôself._fp.write(struct.Y B[ ¡0xF, 0x10,Q f 
/16g HÂ g 1g /32g Lg  2g /seX QX  3X Qdef _d€_object(z†, value)n `ref =  Â._getrefnum(& ¹ H Õ_offsets[ref]; •fp.tell()4 "ifl  is Noná |b'\x00'H‡  A ?Fal#B 8B ?Truƒ 9A ¢isinstanceW, int@ Ôë 6< 0Z    >try   V!q'ý3³Z <   sexcept C_errori ð raise OverflowE) Í a) fromŸ¸Z  Å}Æ % ¿  É¼H )¿ & 'Áb  ÄO0x11!b ¼b  ¿O0x12b .63€& É?0x1åÄ /64b  	R14' +ð.to_bytes(16, 'big')Pgned=™h 'Aù.Lfloa0dù2œd ”datetime.	   âñ4 - $ - p(2001,  ÷)).total_secondsÏ ¸ ]33, f«´ (• ,  karray)µ m Â e¢(0x40, lenË ¹/ M\O† ;strw ®À    t = valuûe.encode('ascii')
  úself._write_size(0x50, len(value)3  except UniW E] mError:Z At = C „ �utf-16be‡ 6‡ ™t) // 2)
b ¸ 1fp.» '(t ò elif isinstanceÈ j, UID)¦ #if¡ Šdata < 0  *praise V
ç û	("UIDs must be positive"& ‚ ü [ n1 << 8` Ç ò	struct.pack('>BB', 0x80,¨ Œf /16g Hg 1g /32g Lg 3g /64g Qg 7g .seR ç‚OverflowêÀWÛ(list, tuple)a‚refs = [æògetrefnum(o) for o inÚ]Ü! =� ? 
YI ó®_A0, s& 
UB' + G ñref_format * s, *p ò Kdicté qkeyRefss 	  õ Z], []µ#if{ Ÿsort_keys‹ pootItem9 ' "edÁ .i (ÏD Ç= 
�  „@k, v‡r3 ’ hif notRkk, str /  å ?kipä  '   ‰continueþ    ”BType�"L z{stringsy 8 Œ‚.append(ì|kB 3 0val¶3 'v) 0  œ "k ~	¤D¤7s t òù à ,elR‰Rô)


def _is_fmt_binary(headerreturn  À[:8] == b'bp3ñ00'


#
# Generic bits
#

_FORMATS={�FMT_XML: x(  „tdetect=€ Bxml, À   parser=_PÓlistParser,
  �writer=_P W  ) õFMT_BINARY: dict(: òdetect=_is_fmt_binary5  \ pi 1=_B _ | # 	‚ ñ
}


def load(fp, *, fmt=None,� `_type=™ !):š À"""Read a .pÓ ò file. 'fp' should be a readable and ¼ + � object.M ó	Return the unpacked root% ñ (which usually is a–  io)E 1"""M  if¼  %  ¿ ®  )Àheader = fp.– A(32)1   —fp.seek(0 óor info in _FORMATS.values( :   !if* "['¬2'](m '  + 3P =, ¹%']„     ebreak
 FelseÆ  ! òraise InvalidFileException()8 
4  t Â u[fmt]['} g `p = P(Þè
 rŸ!p.6 G(fp)0!s(4&Ó from a bytesñÑ:fä Bd "IO² 	Ü ú ÷<fmtö'BdumpD ', . Ãñ
XML, sort_keys=True, skip SFalse1"""…! '@O' toM E MþN	8notÃKGVÒðError("Unsupported format: %r"%()\ … H
S" !"]A
 ƒ9 . W` i`f	VvfG
bQ withq€contentsñ �N	A¹  Ÿ ± <à =	 ž E ]afp.getò()
"""A POP3 client class.

Based o,‚J. Myers* àdraft, Jan. 96C ð

# Author: David Ascher <d !_a Ð@brown.edu>
#_ ò[heavily stealing¨ð
nntplib.py]
# Updated: Pi‡ 0Laub <p ð@cs.su.oz.au> [Jul '976 0StrP ñmethod conversion#ñtest jig improvemœðby ESR, February 2001.ß AddedÈ .C_SSL+! M_ ´s loosely b:@IMAP) ò. Hector Urtubia <u	 ð@mrbook.org> Augm 3LÁExample (seet ­ ðfunction at the enñd of this file)

# Imports

i	 d errno $re
 esocket Óys

try:
    : 1ssl óHAVE_SSL = True
excepti RError7 ( ðFalse

__all__ = ["POP3","e0 €_proto"]° EN ðion raised when an¹ òor or invalid response is received:

class. X (S p): passg àStandard Port
� °_PORT = 110! @POP å     4SSL$ 0995$ ñ Line terminators (we always output CRLF, but ac'0any¥ òLFCR, LF)
CR = b'\r'
LF 0n'
& € = CR+LFq �maximal ly blength Àcalling read P(). Tñ is to prevent
#!  ) £arbitrary G  6 ðs. RFC 1939 limits 	o ðto
# 512 characters, includX  ² ð. We have selected 2048 justŽ ñbe on
# the safe side.
_MAXLINE =/ 
Ë ƒ !:
{1"""Ö ä1supÜQ bothN 1min ðand optional comm Qsets.G ò	Arguments can be strings^AtegeÌñhere appropriate)= ð (e.g.: retr(1) Z  B'1')Š òwork equally well.¾ Mž C‘ 2Set* e  �USER name  Puser( ‚  CPASS»    ä"_(Ô 
2 ASTAT#  Zstat(+ ªLIST [msg], ãlist(msg = Non# PRETR    !:msgc ODELE. @delec 
. CNOOPO 	 Knoop¼ ?RSEç <rseç ?QUI+ 0qui+ òOJ¹`s (somÞ rv*ˆ ‚:se)ÓRH »	´ o  rpopÓ A/ ddigest6 a/ ",  
1TOPIn0  0topI:, n0 OUIDLÝ@uidl1 ÝCCAPAX 	 Kcapa�ISTLS$  Kstls+ CUTF8 	 butf8()9R
bs one mgion: '<'cpInstant®Z with� JP(host‘ , =C=110f 1NB:‚  — ‡•�col locksÞà mailbox from – 6 À   authorizayp until `A, sof0ure Éget in, suckA  z ‘messages,Z ‡ñ , each time youIs� = À        mailwbox.

  ù%POP is a line-based protocol, which means large mailA ù$messages consume lots of python cycles reading them@ x  y- œ ñ
If it's available on your† ù server, use IMAP4X ðinstead, it doesn't suffer from‰ @ twoí Yblems= aabove. 2"""2AencoÃ ’= 'UTF-8' ñdef __init__(self, host, port=POP3_PORT,N zõ  timeout=socket._GLOBAL_DEFAULT_TIMEOUT)::  ^ .] ! =d 
  p ! =w 
 ö	_tls_established = False& ðys.audit("poplib.connect", t Ò )6 @elf.¼ ! =& �._create_ 3et(ß 1 Dfile1  ) P.make [('rb'- p_debugg9:= 0z ewelcomL §_getresp()—
‘ Ë — W$if‹ Ðnot None and  1 0  Åðraise ValueError('Non-block®  Ú 4et 4=0)[ 0sup©'edì rreturn 5 .µ ƒAion(Wù�.B $),¶ ò 0putJ2 ,Õ@#if©Wð
> 1: print('*put*', repr(F )�#j #1 
£ Ñ �.sendallQ ’ + CRLF)
¤À# Internal: '  w@comm{!to¤æ³ (through _x +()÷ ?cmdö ò ?cmdò  Ð � = bytes½ | 	˜  8 á å ã  # †â €, stripp> $~`# This<‘where all1CPUþ it" `module) ˆdA Rªe¥_ÚÐ('-ERR EOF') ü he½ ð1ionC SlosedŽà&geWQÉ þ Ä.ç  Ö(_MAXLINE + 1*aif lenND) > % [	±  S £ too long'ù ‡Ò/geÒ!ifÞ [ ": Ï	t %Õ†octets =Å  #�B canÌÀany combinatX§of CR & LF5 AhoweÅ':2)' +s¿As enw*in; ðso only possibilities are ...LF, ðCRLF, CR...LF
    ñif line[-2:] == CRLF:
  breturn& Å:-2], octets% C #:1B @ N1:-1A 
b ! 
d ó# Internal: get a response from the server.0 ñRaise 'error_proto' if) ; òdoesn't start with '+'.s €def _get. f(self)Ô   `, o =  .'  B!()}  5#if ðdebugging > 1: print('*B �*', repr( )< 1notâ .› s› W(b'+'„  f rå ä K † V ` 
Ö I°plus follow¯ Ntext][ @long\ $ à £list = [];GA = 0Y  Ô  I\Qwhile�† != b'.'š B �
<,..= +  Ã5o-1}      … ! =d I[1:]  û$ =½ 9+ o   ß €.append(H ù Z ß µ , M nÃÀsend a comma
 !nd  u !5 ³�shortcmd° \ 'neQË!pu" 
¹ “ " )S �  h ¤  T£ 1 H  (§ öThese can be useful:z ¡getwelcomeþ # û  VAset_åQlevel< !,  C :' =" G €# Here a !ll¤4POPÖs¥ Cuserc   b @"""S  P name\¶ 	 „ò(should indicate password required)G - 5"""ß
_N°'USER %s' %Wrr  Z _² Opswd²   #  } ± 	Ä ó includes message count, mailbox size)Â ¾ 5NB: Ãis locked by.áh~µto 'quit()'ð ü CPASSü à Ó ü Astatû 
õ 5Get“  # 'us° ÿResult is tuple of 2 ints (ò 	² 5val‰°Àd('STAT')
    ñrets = retval.split()
 ð   if self._debugging: print('*stat*', repr(G )8  numMessage]  0  ! 6[1]# Osize$ 2$ ‡return (O (, 9 1)

¬ �def list(® á, which=None):   Ð ¡"""Request+ 0ing¼ a rresult.L  , R Â without a mÎ õ number argument is in formh ó['response', ['mesg_num octets', ...], ]u  ?henr Pgiven{ au tsingle z ´: the "scaní "¦ T thatÍ .> 5""" "if? ` @not FE r– kò._shortcmd('LIST %s' %A ë	1 Elong0 'ÁHretrÁ¼Ätrieve wholeÄ ‘'ó'N¡ ™0lin¢Ž á   À JRETRð @ ŒOdeleË _DeletÃ Sµ	¢ “ODELE£ Anoop£ 
gÇDoes nothingNÁOne supposes\jƒ indicat `server<_alive® JNOOP"seÒ
£ ¤Unmark all s  !edã |_tion.Ã!IRSETs ?quis ðSignoff: commit chanÜ2on ò ÿ, unlock mailbox, close connec�  Csp =\� 0QUI�  €  bH “ë €p%  0 
+C…  ‰ Ö±ssuming anyð0 abî)it;:try Dfile½   ;´   ! =;	 1if  ic  
[  B  " .Ñ Ckfinall‰ sqF  	l  . ‰  ‰ 
ù  ž    ;  .shutdown( Æet.SHUT_RDWRµ  ,   þexcept OSError as excù  + S# TheTò might already haveVd‚Òf C  ð# On Windows, this may result inÿ WSAEINVAL (error 10022):
   ÿ# An invalid operation was attempted.: ñif (exc.errno != 	 Ÿ.ENOTCONN4 à   and getattr? a, 'win¨ P', 0)I ° 	 Ã ]raise` finallyç Ñsock.close()
; ó#__del__ = quit
 0 opÂal commands: ÷def rpop(self, userSñ"""Not sure what this does."""q º `eturn C ò._shortcmd('RPOP %s' %X � ótimestamp = re.compile(br'\+OK.[^<]*(<.*>)'Õ  ¥ a¥ ª, password¯ �Authorisðã  ¢ ö- only possible if server has supplied a � iAö itial greeting.Q NArgs” ? o ¡ - mailboxú ;* %  ½ ) Ð e 5NB:H Äis locked by¼ àfrom here to 'ð5()'l ¢ô secret = bytes(l ,´•encoding)< 2m = a.match'†.welcome/ Šif not mÑ @ðor_proto('-ERR A 0  x8ortÔ 'U Pmport¡Ehlib› PdigesË ²m.group(1)+ß # 0has< R.md5(8 R).hex (k rÁ© #%sÄ(Þ", = #))Î œt@êwhich, howmuch›õRetrieve message header of �number 'G Ê ]sfirst 'Z x' lines< Gbody<ðResult is in form ['response', ['A ö', ...], octets]=	AlongÞTÝ² ù Auidl8!, & ]=None Ac÷ (unique id) listÞ $If%2, rê •contains 6  ÷   t·Y !`in the  %m  †ôgnum uid', otherwisea %is@  =  ’ T7mesB 	[< Z"if §  DšCUIDL{TË­ 0  N†  ³Autf8•
‰0TryLñenter UTF-8 mode (see RFC 6856). R— s‰Y@IUTF8” Icapa” À   """Returnó" server capabilities (RFC 2449) as a dictionary
  ú>>> c=poplib.POP3('localhost')' .] ( ð{'IMPLEMENTATION': ['Cyrus', 'M   ™  
 ¥v2.2.12'],X P 'TOP8 ð ], 'LOGIN-DELAY 0'0' àAUTH-RESP-CODE 	@ QEXPIR a'NEVER4 BUSER* d 'STLS ¢PIPELINING ˆ BUIDL % 'n 9 }' E>>>
 ôReally, according to rp, the cõ folks should avoidD 1hav9 Ðhe implementa¤ð
 split into multiple argu" Es...C 5""" õdef _parsecap(line):  ò`lst =  ñ.decode('ascii').q Þ / áreturn lst[0], 61:]†caps = {":tryr ÷resp = self._longcmd('CAPA_l #awO  3 9[1]¹ !foÜ º R in r- 
k  F acapnm, rgœ 0cap? À 0    w [9 4] =; ~ úexcept error_protov Xraise p('-ERR ã ó not supported by§û c „ 
Y ÅPstls(4É, context=NoÎñ
"""Start a TLS session ony`active< !neô �specifiedB©B595.u   r Ò - a ssl.SSLC… u!ifç �HAVE_SSL´ ‡ missing#if1ÿ tls_established\ ‡already E h  v�ÝÖ ? 1 , €  rú if  Ü@ is ß
_ ‡=…ó _create_stdlib_ ° 6Ì a_shortj � ò  TP.sockêÕ`.wrap_ !ett  ¤ á_2Qname=c   j Dfile¡  n P.make L('rb£ _úu = True�7 õ f


if $ `class „ ”(	 0""" ‚ client - o@0SSL–6öInstantiate with:\  ë  ù  , ç�=995, keyÚ µf, cert   L ß@ )†  r Àe - the hostúname of the pop3 over ssl server
  qport -  Nnumb" ñ	keyfile - PEM formatted  üthat contains your private keym Acert7 L   @ific8 Qchain^ ? Pontex¯ aÒ R.SSLC 
+ 1Seeü umethodsõarent class POP3 for more documentation.I 6"""V ñ	def __init__(self, host,8=P  _SSL_PORT,ù  å p=None, Û  _ 	†ñtimeout=socket._GLOBAL_DEFAULT_TIMEOUT,i1extZ )):L $if € is not  D and�  
<  Œ ðraise ValueError("Ö nC 1arg,ùs are mutually "‹  O  É"exclusive"). ¹ ;º )D » Ct%orõº !imw‰warnings A .	 $("l  ‘× pe depre<�d, use a‘v"custom3£nstead", DL BionW˜ :, 2²  .� =_	¾ # ¤ =	% 
ú ¯—…=ñó _create_stdlib_ (i =	 ,h  K Ô = ö  r $ =:	i  .'#, ç)XÕ ý^+ 
  ! =À.7 	— 6 ”0`.wrap_ 0et( 2K_ p=[   
3preturn ` 
ó Cstlsé lÓ-e ðr"""The ç€ uncondiÂ‘Î s an excep Q sinc	�STLS commVð
doesn't make any sense onJ úalready establishedJ 0SL/M IsessJ | N   ¡   ej×_proto('-ERR A  q  '<ð__all__.append("POP3_SSL")ñ

if __name__ == "__main__":
    import sys ña = POP3(sys.argv[1]) òprint(a.getwelcome() fa.user2 22 va.pass_ 3 Rlist(> ô(numMsgs, totalSize) = a.sta$ ófor i in range(1, 5 R + 1)É  Í ò(header, msg, octetsM bretr(ir  * Î ÷"Message %d:" % !  s @linev 6msgd > €'   ' + ' Z /'- ') Pa.quiÞ ð"""Common operations on Posix path»ãs.

Instead of´ó
ing this module directly,  ø os and refer to
- `as os.` ƒ.  The "  " q   i< p alias  < "
mi Ÿ €systems;± PotherG  ó (e.g. Windows),
] ø provides the same÷ �in a mannI ñ
pecific to that
platform,Ô Ÿ Rto an ¡ ~  ntß `).

Soi f.ðcan actually be usefulÃ Bnon-xÙ ` too, Ë 
qmanipul¥ ‡ Ä  c 1�component ðURLs.
"""

# Strings represent¹qvariousâÀ-related bitw°d pieces.
#›ñse are primarily� ex·€; internÌ ,Ty+ �hardcodedB `Shouldê £set before"Û`resolv• õcyclic dependency.
curdir = '.'
pa “.'
extsep 
 /% #th `:'
def# & �/bin:/usr	 C'
al? ÁNone
devnull( @dev/ 3'

ž$os
  ¨    pgenerick g
from  í � *

__allð ["normcase","isabs","join","splitdriv   Qext", €   "base c","dir
 cÒð prefix","getsizM ‹getmtimeE Bgeta  , c àislink","exist  l
 Qisdirº <filO ðismount", "expandŸH   0varL  ÿ  /b","abs
 	Ú  ž] " Gopen  }Æ +2","' 4!ep  " s ý”  J r","realœ @"supóPs_uniÝ_Ž  q Î #re' 	Ã ˆpath"]

Œ  _get_sep(V :Ñif isinstance s, bytes   ì±return b'/'c Felse   À
# Normalize’ d aì ±  r`rivial]r1, s&`.lower�0Mac¾’On MS-DOS½‘may also Ž pslashesbo back Às; however, ð>other
# normalizations (such as optimizing '../' away) are not allowed
# (anoL P funcE ñ should be defined to do that).

defw ócase(s):
    """N‹  e  ñ of pathname.  Has no effect under Posix"""A Àreturn os.fs8 ’(s)


# R 1whe¦ aU ò is absolute.
# Trivial inU P, harc óon the Mac or MS-DOSÃ XisabsÀ _Test h © :s =¦  ÿ àsep = _get_sep¼   Ô òs.startswith(sepÙ AJoinÍ  "sÆ aIgnore±  previous p9 @ if ù ,rtù ñInsert a '/' unless@ Qfirst=  2 PemptyÀalready ends-3'/'¦join(a, *pÑ¢ 0two: mš  ˜ ® á components, iƒ i g‘s needed.ÖfIf any0  Ž %an¼ g, all ò &th1 sG Awill‘0iscÙrd.  An Ø $laë ' `resultÞ  3!th¸F ö  …Ô a separator.ØaØ!a)3 Ø  A = a# 2try òi6t p    0 `[:0] +x ñ  #23780: Ensureí ðatible data type evenøp3BnullQ O Pfor bá Emap(1$, » $   Lif b{
™  &  � A = bÍ     $elÊ 0ath  & .A @ÅJ +K /se,  a+} ôexcept (TypeError, Attribut ÃBytesWarning© ¯ qgeneric¥ °_check_arg_I0s('Ü2', Þç Qraise § > s@SpliT   gÐhead (everythé up Y|ñ'/') and tail (the
# rest).  If‘L  @ Q B'/',- ²"beÊ. !reõ1o
#ØiÅ C !, �  8 0ailœ Q'/'esèÒstripped from8 "iH À Crootsö (D8""" ö#. � s tuple "(� Ê  )";@re "2" i¹5Qafterñfinal slash.  EiÙ é@ mayçØ™ Zæ/(p™ ±i = p.rfind¤A + 1ã©  " ±[:i], p[i:] "if Ä * 0 !=©A*lenã j =/ !.rbi G H # N s.�extensionüEThe   þ:>ð ing at the lastñ dot in the last
# pathname component;  ro+ òs everything before that.
# It is always tru  9 ð+ ext == p.

def splitext(p):
    p = os.fs� 1(p) óif isinstance(p, bytes2  6  se8 Ab'/'0   4ext . Belsee     2 '1 àreturn generic‘ &._± À, sep, None,× Tsep)
 ¯.__doc__ =?   P

# S& asòinto a drive specification and‡`est of ­ð.  Useful on DOS/Windows/NT; PUnix,0 X ¤Xempty�y ’?"""¢ ' ’ p On Posf  b ”f 1"""  ¯çp�p[:0], p
R„ š tail (base™Q) par:0, s¯"asT(” C)[1]Ù 7 × \ sVfinalí \X  l ¶ 
I…_get_sep³ å`rfind(A + 1ú å <i:]â �head (diru á 0á 6 à Ÿdirectoryä QÈ q= p[:i]õ 1if   ¿	  !=>P*len( Ë  ! =/ q.rstrip@G < # ;#Is7ô a symbolic link?
# This willŒ> PfalseÐsystems whereuólstat doesn't exist> isV TC@"""T„twhetherˆ  ô
‹ <2try: }tçr W á óexcept (OSError, Value ‚Attribut 3Ù FÙ G   Ï ð.S_ISLNK(st.st_mode)X Be»Ÿ�for dangl 	GsÊAso u[ls¸ Õ ) 4.  kT q jbroken+s,?os.' „ ?°mount point=@(Doe C@ork ³ ðall UNIXes?  Is itðn guaranteed to w/ "by"?)ç!is` 2A- � /s1?£Ðdoesn't existó -- so not a mount point. :-)
  Áreturn False Qelse:
  " ú	# A symlink can never beS / öif stat.S_ISLNK(s1.st_mode)T  X 	w ? ÷
if isinstance(path, bytes: Ôparent = join$ B'..'Ð 
» - ,  @realn ( J 6try° �s2 = os.lÛ 	' ñexcept (OSError, Value ¶ ì rdev1 = 1dev0devi  s23 1if -  != 2• U @TrueP0 # Å á/.. on a diffe-‘device as! j 6ino 4ino   "f - =  úis the same i-nod| ¸ p¡

# Expand� ñs beginning with '~' or '~user'.
# Ämeans $HOME;   Qthat - ðs home directory= !If›  )‚ doesn'tr n ,o i'  G   i æ is unknown,
#G 2is Ò ðed unchanged (leavÆ ep report pto whatE°
# function] bcalled‰  @ee ¾�argument)Ê ñSee also module 'glob' for 9 sV €of *, ? _�[...] inhPnamesG &(A„ bshouldV ðbe defined to do full *sh-style environ� �
# variab  ´  { r.)

defŒ dI­3"""õ~œ Þ� construas.  IfÉ‚ ódÜ�hing."""ÄÚ¬ fs v  _Átilde = b'~'5 
Q  !if] i p.startsµ(' ë  ¨  yU èsep = _get_sep£ ! =& Â.find(sep, 1� ½ F < 0ÿbi = le$ G== 1% 0f '&'¨  inÅ»%  £  im¡A pwd¢     	     Î[=0 À.getpwuid(os  
 ™)).pw_dirM ,1Key 
�  Y Ó# bpo-10496: „1curÅ u µ identifier¾Pexist×"th¾ I   óssword database,®Áµ	­  C ¸  
   š 3os.^[w]T 
4 k  �ûB[1:i6  \  ÷ '  (    Oàtr(name, 'ASCISI')
  Etry:   ö
pwent = pwd.getpwnam(name4 ú except KeyError@ ð
# bpo-10496: if the user D Q from ðpath doesn't exist in 	� ñ# password database, retur,  F ™unchanged; &  "   ˆ Ahomeß ¡ent.pw_dir  àif isinstance(7 †, bytes)à @ Äos.fsencode( "0rooDAb'/'] FelseG   ? ! =) ¡ €.rstrip(* V Ï l ! +ý �[i:]) or * ±


# Expand ñ$s containing shell variable substitutions.
# This e= sˆ… forms $2  V $${ `} only9 ANon-Á 8 µs are left Ÿõ.

_varprog = None b C
def† Avarsˆ�3"""Ü 
Ë As of­ ¬  § µ}.  Unknown÷ sŽ›  1"""  ø1 = Þ  �  tglobal Ã ,
 b @¡if b'$' noî a  }æ  U   !if0 x b2 •import re0  4 - ð = re.compile(br'\$(\w+|\{[^}]*\})'Qb.ASCIIj @ †search =ä . f Bstarã{ã 7 ˜end = b'} ñviron = getattr(os, 'en 1b',	z 
&?if ,-+
*)&(''&3os.kQi = 0
 —while TruIBm = ˜¨2, iI Œ7mQbreakP $ æ, j = m.span(0= ¬  vgroup(1  W Aame. aswith( )y 8 B.end 3end¼ m      ! =e[1:-1]‹ ˆ3if 	1 is%
Ê  O @valuÍ¯�A[ !de¤ z &)]È  ? 
p    U ~ [: ¨ ü
 ®jÓ _ @tail|fath[j:U  w  ô a:i] + ‰ N  $  ` 1lení
Ë > 0+= b 3 Jð

# Normalize a ñpath, e.g. A//B, A/./B and A/foo/. ðBll become A/B.
# It should be understood that this may change the meaning of the x ð
# if it contains symbolic links!

def norm/ ( ò):
    """NormalizL ñ, eliminating double slashes, etc.""";  F € = os.fs W   Ž ‘sinstance s, bytesv  z ¡sep = b'/'3   Qempty  1dot .   BelseÑ  H [ Z 'F C = 'A  7 2dotX #'. 0if Ú A == œ c ¡return dot¾ ƒinitial_)! =8 ñ.startswith(sep)+ ó# POSIX allows one or two E nñ but treats thre) CmoreH tas sing . Cif (I Ž 1and  å  Ð ˜ 1*2)¨?not· 7*3)·\ 1= 2\ Ucompsø Fplitó Dnew_  ![]/ @for  1 in s[!if   (v,gƒ  Ç  ê2inu   ø Q  !=/  É@or (Ô ³  ”  — A) or–  I  ( Á @[-1]+ 7 5 €.append(‘ ö  Uelif $ ñ    R.pop(4  >  S ¤  Á± = sep.joind s1  w
‰e 7 *+ö] ×-  orI
<'abäV B"""R¢an absolutD# „Qisabs"á È ? 52cwd�sgetcwdb8  
  - , î "= N1wd,R
:T


# û ¡ canonical7 a (i.e.©€location³�a file on# !
# ‚system).j@real’ () Cnameo ÷v o‘specifiedX  = 
ÏJany
À encounteredr \  ~ Ã† iê % 0 €, ok = _EÂ W[:0],“ "{}9 ^	\ \AJoin Z !s,¹ ¢ ’ ½¢;anyî/
#Õ asecond¤.
«  j Ã, rest, seenuŠÀ      sep = cb'/'
  Æcurdir = b'. &pa  Uelse:7 osep = I H Q'..'
> æif isabs(rest)R   0 =  A[1:],  ¤ ¢path = sep@ Qwhile' < �name, _, E õ .partition(sep)P pif not 3 2 or 2== S  { # …rent dirA   …continue  V rame == <J /paI 0if á 
.  b   ,ž p split( È  %   z  #    = q = joinI ,¨  
Y 
í @   D á û   3new. r  th  ¹ £ot islink(1  X D  s ð# Resolve the symbolic ^ 9  t š zin seenz‘# Already Q this A •  > [š ¯ ! Õ1 isk7Non: !   ÷# use cached valM    V  2# Tß  Ù c rú ðd, so we must have a
+ Yloop.É  2cturn aõ G  2t +O!ofQ‹šunchangedI !reG ëŒv), Fals(	50 = ! #'} 0sym± «  z €, ok = _c @real È0os.³ 3 F,Àl*okï¸  R µ  +   # odb T  $ ð, True


supports_unicode_fileðs = (sys.platformAø'darwin')

def reî `start=7+B"""Ra+ ñative version of aÁ2"""Ÿ  !ot praise V…‘Error("no# Â specified")@  Ø € = os.fs …iÚ�instance s, bytesª  ¾goN	˜e) ‚J pI —H 	‚F = I �

! ÿ  ;tryL ò_list = [x for x in ab9: .Ü £V if xJ ^@ 	   )? ð# Work out how much of theð filepath is shared by start and  3.
  ñi = len(commonprefix([. a_list,0  E]))
8 1rel ð  = [pardir] * (K = f)-i) +B E[i:]B tif not I :  š �return cuZ   djoin(*9 ) ôexcept (TypeError, Attribut ó
BytesWarning, Deprecation )ƒ qgeneric+ð_check_arg_types('rel ',\‡ ¼ ¢aise


# RÆ Âthe longest hP sub-D @ of  €sequence   ñs given as input.
# TheKQs are<€normalizãPefore_ `paringV pm (this	ðthe
# responsibilityl  | ðcaller). Any trail@ �separator? Ðstripped from[ M  £eQ@
def  FAath(Æ SB"""GÏ  é ‚ names, Ûs\ ,B."""�;c µrxR Valuò"('m ' `() argË …an emptyŠ 'Ö ' ðs = tuple(map(os.fs é"s)äÒif isinstanceè `[0], b`ò  ¡sep = b'/'¢  Ð . FelseÃ 3 2 2'.'ý 7try1 Pplit_¤  » [	  .s ‘(sep) for31 in "s]D  Œ 	H   ðisabs, = set(p[:1] = pG D  2 us™   ‘ñ"Can't mix absolute“srelativß"")gFNone¯ Ö ê ![c– c– as if cJ Cc !=6]!  @ < €—s1 = min( Û  s2 /ax Y +1Ü l1i, ’ Çenumerate(s1 « Š!= s2[i]0  Z 6[:i®     Vbreak± ‰  epÄ Uv sep[:0B b 2 +  .Js û ÒGÎ %V  ‘@', * sc  Æ °
#  Author: 0  F¬ÀL. Drake, Jrö   fd  @acm.org
#D Täða simple little module I wrote to mak ðfe easier.  I didn'tI  se�0yth @quit- Pke itf +ñlibrary, though I may have overlookedK 1omeH c �  ¨ @when“ `as tryi ò
to read some heavily nestJ �°s with fair ¡on-descrip6Ðcontent.  ThiðNs is modeled very much
#  after Lisp/Scheme - style pretty-printing of lists.  If you find itG ù0useful, thank small children who sleep at night.

"""Support tom  g ð, tuples, & dictionaries recursively.

VÍ Äsimple, but Š ò$especially in debugging data structures.

Classes
- 1

Pú Pù ßer()
    Hand@peraœ qs onto [ `eam usm Áa configuredG 0setIaformatW�parameter‹ 1Funê � R--

p. ‰ F; ò a Python object i~ µÁed represent¤ A.

pÏK è âQ Í €[defaultFðsys.stdout].

safee R 0Genáe a 'standard'† Ã()-like valuª@prot» vagainstÙ*¨q"""

im3Rcolle+W as _ # $re
 1sys% 4sys Btype 
 “
from io _ �StringIO7  â

__all__ = ["J3","ŸÓ","isreadable ©4","(!",Ý  RB   "‚jò ", "pp"]


def a (à,³óeam=None, indent=1, width=80, depth  *g ðcompact=False, sort_S�s=True):“ #""Ž ( ¢ Û eYer = á (i  ! 0strÍ  Ï Ö Ô Ú × Ý Õ Ò  	Ô ß º� .P)d[e‚ X  Y´)TkreturnQ°  9 }	 Ã  J.æ�?p y, *args> n@**kw gî 	­^ æ%, c Õlœ y PVersi3f“Â which can hà](š ˆ_f _û=B{}, Ÿ10, Z2[0]“ • Dü€mine if U T )qT¿ by eval().Œ À None, 0, Trò&ue)[1]

def isrecursive(object):
    """Determine if  Å requires a 9 ñ representation."""C Ðreturn _safe_$ b ð, {}, None, 0, Tr‘ “2]

class0 5key‰ °Helper funca … for key ós when sorting unorderable· 1s.
’ ÃThe wrapped-Ñ ðwill fallback to a Py2.x style comparisonv E _ ttypes (z Tfirst4 png the # � name and An byI   ö	obj ids).  Does not work^ñly, so dict.items() must haveH a pappliedÇ @bothn )z c value ¦? ò_slots__ = ['obj'].  à__init__(self,O  $  .Â = 5 l3 Gther5 #trÙ B   'M 0< o3  Y    $ òexcept TypeError    B `((str(p®  A g)), id E < \V  <  < ~ =  )5qetuple(0¥>Qng 2-/ s ¦key(t[0]),ûd(t[1])ÃPrettyPrinteû œ òindent=1, width=80, depth=kcstream .*,® €ct=Falseu0rt_w!s=£t±"""Handle pš   p›  {AoperAs onMv 0 us …a set of| ðconfigured paramr­ šÔ /   ðNumber of spacesí'  ¢° each level# 0nesó ? 	Q õAttempted maximum nc ¡columns inLgoutputN `	N  cH      P out ‘ Èed structureí +N @desi!}  ; Ðeam.  If omit¹ 0(orÄAse),¨ ‰standardL 	@ a avail#a²n’ Aion wbe usedë 	S `If tru,qeveral ¡B €combined?tone lin~ ‹ 6aU  | ¿Qs areÞ	‘  Á G   b= int( )U ó    2if . F < 0á S praise V2s#('* }‰be >= 0'K ðiÆ uó /<=a * ` _  Û© å %ðbe != 0')
        seÁlf._depth =  #
   se òindent_per_level =  ( 1widD   õif stream is not None:  j g & =/ " ?els0 µ_sys.stdout5 S ó compact = bool( )& Ösort_dicts =  
' °def pprint(T –, object)Â   ’._format( ",  Ó 1, 0 ]{}, 0} Ç.write("\n")x U  M y ü io = _StringIO([ > “ !io‡ ;0, Š ÷return sio.getvalue(‡ ¿isrecursiveB  0w l  ù 6[2]Û  T _adablS Rs, re#  
 �  ¢e 	´ T’ C A and~Ë Œ ¼g,†,ëñ, allowance, context, Pobjidd	“ if:Tid in@ C ± ,	_§ $onI J -  % •ve = Trueý # Cz = Fals# $6 4rep_S_repr{ ð 1 Amax_í7  -5& -65 åif len(rep) > C 
‰ €dispatchšS(type– 1)._¥ 1__,R
 Oif pp Ä[³U] = 1¢     pîJ + 1�  O 4delúv r ‘ 6 °elif isinst}þ  , °z +   ×  ç"._Ô÷T ƒóª  l 
 z 5“  4·_R = {}  ª	×  é 7¾V– Ý¥ F('{'ë ìš 3:> 1â> b-._/ —- 1) * ' ] Aleng` ?Õ	z   
f ‘ ×! À            ñitems = sorted(object. ÷(), key=_safe_tuple)
  Yelse:   < : = K 	' ñself._format_dict_5 ( ù, stream, indent, allowance + 1,J  q  æcontext, level· ±write('}')
H  _dispatch[‡ ò.__repr__] = _pprin  - 5def qordered¾ (Ð ,ñ ¿ +, — =£if not lenƒ)  à .¿  ¤ ' Û  ' areturnÚ    clÛ‰•__class__ 	U öcls.__name__ + '('[  à °S(list~ ()õ \    É! +à i )Òá;i 	Å .')Ùâ_collections.O·ODictí×õû  í+
³ [i¾a :]: ï &  "0
ˆñendchar = ',)' ifQ"p) == 1 ”F ')' la½S Šo )s
^J 5u3c / w?setb0nC6typ÷n0if " ois setÞ''{ C= ö}Ø éF :typÏV 	/ q ¯=_J °[y=5?keyFÝŠ?Àhar)

    _dôispatch[set.__repr__] = _pprint_set
    _d* ofrozen0 	1 6defE ñ-tr(self, object, stream, indent, allowance, context, level):N  ƒ swrite =< .  ²if not len(d 9 = (à   )<    ereturn µchunks = [] @line ` a.split V(TrueO "if» V == 1¿  f ï U += 1W   ÿ 
 Õmax_width1 =   Belf. # -EQ pfor i, › à in enumerate( sarep =   Æ  — @if iÆ  V  Ls) -Ó  ( › F1 -=Ì’  $ n‚7) <Î " + }q.append2 	J JelseW 5 ð# A list of alternating (non-spa[ )AIingsU  C @partáòre.findall(r'\S*\s*'P
 4 qassert ; Q   ™! 6[-1O >    ò	.pop()  # drop empty lasZ Y q2' Ícurrent = ''  '!j,º 
'‘ ' ©   qcandidaˆ^ +D `  / Dif jAW  AO andY D   ð a (   i%r(¯ F)) >B2? :   3if Ø $  ( ¤#r(8 )% 1   " / =2Ý =   A Ú xÂ º E, )Ã¨~œGG ?velA 6'('/ ’ i,�
‘† 
‘œ:> 0  %› ²'\n' + ' '*vh % 6rep ­ A)')
p?str8"tr+ _bytes
P °¦l4$Ðwrite(repr(ob‡ject))
  ereturn õparens = level == 1 2if  :  I ˆindent ++   žallowance –write('('Œ ¥delim = ''] ðfor rep in _wrap_bytes_repr(obÌ ò, self._width - ‹ %, { )« x k z  ¬  :rep qif not 1 
J  5   ³ ¢\n' + ' '*� Â 2n Q')')
+ ¡_dispatch[â !._ä Ò__] = _pprintü / 9def `array(
%, ntream,¢, context,ã"— A = s< .    í   ('¡ p ¼ { .© (( s¦#),S � e + 10,[  _  Á + ³   ¨™ M¬ Q U¿mappingproxX1P)('] Ecformat9o.copy(?3å Nìs
“ < ‚_types.M
P
OTypeJÒ Mÿ simplenamespace¨00if ž %S) is ¯ Sl Nl 
³k# The #  arB "¢ õ" instead of the class; ª # . ¡, so we do' ñsame here. For sub9 qes; use#  < .P @cls_R  M  *	JelseÌ 1 ò1.__] A__._K %__b • †Dlen(; )7$ Ì nl� ,Ï# *@' @itemu qdict__. (•Plast_x xK!n(! R) - 1" F	…—  I Ði, (key, ent)“enumerateX 
	X 6key— v $'=„     º @ = iû  Æ  # ïª?entß  i z  d› J ç0if n  ë/ 13 Ò O ¯ I À        streóam.write(delimnl)
  Estre Q')')
 ñ'_dispatch[_types.SimpleNamespace.__repr__] = _pprint_s$ n$ J ñdef _format_dict_items(self,  ", … ñ, indent, allowance, context,– ´  ulevel):# ë # =W ú  d @ += ƒ "._ Q_per_H ) +ó = ',\n' + ' ' *¥ ' AlastE �x = len(Ô U) - 1$ ófor i, (key, ent) in enumerate2 À  à  W € = i ==  c R  # 0repå Aelf.�_ 1 Î é 2 O(rep J': ' !¼(™
©! +ñ  P O + 2¤Ñ1 ifÏ  else 13 È 	aif notI 
6å ¾Ï… €Oo L €AŸUe/if‡F > 1m Ø ¹ ¶ o0) *£ÄÂ'  % 'À Äwidth = max_  -' +æ it±3terÑN :tryË pnext_en0   6(itµ Ðexcept StopIt :ion> ereturn^  … = False _while%y  „ 3  dª    £  * 0 =  	®    ²  & § 6Tru¦     g&-=ý	š  ' |# Lzcompact6 A 2Õj	 6 wÙè˜ 2if › >< wu C PD  & 1if ŒD  "  " =' -nlF Š />=‹ M-= w>  b ×'”   ƒ 6', 0   B  -a  n+in4 [ 
v  ñ ‘ŸÀt,
           ûallowance if last else 1,
)  ñcontext, level)
* û	def _repr(self, object, - :-  L  ,  , readable
  cursive = C ‹.format(I .copy()Ÿ  ]   T e_depthº ' eif not� ¥  ! 9 © … = FalseÈ Sif re» 9  f = Tru9 preturn Cõ  t D 1maxtsÂ q A"""F1zö  for a specificˆw 0ing UtringË ðand flags indicat& ±whether the¬ ô esentation is ''F 5 Á< 6s a2 ˜ ustruct.A 5""" r%R_safe_O Y,?¸_sort_dicts£Òpprint_defaul  ²pstream,Uent, "t †)~A3len° DT p.write(ò' )ê  ' î  4rdfü .½ }factory˜ A Scls =¥.__class__  indent += ¹ õcls.__name__) + 1( ¾ ø'%s(%s,\n%s' % (7 Ã, rdf, ' ' *@)â  Õ$._�&icÜa s  ‡ ß 7 ˜ #)'èð_dispatch[_collec­s6 !._Pe__] = ’ ‘ lcounteÞ‚ ¹  µ ,Më© +³v + '({'¦#if@Q_per_ïF > 1Æ  ¯	U F-._6 `- 1) *d 7temšÆmost_common(% /È _i7 ( ", } ‘ / +äßO + 2O Ð$}�CO‰k„ �hain_mapl rÓ †Àxt, level):
  ó
if not len(object.maps):
   óstream.write(repr, )))' ereturn ccls = V •__class__ 	U öcls.__name__ + '('[ ‘indent +=¦ * U) + 1Q ófor i, m in enumerateª Ö bif i =V ¦ ü J - 1  òself._format(m, ¿ ", ž °, allowance” ö, context, levelÍ  K   ? S'')ï   Oelseƒ 1w @,\n'nC ' *É !)
Pð_dispatch[_collections.ChainMap.__ð __] = _pprint_c B_mapC 5def `deque(C,AÆ 
®©¢
ü[ü#ifë.maxlen is Non H‹c_itemsæUQ + 2,Û ` µ	
µ ]²®¢ – +brml = o  ’	?J	Ò R,\n%sw§=%s)' % ('o, rml) è Ÿuser_dict0¢ÑOdata! ûâ �UserDictå Î é ?lisé š?Lisé  Î é ostringÔ}À _dispatch[_ñ"collections.UserString.__repr__] = _pprint_user_s  ñ

# Return triple (0  Â, isreadable ñcursive).

def _safeb ñ(object, context, maxlevels,  ð	, sort_dicts):
    typ = e? )  if ò in _builtin_scalars7  ; rµ  ­ < á, True, False
J ôr = getattr(typ, "u", Noneq ¢issubclass)  § °) and r is  L† rif not ü  ¡ J"{}"™     ¤objid = idÁ ³   &if>„ A6 >= m 0...p ,˜  idH•a  $in±Q 1_reò$on¤ _Ó P ` [U  k1 @! =Ÿ Z Cve =² ú   õ components = []2 Pappen2! . # (6+= € 'ifx
å @itemd  ˜e†. ‚(), key=áCtupl+ ¡ OelseJ 	C — €for k, v‹_ 
> kÆ4, k+  cu½€    /(k\w  ¬ v< 6, v\ vÔ ½v\ "}Ó("%s: %s" % (Ë v )] †   ‚ 5 =   `÷ ê© 	Æ  if  orÌ :curCa R 
B 4delæ¢ GP"{%s}Á ¦", ".join(e%),±  
 e aLif (;Glist;  ;d) or \ ; i	w = ô ?if w "  Ÿ  ý /[]£ % ô format = "[%s]"» … elif leZ == 1 ; X(%s,)< AI … ª /()ª 7(%sn •i;Ú u% "..."j T--ifŒ
+á pÀ[objid] = 1
  óreadable = True
 � recursiv FFals õ components = []2 –append = ! . # ¥level += 1 õfor o in object:  ‰ „orepr, o¥  Àcur = _safe_  ñ(o, context, maxe 1s,  Ù, sort_dicts)\ › (c 
 fif notv 
”  ˜ � : =    if; ?cur8 U	n4delÄ f[objidWöreturn format % ", ".join(h4), “  
 e 
ð brep = )cí W `rep, ($ 1and÷ órep.startswith('<')),ç ð
_builtin_scalaròfrozenset({str, bytes ðarray, int, float©amplex,›  . ó
bool, type(None)})

def _—2on(0)eÎ B("<R¸�on on %s Å ‰ id=%s>"u 1% (` H Ô.__name__, id] 3))
x “perfcheck =— } ¢import tim% j@ is ( '  ê m  8ð("string", (1, 2), [3, 4], {5: 6, 7: 8})] * 10 ¾  ÌâPrettyPrinter(ÏAt1 =‚ .ª G_cou ,™ Q, {},› A, 0,ùG 2G 2p.p†3 33 	 ¥ &("� ²:", t2 - t1? p" Z  3 2òQwrap_UîÂ ówidth, allowance
Ñcurrent = b''30las %le4‘ // 4 * 4   ‚i‚prange(0:+ 3, 4Y  ¿0parK Æv[i: i+4ª€candidat3‡  + 4 h  A €if i == ”   Ï 6 -=Ñ 5  ½ Ãd Q)) > 5 
H 3if | 
  d Ryield$ „     * =µ JelseM ) � ® } u D
if p ¢"__main__"h _Åoð)
#! /usr/bin/env python3
#
# Class£ profiling  ñ code. rev 1.0  6/2/945 ðWritten by James Roskind
# Based:SpriorU €e module1 ð0Sjoerd Mullender...
#   which was hacked somewhat by: Guido vank �sum

"""¼ PÜ ¼ @"""
ã ðopyright Disney EÚ@prisg°Inc.  All R$  s Reserved— 0Licšðd to PSF under a Contô ributor Agreement
#
# Licensed under the Apache ð , Version 2.0 (! "5 ñ*");
# you may not use this file except in compliance withg E S.
# YC øobtain a copy of( " a± Áhttp://www.a© b.org/lÇ Ñs/LICENSE-2.0à ðUnless required by applicable law or a@d to¬ ñ	writing, software
# dist@	)Â 9 is! ð4on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND0 °either exprÂ @or iEped.  Seh¤2 fo»ðspecific languag¼ ðgoverning permisÌ÷s and limitationsÿÖ ä.


import sys Dtime ðmarshal

__all__ = ["run",  0ctx
 0ProÐ"]

# Sample F rµ  1 ñ
#i_count = 0
#def integer_- b():
#  sglobal 1   $ = E + 1 dreturn 0
#iW s- g „ # repla¨sC coded± D  Jœ ðs

class _Utils:
¡ a"""Sup9  �Âutility funcqÒwhich are shaš? p01.py¤c@  �modules.( PNot sh  ½Pto be~¢d directly& A"""
/  Ró __init__(self, j "r)¸  ¼   . % =# D 3run? AstatH,î@name4'rtP  K 9 = W !()‘  o 6try|    0 .c ] - N«SystemExit; 5assY kfinall] † `_show(h · 	å >ctxè z�s, localsB ’  a ù !w ü +, q b2 =3ö %if  FNoneäPdump_B s( =Ý /ls4 Sprint5 ¯sort)


#* 6Ð
# The followå œ ï § —ic memberÂ Ø    ìQiler ï`
# NotŸ atAinstù3of Ì ()‘*not* neea`o callñ/m.Ö 7À**

def run(õ statement, filename=None, sort=-1):
    """Run /   under pro7 õr optionally saving results inZ 
K �This func2 ð takes a single argu� ñ that can be passed to theD f"exec"� …, and anˆ t  Ï ñ.  In all cases thisD ðroutine attempts` X –its first�  ` Egathõ 1ingG  °istics from£  ž uß v. If noŽ � is presrFthen� ‘automaticORprint"CmplesbBportªPed by| ” Qndard@ str/ (ªd/line/k -!)l™ Qed inH Peach 2 . 1""" ò return _Utils(P`).run(P¡ €)

def røx' Áglobals, loc  §  ˜ ˆ!€, supplyð “your own b #e Ç ´.µØ F £ P havev± same seman
aæ n =/ctQs
class �© !r  Á pelf.cur�PalwayS�tuple.  EèQsuch  ± correspondai!ckÇ  frê žóis currently active (sh ð[-2]).  The follow”!ar/J `defini&Ps of tð members.  We us, òis external "parallel� A" toJ ðavoid contaminatj !th+0gra“@at w] Ãfiling. (oldO!erI ug‚write inr ô s¡1 di¹âary!!) DerivedkeY ¶PchangÀ &e è  ç ð some entries, aV  ng ’they leavâP[-2:]ƒ Qact (‚ {‚previousª b!InÚ þ#in*@erroëÖ ‘detected,ªQ-3 el£ ò ae” ~7 [ 0] = TimÍ bat nee…be charg™0 pa.'ã< EU   Itv sÏFat ay  ò“ will not]qo acces£ Ï J 0timè�data forÜ ‚ w 1[ 1À `otal tÆ Pspent– 	­ €, exclud[ / 
u 4sub<1s (B l@ la talli= [ ± ?[ 2„ P { F ngÜ J † bŠ 31])ð-3] = Name of theò, function that corresponds to this frame.
    [-2] = Actual 8 'we;  : P(used	 ¡sync excepf ”handling)Q 1Q ûOur parent 6-tuple (‹ † ‘f_back).
� öTiming data for eachÑ óis stored as a 5Y ië Ae di÷ 1aryK aself.tP ôs[].  The index is always the nameX 1in 8 rcur[-3]Ó  9 `followœ 1are7 `definiAs of ‚members:Ì  [0	 =  nu & 0imev  …§àwas called, no²0untj adirectÍ  «@  orÁ  ± recursion,! [vNi 
�appears  ó �ack, minu eH €Total tipÄ`intern C¾ 5 3ê ¢Cumulative: p-  ë @presS † Q.  InK é Cnon-á %ve "s,¿iB1e t¥ Pexecu†u ˜from star80to ¬ shƒSainvoca7 Eof ac €, includ	ÿ � tall subgs% [4A†¬ e /ngÌ  v Ð +e j !it2S by um 2"""d°bias = 0  #D2ibrÕ ‚constant& `def __®0__(à,-€r=None, E  %):}  & >Z = {} `cur = ?  {md = "" _-_ó   !if~  ’ M €   ˜ " =‘  6 �   " =?  . À# Materializéa local�Ãlookup speedn 7 !ifu ír f  … @get_ ! =@�.process �  U ; �dispatche+ dtrace_ %_i4 Oelse}  t r-  a t“  Ñ() # test out› rÒ
7 *ryg  L ù length = len(t)1 ç› TypeErro" > Ù 
¬ & ù  4    if¨ ± >= 2Î  $ ” n 	è  6 p   P -_lR 0# ToÂ() implement§2nee—1be P/edE   hespo captu  he passed-ûð imer in the par‹ameter
  ÿ%# list (for performance).  Note that we can't assumeE  ÿthe timer() result contains two values in all@  mcases. €def get_[   r( !r= ½, sum=sum)::  ç `return% 6 =())( Tself.c + =n / ' At = 	 0 (P  ñsimulate_call('profiler')
I ð# Heavily optimized dispatch routine ‰ Þ �.process÷ "()^H  dtrace_> ( ÷, frame, event, arg T rÁ  ”  ( Ø  Ð  Â[0] + t[1] -ú t	 BbiasŽ  B "ifu a == "cÿ "” ¡ à.c_func_name =  !._ )__K , Û [Î ]â tØ   ­ ~Õ   I  Ê ! Jelse¤  	G rG rðt # put back unrecordÓBeltaÑ ?# DàBbestÑ£ program (­à= scalar, fast( !if³ ð# an integer but flo›ñ orks too -- andW <‘relies onÏ").� G)_igÔI#(1s 27+ _ - t û&¢macintosh ” øs¸  tticks oõÓ1/60th secondH¹ ?mac»6_/60.0Àœ´ ( ±Å0 ÊÏSLOW generic²rÌ1ingU Æs number+¹ l·o¾ ð  ã &()»À- self.bias
#
  õif event == "c_call":  % ñ	self.c_func_name = arg._ 5__
- 1if , ‘dispatch[Y  ]( ¿, frame, t)^  åt = get_time()Q Oelse. ò - t # put back unrecorded delta  ƒ# In theí ‘handlers, ófirst 3 elements oÊ ñcur are unpackedš ð
# into vrbls w/ 3-letter ñs.  The last two charactersJ ³meant to beM ‚mnemonicé #rR _pt L°cur[0] "par¥ !@"    F a 0ged % j^  O (_iN Á1] "internalH " 0 spa ¢directly i/ öHtionO eO o2] "exO din subE sŒ¤def trace_*`_exceph -prpt, ri e Qfn, rë 0, r©=2­  ú Bif ($ r is not†Q) and5 u +   breturnG ¡  M  Æd  Þ.€ £ +  ¥ 6 P ? 1
 Šl y  Í 	1.f_ì š K[-2]é L  !!ifE¥isinstanceÑProfile.fake_� è ? cassert¶­ 0  €, ("Bad ÿ "â%n,5 D  ú D  {` N %¥ ,AL ª– s;06 îKÏis None or \° ‘ Š  ß|  0J-2])GD ¸  T &3]¸ @fcod‚   c afn = (# @.co_ ',  —rstlineno  % c y  L At, 0  ót ,¤6cur2 ƒtimings  — Qif fnÖ( 
Pcc, n@t, c  al  = W E[fn]L  .`   2 = @ p + 1, t@   D 6 Î
D ä  %{}7 * w < µ >  ¡á ’à"", 0, self.c_Ãfunc_name)
  ñself.cur = (t, 0 ´fn, frame,   2 ’timings =  Q “if fn in  :  r Ðcc, ns, tt, c PallerM / I[fn]2  2 = @ -+1B 4 Jelset 
B â  %{}7 ‘return 1
 òdef trace_dispatch_! (&t)j  ø  3r is notvcur[-2]&  basserta .  S  ƒ * ò .f_back, ("Bad u "‡F[-3]‹ N > ¬ Y B, 0)Ü  5 ñ# Prefix "r" means part of the R°ing or exit .
C pC €PreviousB `Parent
 Rolderú .Ž prpt, ri e r›å 5cur~ Prit =4 E + t £ e_total 6retj pj pj pj pj p6 2, pk  r Q x 4 = ; 1 + ° Rpet +Ë r -, O y „5×Õ$ =F([r!ifc*nsY`# ThisS Åô only occurrenceÜ qtion onìVstack×ÛcElse tM �a (directP Dr in õ) recursive call, and<J °its cumulat' ò
time will get updated whe� qtopmostN = toL s° cc�	< !cc<$ +á �  if² « ½ +erN P[pfn]> ª ù	+ 1  # hack: gather moreu ñ # stats such asn@amoufÙûe added to ct courtesyD “±is specificjQ �contribuÓ I c@ W  !is@ @/ø  1ÅŒ Ì1 - Ž  YÖÿÈ }ž UA = {  ^ "y ,":x  ,% Pexcepí *  / y ,  )  c_i )  	) h . W   ƒ%C n e#"cSF õ "}
J à¥e next few\ ³s play withvð	md. By carefully preloadó:ing
    # our parallel stack, we can force the profiled result to includeF ñan arbitrary string as< qname of @call “function.? ò We use self.cmd; #atJ Q, and@   B £stats lookC ñ very nice :-).
 Àdef set_cmd(\ q, cmd):  þ i  s áur[-1]: returnpalready@ 0  D   =I 
 �simulate_ä (h „ ö class fake_code}  � ƒ__init__ž  d /€, line,  ¯  ³ ƒ $o_+ 4 =  � (  I ! =P    c ! =j   PfirstE bno = 0Ô  a ¿ Crepr¿ © K ! (ß &.c¶ ,ë o_[   Ž "))e 9Ofram: [{, priorˆ 1f|0 = ( è ‚f_back =A   à 
Ô J ” Q " =Ï å#('1C', 03 v u Rpç M c”%2]7 7els	0 ENone( 	E ’  (© ", d ).  Ô °.dispatch['¼!']¯!, 8 3, 0�€# collec– |“from pend� 9i  @gett Qfinalo �# timingsX1 ëf °H±md_complete’ Ù„get_time- i  Dt =  B() -p t  Dwhilp i*1]ŒÐ# We *can* ca›Passer³õ  errors here ifR  v $# Ks_trace_Rcheckø aW  mq!> Œ< Ž 6, tÃ y  ï 0M +   	&t
Ùaprint_D[—, sort=-1d�import p& \   .S;  ).ï�p_dirs().H Y uort). \<  ª  € _ pDdump= Aelf,Û“  with open(ôp, 'wb')-f¾0cre�¿ (/€marshal.p Å .& 7, f� 	@  R ‰   .ªj % dnapshom` s  . b  fU = {}D@for >ð, (cc, ns, tt, c  Äcrs) inïpð.items():
          ´  callers =
 —.copy()
  inc = 0 1for2 acnt in Ùers.values():-  K Bnc +e 9cnt ðself.stats[func]Œ Àc, nc, tt, c ¦ !

9 ò# The following two methods can be� ód by clients to use@  a profiler  0 a † ñ ement, given as Rring.} €def run(¶ W, cmdì ñ import __main__m  ü edict = 0.__ ! preturn T Ð.runctx(cmd, '  )~  !  - � ÷, globals, locals’  % €.set_cmdS Ø0sys ü Ï ¶.dispatcher( :tryÍ@execK w ð kfinall8 q FNonef é  ä#is× 
 0oreÂ;ful´`ingle ;2tio‹.‹ « ãà ,% ÿ, /, *args, **kw.Prepr(V )§ Ä ^5à  O (| ¨  #3 * .|  hLð	calculates the overhead ð usn< . ‰G pproblem«Àthat it take@ðfair amount of timr ra €rF qto stop  	 w�a (from < �it receiv^ ‚n event)óÀ# Similarly,1  re‘ Ša delay G §  å „ pre-star4!he� † 0bef„ 2 àuser's code reì0 ge1 oÈ ‚continue#¬3 0tri` ¶Pasureª ã difference onG aa per-á c basisæ  0Not< xat thisB ðis only significa§fh @re a 0 loŽJ c ñs, and relatively littlwrí 2perpó .  For example,G Þ ¡with smallp •°s will typiŽ’y benefit’0havY$thŸ‘ Çbibrate� {ñcurrent platformbÄis *could* bE 0donJ ô p fly duÆq init()…A, bu©Àis not worth0 Î Ðeffort.  Also" mñ if too large a ô¡ specifiedxÁ -uq ` on soþ ä3ionAactuEaappearv„ 1neg�À number.  ItÓ�*normal*™T (‚CveryE 0lowKðl counts) to have ò8such negative stats, even if the
    # calibration figure is "correct."'  ² One alternV ù to profile-timeM óadjustments (i.e.,E �adding in† ð magic little delta dur! Aeach±  t)“ ƒto trackF 0morp qrefullyK ’number of6 Ás (and cumul¯ 7ly,( H . w €sub funcðs) that are seen.  I=dis werCAdoneZ Ò ðarithmetic could be # a after‚ Cfact3 atŠ €display J°).  Current¶ "weü P onlyfƒl/returnê .C ñThese values can{ ðeduced by examin\ th=allees %callersG Ávectors for †ò.  Hence we *can* almost c0 Þ E !in(lÐ [‚at print R(notebDwe cð  .'ô` excep’ñ  v@cessË `counts1°Unfortunate5&th£'is_ Àno similar i3 mþ'or-T sub-ø Ó  š 1t wÙ0notbñhard to "get all this[ !" ñ "rE  Specifical¬ #weS @haveL `extendOp tuples CkeepF ö  ìm ©Qrame,ÓWthen G Adefs0 SimingG \ `includŽae signœ  ©#wo½ôs. I'm a bit fearfulG  %‰  Ý ¨ al# tO‘will slowÎ óheavily optimizedC  š t/b Ž ªdr$1runP ãer, fur a veryH  h "t added"ˆ ".)" * *
E 0def†9 e(self, m,‡ �bose=0):'  b0if    .__class__Ì 9P9*  . ñraise TypeError("Sub8 ôes must override .¹be().")˜  C Âsaved_bias ={   � �   E = 0 ;try‰ _. _k v_inner(ë T w 0finË
F ? m ˜ ¬  DZ  1 KIAget_Ö  N  ƒ Ð# Set up a te”!asL0be 3Awith 	  ouŠ ™0ingÔÿQ# lot0 ¢�s, becausù 'rŽy|ñto quantify stopwatch¤Bhead–š 0Do õà anŒÒs;Houghd 0 wa|go know• Ðexactly how mG Ðs are generatóed (one call event, +
   #  dreturn ñper Python-level; 5).
5 ¥def f1(n):  O ífor i in range  # [x = 1I Ÿ(m, f1=f1O m  O vf1(100)Q @f(m) À# warm up thû 6che% ñ# elapsed_noprofile <- time A âtakes without # Eing.î �t0 = get_4 %()  >  /t1% } •= t1 - t0< ªif verbosecsprint("C ³ ¨ N =",ã &Ü ÿ ü õ  The difference« F# is( ñ overhead, only some of which�s ·r subtractsK  p¦on its ownqRp = P«o‡ p.runctx('‘ñ', globals(), loc
 µ¨±  ¦/'£a 	¡�reportedb žÚ"CPU seconds"Iöcharged to f and f1:`total_ýfs = 0.d
c 
  Ë(ðname, line, func ð), (cc, ns, tt, c pallers)ÿ\Ñ ‹  ûp.timings.items(Ë%if\  @ «("f", "f1"(  K Ð ]+= ccm 
Ø V+= ttüY'f'¯4er S Z ›G � Ÿ¤ ! #8s4  †2 7if  š != m + 1òðraise ValueError("internal e :D l b %d" % p "#É ¼ . -&% =Â
egwasn'tK @ablesñ
measure.  Divide by twice@ `numberƒB(sin rCvare twor© s ‹ 9   this test)w 1geta ghidden˜ �< G ‰mean = (Ã˜) / 2.0 /Je Ef –stopwatchP Í ìk . Š  O

#* $À************* ñ

def main():
    import os Ôfrom optparse pOptionP !r
' ðusage = "profile.py [-o output_ ð _path] [-s sort
 ðm module | script( Á] [arg] ..."\ { Hr = w (r = )' ù.allow_interspersed_args = False+ Add_oË Á('-o', '--ou… “', dest=" !",9   óhelp="Save stats to <'  >"8 ªfault=Noneš o mb mP", acVÍ="store_truev P^£ a libraryA.x ç y sè  ƒƒ   l Sðrder when printingð ñstdout, based on p!.SWclassP "de2-1).òif not sys.argv[1:]| `ï.o _à(Î    3 cexit(2K (Á0s, æD) = @  žû?  ; n A:] =. � S# The€Â that we're Ê ñ ðmay chdir, so capture the absolute Ü"#  ú Ò0 at+Qrtup.%  ifSSions.91 is 5Ü % P= os.k @.abs þ " rif len(6> 0R z x  _üQrunpyª     1codßBrun_9  (modname,   
 @='__IB__')º :   @glob‚{T   '= Q  ':J 6py. u ,   'v !':Â9[0]S } JelseÜ @prog§ ý;   S¥.insert(0,m0dir9 (B )� ” •with open! Ú, 'rb') as fp†  1 Mðcompile(fp.read(),t¤ Š, 'exec'i G_c6_':D  t   0'__È _& ¬e ‘__package+  ”% ocached$ ‹:tryprunctx(!, Õ !, e ,  ¢ðexcept BrokenPipeErroro:excl Á# Prevent "E6 ðion ignored" durá.ò preter shutdownª 7   õ! =¬ 	]  –’exc.errno¬ 
…™ H	Ùcreturn¹P

# WppinvokedÖ  VØRram,  €¤ erƒaÄD
if éF == êÀ:
    main()ñP
"""Class for printing reports on profiled python code."""

# Written by James Roskind
# Based @ iZ F p module1 ðdSjoerd Mullender...
#   which was hacked somewhat by: Guido van Rossum

# Copyright Disney Enterprises, Inc.  All R$  s Reservedo PLicen© €to PSF uŠ õ a Contributor Agreement
#
# 2 + ¤the Apache ð , Version 2.0 (! "5 ð");
# you may not use this c� except ieàmpliance with F E  · YC øobtain a copy of( " a± Áhttp://www.a© b.org/lù Ñs/LICENSE-2.0à ð Unless requiredªðapplicable law or a@d to¬ 0wri4ò, software
# dis@#edTÂ 9 is! ðon an "AS IS" BASIS,]ðITHOUT WARRANTIES OR CONDITIONS OF ANY KIND0 °either exprÂ @or iEped.  Seh¤í ’ ðspecific languag¼ `govern`permisÌþs and limitationsÖ `.


im7D sys o
 Dtime tmarshal Ðre

from enum¶ ‚ort Enum ”functools ¢cmp_to_key! PdatacÅe#  " 0typÑ   ðDict

__all__ = ["Stats", "SortKey Fw BionP  '  1]

u  4 Q(str,· ò):
    CALLS = 'calls', 'n
  ‘UMULATIVE# �umulative( 0cum/') qFILENAM'  '1nam% mK$ 1LIN  Bline 2 . H 0NFLj 2nfl" P  p— 4STD; 6std> "TI‚ ˜ a, 'tot 
\ ó	def __new__(cls, *values
  1 =  As[0]9   ©obj = str.C ) )& !._  ³	   ¼oþ!  –! Rs[1:]� i   3clsG ×2member_map_[> u] = obj] Aobj.+S Ã ! areturn4 5

@zó(unsafe_hash=True)0Y  Q: intY `b: floa 0per©_  1.    F_Û:vo  90_nu„ É Æ 6'''N1keevPtrackžpan itemŸÂinventory.''�ˆtotal_ttÄ  ú_�0s: ¸[fC‹ È‹ @"""TZ¤ isldùÀcreating repñ>orts from data generated by the
    Profile class.  It is a "friend" of that ! ‘, and imp[ V aeitherL úby direct access to members ofk @, orˆ ñreading in a dictionaryP tx €was emit¸ Ò(via marshal)Ú :theY !.
< æThe big change, „previous5 ¡r (in term¤ rraw fun‡ Qlity)N "isðan "add()" method has been providedõ ³combine Sta‚F ðseveral distinct4 }0run|@Both™Á constructorq å w G z ñnow take arbitrarily many T ónames as arguments1Alle SprintÇ &s N n2 ô Òindicates howa QlinesŒ 1to H  :fW 2argBPfloatÛ poi  nu	P betw/0Ù @1.0,6 nM i| Ô n¹ ð decimal percentageH‘vailable Œ  u"be‹ !edM ò (e.g., .1 means @ 10%C Zall aC )Ã „ ±an integer,M  š Õ an·  Õ #of‡ "ofkº€you wish� 2havp.#edŒ ¦`sort_s*#()�Ž0proEÁes some addi@l op	 ¢s (i.e., i>!  o  #Áold -1, 0, 1n2Ðñare respectivelyê @rpreba×@'stdA�', 'calls	 Rtime'p'cumulaA '9t‹"s # a“ šy)0quoi pstringsÀSortKey enum½ 0selD Ä  �Sorder5ÀFor example ! ='  '¹ )Z  e R.TIMEÔ QNAME)I 2s o×�major key,'
Ernal j  oê  ­ 7min6    Š  C   V±'.  Look atCPtwo tÊsÉ¶ )&Aget_ ôarg_defs(self) for moreâ%�s return 1 P, so •Bcan €P togeÀñ  commands like:t ÂP('foo`goo').; ‘p_dirs().˜ ¾*5).\?  C  ´25).  eRers(5p2"""ÇÁdef __init__ö €, *args,Á –eam=None)°  è  ¡ Seam =$ 
•ys.stdoutœ °if not len(R E  ²  Ç = ^ 1 7els%  > 5[0](  0s =JFs[1:    Ï  t ì  /   âÝ )ü +   ,L ¤   Q.all_:em  ­ Ð  # calc onlyÃ if needed
  û self.files = [] êcn_list = None ptotal_t 0 @callU  _prim_ û max_name_len = : útop_level = set()v @statp +{} °ort_arg_dic­   Qload_= F(argU Etry:J  .+Eget_‰ 7 4 �except E :ionA ùprint("Invalid timing data %s" %n  r 1  (u  @[-1]Á ° else ''), " = fstream“  H araise
_ Gdef ò  3  , ø «  if 1 isõ  J  0 .-7 = J  areturnf   ð elif isinstance]j, str)R ’with open! ª'rb') as f'  R 	} €marshal.Í *(fð » >  #±Q = osÆ  t 
;  * Parg =Ÿ†e.ctime(; P.st_m P) + "- 0" +/÷   ð:  # in case thisS‰not unix0  4 Ipass î  z  ÕF[arg�[phasattrÃ ’, 'createà 'cHarg.  : z i Ô ,  	Œ  
ö O6ot A 
´wð  TypeError("Can Œ ù or construct a %r object from %r"ƒ  ª  %’__class__ÇÎ�E  öº º -ð for func, (cc, 	 Ptt, c pallers)Ñ 6 ?‡s.items(C  £   éQ+= nc‰     # _ += c#  F  tt4 Y+= ttF �if ("jpro's", 0, " !r"«  € :ers˜ M � ÉP.add(ú ? % aif len 0_st&Aring B)) >ùµh # / =T ¤ ‘  ¤ 0, *¼ †fy 
w ù� . Ú ¬ ¿€reversed:ßY ö Atype{Q) !=   > ) - ptem = S}($ t    Ã _0+=    % ê °s+  1 >[  / À   self.totaðl_tt += item.tota '
  ´for func in& ‰p_level:(  3 sself.to  P.add(; ))
* 1if ) âmax_name_len <]  ` #  º  
m j ú fcn_list = None" á e, statç    s.>s()‹ %ifc / '  @old__$ " =ý    s[ ] 1 OelseK E(0,  M{},)L � m W = ad� )s(Ÿ G areturn³ 6�def dumpÍ  s(_ `, fileÊ(ð"""Write the pro# ¡ data to a2 À we know how Õload back."""É  with open(C  f Ê, 'wb') as f'€marshal.¡ › .g3, fƒ!#  ” ðtuple indices and directions �sorting,Š �# along Ž 0somÔ ð intable descrip: ,  9 ð_arg_dict_defaul{{  á q"calls" ±: (((1,-1),  1), ( ‚ count")�  6 "nF E 'pcumtimeŒ E 3Š ¡umulative 0 � c" "J ,ï1"  J ?4,  (   1linÕ  D 5D  (  numberF  RmodulH Š &¡ ·D 6Š   JÒ 0nfl¦ J H ((à  4 p //Ü Õ  p80óQprimiò 1 ‡0stds  œ ˜ 7à �standardà W Þ ²2— �internalˆ4totK � H $}öFget_Û"efý
ó0ExpJÀall abbreviaÍùs that are uniqueâaif notd.a :ictÝ k
  0 = cY = {}\4badð ðfor word, tup inû self.sort_arg_dict_default.items():
  ý fragment = word  dwhile & @  O oif not%  ) ]breakc   %if? @ in ¼ l  - ”bad_list[— _] = 0X / v  g 	E ?tupG i % =§ Y[:-1]- 1forD Á £ Å 1delß [oA oreturnÃ 
d Adef Ú`stats(ê‡, *fieldÕ‰  
z  1 A.fcn8.} n  6rif len(c ò == 1 and isinstance ‡[0], int†  > õ# Be compatible with old profilerh  . e ù = [ {-1: "stdname",&  *  ¯0:  "calls$ 1$ /tiG 	2# Ñcumulative"}[Š V[0]] ›*elJ>= 2^ ú0argùA :1:]"  ¸ ò if type(arg) != 0 +0]@ 0   ñraise TypeError("Can't have mixed arguÁ \ "")/ ; /	Refs =[Iget_ (2 ¥tuple = ()}=6  d U = "" šconnector   á
(ifI ) Ÿ, SortKey	     e.value~ è ¶ ¦ Ã +1p&[0Ø= 3Û 6+= Ñ A õ/ g= ", "€ ªp[w  °func, (cc, 	 Ptt, c pallers)6u D ½	_ ‹.append(O @) + h ) +/ ö 
 (& ±_std_string !),= ) � r  gð(key=cmp_to_key(TvPComp( _’!).)reH  tŒ 'D { 
H; 1 F[-1]½Ü	 KÑreverse_orderNw"if,] 
s ˜ .I -p  YRp_dir»m 1oldÊ¡ ¨  ¥m  d = new #{}# À  max_name_lƒen = 0
  ð for func, (cc, 	 Ptt, c õallers) in oldstats.items():A  H 0newD ! =K À_strip_path( ), aif len A_std- 3ng(C ú)) > max_name_leni  m  / =M 	z BnewcÓ Y = {} 22, $  õ 
 ô  ‹ R [é Ì ù S2)] =P 
o 3if ñ  h 1new]ì  [.  P Cadd_n Iats(X  •  L ,; ù )ÞOelseÇ T 	™ õ	old_top = self.top_level! 
   =W2 &t(� á pV 
¨ 0new9 D.add�
Æ)Ãv ˆ * ú fcn_list = None½ Aall_i,es  areturnû R 0defOc1 (‰ Œ!if- .T 
å R � 	; 
&A) ’ .Î+ ú!ot( ‹o 
ª  Æ ` þ¸2… 2† Š 2‹  ( ¹  '   ‹Œ/#* .H á The followingfðtions support actual print" Pof re sA ˆ .*ª@# Opz ðal "amount" is either a line c 0, o Ñpercentage of "s.K  õQeval_µ _N ú,î , [W, msg
 Î   !1istÝ  vÐif isinstanceE W, str9  % >try�ñ rex = re.compil= _ 7 `except# ^errorC ð msg += "   <Invalid regular expression %r>\n" %Þ ¹  a   7ç à ø 	% ú #[] À      for fuÛnc in list:
  ñif rex.search(func_std_string .))6  E @new_T r.append, ` Jelse8 Àcount = len(8 ),  N úif isinstance(sel, float) and 0.0 <= sel < 1.0Z  @ ^ Bint( */ J+ .5j  . ¼  � Qist[:3 ]’ /el”  $in’ � < ’ 9selX € &if'" !4´ �ðmsg += "   List reduced from %r to 0due
  reÙýction <%r>\n" % (  ¤,ˆ { ,T%)
0 treturn   R, msg ñdef get_stats_profilØfÀ ò """This method N Ts an 
P of SC PB õ, which contains a mapping” 0of Çä Pnamesù P sQ 1FunT {. Each  P ; á holds informa_ prelateda 5thew 3's ñ Å such as howQ Xlong 0 P tookE @run,+ € many ti½ õit was called, etc...L 5"""  ö ’ *Qf.fcn `[:] if»  ¡ m!f.¨v.keys()0aif notÙ J 
æ°	 g(0, {}"ptotal_tùÐ2(f8q  n Á :es = {}Ü Ÿ G* =t K ,© B † 1for  f  �
Í Ðcc, nc, tt, c  qr‡ 3sel [< 
& ×_gÓ, line_numberŠ   ! =z Ê ÿ Î[ `tr(nc)ž‚nc == cc™#(s €+ '/' +  'cc- H 0tot% c  , \+tt$ 0pern _, &-1p 0o ›Ltt/nf <cumf cf , f cÖ f =ct/Ì  [áŽ£nÖ )s,X1, #A` spentøtj f »]alone= -^ à ^  ‘ plus allú o zs that ƒ  Á .edd … l ¦ t „Àer
         g   )
  áfunc_profiles[ �name] =   
5 Äreturn stats9  ñdef get_print_list(self, sel %):F pwidth = `f.max_u E_len" "if 1fcn= <  ¾    D ' 5[:]C  ) ò
msg = "   Ordered by: " +^ õsort_type + '\n'< Oelses Ý .‰ Šs.keys()Zz pRandom 5 Ping o‰ Â was used\n"? ® 0for˜ �ection in ç ‹ ", f  hS.eval}QamounK ,°J 3 )s c* p = len(Í %   fif not@ 
Š 0a C`(msg, ^=¥ fstream*2if ‚ <‚ 2elfT- 10_    0 §+"tav
¢  ' 1if ^  + À_std_string( Q)) > ^ 8  <    0 @ ’ 2 (+2#   _hs*¬ï Õ 0ileÙ   Bs¢ L (  * e} , E  ñ ndent = ' ' * 8Ê  ¦ 5unc¢ Ÿtop_level¦ iG ,T % K åù‰Â o í G Î ätotal_calls, "Q   ¯", end=' 'V  À   dJ # !•Bprim] Ð P"(%d # Ritivet @)" %± f. < ‡ Ü p"in %.3÷UcondsN ž /ttÊ 	C  àÇ”,ƒ2 †7 ò(‡q!if. 
ý x5 ftitle(É P î
=  " A Blineùt  " ^ ÖÊ $ ‰ m é{ /ee})9Acalc q S Ã  œ  (!nt" P_head“€ "¨ _d..."c!iff˜Ðall_callees:
   ñself.print_call_line(width, func, "      @ees[ <])
M ]else:  & B d 
*{}P - a(file== ostream$ areturn¿ 
— Adef Y ê @ers(\ ¦, *amount)½  alist =B R.get_=   (3 X  ã 0if  C    _ \theading_Q"was UŠd by..."á 1forƒ? in]   a @cc, £Ptt, c dallers´ Cstat¯©  7   œ øš {rs, "<-š 	ŸK_- © ÷
, name_size, column_title´” õ"Function ".ljust(: 9) +< /, `#)P sub-‰ òer only if we have new-styleÃ%rsc3sub4 u= False  Ò´i«.µ‡.values(à  µ$ifm 
i  2 Ó = next(iter(ÁL )_ 5 « ±isinstance(L ~, tuple5 UbreakÔ  if&ñ 
– ’5 "*„@ + "x nœ ð s  tottime  cum	 "•k 
½§Psourc# ¯ di§arrow="->"Lš  È€_std_str—> )8F Ÿ, end=' '¥  Ö   aif not§_‚ x B ¸õ   cX ÒQortedÕY g.keys(ÔPinden°%""=  q ç  CI 
�  ˜! =e	 2 
÷& =× h  © ?if C
v  -  ¶ 
º1 = b 	P  '  N~c != ccD  ! 1sub1â = '%d/%d' % (^ 
Ã  . £	H E B 	p 1s % 1 %s2  !.rz‚7+2*len(™=)),ß  ”  Àf8(tt), f8(c  ­‘ Qleft_° ü&B + 1n À       else:+
  ñ substats = '%s(%r) %s' % (name, value, f8(self., ½[func][3]))P Ðleft_width = C ™_size + 3+ ×print(indent*4 $+ ‘ s, file=v Jreamm < q = " "
\ Adef X a_title± !):  õ  ð
('   ncalls  tottime  per Y  cum ¯', end=' '� 	Z  °  ò €:lineno(&_tion)= ˜ ³  4 ²  , 8 ò):  # hack: shouldÛ « qentagesB  Ú Ðcc, nc, tt, c PallerÓ>2ats´3 – = str(ncV¶if nc != cc6` Á = c + '/' +7 c7 þ ¯c.rjust(9)3_f8(tt1 � J== 0œ ~ _' '*8y OelseB ‹ ?/ncŽ v Of8(c¿ ?cc ¿ JOct/c¿ áunc_std_string°)èò
class TupleComp@‚"""This  ñprovides a genericÈ    for compag   any two tO !s.“ðEach instance recordK rlist of, ñ-indices (from most significantI jto lea ñ), and sort direc• ó(ascending or de )® K e” ¥  y ƒex.  TheÉ eÞ ðs can then be used as " N ±argument to asystem• %()+   wH )a ø `s need9 !beL  Ê Aed iw 7§s order.""ƒ__init__[ †€_select_d +   ù8omp3 l - Care \  Æw, rightW  ü «'x,|?in o Y s  @l = U [@ ]û     2r =k  Šif l < rO 7 ueturn -	U 8 >8 7 rQ o0


#* 6!
#_N  i	€triple (d:° , 4Q:int,i 0)

V EÙàp_path(func_nað
me):
    filename, line,  € = func_ % ñreturn os.path.bas4 (= )> R

defA @get_J AtionN ( z U   7[2]6 ¡std_string/ 9 ð): # match what old pro�   Qduced« i{  ¼ ó [:2] == ('~', 0x  ö ñ# special case for built-inº  ± sP  .  L  ¯     !if3ò.startswith('<') and 3end '>'‚  < �'{%s}' %0 e[1:-1]{ Belse© 1   5  ” & 
"  Ñ"%s:%d(%s)" %Ò FO

#* 6P
# Th<qllowingg 9ð combine statistics cVpairs' .B °bulk of theÌ@cessO ð	involves correctly handl ð	"call" lists,
# such as  1ers~ ?es.ô :Ü1add×_à ô s(target, sourcXñ"""Add together allá 3 0twoï Ã±entries."""ÕÐcc, nc, tt, c 0allØ =e %  t_' !t_) _+  t_- !t_û Rrs = œ / B(cc+: n	 = 1t+t@ c	 1ct,0  m  ð S (] ,m"))¼	& C ü R Ä` in a ÷!le 
7newÏ !{}›  M 8„  ? ê w.items(iA [4 3] =º K ÉK \ n V 
Ÿâif isinstance(ä d, tuplT #
âmat used by cPÕœ $  q Ç V `(i + jH P i, j� 5zipz 8 )))\ 
?l -  ˜ l	;  - _ ) +_ $ c 6 	5 ª& bBcoun€sà séa"""Sumas{ðto get total numbero ) ¦s receivedqQc = 0é  g& #in4zs.valuebcõ 3¿ coUÐsupport printPof re sýÀ*************  ÿ

def f8(x):
    return "%8.3f" % x

#Y  3 ÿ
# Statistics browser added by ESR, April 2001z :ò
if __name__ == '__main__'ú ¡import cmd	2try   �readline! �except I7 VError0 Qpass
& âclass ProfileBð ƒ(cmd.Cmds a  †ò__init__(self, p4 W=None*  . @ .2 )p      D î.prompt = "% " €stats = b  ùream = sys.stdout% $if£ q is notH  †   Š 0do_=(Õ )   ú sgenericù @fn, fõ 0arg­   z.split(ò éprocessed = []« Àfor term in G ¥ 	î —  V À.append(int(L )~ 0 rcontinu#   /[Value.   :  ž ³frac = floa– 	ø @ 1if * b> 1 or >< 01  prç �"Fractio5Ðument must beI�[0, 1]", Ú=æ st3 [   j ³ L H e)€ æ	P3if è >ats>qgetattrÇ.]u, fn)(*[ 
Ï NelseF |0No C *`objectiloaded.xÉ0Á iQ_help§ d| 1ArgïŸs may be:n 9 ñ* An integer maximum number of entries to 1 Æ ' Ñ("* A decimal¾ •$alZ ðbetween 0 and 1,  rollingº e  what]  ® �selected· +õ	regular expression; onlyV ‚with funj  sµ Àthat match iót are printed.", file=self.stream)

  °def do_add(! …, line):   ' 0if  j.stats   >try   5 .` Z 	Y  % ÿexcept OSError as eN Ð ð("Failed to load ” ðistics for %s: %s" % (o O, e)ÿ  y  ?elsr  n (Nob ‘object is| \Y   …return 0÷  pEhelprlx pAdd pro¹ñ info from givenÎ  ~current¡ ócallees÷¼ Æ‘generic('  _< '/Þ ! ] â PŸ ( Ä ê Hthe à  {Ú  i ® _i(íu rú (/rsú ] ú /rsú [1EOF“¸
iÛ/("0_  1ö_ ø `Leave ÚÚbrowserÖ	_ do_quit½ • 8 – B?rea: ‡
h D4@ = SqÉ) >   8 .rri  + Ù¿err.args[1] 5   U{ Eº1ionµ} ÿ__class__.__name__ + ':', err“ ,÷�prompt =Äy + "% "½ �elif lenG./ ^) > 28 ·" =ø) Y[:-2]O  #y 1do_ 5 
ª]"ùÀ-- cannot reí( † à        returnC 0
  õdef help_read(self):  $ ðprint("Read in profile data from a specified  1.", =M �.stream)S ñWithout argument, reload the currentJ R S  Ã ¡do_reverseÄ k, lineÊ 3if “ :atså  é  .K z_order(½ Nelse= &ð	No statistics object is × /edÈ  |  oreturnŸÞ Ø | R >Qsort ¾ 1 of ¸¯ing reportŒ T H Q
?notU
œ -  ¢   —abbrevs =„ P.get_¸ ›_arg_defsÁ!if° and all((xØK a) for   B‹.split()r | /n  ø9s(*6 	­ 9
`Valid I ÿ keys (unique prefixes are accepted):c ¢  Ê À(key, value)ç `Stats.h 0ict$¿ault.items(ë   M ÉÇ%s -- %s" % \ O[1])öÀÜ � f| t SÍÀx`accordÍ'to~ :Ø Â  V @(TypB `~ ;' w�ps lists;!id”/.)v
 †�complete€Ò Û, text, *argsß ![ataŸÀ if a.starts­ (Y 5)]
d � 2do_ˆ žu    ¡.generic(': '6 	W !Y È > 0("P)ÿÌ B §¢ _� /()ì  3riph y™ ñœstrip_dir-µ
Ö) ® Ö _{ Ä ¾ WS› A leaðòpath informationƒ wPnamesD rä À.stream)

    �def help_ �(self):
  ±print("Show) ð for a given command.", file=@ •.stream)
G  d qpostcmdb Ë, stop, linen !if 
ƒ  Š areturn X  BNoneq öif len(sys.argv) > 1O pinitpro­ 4 = % 1[1]U Oelse, b  r 6try$ ²browser = PV B (i )\  ;  ;~ &in 62:]S  ) W ƒ.do_add(4 I •ó Welcome to the ' Ä statistics I ¡ ¤ m    �cmdloop(k uGoodbyeê1 I ö	except KeyboardInterruptÜ ð,pass

# That's all, folks.
"""Pseudo terminal utilities."""7 ÀBugs: No sig! òhandling.  Doesn't set slaveG ðos and window size.
#ñ ð   Only tested on Linux ðSee:  W. Richard Stevens. 1992.  Advancedô°gramming in„] ðUNIX Environment.  Chapter 19f pAuthor:] ð*en Lumholt -- with additions by Guido.

from select imporï   
 $os
 %sy ð,tty

__all__ = ["openpty","fork","spawn"]

STDIN_FILENO = 0 6OUT 1 6ERR �2

CHILD/ 
ê_ (Ú$""q ò() -> (master_fd,©2_fdn²Open a pty $ /É€pair, usf5os.` Â if possible" Ù	Ÿ66 �ªñ(AttributeError, OS	 »  O ² 	 “ · €name = _� _´9¹ 0_fdd �% (  8 ñ ž Z 1fd
J  a N	 Rc Ty  4 ‡ " 0ile; 0 ofÌŸQ end.5 DeprecatedŽ e ˜ ßpty() instead…±  j ”1
°] Á €= os.tty wf Ì�os.close  ´  J a" Óø³ û1"""‰Û‡@tty_k )L ¬  4x^ò'pqrstuvwxyzPQRST'] % y% ÷0123456789abcdef% ð     pty_name = ÷'/dev/pty' + x + y
  Itry:   ðfd = os.open(pty_name, yO_RDWR)2 îexcept OSErrorN ‰continue5 Âreturn (fd, £ t£ a TraiseX ñ('out of pty devices')

def slave_® t® )ˆ ?""" 3 ->5 !fd— �Open the^ 2 Á and acquire  Ç òrolling terminal, È 1ingG  ƒ ñed filedescriptor. ðDeprecated, use + ñpty() instead."""
+ gresultƒÕ ƒ	¾ñfrom fcntl import ioctl, I_PUSH[ ¬I  °Ë  ~ . 	_ M ( T ‚, "ptem"° ;&  ld3( … 1Apassx 
Š ãVfork(Õ  Çò (pid, master_fdŠ AForkÁ3mak¾ÿhild a session leader with a Ü�	o ! ‡ Å· Ø ¡(Attributea,Â¾  &ê Belseª  ö if pid == CHILD   	†     ¢os.setsid(ù     ‹ c    #Í¾ û  already set us%Ü  5  ¾   ¬ÁŽ,f Î6pen-é † ¾   # Establis®4new£ \ ˆ 
•os.close(‘ )¡  1 0# S7ð becomes stdin/stdout 0erroc9	g Qdup2($_¾ÆSTDIN_FILENO…>os.( ?OUT) =ERR) 5if v g > STD& 
+ø 1 	ø ¡Explicitly†Þqtty to 0#it&ty	Dtmp_ Ìp(os.tty*G(STDë ¶ ~£ (H 9
# lÅ �# ParentáŸ‚ processž ’ù)q_writenvCdata“@"""W A all   'a Ç   » `while # vnà!s._ ^ : - ! =4 C[n:]�  t6(fd… @Defaú  ‘ functionˆ x Ø 0os.  f C1024S_copyéÀ_fd, master_`read=_ q, stdin  ñ):
    """Parent copy loop. aCopies  (   òpty master -> standard output   ( e ): ,  in+ 7-> L  : ž A)"""< sfds = [T ñfd, STDIN_FILENO]$ ¢while TrueÎ  ¦ qrfds, w xE qselect( f[], []Ÿ #ifÔ p_fd in ? M  Q ddata =&  Né &fdH  * pif not 1 ò:  # Reached EOFU %  ¯fds.removeO 7elsØ 8 ó os.write(STDOUT,v � )if/Ú 
} T cM  { Ü |   Ì ¥
B Ï _Í nÊ ø
def spawn(argv,�ÃÕ	‚Create aB ´ed process._qif type\ B) == #'' Ú  w 1 = # ,Ì ñ sys.audit('pty.Ÿ 0', * ! 5pidª ¢fd = fork( `if pidl VCHILDf‘os.execlpk f[0], *S 6try+ ÿmode = tty.tcgetattr¶ $ osetraw! `restorO 1Òaexcept\ `error:ð# This is the same as termi·  ( =  , Q 0 	º _açÚ QÊ,Œ 0OSEb  3if f   {  í ?tcs ,Ñ °TCSAFLUSH, C!)
¡ }os.clos‚preturn kqaitpid(Øð0)[1]
"""Routine to "compile" a .py f’"to c 1.

Dðmodule has intim¡Áknowledge ofb`format 2.py@  s.t Ô

import enum  þlib._bootstrap_external% žmachinery 5uti1 $os  tos.path %sy ðtraceback

__all__®â, "main", "PyC#Ë úcInvalidationMode"]


class 0 !(E–3ionš5""" ñ raised when an ·‚ occurs Ñattempting toõ±nBile."ToN   tð€‚ion, use"  hq £ @exc_M,	 `value,c[,msg]kGwherH  *  3  dl „ U bev �Ó qmessageÀ  ‡   G   n™ðcan be accesses ÿas class variable
   õ'exc_type_name'
%   ñvalue:  exception  ÿ to be used in error message 0can1 �accesses ›  ‡ ] ƒ 0fil~ ¶  ž @ of  ÿ  being compiled� A g Š Amsg:‡ `   str~ ð } pwrittenÚ SIf noK÷is given, a defaultoe owill b]? óconsistent with 'standard' py_,… output.æÕ   m 4(or‹ /) »K C'msg?2"""Uðdef __init__(self,é |
 ÿ,â¥, msg=''):_  �¨% =< !._º%__* %if ° is SyntaxE¥N  ð õtbtext = ''.join(traceback.format_øe_only(b  >   ” À )))& ’errmsg = m ò.replace('File "<MS>"',  a%s"' %K Jelse½ Y  "Sorry: %s T" % (— , [)ˆ ¹ EÑ.’ ¬  orÒ1msg: s H ,M  Ì.f , Ÿ„ + I '  
#  b ! =
  ¡ = § Ö ^3str]:qreturn | bmsg


°PycInvalidaÜãMode(enum.Enum@ ÑTIMESTAMP = 1‹ ñCHECKED_HASH = 2 +UN A3


“ Cget_Ø'_in  _mo f øif os.environ.get('SOURCE_DATE_EPOCHÒ Á  .ˆ › 
;: ë » 3(Œ0, c ˆ=None, d ñoraise=False, optimize=-1,  n  ü L squiet=0	ƒ"""Byte-| ñ one Python source t ’bytecode.a:param% Y: The6  Cú' Ô ( ptarget O X ç  6 ¤  When not®Ethisá ás™ Ðthe PEP 3147/	 q488 locd	 G±: Purported· p p, i.e. K „ õ that shows up in~ qÀges.  DefaulñVts to the source file name.
    :param doraise: Flag indicating whether or not an exception should beJ  N E d5 €n a compn ùerror is found.  If I õ occurs and thisO f� Ps setÆ ÀFalse, a strœ §  á ‘nature ofï e§ N ówill be printed,p ae funcÑ " `returnp  U rcaller.³ K ]  »  ³ 1Tru² 2PyCEH  { 2be B	œãoptimize: The  a± ‘level foró pö r.  Valid valueOÁare -1, 0, 1ý R2.  A&  7q-1 mean21useT o · w i€current Uðrpreter, as given by -O
mÞ2linÂ 9onsä 0inv² Ö a_mode:m ž‚quiet: Ršñfull output with  ¢10, lbs only !1,J  ž ‚ )no; 12.
 :öd: PathüQresul@byteÅ  ÏdC8 0Not(ðat it isn't necessaryG  9 -˜à Python moduler| QexecuÏÔefficiency --/ xitself J 3s aF kF € T loadÛ if• °can, writesú Õ L @code¢ 1the@  correspond[H.pycè PHowevÙEif aš anstallµ ßPshareÀtween users,„ Ais ae �good ideaz  † 3allÓ ‡s upon i] b, sinc¨ o�\ P may –abe ablÏ ê 1 inè ó²directories 	@thus% @y wo·D  þ-nÈ 0the8 þ› < )yÍ £ each time¡üðThis can slow down prog�óstart-up considerablyt%SeŒaall.py’a script/_P thatƒ å $is� !toÀ {neÝ`s (or “ .sO�selected? Q)•  DoŠ¡FileExistsï ØP if cT @ endéQ poinc#at$±non-regular‚ ÙÔsymlink. Beca›W~0use[ ‚renamingì ÇÉ! #wo¹g  M 1 �same typN4 aGð it was previous” Z1""" sÊ þ 3NonÒ . íý = _get_default_! $()_ >;is S fð e >= 0:
         ó optimization =  Fe if Ð>= 1 else ''
5  ðcfile = importlib.util.cache_from_source(( ,; C  ’ ¡ = )P  › :  R ™ I  ñ ás.path.islink(E )Y ðmsg = ('{} is a sym( ð and will be changed into a regular   S
?B   ';` writeU Òbyte-compiled8 bto it'¦  Ý óraise FileExistsError(msg.format¹ 1 'elÙ e0   ¸ Unot o÷  §  ÷ Inon-Ø  ø !ondÿ Miloader£±machinery.S� IL' c('<py_}1>',GÈ_žBs = W ‘.get_dataà) 6try;0cod. D 0to_ ( S 0, d|" o++_ee„ �except E  Øfas err˜ Âpy_exc = PyCkDàerr.__class__,4 ™ `  …Æif quiet < 2Y  !do¤
      	±Ã / psys.std— !(: .ŠX+ '\nQeturnU 	„`dirnam‡è é2  m 3if  
¸ Ãos.makedirs(! g @‰= Apass^ ¡if invalidÆ!_m ~'cI æMode.TIMESTAMPH )Gstat| ª_ ~ È  Q a	õñ_bootstrap_external.‡ñ_to_timestamp_pyc(³  I    I (, ‚ 0['m0 ,'] csize']=lseÁ Ihash• -\   	I  „ Ñ  M Ì 	Þ | 
s(°ÖCHECKED_HASH)E ¾ é‡1alcÉ R3 r_atomicÈ$, ' , w � r Êð


def main(args=ñNone):
    """Compile several source files.
& #Th ô named in 'args' (or on the command line, if# !isD ñnot specified) ar2  z  d 7  C ñresulting bytecode is cachedE ik ñnormal manner.  This function does o ñearch a directoryE ùstructure to locateõ �; it onlyÓ  ¡ sý C ðexplicitly.  If '-'ª  Ä 9 �parameter+ *,#qlist ofC `5 ðaken from standara3put}1"""1 0if J  3  ÁÀ Ä á= sys.argv[1:]1 arv = 0 < †== ['-']=  whüFTrue  U  Ÿ  í Y  stdin.readß!()V  (   !ifo3 
I  ! Ybreak3 , ! =\ j Ê.rstrip('\n'` >tryT c·(J  , doraise=Í 
A “except Pyì Error as e	 \ :1±  Ç  bòstderr.write("%s\n" %H O.msgx /OSq Cm 7els¼5forR}
á N^Ñ# return valuuAindiw`at lea­ne failurewŽ-~ �rv

if __mò__ == "__main__"# áPexit( ñ())
"""Parse a Python module²ñdescribe its classes Š ?? –enough ofI  ¸ �òrecognize importC O  M 
M p definiâ s,  = �find out^Qsuper9 "esk  0.

À€interfacwSnsist$ esingle>	 émê B_ex(
 p, path=|t)
where!is€  Xx 	,­  <  »Pan opÅ 3al
ŸBies Y  Iv  4 @to b  Î"edr”present,
Y �prepended @ ‚system s'  à 	 3e—1
is)C arØ 61key( Q $di ¾   ó   
n·4 2 Ö p(includë7 @thatY 
éaed viaX3XXX!‚ YYY conÇ)Ì \s@  inHc^ ÀClass and FuñTnction.  One special key/value pair is
present for packages: the key '__path__' has a list as its vI áwhich
contains: H ò search path.

Classes and FuŸ ðs have a common superc) ò: _Object.  Every instance
hag ñfollowing attributes:
    module  -- name of˜ m ;#   # ot #  fiD #  1in í L ) ² is defined4 alineno4   1 in. @ Qwhere = '< i©r startsF 0par” À  Â 2is : ‚, if any. €children/ cnested' #s —"ed‰ A t.
The ': 'B Ò Aa di>€ary mappd 1Ds to\ C.

I’saÓµ describe fåAwithù ©U fromäL CI ?es G [,
pluXîlÂ"ofk [ (s dsa’possible)gpmethodsf2of  g`beginn1 ¢numbers.
Iƒ F .a€  tñ not recognized,.ñcorresponding
ent Æ 0is H a× 2  but a
str˜ 0giv  ãŽ   #ð .  Since import›·tements
are§ Ì% #edv s $ ð scanned as wellÐ òis
shouldn't happen often.
"""

H 4 io
 4sys  „lib.util @toke/
L ³ òNAME, DEDENT, OP

__all__ = ["read7",  0_ex  	 ÔR"]

_1 ñ
s = {}  # Initialize cachf$ €we've seÝ !

Uì‘�"InformaûÃabout Python»%or?!."±ódef __init__(self,q,} , d , vBno, 8)n   3 .  # =; Y  =N 
  Z ! =a 
 m # =v 
 ‚ # =‹ 
 zN
 á 1add â  “ ,rÉ % @ren[" 0] =$ 
j·(C= t av¬p, incluqÛs€)S=None  h‘ .ÉÝ �Ú Àtion about añH Python class."
    def __init__(self, module, name, super, file, lineno, parent=None):H  L �_Object.P 
I )C  ‚ .s ‚ = [] if� @ is n R else 
4 Ñmethods = {}
 Ú 2add Ü Ô lÇ º w )  s[$ 3] =í 1


J ðnest_function(ob,  _- ,+ Q ³"Return a F/ p after C Óing within ob„0newL % =1 D(ob.‡  g :ob.?"ob;×ob._addchild(1 Z % Ñif isinstanceÂ C	¶  ÁG 	H 1XrÞ [ XY 
 µ < I=År (ˆ %V 1 = / # o =,]+9 1new -æ  ç Bread—( i, pathÕ "× ¦ ! oòs for the top-level†Ses inr.¸@Thisï . õoriginal interface, before+Ñs were added.¡2"""J #re Ü �  key, valuev _Ï ã or []).items(­ C 
AH ,�%  ) pres[keyE& — R<resM?_exPAa di}1aryCA all… ’_s andTaSearch…¹  °PATH + sys.Æ=�If possibòinclude importedy"es0 @Do t±0by O ß@sour© ç3out>   (¤ Òexecuting) itE  ²89™?% », inpackage˜« ±e hard work µ S[_ex]„&IfF  Œñgiven, it must beÌ0dot 1 of z 1 inôáwhich we are s…  ŒRa subz ,¼Qthen ”d F U A sÏ; otherwise,` kE k  ï × ‚combinedO
	”‚# Computó Cfull¯ � (prepend× y·2et)Þ 7“ v 1notÌ:˜  ø V   å = "%s.%s" % (Q •œ = F ÿð# Check in the cañche.
    if fullmodule in _m !s:  # Vretur [0 !]
% ò# Initialize the dict for this Q ²'s contentsz ”tree = {}E PCheck‘ óit is a built-inB ó; we don't do muchd &esÍ m  É Asys.B #inÔ ð_names and inpackagej FNoneï - "s[K @] = « ê   "# º  ñ ƒa dotted³  r ï 3i = ±.rfind('.')@ –if i >= 0„ � 3 A[:i],  � 2sub› R V[i+1:! âparent = _read, (S v, path,„  X  ˆ Jnot  & H å = "%s.%s" % (O _ X	W  J 0'__z 0__'�£ ñ  Z ôraise ImportError('No p  JÄd {}'.formatÑ )j ©ö , ™  [ˆ ] ­ ]�# SearchÄ ­ `¹& 1f = 4sS ü ! =}9 7elst% 0 + Á † 0 �spec = i lib.util._J_ Q_fromf ( ', Y (0if / ÷~Mý‚NotFound†Cf"noÐ6d {c Q!r}", = k I 	M4# I$ aè?î ¦ .¿_É �locationsÁ  W
¡ •â! =î H o 6try‹Psourcš (Â.loader.get_ _ç ñexcept (Attribute6,É)^ D# IfM0is Ã rPython _ ,å0can ²do anythingD&Ž ê ¼ 
I 9À !is¦z = > fW&ì @file î dpcreate_‡ $  R ^W ,Ó  & 	s

def _E *Ú C"""R!he©µ Pƒrticularo.h� ¹  Ã)¥ +8`, beco7"o. ‹ ™ „øpassed to recursive calls of€6 R  g þ R ³tokenized. D}s causeb .tob  k F v{} or {îà: <submodule sñPearch locations>}.
    inpackage, None or string, is passed to recursive calls of _readmodule.
M ìThe effect of 3 ais mut   ‚global _B s� 1"""J �f = io.S‹ ±IO(source)
 ò	stack = [] # Initialize  ó	of (class, indent) pairs¤ ñg = tokenize.generate_ @s(f.Ô Qline)j Atry:	  +2for: Rtype, ,u °rt, _end, _; V in g7  ; "if/  : ª == DEDENT$  (  ? ‚no, this½ " =b †  '   ñ	# Close previous nested û £es and defX 2  Dwhil- & 7§[-1][1] >=} ¡  D 0del”  ck4 	˜ $elé  å ^'def'C ä ¬ . Ì³, func_name
ù  = next(g)[0:3] ; ! > Ž != NAME$ * ðcontinue  # SkipÎò with syntax error7 0  @cur_– ! =Ò‚ òv bur_objwã.[0Ç  m i _}v  ]( 9obj÷W >  Oelse‹ @# It…ajust aj ^ ò  K  s ö @Func) R(full^	Š f¯‘  N Ptree[O ÛD] = ` OL�.append(ú  8 Ã)õ %°'Îæ M(G'k )ò	# Parse what follows theC &lû Ï onherit”N 7(  • ‘ s÷ 1lispQsuperþ eöÀ            à    level = 1
  ñsuper = [] # Tokens making up current & oclass.F ¿while True:   v t] atype,  ÿ, start = next(g)[0:3]? "if7 ô in (')', ',') andâ ?= 1~  ‚ Án = "".join(Ò )n  / @if nn ?tre×  *   â# We know this2 3 4   ™  f /[n  , ?elsŠ cS¯.split('.'å  W ¿if len(c) >C /   1# S9á ñ form is module. ‹ D   `# lookf<  K 6 @ �m = c[-28 *    Oc[-1. @if mš _› sÒ  h Dd = 6 /[mn  8 @if cr dk  7  ??d[ch ïnames.append(n!�o== '('± ƒ+„ Ä )elR )R -R 	 V Úÿ?= 0¤  / _breakó £ /,'}Opass[ ñ # Only use NAMEY ²OP (== dot)ús B ÍŠ Ç © -  1 V O, OP14µ8Ð# ExpressionsÅñthe base list are noJoported¿ ainheri °1 if6/ckÌ’cur_obj =%  ê/[0 + ¨ «Qnest_ (r  Q  5 Bobj,¢_†£, lineno, » "¶ P w @ = C^R(fullo
e ] ,Ÿ 
§ À    fname, l�ineno)
   ñtree[class_name] = cur_ 1 åstack.append((( Ú, thisindent)g ðelif token == 'import' and start[1] -0:l àmodules = _getœ jlist(g`  Ò ðfor mod, _mod2 in  < U  / ?try   ò# Recursively read the ¸ #edZ .®  <   ÿif inpackage is Nonen  2 _e í (Æ Npathå  +   ?elsQ à 
 C   v ,¼ �  > �except IÎ_Errorä  4 r /[]e ] Q ÿ# If we can't find or parse¬,¬ð # too bad -- doN �die hereáIpassR âOfromà,ãß`if notz è LB!= "”")‰continue«  ‡ IUF")dÎðz
	2	^¡# Add any Aðes that were defined S © • P our ²p space L2heyP gmentioR   ¹ An, n L s2 g œ d  <, n2‡n)Md[n]¸  ) ò/*'P 1# Dv1addæ .~ with _Ð  `   Ø ±  (  Ø Ÿ[0] != '_�  ,   å 	ß �  StopIterawÖ ‚f.close(Øpreturn P e


defæ ©2(g)C B"""R*   À of (dotted-­A, as	  u MP) tup  ¡source g.
† !An4 Àame is the nñame that follows 'as' in an as clause.
    """ ¡names = [] ±while True:  +  # à, token = _get 5(g)" pif not  7  ; Xbreak' F =š 
,  > 2h 7els˜  a 5 u = Noneh    s.append(( ,œ &2)³ é � ñ != "," and "\n"Ì "inò 
¤ 0 ²= next(g)[16 Š "if1  N 
8 areturn� xs


defR6 ""R% €(dotted-Â 1 orå ,| -‰ ³) tuple for| ’source g.ÝGpartÝ5 FtypefÉ 20:2Ë Ç  '  Ë ANAME=   2'*'§  ö Ï (€V d{ „<  x
a  q B  a˜  m œ † .†   c  S  ~  W  ï Þ  J 
X × ‘".".join() )Ñ )êbmain()a ñ"Print module output (default this file)ßóquick visual checkã‘import osþ2try]  º ämod = sys.argv¬lexcept&  __l !__F óif os.path.exists(mod¶  Y    3% 0dir£& F &  $ Ebase% f  $  if ÷.lower().endswith(".py"r  , P rmod[:-3g 
—  Átree = readmc0_ex¢  , ( �òlineno_key = lambda a: getattr(a, '# B', 03 0objRpsorted(e ò .values(), key=1  T  , reverse=ï? ñindent_level = 2
 Z —`obj =  R.pop(>  ûif isinstance(obj, list-0# V– € is a __ó  __  þ I   vcontinu;Ê1has_ 'µ 'c Bobj. Q = 0
Ê  T ¡  l_Objec¤ @new_á  ¥O S †childrenWZ  ^  u4  ( ob{ p$ &obÕ  � â "+ 	 º	’  Ã @.extmX ¯
[ClassMpP("{}c 2 {} Çœ  ð.format(' ' * obj.indent, oòbj.name, obj.super £lineno))
  õelif isinstance(obj, Function):(  / ñprint("{}def {} {}".format(' ' *m bindentn ƒ x `
if __ ò__ == "__main__"l  ñ()
#!/usr/bin/env python3
"""Generate P   documenta² õ in HTML or text for interactive use.

At thB   ôprompt, calling help(thing) on av tobject
} sP  Z, andA è) starts up an‘ 
a ò session.

Or, až  shell commP  B³ outside ofˆ ð :

Run "pydoc <X«>" to showqon someÍ #. - € may be
 >  [ 3a fð, module, packagQðr a dotted referencer pa
classz? 0 win # aG   Q  ¨aU P.  IfAA
argÌ  contains % `th segäð delimiter (e.g. slash™¥Unix,
back ðWindows) it is treaµ a¬Apath· J° source fil"V³-k <keyword\Qearch[#a   Ñ  D�synopsis °ós
of all available	)s.¸€-n <host�c  / +±HTTP serverN 't given
2 ð (default: local ­ �  | machinØ p <portr &onp  ,  kJthe
W ñ  Port number 0 can bldc0getË ñarbitrary unusedQ 	b½þ  ~?n aE  q@
ope °Web browser| Ü#ly 
¡.  Combinea
 -nS ` -p opWsK  ”1rol d ®'  Ò Í wdÔ PwriteÁ@ ¤=º ª)Q
to a‹ f 2d "Û¡.html".

M— É sˆ5cor\± are assumeabe in
ÊÒhttps://docs.TÀ.org/X.Y/lib�t/

ThisÄðoverridden by sett ZñPYTHONDOCS environ¢@variêÃ 1dif#Bt UR• Ù >”directoryîZ LŠ %
R_ÐManual pages.`
__allC0 ['C '] Quthor P"Ka-PQ ÐYee <ping@lfwí ’>"
__date( €26 Febru˜ò2001"

__credits" à""Guido van RoX,tðan excellent programms ñ
language.
Tommy Burnette,û original c‘ orrómanpy.
Paul Prescodd 0ll Ž@work| onX ñ Ð.
Richard ChaxÐlain, for theñ| first implementation of textdoc.
"""

# Known bugs that can't be fixed here:
#   - synopsis() cannot be prevented from clobbering existing> ñ  loaded modules. ó- If the __file__ attribute on a. ñ is a relative path andC  @ ðcurrent directory3 ðchanged with os.chdir(), an incor, E T @willÔ ôdisplayed.

import builtins  ïlib._bootstrap 	ž_external% žmachinery 6uti1 enspect% o
 o• 8pkg2 „platform) $re
 %sy4 ”sysconfig 5tim( utokeniz 0urló Epars ’warnings
 Pollecms} ;Rdeque treprlib BRepr ”traceback  ¸ €at_excepN `_only
±- %ñ common routines

defMñdirs():
    """Convert sys.°into a listCÂabsolute, exãr, uniqu› s.[ L  X Q = []Z Jnorm 0for²5 inl … =   =· ƒ @.abs Á(dir or '.')U  * Y .   @case/ ( 0if   C 0notv  sNk  is'3dir c    ¼ z.appendX   J !  } `returnë uó _findclass(funci Qcls =
m%1get! 2.__ "__R 0if . vis None5j    b@nameí  j p.__qual �__.split(LV[:-1]G  \ P= get�`(cls, 3 | ?�2.isÉ 3clsÈ  ‰  (clsdoc(obj7 Bif iä—.ismethod  U  „  æPbj.__Ï P__.__ !__ï  % Eself%    Fif (d ¸  # )B  F ü   & ,sD), '„  ')no– Ò  I   !# k Ô 	g i ]  7elsÑ ? % 1.__J Ó )el4  ,6	-[ � �‹ 
f x û  6obj@ ¶ ò‹­ Q¬  &Ù
Ànspect.isclaçss(self) and
    ð.__qualname__ + '.' +  y == obj! )):A Ê# classmetho[ `cls = a 1 Jelse? % 1.__J !__/ ð# Should be teste
 ñ	fore isdatadescriptor().2 ÷elif isinstance(obj, property¶ Rfunc Ø Afget<  ñ   0.__ ‹   ¨ Q_find¦ (' )< 0if " ñis None or getattr(cls,L€) is notQ
areturn: Q É ƒnspect.i[ð @obj)c i#  ! c  Ê ð × ã1objÛ ö /ifÈ ) 8 “§ kmemberÊ ©  0 @slot7	?1'__ A__','y 4  d ÷* a, dictï}A in  
n  > ~ [,]…«%  Ý €for baseX ¶cls.__mro__^ 6try  g  dou´_getowndoc(â  G "× úexcept AttributeErrorQ �continue�  b 0if e f « 
1 Ä 1doc3   ( g

def œ A """Get the] ðumentation string 	 anÔ@ect Štèe `inheri½‚from its/A."""! 	( ¿ ™ ù_�  C"__Ð–'__doc__',ø  Ì ô   o (3obj¦ Z type4   Š  
  w #).v D H n , @doc,x  D:docd  @ �     ¤. Þ Ã \cobjectôÃ!.
ä ðAll tabs are expanded to spaces.  To clean up`s that5 F Pindenýpto line, ñwith blocks of code, any white_  E rn can bÞñuniformly removed N •bsecond^ ponwardsÚ( gÐ R~"§ 9 J©	œ žF  fD   ®(¶R, TypÁ‘ ,   ¿  !if UQ• 5  ” � àdoc)

def getdò*oc(object):
    """Get the doc string or comments for an 6 A."""8 æresult = _getdV  ; ´inspect.getF u < Sturn C óand re.sub('^ *\n', '',  .r“ @p())Z Á''

def spliv 6docÉ S ( aÉ ðinto a synopsis line (if any) {  ú ErestÚ  # 0s =F .| .p a('\n')Â qif len(+ b) == 1N R!reÞ  0[0]Í 4 *el6 A>= 2‚ 1not˜ Es[1]ï P 	s\n'.joi€ B[2:]– z  = « $ )7“classname�P, mod D !a )   ¢ ðqualify it with a8 2ule" Åif necessaryF< =6 __ !__	&if °module__ !=T  & ú    D - q+ '.' + S ú  1 ê cisdataç Þ aCheck ÿ„ ð is of a type that probably means it's N Ü n Dot (ì"isž s  ® P µ  - + droutin¢ö &fr½  H —tracebackw  J 5codd öreplace(text, *pairs;DHAerie1sglobal 4 * onkB,awhile L Ù b " =  õÍ  i/ B[0])Ø % 4 12:]û Š ; øCcramÁ fmaxlenÁ ’Omit partð Û ngàneeded to makeåPfit iÍ pmaximumí5gthÕ É w B) > j ß Ppre = R(0, ( g-3)//2Ð  os>0max% $ F-pre$ Þ p[:pre] ù.û | [„ 	 o)-post@_re_ê Ppid =gñcompile(r' at 0x[0-9a-f]{6,16}(>+)$|Â.IGNORECASE)satripid]UPRemov8ôe hexadecimal id from a Pytho> /µresentationPð # The behaviour¡ %pšPimple]0 ‘-dependenžAterm‹Xcase.õ Wqr'\1', *'÷_is_bound_method(f)K RÆ`s True% fn� !a 6  6  ¤qgardles‰ qwhether@ ufn was Á  edRr Cµ R'ifŸa —   ’ c 	1 zbuiltin2 ðself = getattr(fn, ó'__self__', None)
  ðreturn not (inspect.ismodule(4 Q) or 
 2 is= > : ñFalse


def allmethods(cl):e  Q = {} ôfor key, value in x �getmember? , “isroutineR  º V •[key] = 1Z 1basT Pcl.__ 2s__‰ 7 ‡.update(°  + @)) #Ä ` your  õ are belong to ush 0key» ˆ o.keys(  °getattr(cl,ü 	AC Bô_split_list(s, predicatû @"""S! ö  sequence s via( c, and ›ðpair ([true], [fªA]).
Å 4The( ‰ð s a 2-tuple of „ !s,,  ;@([x »x÷ Fs ifu F(x)])  )  ]Ê  -  2"""‹ �yes = []l &no p Ãy   ¥ Âyes.append(xe   Jelse( +no' rryes, noŒÀvisiblename( ,=?Q, obj
 óð"""Decide whether.ðshow documentation on a variable.    # Certain €@ial o s}�redundant‡‘internal.*ñ# XXX Remove __initializing__?# !ifK  ³¡{'__author´'__builtins ecached  {t K  ©  0'__@+ 4doc Dfile  Í   ? UloadeŠ o , @ '__ý  apackagS G Dpath+ Hqual; 2slo¿  T ¶version__'}
õ0Z ‘# Private2}¿hidden, but› ’displayed�lñ.startswith('__')’ ™ G.end :½q# Namedñs have public fieldsG , ^ ñ a single leading underscoreÒ ‘ � 1has‘robj, '_c 'Î ç5TruM 0all Î He# onlyëð that which the programmer exported‘q__all__« r  *  1all 
½—  „  ) 
m"')¹‘classify_	 _é ƒs(objectâ u"""Wrapc) 2 ,fQfixupúõdata descriptorsÀgresultÄ ¸3“kind, clsð)Ü ñw 
©  %if¨  is… „ (»Õ  ,    s ð  = 'data descriwptor'
  ñif isinstance(value, property) and  é.fset is None:C  N õkind = 'readonlyC n ðresults.append((name, 9 b, cls,h !))\ sreturn 4 ð

def sort_attributes( ¢s, object)” ¡'Sort the  ñ
 list in-place by _fieldsÙ ðthen alphabetically#  ™ · ð
# This allows data descriHñ
s to be ordered accordingÁ # ao · Á if present.) � P= get´ (Ð 3, '« R', []2tryç  s9 _~ @ = {¶ ‘ : i-len( °s) for (i,  ä) in enumerate# }… ÿexcept TypeErrorf / ñkeyfunc = lambdam": T “ A.get¢�[0], 0),$ #[0Ê  ê  s.ÒS(key=Q o)

# - !ò module manipulation6ãispackage(path'ð"""Guess whether a  a referÙ  7 á directory.""".`if os.1 h.isdirZ šPor exx� ('.py',  #c'~  $   	H Tfile(W AjoinV   _init__' +V )E  I .ATrue¡  RFalseðsource_synopsis(n I pline =  .¿  (p`while  ñ[:1] == '#' or not s.strip(J  ‹  - N   %if< q: break± 6   S  !ifg 2[:4~ ar"""':  }zine[1:]+ 3+ *   x  Z 2 32   a 2-1:7 +\\` 2:-1a  / þ  $ k P      r&« €.split('Ì I)[0]Selse:"! =˜ï ýI þ÷ £, cache={}» e9Aone-Ä ôsummary out of adÚ @mtim?qos.statY b Q).st_ • ¶lastupdate,³ „ ) S  6 0, (`,Î  £> ‚ …T 1 < k ·a# Look 0binÆ ðsuffixes first, falling back¬"” ‰!if – ü&.endswith(tuple(importlib.machinery.BYTECODE_SUFFIXES¨ßloader_cls = B S£‘lessFileL/ < Ž /el� ðEXTENSION_SUFFIXES)):
  ñ loader_cls = importlib.machinery.ExtensionFileL. 
@ Uelse:   	O ENone õ	# Now handle the choice.! 7if > 0is ? 
^ ÷# Must be a source filD  ƒ :try6    ' ð = tokenize.open( Uname)„  + îexcept OSErrorK Ñ# module can'�  M éed, so skip itQ  U areturnÓ 	 c# textR sS  Þ ùdirectly examined4 Awithø œ ƒresult =‘_synopsisë ç ¸Zcbinary” à, which has to� %&edº á »' =ÄÁ('__temp__',° lð# XXX We probably doU@needo qpass in0b ;herñIspec½Putil. `_from_çŸ_location• ,` Ï  — = c A Šm=mÀ_bootstrap._H (¼ 
K •ñX‚del sys.n &s[‹]ì 1) ó.__doc__.splitlines()[0] if"  D
Ðb# CachÝX #c [Š Â] = (mtime, * î & @

clÿ‡qDuringI !(E¢Bion)1"""% ð s that occurredº lPryingNºs someth ñ document it."""ödef __init__(self¿£, exc_info|  è # .Ü % =ìM ! Qexc, + Svalue Etb =T 
2  3str~ j  exêE `exc.__N!__7  i A'O0lem;ñ %s - %s: %s' % Ð ­ Ï Š – 0)

 * Ó S(path‚ 2"""‚“ a Pythonhò Â or compiled  given its E _@magiÇ e  n±ÁMAGIC_NUMBERÑ è \„ ¡, 'rb') as] ú ô ãis_bytecode = ] …¡.read(len( )f ×  8a = os.› @base j &     N' 1extO ! + 7if … š  Ì)er›ë±_external.SÊFlessc(^ ,8d  oZ $V Àoader(name, ð4path)
    # XXX We probably don't need to pass in the loader here.
= ðspec = importlib.util. ð_from_file_location(name, { ,K =R Š Atry:“  Z greturnZ À_bootstrap._6 (f 9 gexcept< ñaise ErrorDuringI  (z ò
sys.exc_info())

def safeÆ & Pforceh Ò=0, cache={})d 2"""R ð a module; handle eu 3s; ¿ qNone if=* 0 is^qfound.
ï I  Q*is*  ‚ but an ß ð	ion occurs, it's wrappedœ!anI ò ; pand rerÒd.  Unlike __õ 0__,§ aG qpackage©@ is ihified,È !at Rend oÁ  _ 0 ü 1ed,N "no) V 8 Ãbeginning.   op&Eal '}¡' argumentL ¡is 1, we r›� W o° disk (unle´ %ñ	a dynamic extension)."""O 	q#‡ fö È  1 5 ød òhas been previouslyÈ d  T  ¼#‰ © °always haveM¸ ±.  CheckingÎ  1''sJ Smtime5ñgood enough (e.g.3 � øcould contain a clasI Ñthat inherits° ƒ anotherÄ "  ä ‚changed)ä Ò 6if  ì n M� s .   "if@ ÿi( ‚builtin_0 _5  9 `# Remo/$heš  ^k ™2re-½ Y5try5 F   #' QavoidÝölems with partial¿“ sñ  @   ‚# Also r“ sany sub. € because†1y w6 “/ar‹  B<newv 1's 4pac,¿y're alread× P‡ µ �subs = [mµ  m"¨ é€m.startsñ� + '.')]º pfor keyD [õ0] +¹ /ÀPrevent garbE`collecÙ¨  2 [x[key] =ã Ž  2 ?del) ' =Úà )P# Did¿¸`ñ before or after  X 2wasœ?› ð(exc, value, tb)3nfoÎ i1 
Æ
>H# An” pred whiaTxecut/#ed)
cíÀgImport(sys.ómodules[path].__file__, info)
  õ	elif exc is SyntaxError:!  ( 8# A ò occurred before we could execute the € .I araise b ðDuringImport(value.¢ Oname¤ òissubclass(exc, : K b) and D  @ @ == ö Å sNo suchš 1 in¨  * ¦ ¥eturn None¾ LelseP ÀSome other e5dÝ _ iâ »ing processl  –  , sys.exc_´"()¶€for partÀ  & ö .split('.')[1:]¥ Dtry:ì ¢= getattr(—,C Q  âñexcept AttributeX;: r
 D _

# -  ñ formatter base Õ!

 a Doc:
vöPYTHONDOCS = os.environ.get(" !",.  Å  ÿ"https://docs.python.org/%d.%d/library"H %�qversion”R[:2])¯ ðdef document(self, object, ”=N†, *args)¤µ"""Generate> Pation%3 anD 6.""Ÿ  C H = (_ @) +  Ä p# 'try']0useÞ0to uÂmpt to handl©ð possibility thaYWspectL ðidentifies somethÐsin a wa5 €pydoc itû P has ±"esi Ging;O  @ ‘k 'super'½`how it§ ña descriptor (which 7sO©7ionO pby lack” @a __o __í Ì¶an instance‚ #I  ? if&  þ 2.isçh) â C.doc ÓF ØE  D routineF   H - Ö	« Epass 	þ Fdata‹{  ' (x ')#$ m  -Ofail)R+ an¯%ep%punimplex‰ed types/ðmessage = "don't know q%tothQ%s ofD � %s" % (¯     Z¯°' ' + repr( !),4 $.„`ÂB TypZ(• <M  =’  Ù H ‚property  „ð = fail

    def ò2getdocloc(self, object, basedir=sysconfig.get_path('stdlib')):
   ò#"""Return the location of module docs or None"""

8 V  tryG   àfile = inspectw 0abs (œ ); ÿexcept TypeErrorH Æ'(built-in)'v ô Ð = os.environj ð ("PYTHONDOCS", . )@ A  £.normcase( § ãif (isinstanceÆ õ , type(os)) andÔ  # ò	.__name__ in ('errno', '÷ @ions  gc Yimp',E  I  €'marshal3 Pposix	 Bsign ?sysF p_thread= êzipimport') or‚ (¶µ.startswithò l  not / 1os.[Djoin< ÿ, 'site-packages'))B *A ^ E�xml.etree¼ étest.pydoc_modÐ : if¶8locÃ Á("http://",  s  ;   c²"%s/%s" % ( Ä.rstrip("/")r¬ †.lower()@ M Jelseß  O …* Y ¦ + ".html"c _ E ! =±×rä _

# - P HTMLSRument!ñgenerator

class$ PRepr( aA"""C ñfor safely making an2 u represW �of a Pyth„Ò.u4±ef __init__ôe    t . û ’maxlist =amaxtup¯-20* 0dic* 1  ÿ'ngF ²other = 100d¡def escape¤ g, textª ‰€replace( @, '&ÖP&amp;	 < 1&lt > Cgt;'Æ b  6` 2b ( ¦   1E ‡x, levelG ±if hasattr(ñTx), 'Ù')  €`methodõ@ = 'Z ‘_' + '_'.ÚB ,\split,s  µ&, W p  t J1get¥ 2 (Õ á3  + .¥Pcram(×@pid(¹ C(x))A1maxà)z_0 /ng<  1 = \ xM 7 ½ '  s ! =(  pif '\\'D  ð and '\\' not in÷ replace(testrepr, r'\\', ''):
  ñ!# Backslashes are only literal in the string and# [neverG ó%needed to make any special characters, so show a rawX .K Ôreturn 'r' + Á ò[0] + self.escapÛ )" G C ñre.sub(r'((\\[\\abfnrtv\'"]|\\[0-9]..|\\x ¥u....)+)',H (ð   r'<font color="#c040c0">\1</ >: ¸  “1))
h   `_str =¶r 2ing 2def �instance(J §, x, levelÌ:tryÙ 1 3Pcram(Ë@pid(x R(x)),V0max Ang))—  û oexceptW T'<%s ¢ ø
>' % x.__class__.__name__ï |unicodeó 3 Ã HTMLDoc(Docà Ò"""Formatter % 1for) ò documentation.""":?# - J fc  è’utilitiesM _,_â ! =0 RRepr(,  : = ' . K±!  c  ê4pagáó title, contents ”1 anˆ  7 ù     úò'''\
<!DOCTYPE html PUBLIC "-//W3C//DTDE  4.0 TransiH al//EN">
<6 �><head><• Ò>Python: %s</ ò
<meta http-equiv="C¹ d-Type"Ç p="text/S ;�set=utf-8j /e tbody bgdPf0f0f  P%s
</ !><B 0>''j(ƒ *O P 3ing3( fZ ,a ™, extras=a[ H cñ
<table width="100%%" cellspacing=0 @padd ó2 border=0 summary="b  "trœ  a!%s ùd valign=bottom>&nbsp;<br>
�€%s" faceP ÷ lvetica, arial"4  ·­¢</td
><td ^ iright k /
>a 	W P></tr  >®Ù#, †
”�R or 'ã '3 0sec™Í	-,Œ6Èõprelude='', marginalia=None, gap=z õ†  with a'ifZ @ is ] N   z € = '<tt>ê{ " *À ` + '</ A 9 `result5 Z''<p>{À"100%%" cellðspacing=0 cellpadd ñ2 border=0 summary="section">
<tr bgcolor="%s ðd colspan=3 valign=bottom>&nbsp;<br>
<font) 9 ð face="helvetica, arial">%s</, P></td ár>
    ''' % (} 0, f„ �, title)   $ µif prelude:   “result = 	 +N Ì q<td rowË 2‰  tdó á  0</tÕ dtr><td+ 
£ ´marginalia,– V, gap¯ ?els©  g 
y ( ! v greturn \nú Âwidth="100%%‡ _  è €</table>�‘contents
O sdef big S(self•†, *args)‰Ã"""Format a 1 p with aC @ hea€A."""[  ¸ßñ = '<big><strongn  </  ˜ + 9 ã  � .l (" — ¿ Apref— ¾ ?ext¶ pliteralÌ1 Šted text³  exiz qescape($ Æexpandtabs()¨ breplac* �, '\n\n'  	   ç  $  ' < { 
 ;  …F\n')ù ³multicolumnû blist, Ý ,¬?s=4 a + ñ of items into a R -S " 	|E= ''Á  n€ = (len(S  )+KP-1)//	 ( 0for�   in range( ›  ` 	 7+ '×c%d%%" Ÿ1topÍB(100j “ K  o im  ¦ Q*col, 
 + €  9 uif i < Ï þ   ¡ �tP[i]) ¼ Vbr>\n+ = 9 '&& Q!'<² ÔÐ kQ"><trL Åâe (Cgrey! Ê5): e  ¨ ˜ Ô0#90 :  b 2 K ƒnamelinkO   {, *dict)PMake f nk�ð an identifier, given ? ù-to-URL mappingsr Ç ]  Ê  s�!ifC  
 o)‚'<a hrefñ xaÜ (T [† !],J E"  þ Wclassÿ °object, mod) O=""" ? 	à  6 ? bule = P 0.__ ð__, sys.modules.get(object.__moduleS__)
  ÿif hasattr(module, name) and get  ¥is object:F  M ùreturn '<a href="%s.html#%s">%s</a>' % (5  9 x 0.__y "__� p, class (n P, mod )¾ t + 
n 0def= Óulelink(self,Ä )Å  """Make a & c for a7 A."""J  ° u é 	æ ´ Õ  )š 0pkgt š ¯modpkginfož ù or package to display in an indexÀ  D£, path, is9 À, shadowed =õ � õ %if! 2 T`.grey(_ ¢!ifj 
4 £url = '%s.$’ 
? Oelse<  ] 9  2 ¨ Ô 
9 @textv q<strong“ s&nbsp;()U † M 	{  	Purl, 9 ü)fi”#  ù to source < 	Ù�  " :c ‚Sarkup~ ¢ ó, escape=None, funcs={}•e `method ® ñrk up some plainö Ð, given a cone ° of symbols·@looku.ÌEEach- ädictionary mapƒ­? banchor 	Ê # =Ó  -­ m Åresults = [] …here = 0 ðpattern = re.compile(r'\b((http| õs|ftp)://\S+[\w/]|'@  2 ÿ r'RFC[- ]?(\d+)2 ?PEP2 â¶\.)?(\w+))'§›while Trunpmatch =Ä ø €.search(¿ , C  × qif not 6 y: breakû ‘start, enf \ j.span(F ‹‚.append(©t [s :F #])G x   ðall, scheme, rfc, pep, ì2dotV Üv kgroupsx  ä@ 
9 ] ²Š ÷
all).replace('"', '&quot;Q 5   Ì 57urlÝ ? @elifÍ ’ 'qð
://www.rfc-editor.org/rfc ð%d.txt' % int(rfc)
  ø,results.append('<a href="%s">%s</a>' % (url, escape(all)))
J ™elif pep:  " ðurl = 'http://www.python.org/dev/peps `-%04d/m zint(pepb  L ­ 9~selfdot± ð# Create a link for methods like '; . m(...)'õ ñ# and use <strong>G ™attributeJ   C þ
if text[end:end+1] == '('² ¤ A' + 	 @nameÍ (	 ,Ï Ä G Oelsea Þ  )é  Á f 
¾ Ð çÂ û, funcs, classesÒ Î _ O ¥here = endñL !é  . ':]’ ó return ''.join(; !)
M ?# - ò type-specific routinesM 0defpmZ0ee(A°, tree, modžæ, parent=None)òð """Produce HTMLF " a^A ð  as given by in€ Qt.get1 b a()."""Ó  På  â Q@entrA U   3  ùAype(# A) isë 7(()§  (   �c, bases–5tryx     € 	 ö+ '<dt><font face="helvetica, arial">«  C   > #= 	 Wö XcZ
ø = #if¥  ¯ B!= (�,Ö   5   Ù -[]Ö  !  F M 2 in_ 
F #  L ä .»  E ¾ ¿  F ÷   '(]3', Îd _) + ' A  @\n</‡[></dtt/ /[]0 ]  `<dd>\n—	  •÷ 4forVu6, c¿4<dl[  	  [ � |„docmodul{€object, zrb 
 ‡*ignoredÙ †Ódocumentation”a  [ 	t f $ = ð __name__ # ignoóre the passed-in name
  Etry:   õall = object.__all__! ÿexcept AttributeError@ 6Nond qparts =y µ.split('.')V @link  %[] ñfor i in range(len(F J)-1)p = ….append(@  Ê   ñ'<a href="%s.html"><font color="#f `">%s</ �></a>' %J  ³ C.joi‰ ‘[:i+1]), — J[i])Ð  edgb = '.'7 © # +1 F-1:]2 @head, R<big> astrong˜  !</  @' % Q g ­ Î°path = inspÐ²getabsfile(âƒ  . urüðurllib.parse.quote(G 
+  D  � „ = self. @(url&th0 6?Typ1:   µ(built-in)'Ô winfo = £if hasattrÆ û , '__version__'"  ª 2 .0 ©  3if 1 ð[:11] == '$' + 'Revib u: ' and'  Ë' 
› O L % =/ Û11:-1].strip(| 4nfoË':  %síesescape( rNdate Pe V s; )c  : 
â ¸ €+ ' (%s)® 3', ö 4 å `doclocŠ 42get Ç( 2if  € is not P
{   v= '<br>ç( ó)s">Module ReferenceÛw locals|Oelse^ ‰dresult½  ô :ings  3, 'V •#7799ee',Ð —€.">indexœ  É  j+%)
> mÔ  .ÔsmembersG,ï"is/ @  clps, cdicÍ e[], {}`  y key, value‚h W xS# if Bõ# exists, believe it.  Otherwise use old heuristic.’  0@if (™9 or#  ' (¬ )(Ç C) orÓ)Rü
ó A  ý`isible¾(	Dall,= 2  6 ý $esU7 y Ó )  |r[key] =‰[/    '#5keyÞ “q 
Ž  ' 1bas´Àvalue.__baseks__:
  ðkey, modname = base.__ 4__, �module__>  r = sys. cs.get(R )2 %ifn 0!= h @ and 1ule phasattrC žule, key)¸  Ç mif get- 1 is¹ 5 9 0notZ Ÿ in cdict-  1 # r[key] =0 [*  ê Ð + '.html#' +Z ú €funcs, ff – = [], {}  or. p, value� pinspectGômembers(object,  ›isroutineð0# if __all__ exists, believe it.  Otherwise use old heuristic.
ê  pif (allL +uNone or· ' ­ ¡isbuiltin(È E) or® AgetmA 2is Ò ¿  U  if visible(ŸOall,2  6 d‚.append(5 ˆ �/  ŒÏ<'#-³ $  %ifÉ  ish 4tioæ :Ö[l  åY *Adata÷ fósA )% E  — 0docÉóelf.markup(getdoc~@), s “preformatÓ,iH    Ùõ'<tt>%s</tt>' % docr “result = 	 Q+ '<p- Dp>\n. / 4if ?Ë, '__path__'"zmodpkgsy Ó }…importerùp, ispkg~Òpkgutil.iter_·€.m l  W p c,â_ F, 0)'6 Zsort( pcontentÂ w°multicolumn Ý ‘{ JlinkB U^I abigsecÅZ Œ   £'Package C~ a', '#f  ”aa55cc', Ÿ s "elÛJulesM, ^Ë ƒ s², lambda t:w  æ [(t[1]Iì !M”sØ â f ã  ¥ �if classâ   0lisÌ h‰ \< ]P  t[   ²oTtree(1getM  
  ~ B, 1)r)d À      for keûy, value in classes:
  ñcontents.append(self.document(@ ð, key, name, fdict, c )))O “result = 	 !+ M ¹bigsection(/  ‰ "'C˜ a', '#f  `ee77aa „ '.join(¨ t {if funcÕ ) Y = []q 2forÊ Ö  ?   – C d1Fun/s 
@aa77 JdataêÒ >   7 1Datûû `55aa55û o<br>\n
Àhasattr(obje­ß'__author__')­…markup(s> .< "),ÑŸpreformatÿ/A—  × í ”7799ee', ·i ?if Þ  creditsß #= à @C™ á ªcreturnD
 qdef docÄ¡$, Û •£=None, mod
 ×D={},÷  J  “ ‡*ignoredð """Produce HTMLv 	a¿ AaT � E."""Y @real� $ =  __ %__#   ! =KD or 2   Xbases@  "__ º 
Êepush =0¹6 Ó# Cute littleÂ óto pump out a horizontal rule between »%s.¤ ‡% H0 JRuleU °�__init__°b Ä   nµneedone = 0_    A _maybe> "if‹A 
  B    A('<h0C    ‚ 1‚ Khr =à (()LöList the mro, if non-trivial(ómro = deque(inspect.getmro™+ú if len(mro) > 2Ð 2hr.
Ä ß ðdl><dt>Method resolution o÷rder:</dt>\n')
  ùfor base in mro:  ( ðpush('<dd>%s</ddC ð % self.classlink(C ,<  @  úobject.__module__)£ ‚ 0/dl| %)
g údef spill(msg, attrs, predicate)Í #ok# ý  = _split_list(7 `  » Zif okI   šhr.maybe(«   ¯ >msg  lñ
name, kind, homecls, valu‚k  T >try„     > P= getÌ (P , k …  2 �except E ?ion\ ñ# Some descriptors may meet a failurº étheir __get__.C r  Ï# (bug #1785œ  * Cb�docdata(ä Ó [, mod# 5   OelseÍ 	W ]umentX Äqfuncs, ²es, mdict, }Ÿ � '„breturnÀÞ }éÎ"ú< =Í }" =“Ÿdocother(B¤Adoc J2doc¦¯if not doco‚'<dl><dt>Â! %rY ÂŸ  `markupç « ,ŸpreformatÎ/  Ð¤  jŠ "<tÞ `tt>' %[ 6 ßSE @ ?1Àattrs = [(naüme, kind, cls, value)
  ofor na- Ñ in classify_	 ß_attrs(objectL   if visibleR ( c, obj=2 %]
€ ¥mdict = {}  Š 4key¶ Fhomeº  � ~ :0  Ê G ñ[key] = anchor = '#' +Ö P + '- 9key9 :tryJ  N $` = getl é ,J 
ï �except E >ionL ð# Some descriptors may meet a failureÖ étheir __get__.¥  ” Ê# (bug #1785„   Ipass3 Ø R# The… ðnot be hashable (e.g., a data û Y withY  n ##  ¸ror listS )µ —O™	O AžTypeErrorAÛ 4 Qwhile› s+ jif mro  ¬ Athisµ  =! š.popleft(DOelse<  us[0][2]�  `  ð, inherited = _split_( õlambda t: t[2] is ˜ ) P  if*0ect% ¡‚uiltins.=F and=  % b! Ç „ & =¤ 	Á  u ‰continue Jelifj ‚ a 0tagnÛdefined here'K _7 ;ñfrom %s' % self.¸Ulink(.,X  ¼  À º.__module__ Ç Ê+= ':<br>\n'™AsortùdibutesÚT ÅÓ# Pump out th¯�, segrega%!by”
2¨ãspill('MethodsBtag,ø	h�1] == 'mG 'ë k Cß * q .¶M w cStatic+ x .sN y 	Œð("Readonly propertie‰ O" % r} r^ y˜  'Dƒª À           l÷ambda t: t[1] == 'data descriptor')
  Ðattrs = spill+ 0('D1  and other " ñibutes %s' % tag, )s,K V  lŽ ƒ RssertR  ² )[]W  €  ¢ ¥inherited
 pcontent „''.join( )& pif name[ @real :C  ª ±title = '<a* ó	="%s">class <strong>%s</ @</a>(E  I  [ $, e iOelses U ` ? = ‰   ! x ~ Šif bases‚ 3par;p1for0 1 in 8  è < Ñ.append(self./Plink(m ö, object.__module__) D u p+ '(%s)W3', Ìg Ë@decl©'{:tryØ €signaturÑ@insp…  (– Š òexcept (ValueError, Typ )Z ENone„ 5if b 
3 0arg‚  `5tr(% €  
4if (  v z!= '()'Q  0  ï1 + }sescape(; ¦) + '\n\n'Ídoc = getdoc0if U 
k 2   @ + ( Gor '¼  =€ `markup% , ñpreformat, funcs,  –es, mdictF    ý @'<ttlÑbr>&nbsp;</ttn6docÎ breturnk �section(IQ, '#0  G¤#ffc8d8', ƒ, 3, docTBdef ¨ vÊ»þA"""FÎ 0 an¬áument default ; Å as text."""§ „grey('='³Drepr‰Ž ©docroutine� ,™ wa, mod=
 i   o5={}r qmethods !cl> 
à ÀProduce HTML!ã aY !! aÇ 2or N ã
ò a$ =  __©%__¬   ! =Ð 5 or.  Ðanchor = (cl 4cl.E  1 !''à-J L 9 0notõ'pskipdoc 0' Òif _is_bound_Ê ˆ
!im´Ë  mQ__.__ Õ  }Zif clC  J ois not&  * Á ` from à  p ZH BÐ    else:
     øif object.__self__ is not None:
,  ðnote = ' method of %s instance' % J ¿.classlink(F  N { 1.__5 �__, mod)8 ?els” punbound’ Ÿ �  !img ,d e €if (inspòiscoroutinefunction(­ E) or3  Ä   7 Œasyncgen6 )K' �qualifierM % '[ ë " 	4 %'
/ ð if name == real 
r Atitl¶!<a* ó="%s"><strong>%s</ @</a>4…(anchor,P �œ �if cl andBögetattr_static(clI P, [])gR
¨  O Â  9  <a href="#°  ¨ Ÿ û  2  Pcl.__ý ¥__ + '-' +À � Ê 8 Éskipdocs = 1Y ë  3 ¡    q 	6 mQ = %sr	D  h ƒ a ¿  ¿ 0arg°! =®? %if‡#isÇ¿
n:try  v €signatur/Ú H m  2 ðexcept (ValueErr72Typ û 0 N º   5if   � ó Estr()  C   %ifú ®'<lambda>'T  / ³ k R <em>? `</em> ® ”	 F   b# XXX / ð's won't usually have P_annoßons['return']Q ðsince the syntax doesW àsupport but itTŸpossible.K ñ
So removing parentheses iP Ÿtruly saf@ ~
 ‚[1:-1] #U eS �  œ3ot 2 
  êW(...)Ó{decl = ÷"+ ª+esescape(G Q) + (Ÿ5and€  •"  0 ñgrey('<font face="helvetica, arial" !  N )))i-
Ê Ã‘ '<dl><dtF  dt></dl>\n2 Ñ • YRdoc =¦ nmarkup8dgetdocƒ,- ¡preformat,Y1s, Þ3es,¡ð s)
            `doc =  ðand '<dd><tt>%s</tt></dd>' %! '
  `return0 Bl><d0  @l>\n4 `(decl,; !)
= 0def ódata(self, object, name=None, mod
 !cl	 !):=  } ð """Produce htmlM ðumentation for a ^ õ  descriptor."""@ Åresults = [] spush =  r.append±  t !ifž …    4 B('<dý q<strong5 C</dt Ü )n  j = þ ò .markup(getdoc("), –preformat: i=ˆ µƒ6docA µ !/d¡” Î Ís'.join(
! ²docproperty) aÐ_otherÑ�*ignoredÒOHTMLÒ	Î lhÊ _ ¼| ¼ 0 = Š$ Uor ''ˆô  D +sDrepr†à SindexÝ Âdir, shadowe¥
Ê ÁGenerate an Î = ˜°irectory ofåIulesÏ `modpkgÓ �%ifq @ is #: E= {}Ò  ÿ‚importerRð, ispkg in pkgutil.iter_mod~ g([dir]Ã  ð
if any((0xD800 <= ord(ch) q0xDFFF)Ò  chX  ZB  F "# ë# aë q if itsKð contains a surrog4•characterÑ  I    / Iinue .¯ ((‰ C, ''ô  ¢ °)	 U  [9 R] = 1ô  \ Vsort(7  ˆ !en?À³ulticolumn(3 ¾ Flink> q: `bigsecµ(T1'#f Ñ', '#ee77aa',' p o)

# - [ textKgœð or

class TextRó  ÃA"""C  Lò safely making aU  %%ess³of a PythonÌÓ �__init__@d  a s . Ý!…maxlist *½xtuple = 20* 0dic* 1 0str¼ F « í"00ï ¦  Ô 1£ §, x, level­ ðif hasattr(type(x), '__87__')  Ú `method  { Z s_' + '_\B .@ {.split(�s  &, W p  t Z1get¥ 2 (Õ ;À  return craðm(stripid(repr(x)), self.maxother)

    def " _/ 0ng($ Á, x, level):%  ) Ötest = cram(xL 7 )'  P ! =W (7  °if '\\' in  B and 0not qreplace6  F 0, r0 G, ''‹  � ð# Backslashes are only literalL Bthe ž g  # Unever« G ó%needed to make any special characters, so show a rawX .K Áreturn 'r' +Þ  Á 3[0]   : 6    • 
  ‘E  2ing ±�instance³&ryÀ î m Ä   &ngµoexceptJ T'<%s ‰ ñ>' % x.__class__.__name__

 Ã TextDoc(DocÎÒ"""Formatter % òfor text documentation.""" ?# - J fc Òing utilitiesM _jÁ ! =£ R1ÿ   : = ' . @  �Cbold„ ¸ Ú  oÞ # a2 ˜ 0 € by overkAkingß  3   ¦ð''.join(ch + '\bW0ch   chI n ˆ gindentŠ  , prefix='V AA"""I.   by* @pend#pa given 0fix™each line§ 0if ¶ † %: ´ Ù 0 Rs = [… ! +B ¿   Á Õ.split('\n')]= !if. "s: f[-1] = .9"p(¥ Þ € #\n6 d sä0secHïitle, contents´4 d with 0hea'	dclean_N " =j‘ )¶  t. (t˜ )ðnð
Y  Bn\n'õ
‘--- type-Ý¤fic routin
 Ê($reT�tree, modÈÖ, parent=None\XdRenderÞ# aÖ J 3 as( ed inŒ Qt.getû $ )()YPresulw%'' Qentrye :reeš!ifè (# B) is '()å 2  pc, base§/ d     € 	 ++Ø  %(c#� =   #ifb  êl B!= (J,“   5   – (f Ecÿ R v À            ” result =	 û+ '(%s)' % ', '.join(parents)
  >  9\n'' òelif type(entry) is I[]):*  \ Q ýself.formattree(3  7 [ ð	, modname, c, prefix + '! '¼ creturnð 
O àdef docmodule(r  , object, Q Q=None_ 
 ¸ ð """Produce textF ðumentation for a givenœ 3uleW A."""z  œ  b $ =  __ ñ
__ # ignore the passed-in� ; ñ
synop, desc = splitdoc(ge Ã )û í ã @.sec¦ r('NAME'ê A + (U Ñ and ' - ' +  H �all = get”(g Ð, '__all__', 0w Qdoclo¡  Ì� 3loc9 ( i† + ais notG 
$ Ë ð MODULE REFERENC× ~  + të
The following¯ñis automatically generated from‰ñPython
source files.  It may be incomplete, €rrect or ðlude features that
are considered i; @adetail‹ _ 0vard ctween ‰ 
2  Œ áWhen in doubt,^  â FmáÐ reference atÕ B
loc±0lisî ²above.
""")! § ž?esc�ÂDESCRIPTION'¨R  clÖes = []Ó 4�key, valuPó inspect.getmembers: b !isL ™ ² S# if •õ# exists, believe it.  Otherwise use old heuristic.’  K @if (ö™	   $ Hor (¬ m(Ç )( 
L D  if visible(	4all�á  2   ý ¢es.append(7 y ^Ofuncl3{routine� nK= orqm—isbuiltinm  5	‰#isj¿  H~#Y|Odataç)sA ± ­  E ð .append((key, v“alue))

  Ìmodpkgs = [] P_name Uset() õif hasattr(object, '__path__'):(  b ðfor importer, modS ó, ispkg in pkgutil.iter_modulesV .T S  W ¶ ¡ S.add([ ¦  '   "ifn 
˜     I e.appenF þ  + ' (package)'U OelseQ qv 8sorY  “result = 	 ù + self.section(] 0 ð'PACKAGE CONTENTS', '\n'.join ÞñÃ# Detect subq  as sometiïõcreated by C extensionsz 8 	5 ë`key, vd Ýôinspect.getmemberÛ$,  "is„ ä"ifF !._ãà__.startswith(C ¢ð .') and key notr Ï5 s¡» ñ6keyÞ'if
> : µ1šSUBMODULE¯f ²›if classeÒ  0lis.[u„% &esÜ 5pcontentÛ[_@formÑ.eeb«1getM Qtree(
  | `, 1), “)d ‹ 
Y� •“ ‘document(Ú ,æh ± = (1k'CLASSh fLfuncd*à ?   ¡ m Þ BŠFUNCTIONHs à Jdata~) 
ÿ ¶ ¿>  ( B Þ ]other¼Ï, maxlen=70)ÇIDATAÛy ä š 0verÂ� E = sÌ3.__ *__¢  ”J À[:11] == '$'‰@Revib 1: '‘A D[-1:' 
w 9% 3 = 
 ×[11:-1].stripo - å”VERSION',M » ð if hasattr(obje÷ct, '__date__'):
  “result = 	 ô+ self.section('DATE', str(object.J %))I …if hasat% q oauthors lAUTHORu N w creditsx |CREDITSy P z :tryG°file = insp$`getabs 6,ÿexcept TypeErrorH Å'(built-in)'f¢«0FIL« v o creturnÞ
L Ðdef docclass(î", Ûó, name=None, mod
 ‡*ignored:ð """Produce textO `umenta5Ñ for a given f ` A."""‚  €@realo $ =  __ %__#   ! =• D or 2   Xbases@  "__ç  e  ë @makeJ b(c, m=ê ·.__module__Ö  2 0· 6 )R "if� =‡Â 
Â1tit'C 3 ' RTbold(Ã  OelseA  š.6  ˆ s) + ' =P V L 1if 
O `parent'Dmap(,+ ˆ  ü »  ó+ '(%s)' % ', '.join(N Cconta %[]Œ @push®  v.appendGAˆsignaturF ER(ValuG,RÒF 0 = Û¤ 5if  
40argÈ! =ø% 
.4if ( 5and z!= '()'Q  ^ (Ë% +- g+ '\n'NÍdoc = getdocö i¸
Z V  6 K ð# List the mro, ºµon-trivial.Çmro = deque(À4mro� ø ÿ if len(mro) > 2‹  p"Methodq1oluvorder:"F   $ ®0 inŸ 
J  ! Ù '
  í¸(4 ‰   * Fû HA sub’!es'anÂ  óeorted(  c ( Dcls.¤)å0clsÀ vtype.__F $__;	F ƒ(t I ð.startswith("_") L! ¢Q == "È iins"),T Õkey=str.lower Ð)
        no_öof_subclasses = len( 3)
  õMAX_SUBCLASSES_TO_DISPLAY = 4& 6if = :  D èpush("Built-in' "f  ) 5for Yname . /[:Š ]q  L u '
 9' +V 
t jif no_/> j i 	¹... and ' +  …  Mstr(m -m )I f' othe-:es'Ö þ 5')
‰ á# Cute little öõ! to pump out a horizontal rule between sections.L > H0 JRuleúdef __init__(self)     Å.needone = 0_    A _maybe>  p4elfA _  F z-' * 70"  ‚ 1‚ Zhr = à (L � ûspill(msg, attrs, predicateì #ok# ý  = _split_list(7   œ ^if okÖ 2hr.Î í >msg  X Pñ, kind, homecls, valufk  † >try„     > P= getÌ �(object, k …  2 �except E ?ion\ ð# Some descriptors may mee«afailurº Ötheir __get__£ n  Ï# (bug #1785œ  . C�docdata(ä Ó o, mod)= ;els O  	W SumentX 	ò.   S€ ", fˆ breturnŠô¨G³Î	mÄ< èµÀok:
          ÷doc = getdoc(value)
  Otry:  " 2objE ÿattr(object, namM ÿexcept AttributeError_ ðhomecls.__dict__[` ]” ñpush(self.docothe• ’ ÿ, mod, maxlen=70, doc=doc) +M  á Z '\n'preturn ò %s
9  P = [(ž ß, kind, cls, ]1for+- Ñ in classify_	 _` b
� §  if visible „ Bobj=”&)]ª Rwhile¿ 
zjif mro  ] Athis…   =! š.popleft(‡ Oelse< Ã Z[0][2½ ó, inherited = _split_list( õlambda t: t[2] is ˜ )Ý  ° 2if ö  % Ónot builtins. 6and=  % ! Ç „ & =¤ ø q   ‰continue Jelifj ‚ a ûtag = "defined here"K _7 ;¢from %s" %A),S  ·  ¶ ».__module__rAsort¢Õs³7 , Ó# Pump out thˆ�, segregaþ!by=.¬ �ðspill("Methods %s:\ní Btag,Ôä 	D�1] == 'mJ ãn C‹ * t 1MP z oStatic{ 8sQ | 	ÿdescriptors("Readonly propertiei† ra y› WData ­ ˜ d^ – 
Qata("�  `}’˜ !)  ‘ 'Raassertl sÔ[_À attrs = inh“erited

  ôcontents = '\n'.join( )' tif not  :  G áreturn title +H     å + self.indentm ô.rstrip(), ' |  ')L M ðdef formatvalue(C –, object)� A"""F& ñ an argument default ; Á as text."""[ Ä 4'='Ÿ Srepr(` 0 ƒ šdocroutin‚ ó, name=None, mod
 !cl	 
  qProduce„ A doc£ Pationá q a func “or methodè ²  alu $ =  __ %__Õ   ! =› b or re2   0oteù' pskipdoc0 Òif _is_bound_‘ y E`imclas= 80.__§Q__.__ œ 0 Jf clC  J "isx&   * nÁ ` from »g  ø (C �É 6 Oelsev ¶  ~  Ö0  J € ö of %s instance' % � O 9  v ,»   8 ¿   � !un­ � š 
‹ Bmod)Û > óif (inspect.iscoèŽó= orË 7 Œasyncgen6  l ' �qualifier„  Šæ " 	4 '½  ö5 ==ç
³ž={Tbold(t i¢@ andÕõgetattr_static(cl,q P, [])5Ò
€  ö ^1D�  Í  % +d 7 0arg«0 = Ÿ		ŽÃ»
’ :try £ pignaturH s H …  2 �except (V—±Error, Type ÷ 0 N »    5if   � ô Estr() ÁG Þ ®'<lambda>'T  3 	: ™ 1  b# XXX # ñ's won't usually haveÌP_anno/Rons[')']EQ 0sinàhe syntax doesW àsupport but itgŸpossible.K ðSo removing parentheÿses isn't truly safe.
   £argspec = 
 õ[1:-1] # remove parenthesesA dif not2 :  ` G ¥ = '(...)' @declh ôsyncqualifier + title +O   +] %e
8 ºif skipdocsk qreturn X V+ '\nl Jelse-  doå ögetdoc(object) or '5  ¿ T @ + (= ð and self.indent ²).rstrip() € )¶ Àdef docdata(3 ", q ó, name=None, mod
 !cl	 )± ð """Produce textM ðumentation for a ^ õ  descriptor."""3Åresults = [] spush =  r.append±  ú  Õ+am6 4 Ã `.bold(¿ %))R  7 "  |  ./= k
i!ñ J  /bV # 
m ±ƒ''.join(Þ ‰Àocproperty =F 5ó ¤Qotherâ ¥©ƒ, maxlen 1doc
 À!¼Bpr =kDrepr­v#if€ 
?qline = ¤ ­ ­ ˜ ‹ê § S K  Tcchop =S p - len(L 
z1if ) P< 0: D J@pr[: ]h 6...L B 	Ž ÙE 1 ™  �oø
å [Î Uˆ !+=" +VÁ1strÅ  TH S ; ó

class _PlainTextDoc( ñb"""Sub( 3of  ð which overrides *¤ng styling® ‡  ,îW  œŠ  _

# - %ð user interfaces

x `pager(] s ð"""The first time thiJð  called, determjÑwhat kind of J 0 toh Íbglobal \&  (c ‡ ˜ 2get — qDecide u cmethodn ápaging throughE† Jðhasattr(sys.stdin, "i #y"f ppíƒ ¸ C ?outD  .} („ M 5out û˜ Ause_¦ ð = os.environ.getó('MANPAGER') or os.environ.get(' ñ
    if use_pager:  õ.sys.platform == 'win32': # pipes completely broken in WindowsI  M ñreturn lambda text: tempfilex p(plain( &),� )F MelifÆ `TERM')u ö('dumb', 'emacs')É €  Ã | /seP  Æ Å ¿ %; ¯ ?if ž  õ u‚'more <'tðif hasattr(os, 'system') andˆ ð('(less) 2>/dev/null'),01Â 	ý}-'G 1')
½ eimport! P(fd, /uname) = 0.mkš "p(¸ ²os.close(fd 6try‹ Ö x"%s"' %v '= Ø dÜ  N W 4 /elO6ttyâgfinall¼ ¥os.unlink(a

def ;ê ð"""Remove boldface Ã±atting fromƒA."""\¡¡re.sub('.\I!',& )e #ipª±3cmddñ """Page through5 € by feedp õit to another program| ì’subproces8  6 =  ø.Popen(cmd, shell=True, stdin=( ?IPEù ðwith io.TextIOWrapper(g .C ð, errors='backslashreplaceósð] Â  	X     ûb.write�_    ú	except KeyboardInterruptX  * ð# We've hereby abandoned whatever … ¡�n't been u Iten,r L �but the \� is still6¡control of! @termv.E #pa™Ä 0OSE/º  ! ` # IgnE €s caused2quiƒŽ r `while ÙY g´Cwaitñ ä   QbreakG   ¨ l± �ctl-c likÇ*àtself does.  O¿9wis" ® q   °# left runnù * ê W {±in raw modeJŠunusables Nw
° ö/, {Àh text by inðvoking a program on a temporary file."""
    i t     	 ename = 0.mkA !()! ¤with open(+ ñ, 'w', errors='backslashreplace') asy :A  z  ; ².write(textZ 6try" ños.system(cmd + ' "' +G Ÿ R+ '"'8 jfinall< eunlink£ ò)

def _escape_stdout{ s 1# E ñ non-encodable characters to avoid   eñ a laterÚ  â= getattr(sys.n 4, '  ñ', None) or 'utf-8'@ preturn ., !e( _ing, X f.decod% æ ˆttypagerà ñ """Page throughd x rmFïlines = plain(8³).split('\nˆ	À\!tyÛ õCd = 0in.#noV    ol! dtty.tc@"fdä     ¨setcbreak( 0getª§ = lambda:g bread(1F ‘except (IùE±³, Attribute ò	io.UnsupportedOperation))‰ ! =ÃÜ ‚  PÁ()[:-1][:1]
9 	1	  f òh = int(os.environ.get('LINES', 0)Õ  , Ù BValuÇ ­    K 0s   žif h <= 1% %25& r •c = h - 1 Á3outÁ `.join(å €s[:inc])³ v bwhile # :r:]| U £-- more --^ D   + WflushA   ± �"()g    ÷if c in ('q', 'Q'Ó     ^ Ÿ0'\r  +\r�   �  &elk  \rl  

ò  ( m $ +1]P A    ¨7r +¢    ‰continueœ š b™ B O\x1b[ a- inc  	J  c  if r < 0: , c  Þ  nÃ0Or:r+3 F  X  ß 2incÎîWif ttþ 6  +3tcs…0fd,# ó .TCSAFLUSH, old.â0ñ	Simply print unformatted<ð.  This is the ultimate fallIp R’ ãdescribe(thing¥ Áò roduce a short ( àption of the gñiven thing."""
    if inspect.ismodule(" !):  $  ò
.__name__ in sys.builtin_8  s7  ; �return '* B-in + C ' +‰ T n rhasattr‰ Ç, '__path__'• ^ packageV 	Oelse› ’ 	 Æ "in˜ Œ æ �function’ 	V ó getsetdescripto÷ _  )  * A %s. U' % (B ±Äobjclass__._¨%_,|	 Ý,H  ) 	¾ fmember” ) ¾ |³  ÄñK ! N omethodL  J �4typÊ¸Ð

def locate(SÓ, forceload=0rA"""L" à an object by ² or dotted > õimporting as necessary]�parts = [	  k  	 !in? á.split('.') if ]`’Ñ, n = None, 0 àwhile n < len(K s´  òBnext: r = safe�  ` C.joi1 w[:n+1])ù Ô B 6if E :«‡    1+ 1‘  5 Ya break #if9 nE= ' 7 
  E " bs 1for oî F[n:]W 6try 	F 1get@W ,E ç úexcept AttributeErrorJ D }Š  P _

# - Â interactive bpreter ðface

text = TextDoc()
pla7   _P  ²html = HTML- ÒcresolvïÛÔGýÓAor a‡6 toê”, get theúqand itsÿØ …sinstancv 7strŽ+$ =n�› �$ifl !isï‹aaise Iiªñ
('''\
No Python documentaqQfoundkð%r.
Use help() to gòet the interactive help utility.
Us ’(str) for  !on8 ó	str class.''' % thing)
  âreturn object,  Qelse:
  * ñ name = getattr(E P, '__ �__', NoneW (  % ð  if isinstance( !, ²  j ? ô

def render_docg ðtitle='Python Library Documentation: %s',ý •ceload=0,¼ Q 1er=£ Ô A"""Rh x text dL ”, given aÖ or a path to A."""e iµ Qer isË f  :~ ! =k 1 n ¤ = resolveï 2forÅ Opdesc =  Rribe(=  Pmodul™Áinspect.getm 	' 1if k ¡and '.' in ¥  ] A +=  1' +  [:5 Á.rfind('.')]½ Relif e  Q  cis notIZ +  a  .A
[  ¨ Dot (Î "is' Í 1 or(  X * ä) eroutinHT 	@dataoriptor] @_get°›)ÿ A# If‡cpassed &°a piece of g d$n  ¾#�ñ its available methods3 0eadI  ! evalue.'aif hasµž ¶—origin__'«  Q# # =¨ 4.__* Q  ®à 	5 5typW0  "  D_a ' {Þ! %á€ + '\n\n"9.�€,�)- veH &'koutput$qDisplayºˆq%6try72if p  
 —  0bpager(	æ) 3 — Ñ o.writeL P, plae#xtW ñexcept (ImportError,  bDuring Q) as uÄ aprint( ¨† ­ä#=0ƒ@"""W« Z HTMLlv@ filNõcurrent directoryŒ	gn1h F y€ = html. (ºv, “Ž‘with openè Ö.T ñ	', 'w', encoding='utf-8'D à CÀ      file.wÃrite(page)
  òprint('wrote', name + '.html'' ñexcept (ImportError,  bDuring ») as value:]  €)

def wƒ òdocs(dir, pkgpath='', done=None)A @"""W. ñ0 out HTML documentation for all modules in a directory tree."""� !if_ @ is b : A= {}  K iÞ 0er,Q  p, ispkgX õpkgutil.walk_packages([dir]Ä ¶  Wå @(modJ Gñreturn

class Helper:
€ °# These dicÛ òaries map a topic—ðto either an alias, c tupleI ð	(label, seealso-items). b ! " "Athe  @ of  ÓcorrespondingM !se�   # ð	.rst file under Doc/ and� ¡index intoN Ê yK áin pydoc_data/Ö Rs.py.  ó CAUTION: if you change one¦ $ð, be sure to adapt} M  Š @list@ bneededö / À ðtools/extensions/pyspecific.pyÞ O  regeneratem Ö %vby runnOŽ  Bmake= -h &inaqcopyingq SoutpuˆpFLib/ý.WÁkeywords = {^  | Æ'False': '',   =Tru( ì__peg_parser__2 0and xBOOLEAN`  as Jwith ±sert': ('as W, '')˜ Sasync!  
   3waiA 
   Qbreak@ 
 P, 'whÂ9fori –) 
 ú
, 'CLASSES SPECIALMETHODS6 Qontin'4('c e 1defc 1funY'¯ 1del!   �, 'BASICx 0eliJ 8'ifOeÙ!('	 † Ð �8try@ finally !or˜  61, 'L ð  R	@fromG Ud Rglobaå  ú, 'nonlocal NAMESPACEgí (î É 'TRUTHVALUEs k  L Œ, 'MODULM nË  in~�SEQUENCEei´™COMPARISOÐalambdaI  p, 'FUNCÀ
½ Ý -  2, ' ô  noØ'L Œ 0pas³ !('	 \À        'raióse': ('raise', 'EXCEPTIONS'),
  r'return+  ~, 'FUNC+ 1try(   Q Bwhil{ 
 ù, 'break continue if TRUTHVALUE� Awithc 	 ö, 'CONTEXTMANAGERS Å i yield>   õ 
 4, '  }ñ ò# Either add symbols to this dictionary or e%  I ñ&directly: Whichever is easier. They are merged later.< ð_strprefixes = [p + q for p in ('b®f r 1u') q £"'", '"')]M Æ Á_inverse = {  ßÑ'STRINGS' : (9 3"''@  E h""', *� ‚OPERATOR?  '+Œ - *  / / %  <<  >> &&'f Ž   '|! ^ ~ 6 
 = > = ! $<>Ê G ±'COMPARISONÜ 'A RUNARY< Ô ~_ ð AUGMENTEDASSIGN , +� - * / % & /|=ù  ½  !'^, !<< >ñ *S )/=Ž rBITWISE‚ b K¿ #2LEX6 jV1J')ÿ	1U%': 'ù· FORMATTINGÓ 0'**& XPOWER , ÖTUPLES LISTS F
 '.' ðATTRIBUTES FLOAT MODU9 xOBJECTSX !..3 yELLIPSI :L @SLICæ1 DI´©ARYLITERAL, @, ˜def classa  \\ ,« _ ¹PRIVATENAMEP _ é SPECIALMETHOD- `J ŠBACKQUOTH ( 71J CAL¿ )' [' ~´SUBSCRIPTS #ö ]* * ›dtopic,_‹_B{‘.items():;  æ 9 %  0 
 &s_   $ Y   R.get( !,  µ ,   "if @ notV # sT  (  " =. ’s + ' ' + ¢  * m "s[ ]3 
& H W`TYPES'hPtypes\>Ð UNICODE NUMB°áSEQUENCES MAPP§'X  z  q` CLASS0  FIyinspectt ‰ ðstrings', 'str UNICÿODE SEQUENCES STRINGMETHODS '
   õ'FORMATTING TYPES'),) 'B ó': ('string-methods', $ &S I 	C   @ bformatF ? ŠOPERATORy wUNICODEs - ÿencodings unicodeî :qNUMBERSu anumberu ÿINTEGER FLOAT COMPLEX- ( ? Sinteg@ šint range N , €floatingM Y math- u / �imaginary0 �complex c3 5 €typesseq4 	Õ·¥ Z LIST�pMAPPINGç'DICTIONARIES'*1FUN  % !('o �functionE?def3 œ£ X`class 8 CLASSES@   $bOBJECTx `bltin-q-object|  %Eile ¤ J   üJ  È J   s>  VFRAME? 'N 	�TRACEBACK¨  2NONìÁ Cnullw  ±	pELLIPSIH "('/ ‡ellipsis3 ASLIC³	Îò PECIALATTRIBUTED ¢specialattï	n {¡ � šSN Ã» PRIVATENAMDSMODULl @amodulešiimportr aPACKAG0 ' g¢EXPRESSION½ Óoperator-summÿlambda or and not in is BOOLEAN	 'hñARISON BITWISE SHIFhBINARY0_POWERO 	U2 pÄ SUBSCRIPTS ¢Ï CALLS TUPLE¥œ ˜ €ÝH8: ''>`PRECED'% Ç'('EÓr 
#L2namàTBASIC" ’ í @   'DABLE. Ñ – M Û, ÖÎ « Ì �customizaÄ ÷ëhash repr str þ K é O  `±ibute-accesÿ) SO 		N ðcallable-types', 'CALLSó SPECIALMETHODS'),
  ”'SEQUENCE õ: ('sequence-types', & +S 0 % 'K R 
 '{ MAPPINGz % SÄ 	hNUMBERH vnumericÁ # ðS AUGMENTEDASSIGN Ã 
À 	 EXECUTION'5�execmodel0ðNAMESPACES DYNAMICFEATURES EXCEP6 
ˆ2 N `namingK ÷global nonlocal ¹ @DELEJ d 	á€ ^  dy` ‚c-featurã	5 0SCO›G': '™ 7 FRâ   æ qceptionN`try ex é finally raiseƒ ±CONVERSIONS´ tconversD 	, ¢IDENTIFIER, ¡identifierp „keywordsD/ 	'  ½ �id-class( qPRIVATE$¦ [atom- 	« rLITERAL¨ . qliteralª „STRINGS ¯TTUPLE3 ©U'LIST% 0DIC4ARY 	€ R  ~ Ô'Ø 9  þ �exprlist   %S ! > †  Y !('7°seq-mutableÇ  7   q m  3 l å 'IEs Cmapp6!    { @dict­  /IE� ƒATTRIBUT ð attribute-refer=00get A has s ? µI’SUBSCRIPTÛ vsubscri?ƒ	ß@SLICB�qslicingŠ 5 	3CAL‘2cal‰bEXPRES~œ QPOWER] Ppower-+ QUNARY+ _unary+ 	%BI, /bi- �SHIFTING[ Sshiftô‰ qBITWISE0 @bitwj?, '/ ƒCOMPARISØƒcomparis¼6 o BASICÂbBOOLEAbbooleaù= ©TRUTHVALUEÁPASSERÁ \ u(rt þÏ ‘assignmen·ÝÀIGNMENT'),
   ð'AUGMENTEDASSIGN ò': ('augassign', 'NUMBERMETHODS'),
= ÷  'DELETION': 'del' �RETURNING hreturn cIMPORT himport PCONDIZ  AL@ (if BLOOP:  ('compound¨ ù	for while break continue³ ¡TRUTHVALUEé Ptruth= #if< ÿand or not BASICø DBUGG„ €debuggerG 9pdbo ñ CONTEXTMANAGERSt  ˜ Àext-managers8 Dwith9 !}
bôdef __init__(self, input=None, out !):1  — ( !._( " =0  8 # =A l ‘@property-  z C w ^ È e Ïor sys.stdinL s M 
#  yN 2outO  � c__repr� öif inspect.stack()[1][3] == '?'!()á     Ð %''  `<%s.%s^ ¡tance>' % Á ö.__class__.__module__ø V  8@ ²qualname__)í à_GoInteractive¥Sbject· Ccallª, request=9 
#$ 1 isÖ† 	i )c.help(: 5Oelse-  Sintro¥ þ g iÍ  óð.write('''
You are now leaving ‡  “™  áto the Python b ðpreter.
If you want to ask E ñon a particular oZà directly fromY 
R ,O  can type "I (9 °)".  Execut•  à'string')"
hasN Ð same effect   yp/ 	Š 5 1 at1  d Ó> prompt.
''' ý› 1actŠål
P6\n'·;Tru½:tryÎ ½õ" =è’getline('™ V  -   !ifX8 :~R " ñexcept (Keyboardäçrupt, EOFErrorÎ  2   Æ	H c $ =ø.<#p(# 5   À# Make sure ÅAific@rail1quo¶°marks of liu‰ls don'tt Ó# get deleted$PcleanI &	/ uif (len;C > 2Áª![0žÊ ÿ[-1] in ("'", '"^  Ñ @  œ$ino[1:-1]@ d .Àst[1:-1]
     ôif request.lower() in ('q', 'quit'): break
3   7 ¹ == 'help':"  & Éself.intro() Oelse/  K (“ !)
6 Àdef getline(S –, prompt)C À"""Read one ( ñ, using input() when appropriate."""\  § 0if W .- Ö is sys.stdina  ( creturnT ƒ E Ó T Üoutput.write(4  U & [flush+u ' ¡ P.readä (6 $ ,Ïuif typeV ã  '''&  � x$ =F k.strip“ ý¢keywords':GDlist : +el< isymbol;  : Ytopic9  8 imodule9  : A[:8]é+  í ü $ o¼.split()[1]"in=þ KBshow N C `['True»AFals	 jNone']É ëô# special case these ·Q sinc õy are objects tooñ E   …doc(eval¢ ÿ , 'Help on %s:'²  ´.w ö ÍS 	u 	E80 sA  : À øº ", ¾=¥ _ Ï "seC ?str? Ç •isinstancž , =2er)Ì •b¯ 'Å Ä �G'\n'D© '   .6 ð''
Welcome to Python {0}'s ‡ð utility!

If thispó your first timeŸ= ð, you should definitely check„ 
the tutor° on®ñ Internet at https://docs.p’ ”.org/{0}/8 P/.

E4 > Âname of any ±,þQ, or P à 2get× 0on ÆBing
·  †™grams andÑ R ps.  To F 5 
Ý!to” iž  preter, ju+Pype "A `".

To0 a f½ „vailableq Ä 2s, 8sÎ Às, type
"modñ ules", "keyword `symbol óJor "topics".  Each module also comes
with a one-line summary of what it does; to list theG õ s whose name
or; ñcontain a given string such as "spam", type "m’ !s  ð(.
'''.format('%d.%d' % sys.version_info[:2]))

    def ˜ ñ(self, items, columns=4, width=80):0  4 % # =8 aorted( %))$ bcolw => 4 //R   ³rows = (len< $ +% _ - 1)5 ðfor row in range(F ™  �  $ 6col$ Ì '  + 0i =s   *U 0s + ¡  !   vif i < ¨     ?Ò.output.writeÖ 6[i],   !if{ <  k ô Z  . ^ `' ' +  1* (mV- 1 -¨  z �F ;\n'	5ƒ  Á''
Here is a ö´the Python K  >„nter any  ð get more help.
½-p š.L \keys(¾µ´ )Ãpunctuation O d whichÎ `assignjõecial meaning
to. Eß ; Þ 6 sæ Ý „Ü %¢available H 	� �² : ±  Ashow ° ,u ,ç—_xrefs=''V:tryöñimport pydoc_data.N s˜�except I( ZErrorA 8	‰“'''
SorryŽ E and‡‚documentùvis not 4pbecause¶
k- "œ q" could; �be found‹Î ereturnÉ 0tar!= ² æ Q.get( , ÷ Ô!ifs I :no í ¨  0@%s\n)Brepr f »  !if~(z ) Ž(Û8 Ë 7 „ 3 qlabel, ,2 = , 50^doc =/6[N ]? ð except KeyError7:
  ÷4self.output.write('no documentation found for %s\n' % repr(topic))
N u returnb Pdoc =N õ .strip() + '\n'! Úif more_xrefsš  B = (	 Qor ''@ G ' +6 L + 
G õ import textwrap.  ¶   ñ = 'Related help × !s:f ’', '.join… �.split()‡ Ç  M  ^ Cped_U     . ( J, 72.  +=Y q  7 O 6 ±pager(doc)
Ê �def _getµ (Í,Á ,"F='')A"""R¦ò unbuffered tuple of Ö!, J").f  ß ñIf an error occurs here, the excep,ñis caught and displayed by°  J  1 ·url handlerd ‘This funcK ¡duplicatesd Ashowç ³ method butpUs its` ðresult directly so it can beÆ0matí Ð  0 inÝ Phtml b.L 5""" 6tryF É [±pydoc_data.  Š ! IƒE;
A .£('''
Sorry¼;pkeyword=‹ð	is not available because"�
module "‘ q" could;  und.
''' ,Uâ €arget = IÍ D.get ™ s ) !ife tI í ¡aise Value&('• Bfind¸'L ²isinstance(S W, strÍ ‡F´ 0 _Z Slabelä2 = +  –-= E[= ]. Â9Ê 3doc�  å þcsymbolæ Æ ½ "s[ ¯ ¢3, _a þ `.partix7(' …ó } 9 	ž Qlistm~sŸ :keyw[if keA] 
}Ð''
Here is a W  •[ ð whose name or summary contains '{}'.
If@re a Âny, enter a G @ 0to ë ÷ .
·.format(keyÕ eqapropos üJelseåÒ ±Please wait‡  [Ñ while I gathŸ î 7alláµ 2s..¢ Å –  U = {}–    3ðcallback(path, modname,ó  desc, modules= K):
   if% „name and þ[-9:] == '.__init__'<  K 1mod= =; ÿ:-9] + ' (package)'v ï.find('.') < 0d  Æ [l Y] = 1S Ãdef onerror(% ë  Ñcallback(None º  ,  )P M7äScanner().run(> ,j =r 
; �self.list‰  ¶ .keys()&  ðoutput.write('''
Enter anyL@ule   ñ to get more help.  Or, type "mª ps spam"+ £search
forE cs whosL ñor summary contain the string "F €.
''')

l p = Help‰

class °p"""An i¾ ¢ruptible s=b that • #es“ á synopses."""
z Â f ?&, l@key= ³, completer ~ ípif key:   = A.lowÀ  ®   c Ñ.quit = False�  ren = {}”   H‰ò in sys.builtin_{_ s 1   T¯!= '__mainBOseen×L akey is§
h      /Ù Ç    OelseF  É Ð = __import__Â  î).__doc__ or 'Í _  o! =±õ .split('\n')[0]^ '   W  3.Q- ' +·2 "if] Î7key) >=8 n  ± )èø 'eróispkg in pkgutil.walk_Ø$s(„ ‡ { 5if lsVbreak� 1 ì
Ì èä>try†  w espec =ã P_get_ (
Å < àexcept SyntaxE�d ð# raised by tests Zpbad cod|pcookiesc?BOM ²6inu° �   �loader = ¶ . B ²if hasattr(" 1, 'ê kource'¼ W   5  s; 2 = Q .O ;‡  8 5E<?ion3 * iØ$  ( �Àor(modname)
  Ÿcontinue
  òdesc = source_synopsis(io.StringIO( �)) or ''F ÿif hasattr(loader, 'get_filename'):8  ’ rpath = 8 .6 @(mod> )< OelseV >Nonø : ?tryS ðmodule = importlib._bootstrap._Á _(spec¯ qxcept I< _Errorj oif one$  ;% ( ) mß ú.__doc__.splitlines()[0] if "  GÕ1get: 1,'_@__',™) î  =i 
  + ' - ' + §0if ' ÿ.lower().find(key) >= 0_�callback(¢ ,j ,a %)
c »if complete¨ ñ ()

def aproposy t ð"""Print all theÍ-K o ðule summaries that ž°ain a substwA."""�  b ´ 
s  å¢ ö[-9:] == '.__init__'(  , Zl`[:-9] q–(package)ëpÎ f,f and '�Ì ® •y ApassÕ ôwith warnings.catch_ (+ t.filter Ò('ignore') #  À problems du@¤n  ð MÝQScann+Drun(W`, key,¥ r=À o)

# - ò enhanced Web browser interface(ð_start_server(urlhandl+@host· , X @"""S1 ’ an HTTP 9 ‘ thread o/qpecific8 .¾5 zML/text: �, so HTMLÏ ò documents can b0Å €d dynami+yóÕ ‘actively Éaö `.  Exa:  u ‚3>>>•B time  š RpydocÆ   ÓDefine a URL -p.  To d—m w@ cõclient is askingx ¡for, check‹ L  » tƒent_type: t €Then getágenerate some +"or;Acode—return itD  Ò  	smy_url_º  ò,ëw é w 0... e 0= 'Ò  ª sÔ ÷was: (%s, %s)' % K Ànt_type)
     0... á return text

 õ   Start server thread on port 0.' £If you use T, the8 òwill pick a random& fnumberF pYou can; nL x w .t `to get" 
C Š 2>>> 9= 0 L ° = pydoc._sà _ ñ(my_url_handler,H )’Check tha€ 5 ± is really L õed.  If it is, open browser� 1andÆ ô first page.  Us0ð aurl asë Z 2ing, ’  í #ifg7  — Eing:n à!imA4web� " ôThe next two lines are commented out so aÊ ‚ doesn'tß %ifJ `doctesû @ run*Æthis module.¹ #• Ž .*(½ #erÊ Eurl)Z V#TrueA L1 ` do it,ñing. We just need to monitor# fstatust w time.sleepæ  ¹Eloopå 1hog†7CPUÃ  |˜ > 0 =  ¶.monotonic(º  )    E4= 1Z †#secondsà T7pis a shlA @for b{urposes• KwhilK &µ ú F(.01´ Ÿ ] Â “ ñ " -  ! >[ =outˆø  ’ éGstop1} * Vbreakð Print any erroróûat may have occurredp6 
]? ñ @Nonel0"""  .Rhttp.¬  Áemail.messag7 0 hselect+ Ì2ingÄ ¢class DocHe(b ó.BaseHTTPRequest# "):;  ödef do_GET(self)^  �"""Proces8rE Ô from an HTMLÀ 8   ÀURL receivedÔ0in b V.path. .  Ge�P  ¼b - 3url="zsend it? b K   c"lfi û endswith('.css'à  / ðcontent_type = '¯/, u "   Jelse  < Yhtml'= Ë  ¼ Ö_response(200, K $ ’header('C™ ø-Type', '%s; charset=UTF-8' % ‚ Q  Bend_P sp ±wfile.writeÿ.p(Â 2  ¾,v À.encode('utfƒ-8'))

  õdef log_message(self, *args):&  - p# Don't.  . )s." BpassZ ñclass DocServer(http.s R.HTTP "):.  ^  ˆ ƒ__init__… ûhost, port, callback”  ® .( 0 =  	�  ¡address = V - U )- f % =q % [base.« k !,  handlerf  Êquit = False"p_until_& ³ ó ’while notg  ' 
¨ NÀrd, wr, ex =( Áect.select([ž ósocket.fileno()], [ 1²  N ^if rde   M ë š_request(A " Ù ‹r_close(~ ractivat‚ô D x- 	¤ ifñ $f.Ì¸ N  c‡¶œ�Thread(t Bing. ³2url!r,�j
„ € * 6 =  	Ë )  ×Þ p = int( 
z¼ 
µ
, k  ]5ingœ á ! »error = Nonº2runJ
ë Ð"""Start the _ ier."""æ :try5  s ;.÷  B	I 
8 ˆ  =‡H�/  ".MCºƒ= email.è @ 	Ä s±taticmethod. 
y µ PdocsvXö 4  ûN Þ  ˜yE ¡ J f0 =  -vr³  �k
R �except E Žion as e§u AeadyÉ  ¹  Ö tITrue® ]   QÖ ¾$  $  R 0er_ + purl = '�É://%s:%d/' %x  ? ©1topÐ È å'opä¢ and this „| nicelyúi  �Ý  Ë? = KjoinZð# explicitly break a reference cycle:þÐServer.callbaGck
  ù# has indirectly a reference to ServerThread.: ‘self.docs" ~ = None"   ¯ing = Fals!  4url= > tl ) ={ ÷(urlhandler, hostname, port)6 r.start( Ò# Wait until V .Ž ais Truâ ò make sure we ar¢ ò# really up before returning”while not[ ˜error and p :¤  wâtime.sleep(.01© Z H Ã


def _url_ò  ý ò, content_type="text/html")] Ð"""The pydoc T= õ  for use with t#  š Aer.
š !If c Q is 'f Qcss',  _^ ’.css styl+Psheet.  # Ð ïed if it exitsi  Ï j no ‘result of¤ @get_" P_page)u  –eœ1""", òclass _HTMLDoc(H "):î  ˆ dI  Çu, titledsT )   Ð"""Format an M  ; .n  #   Ácss_path = "*f_data/6�  +    / �link = (¶    !'< Qrel="lg'" þýcss" href="%s">' %F  c  ’ h\  ð '''\
<!DOCTYPE \ò PUBLIC "-//W3C//DTDñ ð	4.0 Transitional//EN">
<6 �><head><E >P‚b: %s</ ò
<meta http-equiv="CÌd-Type"ÚÕð; charset=utf-8">
O f òbody bgcolor="#f0f0f8">%s<div˜ñ="clear:both;padding-top:.5em;, €/div>
</N !><J�>''' % (¶  , < „,—_navbar()%
O & =n)  b  : ¨ …‘version =[ ð.escape("%s [%s, %s]"‰ óplatform.python_7 =(),é V  J ¯build()[0]K .¶compiler())fb!¢Ý'float:left'>Ï Pñ  DYbr>%s  <»î X OrighY *  Ýß-align:center‰  C  <ad`index.Ò ">Module I ></aÁ 6  :: ctopics; T 5 tkeyword7 K 9    í › À              ð<form action="get" style='display:inline;'>
0  ÿ<input type=text name=key size=159 ÿsubmit value="Get"6  </° >&nbsp;‘ 
Ñ osearchÔ qSŠ × 
Ñ Z</div3   ð""" % (version, html.escape(plat3.	 ñ (terse=True)))
s 1def5 ‘_index():  ë°"""Module I ’ page."""8  "  < 1blt& k(ü?  ! ðreturn '<a href="%s.¢ �">%s</a>'¼  8 ,:“  : ‘heading =� . (�  $ b'<big> rstrong>ª 2of º 3s</ !</,  *',G !#f Õ', '#7799ee')"  ž Ps = [	 A forª ° in sys.bui !_m)_$ s;  ¤  "if5 å!= '__main__']( pcontentf  Á.multicolumnU5s, f™ 6 [’, '<p>' +5QbigseÞ8B¶ 4-in&ú f ”ee77aa', d &)]õ•seen = {}À  4dirFpathF G �.append(æ pPdir, S �0 j   ð'<p align=right><font color="#90 ú" face="helvetica,'D ƒarial"><Upydoc,€ by Ka-P€;Yee; ð&lt;ping@lfw.org&gt;›7nt>7ú‘ `t'.join(ö M _¸G(keyN2"""F† results�   a# scan£�ŠS _;  ÍÐ x �callback(¼P, modÊg, desc…  f $if ú[-9:] == '.__init__'ø 0 L % =7 ú:-9] + ' (package)b	­ 3(H ” € and '- ë¤ D q ôwith warnings.catch_ ß, ' efilter' Â'ignore') #  Ð problems duriimportV Jtonerror¯ = t 6pas™  «äScanner().run(‘s, key, V = î #ð1matŽ  Š 3Dð ):
            ðreturn '<a href="%s.html">%s</a>' % (name,  C)

  Åresults = []  heading = E . (   < b'<big> ò strong>Search RS #</ !</*  *',E !#f Õ', '#7799ee')" 1for¯ ±, desc in sb _µ :)  �  ñs.append(bltinlink÷ 1) +D \ acontenù ß " +î «bigsectionñ €key = %sM0key³ ½ f¾ `ee77aa ³<br>'.join(• )x ª
,4', ‘ ›1defŽ –_topics()í Á"""Index of  ò texts available."""F   J L  ! ’ <U ?key=%sA>,_INDEX#/ Î ½ásorted(Helper.Â ‡s.keys()ídÙ±multicolumn'5s, +³6 +T¶ á#R d …9 # É Å ‹�_keyword   Þ  £�© ¥ ì †—ý Ï ,±$ZNK¬ ; ¯ 	ãQpage(
 #1"""FC or f` help . 	öbuf = io.StringIO(‘ n6 "= U–(buf, buf$ › `, xref‡6 Q._get™ Ÿ «iµ!iná d  ©Ö
™õtitle = 'KEYWORD'E Oelse, VTOPIC* û$ 6¾1 % – Æ& Ê A<pre“   H 1„.markup() a«›àtopic , '#ffffóff','#ee77aa', contents)
  •if xrefs:    ¡ = sorted( ©.split())
+ údef bltinlink(name)L  P ñreturn '<a href="topic?key=%s">%s</a>' % A !, G 
h „ ò = html.multicolumn� ,„ Ü  z 	7 ñsection('Related help Œ Ys: ',Ù  >  1'#f 7', We x î q('%s %s× btitle,k )h ö''.join((headingª,Ÿ)w o ·_getobj(urlpÀobj = locate Ö, forceload=1¡ 0if * ðis None and url != ' 'Áðraise ValueError('could not findL Fect'` î ö  = describe(obj …Ì€document% ,ˆ * IO e“ ‡url, excKg  (äb'<big> qstrong>ã #</ !</!   	g7799eeå “s = '<br>á »Ð.escape(line)¡ 
 9 in› { + �mat_excepÈ°_only(type(û >ƒ ý " +?4big9	Ë kbb0000í Ž  
 m  ½"Q€ - %s" %àÊsË@get_A_pagºÉ """Generat«` HTML '   P E.""";�complete_Ñ=   if À.endswith('.r 'j  Ó 8 U[:-5]= :tryN û in ("", "index"M  Q 
¾�_/ (. * #elU 2== "*s"u  & P ÅQ 	keywordS 1 U 0'='û >url¡ Qop, _Ê �`.parti±7('=# Í    Ž p ô `searchø   + ü 7  ð
P 2 To_ $^ R# try¤Ós first, thená%s. Z     ± ‰  Ã´  9 åvh '   d À html_getobj{(url)
  ýelif op == "get?key":&  5 ÿ# try objects first, then topics.6 ÿif url in ("", "index")c  g ñtitle, content = html_7 (¿  2 OelseP /ry  ? q ogetobj4 6   ÿexcept ValueErrori !=Opagel Ý Wraise} °('bad pydocs'-H ü ì Eó ªion as excò Ð# Catch any eÐs and display-m
"an  ÷ 
7‘ L à(complete_url,} â areturn+.U (H !)
œŒ÷ .startswith('/'‹ ©=<D[1:]2 ‰P_type&¦'text/css'ü ð path_here = os. ”.dirname( @real ¦(__file__)¿ @css_ ? Pjoin( X ,– 0  ¼ d open(: )�&fp“   1''.N Ófp.readlines(~ ÿã  xä M @get_ _gS!# �s outsideì ´ ñ handler are caught b
r serverÿÌ2TypH•('unknown~a%r forW x%s' % (º $ñ
)


def browse(port=0, *,0_ Àr=True, host¥p='local @"""S(É tenhance^3Web¾ ß ‰0 a  _ .p@Use � � '0' to yQ ü  G±n arbitrary- 9Set±  ? PFalse	 �suppress" Sing aï N2"""¾m~ 3web˜  |  thA = _– _ (\_´ ,š €#ifü B .œxbprint(N " = –‹ L  7 6ingN   ñer_help_msg = 'S7á commands: [b]ì¡r, [q]uit'\  k Û$enöX   .Â
´ Ù * tCå ‹  Ijy at',	D  H 7 Ô  # ZwhileG  0 	 (   Ðcmd = input('& Jer> ÷À     cmd = cËmd.lower()
  íif cmd == 'q':  . ]break 'el; b; þwebbrowser.open(serverthread.url� Oelse‡ SprintB –_help_msgA úexcept (KeyboardInterrupt, EOFError)Y Q B zfinally% 9if µ   :ing%  &  Û Ostopm r !'S % ¿ped')


# - ð  command-line ið óface

def ispath(xô ò"return isinstance(x, str) and x.find(os.sep) >= 0F Ñ_get_revised_Q Qgiven s, argv0a ò"""Ensures current directory is on „ 0ed I ,y B 
) Anot
mEÑBion:i  '  J €left aloô ðf it's also pydoc's' w .H Rû qs a new| ó entry list, or NL  no adjustm¿ ¡is needed.� 1""" ÿ# Scripts may get theô n "irr Ðby default if Cy'reP €run with ¡ -m switchš Cqly from  ]ž C# ThÀactive promp)ÿso allows importsM 
” ÃAccordingly,² ä  { Ìôy present, don't makß áany changes toÅ Eo –if '' in   —Ÿos.curdir Šgetcwd() ˜nÜñ# Otherwise, addŠ O	£ ¼ª`remove4 ³ 1# snÀ (as long as'   latter is¢:`tdlib_é P= os.ò.dirname(__file__§u + M( ³' =XS.copyš ÛÅ P 
 5not� @same‰ (‚  @¹  Î { .65 Ÿ  .insert(0,m Ö( ¶S ,QNote:e@test]�ly cover ² , È _ÙA_cli½q itself+ 1sys  (Ò ×"sy³(‡__main__ I#otŽÖ+ Ù i‘% =Àised_path(syðs.path, sys.argv[0])
    if revised_" Ñ is not None:!  %  6   Y[:] =0 Â


def cli()0 õ"""Command-line interface (looks at† ñ  to decide what ao)."""{ Ñimport getopt ñclass BadUsage(Exception): pass
% ñ _adjust_cli_sysØ "() 2try§  × Ãopts, args =f .m (ò (ò 1:], 'bk:n:p:w'5 = ñ writing = Falsez   Ístart_server ¯open_brows  í 5= 0K ðhostname = 'local ' ð for opt, val in sÝ  Œ  if Š == '-b'    ¬ 6TruÈ      ³ $ d kd  ¶apropos(val= Y   ereturnÒ   P pP  ´ J?val[ w[  Óæ 
n;  –  ¾Ï š › 8if ? 
§-(Ò $, B =	 (, Ÿ= 
mit  ç üu: raiseV$  `0arg[(  § is‘(arg) and8oiq.exists 
Ð  < òprint('file %r doeu5 0' %“
¿  6 Ybreak„ 	Í #   <if ™ •  iss •  <  î "= w+ 	s  & 3if *Û   ‚ ?dir�  ?  \ Bedoc>~  # 7elsž   A h @ < Phelp. 9 eiÒ ErrorDuringIœ as~uŽ  åSvalue|E (c .eM ,w? É dcmd = ¶”splitext( @baseH¥u0]))[0]ì | ð"""pydoc - the Python documenta8à tool

{cmd} <U Q> ...I PShow y 3 äon something. 6 amay bei  G Q of aG w ðkeyword, topic, func‚ ò, module, or packag �a dottedE �reference#"a %orF 0 wi� # aN  M Ðmodule in a
 ðN   package.  If <name> contains a '{sep}', it is used as the path to a
    Python source file �document.^  ]  E ð'keywords', 'topics',
E  or 'module Àa listing ofr �se thingsE ódisplayed.

{cmd} -k <Z >N ÓSearch for a  0 inK ð  synopsis linesa ãall available † ] pn <hostÄ ^ ðtart an HTTP server wi”he given 2 ð (default: local )\ p <portX o¶ V  ,   O p machinÅAPortý ò number 0 can beºQto geµ Áarbitrary unÕ U ’ bD Sã  onõ a@ ñ and open a Web browserL óto interactively  "ð ation.  This op 	» !inG acombin- m-� vd/or -pÀ wË1...8 ‘Write outþJHTMLz &÷ º!a Ä/bcurrenZŸdirectory4Rtreat7U  DA; if™ 0it   lY ,œ ¢is written§ !llÆ  §ðents.
""".format(cmd=cmd, sep=os.sep))

if __i ñ__ == '__main__':† ócli()
'''A multi-producer, ðconsumer queue.'''

im5¥ threading ðypes
from collecÍ#s / Rdeque Theapq   apush, 
 "op$ Dtime# ‘monotonicƒrime
tryÁ n _� . pSimpleQ° ‘
except I² RError7 $ à = None

__all'€ ['Empty§@Full O  	 …Priority ELifo X O']

¨ 
d ¢ aclass $ !(EÆ Bion)¾  3' @ raiŸ1by ˆ ñ.get(block=0)/get_nowait().'õ ? bpass

e  ä d ` 'pu` -pu` \ ] “ · A'''C" aOr objectÑa<ámaximum size.
± `If max  Q<= 0,	÷ ‚infiniteùª ê  de  „__(self,M '=0P  .f =#   F  _F (% )œ   À# mutex mustt held whene 4ª  is) aÛå.  All methodsg à# that acquire. W prelease�òbefore returning. ) F ðis shared between the three conóditions, so acquiring and
  €# releas sthe con5 5 al6  es5 + •es mutex.E Qself. õ = threading.Lock()
' ð!# Notify not_empty whenever an item is added to � ‡queue; aE a Q wait¶ Po get9 n^ i< ;henž s ¢ Cî (Ã ± Ofull° Çremoved from´ ² a´ /pu´ v ³ !æall_tasks_done¹  Uðnumber of unfinish5 - µ Pdrops‡_zero;Â  jjoin()y…o resumeH XŒ Ï � > ¤ Ñ B = 0U@def ä ã Ã%):z ñ'''Indicate that a formerly enXd>  Â ’complete.Y  € �Used by Q‚  Ø rÀs.  For each@() u0 ¡to fetch a[ ,Ž ða subsequent callZ¼ v) tells?³  ­`proces¡M !on)  ? ½ VIf a ¡ócurrently blocking, it will±! ˜  ‡sk £have been ˆ �ed (mean{W ˆ ƒ)Û ¶was receivejf/Bveryé“3had]  utKnö)�@Rais…á ValueError ifn Àed more timeAaqre werel Î �placed i#  (5'''÷ Bwith~
¼_ #š" =.  ¬5- 1U  3 itJ<= 0S $  #  ' r,('‰ Öroo many)')�  F c
å .Ijy_all(1 - ä =G@ ™~ 1 
”B�vs untilp“muagotten}€T²?untÌ� goes upÛe	 V B GdownD …sïP Fto iƒ� @trie51and`work oÒ2Whe¶/coð ²Àto zero, joió n() unblocks.
  5''' õ
with self.all_tasks_done:"  5 Rwhile' ¢unfinished. 
)  - N  �.wait()
U  def qsize(* )A ð'''Return the approximate . 1 of ÿqueue (not reliable!).Ô Vmutexa  ž rb  { "._‡ ˜ _empty˜ hTrue iˆ 1is 4 þ, False otherwis¢ ý  ƒ ó(This method is likely to be removed at some point.  Use5a) == 0J M ðas a direct substitute, butP Ðaware that eiœ X€ach risk= EraceO òcondition where a pÑcan grow befoR  ¬ @sult˜U() orI [ 9 ‡be used.Po creÛ3cod  Pneeds -‚ for all !d š  b¬ �mpleted,ðpreferred techniq¬Q  usc Pe joi{< {@Ofull? 3 >YE>= n¦>Xoshrink@ ? ð  í20 <½1maxK"<= 1putÀ�, item, <=øê, timeout=None·aPut an3 Q into�9ôPIf op[‘al args '] 'tYSand 'e   i   (•default),º<  Œðnecessary until a free slotZ Pavail%I. If_ K ða non-negative numberþ s�Gmost>  se) s ³ eraisesN  ¯ ‘Full exceð ¦ o— ww˜  ƒiô!atc™O±M,fiG), puo@ e- o ™ °is immediatp0, eºÇ ¹¾ (”	K 0gnolº Vcase)» £@not_ì
“"ifŽž:> 0!  ô0if x÷ " ðself._qsize() >=ÿ self.maxsize:
  ­raise Full# ÿelif timeout is NonI Rwhileq  _qp R() >= ‚ ¨ ÿ not_full.wait()Œ ?< 0Ñ Í ÓValueError("'À ÿ' must be a non-negative number"r sî 0endV ! =A() +	 =out·  u*Äremaining = x -o %  n   6if 8 _<= 0.0 -   8    ¦ d 
=* Ÿ_put(item  ùunfinished_tasks += 1;C  ñ empty.notify()
% €def get(% Ñ, block=True,@out=©)"ð	'''Remove and return an Ÿ ò from the queue.c  ñ ñIf optional args 'k '
2truM _   (L ‘default),±  N < õ if necessary untilˆ øis available. If [ G ½B, it—s at most> rsecondsü  ísN  « EbQ exceí £ o'wa” Á within thati.G `OtherwG($|false),p`if oneEµimmediatelyK r, else ™¨ ( … ignoredH © Vcase)ª 5'''#  Ð ¢i3 ³ ­oY
   ….ô&  * Ä h}   _>2not¬ k Ž Ï L	u H¯ D/ ÀÄ<ú Œ($Ã Ç  x’ 
u_Ç
 J ù e  Á I ® ðput_nowait(self, istem):
  õ!'''Put an item into the queue without blocking.
9 rOnly en(  2 @ öf a free slot is immediately available.G °therwise ra  J æFull exception, 5'''8 ðreturn self.put(~ ,¨ r=False)« ð def get_nowait(0 
þ ³Remove and T Ofrom'geG_f oneÿ $ O÷ Ñ ÿ _Empty Aget(¢	ú  # OverrideÅ ð
se methods to implement o‰ î€organizavs™ ò
# (e.g. stack or priority2 )œ`# Thes.@ll o‘be calledB€ appropr Jbs held¡±# Initializ© Z ¡ representŽ �  Ë3_inÆ—, maxsizeÏ Þ.’‡= deque( _q/ õ1len ? 6 !# D new L£ ”  € { ,% � q.append§] G2
m\  Ü \ V ²   ® „.popleftí °__class_getQ__ =  ñ(types.GenericAlias)


" # PáQ ( { €'''Varia5!f  P that7örieves open entries in.óorder (lowest first)LE/ €are typi8`y tuplQ fp…form:  (~Ãnumber, data… 7'"[]ˆ^"6  ‡heappushZ$t â? 'op> ¨ALifo„¤0mos³@cent’Edded³™.J�íJ…G< 0pop%ìA_PyS
I2''' €, unboun BFIFOõµöThis pure PythonQ¯ ù nog 2ant( Y wÀ# Note: whilôL `versio>åovides fairnes“ðby using a threadš�SemaphoreW  chƒ  itû ð fair, being basò>ed
    #  on threading.Condition), fairness is not part of the API contract.
J ±This allows$ pC versi` ðo use a different implementan !.
Ž ñdef __init__(self):  `   û._queue = deque() wcount =Ð ÆSemaphore(0)d 1put_ ÷, item, block=True, timeout=None a'''PutØ  4 6!e � ¾  ¦ `The opÓ Aal 'X s' and 'X `' arguù ðs are ignored, a5‚is metho� Q Rnever¡ �s.  They8 ñprovided for compatibility with© Q-Rclass¤ Q ;'''6Ä pappend(Ý Wp.releasu@  ¬$geHê BaRemove‘return anƒQ from´ � « ¯ &IfPEargsUbis truM ]0is ¹  (¥‘default),±  N § õ if necessary untilˆ  ÂÇvailable. If¸%isG ða non-negative numberM©‡ at most> rsecondsü FaiseN  « ¡Empty exce=£ oTwas a” Ýi²!at«Ù´Otherwise (y»is false), p`if oneÚ¶immediatelyà o €, else r± Ÿ¨ ({iÍH © Vcase)ª ƒ!ifÇ 0out�  gÀ 32F < 0 Æ� ÆValueError("† `must bl£ "Ú 2ot V8‘.acquire(%	| ç \L ÁŠpopleft(ud_nowai4kÚ bAintosQ ø %�  ª#xðis exactly equivalf@to `ík `}„is only AÆ I)p ,!=F‚¯ 5`?'''"	Oß 6getÕíT%. ;cš Æ  ¦ú eåyõ  € ù v õ Õ 4 !, E& oã *@reli©8!).S� 1lenl 5ð ) == 0

    defó  qsize(self):
  ð'''Return the approximate . 1 of õ
queue (not reliable!).'''H rE 1lenb !._3 !)
! ñ__class_getitem__ =  ñmethod(types.GenericAlias)


if SimpleQ~ ris None»  W= _Py ð.
#! /usr/bin/env python3

"""Conversions to/from quoted-printÛ ó& transport encoding as per RFC 1521."""

# (Dec 1991 V ‘).

__allå !["A ¡e", "decod
  fstring  ð]

ESCAPE = b'='
MAXLINESIZ a76
HEX ñ0123456789ABCDEF'
EMPTYSTRING" b'

try2ê ±binascii imß ña2b_qp, b2a_qp
except I RError< ' ! =�Ò1  °

def needsLbing(c,WÃtabs, headerwò"""Decide whether a particular byte ordinalT b to beP "d.SPThe 'm eb õ' flag indicatesZ �embedded & ñ and spaces should beÏ I ñd.  Note that line-ený= ¢are always!3ed,!N %  * mðassert isinstance$ í !s)( âif c in b' \t'y 8 Z£  ‰ - C# ifV�, we have'ð escape _ becaus
 Pis us#o  G t =i_r µ( „ Sc == ž0or  (b' ' <= c Rb'~')° &(côQfñ a single characterK é !º \Qc)==1“ 0c =&"(c>¢ � +Fñ s((HEX[c//16],  P%16])^³Š±(input, out »  k¹f=FalseË aRead '6  ',5#lyžE\ Aing,½ 0wriZ2o 'f 'ÈF $   ` «ÿry file objects. öú!³ .õK ù#E © Aœ!weé (šCas _N U O A1522( #if±1 is… Hqdata = Ÿb.read(#  o bñ( ©=úÄ A $.Ï(N  „  % sY=ú,[“End=b'\n'V � #ð _’ requiresŒ › — � inH É0 orÛQ must!M ð that trailing cóharacter encoded.
  õif s and s[-1:] in b' \t':#  * ñ
output.write(s[:-1] + quo  : Å) + lineEnd); !el` o== b'.S 	J E /seŽ 	y z @prev‹ q = None vwhile 1H !  inØ @read (» aif notÓ 5  QbreakT   0out9 U = [] ô# Strip off any _ ð induced trailing new? : s8 @ped 2' !if‰ £N+\nO G " ='  Ÿ<  ¦ 	W &\nY ô# Calculate the un-length-limited2Y T Pfor c, v 
c» –ytes((c,)P ‡  T@eedsîbing(c,CÚtabs, header)O  7  S  3 =e(cP 5 Â!c   B ¦Ê.append(b'_'J ,eld7  ~ ‘# First, A out? zJious.0if   ,1 isW ˜
é I (( ž ñ# Now see if we needU2sofŸ ’õ	s because of RFC-imposed´"# Ú Úñations.  Then do¿ @this¦ $->ˆ f dance/" ó = EMPTYSTRING.join(e» tDlen(7 ú ) > MAXLINESIZEò	# Don't forget to includšï � `=' sign†"thå ´  ë cÝEion!	 " n— '[:• A-1],À›End=b'=\n,6 4 =  [@ :
W3!bcurren¸‘ mQ  *# = 2las: `, withuaKr y ð )c)

defý  Gng(s®d=False´ ºŸif b2a_qpìcreturn# 
T ä=ÞR€from io Ø@rt Bd!IO)dinfp = "(s1 9out  (3 ,—'fp× Ñ + « H Ò.getvalue()

 deL(BK 4putA 	‘"""Read '+ ‚', applyûÁd-printable Q Aing,Ï£ '}'†E #  Ð are binary fèðobjects.
    If ðN'header' is true, decode underscore as space (per RFC 1522)."""

    if a2b_qp is not None:
  õ   data = input.read() o a@ ( ", ” = ,  utB awrite(9  breturn� ‘new = b''f �while 1:  ’ Iline�   “ !ifÄ   u: break; ài, n = 0, len(" ‚  7 � > 0 and  �[n-1:n] =Œ 6\n'‚  † ppartialN ;U 5n-1h  ! ñ# Strip trailing white‰	( à n{ ºin b" \t\r"~  a  Ê u 7elsµ " ¤ › o Zi < nS 2c =÷ ii:i+1]¤ Bif c!_' Û
A  r »  �+ b' '; i«+€  & !elQ Ÿ!= ESCAPEH cE 0i+1˜ n• Cnot ó R  [ = 1;“  N "< M qi+1:i+2« $ ° 2Dõ 0i+2z¯ Qishex…[h ) ~2:i+3])Ñ  e =  »+ bytes((unR d3]),))� 3� ùse: # Bad escape sequence -- leave it in7  - u { ž  J‹o H  (6\n'ˆa  P &ewD c)

defù…string(s†SFalse@é…C î£ ðfrom io import Bz!IO#dinfp = "(s1 9out  ¦(3 !, # ± n ’ ! ð.getvalue()



# Other hel×‘functions\c÷ A"""R`#q if the5± ordinal 'cCña hexadecimal diga ASCII0 žñassert isinstance(c,N ò µ �b'0' <= c ¸b'9' or b'a f A "F'ÑÏsÅ 1Getº �integer J of · enumber¯ @bits§¤¦for c in sP úB2c,)  è =if Ä 6 "   =B7('0Áéè 9 aa')-10›  Q < < À = ord(b'A')S-10
  Uelse:   õassert False, "non-hex digit "+repr(c)3 pbits =  ò*16 + (ord(c) - i& areturn" â



def main()x ¡import sysT  agetopt 2try*  ž �opts, argu % . ò(sys.argv[1:], 'td'€ rexcept & Ö.error as msgW  < €stdout =‹ q.stderr€  w ’print(msgS  ý"usage: quopri [-t | -d] [file] ..."4 !-t1 te tabs   ðd: decode; default en ,  ³ bexit(2`  1 " =¸¸  \ 	 Àfor o, a in Hÿ Ñif o == '-t':• q = TrueI  î " "d'� " "if5 1and¹ Z  ¦ Y@"-t < ÿ
-d are mutually exclusiveø aif not: � = ['-']¼ sžð   –   B¦ 1if  '  ú &fp†in.buffe@	¯ A   E Popen(h W, "rbÓ  " ¦?OSE¡ #   Pðerr.write("%s: can't ` ³ (%s)\n" % k  µ" @  1$   gcontinùÏ +ifã 7    �dde(fp,B3out0
� 5 @ â@ ,`F 0fin!
ªiÆ!ÉÆ a ’fp.close(H fif stsC  [Q@sts)ª±if __name__ __¸#__[   ñ()
"""Random variable generators.
bBbyteß-   ’ ±   uniform # ñ (values between 0B255)I wintegerL ?---O Âwithin range; xsequencˆ Œ @pick3  Í belemen‚«  Vsampl1    „weightedF ' e" ²permutation¨ €distribu ós on the real lin¬ ¹    –triangulaÆò   normal (Gaussian$ú 2log  H ønegative exponential  Xgamma 9bet hpareto" Weibull	ócircle (angles 0 to 2pjÐ-------------- &
  øcircular uniform ð4von Mises

General notes on the underlying Mersenne Twister core ge6 ðtor:

* The period is 2**19937-1.
* It aone of\ õ	most extensively tested S ps in exn 0nceD  ` Òrandom() methi €implemen> °in C, execuÈ ðin a single Python step,
  an¦ ,Œ `refore ð
readsafe.

"""

# Transla\ ñ8by Guido van Rossum from C source provided by
# Adrian Baddeley.  Adapt ð Raymond Hettinger for use with
#˜ u¶ Eos.u
‡As.

“ ðwarnings import  P as _	 # Dmath 1log 0log>p qexp, pi Qpi, e
 qe, ceil  	 M Asqrt  	 a, acos  	 $,  @cos,› >sinH 0tau ÀTWOPI, floor _
 / oá !  # ô_collections_abcó "Se¥ ÂSet, Sequencâ  @ …itertoolj `accumum  r, repeaW  C dbisecty   � 
¤'$os _æa

try:¸�# hashlibMñ%pretty heavy to load, try lean internal module firstF "t_sha512–   –  ‘
except IA0Errå W # fallbacku €officialH †akh ± H  ] : Ñ

__all__ = [7 !"Rä"¦š  "System ´betavariate' [choic s Kexpo0 LgammD Egaus4 0get€8bit 'stt {lognormZ   +al \paret„ ` 5ytea   4int·   (om Erangå  saú Fseed t© eshuffl9 t™g1  @vonmÅ gweibulÛ ð]

NV_MAGICCONST = 4 * _exp(-0.5) / _ð(2.0)
LOG4 = _log(4 *SG= T1.0 +  °5)
BPF = 53x  €# NumberE ™ #a’at
RECIP_2 ò2 ** -BPF


class @(S. )V#""s" n^ „b base B "usºUboundU"un[!.
¼U%  to instant¡ cWfˆ  :8getí’that don'¤ashare Å[ CÈ ð
 can also be subclassed iñ$f you want to use a different basic
    generator o3 ñ%r own devising: in that case, override the followingI ð	methods:  random(), seed €getstate Uand s .< ðOptionally, implem¥ Pa getM rbits() b 2 so’   qrange()E Pcan c¡ ð arbitrarily large“ Qges.
) 2"""	 °VERSION = 3  #(@d byy ± /ª 1 ñdef __init__(self, x=None):Z  F ó
"""Initialize an instance~  $ ð Q arguì ¡x controls5Ñing, as for RO.L0 D Æ    Œ " x Ðgauss_next = « Ê R  : 1, aÆ ¿, version=2Ñ ‘internal  q from a´ à ðThe only supporteóÁed types areŠ Õ, int, float,@Àstr, bytes, ,  Warray`  È f or noB Î s� 1curæ@time' ¥ @n opë±#àystem specific(ødomness source if availablÂ’If *a* isâpt, all ©ß Gused° 4For[@ 2 (=‚default)9 !ofR	@  { d  #  s,Ú  
 (  e ±1 (providedD³reproducingä M ƒsequence<Eolde­ s�Python),¢ ‘algorithmW 0str¤L  � sS ê� narrowerv  geO ¨	È%if(@== 1]  ‰BP(a, (
 )¥ Íða = a.decode('latin-1')H
D § @) el½  C ðx = ord(a[0]) << 7> a+ 0+  ›c«map(ord, a� Q @((10 û3 * x) ^ c) & 0xF 	_ ¦x ^= len(aÑ Q  å  -2– rx == -1œ x× " *elF2FmEQ+if}?strä   “ Aa.enx® ó+= _sha512(a).digest± ­    @ @int.§_œ ék'big')× ;not“ (T()P2(â °_warn('SeedÐbased on hash ùis deprecated\n'£ ¼ ’  'since &A 3.9o wi�e removed(Ra subn/t J ~%. @s WÀe: None, '
   ñ'int, float, str, bytes, and œarray.',
: õ
  DeprecationWarning, 2)
* ö super().seed(a) òelf.gauss_next = None8 õdef getstate(self):8 ñ"""Return internal ( ô; can be passed to sC µ) later."""H rE  ^ ¤.VERSION, ­ } 1), " © ¢ _  "  8<ate© [storeª Ò from object ‡ egó )ª ’version =é 5[0]Å 5if  6= 3& ¨ , (Ñ X U  < 	ä mD Æ*elƒ 2ƒ 7E# InÞ b2, the° was saved 	 Pignedä ù s, which causesÐ õ!#   inconsistencies between 32/64-bit systems. Tl iH ¢really uns{ !32= ñints, so we convert negativsø– ¦  2²Aposi0 •longs for)3.; :tryk ¶	¥ñ = tuple(x % (2 ** 32)T 6x i?Ò H ðexcept ValueErroriep “raise Typ& Ùe¨ Isa ] „ !("ª U with'%sðÝ Å  …"Random.Ô6) o@Y%s" %» A (¬C62))
O## - #w ? p MethodŸðlow this point do noTÞù
be overridden or extendedN ñwhen subclassing  Kppurposeu Ða different c¶¯generator.á p pickle=_port "ñ Issue 17489: Since __reduce__Ù@defiÑâto fix #759889Ris noß  " er called;u0leaj‘t here be` it haN"en sv r r P àrewritten back!A2001àwhy risk breakE’something• °$__5#__´1  #o h  TóX£"J ¢J \Q  €Ö&�O ðreduce__(self):
  òreturn self.__class__, (), Ðgetstate()


4 ñ'## ---- internal support method for evenly distributed/ Agers= J ãdef __init_sub{ ñ(cls, /, **kwargs):w  { ô """Control how 5 ões generate randomn .j  = õ The algorithm a> ô can use depends on thJ •() and/or… 0gete ðbits() implementation available to it< µ determinesD pwhether"  ~ ¾ õ from arbitrarily largeG uranges. 6"""ð  ˆöc in cls.__mro__K Qif '_Ì Qelow', |.__dict+  / õ# just inherit itx     Ybreak  c 1d ¬ “ " =½  g_with_Q 	m ƒ  A /om~ 2?out� ˜ à { b`¼ (t8, náRŽaÈ —�²ge [0,n).  ) Çs 0 if n==0.û  Jot nïê0œ  ,H% =î± &it­ñk = n.bit_length()  # don't8ð (n-1) here becaKnUEbe 1m Gr = q !(kF Æ0 <= r < 2**:­while r >=Ä F a ;r| ºø, maxsize=1<<BPF�"""h ‘!‰  i {)rdoes noBp, but o> ‰/omÞ ·    =Ù 
ó_warn("Underlyingl$()F5or Ÿ  Ýely \n"^  Ò   €"enough 
 ïcchoose´b popul§R thisÀ.N ”To remove~rge limiZy, add aC)s9.")� ér_floor(f() * n( #J== 0; $Trem ="E % nj œ C = (f  -À 5) /.  'Bint(* * )G  | L  ¨  B ª % =¹3 ¿ ú  t Ð

    _randbeñ
low = _randbelow_with_get ïits


    ## - $@ ‘ Methods m ù this point generate custom distributionsC ãbased on the mP ùdefined above.  They do not= ádirectly touchC ¤underlying… Por anc )ly= paccess 0omn bthrougH ‹ #: ! 9(),> Ug(), orw?().ie bytesï ‹ª1def� 1 ¡(self, n):‹  ÊD"""Gln* "om^ E."""' preturn @ .º ¢n * 8).to_a Ïn, 'little')Ã uintegerÅ R
Ä SrangeÄ ðstart, stop=None Jep=1Û „Choose aÙ �item from  L F [B ]{   T‘Qfixes€problem  A òdint() which includ* 71endÐ‘; in Pyth¨Ðis is usually”ò  what you want.ö  �  ƒM !# � @code@  a bit mess¿ð make it fast for² ; °common case± °le still doêPadequoõ error checking.A ip0 = ó  ) #f  1!=  _ Å Àraise ValueE_ d("non-ÿQarg 1±  Iã))"^  å ò  è
[ i{ :> 0 z ¶Õ(® c + ¥ Pemptyç/geŸ  þ #„ù argument supplied<%op;&opy ¿ 1op 9*opÂ 8 è7Pwidthu ( -¢¶ Áif step == 1Þ0 Fø2" +K7 	Ñ W Í `b (%d,  S)" % ³,Ç Bop, w ))¢# Non-unitØ � ù Êe�e�e�/ep'  [  ê=ep bQn = (Ð   +ß ¢ep - 1) // ³%elE <íE  +E +se™Àaise ValueEróror("zero step for randrange()")

  ¥if n <= 0:   Ñraise ValueErN PemptyF /geP 	ð return istart +	 °ep * self._… sbelow(n„ 0defU Pdint($ v, a, b)Ž B"""RT  = Ðom integer in9 @ge [2 õ], including both end points.Û 6"""û «  v .\  M B+1)
( O## -  ÿ sequence methods ' C  â cchoiceá :seqà €Choose aÐ òdom element from a non-~v .È  §  !# ­qs Index®0 if¢ A is 9  ó !q[÷ ‘@len(š &)]· dshuffl¸ #x,¡ Z=NoneÃ S* p list xœ³place, and v  6 .]  ¸ ÑOptional arguð  … áes a 0- @func+ H  áaÒ  an3Pfloatw °[0.0, 1.0); itÀthe default † U, theC ƒstandardÞ ÷ om will be used·  {; i½µ  Z ¸ ã  Ñ ï, =C  (   i¾ ’reversed(Œ01, —7x))n 1   •# pick an0ðin x[:i+1] with which to exchûY x[i]z  I 1j =û ª }(i + 1)%  : �, x[j] =   M Jelseý À_warn('The *	Ðom* parameter– ^ý	) has been deprecated\n'„ P  'siu¡Python 3.9`ªpremovedIRa sub//t J  ioion.',h  Dˆ ÚionWarning, 2‘floor = _	 	D Ïo”  Eƒdom() * ×
Ã  ýØÑ  »Esamp`popula�ï, k, *, counts Õ¡s k uniquecÝsÞS  ³Ugor setu 2newe`contai› S  íU Fwhilì@leavA % Porigi�. "un*@d.  º`result2 Ú!is 9 inÓešðorder so that allr-slicesI@alsoNDvalijL dst  is@ `ows ra}  winners (´ * )? beO tiŽðed
        into Àgrand prize 
 @seco ólace winners (the subslices).

  @Memb" 0of $ ñpopulation need not be hashable or unique.  I3 J ; ðcontains repeats,\ õn each occurrence is a possibleH Qselec‚  in8 w sample´ RV ð ed elements can§ ñspecified one at a tim¶ AwithN  op\ %alp 0couC ñparameter.  For exw :+ 2Œ ò(['red', 'blue'], E Ö=[4, 2], k=5)9 ÿis equivalent toT [ 
 i q 
b ³To choose a/ò from a range of integers, use `() forÅ@argu^p.  This®ea’ally fastppi•efficientJ  Z .4ing� flarge d 	³ 2(10 W), 60M6"""Z0# S¦ c  á0outs û º   e‡€ls track% çeither potenti%# w.ð pool) in a listúˆprevious, ! 7setŸR# Whe» nu^ _ ùis small compared to…##;Â 
H w0, rcEring‚`# onlyn "se± an„¥asional reR ù? !a ±/r Ç ™  &_—method isE `preferæ  siõ fQÁtakes less sD1tha6= ´ òit doesn't sufferRfõ  TÆ sŠ7The¾ 0cal0o _5pbelow()Ù@kept0‘or near kÞ ‰ ÷theoretical minimum€importan,!ca`0unnq6timÚ#k Êdominated byˆ  ¾"be@ Pit exõ+ts lezrentropy Spunderlyt  Ü $om÷ šgeneratorcMemory6FAare 
�¦ er¿§a k-length žsor an n +�0re Z o{�algorithmá aàm Ò(ir4±auxiliary m´ P, butÁy were rejecP<ˆthey madE Ÿtoo many A, ma  them slowe× dì  — ]" °to eat moredŠ¾—necessaryæif isinstance(ý…, _Set):e  `u_warn('ÖÆ j`deprec:Ð\n'
           ô2'since Python 3.9 and will be removed in a subsequent version.',
I  öDeprecationWarning, 2)
! q  popul" – = tuple( + øif not isinstanc& A, _SŽ Ice):] öraise TypeError("Pn @mustÙ "a Ë öce.  For dicts or sets, use sorted(d)."“ n = len¯ ‘counts is¹ JNoneœ Ccum_$ Ð= list(_accum"e( )n  4!ifq : j) != nX  ) ø CValuù ò 'The number of ^ B doež —match the�'| †total = } Z.pop(% ¦7 [, int›§ Ÿ"'C4›‹integers‹ 1if W _ <= 0ý ¼ ø ` ûgreater than zeroi Pselec½Às = self.sam¢arange(… j), k=k¢bisect = _
 
”veturn [æ[& ([p, s)] f„ qˆ ]K ”randbelow› _ $ �0)k +'!"Sà T larg¨   ÏwegativePresulñ [èU] * k…  F€ize = 21õ  0# s  ofL@malllf minus qn emptyN Šif k > 5÷d ò+= 4 ** _ceil(_log(k * 3, 4))  # tablec  ^0bigz s_ n)Q 
f Ñ# An n-length—  ÞsÀ -4a k  Eset.X õ òInvariant:  non-Øöed at pool[0 : n-iæ 8    k #�
r Í i+škm Ej = #j(n - iD  l ÉR[i] =’ jŒ  $  � %[j" J P - 1]a %
Ü @item •o vacancy;els ot] B_addõ•ected.addS    pwhile jRw 
 i   VJ ?  ¶ .(j  
r[xr1) 
ë Àdef choices(˜,¸ , weights=ŒA, *,´	 À k=1):
     ñ6   """Return a k sized list of population elements chosen with replac C.

  �If the re; ñve weights or cumQ  õare not specified,I  F Pselec‚  s * Bmade| ÷equal probability‚ 5"""E ârandom = self.  †n = len(é )  if¯ _¾ …is None:   î %ifÞ    $ ‘floor = _	 	?   €n += 0.0 ð# convert to float for a small#‘ed improvuM rÊ[Ð [v (ø �() * n)]V Ði in _repeat(Û Y, k)]S :tryð  ¥ 5cum=+C(_acÚ#e(0)I 5 þexcept TypeErrorW !if•isinstancJ n, int)1  W Yraise³   4k =— 2 ˆ (!  A Àf'The numberð choices must be*°eyword argu}: {k=}'N a) from: *el7 þ €
ã © @'Can* (dy bothæ @ and­\'„!ifè¼o) != nt BValu¦(ÜQ does®Qmatchîrv ptotal =› 3c[-1] +ñð%2if > <¨ j o�«÷greater than zeroŸ `bisect›
 } ¥hi = n - 1 Z 5 (T', h¿ {, 0, hiXd?or ƒKO## -  p real-v¤¢d distribu!0 L Àdef uniform(g, a, bUc"Get a¿ ú!inÛqrange [2  Å
 ñ] depending on rou .yŒ a + (b - a} } …&()œ £triangularŸ alow=0.<@gh=1
 Pmode=(· 5""T; 	©Continuous"   b´ ñed by given lowerLÆupper limits� f0havó a3  •  �· in-between| ð	http://en.wikipedia.org/ /» _É $ÈuÃ(Ü¦ c 4Q5 if   ›ð else (mode - low) ó/ (high - low)
  õ
except ZeroDivisionError:"  ) `return:  Šif u > c) µu = 1.0 - u*  A c c Qlow, ˜ = ,d w ) +¿ ñ * _sqrt(u * c)
T ödef normalvariate(self, mu, sigma)¬ A"""N+ â distribution.I  ± òmu is the mean, andE  ëstandard devia> 1"""“  J ñ# Uses KindermanK öMonahan method. Reference:) ,C HA.J.9 ñ, J.F., "Computer generˆ § of randomA ¡bles usingÚ /  . suniformË çes", ACM TransD ÷Math Software, 3, (1977), pp257-260Bƒ 0 = †. M ¦while True” -Cu1 =½ (¥ 2CL   õz = NV_MAGICCONST * (u1 - 0.5) / u2~  P z1 ¹z * z / 4.0 ÷if zz <= -_log(u2; =   Ubreak6 «Pmu + V qO ˜_gauss�G# ?ian’9†  This iÆÀslightly fas7Athan
:k) funcÖ÷Not thread-safe without a lock around calls
aWhen xË¦y are two �Ófrom [0, 1), —%lyf#0ed,¸ n 
  ŸÁcos(2*pi*x)*+0-2*ÌF1-y)Z#+ ?sin+ ` ¹ *Õ‡pendent*Ç  Œ² 'io­ 0 (m,0› Ü').b ø(Lambert Meertens´ à(corrected ver´P; bugk òcovered by Mike Miller, fix #LM/ ú r# MultiÕ anote: ¥ ™ sÔ  tK« ðsimultaneously, it$Àpossible tha7àey will receiv eD Rame rf`value.» c@ndowP °very small v gh" oC Qavoid¥ €, you haf [o use¢ D ¦G  (IC ñdidn't want to slowQ r down i)°serial casefOaF Where.j´ ‹&'U_nextP   æ&on; ª ;NonKð x2pi = random()§ * TWOPI
  ùg2rad = _sqrt(-2.0 * _log(1.0 - random()))7 z3 Ácos(x2pi) * H 	# ð self.gauss_next1 ;sin1 2 ñreturn mu + z * sigma
 ðdef lognormvariate(\ R, mu,( !):)  × p"""Log - òal distribution.N  % ðIf you take the naturalf éarithm of thisA ,5 •'ll get ar k  ‘ with meaÑ ðand standard devia� º .G ñmu can have any value, =  ÷ must be greater than zeroÙ 5"""Q RA_exp0.© C=) gDexpo! dZlambd`ŸExponentia6 @ is E¡divided bymqdesiredõ .  It should be¼ 1nonÚ Ð  (The parameõ w* ‘ called "j pa", butEt isG ña reserved word in Python.)  Rr"edjsêÅge from 0 toE ñpositive infinity if w  á  ª> @nega1 B 9 Ito 0> + Ã#h b: rate P = 1/Z^ A# ('�  a'‘ aã 
û ä ý´# we use 1-Ý€ instead÷ ¡to preclud%p €possibil )QakingÜ0logD ¼1 ‰-V \.j 2) /Ü ˆŠvonmisesŒ ³Zkappa�ÙCircular data²W mu í =ñ angle, expresseñradians between 0}A2*piÝÐ ƒ N ‚concentrÔ©, whichµ%orL ‚equal toÉU  If _ 	 ,�v reduceïÀto a uniformÏ2domé 1 ov1e !geà Ù !;@# BaÂupon an algoqpublish10: F …r, N.I.,Ô ð# "Statistical Analysis«0Datµ†Cambridgú�# Univers]P�g, 1993ª €# Thanks7ñMagnus Kessler for a correce to˜› €implemen¡  on” gstep 4` ˜7 = ¦B i¡v<= 1e-6z \ëg  *n=Ù ! ’s = 0.5 /çW ro # +‡ 6w+ s * s¹ªwhile Trueu Fu1 =k  f  àz = _cos(_pi *w u1)

  ù d = z / (r + z) Êu2 = random( ñif u2 < 1.0 - d * d or 3= ( É) * _exp(d):X   Vbreak‹ 1q =M 5/ r+ af = (q—  ¡  V X+ q *§ /u3£  Ÿ z3 > 0.5z PthetaW õmu + _acos(f)) % TWOPI{ Oelse: -:  ; qreturn j à ÷def gammavariate(self, alpha, beta @"""G, ð distribution.  NotT I P func !b  QPCondi 1s o ò  parameters arep  A andw   .B ù The probability‚ r F is:3  y  ax ** (Ö @ - 1þPmath.A-x /s G¿pdf(x) =  - cr  e `}  y  U � Ž ¯ 5"""E #… ’, mean is *H !, ¸:nce 6**2Z ÷# Warning: a few older sources defineÁÞ— in termsœ "of‚ u > -1.0 i `<= 0.0u ¤   
³ñraise ValueError('&Î 3te:a pmust be7.0''0 = ¸. ‘ >Àð# Uses R.C.H. Cheng, "h`genera¯A of òS  ×#u÷bles with non-integral shapeà+",= öApplied Statistics, (1977), 26, No. 1, p71-74Æ z óainv = _sqrt(2.0 *)-á Àu  bbb = ILOG4ˆ 5ccc  + Y 
k zwhile 1¶ „ /u1Ö    òif not 1e-7 < u1 < 0.9 L  2 ‰continuež   â Y-è $ dlog(u1‡-H2) /Ô  %  xõ  v6 , 0z =º * 2š 1r =_ + F}* v - x& 0if ¸ðSG_MAGICCONST - 4.5'% >%r _Æ zm Š  ¸1x *©ª%elu=¥
dc# expoU0(1/�
ð Z - 
m¬n z© is™ aween 0ÃÊ1 (exclusiver xðALGORITHM GS of St÷atistical Computing - Kennedy & Gentle
  ¹while True:  # Íu = random() úb = (_e + alpha) / _[  C �p = b * u@ ¾if p <= 1.0z  ; ó x = p ** (1.0 /g H ?els»  A À-_log((b - p£ ¬ E /u1ë 	« >ª Pif u1Ì x¯ d   -0 )Û  ž ]break‰ %elM _exp(-xC ? ñreturn x * beta
\ 1def Òvariate(self,K, _ ò"""Beta distribution.G  ± PCondi òs on the parameters areV � > 0 and]   .ˆ  A R¡ �ed values[ ge( Cween6 1q 5"""< V## Se_ð## http://mail.python.org/piper / ø-bugs-list/2001-January/003752.htmle ñfor Ivan Frohne's insightful analysis of whyðoriginal implementa$ø(##` ?   “ ##9  ñ# Discrete Event Simull ö  in C, pp 87-88q{  I @y = T.expo³äw z. @1.0/c1 †hz/(y+z! ñ was dead wrong,0÷how it probably got that wayò# This version due to Janne SinkkonenR ±matches all«6std… ð texts (e.g., Knuth Vol 2 Ed 3 pg 134 "ç ë 	&")dOYgammaP,s Fif y ‹,‚y / (y +—	H  { G K6 20.0œ PUparetÎ ßå
ßP' 	Ì #. ¸"is%7hapÚ.…â Jain, pg. 495  É  ) ¥-Ã 4³  # 1/ u% x$ È tweibullGÉ ®W. 
Ð – ]  Ø 7calØ s ^  ø G ö9; bug fix courtesy Bill ArmsA ¯ 2* (´7u))) « Š)


## - À------------- K
## * ü Operating System Random Source 0 ³---


class1 0 ( ò):
    """Alternate rQ  number genq Por usv sh ¡s provided@ …by the oœ sœ ó (such as /dev/uZ ¡on Unix or= ‚CryptGen’ á on Windows).
! à Not available! Ball c £s (see os.^ Õ() for detailC 2"""L 3defá S(self 1GetÈ Cnext&  !in ðrange [0.0, 1.0).Y  >   ô	return (int.from_bytes(_š ö7), 'big') >> 3) * RECIP_BPFž 0get(Abits£ :, k¦ ! ²k) -> x.  G¨ôes an int with kÇ  O 	­ ‚if k < 0 ¿   óraise ValueError(' 0of C ò must be non-negative')§!  . õ ð  = (k + 7) // 8[   #T  ! åand rounded upP 0x =Í O š  l V6 ‰xg(' œ * 8 - k)‰ Ñ# trim excess’ �Š e ‹n‹u% nh - 	i#�@n) f˜žh´n�Å !# eTÕaempty T@ str� êun == 0.8 ý v&n)Ï CseedÊ Ø*args, **kwdsÖ ÑStub method. {Aused¡ auí  [#,."† FNone ß_notimplementŠ M… ¡ should noyOcall�  ØFNotI áG‚entropy àQ doess ³have state.è1get F = s Ü =


¼Ë `
# Crešàone instance, Í 
ñrom current time,9£export itsÍ0s
#Šömodule-level functions.  The S sharø € across u0useH c(both ±user's codez  ðPython libraries), bu`±at's fine
#V@mostO@gramé±d is easier   Zpcasual k � than makcthem
# ti%“their own#() `ce.

_@% = 
F1 =  . 
ô%om  v
unifor  µ
triangular2  L  �ð = _inst.randintò
choice = _inst. –
randrang  f
sampl  h
shuff  ` sa æs
normalvariatM 	 @
log % 
 \
expo#  œ
vonmises$  l
gamma%  V
gausÊ  M
bet5  m
paret  	 }
weibul
 h
getst- ,
s   4  ¹7bit¸ $et èFbyte    


## - ": ß test programY p

def _+ ð_generator(n, func, args):
    from ðistics import stdev, fmean as  0 Dtime* Ñperf_counter
# Xt0 =  !() €data = [„ !(*„ ¡ for i in 'A(n)]+ .t1C  axbar =� (P Z @sigm[ ¶   , *  0low3 !in  @high #ax ^ ðprint(f'{t1 - t0:.3f} sec, {n} ÷ 0s {À ².__name__}'Q ; €'avg %g,@1dev 2min Àax %g\n' % (ž !, ¸ p, low, ’ 7))
ºs(N=2000©Í N,4rdom, ()„ #   ù ¿, (0.0, 1.02 
3 4 1 1™ 2 1 !2û 	b 5“ 91 1Ž“ 21 ñc 03 2uss¶ñ Ä@, (3¿ 3ƒ	§triangular_ d 2 / : Q=-…Qk supúSð

if hasattr(_os, "fork"):
    ð_os.register_at_fork(af öŒin_child=_inst.seed)


if __name__ == '__main__':
    _test()
#
# Secret Labs' Regular Expression Engine
#
# re-compatible interface for the sre matching e8 øCopyright (c) 1998-2001 by~ ¡ AB.  All , ±s reserved.¨ �This ver• 0of q ðbSRE library can be redistributed under CNRI's
# Python 1.6 license.  For any other use, please contact Secret LabE ¡AB (info@pN ’ware.com)§ ‘Portions £ #isð have been developed in coopera3 q with
#® ð.  Hewlett-Packard provided funding v Ê  ˆgC band
# Ê c« ility work¢ Á
r"""SupportC "reó$exó‘s (RE).

sdmodule  –0  ôÌ `s simiJpto
thos%!unó ²Perl.  It s‡ ð
s both 8-bit and Unicode ÈAngs;  
ñqpattern&   " 0 be‘processed¾Ðin null bytes7 ñ
characters outsideKôUS ASCII range.

 dW ´ pspecialY a ordinŠb o.
Most ò, like "A", "a", or "0", ar� Ÿsimplest
  ;² yc2ply~  Ðmselves.  YouÏ
concatenate… rso lastD  esF v  ' '$e è =2areM0"."Tq  Matchf%y ) ñ except a newline.‚+"^5 Î2art9ý. $.  :end,  D“just befoGu 1 atw © !  é A m *m 0Y mR ð (greedy) repeti¶é !1ece™"REI m G6 P meanc¢at it willxP as m‚V ¤as possibl2+— 1— $+"?I à %1 Ý ºÑ Ò*?,+?,?? Non-’@viouè /re9P{m,n}!5¿from m to n^B ??  �  Dabov>"\\ö 0EitçescapesÙÅor signals a  ssequencN  []» p   Indib+ e¼úsê * @  A õawe first&iI  ¹Ðlementing set�.
    "|" ò#  A|B, creates an RE that will match either A or B? P(...)A M" `es the; ainside ²parentheses4  /  ðThe contents can be retrievede w ±ed later inP bstringK °(?aiLmsux) M ±letters set+ ôcorresponding flags defined belowF :Ç �Non-group/ ýversion of regular Ë ‘(?P<name>@  ƒ 2sub¡ 4 i yŒ X ð is accessible by > †  P= O PEtextO pearlier<  lW  8 dL #’ ô A comment; ignoredm =! h cif ...f ðs next, but doesn't©2sumÓâ J !J 8 ÄP 0 <{ z bpreced, † P(must0fixÿeength)@ q @ Onot D @(id/5…)yes|no)p`yes paGGn ifºSwith 6 '!d,CÌ
  šÕ(optional) noT oCqwise.

0ñpecial sequencesi0istxð"\\" and a characAfrom˜ Rlist
Ç2  I¬ ‡ordinary0 0is  o> 5 ,?  p
resultï(REë Á fsecondJ €…\number 2 + Æo‡ – Rsame 6 C A.Ãbonly a´Astarý  X i/\Z6 0end14 b4  ! bempty [ ä€  #r S Sa wor6/\BO  o
Î N dN ðany decimal digit; equivalent to·ÜŠ[0-9] in by»½s@ä |!s Ä QASCII’‰ C  In
5 "ou�8 9, i V Zwhole” PrangešrUnicodeØ 	#\Dx  Anon-ý  óR[^\d]¹ /\sC  ¯whitespaceD ¿ \t\n\r\f\vK¤ç ZS ð non-whitespace ðcharacter; equivalent to [^\s].
    \w ÿ   Matches any alphanumeric F ±a-zA-Z0-9_]L J ö  in bytes patterns or string òwith the ASCII flag“ G /In5 ;out8 °, it will mÆ   
‘ ÿrange of Unicodeâ Ps (le² Ús plus digitsK  »underscore)´ WÖ oLOCALE–  a set [2b ]šs definedn 4as ’ 0forÙ P currÈblocale #\W5Æ Xpcomplem, Sof \w+ \+ ña literal backslash.

This module exports~ `followÉ¡functions:³ z \ „   a regular? tressioný „ ¢ `beginnM Cof aí§ BfullS O 0allà
E `search” S
   MqpresencaŸ ‚ 0sub: ò   Substitute oc2ceso â` foundùc E nF ñSame as sub, but also returnZ`numberV sp  ^C madæQsplitN S
 k 1 byB � ‹ @find&p  Find  1 È  =  &2  R² 0an   ator yieldÆaFq objecteBeach–†  • ile   Comp
 w’ into a P5F 7 @purg5 b  Clea	` Ccach-Qescap3 B×ô Hnon-àsí  
E± ÜP othen 2an ƒ Cand [ àcan take an op@al 'Èps' argu{€
consist`of one1mors Rmo 2 �tants, jo à°"|".
A, L, ƒ óU are mutually exclusivü #A U-. F~0, mº ñ\w, \W, \b, \B, \d, \DÐ;  Œ ° ‘corresponó½Ç« categorie7I 6(raQ M Uwhole–= ‘, which iv‘ |default€h  ò 
‚0, tÒ žU ÿ  only availabled ‘behaviourtòneedn't be specifiedžòI  IGNORECASE  Perform case-insensitive#inè2L  )´ M‘adependÃ&(t þð	M  MULTILINE   "^" matchðes the beginning of lines (after a new >)
  ’as well aG string.* “"$" matchr 7endl gbeforem  R  Z K m B  ¿ x ’S  DOTALL® &".x ¡any characÚ Ðt all, includü  K î Ä ¡X  VERBOSEM 0Ign¦ ðwhitespace and comments for nicer lookQ BRE'sJ ’U  UNICODJ 0For8 òpatibility only. b dK Õ ß patterns (iti{‘default),” ‘forbiddenJ UbytesI ñ.

This module also defõôan exception 'error'.

"""

import enum ¸sre_compile Epars áfunctools
try:Â J ‚_locale
r ! I` Et '   ð = None


# public symbR ±__all__ = [Y "b…", "full `search 3sub n bplit",< pfindall   @iter à   Ppurge	 qtemplat descapeE 3 # P·  M÷ 	 A I L M S X UD AASCI&  IGNORECASE  QLOCAL
 �MULTILIN í ! «G pñ ",
]

__version.ð
"2.2.1"

class RegexFlag(Ý@.Int )†Ž w = A = ð¢.SRE_FLAG_! ò# assume ascii "Ü"[È O = IH & 2# ikAcaseC ý O = L? " ˆ âcurrent 8-bit � K O = UL # M zunicode× ‡O = MK % P# mak3Qchors$žrœ ÍO = SP " M 2dotV¦F 	O = XG # jÕP #ù` extenC�s (experi÷Ðal, don't relÇ P"se.ÏTEMPLATE = TŠ $ ð# disable backtracD� _DEBUGA  d# dumpå ½¼aÎ
I ódef __repr__(selfå ß0if  á._name_ is not{	 $   ×return f're.{2 !}'c  # Pvalue° Qelf._ _ pmembersµ] pnegativ5 / E < 0 4if   
‹ + 1= ~	 0  ‰Cm inÐ _æ$__< À      if valûue & m._value_:
   U &= ~% $ õmembers.append(f're.{m._name_}')1 1if P 
g ? Ahex(& )9 ó res = '|'.join(2   ºif negative\ Vif le1 J > 1!  ï ^ µf'~({res})'±   ;elsU   4 3 2 ¡return resE ó__str__ = object. ó

globals().update(RegexFlag.__á ð__)

# sre exception
error = ‘_compile.  + - 0ò)
# public interface

def match(pattern, string, flags=0)Yó"""Try to apply the 3 1 at ƒstart of F 91ing80a Mm 6 , or None éo‰ á was found."""6 D  « £ ").Á ¸ )Ô Bfull ¥ Ø ! í /llÒ a¿ 	Ö Osear«ÃScan throughÑã looking for al!to­$j®KÅ 
Ù &ubÖFrepl¯count=0� R” ŠM Ð obtained by F  acñ  ! �leftmostPÀnon-overlapp! ´occurrencesí4 in?bô@ [ Qementg !.   u€be eithed–   ‘callable;B Cif aY ð, backslash escapesv òit are processed.  If it i‚$a R �, it's pa' Ïd€ and musª  Ã a° "acÃ § pto be ul y@sub(®„OsubnÖ&Ða 2-tuple conÖ ©@(newz  nuŸ!).Ò  1 isÖ B Rasource} k "	[ 2.  « š  "of= pubstitu º Ñat were made.M X	C 
Àe; if a strið"ng, backslash escapes in it are processed.
    If ðis a callable, it's pa& ñ the Match object and must? ðreturn a replacement string to be uk 8"""/ ð_compile(pattern, flags).subn(K ,E ö, count)

def split5 h Q, max #=0I A=0):p @"""S4 Æ csourceY 1 by áoccurrences of • B á  Ï àa list contain  `result 2sub‘  s.W> Qcaptu±parentheses‡  –m  z n P text‹ 1allD QgroupÂ p 0 D Ralso ¡ @ed a³r;  ) ™ E  » — -ö is nonzero, at most P!s ,B  ÷X pmainder¤   õ  O ‹   �final elE bŽ  Á(f ì~findallQRª }  ¼ 0all�-overlappÄmé/ Á u !.
¼ ö If one or more Û¡] esiË­,¥G G2of 8 °; this will/ @tupl‹ 	•C 2has„ Athan• K ¨ dEmpty Ê  – €includedp × .�dyOiterz ƒperator t �î w ².  For eachÜ ,- ƒ R | Ç­I { —Ö…Cö.ûgular expression , Ž2a P {.E+dpurge(QClear1-rez bcaches\ _  .c0 !()€­_˜.  _  –|templatÎø + î ‘ Ø … oáð|T)

# SPECIAL_CHARS
# closA�')', '}'´ð']'
# '-' (a rangeàcharacter set)! &4  ~', (exten8	% 0 opÆAions0 p#' (comú)i ðWHITESPACE (ignored)k ðverbose mode
_special_\ ðs_map = {i: '\\' + chr(i) for i= ðb'()[]{}?*+-|^$\\.&~# \t\n\r\v\f'}

def eñscape(pattern):
    """ E ñ special characters in a string.+ 3 Åif isinstancW ,+ \  ` sreturn u Ã.translate(_k _k as_map)^ Belse›  ? 8   =W » ¢, 'latin1'3  ) h †.encode(F "
Pó = type(sre_compile. ï('', 0))
Match)  .m( ¯(''))

# - 0P
# in¼ô#als

_cache = {}  # ordered!

_MAXCACHE = 512
def Î CSflags©X #: ï ²”
ê: ³, RegexFlagE  † 1 =  a.valueA 6tryÔ«À [pç$),w ,C ]> ö except KeyErrorJ Apass" 
¡ N #, Ö¡ "ifY D  · praise V¯ b (U    ò "cannot processE ô argument with a<dÆ " ` 0if S l"isi§º ¤ BType£ f"firstƒ pmust be(oing orŽ pMà 6½º £ ( ‡ & DEBUG• rif len(ËU) >= }
bñ# Drop the oldest itemc	$ Bdel ^ ¤[next(itero )+ &ò(StopIteration, Runtim5,DÄ @ M  t �A = pÃ Òòp

@functools.lruF ()Œ`_repl( ÷— � ( 1aceo«|  Faparse. Q_temph 8 ` 
‚ dexpandf!, ¬$, 5 ‡  ö.8 Q implŠ dQ hookŒ @ bŠ � $ ”  qCÇ k È 8 ­ )Ê FsubxÈ % Á  �.sub/subnÅ \elperÇ 8¬_ ¼ & q[0] and †1]) == 10# lÎ0al £Û€ @ "[0ð Ï0fil	
·=. ÿ ð    return sre_pôarse.expand_template(	 ñB, match)
    return filter

# register myself for pickling

import copyreg

def _ Xe(p):S ó_compile, (p.pattern, p.flags)

D .> P" _ $, A )— - 0ñ"
# experimental stuff (see python-dev discussionsý adetail² Âlass Scannerì d €_init__(0±, lexicon, é #=0 mófrom sre_constants QñBRANCH, SUBPATTERNK 5 aif isi0 1ce(U ·, RegexFlag^  -  " =| e.valueI  Ÿ .ž $ =¨  ð	# combine phrases into a cpound Å2 ep = [] 1s =Ý p~ Stte š sùœ 6 `q ´, action in� e ?   0gidc ¶.opengroup(_    �p.append(c† #ubYU(s, [v  /   (q‘, (gid, 0 C I (ÕM))),K *])Ž rs.close© Z Vp[-1]%  ?g Sª (§(None, p)); Ës‰ Sn.v"(pi  ¡ ) �Xstrin5jresultÉF2 =  Vñ > v @elf.\ 4ner (a .% 3 Ui = 0 ªwhile Trueà2m =›ØŠif not m.  ¿UbreakX   jD .      F_ == jE ˆ!= h3ö[m.lastindex-1][1úa ’callable(@ › % P  § 	¹   8 # =	´"m.D`#if' 1 is  )Þ Í“ 	s  –j 
ô", Éð[i:]
"""Redo the builtin repr() (  esP »ð) but with limits on most sizes."""

__all__t�"Repr", "G  �cursive_ ]rx !s
D…itertool@bislice t_thread[¡get_ident
®(reb Q(fill'c='...'´ñ'Decorator to make aó B fun¥/@ , % _  !'
_ …dR Ding_D U(user {   ü �_runningi2t()J    N  wrØr"9 À        key ÷
= id(self), get_ident()
  ùif key in repr_running:$  / ùreturn fillvalue! ; Š.add(keyg ?tryT òsult = user_function² 	` ofinallB ´ .discar}  ¼  reo 
Z p# Can't~  } õools.wraps() here because of bootstrap issuesG  1 ðper.__module__ =oYattr(Ú 6, '% '!B ?doc? " < ?nam| # > Bqual ¾ 
' F `annotaÆsÈ 	* V', {}°± ¥decorating0Ò

class Repr:- Âdef __init__O} Õ.maxlevel = 6É _tuple 0lis¯3 �array = 5M 0dic3 4  se K ofrozen Odequœ ½string = 30l !lo 4 Rother5 6  : Î6F, x)9‚& # Q1(x,  N)~!   Q, x, mL @typen0 =  `(x).__ !__‡  r`if ' 'š #   Œ    SpartsA   \.spliß; Á = '_'.join(9 naif has®° '½ A_' +œ  [ º  z 
?get6  !ú Õ JelseÇ M  { .y ‡instance> ?  ›_" tterable¥`  ÷ft, right, maxiter, trail=''Æ ™n = len(x¬ º <= 0 and n©  lQ'...'Ž  Í 2newE  _  `5- 1/  3  À 21 =8 	 Ppiecei [ t(elem, V `) for   Bisli&ê ))]L dif n >2:  ] �.append(Ë ÿ  �  y 4', 'Œ 
" T A== 1!Y": q Š i" + Œ á0'%s p' % (le¨s«7_€Ü¼P 1ð x, level, '(', ð')', self.maxtuple, ',')

    def repr_list(' Á, x, level):#  ' breturnG _0 ”iterable(. —, '[', ']o  U i _arrayj †if not x| € "= õ'%s')" % x.typecodeª —header = , ?, [. Ø S  Û K‹ Ý /seEÛ 
'; %)'È õx = _possibly_sorted(x)  º  '{’}’<set´ `frozen ÿº A À >[ Ê 5)',   É  ï? ô _deque…]E õ r /icxn = lená ts == 0: � 6'{} "if¥* <# 7...& 1newË_ uvel - 1A È21 =Ö  µpieces = [] ÿfor key in islice(  kGdictB ª0keyg ! =st1(key, £ Û + 9val+ ox[key]. ¯ ð.append('%s: %s' % c  H #, Q )g a>þ 0max° +: J F...'2   Qb.join(+  ¦1%s}| ,s,?stru ^ �builtins.µ D(x[:Êvstring]n  Vn(s) Ã % 
:±i = max(0, {  ( f-3)//2R  wj. 
z J-3-i+ ¯ ri] + x[Ë7-j:±  _  4 1s[:& '\A + s.  s). lLs¥/inD ] @õ) # XXX Hope this isn't too slow...s QOlongO & M+ K+VstancÑÀ level):
     Ptry:
	  ùs = builtins.repr(x)! à# Bugs in x.__" û	__() can cause arbitrary7 õexceptions -- then make up something3 - $ E4 
¥  return '<%‰ ðstance at %#x>' % (› öclass__.__name__, id(x)Î ú
if len(s) > self.maxotherm Éi = max(0, (' f-3)//2P  Cj- , *-i*  iòs[:i] + '...' + s[‘ E-j:]í ðs


def _possibly_sorteÓ ° @# Siñnot all sequences of items¥2be 9 ñ  and comparisonp b# func¥xmay raiÒ — Ä#, ˜ Ran unR C y  $¡that case. 	oA < gb ù/ @list- �
aRepr =  0()
Š1 =  ¹r
"""Worä  leÕ ñ for GNU readline.

TheUleter
 ²s keywords,A-ins2`globalx  a7€ectable
eðspace (which defaults to __main__); wù w “ �ng NAME. ð.., it
evaluates (!)(° expression-!to `last dìÇ Á ðs its attributes.

It's very cool� ñdo "import sys" type "sys.", hit_ ¢  on
  (twice),
51see$  ‹ ]û  ð qined by ðsys module!

Tip:{   qthe tabW !as, 
m q, call
1©õparse_and_bind("tab:®Ö")

Notes:

-<sÀ“ g %eræð are *ignored* (Þ ’generallyÐ,
 £ ðto fail).  This is a featureÛs‡º 0 se õ t`deviceð raw (or cbreak).ñ%e, printing a traceback wouldn't work well
  without>Ðicated hooplap@saveª1set½brestor¾€tty stat - z h!ofö ˜  ..= m èP appl{ iF1def@code„ €be execuš Áif an objectÀ € a __get³ __º kPPfound3Ó it  9àresponsibility}  � R  Puser)€  en t this
 ¨P, I cI 1der  ˜  ac¢. €risk.  M-7 à 'ed‹ M V(e.g.M · s or indexÄPoperaz"s)kSnot* h0ed.¯W ² àoriginal stdinò Ë ©6,½" Áever
  used,ã è  K2uleÐ [ �À module) areô silently inactive.

"""

import atexit „builtins õ__main__

__all__ = ["Completer"]

class  ò:
    def __init__(self, namespace = None)*  . ô"""Create a new c` € for the €mand linÁ  5   v %([_ P]) ->1 £ ˆ instanc7 ñ If unspecified,b wdefault§ Awherz  I ñions are performedè  … 4is 'å (technically, Ô.__dict__). Nµs should beK �given as / ¥ionaries.
  ð Ö F P used= 1· Õ mechanism ofJ @readMA via Eset_x0() Ã :z 0 .( ‘ E(my_ƒ$).J )q t /  'ifh Ødnot is«(J ,
+ > õraise TypeError('/ p must bHB6y')Ç ÷ # Don't bind to† òquite yet, but flag whethe‚Åuser wants aÕ ## FcJ  ³o� ÷. This will allow usM %to™ R;4 atÕ ion time, 7Enow.D 	Y!isih = �B.useÙens = 1? Oelse/ 0/ P �=	v 

«text, stataReturn�Ènext possibl…'B 'V!isµòed successively withm õ
 == 0, 1, 2, ... until itÑ r� 7B.  TzI°2ginW ‰  æ   <if m\ ;õCM  í ù {.strip( n  Rå 
h @ _Ä›_availablì (   ( €.insert_u V('\t'Î '  / ¯redisplay() ß%''pC x ’ ~ 	6 2 .  _	;l  if "." in ä 6À`matche) Sattr_ (7 
í ™ : 5 " =oglobalK :try� Û I [× ]ðexcept IndexError:
   Ðreturn None

 ñdef _callable_postfix(self, val, word):,  0 4if . G(val    - ! =4 e + "("8 y  ! y ãglobal_matchesv GtextW ³"""Compute ( ` when ' ò is a simple name.\  ‹ Rê ða list of all key‚ ñ
s, built-in functions andE µs currently¿ °defined in .m ¢space thatš } &""ú dimport{ R Í E= [] ±seen = {"__¡ uins__"}    @len(ý ) 2fors$ing 0.kwø ¸ !if' q[:n] ==B
!  %  ƒ P.add()d     D  	þ{'finally', 'try'}N  3  I 5':'¹     $elW 2not[ PFalseY  «  mTrue',;  ? 
 `'break3 `contin7 o 'pass? ey Ë  Ë ×l.appenE ©n7Jin [J”Úins.__dict__]Q ?  Mš 'L w.items(4Vñæ E  k ð
g >   
 ' î Ñ NHPA · ŒOattr( ó aiÍG dot’ÁAssuming theú <!of ¡form NAME. @...[	 !],-%isuPevalu) }í Ò, it will be ( 2tedA 0ts × VibuteM ð(as revealed by dir()) are us; Ðs possible coã§Æ.  (For clasM ¢instances, � membersO òalso considered.)o ÁðWARNING: this can stÅ õinvoke arbitrary C code, if an objectÀwith a __getê p__ hookcŒ %reM qm = re.ñ
(r"(\w+(\.\w+)*)\.(\w*)",ÃN!ifÏmÉd`Qexpr,�ö  = m.group(1, 3K :tryF  ð ! =Ú(F 
 A �except E :ionN ” ñ Q# get‰ ¾!en® §v #, R =  Ë€s = set(B® Àct))
       ó words.discard("__builtins__")

  õif hasattr(thisobject, '__class__'):-  4 X Hadd($ #  £update(getK wmembersh .f %))B Åmatches = [] €n = len(© + 0if  j == ''§ ånoprefix = '_'H (el4 _5 		6 /se_ ENone` ›while Tru0 1for’1 in sO  Y@if (]@[:n]Ò Ú 5and\  %  Unot (ä 1andV Q[:n+1=  )¾@ eñ = "%s.%s" % (expr,G a/   >tryµ     �val = get¶ âQ 	�except E ?ion^ ópass  # Include even É`ibute ?set,,el¾ ²  
ñself._callable_postfix(val, $  ¡es.append( 
* "if@ Qes or© �ñ YbreakÅ 4if /  '³ Ç !  ¸í  ý 2 	¿¿ †es.sort(Ç dreturnÇ P

defìØk1p¢ret = dir( Ô l ‹,'__basef ,   ,( .' 
2e   +�   C Ã ¿ Uret

Æóimport readline
ŽI RErrorm _" Q_avai– = False
]%  .sï¥ompleter(C
 3).c ” ð# Release references early at shutdown (th" ¤ ‘ module'sNð# contents are quasi-immort´  = w ór function holds aF € Ñ to globals). Àatexit.regisÏ ulambda:5î  KÉ6 ð	
"""runpy.py - locating ° @runn àPython code us  Ê þ ñ	 namespace

Provides supÎ ;R 	wscriptsU k 
\ À instead of | ònative filesystem.

This allows G ² ö	to play nicely with non-=  œ¢d PEP 302
‹†ers whenÖ ¶ €as well   ) 8  ¿ Às.
"""
# Wrió	tten by Nick Coghlan <nc
 òLat gmail.com>
#    to implement PEP 338 (Executing Modules as Scripts)


import sys
import  ð lib.machinery #[ þortlib first so we can test #15386 via -mJ Eutil o
 Ttypes °os
from pkg. q ò read_code, get_� ðer

__all__ = [
ÿ a"run_mä 1",  òpath",
]

class _Temp’(object):<  "" òorarily replace a P 0 in!. ñs with an empty namespace"""N ðdef __init__(self,H _( p  °    R  % =# C ! aule = ,.½ �Type(mod; )1 c_saved	 !]
! • Senter– Œ L 9 = — :  Œ 2try*    ' 	l °.append(sys×  k[X ]¥ ú except KeyErrorV Epasst I ¢ 5ule, areturn½ 	ï x„W*argsõ !if0 .Æ 
� ƒ ò mu]ˆ 	= 5[0]’ JelseM 8delF[Q 9  	W ÆÄÚModifiedArgv0Çä	yWvalueõ ^  1 =  y  ä ¢entinel = 7)()fU`S dis notyX 
(Ñraise Runtime%@("Al�y preservÏèÃ "_à >r =uHargvŸ Ú ç / 	Ø >	i 3 @ #_sÏ R;ys.e › ³

# TODO: RqÃthese helpergñ Žñ_bootstrap_external functions.
ý  -(  ,  ‘globals,  e=None,©  Ò ‚  Bspec , 1pkg~ ! sQ rA"""HÍ  �@run —  Nžnominated>)ifª  2 ± (Ù ˆ.update(ß %ifÄ  F 
B �loader =  Ý f¥ ÑÐ  hcached2 
äR  % 9. A ]   eorigin  Ðcached = mod_Óspec.cached
  õif pkg_name is None:  $  a= mod_D aparent' ñrun_globals.update(_N 2__ 2  [ ,,  O  a__file, f) ¹ +  U 1doc)  Ï ' aloader*  , bpackag« /  (Y 5)·exec(code, : hreturn p

def _* pmodule_; @ Dinit{=é  €  Z# Ä ” “# q scriptÔ ) À"""Helper to´  › € in new q àspace with sysy �ified"""v ï( =_ 0 if' d�U else q.originA Z a_TempM(ê ¢) as temp_5a, _Mod} aArgv0({ Ç  ý  9 Ä( =: .A ‘.__dict__x  2 “ ñ ŒB (, ™" -  !,× ,t,´# Copy the ¥ !of  ä PoraryI Aule,ù 1hey¨ ÿ# may be cleared when8 ’ goes awa9 ˆ § q ¶.copy()

# ô1getN Afullñ , õB andSfor a› É3get”…_detailsµð , error=ImportE ¢ 2p.startsúC("."!  ‘RraiseC ‘("Relativ71ule� �s not sup_ 2ed"\ÉH _, ±±.rpartitionj R, z q# Try i· 1ing  °avoid catch  `ializaZ ° s\  K 6tryX   "__X 4__(ª ¸   wexcept 1 ÿ¾2# I,“ óor higher ancestor Ù q¢missing, lÜš  p #¯  Rn‚d by fin�() belowÿtj zÛaught. But doN  � al3  ot‘  s5: 	3 Pif e. «  ñS or ( %!=D ƒ 	9  ¾    r HKC  + TU 4   ï R `# Warn¬ “m|° has alreads#en°ed under it�2rma+M Pexist=%pUs.getò 0 iP t° ð Þ„hasattr(U ð, "__path__"):
   ñfrom warnings import 
$ ô!  msg = "{mod_name!r} found in sys.modules afterG iof " \I  U Ô"package {pkgO ÿ
, but prior to execution E Œ ð; this may result— ßunpredictable‰ ôbehaviour".format(á =	 $, ¥ =	 )Ò  <’(RuntimeWHq(msg))
' Atry:	  ú cspec =àlib.util.find_ ~ b ‘except (I•óError, Attribute 4Typ BValu v) as exy 0# T!€hack fix©n‡ ðedance mismatch betweenô  › E and½ #1 ðortlib, where the latóàraises other e¬ €s for ca / J 1pkg` 0pre€Asly A 'd í 0 ~ò p while 4Bing x >Qifica3 x {£•({}: {})"K  if3 uö.endswith(".py"). « t à+= (f". Try uso 'vñ [:-3]}' instead§f  A  &f"5  }'™ 6¸  L"."ï 1 ? E–Á, type(ex)._Ä ‘__, ex)) Ç!ex‚ !if† is NoneØ ^ 0"No
@ule … pd %s" % Y “ J Q.submá¢_search_lokse ;noti fõ == "__main__" orc €! †	² 0Cank Duse B4as ;  X 7uleM	{ ^ Á‰  ò   =2 í T + ".H , 3 Ãreturn _get_‰details(N ,µ7 9 ½
 õ‡  " Õ 
G³ ,   	6 # · loaded; bešaÑis irrelevant A   E “ �(("%s; %rÁ< Rand cg9" +=  A  Ã"be directly²•ed") %(e,])® 1r =›. ` 2if   Š °«  ¼Gspacµ &beˆ ^ ²  	Qccode =¼ .   ÃÕ“ƒeÏÂ 0if Y "No& Áobject availø ÛÀ mod_name)
 ð2   return mod_name, spec, code

class _Error(Exception):
    """E òD that _run_module_as_main() should report without a traceback"""

# XXX ncoghlan: S6 ð this be documented and made public?
# (Current \ °ghts: don'tu  ea ’e mistakeª ðlead to its
# creaÕ f when Å ò () no longer meH °needs of
# á ï �.c, but cë  y ó
be changed because it was¶ _)
def1†ö alter_argv=TruesðRuns the designaˆ 1 in _}0__ Ðaspace
°c   Not B Wexecu@ ðwill have full access*4theB ] Q. If «ais not™ arable,� SF Afuncu abe use–"ruÆ Ô  ˆ Ù va freshÔ .Õ Aœ¡very leastx pse variˆ sA ¹ æ âbe overwrittenÐ ÔA   _$__¬   l__file lcached lloader dpackagC  ö X 6try| 6if ö5 or”T != "À ø": # i.e. -m switchª 5 ,
 Ít = _get£†details(ræ)M Pelse:¥  u �directory¡ 0zip I5ion=  4 [  
 Š  %ai2� … ep~v as exc.òmsg = "%s: %s" % (sys.Š  õ,/ Î  bit(msg  Á°_globals = ! t&s[mƒ].__dictÏ	£Œ  <  «U[0] =xb.origif% Ó( ,E„ y, None,C G ’ Ø!)
H` h õd, initY =X  7  ,  z‡sys=FalspE%  aØ Qule'sÌ imÛeing it“RU¨`result! –top levelÆ ]aionaryù Ê  
 < i7 %  Í Ú!ifÈ  1 isW¬ø © % z Û7sys. É 	¬ º¿f,t ¢ ½Id   @# Lec �3sysVU alone•/*{}Út ìb Ðerror=ImportEðrror):
    # Helper that gives a nicer e( ó message when attempting toA ðexecute a zipfile or directory by invok4 ³__main__.py= pAlso mow Ôthe standard * € out of  bway soª 3theB qpreexis” ñ__loader__ entry doesn't cause issues8 ˆ „name = "m " Qsaved© õ  = sys.modules[4 ]( ?del 	2tryc gÂreturn _get_O •_details(V )V áexcept ImportE‚fas excM 5if 5 ³ in str(excÒ o   RraiseÄ@("ca‚find %r ‚  ; Q%r" %x  3  ¢ ,ð àpath[0])) from› A t  gfinallI bob


def%Pcode_` _RP(run_®0, f ë ð# Check for a compiled 2 a first‹  deM  d_¸ ` = os.
 @.abs b(os.fs$ (] ‰Ðwith io.open_B (% I f) as f” ! r = read- fF 1if  vis None1 0# Tr0didšQwork,ÝPry it] Ñnormal sourceE Î  ¤›  2 „ =#0(f.© #()O0, 'Å'³ ¬ 3   ˜ „2  ŽÐinit_globals=á  , '  ¤ ©C"""E& W ± located atÙsspecifi»bsystem$ Dion
÷ RDs2 Qresuló top level u õspace dictionary= 2The ½ ” may refe¨ôly to a Python script (i.e.~ 2onezpcould bf  ã0ly <uÏ ˜   ‚)2els¨   ×x o 0pcontain/Ta top� å «3.py§ ¢ """½%if� t› ô<  >9 1pkgÔ Åmp.rpartiKr(".")[0ùiœPer = Ð (N D HP# TryÇ  ì Rvoid *   0impî asx not consumc�e deprecax @ warå ris_Null€ $Faa‚if type(d Ter)._j¦_ == 'imp'/  A_- g 6  K… 2Truåpif isinÅcŠ ,™  )B • Õ# Not a validlË1runÿEclJ š #Š |%()úðhelp as we want to aóllow compiled files
  ðcode, fname = _get_ `_from_+ P(run_ a, path )? €return _% amodule? (D ð, init_globals, $ I > „  1pkgh =	 ‚, script ® „ Uelse:P ð# Finder is definï !or¹ ç, so add it to3 ðthe start of sys.ç    Ÿ.insert(06try†  Ï ð# Here's where things are a little different l ‡  "F€ M pcase. TL ð, we only had to replacd "e = 0 inÉ Q whil N pode was’°ning and do
 !so ñsomewhat optional.Ð  | L áhave no choiceJ 1we  œ @movesCeven‘ Pwe re¼ +heM  6@. Ifã €don't do<ð
s, a __loader__ attributeê tG PexistÎ „__main__`may pr‹ `t locaÜ  ö |3new' .– 1modv, p_spec, ¨ .b mû‚details(œ »  ±with _TempM' R¢) as temp_@ 9, \{  = ð _ModifiedArgv0(�� )q ,  « n( =Y .` �.__dict__f rÇ Ý ÀQ ÍB  €   Ïñ;Òg).copy*kfinallGX c “ re^	– þexcept ValueError1±pass


if _Tt__ == "7"2 Q# Run G “Àphe nextamIÑline argument’ pif len(¸ ’argv) < 2[  Ï �print("No&7ule_ �for execu©!",»=G bstderrg
0delü.i ‘[0] # Mak¥ requestedi $ys( ¨  Ž Ê!as@¹ ð [0])
"""A gener¯‚ useful T@scheòr class.

Each instancek"is ð	 manages its own queue.
	pulti-th' Èñ is implied; youHqsupposeðhack that
yourself, orœ € a singl*… ’per appli ¥ ñis parametrized ¿€two func‰Ps, onShat is
‰ H P1curÝItime1  1 
× e)ñ a delay.  You canó  Preal-I  b ±by
substituí   �ðsleep from built-ñin module time, or you can
implement simulated% ° by writing, ñr own functions.  ThisB  also be us; ðo integrate schedulC ôwith STDWIN events; the delay
X ’ is allowJ amodify( Pqueuev 0imev  q `expresv 1as
v 0ersÜ Afloa¹ ðpoint numbers, as long  itl áconsistent.

E— à are specified‚tuples (;±priority, a`, arguAð, kwargs).
As in UNIX, Î $r 7 � ¶ mean highe ;6 wthis
wa÷ ð  maintainedÂ aT PExecu 0 of6
jk  «lŠ v» Ï`, pass§ it8 Ó �
sequence™ "é p" (remeUP that õPython, multiple\ 
6 sZ�be packed5 $a ` ð) and keyword parametÎBin "Wc".
Thev_ @ may€an insta¬ ðmethod so it
has anothVqo referÖ @priv©ðdata (besides global variableÑ@"""
+1ort ñheapq
from collePs imp* Qnamed?0 ’threading4  S- �monotonicÝ_ ã

__all__ = ["MÁer"]

class ²(f !(' @', '@ ,"­ò')):
    __slotsm ] òdef __eq__(s, o): return (s.` $s.Øs) == (o o J /ltJ /< J eJ ” g” >” g” >” €Aa.__doc‹ñ('''Numeric type compatible T Ï—Tvalueû ¡ W* äX 4  ûÃtructor.''') Ðƒ XsÑaed for*2samUP willŠe…Qed
in" Sorder– iìu �s H  • ¯ Êb  E9 $(*dR, **k…Ô  a   	Š@ hol¡¼ @posiP'alÇû } È { g  e !di!9aryg ød ô
_sentinel = object()#:
rÀf __init__(sð elf, timefunc=_
 q, delay   £.sleep):
  ñ"""Initialize a new instance, passing theY B andR A  [ …tions""" ûself._queue = [] ú	lock = threading.RLock()'  °  ^  * Õ 
! Û " =•  . 
$ Ðdef enterabs(Ž à, priority, ac· ú, argument=(), kwargs=_sentinel*ER %�event inê Òat an absolut1.�  mpReturns# aID for: G ñwhich can be used to remove it,Ó  D Çif necessary[ {#ifÅ E is È ñ G æ U = {}[ ‰ 0= EØ (|-	*³Pwith j ._ß
q `heapq. Apush‘!, y H r' ’ # The IDFÕA Û¦ 	Óñ	A variant that specifies� Ý as a relativÕ@Thisi�actually7 Òmore commonlyÏi:Oface¶j =@   ÊB() +Ø¥gß 0 	¬H  FcßlG�±B"""R{#anˆAfromÛ éÄ  @must¹0pre8 ¾¶ ;² Red by‘1().‡  ˆ!IfU �  F*noR0, t`÷raises ValueError� ûƒ
4“.Z(x z ’  £©1ify ¨)ƒ2mpt 
ÂCheck whetheÝ. Ù e3 .¬ 5 · ‚ 1runœ 0, blŠing=True� @Exec‡æ qs untilo– ŽO  ´ rFalse eF ’scheduled…s due toB ñexpire soonest (if any)6Sthen Ù  O¡deadline oD Vnext i Dcallf  WW  qe´ aa posi©ö Rfirst¸  Weq )  q  F  t $ed¶ 4   :lef ;E oƒ Awise\ 3 j*d A[ ZdD C(its– � �i¬e¸Ànt).  If
     ð&the delay function returns prematurely, it is simply
9   µrestarted.
 I) ÿ legal for both f  1and au ? † ‘to modify& ðqueue or to raise an excep³ ;?  ñs are not caught butJ ðscheduler's state ç 5insD ÷well-defined so run() may be called againö `A quesŒ �able hack0Padded´ ðallow other threads Erun:x ¡just afterÝ 1venK³executed, aª@of 0^  %toF ñavoid monopolizing÷ ‹CPU when„  %6als? @runnÃ Ü 5"""^ ð # localize vari* a accesÏ Pminim ‡overhead8 ð“o improvef safetQÐlock = self._ A q  ¼ 5   # Htime"  ! Àpop = heapq. 5pop ¦while True© û@withk   !ifxq   Ubreak_      ” Â, priority, ý
, argument, kwargs = q[0]@ `now = F  ê -()! !if o > nowš :! =í @ ;els ·   7 ]False8  " Zpop(q“ "ifÌŠ >bþ>ing!  R r£Ò -Ò x –   % 
ƒ Ò y&(*y"**{
>  † d «0)   # Let`2runs@properì0def10ue(ë)å ð"""An ordered list of upcomÊesœE ì amlauples Ÿ`fields†a  ¸  m	sn»  3 
2Use/ ÄAsortc™3 raåPan usµ '" !edë !._& 5)'.²0# WL yrq, two æ  ª2d aa BsameôÇwill show inI  gbactualC — py would¼pretriev¯ Ô   ( „o
(ˆ �º &[:}† ¦Q(map(Ã B2, [@ b]*len( À)))
"""Gener{ÀcryptographiZñy strong pseudo-random numbers suits�for
manag``secret Pch as�ð ount authentica˜ð, tokens, and simiðtlar.

See PEP 506 for more information.
https://www.python.org/dev/peps/pep-0506/

"""

__all__ = ['choice', 'randbelow', 'randbits öSystemRandom',
  À'token_bytes*  6hex {urlsafe8 êcompare_digest õ]


import base64 óinascii

from hmac ) 
P    Ã $om" Å `

_sys  8 =  @()

  ú 4 = & D.get !
c1  a

def '  Eñ	(exclusive_upper_bound):?±"""Return a2  § �nt in the  ge [0, n).± q?if R R <= 0V  ' ðraise ValueError("U~  ~ ñ must be positive.")� r� ð _Ç ñ

DEFAULT_ENTROPY = 32  # number of C to ^ ¢by default+-& !(n _=None# $ ð  string contain *= *q !.
Ò 5If  Pis ``[ ð`` or not supplied,�‘easonable: ¤ ƒ is usedP H>>> ± ñ16)  #doctest:+SKIP> ðb'\\xebr\\x17D*t\\xae\\xd4 p3S\\xb6 2 ’bP1\\x8b'µ ìÔ  …  ¹ à += €} iÇÆ œ`)y3hex wCtextw,£³hexadecimal3The! F hasy € "om˜a, each  ½`verted1two½ ßhex digits.  ¿G ÷ ½û'f9bf78b9a18ce6d46a0cd2b0b86df9da¨pb˜˜.hexlify()±±)).decode('Ã'‹$�@URL-R ˜B-Ÿ encodingœqš4
Ô «0Ý uûDrmhze6EPcv0fN_81Bj-nAkYtok =‚Y¢ ‰.r A_b64e‘0).r;np(b'='Žô
"""Selectors module.

Thi ñ- allows high-level and efficient I/O multiplexing, built upo×1
`sa `_ Q prim†0s.
ú×À abc import ý+ABCMeta, abstractmethod
from collections import namedtuple# D.abc' ƒMapping
6 Dmath  seT  ðys


# generic events, that must be mapped to_ plementa– ó-specific ones
EVENT_READ = (1 << 0) UWRITE ó	1)


def _fileobj_to_fd( ð):
    """Return a  Á descriptor   �object.
5 ¢ParametersE  9 bobj --D -  C 7ileS ? q < Òcorresponding? ƒ 0 Caise/ óValueError if the m ¡is invalid£ 1""" Ôif isinstanceü S, int Afd ={ 1obj6 BelseÛ   6try   0 4intP .Qno())>  # òexcept (Attribut´ T, Typ Ë ‹  < rð   2("IÚ ¤ ñ ": á  1  Å"{!r}".formaª "))ÖANone¬ –if fd < 0â  ž7: {a dþ rOafd


SworKey =X'(' P', ['B�obj', 'fd % 
 ydata'])N  .__doc__ =ÂM “U, fd,j C )MOÉ2 usm”associate O ˆpts backä b £ Ì", æ"edg ð mask, and attached x  .
Œóif sys.version_info >= (3, 5ÿÆ Q7objç  'FKž Áregistered.'Ç	< d7 Underly] ;  u? E¬
«øwaited for on this™W  ²`('''OpÝ‘al opaque* �Y ê °For exampleB€is couldCÔ@storÐàper-client sesxp ID.'''tclass _9Í( “3""" 8 ofå s© €or keys.æ¢ dtÄ_init__(self*#orW  N  %._C =N"or§E 3lenD : a1len^ E @._fdå3keyíF sgetitemJ ,È 7objS â
£ .Hdlookupjô × � ; ™ A[fd]& - %1KeyÒƒ  ‡ (Ï† is not  áÀNone

    deóf __iter__(self):
  preturn   ó._selector._fd_to_key)


class BaseS! Q(meta ƒ=ABCMetaX 4"""$ ñ  abstract base . !.
~ $A j ñ0 supports registering file objects to be monitored for specificN ¥I/O events_ A R is aR ódescriptor or anyd � with a `7 Ñno()` method.` µAn arbitrar2 0can– €attached¥ 2theg ¹ ƒ, which * AusedN  ¿ pexample6 sÕ õ context information, a callback, etcÝ < [ Ðuse various iU AmentA  s Ö°ect(), poll e	 A...)Ž `dependt0on Â @plat„ ô . The default `Õ`ÈQ uses0 AmostJ ›efficient‡  Y @curr a 6 2"""@.z 5def Ì !f,aCobj,ñ³, data=None� ÜC"""RNû”C $ ¦Parameters ÿaobj --h "or ?ž  F w 2  $to«ò (bitwise mask of EVENT_READ| RWRITE‰ N  Ì   5-- Y  "  R³³ ˜ÇKey instance/ Gaise. ÓValueError ifC  binvali  g 5Key&  Gelready”Ò 2 /OS1 `closedmQotherÑis unacceptabN I    ˆpunderlyšasystemx (if a  †is made)ö FNoteÕš 0may‰   0not½rõ  ‹ ~    T NotIS!edá f ­$unÆ
¯
œU& žDQ/, ?è "ed 5
x!If6 PiÞóed but has since been (•this doesÁ b*not* ŽÉ(j À 'pwrapped -> QÓ ljmodify»j‡Change aù >¹ ¸  ts…	Þ•@Àents  -- eveònts to monitor (bitwise mask of EVENT_READ| ƒWRITE)
  @data À-- attached  
" …Returns: ÷SelectorKey instance/ Gaise. ÷Anything that unregister() or  r9 f 5""" Wself.; vfileobjÆ r¤  ( S & ‘, events,Ø )ª ñ @abstractmethodj 0defB @ect(I ö , timeout=None) ó"""Perform the actual: ô ion, until some˜0ed Ž Á objects ares  zPreadyaq ’ expires.¬  % —ParameterZŸ e -- if< ñ> 0, this specifies§ Ámaximum wait- E, in…  d  seconds g "<=h eù ÿ() call won't block, and willL areport› ¢currently +; ‡ 0is ž,†  p € ˆa…M m ‚ becomes‡ }@list]D(key_1) fÐ ÍT H`‡` is a ¨± )ò NotImplementedError²  ÇQcloseÆ
¸C tsÅdT5qmust beÍ!ed[‚ake sureÂ°any underlyÖ€resourceÖ ofreed.´ FpassŸ qget_key¡ , Î	bt« Âkey associat“ a8
YÍ @ .¶ ª#©· @mappæ =` f.¸ Fmap(y4if $ ‹Æ  P¬R!me¥$('Š  3©&d'Q ;tryB Ûf [² Eobj]¯ ¡except Key_ =  T `("{!r}w 7notC ".Í3at(] q)) fromZµ/ 0
j€% a!ofé toTIo keys.ã __ù1r__F} ½  c__exit- w, *args4  À .Œô()


class _Base­ l( > 0""" Ì i•QationÖ ¬† %in† A  &#±Bmaps%¡descriptorÞ  E  - àself._fd_to_keƒy = {}
  õ# read-only mapping returned by get_map()2 Pself. Ò = _SelectorM; ( !)
, ñdef _fileobj_lookup #,  !):(  ‰ A"""Ru ! a ô descriptor from robject.a  9 ¦This wrapsl õto_fd() to do an exhaustive search in case€ Bthe \ ð is invalid but we still have it; 0our,0.   E Ris us6ð unregister() soF Fcan   — q EthatD ô was previously F ¡ed even ifƒ Ðs closed.  It² EalsoD … �." 5""" 6tryˆ SþO´8 úexcept ValueErrorF ?# D|†  m pfor keyV ;Ð._fd_to_key.vZ 's(& 1    if4 .“    
ƒ  +   Ñ  T %fdÀ   w# RaiseÅ ª after all¨ r( w Ø˜
Ñ,¥×ts, data=None¾ sif (not$ `) or (Õòts & ~(EVENT_READ |  gWRITE)C  ´ Š ² 3("I¯M ã: {!r}".formatb )” A  o$= ¹CKey(>#, ƒ
´ )Þ Q �dÆ 
’¼ 1Key1 ("ª € (FD {})Ç al�÷¨ »  ä ¢ ,dí Ò U[0] =, "ã¬
å�;[t 2.poù.¸ )\U">0is U‘%edú^ B Žñ 
jmodifyí 
ôÒ [V]” ü U#ifƒ! !.8‰  f´ M	% ï€LV á1lif}  *
çð# Use a shortcutÈpupdate § 1 
œ‡  Ú�_replace(% = z À        selfó._fd_to_key[key.fd] = key
  areturn  ñdef close(self):  ,   O ‹.clear()  ±map = None
  O |get_mapQ z X 6map1  ¯ �_from_fd6 G, fd‹ B"""R· 0the» ò associated to a given file descriptor.b  Í ¦Parametersá \fd --4 3 r 0 Ðcorresponding† A, orû Ñ if not found t 5""" 6tryy   	´5fd]4 ÿ except KeyError@ yÒ
class Select „or(_Base CImplR2""" �-based s7 0or.± ~  Å�__init__�:  ¹ …super().  Ýreaders = set00wri† p �registerp ,—ðobj, events, data=ï Œ 0keyI ’ B  < § #ifU Ú & EVENT_READ_¥Ë R.add(NF 	_WRITEG ô G  ¢%unË  ˆ ú 1 ü ¨  B $._Ê ndiscarÎ & © & ­ öif sys.platform == 'win32'LcÛür, w, _, timeoutÖ f$ xÞž.B  w< è 6 % % r + x, [NFelse’ _L \ ú ¯   ® ¥  ü  "is u S max( 6, 0®  � ¼¡  ½ #(¨ #f.· — Ñ,¾3f._º ò  J¿InterruptedRš ‹ • r~ 6t(r» w w ö for fd in r | wk C ÁE = 0V   $if3 
/   3 '|= = l = —Ý    8Ielf.{&fdÔ  (  ifç  $€.append(§  &1 .À )M 98 #

¯…_PollLik¤²	 Ì çðshared between poll, epoll aônd devpoll selectors."""
    _ ²_cls = None ¯EVENT_READ  TWRITE 0 ñdef __init__(self):  e …super().  ) Eelf.…   =£   – 1()
/  b �registerb ð	, fileobj, events, data=Ä ~ 0keyX „ B < ™  02er_Y A = 0„  Î #ifo 6 & %î  $ 
> |× / N \O 0 P :try<  Œb. ‰key.fd, «  kexceptK D%unF F8  þ BraisF –eturn keyÈB    Ê·1 s ó < õ ® æ Š OSErrorî õ # This can happen if the FD was closed since it‚ ô #" &9ed. Epass r omodifyåö_ fd_to_key[m#._Bƒ_lookup( %)]” ?Key Þ  C(f"{A ¶!r} is not ú r") fromYa ×changed = Fal,\ !=2.€
™³ 	� }E ¡ ( H §	 0 X {
�  ) Y 6  1 ¾  ¬L .Â,(Ë¢Ó ; À™  Á D ç	¦ µ6Truà!ifw ² ƒ
z 8 T 3if  
0 » é ’_replace(ê= ç i 
÷ 2î C Afd] Kw qfq|timeoutHñis shared betweenB€() and eN&()ï# ñ has a different signature9 Ãhandling of € ¦ parameterO  ‚ž  j é
;; À= None
     ÷   elif timeout <= 0:
   5= 0 Jelse& õ,# poll() has a resolution of 1 millisecond, round away fromV  u õ
# zero to wait *at least*¢ F )s.7 ¥ ¤math.ceil( e* 1e3)/ ¥ready = [] :tryÎ ñfd_event_list = self._selector.ë _ Y úexcept InterruptedErrorZ qreturn … € �for fd, t I in € 
A $ (s Ž 8#if> 2& ~® ªEVENT_READA  . E 2|= & UWRITE�  " P * Q  w 
Q  keu› @key_úf_fd(fdBy +ke�  2Ã.append((key/‚s & key.Ó )M 	j@

if›Rattr(È0, 'È2'):© ³class PollSè (_ DLike )ú 0""" `-based!5"""÷ 10_cl²x >$ � 0h¬ect.POLLIN$ {
% OOUT
Û eÜ  E Ë Ý - Þ  y » 
ß Eà & á  ÿ   def filenoÃf�  ðbk3or.0 )ä (  F  F ,Y[=NoneT 0is !  L   U = -1ø   X # < \  `  !# ]_j	š M  ‚n# @ » r y&-3z 7 Ä Âexpects `maxÂ`üñ be greater than¦ ;Ã �# we want/ �make sure. 3t `ßû	)` can be called when noI úFD is registeredZñmax_ev = max(len5÷ ._fd_to_key), 1^ ä «
b  f  	êÝj,ƒ 6_evã A v )  ð ready
         ñ   for fd, event in fd_ ‹_list:
   ]s = 0 #ifF þ& ~select.EPOLLING  V K ï|= EVENT_WRITEV ?OUTW ]READ
W ýkey = self._key_from_fd(fd), oif keyn óready.append((keyK0s &5 .å )U qreturn < ›  def close(— )p   "._W2or.( 
V usuper() À

if hasattrS òect, 'devpoll'):z rclass D S·Äor(_PollLike � ð"""Solaris /dev/O  J•ector."""A° 0_cl4¿ .ƒ '   ©” ;:$ $
% 2OUTÊ  T D`filenoò f¶   xL0 )F b + E   Š2kkqueue‰K vU(_Bas„GImpl� 2""". j-basedƒ9 �__init__6$ U"¹&orz½ (5K #© {qregisteµ0f, U 4objY», data=Noned ÔF @ 
æ /trß Ð Ë¢
— Û   7kevõ .[=°.KQ_FILTER_é,¡ ?  	? jEV_ADDº :  s–þontrol([kev], 0, 08 á _â 0H ã m_excepÃ ò,un##Yraise«D:key0N  Œ·¤
5 ¦
ƒ zE# &) @¥ƒÀILTER_READ,
  üselect.KQ_EV_DELETE)
8 Mtry:  % bself._D þor.control([kev], 0, 0M ïexcept OSErrorX ÿ # This can happen if the FD was closed since itœ #* ¿registered.& Ipass þif key.events & EVENT_WRITE¬ bkev =  !.k4 (> 4fd, ’KQ_FILTERD ,m  D R –~ÿSee comment aboveU`returnY
 3def$(Gú , timeout=None)l 0 =  - 2 is “else max(+ {@# If! 0_ev5 ñ0, kqueue will ignorecA  . For cons@ndñ # behavior with8 SotherÒ  : Ñlasses, we pr¥ that here ý€# (usingž 0). dùhttps://bugs.python.org/issue29255B 0max× =B A(lenQú ._fd_to_key), 1‰©ready = []I é‚kev_listêð •,} 5_evÈ
q ö¿Interruptedÿ+¡ 	œ @for piH’ 
% L@fd =& K.ide´ 3lag! ifilterb  " ©]s = 0 Aif f@ òÜNREADŽ Q #|=J * [ {\ + b #    keë e.º_from_fd(fd¤ , ÿË ”.� d(è#, /&Û4)U 	Ðù  ýÅ«îª  V í(V ‚super().D @)


R ó _can_use(methodW €"""Check7!weU"usìd p depend…@uponÐ« `operat ±system. """ p# Imple
€ation ba’> ¾ôgithub.com/sethmlarson/u  s2/blob/ma¡ 1.pyd )   = getattr.Rect, á ,üiNÀctor is None3:
  õ# select module does not implement method2 Áreturn False ñ# check if the OS and Kernel actually support# R ó. Call may fail withQ úOSError: [Errno 38] Functionž e™ 6tryÔ Ò ƒor_obj =á Aor()^  ù #ifÖ ¦ == 'poll'?  ! Ô Pthat   É UworksJ  - p .- &(0k Melse\ `lose e+ ‘, kqueue,50dev " fÖ  ]   	a c= Ì �2Tru�texcept Cª ( ¸p

# Cho‡  ´7besòagÀ, roughly:
#„ ® |­ |¨ >>d$.
Oñ() also can't ac“ òa FD > FD_SETSIZE (usòaround 1024)
if _can_use('r "')D�DefaultS´aor = K? 9
el> ¶ = En< å > D®@  \ = GPoll: %á %  ðor
"""Manage shelves of pickled objects.

A "  ñf" is a persistent, diHƒary-like5 ð.  The difference
�à dbm databasesL  4€values (-  ±keys!) in a› fý±
be essentióarbitrary Python} ås -- anything c "Ø 2"
m�¡can handle® ðis includes most clas ñstances, recursiveÄ @
typ  Ÿ*€ containw 1lotM³shared sub-& n  e â  
are ordinÅ `stringpÁTo summarizeäàinterface (key:"a / ,�  %n 
l 5):
²!im2 ÈvÜ ‰dÓûð.open(filename) #  ,I@ (g)¼  an¤ Fffixc ‚d[key] =“ ‚  # stor/0 ató   (overwritl"ld+ %if§  •  @# usP€an exist 6key P s |  u ð retrieve a COPYÓ S) † 3raiqm  Q# Key5 ˆê  ch¿ )ú DNOTEWi½A   #ª2ss , 9d*copy*‘ eentry!ú Cdel B ? ƒ # delet?JdFÀ s§ E :  #Á * `flag =Õ  f€d # true/  - fpà @listið.keys() # a list óof all existing keys (slow!)

  “d.close() !#  ñ it

Dependent on the implementation,+  [ �a persist, 0dic  ary may
or à not be necess ñ.to flush changes to disk.

Normally, d[key] returns a COPY ofŽ ðentry.  This needs care when
mutable % @ies    Àted: for exaÎ D, ifg ib Vlist,� 0.ap
ö	(anitem)
does NOT modifyŽ J òtself, as stored iB(P
mapp=@-- ib"lyO  ®  màcopy, which isd ðn immediately
discarded, so that$  « 0 ha¢ ð effect whatsoever0o% 0an
Ñ {é  § @a waÓ ’at will aC  “ ¾  ¾ f, use:/Sata =	 Co+  4 Ñata

To avoidË Ðproblem with ½ÑQ, youZ1pasÐ keyword
argu¥ð  writeback=TrueÜ  Å cñto shelve.open.  WhenS 
Ð ( =( «(filename,\ 0)
t@ `d keepFPcache© m „ ²  acR, andD ¼ m« «  
tÌeQkØ£ Â ¹ Ò PensurHàhat
such usage„Gƒ` works 0intèpd.

How& × œS Sñmay consume vast amount
of memorykv2che÷ !it¸Umake Æ ` very ž’Byou
+P manyJ6d'sÎPfter » ¦ "itÜ is»1: dþ no “ to
checkJ< i“" edand/or3 0nesxP
actu˜Œ!tex Í Aust ñà w Í1 at$ ù  llÅ Dthe
³� ³.  You can á`sync()žS  llF Y€ @emptÁe• C (d.J Palso  €hronizes·k¼!on�Žñfeasible).
"""

from picklQort P Rr, Un r&  io6 " ÀBytesIO

imp Qcolle+õs.abc

__all__ = ["Shelf", "BsdDb $Db‚  `"]

cl _CÎkdDict(a ".MMx)¶q'Marker¨a­ d A.  A¬@ attSòs raise a ValueError.'J3def< (ùS*argsc  ë; 9 á('invalid operO e|ds1f')Aa__iterS__len
 0get» s À_ = __deliteñm__ = keys = closed

    def __repr__(self):   ¡return '<C1 ñ Dictionary>'


class Shelf(colle ós.abc.MutableMappingT ‚"""Base 9 Pfor s= ° implementa_ "s.š PThis  õnitialized with a d‰ Ñ-like object.¹ ðSee the module's __doc__ string w áan overview of/ ’interfaceF 2"""†  Cinit ,~ ñ, protocol=None, writeback=False,Œ  E ókeyencoding="utf-8" #  {.Ø ! =a @ %ifk   n ¢ : ‰ E = 36 O _  
" ¶ & =Â 
# ªcache = {} Ï ZÝ 	8/teX  ƒQk in ¦  õ .š( Ù áyield k.decode� ( h )i 3len E À2len=  j 	6 ƒcontains; ,!@ Akey.u „  	Æ ‘ 1gets R ,eAault+`  ifq \ 
ôÚ  @U[key]› 0defq ‘ Ÿ__getitemë :tryb @valu÷ c .
i ú except KeyError= ±f = BytesIOÙ @ ì %])Ã  û~ úUnpickler(f).load(( "ifDÈ
ˆ  K Á 1 = ] o 2  ós0,; 
Â` €  =| (Ù Tp = P÷ ,á Ë' a.dump(¹  s  éo� = f.get> (?del)2del’ d M ƒ]E - Y
HpassÕe¶Ó—Ô 	. xÆCtypeÑa, trac¾E  > .+    + ‡ ¥’ å  Q [.syncá)  P-  l Ÿ    AàAttributeError;:
  Epass zfinally& ø2# Catch errors that may happen when close is called from __del__
r ð# because CPython5 õ	in interpreter shutdown.˜  B +tr˜   àself.dict = _C… ydDict(); jexceptÖ > QNone
6 4def» (` )9 áif not hasattr ×, 'writeback'+  ` ð# __init__ didn't succeed, so do abotherA1ing�  ;   ñ# see http://bugs.p3ö.org/issue1339007 for detailÌ B ereturnU  Î .«&()ì AsyncË ¾ 1if - Û B and Vcache g + u= Falsew  #  ¢ ×key, entry inM w.items(  2    Y r[key] =9 	T   .¢ Z= Truv " ± U = {}> )ifÄB0, '
ÄC  b.  8ñ
class BsdDbShelf( ¿ 1""" ò implementation using the "BSD" dbôRface.�ñThis adds methods first(), nex €previous  la  ™Ø qset_locn "()§±have no cou`0art{õ[g]dbm databases€ …e actual ó  must be openedÆ bone ofÍ absddb"‚ �modules "- ñ" routines (i.e. ) P.hash ,  bt 1 orB $  rn )Ú  ŸQed ton ³constructor´ 1See |  'sº€oc__ strq x´an overview· o{ h2"""ƒü´ , ü°, protocol=(%, v=ë,¾  J  ókeyencoding="utf-8"" # #.j e ', N ºó ©) g (s‚value) =s Ð .-6key0Âf = BytesIO(9 Ü N U q.decode¹ .� ÷, Unpickler(f).load()³ É « ¦ # —š V[ž   ™ .1 £ V ‚ >    . à)
        f = óBytesIO(value)
  ñ,return (key.decode(self.keyencoding), Unpickler(f).load())
D �def last6 !):  [  Q ", m 1 = T Qdict.- € Of = › @ñ
class DbfilenameShelf( ¦ 1""" ò' implementation using the "dbm" generic dbm interface.þ PThis  ñ nitialized with? { A for  B ‘database.*1See ðmodule's __doc__ str†  : áan overview of/ ‡  l2"""�  ��__init__‘$, … ó, flag='c', protocol=None, writeback=False Y `importú ®   3.e šdbm.open(n )k f @)


© 1  Ÿ ð"""Open a persistent aaionaryt0reaÀA andå 5ing¸e  parameterÊ ø    „  ¡underlyingÉð  As a side-effect, an extensQð may be added toÂB -  0mor ínœ  8 ðcreated.  The op¥!alÏG ¿ 0has] R same«3preÖ  ñ !ofC À*).e *3 �specifiek > v�$on�*erê<·àSîò"""A lexical analyzer 1 ísñ shell-like syntaxes.j1# M¯¸Fdocu<@by E,ðS. Raymond, 21 Dec 1998
# Input stacká ›óerror message cleanup/ Q ñSR, March 2000
# push_source()† 6pop ämade explicit B @Januô2001.
# Posix compliance, split(),}1argÛ sÐÂd
# iterator\  ^ ðGustavo Niemeyer, April­ 3i Pchang/±o tokenize î[‡ lsN ó
Vinay Sajip, July 2016.

Œ$os
 $re
 ð sys
from collec!sÖ¼Reque
 $io S_ñ
IO

__all__ = ["shlex", "
 	 Pquote	 sjoin"]
W) ìK'< 	Mƒinstreamž inÕ pµ§,@  “ apunctuÆð_chars=False):
     àif isinstance(	 Àream, str):
"   µ = StringIO0 )*  P 0nstE Ê is not NoneK Wself.P  F  t % �file = in	 ! ?elsT •sys.stdin4 U  š  p �posix =   "if Æ  Qeof =ã . œ * %''( q û commenters = '# qwordcha ö('abcdfeghijklmnopqrstuvwxyz7  å 
 ù'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'Ã› ó  • ÿ6+= ('ÃŸÃ Ã¡Ã¢Ã£Ã¤Ã¥Ã¦Ã§Ã¨Ã©ÃªÃ«Ã¬Ã­Ã®Ã¯Ã°Ã±Ã²Ã³Ã´ÃµÃ¶Ã¸Ã¹ÃºÃ»Ã¼Ã½Ã¾Ã¿¼ 	Ê ÷.'Ã€Ã�Ã‚ÃƒÃ„Ã…Ã†Ã‡ÃˆÃ‰ÃŠÃ‹ÃŒÃ�ÃŽÃ�Ã�Ã‘Ã’Ã“Ã”Ã•Ã–Ã˜Ã™ÃšÃ›ÃœÃ�ÃžØ Õ �whitespacU†' \t\r\nƒ $ ê_split = FalseºQquote¶;\'"B Qescapb /\\ d> < Astat;  : öpushback = deque(³· ªlineno = 1© šdebug = 0 Ptokenug  h/sth Asour?	?!ifíÁpunctuation_º
A 
�  elkC  I;TruñK {();<>|&Ó _,  „ 
Ç 4# _Žæ  £  a   £õqueue used by lookahead logici  ß»N â + �# these X@ add^ ðecause allowed in Áþ names, args, wildcardsz 	Í†'~-./*?=?w ·remove any 5‡ Ufrom F 	a  9ß  ð.maketrans(dict.= Wkeys(X Q)Ý „ 
G : =  .T �late(t)
… ‘@property 8def¼ d (E æbreturn[ 3W I 1sh_?B W, tokG p"Push a pen onto¸ T@popp·y 2getI � method"­  ñ "ifˆ ½J>= 1‚Ñprint("shlex:y3ings �" + repr(˜ Hðself.pushback.apñ#pendleft(tok)

    def push_source(self, newstream ±file=None):4  8 ò "Push an input > ú onto the lexer's ustack."D çif isinstance(t 7strk  o  ¶ = StringIO2 )S  ¿ .° l %apó Ú 0.in !, (  { å  {lineno)M 2   = < 
k C   4
" V E = 1 "if€ VdebugS è $ifh € is not x
$  ( Ñprint('shlex:Áping to £ y %s' % ò ×  @ OelseV Ù X  (,)J(opIÅA"Pop	0¦ˆTv.close(�	Ñ C, Òm2) =  c 1popùM …]3opp]@%s, c e %d' \Ð Q uˆ  4 Z¶state = ' 'Œ‘get_tokení AaGet a  X fromN¬B (or ô  _ t'Fvnempty)hý  úJback4tokB! .A ò H ÊZ >= 1J  $ N"«NÁken " + repr‘œ 7 `returnð hA# Noì ³ 7.  .% 4raw½ CreadM\ @# Haµ inclusions< Ï Î‚awhile j j2 ý Dspec� $ AhookÜ.Ÿ    ü    Œ >pecS    û ÝŸkõ5pecÍ  (  X ÌžPB  K ‚ à Á–' ð# Maybe we got EOF ŽEead?„ ):eofÓ  ò"otg  ˆ ¼
#  Æ É 5eofb   Í+ p‘º  4   á vNeither+@ norê   ¦Oelf.!if'!'þ  ‡ 
!á=?raw»fE ðEOF")
        retñurn raw

    def read_token(self):   åquoted = False õescapedstate = ' ' ¦while TrueF  J 0if \ ò.punctuation_chars and ’_pushback 
@  D @next4 / =1 e.pop()Š  2 ;elsˆ   H �instream.	*(1C 6if 0 n= '\n'š Û ¹lineno += 1… û ®debug >= 3A òprint("shlex: in \�%r I see ÷ Ñacter: %r" % ª.& ,n  á  ã )ý Û h  is NonQ $ A ' ö# past end of filB# YbreakÀ $el0u =`2 ˜%otœ!  c ™ H ¼ ?  #� 
 5 ”   ˜ '¢ßelf.whitespac  6 Ì ü2©  , 
ø`  s  Õ "® E   u ’#or-Qposixo×è 6   -Ámit current Q 	®5 i ~continuÿU¯commenters-Ö	µ {û| -    › % „ & !èò�  a `  c ·% =·MŽ  @word	�[ 	 ‰ 	… 'ª  € ¶
^ ˆ  c2ˆ ¹„ Ê¤ ¨ —µy ¢o_split„ + € °âå Ànextchar
     ñif self.token or ( üposix and quoted):
:  ñbreak   # emit current Q 5 OelseO ‰continue; $el¨ ‚state in¶ � sM  kd = TrJ  ¶ ðif not nextchar: À šnd of fil~   $  „ ®debug >= 2z , ðprint("shlex: I see EOFº � !s Ê )")è > ÿ# XXX what error should be raised here?< ! p ValueE< Á("No closingÎ_ationy   2 ==a¥ æ  / "ot' /'  Ó S5 +=x¾ / z o = ' ') { d� a aa p
0 ÄB aescape& R �  4 dVX dO  ‰\ {  \@ �( ” © ø1a]— a[t  d Q_actera Q# In +ñ shells, only the™@e itf ‡  T õ#e @ may* ‚d withinM -s.: Cif (+ 
É� Ê4  ‘  Í( !’ 3 Ñ  _ ß ã p+L { 
) � ' Ð (= € 	* Ä Ÿ('a', 'c'©  Ã	L    ¡ z BNoneG¶  ä /Ÿwhitespac2“À        prinÿt("shlex: I see whitespace in word state")
   Qself.! o = ' '% 1if ( ¡token or ( ÿposix and quoted):>  v ñbreak   # emit current Q 5 OelseO �continue; Ðelif nextchar© ¯commentersS % ÿinstream.readline(2   }no += 1„  ð 2#u  ' y ~ ) P 1‚" F † 5 Š " Žä _= 'c'¸Àpunctuation_Ñ¿ „ f %+=œÑ ˆ 5notDXÀ  …   ‰ ’_pushback· „.append(™Y> Ëß ÿ‚ yœu Ê ­K< € : g #_escapÄ di /'axŽ \ç  û5 /Ë  Ú  „ 1 âõ`_splitQ4  : f 9Å)(î Ã¿%r ²t ®"‡  
X ÿEleft§Â ¯debug >= 2» Lprinýú  ê þÁÀontinue
    ð	    result = self.token
    U = '' "if. ñposix and not quoted U  6 :7  S  U None Q šdebug > 15 #if§ 
  P ñprint("shlex: raw Ã ¢=" + repr(q %))l  6 OelseL FEOF"@ creturn‘ 
W ð def sourcehook(7¦, newfile)h ð"Hook called on a ! £name to beD 1d."V  © $ifH ¦[0] == '"'Q  " g % =) U1:-1]B õ2# This implements cpp-like semantics for relative-path inclusion.J Ñif isinstanceå 0.inÂ a, str)ù 0os.C s.isabs(  
¶ . Tjoin( 0dire )R’ ‹d f, open V"r"))¢Áerror_leaderZ ", À =Œ�, lineno ® ñ"Emit a C-compiler=ñ, Emacs-friendly ^ ’-message f 
Ém 1 isü
Æ † ç #ifœ < ¸ Â < #r"\"%s\"å ¢ %d: " % (i  'no,�__iter__(O  âYn__next- Š˜ Aget_ (K"if® Ù S J.eoföraise StopIteratiožŒ U 0

d„±plit(s, comì�=False, ©D=Tru�@"""S- @ the¾ ing *s* us
 Qshellç¢ syntax.""” ©†õ import warnings} .	 Q("Pas_  os0's'ú½ .s�  ()^ Õdeprecated.",N  8 D$ BionWx  ‡¢acklevel=2f0lex�     Á.whitespace_„ 0 = *x  €%otP�Clex.f6ers•¢list(lex)
šÞ^ _6 3andUB"""RQ"a wtescaped–ifrom *; *�n A' '.b ƒQ(arg)`yarg in =  ’ ð_find_unsafe = reË  Üð(r'[^\w@%+=:,./-]', ÒASCII).searchÑ j sÆ 0verF; ofkÄ cs\Ö 5"''u² !(s% F4 s–`# use m"le˜!s, àput single quoðtes into double quotes
    # the string $'b is n$ ád as '$'"'"'b'1 ñreturn "'" + s.replace("'", "'\ @") +" ñ


def _print_tokens(lexer):M rwhile 1  � Qtt = " 3.ge3 !(),   –if not tt2   Ubreak% n 0("To  : § òrepr(tt))

if __name__ == '__main__'R ðif len(sys.argv)$ Ÿ 
Ê rshlex()Ÿ BelseD  ’ Tfn = F 5[1]� Ðwith open(fn)^f5  9 b ðf, fn))
"""Utility functions for copyÀ and archiv `files  ÷
directory trees.

XXX TheH ¡here don'tO  � resourcee ðk or other metadata on Mac.
š ´

import os
 &sy 4tat tfnmatch RcolleÍ  ¢errno

tryZ AzlibIEdel  ñ_ZLIB_SUPPORTED = True
except I• RErrorL / ^Falsen 5bz2m  O_BZ2k . j Elzmak  __LZMAm / n “from pwd O�getpwnam+! h = Non#K 7grpK /grK ! K à_WINDOWS = os.‘ kà'nt'
posix = ny )if% ! ±à  0
elßZ ïì ò
nt

COPY_BUFSIZE = 1024 * 7  É$ 6 ð
_USE_CP_SENDFIL: ðhasattr(os, "sendj!")k ôð platform.startsóð("linux")
_HAS_FŒ N » < X  P, "_fÙ] ð # macOS

# CMD defaultÙÀ Windows 10
Xð2_DEFAULT_PATHEXT = ".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC"

__all4 ["~ 0objÝ  Dmode Dstat  12",Ö ×1   O  €   1mov< $rm £  ³SpecialFile 	F CExec r "make_òO  4 _‚;ats… „register6 '  y /un 	‚  e cunpack= s> < 	 ~ c ' # " ¿ 9 áignore_patternq Pchownz Pwhich	  ™ ðterminal_size",
       ñ"SameFileError"]
  ñ2# disk_usage is added later, if available on the platform

class T 1(OS !):\ Dpass  	| (& ñ"""Raised when source and destination arex Õsame file."""] epecialÜ ˆ b òtrying to do a kind of operl �(e.g. cop( ¡) which isÔ Ðnot supported2a s~ –  < ×a named pipe)© AExecü ¢ `a comm`could u ·be executedQ OReadQ  A“chive canO :reaK bgistryO PExcepzÌDBa re/ 8Awith¥ arl 1ing3 È `unpackw8 —ies failsÍ ÿ_GiveupOnFastCopy(† °as a signalÊ€fallback’!ush 0aw â ¡()/write()�  ;ÛnPfast-êP funcð —  T ado so.6 ¥ Pdef _1  0  _f  N ö(fsrc, fdst, flags3 Å  ,Bular"òcontent or metadata by ¶ €high-per[Aance~ k ö3) syscall (macOS)   É2try{  pinfd = Ÿ .© #no  2out :dst eú {v as errX r® ­qerr)  #®
ô 
Ç 	� gposix.F ® !, — G6 � Z� 2err¿  í  |<  é ! 2 ñ 	"  ifà ±.errno in {
 €.EINVAL, ¶no.ENOTSUP} ] 	‚ ?lse7 ú err from None

_@sendµ^W9@ 0one�cÀmmap-like fdÅuanotherb– f n 2aYqThis sh†1wor`òLinux >= 2.6.33 only.  ' q# Note:h Å Pobj()Wpleft al± €in order¥  ‘qintroduûy¦ ð# unexpected breakage. PossiŠUrisksÙ R zeroË  ®#Ð©† #ar�1# -µ@open2 â"a"(ppend) mod…/ 1srcš íp may be 5 ot"(ext3 *  a Buffered·Ber ([€hides un¯ ×ain a b- #),`  Gzipä8 Ádecompresses8 ð	), HTTPResponse (which dóecodes
    #   chunks). ñ!- possibly others (e.g. encrypted fs/partition?)7 ñglobal _USE_CP_SENDFILE Atry:	  q òinfd = fsrc.fileno(B   2out :dst �except E ¦ion as errX ðraise _GiveupOnFastCopy(err)ç ànot a regular z 
” ñ# Hopefully the whole  ô will be copied in a single call0@sendP Q() is - ploop 'tG 0EOF òreached (0 returnü ñ# so a bufsize smaller or bigger thanŸ bactual   , Ä pshould å ð
make any difference, alsoÁ AcaseH  ± ƒ contentD óchanges while beingû ê 	ÇPblock� ð = max(os.fstat(àP).st_ ‘, 2 ** 23ƒ�min 8MiBp ÑgOSErroÈY = 7¿%12: ð# On 32-bit architectures truncate to 1GiB áavoid Overflowm ,� ò # see bpo-38319ä  if sys.max¿ " <À &32h  Emin( ì 230)Y¡offset = 0o VFTrueL 	R  0sen2 5os.U , W", T %, u ? ; 
P #  # ...in odRÐo have a more` ’ormative K 2ion ;   2err”4ameÂAnameß  !   % 2&  Ê& 	'  if¾�.errno == ¶no.ENOTSOCK" S    ­foðis platform (proba±PLinux·V.6.33 D   a# does(rsupportã™s between"ys (onlyº F dsocket4   z = Fals& - ±	B &   -@SPC: Í`systemd Ì³ n Úerr from Nonee  # ;Á up on firstËò and if no data was2d#if� Î06 “os.lseek(Ãñ 0, os.SEEK_CUR)) ê© _� È
² * 5errí 7els^;T>= 0l PbreakA5EOFE  7 h@ += > °

def _copyjÐobj_readinto(Èò, fdst, length=COPY_BUFSIZE)u 5"""2 ð)/memoryview() based variant of^g (”*f t* must ·P q methodtAboths. bxð open in binary Ñmode.
    """ ð# Localize variable access to minim ‚overhead= ðfsrc_readinto =  . W  fdst_write Adst.  ñwith memoryview(bytearray(length)) as mv:.  ­ ¦while True   n] Œ E(mv)6  " Šif not n8   Ybreak,  el. 2 < ‡ 3 ¹ Pv[:n]¢ s£  S   ý ð ,(s‘ ;elsÅ  6  2 /Â ð
def copyfileobj(a , & ,ž 2=0)¡ 0"""* ° data from 5 Á-like objectŸ Î ?dst	* 1#ot“ �  Ï Añ  = COPY_BUFSIZEl É :º6 2	  3bufD P <L  „ › 6buf˜   
ø SyQbuf)
zP_same-“(src, dstlP# Macô‚sh, UnixÒif isinstance4 ðos.DirEntry) and hasattr(os.path, 'e Sstat']  � :try® sreturn 6 .4  e .= 0(),   ¨ þïexcept OSErrorV aFalse
2/if¢  ¢  4  ¢ ;`  Ý ’ ð# All other platforms: check for  L3namÕ.e•.normcase 0abs2  � U)) ==œ    e6 a$ctat(fn½z #fn– !fn§ ¹$fnU oislinkW ais_sym )]  ë .S Ý -	¡´, *, followc  s=lÛ w"""Copya0srcOòdst in the most efficient way possible.a,Ifd 1 isœ1set" V àis a symbolic î q, a new©ð will be created {Read o51ing•  æ � it pointÏ‹ òôsys.audit("shutil.5", ú¿ ?if  <áraise SameFilesa("{!r}Û 	 !re— ¸ œ  ".Ô atŽ+)m    _sw1= 0ú  ðPi, fnq´enumerate([¦ ]¬ ‹ DÀ st = _stat(Sfn)
  õ except OSError:   ù# File most likely does not exist. Epass LelseM ö)XXX What about other special files? (sockets, devices...­  • úif stat.S_ISFIFO(st.st_mode)r  . ðfn = fn.path if isinstance(fn, os.DirEntry) ´ 5 fnÄ  @   rraise S©  +ø("`%s` is a named pipe" % _ @ ÿif _WINDOWS and i == 0¬  ²ile_size = Õ   
� !ifvñ follow_symlinksO 0_is G(src3os.& …(os.read% R, dstU ó ‰ �with openL ò, 'rb') as fsrc, tdst, 'w 6dst?  ì q# macOS´       ÚHAS_FCOPYFILE3  # >try   °_fastcopy_f  &(� f‹ tposix._Z R_DATAÛ  >  `returnû 	�  # ÿ_GiveupOnFastCop“ 	è ? y# LinuxW  elö ¿USE_CP_SENDø &Ksend÷ á _½Windows, se×óhttps://github.com/python/c ÿpull/7160#discussion_r1954052309 / ý >6_@obj_èIinto$Emin(E  , ,ž_BUFSIZE)K(	™ g ^ )Ÿ5 @def -  ’Iª;*, ¾D=Tru´0"""r 5 ð bits from src toµ.i ,IfF  ‚ ‘Sset, óƒs aren't,  edû {AonlyÖ Ñif both `src`GP`dst`8 E Ð.  If `lchmodê R ‘availableG R(e.g.ÿÕ) this method(Ching» 1"""4 ôsys.audit("shutil.. ",ñ Ÿ, ÷Á !osæ. äTòif hasattr(os, 'Õ '1 Ê Yq_func, õ    ='l 1; Ÿ  4 
C  ! 
  C S _ _ \ v ê!st!at2  I¬#  X <  HMODE8)

õ Às, 'listxattó*r'):
    def _copyxattr(src, dst, *, follow_symlinks=True7  ; ð"""Copy extended filesystem M ñibutes from `src` to `dst`.
|  E ÷Overwrite existing< ( KIf `� Ä` is false, ¤ “ won't be½ 'edD 6"""y 2try †   ÷ names = os.listx = )Í úexcept OSError as ed ñif e.errno not in ( ¥.ENOTSUP,  EDATA WINVAL{ °   Uraise  Ueturn @for Ù  k   s�  C Rvalue	(ge A  L   Dos.sH [H g O a p eEPERMTr: J  ¤• 6 ™3elsg°*args, **kw
 Ú`pass

/  •Ostat”� ‡’ metadatañ¨óthe permission bits, last access time �modificat*  1andOflagÖµ On Linux, ½ `) also @ies ƒ "0N )ñ" where possible. TheTp conten¯ òowner, and group ar ³unaffected.m $ n $ ñ path-like objects or ¡s given as• sstrings;!If¸  op0al � Ô7set�aaren'tU (Qed ifÀ @only Oboth³ Ô.?  ½ Zôsys.audit("shutil.l4", ¿)÷ GS_nop(p~ns=Noneu  … n #Haa(aka df ï Ö   == B t 5 @(_isS Û) s.¢. Bdst)K #ifE ¹Q# use“ re�0uncš L"itGÇ Á  plookup(wå   r.@ getˆA(os, , 6� Ä 1 | Í� ó# *and* it supportsÒ à ^ ­ Ofn =« 
 C    4nò zt ð _follow_symlinkKs:
  ™return fn  Q_nop
 öif isinstance(src, os.DirEntry)X òst = src.stat(follow_symlinks= )S Kelse8 €lookup("< "")g 3 C @modeo ðtat.S_IMODE(st.st_ g T óutime")(dst, ns=) a S_ns, 9  !),¥  .‚ 	ñ4# We must copy extended attributes before the file is (potentially)h ð# chmod()'ed read-only, otherwise setxV ñ() will error with -EACCES.J _‰ * §ð Ã 	6try‡.Ž . M/, D 	ðexcept NotImplementedE¢ [ ß# if we got a+ P, it'0QcauseÍ  ]#   *~ VFalse¤% €lchown()dûunavailable, andP  eiZ	  m 1* fD -atF ? or/ ”doesn't iò AT_SYMLINK_NOFOLLOW¥ k  ³   b  (it r¢ed ENOSUP.½   #;rEðwe're out of options--we su ‘y cannot Ã  7 ± „ð.  give up, suppress* Pž `(whichKòwhat shutil always did in this circum¸ Apass€ aif has¼ |§'st_flags'7	… ö ‰, ‹¥ ’ D –!OSŠg as whì # 0forú  Ì ò'EOPNOTSUPP', 'E 'Á 0   Ð `errno,B )d ` . q == getõ  % M  Q Qbreak+    
    ¡raise

defn à*CTruea@"""CžAdata§  Ñ  bits ("cp¯’ dst"). R­ 's destinak.8The ó may be a directory) ,If· Nfº �@s wo5#be, red. Thi;ðresembles GNU's ® %-P± h asourceÝ ± # ay2sam~Â, a SameFileMboadV 1"""” ifë path.isdirBY •dò1os." @join!  qbasenam5)Ö ¢ Á]ö8  »8 À   return dsñ`t

def copy2(src, dst, *, follow_symlinks=True):
    """Copy data and metadata. Return the file's destination.
? M. 0 isy €ied with ðystat(). Please see L      P funcK I ðfor more informa d 8Thez ó may be a directory) ,Ifê  — tfalse, ý ` won'tA �ed. This† ðresembles GNU's "cp -P srcL!".% 1""" óif os.path.isdir(dstV ZUdst =" @join! , €basename«!))R   k  ¾¥ » 8  S8 râ#ds;ôignore_patterns(*
 × C"""Fµ� that canJaused a‚ytree() K £ parameter£P[  ™ô
a sequence of glob-style v h Aare e ’to exclud”sŒ ù_t ¿  › , dsÁ  ˜& !d_ Q = []h    …} 5 inˆ * !   	@ ñ.extend(fnmatch.filter(\ ,A Þ = rIset(H È É Ø_^€entries,˜'Þ,y,‚_c,ã  …  % •_dangling_,TÀs_exist_ok=F<<#if7  ¼†not None	Ï # =, `(os.fs‰ œ`), [x. kxeÍ ]?elsT  7!)
Ì ²os.makedirsW´   Â V Vrrorsìpuse_src{ :y =+ Þ  jO2 or �  Á D 0in M 7iesf   yó #in|+  •�continueÞ   1src*DÙy Y ä  3 ?dst3 3 …srcobj =¬ 0 ifk  “   Z � :try¿ $isEL . (¦  ª  M2 0and b Š == 'nt'^  3 ñ # Special checkB# j˜òs, which appear aÙ A  #òbut we want to recurseç/   l^Ù   (Œ.$ 9   1if @ ð .st_reparse_tagê  G þ.IO_REPARSE_TAG_MOUNT_POINTP 9Ð= False
       ò if is_symlink:
    Àto = os.read �(srcname). 3if J sK  U ý+# We can't just leave it to `copy_function` because legacyl O ýcode with a customH Àmay rely on c OtreeN ÿdoing the right thing.- 3os.ë (to, dst «  z @stat=5obj. „, followƒUs=notFcOelse\Àignore danglÉ ¡ 1 ifÔ ¯flag is onÒ 0if { ãos.path.existsÝ b) and ` _` ³ � ö _ntinupqotherwiå ne¡q occur. �2 will ra% �an error¿ ÿsrcentry.is_dir()™ 	 py	�5#s,ï ,n  Ý   Ü¹q, dirs_?I_ok= Ð E Ô  	^ ° 
Q  el‚ S þ †Ý 	è ö 	î 7# WéÐ SpecialFileEóý for unsupported file types“  Þ ² 1q# catchd 1rom ‚recursiv� *¡ so that wÀt B# coã†Ò� ˜ rexcept d  asÄ
™Õös.extend(err.args[0]ÞD %OSF ?whyF 0appF  ø  Ži’str(why))W 'trA  4Ÿ3 $ w `# Copyk�Ðaccess times w@failwfWindow‚if getat‘ a, 'win€', None)§ 	 â « +, Ú  ifd'or…A= a2orsá `return»Q

defî ð ?] ts=False=Ÿ ,0 l=F215O 
8d ¸D"""R‰!lyk   a^pectory ¨ ˜Å  ¸pdestinaB* !.
°àdirs_exist_ok ñXdictates whether to raise an exception in case dst or any
    missing parent directory already exists.
. &IfR  (s) occur,i ‚Error is{ °d with a lio –f reasonsG Qthe oš ðal symlinks flagE Ptrue, bbolic  ain theˆ ðsource tree resultà >sym0 � destina 1 A; ifE  itk `false,Z Á contents of Ðfiles pointedW%by” B ˜ Öare copied. I: 9 !byN å � doesn'tA ]@©Ðwill be added×  +Hege!inF 2an E !att 4endÍ ´copy proces‡¢You can se. o�óignore_dangling_»  0to  q if you‚ @want!Psilen™6his*a. Noti ˜ òis has no effect oÈ óplatforms that don't support os.‡ ETB² ` argumÈÑis a callable—‚given, iy!is e© cP`src`Ðameter, which#  ð  being visi by y] ()Îšd `names`D ÅB n rð, as returned byî  . qdir():
2  ®Ò a(src, d R) -> ÿ !d_ /  Si‰ ö˜  É  ? ãed recursivelyù) |p - oG •for each £ GútÁ 1s a@  À  }” � relative& P O ashould> 0notXÓ 	ò Ú Q_funcÙù¥ Õ B use\ !to°Ò  åD. Itü l paÑ ndX¢ X s€ás. By default,n 02()ƒ … U, but‚Ä õï ñe same signature (likkAy())º!beÖ 1"""š ðsys.audit("shutil.- 1", :Adst)+ § [0canm@src)ŒAitr:!  v‘entries =ÏB(itr= ±$ _^ () = m =q A=dstÔ6=Í%s,g  k  Ò= Bî=q  A 
ÄS  H Qdirs_¨I_ok= P)

ifËPattr(FBtat_�`, 'st_]_ ‚ibutes')Uà# Special handc bjØs/@makevðm behave like
    # symð@links for shutil.rmtree, since in general they do not appear as
    # regular lN . Rdef _M á_isdir(entry): v    try   Qst = & ñ.stat(follow_sym¦ u=False)@  3 €return (0 ð	.S_ISDIR(st.st_mode) and² 	5  9 % ñfile_attributes & J ýFILE_ATTRIBUTE_REPARSE_POINTK d t âreparse_tag ==L %IO@ ’TAG_MOUNTJ )Ì êexcept OSErrorä þ 
~ 
\ _(path\@os.là . K    e I3LNK$I)or0  4   DžBelsec
I¥)§0is_5 ©Ý=ƒ 0os.ö6.isð 

# version vulºøble to race conditions
û aunsafeP, one„M	¥Àwith os.scanø   S) as  2_itX    &¶ies = list(' úƒ (k  , l ø , sys.exc_info(@2ntri ![]¨ Ò ~ yÃ 	 6iesœ …fullnamep ^ 8  ¶ iº % 	    #ifÀ$is·(I   ð# This can only hTõn if someone replaces˜ 
? Áa directory ™#a *` after±� call toC `6 orº ’dir aboveÊw   Traise«P("Canj ðA on � Qbolic"ñ ?   ù     šã$, ¸	 >   ‰continueú �ðN p ¥ # M   ðQos.un~L C  5 è H ã 	† Uos.rmˆê q á  Ràrmdir, path, sònys.exc_info())

# Version using fd-based APIs to protect against races
def _rmtree_safe_fd(topfd, path, onerror):
    try:
   ñwith os.scandir(8 S) as  6_it.  4 ö entries = list(' )^  except OSEs  I 6errB áerr.filename =  7  Z o§ (� ,! ;, s* .   areturnA @for › Ay in	 6iesw Cfulls Ðos.path.join(
 ,/  y.  Ä  [ t&  ƒis_dir =.  ö(follow_symlinks=FalseF 
� 	Q 4 Å   Kelse) "f n 
  - ¦     uorig_st¯ Ostat­  8  q 0 = 9 “.S_ISDIR(V w.st_modè 7 ð 	$ çl^ $, žé<   …continue2i pdirfd =óQopen(3û, òO_RDONLY, dir_fd=k  € ä à  c ß ø m Å    if°  ÀP.sameIŸÊ f ï )ù 7  81 ³ Î ÓB ¢ ) Pos.rm\l_7   k $  ©  >o Å @<   €    æ ð# This can only happen if someone repla° P  0# a{qectory ž#a ^ù after the call to˜S #!Ÿ9 orÊ above.@ 
TraiseÉ‚("Cannotz rmA on � bolic "N 

ž "."Uù$ is] ÿ~finally_ µ ‘os.close(³ 0$Pos.un‘ kÀname, dir_fd—=topfd)
  ù except OSError:  ' 0one ÷@(os.unlink, fullname, sys.exc_info())

_use_fd_functions = ({os.open, os.stat, N Íos.rmdir} <=~  ‚ 6 ÿupports_dir_fd and, ™candir in: 6 =tat3 �ollow_symù ñs)

def rmtree(path, ignore_$“s=False, 4b=None)Sð"""Recursively delete a directory U !.
Ö *IfX ’ is set, g C are!  d; otherwix $if{ G 6  itA òcalled to handle theQ ð with arguments (¾,C å ã€) where    S €platform�` impleA aùµ dependent;I  3  u j  Œ AthatP 5  �caused it  Pfail;` F ‰  J ûa tuple returned by�<.  JF @is f© W 1 R  ¯R, an 0ion craisedš1"""C  ùâaudit("shutil.0", 3ciÇ
 Ó G%c(*args&    Apassh &elÔ �  £ G » H =if ›H S# Whicunsafeåñ works fine on bytes,9Pfd ba§‘does not.h  ½  ÷ „sinstanc': å @th =¤rfsdecod- < I ð# Note: To guard agaX  ‘@ rac� Rwe usÐ u 6dar0# lr²()/open()/f f trickµ 6try } rorig_st¡ D Ú ! %! E@;ion? 7= 2 J  ÊH“ "fdŽ Ê  � H†O_RDONLY8š  I ™ 1 ¤ s.’ Q.sameb@£ t;fd) ù _9_vd_fd(fd’ !Ø  /       Kœ8 ëC ¸–�  ñ~ ê ,  Jelseþ  ¦ #Àsá1iesØõ	forbidden, see bug #1669 \  á¼�("Cannot êÁÐon a symbolic› link")
  ý except OSError:   / 0one °(os.path.isM  ,  ö, sys.exc_info()b zfinallyS ²os.close(fd* Felse# +tr0 ²if _rmtree_v (u )2      P# sym— ýs to directories are forbidden, see bug #1669ï Traiseâ("Cannot call ‡ P on al \bolicVN	F#Ü ócan't continue even if S Ù hook returnsÓ    RaunsafeR,L ð)

# Allow introspection of whether or ðthe hardening against ‡ð
# attacks is supported? 8 òcurrent platform
^ƒ.avoids_Ì_C Ñ= _use_fd_fun� ò s

def _basenamÆ U"""A  ð) variant which fir§ `trips Œ PtrailÃ `slash,Y�present.:ñThus we always get7 0las“@mponÊ !of  Ÿ,¡8for‰!.
N  ! ò: Union[PathLike, str]  2e.gw D>>> rÍ ¢'/bar/foo'?' X / /0 '- ;U & V 1"""1  ¶   =�  fs 5ƒ 2sep   . %+ +0alt Cor '‚ „Ú >  rs—b(sep))áõmove(src, dst, copy= 2õÀRecursively 8 p a file°y1anoÈ@locaÜP. Thi¨ë psimilar)  ñUnix "mv" command. Rjï` '�bdestin^ ØI   a"y§ Z ? ~  ,m asource¥ !isâ �d inside ä  Ð (e j  ]Q must¹qalreadyI Sexist›£  +  ' Ps but¶  þ	ž ‚it may b� ðoverwritten depend^ D2s.r®¿) semantics}  is/Dour / oasystem%n O ris used;Oß0wisY rc² `copiedV Ô0and> K  4Dd. SI"arÐ `recrea¾Punder/ P new x .o× Ðfails because5Bcros½ · û `The opŠ@al `Õãp` argumaAis aŠ0ablñ¡at will beú Î!to"¢ àsource or it wð!ill be delegated to `copytree`.
    By default,  ñ%2() is used, but any function that supports the sameI ñ signature (likeM p()) can…  Q !.
* �A lot mor% 0uld àdone here...  " ñok at a mv.c shows a9 !ofF  } Pissueˆ Ñis implementaª Ãglosses overx 1""": ñsys.audit("shutil.move", src, dst)'  real_dst =  ðif os.path.isdir(- :  L@if _Ufile(M    $  # We might÷ ðon a case insensitive @ usystem,\ < qperformz`rename 2wayÍ %   2os. † 	I breturnŽ 0 Â# Using _basV –instead oò  mõortant, as we mustc P# ignß <Ptrail] PslashƒQavoidÃ S ‘  & %''G �v@joinu,«  ã &))Ì ¤texists(H )Šòraise Error("Destin; àâ '%s' already I E" % L ¦ 6tryT u
* ‘except OSp 5 ® aislinkÏ    ž  @to =| �   ' „  "   aos.sym   ;to,­  %   Pos.un# 
D )elŒ  Þ;src4 âd+0src@ 0
°  e 	]ACannòâve a directoryd²into itselfŸ ?  "0 .†z «/ ò if (_is_immutab†
# + @or (• ’os.accessT Àos.W_OK) andpDlist	oH    ,  UAplatŸË== 'darwin')B 0 ¡Permission(("' Þ—non-empty3# ]  "À`: LackVuwrite pr  ‡ " .P "%   
Q 5 P  öM_9=&  
Ö± 3   ¿js=Truee $rmc  Jelsey	e 
� 7  o  ‚3

def _ì2src‘ -@.abs  s i 7¶  .E0if |Ôsrc.endswith(- 7sep3 h +ú a H.sepA <dstA Àh.sep):
    ð    dst += os.path.sep
 `return ñ.startswith(src)

def _is_immutable :8 ¡st = _stat  (  `es = [" ñ .UF_IMMUTABLE,  S ]> Š ôhasattr(st, 'st_flags') and st. L in p ² Òget_gid(name)® A"""Ré às a gid, given Proup + A."""‰ ñif getgrnam is None or$  V @ % = 8try 0sul)P ” ) ÿ except KeyError5  T Qif reJ ais not“ 1 Ã# )[2ND É u8n u2useó /pw;P iðmake_tarball(base_!,  ñdir, compress="gzip", verbose=0, dry_run=0,Õ  `owner=ƒ0, gh Clogg  õCreate a (possiblyy ñ
ed) tar file from all the qs under€ '¶ 2'.
 ½ ¢' must be Æ   (@ ð	default), "bzip2", "xz",ð ¸ F Ê '„'Ê P' canN ñused to define an , + aö @ for® ‘ Àarchive thatNñ being built. Ifß�provided,6 ‡ currentX ‚ N Dwill† ¬ ¦The output4'  Ú"d %  Õ' +  ".tar", wAplus^  "€appropriœL ion extens
 @(".g3@".bzA“or ".xz")‘ y N ™  É € .g xb   €åDtar_  v A= ''> ñelif _ZLIB_SUPPORTED~. P == 'º'N 
(gzP ?BZ2O 	-P 8bz2Q OLZMAR 	/xzO xŸ &seÈ ±raise ValueFp("bad v v''Ó  Aaformatp÷¸
 ò"supported : {0}".8 (K "))i im'  s ÝP  # l3  Pbreakíòcircular dependencyD T 0_ex5 '. ù%ifT elseY¾ð = base_name + 'ô(.tar' + compress_ext
    archive_dir = os.path.dirname(   !)
1 )if4 uand not: eexists9 Qdir):8  m Áif logger is6 FNone  #   ø.info("creating %s",w )S   zdry_runL ªos.makedir‘ É %# _ ±the tarballY ¨ ¤ $'C¤ 4tar£ ',òuid = _get_uid(owner» g “gid(group5 bdef _s3 _ 0tar
H A E2 .% Q= gidÖ  _    Ö1 = } " 0if · \  % =+ : \ u\ ó " `returnk Ñ ‡!if
Á O=+ •file.openU \  , 'w|%s' %$ _Ø2iona� *ry±tar.add(basò˜, filter=p@ ofinallD  cclose(°Õ +!

Å }@_zipÂ t º  ³verbose=0,   `=õ1"""hpe a zip· °e from all ¿ d ”s under 'a "'.d¦The output> €will be “ d3    &¡".zip".  R±sb Å ! 0 of Q .! 1""" Qimporn  ™ “  # late  �for breakÜòcircular dependency¶ @zip_> u != Õ  "+ ¡ j xÁ5 ­¾¶£G'1 ²0add{ qto it",M 6 ƒ,‚ Ò º@withh ¼š.ZipFile(J /"wq } Ñ=Cú.ZIP_DEFLATED) as zfà ¼Æ@norm |¹ ` `   if  ! !øjcurdirP  . �zf.write(, ,2 " !   Ž #  Ýáˆ"\  )2dir{ •s¶e
@s inzFwalkå Ä À          foðr name in sorted(dir _s):
    path = os.
 P.norm	 ( @joinD   ,\ /))I ’zf.write(*   ) ÿif logger is not None�  ° , ÿ.info("adding '%s'", d &foAfileþ `  A ý 2%ifB isu s Ö . - 2 3 6Ä°return zip_µ  *ñ

_ARCHIVE_FORMATS = {. ñ'tar':   (_make_tarball, [('compress',Ït)], "un ped tar d ò
"),
}

if _ZLIB_SUPPORTED¢} @['gzw ?] =w ‘'gzip')],¬   "* ” -” 4 |  R z 0zip/ 0, [ß 3ZIPÒ Ï ?BZ2Î bÎ _bzip2Ï + 
Ð aOLZMA“ x“ /xz� ;xz'� ó	def get_archive_formats(!A"""RŠñs a list of suppÂ .    B  eand un !.
Ä±Each elemenF Qthe r\ °ed sequencey�a tuple (õÒ, description¶1"""Q } 3= [+ Áregistry[2])” B  1 in9 ~Y‘.items()]) b .°(} ²  ]  ' 

@` +erE• @func½ Ð, extra_args=Y	Û 8=''s È cers anXes M Ù  , E 0of  ² $. u $ ñcallable that will beä  us„o createn ès. If provided»  R a°!ofF ì bvalue)Àsl @ pasj pas arguAs toµ � .K ðu can beˆ  1  bÊ  , rÕ TM !byb â%x W'if© î  ¬ 9ÅB = [(!if.È (~à):
        raiñ0se TypeError('The %s object is not callable' % function)
    if! ñisinstance(extra_args, (tuple, list)):2  6 :raiv 5 ò	 needs to be a sequence'o ö for element in 7 \ ’  1 � ƒ or len(P V) !=2G § 6 ñs are : (arg_name, value)')
ï ð_ARCHIVE_FORMATS[% T] = (I,Ç ’, descripbð
def unregister_archive_format(K VOdel k 
E Dmake? S(base­ J ñ, root_dir=None, "  ¡verbose=0,Ô   ô dry_run=0, owneB SgroupN Clogg ¯ Ó"""Create an Ö à file (eg. zipžRtar).G'’  ñ '•@the  @ of  ; Ato cU Â, minus any á ‘-specificÀ Âextension; '  U Œ bP: oned °"zip", "tar !gz	 M ""b  ± !"x Q.  Or~ dother À#ed� Õ v ða directory that will á  *   ÷ € ² Ð; ie. we typi°ày chdir into '@  à‚' before*0ing?H 2.  l1dir—  ~ ™ Pwhereg Sstart» G Qfrom;I  ˆ C Æ Ðcommon prefixX1all÷ ¬d> k 0iesâ ~ â  š Ç 8and© Áboth defaultH  toÚ P curr-W ±y.  Returns  Eh ‘ ¢Ó!' n Ó'ñ–used whenHSa tarTe. By� 42user ’ Z Y X .¶ 1""" øsys.audit("shutil.Á"¡ ½ ,SÃ 2dir4òsave_cwd = os.getcwd( %ifù V ë  2if ½    Ð.debug("changwF%s'"š u  5 Î• €path.abs ž/ ÔkŸ  K 1os.é(y%ifÆ ½ 
Ø €  bcurdiri kw»S = {'o 3': 
 2, 'î #':}5 6try• R~_info =• ]ç¡except Key~D !VJ ‡("unknow-¡  'b –  ) ‡ ì ™  d# =#“ ð[0]
    for arg, vóal in format_info[1]:
  ñkwargs[arg] = val
 #if2 � != 'zip'3 p'owner'7 
 8  V S a'group  
 Y 6tryJ ðfilename = func(base_ !,  rdir, **Q )a gfinallD öif root_dir is not Nonee  “ �if logge#  ' $ ò.debug("changing back to '%s'", save_cwd‘  8   –os.chdir( ± treturn ë ò


def get_unpack_š2s()³ A"""R3 ós a list of supported–s  A Bing.\±Each elemen6 Qthe rL °ed sequence%qa tuple  (pòextensions, descriptionä 1""", « C = [7 PA0], 	 13])™ S   1 in:  " ñ	_UNPACK_FORMATS.items()]( b b.sort(} Â  X Bmats?d_checkBo« (s(Ä  P Á €, extra_æbC? `s what‹ós registered as an\4er.ü õ# first make sure no other,  [I €for this‚ \ã –existing_¯ Q = {}  4 	> /- S 3 0extå r'[0Þ   p  @[ext¸ j ;E §  K � j &ifË $ Ê -  { Pmsg =7 xalreadyk v Q"%s"'ü  2   qraise R’€ryError(J &% â,2  6  þ é 2]))ÿ !if9”callable(>2 \ – BType’ !'T^73 ´ must be a O #')ö¹îKr,¾=×ø 
¸3=''¼ P¦ ÙO9`	`¥ 3   u  ¢ 6. `ž ( › “ correspond:7to F l`*I   (  t�bwill b�@usedzê° archives. }7 2 ureceive$ 7 .™  If it's unâ  `handleíX  , it needs ñaa ReadóG Aexceo;ÁIf provided,&lÝ av!of? ìbvalue)†s÷ @ pasõ  †0rguËŽ (Ñ î@ cansŠ Ð to describe ðthe format, and will be returned
    by ( ²get_unpack_3 Ñs() function.* 1""" ñif extra_args is None:  Q  A= [] d_checka  opU Õs(extensions,k ,\ )< ðUNPACK_FORMATS[name] =( > 
�, descrim ô

def unregister‹ ì (T )Ã ¡"""Removes EQ from F 4ry._del _¨ x ö_ensure_directory(pathq E Q that` uparent / P of `3 …` existsx  ir» ` = os.! ".d a @eif not! cisdir(' ƒ  ·µos.makedirs ¾ €zipfile(  v « ctØ J A"""UFd zip `+ a` to `/ `› Ç `import3  1 “  # late  ñfor breaking circular dependency
L ç ¥ C.is_ ° £  í ñraise ReadError("%É (a‡  ˆ 1" %  ì )e  Õ =!    g.ZipFi°2tryJ i  ¼ pinfo in7 . Wlist(�  (  d 0 =  .\   s     p# don't÷àract absolute ÷ðs or ones with ..p Athem ?    # ame.starts* P('/')< @'..'4  x ¾  5   Šcontinue’ gtarget|@joinÕ    0, *P a.splitk " S    � 2ot H v L@ [  6endí g #å	) � Qdata ìi.read(›
m  / fBpen(Ž n, 'wb'' 	 8  €f.write(w 7 gfinallX7   Žf.close(7    › U á H 5zip> #0tarˆ=í¡tar/tar.gz 1bz2 /xzw  ê 	\€tarobj =^ É  .o� 
  +Qexcep€  A.Tar#'D k   	4 compressedN'un 1tarb
O B ±  .$8allJ° ¾å Áð _UNPACK_FORMATSð = {
    'tar':   (['. ð], _unpack_tarfile, [], "uncompressed tar  2"),G 5zipG   G 0zip+ G 5ZIP: ñ}

if _ZLIB_SUPPORTED:Q ñ_UNPACK_FORMATS['gzž $ =ª Ç.gz', '.tgz'n µ J  æ   "g¬ Ð -¥ "")“ ?BZ2’ b’ 2bz2“  	 ” &obzip2'•  OLZMA– x– x(x((,xz‘ ”def _find.pformat(FRname)È@for  «, info in Ús.items(/  © 3 �extension2  : 2[0]Q  "   !ifG \ ¥.endswith(7 O  -   areturn�  `None

Î öuarchiveÉ à, extract_dir=/ ", ì  j A"""U6C an C !.
i `�` is the„ 1 of , l / øtarget directory, whereK u 2is Ð ñed. If not provided,. ö current workingS  ¦ Eused¿ ÙŽ ± P: oneÌ °"zip", "tar ¯ 	 &"&Aor " ó".  Or any other registeredX -. ¶ Ø Õ _… rwill us h ±> and see if˜= !erJ ;wasw V that=  �In case né ðis found, a ValueError21rai4 k1"""c òsys.audit("shutil.‚ ¿ %",Ä	fa)A if• ƒ m  †4Ó = os.getcwd(?  Bfspa-T )¯ @E &  M  w ‡  U
‹ 6try˜  *_Ã, =ü[ ]~  . ¡except KeyX
K bv“("Unknownê:‚ '{0}'".\ ( €)) from ® U o cfunc =8 ¤ &[1�   ƒ, **dict] : 22])GFelseº p# we neÏ‘o look at€óÐers supportedòÄsË  Gx	/ 	«ð None:
         ò#   raise ReadError("Unknown archive format '{0}'". ã(filename))

  òfunc = _UNPACK_FORMATS[2 E][1]* ïkwargs = dict(1 52])2  \ u ò, extract_dir, **P ò)


if hasattr(os, 'statvfs'):¨ ò__all__.append('disk_usage'm €_ntuple_  ð  = collections.õ d# !('  ÿ', 'total used freK .( Ñ.__doc__ = 'T9 ñ space in bytes'õ ˆ ._ < Uo ;  • ; \Free ; w @def û q(path):  å """Return $    cðistics about the given ? .y ? < áed value is a P Q` with ¼cibutesX a ü U' and‹ 'Ô Á', which arew ¡amount of k,”"an˜ó ,j.N 5""" €st = os.Ø 2vfs  w ò = st.f_bavail * efrsize) � * _locks*  Ý B = (T * -T bo )8 r‹*({ ü ,‘ÿ)

elif _WINDOWS\ZXs[…™ Õ  = nt._getKJj4 ! -ÈI Jû
{Qchownb Ñr=None, group çð """Change ownerAry* Zß8use' Rcan b“¡uid/gid or¢ ) /v û!s,] Ñin that case,æ Athey×Àconverted toB pir resp�3ve ^ ÊÆñsys.audit('shutil.þ !',‘ û ¿"ifé 0is ” ¥  0VÂ1 Ó  2 3/or&@must Cset"b _& =g á _` =3 %ò# -1 means don't c‹!it3 ¦ ” ] !-1( #f  …`eitherŒ ðan int (the uid) or að# string (the system username)
    elif isinstance( ,7 !):   $ _ ± = _get_uid% ?   2if " vis None9   ñraise LookupError("no suchŠ â: {!r}".formatZ !)
{ �if group X _ A= -1* Å 8notÉ # X, intÊ  Ë Agid( 
Ì  u Í 6 Î  )Ï âos.chown(path,3", Ë p)

def `óterminal_size(fallback=(80, 24)Í q"""Get ×aize of = ‚ window.I…For each& áwo dimensions,: ñenvironment variable, COLUMNSeðand LINES respectively,)¢checked. I‡ A   ±defined andG  ³ Pvalue `a posiJ  ©peger, iÇ d¿ DWhenŠ 3 or… 0is ò_ p, whichT  a Åcommon case,v Àconnected to°.__stdout__A bquerie® €by invokE=os.¡£ ø b  ¼@ can¢  beî£cessfully _ õ, either because§ §ñ doesn't support7 Pying,4 p we are	? 	Ù $a � âu”given in Z¡ parameterC "is{# Fz� defaults-†
n" @ ú Åused by many† £ emulators5BThe • Pretur%Pis a �bd tuplØtype os.Î .m 1""" p# columÌQlines 1wor»g s, 6try¡7   =C(os.#['ú"']±except (KeyÅ0, VÄ “  P 0{	n œ l Vj L h C# on\py if neq1aryô $if!P <= 0B@   	­  Ï Í=}ùG(sys8’.fileno()/ = 3‘Attribute-9A, OS B : "# � � Qð, closed, detach
  orö åoÂ B   #¸ )V #unWç 0   ñ 	n‡Þ SE G  Q . ‹  ?if    != 8  H" Ò 
™ (\ ,R ð))


# Check thaðBt a given file can be accessed with the correct mode.
# Additionally check that `G p` is no\  di7 ôory, as on Windows
#  �ies passh 2os.}  U r.
def _ _ A(fn,‡ õ):
    return (os.path.exists(fn) and Q 8 7  ;    $  « ? Pisdir> 1)

} ’which(cmdv  =os.F_OK |[ `X_OK, x S=None“ A"""GTƒa comman< ,’ äa PATH string,À  e H  p £ ±conforms to¨@modeI 1  I P, or } 0 if' "re~Q suchH  “!.
 `> ‘` defaultZ oÐ 0. `‰ 
&  n aresultH  ofþ Ðenviron.get("Œ !")Ž F¢overriddenHÓa custom searœ  j œ 1"""\ £# If we'rešaaD 7óy part, look it upR“ly ratherN €than ref�  ngM « - òories. This includes{Àing relative5 3theQ ucurrentB ò y, e.g. ./scrip"i"ß pdirnameD! yiØc%  ) á1cmd€   öØñuse_bytes = isinstancr !,  )( "ifL!is3B R  © / =Õ,, )~ E  I 6tryV     ^  Ô€str("CS_‡"W  ) òexcept (AttributeError, Valu  5 #· Y )] 	¢t availablÁ 3  ™ 0def å ð# bpo-35755: Don't usej * oÍ
m@varim 7 isN 0setFƒan emptyÿ–#E €='' doesk ãmatch, whereas !:'í © é ˆo !if{ Í ‰D1 ifÏ 4'  5 �fsencode( ¤  ! =D`.splitw, DBsep)3 Oelse^ /de^  s  R +°if sys.plat¶ == "win32"h 0# T²¦@ takk�recedencF�.; bcurdir  45 > 	 %  if² ]  p!inF¶  #  ì £.insert(0,/ »   )1EXTÚe¥0aryX Ñ  T ðext_source = os.getenv("PAñTHEXT") or _WIN_DEFAULT_PA #
  °pathext = [ @for  3in  ð_source.split(os. psep) if+ %]
L Õif use_bytes:  i  4  W þ= [os.fsencode(ext) s ]< P# Seei ðthe given file matches any of  �expected¸  ™ ‡ensions.M óThis will allow us to short circuit whenk È"python.exe"G ¢If it does‰ ð, only test that one, otherwise we havel 7try� # ¢  ifÒ ð(cmd.lower().endswith, 4)q &sÕ6cmdOOelse(   +7�
= B# Onã ó platforms you don'tð ³hings like x0ell+ 	w6 ´ p suffixÛ÷re executable, so just pass on cmd as-i? A õ _ Áseen = set()  nCdir á@norm #= ä. ‚case(dir=  Ëpif not   / 0in d H  $   S.add(& >    ƒ 0the®  ‡   / & Vname � @join‰ ,í 3 
T  2 ðif _access_check(C k, mode .   preturn (  €None
impÓ_signal
from    * ”functools ¡wraps as _
 & Denum! @IntE  #  �

_globalÁ
 S()

_  ±._convert_(«  ¿ !'Sœ `s', __Å 5__, alambdaÜ 
� ) `.isuppa0  Q Aand 6b.startyp'SIG')  ù<ame :_')�!ory 	( ACTRL) Ô HandlerÕ b  A(¢ q_DFL',  0IGN‘ À
if 'pthreadºPmask'1 jb	  f ; ’  " k– TBLOCK˜ )UN qSETMASK« Ð
def _int_to_+€(value,  c_klassÄB"""C
± a numeric -  \3an 1r member¸²!'sºsa known  #, õ D
O bitselfA 1"""*2try6 ø : £ µ €except VÇ ]Error8 µ "

û E  toF 0 ï Ü ñ Àlue.
    If ñ,it's not an IntEnum member return the value itself.
    """ Atry:	   2 Aint(2 ) �except (VE ±Error, Type )> : ò


@_wraps(_signal. b)
def  ( Ãnum, handlerO  : = >  (_enum_to_¤ ? 9),  ? )À Ö  3  :  B (" 2, Hx /s)²  2getc µ  ¸ ¯ , M� °if 'pthreadòmask' in _globalsxe2  r `(how, U Ã  ÿ‡sigs_setw7 Î  6 Ò Iset(cAx, Sú€s) for x¾ c ™ ^ �.__doc__€ " 0


 ¯sigpending- }   (Ò {Ï  šÜ‰ 6()}� Owaitš  * 	—    h:setš 7sig 8sig* •	Â rÏ–- A Y[ Î Avali‰OnalsÔ 	0 Ú 	 t+K  w5del ", €`
"""Apžñ module search pathsšðthird-party packages to sys.& O.

* ,t
* Thisƒ ÿ#is automatically imported during initialization. *‚ /
� bwill aÓsite-specific!to1m+ð.  On
Unix (incluwò
 Mac OSX), it starts with< refix and
Kbexec_p à(if different)# • ñs
lib/python<version>/ª ›ò.
On other platforms (such as Windows’ Ðtries each ofÙ 
€ Àes directly,5  we»  � 	q › ð ed.  The
result§E of 1, ib Åy exist, are9 N,î €
also in~ ÷ ! k‘ configurøÑ files.

If a ð named "pyvenv.cfðg" exists one directory above sys.executable,
 ¥prefix and _ ère set to thatO ðnd
it is also checked for site-packages (c EbaseT !ndw   Œ  òwill always be the "real" Ž Qes of ñ,Python
installation). If "pyvenv.cfg" (a bootstrap configur- ` file) `tains
k ùkey "include-system-Ê "
àanything otherñn "false"
(case-insensitive),² Q VlevelÏ ò "stø Ïso be
searchJ;p 1wisÔy won't.

All`resultœ » …specific¸aies, iEy'à, are
appendedé °Qpath,Þ inJ t–    <P
Ps‹   m)
 áwhose name hascform
<3 >.pth; itse Ptents¤ P addiê(alÏ   (ç°per line)
tF , 
Í q.  Non- i¢wor
non- )r ^neverL E; noƒ yÚ d<Ø0mor¦ñ an once.  Blank¤ sX ®  ç@ginn‘ �with
'#'y ñskipped. Lines starÕ % ‚ 'import*  @ð	uted.

For example, suppgÍà±
/usr/local   ÛeÜ ë $ a/lib/p‡A2.5/nÀ!s
§ —three subW¡, foo, bard Bspamf1two:
§s5  4 0bar �.  AssumeR   , Í Qð
following:

  #%  Ÿ  ) º   
 ”   pletch

j  0 &K  ½ K �bar

Then…  … B n>areS0, i4 �is orderk m/t /  - �foo

Notœ1t bï  æ@omitàòbecause it doesn't';! ¹Qcedes4+ ( meðphabetically bef
0foo¥;Ã ÷O is
t   is not menê ed eiŒ Œ¼O.qP readSb modul¹ ˜dautomaŽ ^ en0
co3 p ¾û ˜"atGðrt it.  This can�àoverridden in
ÿõ customize, user ô or PYTHONSTARTUP.  SÑÉ C Pisola‚Ðmode (-I) dis¡ %s Å ç Ê ÏÐ.

After thesðZe operations, an attempt is made to import a module
named sitecustomize, which can perform arbitrary addib 0al
6 ³-specific c@ € ¤.  If thiss ñ fails with an
Iˆ °Error excepT 1, i­ ósilently ignored.
"""

¼ 4sys o
 ubuiltin _�  ñio

# Prefixes forú à-packages; add iŽ Dal p+ òlike /usr/local here
PREFIXES = [sys..  ,  Rexec_ û]
# Enable per usew ð directory
# setqto Fals´1dis> ñthe feature or Tru gforce  ð	
ENABLE_USER_SITE = Noneý  ô ñ-distutils.commands.install
# These values are initialized byh 0getÆ ³base() and   uM�()
# funcL¡s, throughA emain() ý when Python starts.
¾  6BASÏ ð 
def makepath(* ðs):
    dir = os. T.join   2try( , 0abs4 Q(dir), Ÿ1 OS®7 Apass! `returns ,r Pnormc G 
ª @abs_[ #s(¥ £"""Set all�‘ __file__U€__cached �ttributesÅ Û€bsolute Q   É  Ý@m inE(†å"s.Ï#()x  , µif (getattr ñm, '__loader__',6) J  q not in  O  ¢('_frozen_®@lib'A  ¨_external'•  F ôcontinue   # don't mes:õ PEP 302-supplied3‹ 	Ü R %m.Wç î 1 ò$(Avú,a, Type Q 9   ˆ ÒŠ  Œ 5y�removedup-~! R ð duplicate entri1romÉ 3 b along¼`makingÆmra‰„ B€is ensur®0hat- G°v providQÀinterpreter  aÊ Dt# only e >  ³ðs, even if we're runn˜ f¸   üd”Z.­ L«] Rknown�! =1t D = F Ô6athóP# Fil¥ 7out5 $`s (on óÐ-insensitive Ï H‘tems also} Û i!"eyã `differ½ D 1); TArelaH c EintoJ À    # paths.#
  õdir, dircase = makepath(dir)% 4if # Ðnot in known_* %s:'  S ŠL.appendA   3 1.ad!  u f @sys.N q[:] = LS Yreturk Á


def _init} binfo()‚ B"""R2 ða set containing all exist ðfile system items from ‚ A.""" 0d =H (¡ 1for.  ý ­ x  Ü 6try   Bif oÒ .y  s(k ª  !  !_,W  
. ‡ )   d9   0 ™   úexcept TypeErrorŒ  	AinueO UdKñ addpackage(siteXname,â· ñ"""Process a .pth K°within the C -P s3GectoÐFor each lineJ 5  E Ñ, either comb  t X R �dir to a !Å ð    and add that ^ , g Àxecute it if bstartsV ¡'import '.O ò(ifö † is NoneMd - =†K  Ž reC= Trt7elsF  BFals”@fullu% =5Jjoin’î	ið f = io.TextIOWryô r(io.open_code(Z )> (+OS&Á vfô  ø%n,±³enumerate(f ò   !if% .h G K("#"%  ) 	�    	Ø     S  #("»3",  O\t")g   A Pexec(lÿ    Š  !  3 " =Ð crstrip   ,:   F y 0if D9 
L×9 Š�~   ˆs %   ¹B} 
� EL>iont qprint("=" p R é õ {:d} of {}:\n".format(n+1, †,c ’ 
  =Î Wstdery' õ�tracebackH  §arecordW( ‡ _Ü Pion(*g Bexc_;9 O Ö 2in W `.split sq�  #P'  '+, ,#Û 
2 À"\nRemainderF Ÿ ignored"F Bbrea1if b¿þÀths = None
 ó   return known_paths


def addsitedir( ,& ó=None):
    """Add '( ð' argument to sys.X ñ if missing and handle .pth files inN G 1""" (ify @ is | {   ¼ � = _initÊ ainfo()C  ' Áreset = True FelseF  BFals  Ï #, 	 °case = makeÑ b iif not+ iWj u.appendH  ¥    # N c ¡ component±   í 5.ad=  œ ‰ 6tryk ÷ names = os.listÍ- æexcept OSError8 u C [	 Q for 	 !in s×  °.endswith("Ó1")]> 0 psorted(. s: Ò ¤addpackage
,[ 	o¯ 1if §© ! =w À 7Öðcheck_enableuserÛ(� @"""C  Ó   Í  directoryyAsafe¡inclusion
p ñThe function tests& 0theÃmð±line flag (= d	qenviron,Qvar),N ðprocess uid/gid equalL”effective . @ Dis× d{ ñsecurity reasonsY Ü:) 1by é F(com¥  opÇ r -0: S÷  Å 9dM Ÿ Ò Û Ps.no_R _X¦� ² ó	if hasattr(os, "getuid")
 e O !# Ç (I == £  _ ifþ0getF A() !p ú (   ¨  O@ ¦  g¦  ¦  Ê	¦ "giI z ¦ 8gid¦  U  , ¦ §   ¬ 


# NOTE:yRconfiopit's deqð encies are relaP²ly large buÄð	 module
# needs very limð! part of them.
# To speedup startup time, we hav'py1 ð
# See https://bugs.python.org/issue29585Í "Co< 2sysÏ  ._½‘serbase()­
 /@env_# ÿjñ.get("PYTHONUSERBASE",9ñ4if 9 G r Ã %@joinðX(*argÕrWoüq.expand*   ; 7 )Q   ÎF"nt"‚ É ò APPDATA") or "~0²  e v  @ ð, "Python")

    iñf sys.platform == "darwin" and Ó_framework:
  ûreturn joinuser("~", "Library",8 ,8 ?  ‘"%d.%d" %2 ñversion_info[:2])
9 m ð.local")


# Same toF ðconfig.get_path('purelib', os.name+'_µ …')
def _*   Rbase)è Ž   =V . œ — $ifQ  7B'nt'8  Ý ³ 4f'{U £}\\Python{J E[0]} õ1]}\\site-packages'e ¡'¡'¡� a/lib/p„ /k ´  3 « E0]}. =1]}L V4getú (PA"""R7ps the `   pÀ` directory ³.û T% ±can be usedõÑtore data. If] aglobal>ð<variable ``USER_BASE`` is not initialized yet, this function will also set
Ú1it.W 1""" j  [  &if  j FNone, ! =~ 	 !()= ˆ& (

R º$Z P  -specific 1 Vj	5 1?SIT1¸ 5 1	 [ <  ³  9 = :" #‘	ˆ\)n N n nq 
ct , s0add(  BsQknownD sØ�Add a per”rs¡ c2ath¯ BEach( Âhas its own ™ IwithJ @s inÝ1Fhome- 
“#D * ’  dE ]Gcallê–make surehkT are  !_"»  0a§if ENABLE_G  ndB � u.isdir(M [ q0addQ 	 (, ‡Ì 6 Ä0get? � �prefixes=”g šða list containing å I K3ies²PFor eÞÐPresenh4 ``| a`` (or¢Z Ò``PREFIXES``)/‰ Afind1`Š V` subs `depend» o0ð	system environment, and ñwill return a list of full paths.
    """ òsitepackages = [] Áeen = set()
 ñif prefixes is None:  M  ¢= PREFIXES6 3for7 3 in
 &es9 cif not  - Fseen)  f …continuew  # R.add(€ ª  + alibdirÑ ‚sys.plat ß  # :if  š != "lib"v 8 ‘s.append(" j úif os.sep == '/'=   A   
 ÿ  ˆ    ˜  =I  
 S.joinÔ ", 5 ,õ  0  ñ "python%d.%d" %á ÿversion_info[:2]J  --")      ½ * 7els# ³ 4 UQ ) 77  "u É 'H E î ˜

def add p(known_#s,Ð0es=')p"""Add 5 � 1 to¤ 7 ‘ ü  % 0dir40get } #esV  .ƒ D p.isdir(1 7dir#  ' ² ! ', ¶ ƒñ  ð ƒsetquit(U ð	"""Define new builtins '$ Ò' and 'exit'.ðThese are objects which make the interpreter 9 Â when called±€The reprÍCeachJ  a| óa hint at how it works� ^,¯'\\°ñeof = 'Ctrl-Z plus RF'ý
Ï- ÒD (i.e. EOF)'ð .@ = _“ ‚Quitter(.R, eof7" 7   '7 žˆcopyrigh£USet ' ˜€credits'^q  .5 ½ 1_Pr­%("$ !",Æ Í a�form[:4]$Gjavaws ˜ q ‡ Ê  "Ç "Ð!"J £Ñmaintained bye ñdevelopers (www.j3 c.org).ê
í£ –  a\² `ThanksëñCWI, CNRI, BeOpen.com, Zope Corporation?Ba caº‘thousandsN ±upporting P¼ Ð development.ñ8  See www.python.org for more information.""")
    files, dirs = [], [] ð# Not all modules are required to have a __D Ñ__ attribute.ˆ F vPEP 420‡ �details.  `if has: d(os, 'M 1'):   £ ôhere = os.path.dirname(os.. Ë  ,  ‹ ô
s.extend(["LICENSE.txt",  &"]1  ù 0 c Pjoin(w ,v urdir),   cu F ð builtins.licens« U_site •_Printer(Ò "+ &",  ºŠhttps://ÂS/psf/2 /3 ì »ó)


def sethelper(@…   ; = š H- > àenablerlcomple² F A"""E ñ default readline configurWA on ë ñactive prompts, byé ðregistering a syÂ0 �hook__.
, PIf thqi †ñ can be imported,%  9 P will bTab kev 3as Ò 0ion T and Œ 3 ~/.Ä_history as   dªDThis~ �overriddeï p  ñöcustomize or user ½ îñor in a PYTHONSTARTUPˆi 1""" Ð¥ _pØ ìq atexit3   6try;  ' B )  ó �except IiZErrorW breturn¬ K `# ReadÚ ·’initializ(')ç € may notÈ`enoughNUset a~ #³q, so weà‘one firstÈAthen�ˆ° ” ô ¡_doc = getj p¦doc__', ''!ifR  á; !is° Nz  <�'libedit'ÊN  * #¼ð.parse_and_bind(' s ^I rl_še~ OelseI Dtab:* C @¦ .	 _Ÿ·(õ ñ/OSí S# An  b could�many causI1but‰õ most likely one™  —�# is tha* 0re'^’ .inputrc#P(or .c !inW {case ofO ³Mac OS X + š)š ‰Áexpected locŒ@.  IL 0at M <, w� @want’0ign7F   9	z Fpass6Ä.get_currentWê_length() == 0áu# If now€was loadás;to ©0À         # T÷*he guard is necessary to avoid doubling history size at
  ð# each interpreter exit when readline was al Ëy configuredI ûthrough a PYTHONSTARTUP hook, see:1 ùhttp://bugs.python.org/issue5845#msg1986369 Ï ô = os.path.join( ùexpanduser('~'),< ú  '€ _\ )')6 :try¼  <   .	 9 c_file(F 
E îexcept OSErrorP Ypass
w ”def write^ .()7 œ 	  	C ¡  5 ¥  $ Á# bpo-19891, ñ41193: Home direcn€does notPsu F   A# or½!oté Pable, @the J`system#  ei-only.# F   = atÈ©.register()iasys.__ü`active«T__ = 7 _x  æ 

Ž°venv(known_ys�òglobal PREFIXES, ENABLE_USER_SITEo Aenv µqenvironÊ 0if ‡ ö&platform == 'darwin' and '__PYVENV_LAUNCHER__' in env`execut@! =P i_base_ 3os.y [U ]� 7els©	A  ¨  . €xe_dir, 5‚Usplit�0abs,(: )sÚbprefix ' €.dirname/  Z +  ©±home = None|  ‰ç  0 ` = 'py R.cfg'! �andidate_+ Qs = [  1   bA forÓ Ein (#  ' Ó beí  = z b	2 ã ,f 6 	g æ  q %ifÖ is” (m  	 $ ]OJif câ qvirtualù , =( "[0ì q c_ª • = "true"œ 0# I�ð 25185: Use UTF-8, as that's what ± }° module use eä h #â � ,  Ñ Ê¨with open(¸ ð, encoding='utf-8')w fæ  X  À ¡    Qif '=0 % 
;      Àkey, _, valub * Û.partition('= 4   ö	key = key.strip().lower(ª &  ^  2 j&    ifU 
‚include-¦ð -site-packages'?:
  ÿsystem_site = value.lower()4 ÿelif key == 'home'\ 
 ._$ Z 
S Ðsys.prefix =  Vexec_ 3ite 4 ð+# Doing this here ensures venv takes precedence over user-Þ { 0add ðpackages(known_paths, [Œ ‡ (]){ 6 à will process P ¯ õ again if its in PREFIXES,� ÷# but that's ok; ‚ X °event anythó  be µadded twiceM  if?ÃŠ= "true"–…  .insert(0,6 ‚éOelse9 ) =  Vò	ENABLE_USER_SITE = False?hreturnä p


def ò 9²customize()| r"""Run  \ð  specific code,^Ñavailable."""� 2try@  ” 	   aimportN Y &izE�except I$ ÆError as excQ D  µ ac.nameÿ	¾  Apass›  =   `  BraisŒ ˆ E� 1ion† &rr† îÌ.flags.verbo± ÀG chook(* _info()ë	 * Ùstderr.write(»  © "*inGò; set PYTHONVERBOSE for traceback:\n£ E  Í"%s: %s\n" %j († À__class__.__t—__, err))A ßÐA # A7 N q ¸ rA	M AÚ	ú AeGmain4ÁAdd standardâ-wðdirectories to the module search ?.ñTŸPfunctÂðis called automati by whenÊmI 2is ¤"ed+0unl\ l ðpython interpreter was­ ‘rted with” 0-S .˜À"""
    globðal ENABLE_USER_SITE

    orig_path = sys. 1[:] Qknown Ðs = removedup# 1s()# 'ifB !C :  a #9 µ might makes § absolute.9 ö,fix __file__ and __cached__ of already imported modules tooG 2absÃ "()ò 
Ö Wvenv( × /† is NoneÚ " ó= check_enableusersite*d d = add  Žpackages† 3  O / ssetquitp €setcopyrl chelper aif not„æflags.isolatedä Ë •rlcomplet; @execŽ „customizæ -ifhM 0xecö 5 ð
# Prevent extendingÝŒñ when python was staípwith -S0
# Œ  ¢ È =r.
ã 0no_, • @mainÒdef _script()  )q = """\’`%s [--¾ e-base]  N ]Zñ Without arguments print some useful informationX  4 1 �the value
±@BASEë A/or   Â` separ±K ‚by '%s'.� ²Exit codes +½ C or Ì  ¾ ñ P  0 -¦ rM�directoryWdg ?  1) 0disüAd byL 2 22 Xsuper8  Aòor for security reasonsZ >Z n*a error 1""" 0arg» Mcargv[1Ú  þ  x _Ý` = getì  - ‹   ?"  A“= * ù ("y  /V = ["  Ð adir in} " ‡ ?   Ö%r," % (dir,)C a ]V   0‘: %r (%s)@ ¼  Ð , [   �"exists" Êÿu.isdir(1 à) else "doesn'¨Nist"Œ y  ˜y   'y  1 y ‰ €  ô ‹? ™cexit(0`buffer¨üCif '$ 5'¬
/2 �.append(ý  vd ?  Ê ?  <� 2if ` ßo¤’sep.join(& �‚ÀUSER_SITE:
   Äsys.exit(0)
 õelif ENABLE_USER_SITE is False:(  0 @ 1@ ?Non? 2? e 3& e‡ õ import textwrapŸ dprint( ð.dedent(help % (¹ òargv[0], os.pathsep))c 
Ü ò0)

if __name__ == '__main__'ñ:_script()
#! /usr/bin/env python3
"""An RFC 5321 smtp proxy with optional" �1870 and ò6531 extensions.

Usage: %(program)s [@ ás] [localhost:
 q[remote    `]]

Opx 1s:
9¢--nosetuid n  @This°  p ò generally tries to 6 ð `nobody', unless t8 uflag isM ”set.  The7 òcall will fail if8 à  }önot run as root (iœ ò which case, use<  t $).× 0ver>‚ !-V  Ö P%S the ! q number} A aclass   B +-c  S UUse `( '±  ` Ðconcrete SMTPI"xy= à.  Uses `PurePA' by`  O udefaultˆ ¡size limit# '-s  0 �RestrictÕ atotal 3 oSàe incoming mesF »"O "û !ofZ  M ‘bytes viaN  ¼šFSIZE’B.  D¥ 	‘33554432 = ¸ qmtputf8\ !-u  c PEnabl³FUTF8[ ‡`behaveHa@@c QdebugY -¿ ` �Turn on  gú  G   --5 h   %is( ŽVL �#__8‘__)s

If t hµPgiven@5n ` ' Qused,ã i8  •  Gnot
8 @8025  1 b.  If Äg 
À i9 h  h ,¡ g  °ñ

# Overview:
#
# àfile implementã•e minimalÞPtocol´’defined i¼ ü Ã òt
# has a hierarchy of2es Òd  ž Ð backend func´�ality for !
#RVd.  AÉP 0aretRvidedÊ  « €Server -C R base2 V t `.  Rai¦DNotIú °edError
#  ²pyou tryR …1it.3 0bug{n sÚ "y ŠU eachh°it receives·UstdouJ #0 - + | :Í€@a reõCmtpdHð does final
#   ðjdelivery.  One known problem with this class is that it doesn't handle
#   SMTP errors from the backend server at all.  TV ðshould be fixed
F ñ(contributions are welcome!).
#$ òMailmanProxy - An experimental hack to workÄ CGNU 5 A ò<www.list.org>.  Usingë sª ðs your real incom" asmtpd, I ð"mailhost will automatically recognize and accept 1 � destined¥ —  ’ Òs when those   °created.  E¯Æ message notO Qfor a5 � Âgets forwardm aÏ b•Î "as&APureT“.  Again,ÏN  †  n hòñ d correctly yetšð
# Author: Barry Warsaw <b q@pythonrÈQTODO:
 ‚- supporDbox —ñ
# - alias files H‚ r more EvPxtens1! £ ½ _ code‘ ü A

imx 4sys o
 Terrno dgetopt Dtime Usocke uasyncor  %ha  acollecÝ
&“warnings ‹    e-ô._header_value_parser, ñ get_addr_spec,  Angle ð

__all__ = [
    "-’Channel", Sï  –Debugging "",A ®&ð",
]

program = sys.argv[0]
__ver‘~ !'Pû   ]3xy  ‚ 0.3'


`�Devnull:l õdef write(self, msg): pass Qflush  ó

DEBUGSTREAM = R ñ()
NEWLINE = '\n'
COMMASPAC ð, '
DATA_SIZE_DEFAULT = 33554432


� us(Q� B='')¬ ñprint(__doc__ % globals(),·=qstderr)½  ifÏ <  ™@ ?msg0  @ Aexit| )0 PÏ(h.	 S_chat� ë aND = 0}  é Q = 1
 ÿ	command_size_limit = 512 Gs = Ãþ.defaultdict(lambda x=T B: x)p ‘@propertya  VNmax_2 ×&  #6try0  ¡return max+ .C !s.42s()v 6 !ex‡VME¬U  rQ  Â  ´ �__init__{ ,Þ€, conn, ’g, dataV=w	`S •  ðmap=None, enable_âàUTF8=False, de~_\  ä B ù7hat.¨   Àmap=map)
     òself.smtp_server = 	 
   " pconn =  
 0add4   
 ûdata_size_limit =  
/ ûenable_SMTPUTF8 =  
/ €_decode_T  [  ( ,ifC W and 9 :,  è ÷raise ValueError("+ ; ’ ‰ cannot"F  J 	 õ" be set to True at the same time")A /ifŸ ‡õ_emptystring = '';  t # plinesep O\r\n# 3dot" . 0newE ¥ = NEWLINEf Jelse6t 
— b˜ /b'™ †ord(b'.'á Ÿ (b'à ‹ Pset_r fstate(A  ­seen_greetB  �extended_… = Falseÿ # wcommandÜ|s.clearl 0fqd4 socket.get % ?tryL !pe… j 4   8namÉ ‘except OS§z as errJ €# a race±ñdition  may occur if‚õother end is closingë  o°# before weì  gÆ4he ” 	- 8los«  F  ˆÐrr.args[0] !=¯ ºno.ENOTCONNº  2 Š	] ereturn ñprint('Peer:', repr(€  š û), file=DEBUGSTREAMòpush('220 %s %s' % ?  ¡ñ, __version__))
u Pdef _UApostu__ v )Â P"""Reí P vari×sý`their A a-DATA # 6.""@ M Œ ¼‹¡lf.COMMAND‰  ' €mailfrom¥+on£Êrcpttos = []7 irequirhã €num_byteB 0A  ³terminator(Ë'� ® "2all&Ú ¤!ˆâ�received« 
ç � .   è æ 2[]
êñ# properties for backwards-compatibility@,  %GP÷ ±warn("Acces_( à attribute on þpChannel”Ædeprecated, & `"use '¤H Ó' instead", D7 ÓionWarning, 2!À   return seólf.smtp_server
    @_ S.sett Ddef  á(self, value):4  8 Õwarn("Setting- õ attribute on SMTPChannel is deprecated, "I  M g"set '› Ó' instead", D7 åionWarning, 2)@  Ÿ Ö " =¬ 
" ‘@property Ø AlineÖ Ï ÀAccess to __& Ï %Ñuse 'receivedJ sÒ qreturn Ù 
E Å @œ ° ² Ø ® + Ý %¬
˜ Ý Ö  ²Ostat³' × %´ƒ n Ó °A ¬• ­ ®, Ø %¯— Ø «: §@gree× ]
* Õ %­Deen_J Ø 	°D ³T ¶ â g/ ç %¼£ ç ¿= Â�mailfromà Â
* Û %ÂE Ö ½? ¸ ¸ Ø ¸/ Ý %¸E Ý ³8 ®qrcpttosÕ ­Ào __rcpttos ÷attribute on SMTPChannel is deprecated, "
  ó"use 'rcpttos' instead", D3 åionWarning, 2)< Ãreturn self.>  3@__ q.setter Edef  (5 ‘, value):   ‘ Öwarn("Setting.  Ø $?setØ ! œ Ñ " =¥ 
¤ ‘@property Ò AdataÏ È ÀAccess to __& Ç %ŸqeceivedJ ¥%D Ã @š ¨ ° Ö ¥ + Û %¢— Û ¨= ®AfqdnØ ®
 & Ó %® A Ê J ; œ  œ  Ä œ + É %œ A É “ 4 ŠApeerÆ Š
 & Á %Š A Á Š ; Š  Š  Ä Š + É %Š A É Š 4 Š?con & Á %Š A Á Š ; Š  Š  Š + É %Š A É Š 4 Š?add & Á À on SMTPChan÷nel is deprecated, "
  ó"use 'addr' instead", D0 åionWarning, 2)9 Àreturn self.;  0@__ q.setter Bdef  (, ‘, value):  … Ówarn("Setting+ ÿ attribute on SMTPChanÉ ?setÉ  – Â " =œ 
› ñ# Overrides base class for convenience.,  ä Cpushâ 7msgà ‘asynchat.	 _ - abytes(G    ò	msg + '\r\n', 'utf-8' ifm€require_qUTF8 el¿tscii'))¾ øImplementation ofÆ ñ abstract method~  Å ócollect_incoming_dataÖ   × Álimit = None@  º ¤ Òsmtp_state ==· vCOMMANDø 0 E „ñmax_command_size_ \ /el^ ODATA[  ¼ T 1if e B and§ Anum_“" > 
V ö
” B 
' Ð K p+= len(† AÎ q_decodekF  ñ
received_lines.append(strO )Y  I ” Ñ /# 4"ñfound_terminator/	)3ne ñ_emptystring.join- .ä Ê ðprint('Data:', repr(ö), file=DEBUGSTREAM5 |
R Q = []ä  uy¥<sz,Ï â5, 0_ c @not ¬ 
Š  ¡ ö'500 Error: bad syntax'Ì  /   w  0if c M C *  †  �t=3
³ ! =° ‹.find(' † Žif i < 0Ï ³? nupper(Ã <arg. � ­  
T _[:i].X  ä p[i+1:].^p�  [Rsz = p_ #s[ ' ˆ  7�extended_@}…A U 
 @ Bz > Œ HE  Ù › too long” ž  ðmethod = getattr÷(self, 'smtp_' + command, None)
  éif not method:  &  J ô.push('500 Error:P Q "%s"? Ôrecognized' % 
i  N ireturne y J(arg/ + Jelsež 1if � å ‚state != JDATA-  } . Ë ú451 Internal confusion'‚ 4 Ùnum_bytes = 0½  # ©   › òdata_size_limit and¡ R > * ½ 
4552ˆàToo much mail E Ä 6ñ# Remove extraneous carriage rÈsÑ 0de-! ùsparency according*ù# to RFC 5321, Section 4.5.2.*  Æ Y = [] ñfor text in line.splité ._ Nsep)7"if6  z ? S[0] =&~_dotsep5  Ã † �.append(9 >1:]– <   @ 
< ‹�received_,  • 0newÏ `.join( 
: 0arg‡ù Rpeer,A Cfrom trcpttos j 
P #kwR ){}p© q_decode¨ .B 	A    'š 0_opï6s':®  ,7  Â # 7  7 
Á  u+Ã %ðerver.process_message(*B, **Ê 
 > ‘_set_post_[ *e(( 0^tatus%G |k250 OK¨I6  s Aus)
,a# SMTP}E
 ßs Adef ï AHELO( , ^• ¬ 6arg  «o Ð'501 Syntax: H › hostname¸ 	x  B ð# See issue #21783 ¹€a discuseö of this behaviorþ7Ïseen_greetin£ 	€3 Duplicû ¥ _/EHLO¡ ã ÏrÔ WÊ 	   ==á ! È %sï Cfqdn ‚ � ‚1 H ‚À       # Seeó# issue #21783 for a discussion of this behavior.
  õif self.seen_greeting:  &   ùpush('503 Duplicate HELO/EHLO')1 ereturn @ `_set_r fstate(2  	 j = arg@ úextended_smtp = True" ¢ ’250-%s' %× Ffqdnk í ÿ data_size_limitï  M WSIZE R < ] +wcommanda õ s['MAIL'] += 26¸ bif notª €_decode_` ‘ 
‡8BITMIMEuØ ÿ enable_SMTPUTF8G 
% G Â %10Â ½z AP')
 @def ­`_NOOP() ,×)–  if  € Q À501 Syntax: D ª Oelse8 m250 OK‡ OQUIT‡ #† Ás is ignored¿ � w221 Bye„  Ò ð .close_when_don×=  ü t_strip_skeyword‚  Ókeylen = len($ b0"[:& Ó].upper() == , 
ˆ Þ [3 1:].• ~$ &''µƒ_getaddr« :arg´ ³+ar%H A, '' A² #.lv ÷ .startswith('<'W  -  t ðess, rest = get_angle_ (ˆ Y  $ > Šddr_spec= w2 45ddrN v å 9 . _ ³ 
BcparamsD ð 1# R%  ô  as dictionary. TNone ® "ll- Ueters“ ð# appear to be s0ð	ctically valid according$ †RFC 1869Presulp%{}V  Aš 2 inv s' P, eq,e Bue =' `.partiÈ 7('=- àÉ ; ñ.isalnum() or eq andKvaluÛ < z ¥   ½ [T 3] =�  ifS  $
(F ò ¯¦?HEL¦Žñ  = ' [SP <mail-‡  &>] ¨ blc_argÙ¸	É 4if $ 1= 'U
r F sð 250 Syntax: EHLçO hostname')
  ùelif lc_arg == 'HELO':#  . ðself.push('250 Syntax: . Z OMAILZ  imsg = V  * ý FROM: <address>'“ 1if – Þextended_smtpº  ¾  d 4+= * K H Þ ?msg ORCPTÆ  * ? TOÄ €ODATAÄ  	Ž. /SEQ R. Q ONOOP¢ . Q ?QUI¢ . Q OVRFY¢  . Ì[ .se¸=ò501 Supported commands: EHLOƒ2q(  'Ë  3 ç  › ,el� ‰ û‰ l Ž '… ™@def Ë_š (~ f, arg)# if   Þ (¢, params =@_get (B _  -    E \
I    u î�2 Cannot*ÿ user, but will accept message ð  U ÷'and attempt deliveryz $ ~  � ¥502 Could ’ P%s' %VG 	C 1À c	˜#‚ W‚ € V Úseen_greetingL  Xò'503 Error: send·[firstareturnˆ  ü Àprint('===> � 'ö, file=DEBUGSTREAMý sœ0errW; :? WOZ ñ += ' [SP <mail-tveters>] b›rg is NonâU Â  ø ŸÓcstrip_¡_keyword('1K À    address,ó params = self._getaddr(arg)
  pif not  Eess:   7 æpush(syntaxerr9  ! ereturn4 L 7 óextended_smtp andŽ b .^ �mailfromN ÿ'503 Error: nested MAIL command'Ç 
b p_optionBKö .upper().split(F  j (L 4 #if� is NoneÍ }Ê_decode_dataV cbody =y û.pop('BODY', '7BIT1if 1  "Bin [$ Ú, '8BITMIME']_  ó 6D'501† f ð can only be one of v %, P  K   da ú enable_SMTPUTF8‡  tKutf8ê - Š', Falsem 5if 8 kis Tru’ Ž | frequir} ! =.  ) +elP  Dv 
«  , U 2® û takes no arguments§ D 'Lsizeþ QIZE',jù  ¥ +izé È�ize.isdigì· 	¢˜     “  _« a_limit'@int( 2) >¸% ˆ 	D'552q€message L ø exceeds fixed maximum # Srif len(Ùp.keys()¥ 0’ Í"55wBFROMt@eterÌñ t recognized or„Pimpleàe¡ $ =½€ prE 's�Br:',H4ö, file=DEBUGSTREAM½ ‘250 OK')
W "deQ_RCPTÖ,�)ü 5 ØÖseen_greeting#  ýb ¤ « á HELO first');v  1   Ýà P===> � 'Œ Ø 	� ˜ /ne:'1 = ýS :¦ c TO: <i%>'á  ƒ 5	2� G àerr += ' [SP <Ç -�T!>]R À     if arg §is None:
  ùself.push(syntaxerr)! ereturn aarg = 6 ö_strip_command_keyword('TO:', argI õ address, paramsB 0get (- pif not  ?ess¯ +L ° óextended_smtp andŽ b +[ °rcpt_optionÝ æ ö .upper().split(  (L 4 #if®  Ç2ô# XXX currently there are no É Õwe recognize.rif len(³ Ï.keys()) > 0HÂ'555 RCPT TOÅ Qeterså` Ad or Æimplemented'ÿ  ²rŠ-³tos.append(48 Ðprint('recips—6 ö, file=DEBUGSTREAM9 ( ¡'250 OK')
@def AQ_RSET²ìþ  ifý  ¼ O Q501 Sl : D æ `_set_r WstateKX § ODATA§  gB ßseen_greetingº ñ3 Error: send HELO first'); ë   «† +/to×5'50e Bneed9d+x M Amtp_s­ 9 ê $ ðet_terminator(b'\r\n. a * Nô354 End data with <CR><LF>.	 k2# C\ s that hav wt been )’ ™OEXPNò† @502 ( s ò

class SMTPServer(asyncore.dispatcher)&#' ‚Channel 9 ñto use for managing client connec'´ c9 _9 =M nƒ__init__Ô Plocalé�, remote O  {  aÀ_size_limit=»ð_SIZE_DEFAULT, map=,> penable_ðUTF8=False, decode_\   v __Ÿ 5 =  ` $ ¸ ' =Å 
&  d À ! =3 
/ ± ð = enable_SMTPUTF8
  ÷self._decode_data =  
' ø if enable_SMTPUTF8 and+ :,  4 ÷raise ValueError("V ; O ycannot"F  J 	 õ" be set to True at the same time")A ðasyncore.dispatcher.__init__(ø –, map=map4 :tryÈ ðgai_results = socket.getaddrinfo(*local ,z 	³  Stype=Q ¶SOCK_STREAMŒ  9  § ‚.create_, (’ ‹[0][0],  *1]E P# try2ðre-use a server portÚ‰possibleÁ {  set_reuse_â (X " Ubind(!  †listen(5 jexcepthL [closee I™ Jelse9 ðprint('%s startedp%s\n\tLš ¹ ":  bRemote u%s' % ([  o  Š ñ__class__.__name__,_ .ce( . >())÷1, rq  ƒ Ô), file=DEBUGë} Ðdef handle_ac#edŸQconn,® )õ ñ �Incoming % Âection from Ø _repr(x  è   pchannelÚ  ü „ ¢  +  
 „ 3  ” + Š ”¿_size_limit; O_map0 ’; B!)
5Ð# API for "do©`someth
 ±useful with¾rmessageü ƒprocess_ ‹P peer´ ilé°, rcpttos, $§, **kwargs,ð"""Override this abstract ‹  od{ k sE Trclient.Î  Ì €  E ` tuplez@tainÒ 1(ipÙSA) ofØ B � that ma„ dÏ E n¿±to our smtpH { "maõ    œ 1raw8essj Rclaim Ð  1 )• Ç  =[ F )  a ­ ¾ ` eP Ì @wish `o deliE&thÔ u 'toa  ž^ 0str-4con8 Ì ðentire full text€   M ‡ñheaders (if supplied)Lð#all.  It has been `de-transparencied'
        accoó+rding to RFC 821, Section 4.5.2.  In other words, a line
  pcontainF óa `.' followed by9 ñtext has had the leaw 5dotH •removed.
 ákwargs is a di• Hary q 0ddi¬  al informa  ´ Et isI ò'empty if decode_data=True was given as init parameter,½ 6wisì tit willƒ Ì ï  ÿ Ukeys:u  €'mail_op– ¶s': list ofe sz  ) é command.  AllI  M  úelements are uppercase strings.  Example� B   ù['BODY=8BITMIME', 'SMTPUTF8'].� W'rcptÊ ‘same, for  ¾ Á�This fun»ñ should return None@ 0a n¹õl `250 Ok' response;‚ € ŠK, itI  >`desire\ : 	4 in×K &f5"""  raise NotI= bðedError


class DebuggingServer(0 "):ù ðdef _print_message_²Àent(self, pe] „)ŸÕinheaders = 1�  i   - a.split %()"  ‚   ë   �$# W Ffirsm þ6if v qand notÛ–  '    ³ I ñ  = 'X-Peer: ' +Í 5[0]�  .   !ifO °isinstance(Ä ,™ö  *  #ždŸ³false; makeÄ b match–@ binZoutpu× P 	´ Vrepr( 0.en	–('utf-8')P>  Á2 " <9= 0 ü ð# Avoid spurious 'str on byte•@P' warf
˜ °  ø1 = ä   
¬ ‹( §  ¡tprocess¢	š ‹`from, ×Rtos, ¼"**’Á] %'- õ MESSAGE FOLLOWS  &-'˜ 2if K 
k Z.get(=u  ô   }  °  ds: %s' %^ [C ]�  ? n  í án  ' n (\np   E p  ú. —c  Û =e-- END^ %')žšPureProxy˜ î  ö __ãà__(self, *argsã, **kwargs):
  ò	if 'enable_SMTPUTF8' in ) C and [' ]F  M ôraise ValueError("PureProxy does not support l 5.")‹ esuper(5 ð, self).__init__(*» Å 
: ðdef process_message(9 ÷, peer, mailfrom, rcpttos, dataqlines = ¶.split('\n'™ ñ# Look for the last header‚  ý Ui = 0  *  V  I  s*!if  
  J UbreakJ   ei += 1  7 ñs.insert(i, 'X-Peer: %s' %ö 6[0]¾  î ñ = NEWLINE.join(D # ‘refused =s¯._deliver(<Œ ô# TBD: what to do with P ¥addresses?2 °print('we g2ome. bals:', öed, file=DEBUGSTREAM)îŸ ç¥ [!imtusmtplib‹ ¦ E= {} 6try9  ~ : .¶(7 �.connectu€._remoteù 2[0]Ã	 1š @ p   š `s.sendã � : kfinallÃ   gs.quit½ xexcept Û ³RecipientsRJas eÀ ½ 3 '» �  Ü 5e.rq €— 1(OSE,¡ E´ _ion) š 	ï', e.__class__‘ f# All ‹ C wer•qed.  Ifö™ õion had an associated½  ä 0# eþð code, use it.  Otherwise,fak *üa non-triggeringK ñ O . 0errd ð  = getattr(e, 'Ð_ Z', -1¬oerrmsg1 ³ §', 'ignoreü Ó  ÏrÌB
 " Õs[r] = (š ,
6msg… dreturnå1


£� Mailman+ ¢ àò	� hwarn('P   is deprecªÐ€will be «Yved 'Wó  'in future', D; ÖionWarning, 2Ñ >I	Æ A%Àlf).__init__À(*args, **kw
 ð2)

    def process_message(self, peer, mailfrom, rcpttos, data):
>     ñ io import StringIO^   tMailman% _Utils" 
MŒ $ uailList% “# If the Ê ” is to a   Î �ing list,* àn we'll invoke M 6 ðscript directly, without goM pthrough= Ç real smtpd.I “Otherwisen  forward itŸ  ± Plocal‰öxy for dispositionI  ¶ ¥names = []`  0  �4 in¥ž ‚] = ö.lower().split('@')[0L  / ¡# We allowÓ  fo  é Pvaria“ As on Utheme‰ =  ^ ¨  o-admin _owner Wreque÷x ?-jo^ 	Jleavµ @partU)9-')ƒ qif len(, Z) > 2e … zcontinu] ¶1 = < o
X /==Y UmmandC 1²OelseŽ 5 ,''Ê Anot ….Ÿ €_exists(  ¹r) or co?  + Iin (C  î   Q'', 'Î 	 ¸ 	 ¢   Œ  v/')§ 5 s.append((â,[,Ÿ )¥q# Remov¼) Á recipients ¦ D @tos K„@what—Xre noKÝðo take care of ourselves.  Linear rv  ÷Æhould be fin`# sincûð don't expect a large number\ ¯ ôÝû   ð²sXé .› e<(&0re'`y non-I ˜ destined9Uleft,üsprint('= µ  s:ã0 '.îo ötos), file=DEBUGSTREAM… !if�,toº Pefuseê † ._deliver(º Äˆš  Žq# TBD: ÓQto doª# rT ©addresses?6 Ô bwe got- !alÒ 9 È 	c# Now ¦ #×4istªðmm p%{}‰   ;(b cmsg = . &(sLð# These headers « ‚Ðired for the óproper execution of Mailman.  All
  ð# MTAs in existence seem to add these if	 ÷
 original message doesn'tN @have, %m. õif not msg.get('from'):   Š `msg['F €] = mail& # C OdateC D  C `time.c ( . 5())R ðfor rcpt, listname, command s§ åprint('sendingCto',N öfile=DEBUGSTREAMr ç  X  á   s 
   
) ñ   
ƒ G  ÓTList.	 (0  N Š, lock=0V < $s[)  ,m  % Ð# dispatch onÏP typeF$	. %if;^== ''± V# pos' c    �Enqueue(… @, to� *=1¹ +eld _admini  R - S _ownerS - S requestU / W 
ýin ('join', 'leav Yù# TBD: this is a hack!µ ' UW ½ *  €Subject'4½'subscribe'W OelseG /unI Î& 

class Opå¬Ñsetuid = Trueœ %  Ò = 'PureProxy¸ òsize_limit = Non2 óenable_SMTPUTF8 = False


def parseargs(Æwglobal ÷x 6try`opts, 6 � = getopt Aopt(-  f  ùsys.argv[1:], 'nVhc:s:du',' !['Ö ="noô   aversio@help  ã ( [debugH Â 'smtputf8']tdexcept£ —error as Òuüq(1, e)
• o€$ =Š(K  eod0argV `if opt @('-hª !--´ V   o Ë; V; ú > ³#__ "__›  Y    o_exit(` M%--fa ý .„+ ]   ­ c­ ½ÂJ  °1argcK  dK Öà):
           ó DEBUGSTREAM = sys.stderr
  õelif opt in ('-u', '--smtputf8'):*  1 õoptions.enable_SMTPUTF8 = True+ U sU <izeQ :tryb  f õint_size = int(arg)[      Š  ( b_limit. 9 	. nexceptf  pr] �'Invalid I ö: ' + arg, file=0�   �exit(1)
p ñ# parse the rest of ‘arguments& `if lenÔ fs) < 1˜ Ñlocalspec = ' ¡host:8025';  ÷ nremote& $ za 2a args[0]X '3X  u 1u FelseC •usage(1, �6ó: %s' % COMMASPACE.joiB{@spliÄ0to 6£/port pairv1 = S :’.find(':'Õ�if i < 0Ž 2Bad8  9 ‹ J A ‹  ~ m 2[:iñ 	ê	3 ¬ ëC  k b[i+1:]` Á¿ ValueErrorª  O ª Fi = B9 		  ° ª ×    % (  ¾ Ê( 9 !?  Q   R ° `returnÿ Öò


if __name__ == '__main__'sà " =ë Ð(J ñ # Become nobodyXPclassM $ =c . " `if "."{ i  ë`lastdo× !.r»2"."v  '  mod = __imê 5__(. #[:C Ò], globals(),Ð
 3[""c I 8 5 =  [C  Ž³ 
¸u  'q as mod) C ö_ = getattr(mod,Y Á Tproxyp 3_((a. @,:  ã !),`  ³  ; ä
<  = w  M+, ã=$  È D Ev.setuidÇ	ø ± 4"pw(  âIÃã   «sCannot A ðmodule "pwd"; try running with -n op÷tion.', file=sys.stderr)
    fexit(1 ònobody = pwd.getpwnam(' U')[2]C Etry:  W ¢os.setuid(/ V úexcept PermissionError> âprint('Cannot I " "J ÿ
"; try running with -n opè "	¹ âasyncore.loop(³ ¯ öKeyboardInterrupt± ðpass
#! /usr/bin/env python3

'''SMTP/E ð client class.

This should follow RFC 821 (0 !), a1869 (B  B2554# °
AuthenticaQ) and5 Ð2487 (Secure M ð over TLS).

Notes:

Please remember, when do[q ñ, that the names of R Ðservice
extenÌ‘s are NOT$ psame thL !as ¦Ñ keywords for PRCPT
º óMAIL commands!

Example:

  >>> import smtplib #s= .– À("localhost"Ä 7 Q€s.help() {ð is Sendmail verÂ ô  8.8.4
  Topicsç@HELOØ"EH ¨ 0   ¹   CDATA@RSET @NOOP 1QUI 1HEL CVRFY+ @EXPN# @VERB 1ETR ñ
DSN
  For more info use "D  <t› 1>".¦ 1 reqbugs inOi4Amentq send eæ #to{     -8 @ @.orgW  { F| /rmH  ð	 Postmaster at your site? 0End(®  ½ ¨õ.putcmd("vrfy","someone@here¬slQreplyƒ±(250, "Some� OverHere <>   ? 0.my½ >G `quit()‚@

# (ñor: The Dragon De Monsyne <d ±dm@integralN 1
# @ supf±, test codeiðdoc fixes added by
#Éð Eric S. Raymond <esr@thyrsus.com>
# Bet=òÁcompliance (_  `,k @CRLFàSdata)f ðby Carey Evans <c.e	 ñ @clear.net.nz>,f`picky ò ¶bers.
#)LaGñ ð by Gerhard HaerÌ"<g ñ@bigfoot.de>.
#
# Uñwas modified from“Pð 1.5 library HTTP 4.

×Tocket $io
 $re
 Æj.utils kmessag( ”generator, dbase64 Dhmac Dcopy udatetimM Asys
É ~ E Dmime� †2_en"s 
 _( à

__all__ = ["¡E@ion"ØrMTPNotS`!ed ôServerDisconnected ‡ResponseL ÙÀ"SMTPSenderRú
efused", "SMTPRecipientsR ÖDataError",
  5 sConnect I IHelo ãAuthentication 	K �quoteaddr�  @data  š @"]

 ¢_PORT = 25 4SSL ó465
CRLF = "\r\n"
b b ò_MAXLINE = 8192 # more than 8 times larger ð RFC 821, 4.5.3
? €CHALLENGD ñ'5  # Maximum number of AUTH challenges sent

OLDSTYLE_ ð= re.compile(r"auth=(.*)", °I)

# Excep.� classes «ñ by this module.
  1 1(OSb!):br"""BaseG ¤ for all e_ Œs raisedZ G"""
^ ÁNotSupported^ (t l òThe command or oÄ „is not sC n e¹ ‘ server.
¯ TÞ ž % i  ð when an attempt Ømade to run av aK ‡ @with: Œ Pwhich? ’ �  çS¨ BDiscô/edENot %  ¢ ?anyì 3theõ  unexpectedly d� s�?or  usäkó instance before'Âaing it­ w . †Responseo	uÀthat includeœ E   edU code8ese¬ôare generated in some Ö s 9 P ¿ Ð€ returnsk f    ¯  Bstor\ "th!``smtp_— '~`ributeì i =  , ï  ,  - Š ia ) # ‡ messagej xñdef __init__(self,S, msgj '   .œ ! =% k 
 k => 
 €args = (Û ] ócSenderêü� 2"""-  ÂRess rAÇ In iÎ0to ÿ 2attHQby on™ ¹h · "s,qsets `s§ '¹ Y 0strÊ`   P �  Ñ 	 g	,¹3derâ  / o.ª # =[ Õ Y Œ‚ ”£˜Œ® „"""All rÐ ~!reEàrefused.

    ô:The errors for each recipient are accessible through the attribute
    'r4 ñs', which is a dictionary of exactlyA Ðsame sort as
D ñ	SMTP.sendmail() returns. A"""
	 ödef __init__(self,° 1s):$  N   .Ê 7s =' 
% 0arg (- °,)


class • PDataE$( ÐResponseExcepÜ u 0"""M # á server didn'tB!ptõ Qdata.Ì _ Connectb % ’ during c9 üion establishmenta AHelo9 À » ürefused our HELO replyZ  Authentica	d 
3 |.Û´Most probab$Hñusername/passwordÓacombinŒ  H Wvided? ; quoteaddr(  stIÁQ � a subset² ëe‘ 0 ó	esses defined by RFC 821Á ±Should be a/ào handle anyth³K ±.utils.pars‹ C can* ®  Äpdisplayé ,€ ? = B Í 
Mif (> Ã) == ('', ''ô  f '# Š  Á  ´   it, use i¥Ñqnd hope- Bbestµ  K !if§ W. øp().startswith('<z  3 æ7 À  Œ"<%s>" %# 9 	  

ä_«X_onlySa)soV@Ô  À  =!ng ñ

# Legacy method keptŽñbackward compatibility.ö |( ü2"""ð  C \�0DouÄ@lead¹ð'.', and change Unix newline '\\n', or Mac qr' into¾ ðInternet CRLF end-of-7 ÷  îð re.sub(r'(?m)^\v Q'..',K ( ! `:\r\n| ¡r(?!\n))',f  , Ó #))þ Á_periods(bin \w bx by  0 M ˆfix_eolsJE  F  E œ R

tryƒ 0impQssl
eT! I O# þ_have_ssl = False
else ITrue»# ›2is tÐmanages a conñnection to an SMTP or E	 ²server.
    �Objects:  o ÷ have the following attribute4  8 •helo_respJ     qThis isH ñmessage given by • @ in @ @onse¼ =theK ùmost recent HELO command.
+ /ehŒ \'EHŒ  ñ ûusually multiline§ Ÿdoes_esmt4ñ
a True value _after you dÜw P_, ifO	
 €_‚supports
‹ † �_featuresC Ò Aa di]¤ary, whichw  g ,K OwillÊ pcontainÏ � names oÜ ÕÐice extensionl,is’ P, andS -ir– ûparameters (if any)" J–Note, allk Ÿ  are mapped» lower caseÕÉGg ð'See each method's docstrings for details.  In general,Ò  reaa× A 5Q same¨  œ rperformi ?DS  TheJ Mlso O ñcalled 'sendmail' that Ò‘Aenti
‘il transa.p B1"""¥ âdebuglevel = 0¾¢sock = NonùHfile b ëpmsg = " _  
 �+ ot  � €default_! =R_PORT‘ ðdef __init__(self, host='', 2  =0, local_  ¨=½ ô� timeout=ã ÿet._GLOBAL_DEFAULT_TIMEOUT9  ásource_address_ )¬ø"""Initialize a new instanclð If specified, `­ `0 Ù ¶ (aremoteä  *ß1 to± .0con\ 
R  `d  ~e!F  > O 3By € , @lib.‘‚   Busedm a•  ÔÉ  ÷K \ 9 < ¬ó@if i7PturnsÜ thÊPotherÃnëÄsuccess code?Cø PError\ 5raiš Y� `k Ë " aDFQDNs+ Ý nÓ ×/ÙP  O² Awiseõ|= Ðname is foundƒ using
  õ8socket.getfqdn(). The `source_address` parameter takes a 2-tuple (host,P âport) for the ^ € to bind ras its `  ` u beforeE áconnecting. IfJ ð host is '' and g   !0, õOS default behaviorM åwill be used.
 5""" aself._c  =  
 £timeout = 
 
 úesmtp_features = {}! úcommand_encoding = 'ascii'( u# =& 
- ð_auth_challenge_coun£ 0ã !ifÍ :9  ô°(code, msg)b  ú oÊ[)3 0if 5 z != 220O  S ?jclose(9   ²raise SMTPCÖWError† k �if local‰@nameáŠnot Nonev r - => X ;els? ð
# RFC 2821 says we should%Q 1 in ð EHLO/HELO verb,€\  â 0# i¤pat can'‚° calculated +atb üa domain literalO ñnstead (essentially an @Ued IP9ùlike [A.B.C.D]).J Å  F
ã	$ `if '.'ë  . 
f Ý j , 	G d = C# Wef 0an : – áA, sos
 J  ) 7–127.0.0.1;    >try¿   < Œ ê â by� (  )ÄcexceptÎP.gaieÄn Ipass ƒ F�'[%s]' %Î·àdef __enter__(7 )g preturn  	. 3xit- w, *args4  Ê”, messageÊdocmd("QUIT"ÿ 	ü1Œ  Ö   ß‘ResponseE-4ionäk W N “ServerDisƒ*edb 	M0fin

"  .|x Cáset_debuglevelH&,   a"""Setè  � output 9 /ð
A non-false value results;: TsþÑ 0ion0 &alé,  áñnd received from“ s ‡ ¶{ ­ ' =â  ð print_debug(selÃf, *args):
  öif self.debuglevel > 1   ' õ print(datetime.	 `now(). #()Z õ, file=sys.stderr)j OelseX ’ 8  9 ðdef _get_socket(¬ à, host, port,  7outÓ ñ # This makes it simpler for SMTP_SSL to use the Ñ connect codez  ù ñ# and just alter/ Š 1 …ion bit.4 $if“ Á is not NoneI   ¯ 
	óraise ValueError('Non-blocking r (< 4=0)[ 0sup6ed'hÒ0q  G!._Ø_ú#('†: to', (c"),"æsource_addressp creturn¥ ƒ.create_N Jion(K Ä ,0 h 	« | >  h p='localÀ '$J=0, A =“2C"""C Ato a`± on a givenj!.
u  « !If	 c ð#name ends with a colon (`:') followed by a number,
J RthereÍe ð specified, that suffix will be stripped offI  ˆ M a ð  interpreted as" [  ùÎ SNote:3Pethod� òautomatically invokÈ Ä__init__, if*%is„ À @ dur¼×instantiationv 6"""Q ³	^® 
Â+ =Ó	M  i #€p.find('–!==à%.r 
 ß-i " à   {f i >= T   uD B[:i]°‰[i + 1:]K  4 :tryï     Â =Ð( r    gexcept8H ^"OS[±"nonnumeric"X !if° m 
J    r)`fault_ Ì  ðó audit("smtplib.š">q Ü$ck] ëLC i êv  �  p! =e (Æd, msg)Z –getreply(~  v B ûÕ¢ )€', repr(f U ‚ š ­Csendªƒ°"""Send `s'— “pserver.% é  ® $Ðsend:', repr(Ss))
  Õif self.sock:   úif isinstance(s, str)#  ' ô# send is used by the 'data' command, where ™_encodingp M Áhould not beS T, butQ ñneeds to convertm Ÿstring toP  �binary itæ ð anyway, so that's i ­a problem.A as = s.°  e(C .Ó Ä K Á ðsys.audit("smtplib.!",f:, s/ >tryRg  �; Kall(6 ïexcept OSErrorA jclose(o  ¢ òraise SMTPServerDisconnected('  'E Jelsep O  please run± e ±() first')
m¡def putcmd_ç, cmd, args=""o@"""ShaE  jsÆ A."""P  ã !ifA j == ""¯ ñstr = '%s%s' % (n OCRLFä 	5  8  ¦ *, > ½@end(/ä �getreplyæ 
Ø aGet a  R fromÔ× A  Õ àReturns a tuplLPnsistù6of:( B  - € respons, ð
de (e.g. '250', or such, ,Æll goes well u sNote: r{  -1/ Úit can't readd .‡ ¨2corš   Ç ¨ •multilineÑ ‹ % 1s aJÿ ed@ ¥a single, ;  ­Ging)’ Rùsú Ù °end-of-fileÏvreachedc Ž U = []¤ I? ;Non+ =tP.make G('rbj wh‡ 1¾/ * ¦ Æ I .˜  Ú(_MAXLINE + 1Ø
BK as ¬  r° G"""CR‘ion unexp^1ly N 6d: ¬ i  +Ï'(e· 3 !if¨ ë 
'  ½ F"J÷ïdebuglevel > 0� q_print_, !('ò0:',û r(Ç á 2len 4 > Ï] \ñÀSMTPResponse÷Exception(500, "Line too long.")
  úresp.append(line[4:].strip(b' \t\r\n')4 qcode = / 9:3]P ñ# Check that the error 3 û
is syntactically correct.B ðDon't attempt to read a continuaÜ ~ ú if it is brokenI Itry:Z  ÷ 1errŒ `= int( 
Ü e=p ValueE» C 	--1` Ybreak €if multi7 wJonse² !if× Þ[3:4] != b"-"€ c d perrmsg . �\n".join(_ Ø úif self.debuglevel > 0Y ! q_print_( À('reply: ret'ó (%s); Msg: %a' % (L,ä7msg&`return  ; ! 
´  def docmd(t ö , cmd, args="")• b"""Sen÷@mman%  ndŽ  Z 5itsD]A."""_  å Y @.pute _ ž & 1getè "()ž Ñ# std smtp cox sW  ¶ Cheloµ {name=''° PMTP '& '= à@Host6  ÐsÙ „for this+ � defaults"  :qFQDN ofFQlocal‰  à 7hos5ú "Š 1", v "orI _A    , Ç" =+  u   3 W _b  =0 – WJ S ;/eh;! S< ' <keûå_features = {}á þ W  ¯ O_msgd:°# According
öRFC1869 some (badly written¾ð# MTA's will disconnect on an § a. Toss âeion ifÛ #±h
es -ddm !ifbò  == -1 and len(*=Hfclose(Ÿ  ;QraiseçuServerD¦ Bed(" @ notæ ¼ 'edªnx   [!= 25×”  �   T Qdoes_ô6 = Îa#parsez =k	Passer�instance.2  ë, bytes), repr Ó � < 0.de;ð("latin-1").split('�œ1del� À[0]
        ÷for each in resp:
  ð&# To be able to communicate with as many SMTP servers ›possible,O awe havL ðtake the old-style auS ü
dvertisement into accountM |because³ ²1) Else our˜ ûfeature parser gets confused.¡ õ2) There are someÖ ´that only a¢ ¿ µ «methods weP ñ   support using3 Aold ò 
~  J ñ_match = OLDSTYLE_AUTH. (©)a !if56 
	 Çñ# This doesn't remove duplÄps, but Ú Ù's no problemc  H Âself.esmtp_fM0s["¯ _"] =   R.get(" }, "") \T  X   w+ " " +È Ý.groups(0)[0]8 ™continue
 ð%# RFC 1869 requires a space between ehlo keyword andzameters‰ð
# It's actually stricter,& .^ s*tallowedk › 3parh qwaanot go€o check �_  ‚l.  NotP  6} ! iØApres-f_½ Ïx 
à cm = reUcr'(?P<×Æ>[A-Za-z0-9] ‘\-]*) ?',+‚myO B = mÎ#(" 0").+*r(G  
's4  r‡ng[m.end; 0:]. p=  3if b B == {˜  g ¯ [; Î	# Ï b ÓÑ 	  ,elµ    › P òreturn (code, msg)Ðdef has_extn(S f, opt)p"""Does-ß¥ra given9 Ñõice extension?"""Ï  4optÒ  p +– 3elp’ zargs=''– Ga'help'l'an¡Rï  s  £ text fromÁ .š „ €putcmd("/ 0", p s¼ ) Ögetreply()[1]¬ Arset¬ £   £ 0 --< W0ses(Ž  :�and_encodõœ= 'ascii'P” !do¼  g "Ö_ •   Internal '! ™ 0whiÛ1gno©ÀServerDisconónected error.

  ñUsed internally in the library, since Øserver disconN L ñshould appear to7 ò application whe_ õ*next* command is issued, ifO õ we are doing an¦ õ "safety" reset.1 5""" Etry:  ì µself.rset() Áexcept SMTPSÞ DÝ 
? Bpass6�def noop(R )& 0"""I   ' 'Ü ð-- doesn't do anythÐ (:>® preturn R €.docmd("F &")s Amails À, sender, opVOs=()‡  1 	‡ pbegins  × xfer sessionòThis method may raisþ`followº 5Rions:ž  ^DÐNotSupportedEhT  The§ ð parameter includes '2UUTF8'”N   1butP2 ` extenÀ  ?Tnot s| ? byO  åÒ@\†list = 'Ÿ %ifÐ  º²†es_esmtp Â  ifðÐ(x.lower()=='% °utf8' for xoj sÃ <   "if–has_extn(? .   2 � V`_encod²= 'utf-e Jelse´  F   ú mÖ(]Ï � l'| e û eâ ' + ' '.join( s1 Ü 1put Åò", "FROM:%s%s" % (quoteaddr(#)$ c )K o—getreply(lCrcptlTrecipG k 0 	k0indôQes 1 B AientótbHail. í  ¦ n'
D M ¿  M/TOKÀ J%CdataJ7msg¶.IDATA< » …`ssage A  K@«‘Automatic·ú�s lines énúÐwith a period v rfc821ôRâs¿BData· ifk reZ‚an unexp?+ � 5the Ã ð;:  a²value from øZ!is% UfinalE Ðresponse code5Veived32all is¥t.  If msgB ðis a string, lone '\\r' and '\ó\n' characters are converted to
  Z'\\r\- ð.  If msg is bytes, it €transmitD eas is.H 5""" õself.putcmd("data") ñ (code, repl) = + 0get &y(' "if õ debuglevel > 0:G  ¾ < q_print_(  ('m H:', f 	U  ~ z != 354M øraise SMTPDataErrorE y Jelse: úif isinstance(msg, str)%  °  R°= _fix_eols+ @).en“ †('ascii'¬  1 òq = _quote_period4 Œ  $ �if q[-2:]Ö ^bCRLFy  H Aq +  	>  ?"."! djsend(qœ ?msgÇ	¢ F £Ë ( % Ï
 m 
† dreturnï   
à °def verify(W —, address–0"""î" '( ô' command -- checks for9 ¯ validity.é€vrfy", _k `_only(
  u ´ °  ” .ör# a.k.aR L # =Ã Ó OexpnÑ  & 	Ï ÿexpands a mailing listÊ  A Ê $~÷# some useful methodsÆ ñhlo_or_helo_if_neededØ 
 BCallÒehlo() and/or  > b() if @ .a  JõIf there has been no previous EHLO or HELOõàthis session,  Ê  N À � tries E4C Wfirstv TC - Bmay R the followx¶exceptions:¯ vAHelov s  ñThe server didn't8¨y properlyÉ4   ƒ  .’ greetingd ) Íis + P_respò@Nonewt ‡	 
l Œ“ot (200 <Ü 3 P()[0] 7299â �   K s L …  '   b  ;X  1 … µao … .AauthƒÐ, mechanism,  ñobject, *, initialÇonse_ok=TrueÕ Ð"""Authenticaêc°- requires ë  @  Écu ”q'� €' specifzQwhich‘ \ *  ¬Ðto
        beð used - the valid ñues are those listed in% ƒ'auth'
  õelement of 'esmtp_features'.
& 5 òobject' must be a callable  ð taking a single argu^ :J w € data = � = ¶(challenge). pIt willn  l Ñed to processÎ •server's >   response;! Â   •   it is pasBg õa bytes.  It should returnK Àan ASCII strï 6tha§ ðbase64 encoded and s` to�  ° ZuKeyword+%s:h  +¤- initial_×  _ok: AllowY d� ¤e RFC 49540 -0 	O  @ +ñAUTH command, if�  �õentication methods supports it.N 5""" #~ a™ s×@ ³tvide an  §§.  Not allP {  z �  By def$onµ yž0 so5  WotherM çthan None when*!is ,ý öy do.  See issue #15014ö Åmechanism =  ….upper()s £ ³@ = (\é)p$ �_ok else’ K f1 µ1not) 
-ó# =€_Ž(m .Ÿö('ascii'), eol=''x  |(Ã,©ð) = self.docmd("?&",� + " " +-  }
J ; __ˆ¥_count = 18  
Ò ƒ r 0r C# If”» pds withÝ�,i %$ &se`while *z == 334Á ú +û  p2 = ¹0.deZ ’(Þ
å    mðà  W    {~f )- 
• SQkeeps> ˜z 's,®†is wrongS ± i—?lf.5ú > _MAXCHALLENGEs ? ð raise SMTPExcepÏ( ) !"SA ÑÏ!inhÅe loop. Lastü&: ú C   ý8pr(³
 )  "if6Úin (235, 503)Ê x R Å À    raise SMñ@TPAuthenticationError(code, resp)

    def auth_cram_md5(self, challenge=None):-  1 @""" Z ñobject to use with CRAM-MD5Q z °. Requires \ U.userO 2and €passwordR ¥be set."""( #^ ð
does not support initial-× Uonse.6 5if É @ is Ì :  Ï areturn   ­ õ + " " + hmac.HMAC(,  D ) À 0.ene—('ascii')Kü, 'md5').hexdigest(†_plainƒ(_PLAIN€E andÄ 	À €P"\0%s A" % ¨ Ï,ÄÖ ?logÖ *?LOGÖ C 2 orÎ _h	¯_count < 2BE	ÛOelse+ 0‡& I $, $ D, *,æ_æŠ_ok=TrueœôLog in on an SMTP server that r‰ Û ¢…  ÌûThe arguments arÂ -î r:*   /  ¬ P name;Y � 1 -Ô D  @ æ 0 fo§ e¿� 1Key#¡ 
_-$ô: Allow sending the RFC 49540 : ¬  Ð  / ñAUTH command, ifD é ´ion methods”Vs it.¹ I4 ðre has been no previous EHLOvDHELOh @ thi0assion, � l � tries EåC Hfirsv TC - Swill Å�normallyË  waÇ ‡ccessfulÆ P ‘may raise fod _Pexcepp&s:ÿ ‰AHelo…\   ¡Pdidn'£õ ply properly to÷ 2   ¥×helo greetingu  °î… {  ac¼ Ñ  Ô Ó/~ Àacombinn� BNotS­#ed    � [ ¡×Ped by� ƒ CÐ.
         SMÇTPException  ñNo suitable authentica& ·method was
1  efound.) E"""
 õself.ehlo_or_helo_if_needed()& qif not -  has_extn("” 5"):&   ùraise SMTPNotSupportedError()  - "( À AUTH extensi 9 Ö by server.")¶ ?# ASs the0 � claims tE‡  °advertised_Ã blist =Ý ò esmtp_features[ã �].split(� öwe can handle in our preferred order2 ‰ ðs = ['CRAM-MD5', 'PLAIN	 xLOGIN']bWe tryò / Ð 's� E, if#C e" sJ Im3 W '[ A for“ a Å Y  â %if/ ~ ]4 i d  p * I \//("%ÿ
?4Som)%s ’ ¤ ? fåy don't really° #2S, so æ B pfails, ðontinue until we'vÁ7iedM 4allu }vRuser,¤²password =   I žÀ  ¤Q  �_name = '% A_' + ð.lower().replace('-�&_' š:try«  Ä(code, resp)` c  .   t  , getattr(ú ,¦ %),ä  4  €initial_k �onse_ok=  
´  = «# 235 == 'P½successful'r Q# 5035 ×‘: already7ü.ed8 0if  �P(235,G > ”   xreturn B	‡ e/g
¹ ’ ^ as e�Rlast_:  h;= eOQcouldéflogin bly.  R•  result of Q † attempt¯¦  m i Ãdef starttlsÜøkeyfile=None, cert aontext )a"""Put–q connec!toÉS3ò  into TLS mode.…  _ If+ àre has been no¥ðvious EHLO or HELO command this ses£, ‘¶� tries E€ C ]firstv ŸÀsupports TLSñ, this will encrypt the rest of cSMTP
  ñsession. If you provide) ñkeyfile and cert µparameters,E  b ˆidentityf r serverA ÷
lient can be checked. ThiI ñhowever, depends on whether’ Àsocket modulÕ BallyL s  ‘  ® ¥ificates.
  m ò method may raisë öfollowing exceptions:9  4“HeloError; 4Theæ Àdidn't replyH…perly to 1   Aåhelo greeting.5 5""" Ðself.ehlo_or_0 Å_if_needed()& qif not - õhas_extn("starttls"):*  Œ  à ÁNotSupportedè ()  - ð "STARTTLS exten:l 8 3 by&."’ b(resp,2) =› edocmd(R /  if°Šp == 220¯ Ý š_have_ssl  ¤ Ñ rRuntimeÈ ’"No SSL s§ Â included in0gPythonƒ  I Ñif context isç 2Non ‰ DValu‡ O  QC ñarguments are mutuÕõ ‹  ¯"exclusive¹  Çº (D » C¢ 6 or� t imÀ� warningsÁ .	 $("l  ‘× e€ re?Ÿd, use a ‘v"custom3Ánstead", DepL BionW˜ 6, 2 Ü
k gÛ =ó= ssl._create_stdlib_ (Å =	 ¥ h  = 
® Z ‹$ =ï `.wrap_ 5et(  } -¡_hostname=G    Å = +	åª# RFC 3207B # ªc…ûMUST discard any knowledge obtained fromZ  ¦¥ �, such av2 li] Eþ6ice!ß ¢# which waT	q  Å _pnegotiaˆ1 it
	�  àresp = None
    õself.ehlo_resp = None
 2   " þsmtp_features = {}% `does_e* E = 0  Uelse:  [ ¬# RFC 3207 û501 Syntax error (no parameters allowed)O ù454 TLS not available due to temporary reason< ðraise SMTPResponseException(v, replyq zreturn  S Ðdef sendmail(6ñ , from_addr, to	 €s, msg, % !_oh Qs=(),B   Grcpt" )+ñ"""This command performs an entire_ € transacÌ %.
a ûThe arguments arœ-µ  ‹ !: 0 addressß Ping t  Ã .W  - -æ   Ð : A list of Pesses’ &D º to.  A barzE  0str~ òwill be treated as ai dwith 1m � 6msgN Ù amessag' • 2 4ail„C : LÍ E0 ¾` (such… ÿ8bitmime) for thÎ  @Äy ýy 4DSNI s} 	–ô 
 0allž  e 8 " (0mayc#a tpcontainacharac�!inI öASCII range, or a bytþ C ä ° is encoded - @s us] tžPscii  0c, ál”1\\r G\\n ‹  are converjto \\r# â  If¸ Àre has been gÀrevious EHLOÇ DHELO ¯�session, eÒmethod tries C ‚first.  n € server && $, 6siz/ ò @each7 •specifiedrBpassCih  x ˜ qfails, Ç 3  ¥ d@© Å@suppã'ed'fÞ A ý¡normally iHnPis ac;!ed …at least� Áone recipien¯ 1t rM ¿!di¨Qary, Æ . QentryM  I E ð that was refused.  E:9 ´ _ TtupleQ ¾M g m q�accompany‘  ©`ent by>Ð/ @\ R  fo¸O ^&s:“€QHeloEô§ {6@idn'1õ ply properly toÈ 5 	   ðhelo greeting.
    õ!SMTPRecipientsRefused  The server rejected ALL r+ 
@  ö(no mail was sent).4  w eSenders  J w ûdidn't accept the from_addrH �DataErrorB  H ñreplied with an unexpÑ Ž 5  eU ðcode (other than a r'_al ofD  - ^ ÃNotSupportedÀ  ¸  4ð_options parameter includes '<_UTF8'} "bu:2 ô extension is not s� ? byO  …%.
- QNote: `connec¸ ð will be open even afÅ Pan exÑƒ graisedN †Example:` p >>> im'… smtplib|  #s= .ç Ú("localhost")) ôtolist=["one@one.org","two@two `hree@t  Pfour@  ]T ¶msg = '''\\ ð ... From: Me@my8 
 0SubT·: testin'..Ó P This°a/  m N  `s.send74("mq "",ï G,msg1{ "Ü â ü : ( 550 ,"User unknown" ) }i fquit()�!Inúrabove e¼, qmessageýÄñed for delivery to ‹ d !of:  k çÒesses, and onJ Œ,Ï ‘¥I Æ550.  If allJ C areO!ed¥ ½ Pmetho Åll return anL �empty diØ7ary¬5"""' öself.ehlo_or_helo_if_needed(eª ÜVs = [Kõ	if isinstance(msg, str):_  ›k�_fix_eols' @).enŸ†('ascii'j 1if “ Qdoes_w 
M   û has_extn('size's  w = ´ �.append("+ ¡=%d" % len‰ z  4  èoÂ1 in A  Ñ
†  , ` : R (ã ’, resp) =Ø î&, F 8 0if : z != 250z  j== 421  – =Wclose¿  Oelse/ @_rse '  á ™	îÓ ,Ø»  Ñ0err'{…
'!tos,  g ð ]
        for e÷ach in to_addrs:
  ð(code, resp) = self.rcpt(each,  ™_options)9 1if < È != 250) and *1)i  t �senderrs[] 2] =0 ~ ^  ™  == 421J šlf.close(—  g ôraise SMTPRecipientsRefused(ƒ 6 fif len  t   0È â# the server rV p all ou p 	Î V[_rset® ª p.¬‰data(msgÐ ;˜
;1if  WJelseK  iØ ˜DataError½ ð #if we got here[¡n somebody  VEmail3 treturn È
 1def �_message(š ±, msg, fromúe=None, ?  Ì 	  r ÷:=()7=()Ã"""Converts ~ ñ to a bytestring�passes it  ¾  d .¿  | �The argum®± are as forØ  , Ð, except thatÛ e is anÁ e% .ƒ ".M	Æ object.  If
 :  5 or5 isK   ,�s” QtakenI   ± headers of u aK �describedƒñRFC 2822 (a Value Ž 	1d iH  re !moâ  onytn ”'Resent-'ƒ Õ).  Regardles‘ ve   �é äó, any Bcc field (or a  i, whenç  €K r‘ )�  !€ð	 won't be transmitted.  õ* I 2  isl  é°rialized usMè°generator.BhG 	ß g O`called}ƒ  ` ³! ¹  4  er %of˜   rP KeÒðcontain non-ASCIIƒ \ % adiþ5theP   ñ UTF8 capabilitytq policy´ ñloned with utf8 se?ATrueP "se)a­ Òdc  œÓBODY=8BITMIMEa‚serted oØ û .  IŒêõdoes not support\  j  BNotS @ed eóSá�.  Otherw¡ QÇï £ ï  out modifyóç 95"""´ ## À-Date' is a ó%mandatory field if the Message is resent (RFC 2822
  ñ# Section 3.6.6). In such a case, we useQ !'RG 2-*'i Çs.  However,R  ry 0mor< tan one A p' blockU çre's no way toF ñunambiguously determine whichN  isA � most recá ain allº s“ ðso rather than guessÚ ðraise a ValueError in$ tD .� 
 À TODO implemt Óheuristics to[  „correct 5ô wwith anP !op��allowingÕ  us¬ po enablB&e h ÷.  (It should beL Qpossi2 ‹ ‡ Qly al+ !o"utime.)
@ õself.ehlo_or_helo_if_needed()& Mä= msg.get_all(ÛVDate', $if|…is None:G  ‚õheader_prefix = '' ’elif len(o o) == 1> kE sr òð3("m'Ohas ¯¨ Â"Þ �from_addrgá `# PrefÌ’he sender<T per �:}2n Y r= (msg[„ ,A+ 'SO %']3 7  Oif (9 )ì?msg@ 	@elseè~ fFrom'] y ´ °email.utils% #uesses([& v])[0][1Á  :oNsO F _åÀs = [f for fÈ #FTo'] £  e?BccC -,Cc(…  ifÄ  t$ ) tq= [a[1]ô aô c')M P# MakîÐlocal copy so’can deletjBbcc 5s”Amsg_3 =: .  u0del+& !['9[
 ¨
# pinterna–al = FalsÛ:tryýw''.joinO4, *,÷]).encode('ascii’ except Uni  E& ú
_ qif not úhas_extn('smtputf8').  ¨ZñSMTPNotSupported[ ( )  r"One oruQsourc �delivery Æ3— require"G À          " ÿ#internationalized email support, but the server"
   ñ" does not advertise5 ùrequired SMTPUTF8 capability")L 	‰ u = True! ðwith io.BytesIO() as b Emsg:'  › 9if K 
  " 2g =å ¢.generatorY G (R  4   p Ò, policy=msg. À.clone(utf8=¹ )Ü  >  V0_opihs = (* 4, '"ú', 'BODY=8BITMIME'L OelseÔ "¿ 
O ûg.flatten(msg_copy, linesep='\r\n  .  msCP ¦.getvalue(Z ðreturn self.sendì á(from_addr, to	 3s, P  , #  ,€ F Drcpt+ !)
,  def close(t )!@"""C �`connecƒ1 to  vÛ6.""Þ6tryD  u bfile =Ò   v      t . f = Non¸  0if  
O      9s:kfinall} Dsock}   }   }   }   } P  COquitB ‚TerminatÕ4Yssion5 reÚpdocmd("P èõ# A new EHLO is „after re¡1ng ó Z^ ”ehlo_resp&he 	�/ ¢smtp_featu£ !{}ò  …!  ¾ _e& v = FalsÂ  Zßòres

if _have_ssl:�QclassóP_SSL(0
’P ThisRa sub/ €derived &< c that Õs over an SSL½  encrypted Ï�et (to u|2is X ¤you need a% PmodulËeat wasN ‚compiled{4SSL ). If host´  æð specified, '' ( UlocalL  - ). Aused?  N  Pomitt9  5 rstandar -ã -x  , K G(465K  i _a pname anþ AurceS@ess �Þs! umeaningP  as py do in n.`.  key™X Bcert ‚re also ÁEal -P €they can«ð tain a PEM formY`d priv<5keyV @ific  ch2  d P 2for–  SLS ±. Jtextˆ ,z E `SSLCon0 ,t  is<!alíÀtive to keyfóile and certfile; If it is
  ðspecified both key) 	6 õ  must be None.
; 6""" ùdefault_port = SMTP_SSL_PORT& ð
 __init__(self, host='', :  =0, local_ Pname=u ,t ¶  ­ # å  2 ÿtimeout=socket._GLOBAL_DEFAULT_TIMEOUTo âsource_addressg � context )):v $if q is notA[º  
<  á óraise ValueError("m 	C ù	arguments are mutually "‹  O  É"exclusive"). ¹ Jº )D » C\ 5 orº  im‡† warning'= .	 $("l eˆÿdeprecated, use a‘v"custom3£nstead", DL BionW˜ :, 2² K.� =Æ	Õ# {=	% 
ú {—…ó= ssl._create_stdlib_ (i =	 TX Ô = ö  r $ =:	Ñ  ˆ.r om#, !® 	
)ÝBget_^àn ^ (�îdebuglevel > 0y% q_print_, à('connect:', (2i )'3new“ Ç = super()._© : B 	Celf.vS.wrap] (h ?	êfserverøî  › 
Œ vreturn m �ð__all__.append("ù �ð
")

#
# LMTP extension
#
 žá = 2003

class) (> ¦0"""+ @ - L™ò Mail Transfer Protocol… 1The@ # p p, whichtðvery similar to Ed , Ñheavily based¾ñ on the standardNð client. It's comm& o^RUnix vÐs for
    LMTð%P, so our connect() method must support that as well ña regular
    host:( ð server.  local_ ñname and source_address have the sameG pmeaning` ¡they do in# ñSMTP class.  To specify a Unix socket,E 2you»  usw ã absolute path[ ± p, startq  wi a '/'.
E ôAuthentication is	`ed, us4  º  Ÿ ñ mechanism. WhenH + 
¦   LÍ €generallæ &n'i�or requir½ yE a� p, but y³òmileage might vary."""Â óehlo_msg = "lhlo ñdef __init__(self,P='', Á=� k_PORT,ÃR=Nonec ó 
Ö& ’ timeout=™ñ._GLOBAL_DEFAULT_TIMEOUT):à  K ñ"""Initialize a new instanceÕ  %   …super().Å  c¼ ² 
„¼   Q   Ä 
 ,Î Ö )b K5Jv  – S0dû%
ý C~1 toð †ô daemon, on eitherïo
 3TCPø	 !ifÑ`[0] !=Òd ê `returnÎFÀ  ¯ E
þ = ü  K 0if ÷ . %@not 'ï  ! ‰ ðaise ValueError('Non-block^9# (] 4=0)` ’7ed'Œ �# Handles-domain%s.e:try… Ÿ  k # =. . 2et( €.AF_UNIXÁ bÕ.SOCK_STREAM)W G  
�  G ‘ C.setü §f
v / afile =x	“   � .æA ‘except OS€
Œ Üêdebuglevel > 0$ ° q_print_, #('m r fail:'_u  5 ]  œ S   z.close(< Õ ò rT°(code, msg)ßÇelf.getreplyU � ¾ ê u æ  á  a u `| €


# TesD£e sendmaileñ, which tests most ofoññs.
# Note: This alwaysE s+k0.
iØ k�__ == '__2__'b ­ðprompt(prompt):
    ð    sys.stdout.write(prompt + ": ")
$   ( fflush( dreturnJ ñin.readline().strip()
H ²fromaddr = f c("Fromf  to s âTo").split(','q óprint("Enter message, end with ^D:O �msg = ''z �while 1:  Ï  Ÿ / =´ $ pif not + 9  = Ubreak' i   +,  § M¡ ð length is %d" % S(msg)Pserveó SMTP('localhostô  ò.set_debuglevel(1 tndmail(e#, Q , j – , õ8quit()
"""Routines to help recognizing sound files.

Function whathdr()- ÷es various types of= ð  headers.
It un ôtands almost all# ò that SOX can decode.

The reð
tuple contains the follow± ñitems, in this order:
-Ã š A (as_ ‡ °it)
- samplE ðrate (0 if unknown or hard%”  1 `numberë �channels6 bframes­ e£ ?(-1w Qbits/·  e,£ Ò'U' for U-LAW A A B

If0 ådoesn't have aÊAable*C, ittys None.?  ca= ðbe opened, OSErrorâ`raised·‘o computex òtotal time, divid H by/ 
Ú ‘!a  ûa³  sr each ˆ)­†() callsº@.  (�!seÕñ	also use some
heuristicsOÒraw data, butY=ðwork very well.)

Finally,Â $ f2`test()Pa simÂ@mainBgramö£ @
wha+  È }@ menzQed onZ @argu ô list.  For directory
 sÄW ú !()Ð W (&at: ¥.  DefaultD  µ P"." (Ä  Ž? ‡e currenF  ).  The
opµ ` -r te~ itA�recurse dY´  iel nõinside
explicitly given¤ iŒ`"""

#e 8�structure® Atop-] Pexcep²a  e Â sâand its
# subr ®ðe last.

__all__ = ['•1',  phdr']

fa colleás import named¥b

SndHû' = &(' !',˜ U 'ü Où—nã1s nsxwidth')q .= a.__docÈ ð("""The value for ð	type indicates the data  ñ
and will be one of! ñ strings 'aifc', f ðu','hcom',
'sndr @sndt !vo, 0wav @8svx  sb u ð.or 'ul'.""")
SndHeaders.framerate.__doc__ = ("""The sampling_  ¬ aeither¬ ðactual
value or 0 if unknown ýdifficult to decode� Ÿnchannels�  `number%  V f ðit cannot be
determined  iI– ?is † „ G Bfor # ¨ 4
of$ ]or -1ë  P[widthë ER # `le siz9Ð bits or
'A' ƒ PA-LAWä "'U u i ò
def what(filename):
    """Gues€ { Q€a sound ,  @ * Qres =D 6hdrG  ¥turn res

k 	' n `RecognÃ d hl1"""K •with openc Â, 'rb') as fG  ¹ ñ h = f.read(512)<    
¶tf in tests1   Ä vtf(h, f4    if¿ 
/   !reÛ V(*res<   ŸNone


#- ó#
# Subroutines perp/ #L 
ç R = []{  _ å Ò pimport  *0if €h.startsuƒ(b'FORM'ü Ü   òif h[8:12] == b'AIFC'a   Qfmt =”!c'f /el2  F2 f2 &seQ \a r.seek(0~6try+ 1a =Þ .; 4'' òexcept (EOFError,(  ì | ±(fmt, a.getã î#() Ÿ1(),ñ  ¥   0 n1 s. 28 *D  ÃæB())
»….append(¸)D uÇ+f ³H.snd³ñfunc = get_long_be™ Š0:4]ÿ(b'\0ds.', b'dns.B 	lB š
1ile>  uÌAhdr_¬ = – r(h[4:8]• ê X €encodingã³unc(h[12:16<  ƒ C6:20 � S20:24  }$lew ±1 # default#6if x 6= 1\8 pB= 'Uß S2 22 8` ðelif encoding ==S 3:
  üsample_bits = 16 �size = 2 Oelse; 1'?'$ cframe_7 ^  ±* nchannels) 6if , V n r = dataH /) ; 
ˆ 2 !-1 öreturn filetype, rate,~ ", 2 #, Ÿ  ý ð 

tests.append( ±_au)


def  ¢hcom(h, f)® óif h[65:69] != b'FSSD' or h[128:132 RHCOM'5  w¡ ANone± ñdivisor = get_long_be(h[144:148])& 3if ) J !atžd2050 /  / 
$ A = 0 € 'Ñ '�1, -1, 8	 ) 	;voc
ónot h.startswith(b'Creative Voice File\032'?
csbseek	pshort_l
S20:22	Ë ƒif 0 <= 9 Â< 500 and h[ j] == 121cod6E56 -) 1+4] — !if4 ( :   | aint(10 .x   - ©_?voc^9voc]9wav]’mport wav.ó# 'RIFF' <len> 'WAVE' 'fmt  È ?if ” : )¤48:1¡D º3:16¸T Ù ¸ f.®"(0÷ 6try+ 1w =² Â.open(f, 'r'' òexcept (EOFError,(  | Ñ('wav', w.get* |#() nb1(), µ 7 þs5 !8*  �width()) 9wav¢I8svx£l^FORM'lO8SVX°# Should deS` it to$ #Ý ù -- assume always ù'Ÿ q', 0, 1 Ô % 	Õ KsndtÕ ÑXSOUND¿n9 le:º°[ð ~ ¤Õ& ¸'‰ 9f � / É rÉ H\0\0È   #:4s ž aif 400m/ †<= 25000ô & § Ä rÄ [@sndr¾ /#- ð #
# Subroutines ðextract numbers from bytes #
#---------------- ð!#

def get_long_be(b):
    return (b[0] << 24) | 1 #16 2 8 Kb[3]Q lQ 33 Q B Q ` Q 0Q _short£ 	4 14 † h /
#*ÿ	#
# Small test program #. Q + (I£import sysX±cursive = 0  if ×.argv[1:] and ’] == '-r'— ›7del! 1:2]G   &re] 1 6try9 j   <  ´ uall(sysŒ %, R A, 1)R  , Oelse> _['.']7 ö	except KeyboardInterruptG  y õstderr.write('\n[( fed]\n'ƒ  . rexit(1)tÀ Ilist� �toplevel�Ÿožðfor filename in M ¢ ôif os.path.isdir(+ [    Uprint ÷  + '/:', end=' Ä  , &ifdD or ® v  &   V '’‹ng down:O  ) Ó Eglob²     Ù @s =  . (Ò Pjoin( u.escapeÀ v), '*'){ H   rT 	s0- / ? Ð ÷*** directory (use -r) ***Û B > � dc +Ústdout.flush(ž 	# ™   _ 6whaÈÑOSError¯ ß “not foundÖ `
if __7!__ßƒ__main__å Yð()
# Wrapper module ž€_socket,Šð viding some additional facilities
# implementedÑôPython.

"""\
This] ’provides a ` operaR s’ e @relaI Afunc ð.
On Unix, it supìas IP (ºÑnet Protocol)H  - 0 doð j sE Pother×AtemsN HonlyS 4. Fw ‘ specific#a
³ óare available as methods of thep ¥ object.

P #:
C ú() -- create a new5 ' Kpair+    h 3 Ës [*]
fromfd4 · �  # 0 anyn…± descriptorD ‚send_fdsF MSend' !toé Àsocket.
recvð%_fds() -- Recieve file descriptors from the socket.
 Rshare9 ƒcreate a  r object7 Òdata received F A ã[*]
gethostnamS areturnu „current ! - &by/ Umap a" ö to its IP number3 Baddrµ 3 n$ 9 orA €DNS info< Nservo   @ice ‡ ò  and a protocol  to 7ort‡ " L  9 À(e.g. 'tcp')Í aA �ntohs(), 	 lÉ óconvert 16, 32 bit in~pnetworkD  ?ñ byte order
htonK  	 K @ 4to S K šinet_aton‘ 0IP oñ string (123.45.67.89× 032-® @packaormat
M JntoaM ,  ½/to` 
fògetdefaulttimeoutW 1get]   d value< s< s< 
—_connecti  s‹!anð ess, with an op, %alŠ _and
  , dsourceM ó!.

 [*] not available on all platforms!

Special¨Qs:

SÙ@Type	t Å*or×ps
error( Aexce· R raisÃQ I/O "  s
has_ipv6, rbooleana€ indicatðif IPv6 is supported

IntEnum constant¥ ðAF_INET, AF_UNIXW æð domains (first argum4 Û ñ() call)
SOCK_STREAM,  5DGR 7RAWV  ps (secoÞU )ž Iegerž ˆMany oth ` may bM`fined;s$se u3!in™  
c etÔ  op© Ug m(°ds.
"""

im/  _1 !et–   *& ðos, sys, io, selecÜ5 ek2 zñ , IntFlag

try:‹" berrno
ý! I„ E%  ñ	 = None
EBADF = getattr( 1, ' Ï', 9)
EAGAIN$  ÿ', 11)
EWOULDBLOCK+  0 Ð
__all__ = ["¯Ðfd", "getfqdn ¨  ÚAer",ö „"Î‘dualstackØ 2 ÐAddressFamily KdKind"]† ð.extend(os._get_ex¹‚s_list(_¿À))

# Set up(vT.AF_* °*w` as meâ@s of² 5Ôs for
# nicerð
representations.
# Note tñ,hat _socket only knows about the integer values. The public ñrface
# in this module understandsF ñenums and translate ±m back fromO ô!gers
# where needed (e.g. .family property of a º óbject).

IntEnum._convert_(
  ‘'AddressFI %', †__name__ ñlambda C: C.isupper()¿ ÿC.startswith('AF_'))v S]OKinds 2ESOCKu OFlagë 0Msg r 2?MSGq \OInfou 2"AIt  _LOCALHOSTÆæ= '127.0.0.1'
 ð_V6 = '::1'


def _¸4num1er(Â , ‹�_klass):B"""C-³ a numeric n4 s to an [‘ member.
= ÑIf it's not a=n! p, retureW P qitself.A 1""" 2try�  è : « ½ )* €except V‘]Error8 f  


# WSA e$ ð codes
if sys.platform.lowÛÕS"win"; ‚Tab = {}}  M ñTab[6] = "Specified event o‰ò handle is invalid.å P ![8> �Insuffici; ýmemory available3 74 ð
One or more parameters ar«l 2995:  verlapped CPationé=rte  "99à O4 :I/Oå  óýin signaled stat¶ #99· I } àwill complete rö Q10004¿  y; a\oterrupÀ   7 97 ¤A bad file–Žwas passö Q100136 pPermiss"Odeni+ ˜ àA fault occurr]ó±etwork??"  ‰jEFAULTFQ10022r $An,ž « _attemä 2ƒ €Too many: nì sH 3 H72per»would blockªB1003A  0ingh 9  is already@progc~ s 7 *Ex bon nonÈ n ýbDestinã aþð  required."
   ú errorTab[10040] = "Message too long."
   * 1* ÿProtocol wrong type for socket8 28 TBad p< ooption- 3- e ßnot supported0 40 S} � 3 53 POpera†  1 61 ” ofamily7 77 �Address 6 6 by! ä 8I ÓThe network aU Ÿis in use7 97 0Caná ôassign requestedC 9  5Nl ois dow­5) ¯unreachabl’ 5
0 ádropped connec‹o¢ sG5ÚSoftware caus= Oabor�5$ @k has beeq (ÿNo buffer space availá *Ž¤is alreadyã Ã5(5  ¯© 1 Í Oshut¯ÿToo many references 6 5o*�timed ouf6CÍ0ref£] 	›ßtranslate nam86û Œ  " ? is¨	6ï@host. À6â X * Á6à‚Director_emptyå ØoprocessnÓÿUser quota exceed 6ÈODisk- 7ÈöStale file handleþ»  7Ì@Item?_remot™9( Ñcsubsys5 /un*	90Win8À.dll version_� of rangt 0SucNáful WSAStartup”¿yet perform?"10µ PGrace?  3 ! J@prog®"10² `No mor? sults from‚ ÿLookupServiceNex# "10» UCall ²ocancelª ÊP9!duô@ll t} —oinvali "10ÙŽ ð provider is invÿ4alid."
    errorTab[10106] = "Service provider failed to initialize? 7? ¡ystem call: ?ure- 8- l �not foun— 9+ ¿Class type . 	!10. óNo more results from WSALookupã ONextœ  !11C CÂ ¿was canceleœ !12+ ð Database query 5 _refus4  2100_ OHostÊ 2100\ ÿNonauthoritative h9 3• ò	This is a nonrecoverableôø A10048 Vð  name, no data ?  rd request.yp×A1005C 0QoS3 oeiversj j ' Osend% P?No ( K % /now J * Ê � confirm©K / Ÿadmission=5 - opolicyý#106 , �bad stylM1È' ^objec°2101¸ ( ptraffic× Otrol® ¨generic+ ¬…:Ü 1· Ž flowspe\ »1Invt 4 vobuffera Æ5 ofilterI22 ¤‘Incorrectƒf Ocoun‡2°f ³ lengthË  2âg Olow e ìUÑagnizedœ j c ê–  3 ò3  Ê¯ descripto–2÷5 Ë-i— G   ¨ @ èB ÿshape discard mode ö 3% ? ing rat9 	,“Reserved _ Íqelement¶ô ñ__all__.append("G‘Tab")


cäõ_GiveupOnSendfile(Exception): pass+ ‚socket(_ . 1):
Ü�"""A subV À of _socket.ðDsocket adding the makefile() method."""

    __slots__ = ["__weakref__", "_io_refs" ‚closed"]8 ñdef __init__(self, family=-1, type	 Qproto
  € ‘no=None):{   ð # For user codeµ CressL A andL ÷ values are IntEnum members, butP 1forô punderly_.   ÷y're just integers. TheG û constructor of C €convertsL ÷ given argument to anJ b õ  automatically.! 2if @ is  !  Xj == -1  ! v¥ = AF_INETY   "if?<  §ì = SOCK_STREAM> À{  % 06 
'.!!, > ,ý )C  L#._y' =]  ‡ˆ = False�SenterŽcpreturn > 	. x»W*args4 aif not4 "._r 
z N . (()V ?repƒ  £"""Wrap __  )&arevealCr	 ¡class nameø®0addF(es)= Ç è  Ž ³d = getattr–'À "',2jõ = "<%s.%s%s fd=%iÅ"%s§=	 ªe=%i" \�  r !% d 1.__» é__.__module__,* #  L* @qualí ,  2" [Î b]" if  � else ""Z D/() C   ø 0Ž 
:try  l³" =ú 0getÑ ñ (S  '   1if . E   rs += ",# ±=%s" % str(3 
M Îexcept errorM Ipass˜¸ r¸ Opeer¸ . k ¸ # ¸  ¸ &5'>'É áˆ oOtate  aise TypeE%`(f"caní�pickle {ÛÓ ü ×__!r} object"ò1dup<0""" P) -> ó#et8    ‘Duplicateý% 2. R©Za new:   connected8 Ò6sam®ð system resourceó. The new socket is non-inheritable.
  5""" õfd = dup(self.fileno())   O 1 =  “__class__- bamily, Ctype rproto, L :=fdM ².settimeoutG g x areturnÎ 
� ’def accep7 !):  Ò 3""" `) -> (³ ò	et object, address info)L  6 òWait for an incoming connection.  Rƒ aWt �represent6 7the: `, and  z !of fclient‡aFor IPã Aets,$ 3  ­  ÄÀa pair (host v, port)E 
Ìî °·    $fÆó# Issue #7995: if no default Û ¼ 5set•listening‹ #ù € had a (®Tzero)C ,ž!ceÙzn blockL ômode to override platform-specifico @flag'nccif getÊ É  ()Ë ANoneÌ ²‡ U ` á¢ V(True Õª� Û@make2• , Ð ð="r", buffering=… E, *,C r  Vencod# cerrors0 qnewline 
5s 1...:Ôan I/O streamÒ edX Ï Ý "et³  w  rðarguments are as´ñ io.open() afterÂ Ü €name, exÅ EonlyÎ 0supÜ!edý b valueW S'r' (—a), 'w'Œ?'b'à# XXX refactor¿  shŸ Ucode?p ¸`t set(na) <= {sš"w", "b"}Ýpraise V˜ Ebƒ("invali± @%r (Ñ ñ r, w, b allowed)" % c ,à1wri<�= "w" inõ œ 0reaÐU = "r ƒ or not ; - tassert 4 -or" `binaryN bN ? 0raw   $ifP - +š D $ift / w^ qraw = S†#IOóˆ .lØ_io_refs += 1p  
z  ?= -9 ?< 05 ÿio.DEFAULT_BUFFER_SIZE‚ ,==J ]y
e  ;K"un² #ed€¢s must be E "B àeturn raw
    ð    if reading and writing:
  Ñbuffer = io.B áedRWPair(raw,  % Eing)< &el^ R CeadeR M *seE dassert³ v  ¶ @ 
² OWrit` šif binarye rreturn Q d Btext^ âTextIOWrapper(' `, encoTö, errors, newline C €.mode =  \ r    
 òif hasattr(os, 'sendfile'):!  ò Tdef _ E_use p(self, 2 ú, offset=0, count=None)ò  / u._checkD ˆ_params(E C Ò  ‡ ‘sockno = F  / :no(# tc 8 * ! =§ . 8 ðexcept (AttributeE[,•ð	UnsupportedOperation) as~
Ý  l óraise _GiveupOnSOñ(err)  # not a regular‘ ‡ ;   À 0sizÊ�os.fstat*pno).st_ 	B Ê !OSÂ ¨ E!ifÊ f  Ø0ñ ^emptyé ð# Truncate to 1GiB áavoid OverflowÂ ù, see bpo-38319.í Pblock„  è1in(xA or ™ ›, 2 ** 30$PimeoucHBgett 3if  _ == 0ç  ìBValu/a("non-”  ó ¯qets are-G"� ò# poll/select have the advantage om`requirZ 9anyq# extraf° descriptorE€ntrarily^eh kkqueue@ `(also,x "y h úe a single syscall)|:» ‹a'PollSË  orE Ö , Çxectors.5 †,el› N F w  +orH 2 `.regis­   no` y ‡ ÆEVENT_WRITE)þ p Ptotal² 70=Plocal£ð variable accesstPminim ‰overhead< • _	 . 	.  os‚ Ÿd = os.“	& CPwhilesç Ü   ì ª ¦� #orœ (Ñ =  Ðraise _socket .timeout('	 Ÿd out')
   Ÿif count:  1 ²blocksize =+ ß - total_sent7 6if : O<= 0b f OreakM ?try;  ƒ P = os� àdfile(sockno,    voffset,Ž 	€except Bî ¯ingIOErrorz pif not `/ou? Ý #W ° until the ¥ ÿ	et is ready to send some G   ÿ# data; avoids hogging CPU resources.B 
’selector_	 ( l continu‘ 0!OS(o as er/5/ =ð# We can get here for different7Qsons,NOmainô 
€# one be+''{ Àÿa regular mmap(2)-likò    #[ÿ, in which case we'll fall back on using˜ Qplainü/()¸òraise _GiveupOnSenð?errÃ5 Ïerr from NonÜ Oelseì
i·bÇ  # EOFú ’0 +=ø B0+ oreturn�ofinall> 'if3 ð > 0 and hasattr( Ÿ, 'seek') # .! (Ì �
EEdef –E_use R(self¡", A 2=0,]=£v Åúa@"os.G Ÿ !() �available‘ñthis platform")
A ¨ ¤  Ï u._checkä s_paramsMå ã - J1if < 3getH/()  QValuema("non-^ ÑLQs areó ©supported"j „ 
Ð )È › ^ öAmin(%„, 8192) 5 ò J 8 µ5= 0 p# localFAvari‘`accessûPminim …overhead8  ¡ _#! =v.   ú rð = self.send
     Ptry:
	  ªwhile True    Žif count   ñblocksize = min(+ õ  - total_sent, $ )u  ?   &if" _ <= 0j  + ]breakE @data öemoryview(file_read(| } pif not ? s o }  # EOFv 4	 ¬ e    p = sock% d(… ¢  / €except Bi¯ingIOError±  0 �continue±   ?elsã     µ@ += ¤ E  + !if  b < len¾ “  1  á ! =m[Z /:]\ ¥  M ™	@ greturnw kfinallñ'if+ ñ > 0 and hasattr?ž, 'seek')×  ^. —(offset +M !)
z ƒdef _cheà 3 à_params(self,  ", A ,bk aif 'b'Ÿhin get˜ `mode',! 2  ±raise Value% ("f ð should be opened in binary K "x ¢ ú.type & SOCK_STREAM
m Honly0  C  äúets are supportedt 5!isð ;Non£– ¢isinstancef[, int3Typ�   "t @must a positiveU òeger (got {!r})".formatw )/ Q º&Ž ?R  p@sendñb #=0d=_55"""7  < [”[1 a]]) ->íÚ õ aSend aÄ` until"ñ is reached by using high-perB&nc–5os.y )~Ã"heOñ number of bytes whichî  „  weQEent. *Â &* Õrregular© oobjectD :If › —óavailable (e.g. Windows) o_ %isˆ  V)a } ó p() willw!usŽVsteadƒ *ð * tells from whï €to starthd_1theÝ = ðIf specified, *count* is the toótal number of bytes to transmit
   as opposed õsending the file until EOF is reached.= F# €position" ðupdated on return or also in case� …error inG Rwhich  u ó.tell() can be uœ ¡figure outŸ Ý G å M –were sent­ ð The socket must[ öof SOCK_STREAM type0 �Non-block9 øs are not support5"""‹ Etry:  j`self._f é E_use ( õ, offset, count)D ðexcept _GiveupOnSend1 f b c Âdef _decref_ë @ios(® )b 0if  Ö._io_refs > 0  æ 
 A-= 1^   = oclosed8   1()
3 ‘ Rreal_  Z c, _ss=  .§ Ÿ ±# This func�ashould®öreference any globals. See issue #808164ýF_ss.z •  Ä { : ë .÷ �d = True	Fƒ/<=„;½ ldetachØ3""" B) ->ø¢descriptor� } Cº||À object with–  , =punderly  § P d ‘C 0canVîpafter tÏscall, bõL +!re-Ðfor other purÜ@s.  n ?  ²™ÈŒ	:  
Ter().C0‘@property£  Îofamily| ò Read-only acces§phe addr 9  Õ }Gx” ñ_intenum_converter(sup§ N 2, A^ F– #µ  ³ › H   r 1, S¨CKind› öif os.name == 'nt'~ ^ü get_inheritable´  ¿0os.- mhandle4 .#Fno(){ _ s_  ', q ˆ l 0os.3 e 
C +OelseÛ %Àos.get_inheróitable(self.fileno())
  ×def set_inher+ ',  %):0  7 ?os.3 ^ 
< ; gc ø.__doc__ = "Get thep � flag of qsocket"G w G SG 
ò ófromfd(fd, family, type, proto=0ñ O""" + [, b]) -> ¤ � object
« ŠCreate a O � a duplic! æ `given  > òdescriptor.  The remaining arguments are"£ame as forn 1().G """8Pnfd =u 2(fdüdreturn/  0, n, Ò
if hasattr(_ç . ³, "sendmsg"/Âimport array l % P_fds(7 Ð, buffers, fd ólags=0, address=NoneO  k ‚A ![,+%s[A ]‘rinteger†  I ASend-@list[ k gs� ó over an AF_UNIXL F P  B.£ Emsg(Ý [-±SOL_SOCKET,“ ;   M²SCM_RIGHTS,:.@A("i"$2))]²ñ __all__.append(} X?")
¥
Orecv¥ %  M ¥˜size, max¨š6 �’x(data, ‡`, msg_ sÔ)ÇÓReceive up tož 6	Ë› - Yvmessagen ’ata and aŽ Ccont\ / � ù0# Aâ EEintsX \fds =Ä¼ ñ‚msg, ancâ ! =h.NE}Y  > /’CMSG_LEN(š  *¸P.item4 Ù cLqlevel,  å  ‡ 4 in’ 
âAif (& = D == € ÏC%  V 	$ Ó0 Å   @fds.TRbytese  ‹ [�  *  6len( [) - ( %]0
 T{S(fds)5`f\ ‹ \Tshareÿ í Ú  W(infoÿ  É 9 ÷ =	 ¤=o ä Qed byÍ ð     socket.shar“e(pid).
  5""" òreturn socket(0,  Qinfo)% ò__all__.append("fromshare")

if hasattr(_C 2, "	 �pair"):
E 3defc   ñ(family=None, type=SOCK_STREAM, proto=0):<  µ '""V "([@ [< [1 ’]]]) -> (€ ƒ object,x  )�  T �Create a “ $ o¡ )  s é C theA "s +Qed by …platform¦ y  O ¶() functionwñThe arguments areF ³same as forj ‘() except  ‚default ô 5 iso ñAF_UNIX if defined on4 š  ; otherwish he( M ¦is AF_INETŸ &ifp  §‹ ;:try   ¡ =Z  ˜ ¨   Ñ ŸNameError?  ™ ? sa, b = `.er ´ r 4a =P(  Æ, a.detach()4  h ` £	\ ?, b4   ¦ c

elseóð# Origin: https://gist.github.com/4325783,PóGeert Jansen.  Public domaiBCÆ¨ FÖ=¦ g
‰@hostl•LOCALHOST†/el> 6? 7_V6B   › ¢raise Valu`("Only@ š D and 6Ë‚ addressžFies ÊV 	 "g¦supported"ë!ifyG != |
Ï   0 —  ÄO is j Ñ k 0a / Œcol zeroW Pd# We cÅÓconnected TCP— R. Notf§trick with@ ñsetblocking(False) that prev¤u–having top fthread>l8s
|?= p.bind((ƒ7, 0– Ñ" vlisten(J   ð# On IPv6, ignore flow_ÂC…scope_idù  5  H , 2 = ] 0getÄ ©name()[:2]1 c à  a ä   E .w	j  ) >   B í&((Ç 0Ð    except (BñlockingIOError, Interrupted O):
   Mpass £csock.setbV m(True)( s( p, _ = l Š.accept(*  ex  f [close2  ¨ Uraiser zfinallyE t A ƒreturn (� f ‘ ð__all__.append("³ ¦etpair")

 p.__doc_× '""& ò([family[, type[, proto]]]) -> (B ™ object,  °)
Create a q : of  £s from the "s É Qed by ‡platformª ñ() function.
The arguments are6 ³same as forZ 2() “  ‚default Û ñ
 is AF_UNIX
if defined on, ‚ Á; otherwise, E > ÄINET.
"""

_Bñ2_errnos = { EAGAIN, EWOULDBLOCK }

class SocketIO(io.RawIOBase):
ð"""Raw I/O impleë aþ ß Streamæ 1s.
3 RThis [ �supports³ ñmakefile() methoå ³`s.  ItÝBvide ™r{  [Aface opÍaw þ.|  Íñ# One might wonder why not let FileIO doš ðjob instead.  TherØQe twoV á# main reasonsI A !isS 0ada÷-P# - iv Puldn'	 Ark uƒ ¡Windows (wd `you ca$ @used` sd() andv `  writ15on ð Shandll Dwith£timeouts (² ¢would igno¯k *   ` consi4 …£T non-\)êp# XXX MJ Bdocs òdef __init__(self˜P, modW ž  !if @°in ("r", "w r b w Krwb"P¯a Valueo‘("invalidW q: %r" % Œt â.¥ $  ³  ._õ ! =F"> Tf "b"±  Ï ñ      0 +=% 4 N  =�  ÿreading = "r" in$  $ w$ ¾ö_occurred = False”j #to”bO åòead up to len(b) bytes int$ … ñ able buffer *b*+4Ö  1`number¤D  z  áfm Z et÷RL "nov N  SPavailz `, None9 t #edq |!If’ �Ãn-empty, a 0Ô  v(p indicaØ Athat� QconneÐv Ówas shutdown ' à end.
        S"""
  ÿself._checkClosed() ‡Readable 2if = õtimeout_occurred:A  d ðraise OSError("cannot read from > Öd out object"€ ªwhile TrueS :try h Seturn“ ösock.recv_into(bT  + aexceptz >outK × ! =‹ 	Ý  N á 	 ` eò K as ¿  5 þif e.args[0] in _blocking_errnos•  6 rä INoneq   h
  def write(Ê F, b)O @"""W ñ the given bytes or	 Sarray‹q *b* to+  R!et_  n Cand Ž  I ‘number ofD s~ õten.  This can be less thanG  len(b) if àall data could2  Æ H 'If‡ 5 isC Dnon-= — #no… F  83 is¹ 5ed.E   F˜" † ._BX.send�+Ð# XXX what ab$eEINTR?¸  ‹K—  	J Ê  C ¤â  À 
C ” ¶ ü€SocketIOZ�open forà?ingb:cqœ Î „ c Value2òI/O operation on 7  P7et.0Ø  ¯  ._¾ :ingÏ % ˆÏ k‚ Ï OseekÏ % < Ï fpuper().„ À )Ô afileno¶
pRù o $ ¡ descriptot  ¤underlyingÈ SÝ	? ^.l 3no(¢ 0@prˆ!tyZ  "2namd® Ì…ªáË   `  §   ;els-• "-1&„ =mod„ 5 d _! à

    def clos£e(self):
  õ"""Close the SocketIO object.  This doesn't c) ¥underlyingI s< õ#, except if all references to it have disappeared.A 5""" 0if ¨ .r d®  µ freturn+ ²o.RawIOBase0 ã ! I _Ÿ �._decref etios()'  ó = None


def getfqdn(name='';ð"""Get fully qualified domain , Q from
 !.
e ñAn empty argument is interpreted as meaning�£local hostA QFirst   d Ped by©   €byaddr()^ €checked,5 2àpossibly existk ð	aliases. In case no FQDN@ ¡available,ˆ  s Ë Û 0getp   n � ÓÏ   " =	Sstriptaif not 2 or a== '0. 'õB 	p ‡ 6try& Œ #, Ò @, ip;s = Q ù­VerrorK Apassa Felse X –.insert(0M  �fË $inˆ A  ! sif '.' %
    Qbreak}   
�    ¼ * =�yCó


_GLOBAL_DEFAULT_TIMEOUT =Ö"()Ùðcreate_connection(.ßess, timeout=K ,   ’  ssource_G =E/Ch  *" c* and ¾  € ¥#et¨ öpConveniDA funª ?.  O à(a 2-tuple ``(« �port)``)p `  Pass Œ  op!alì *ò* parameter will se’  0 onl É �instanceD  before attg #o ~@.  I i “is suppliÀD äglobal default¨ † ÌK:-S:`get. £ `I ris usedx *¹*û Ù Òit must be a W2of X TL  ô 2õ ato binÏ"a Z  ñ 1mak $he2ion7AÛ` of '' g � 0 tells[ OSCu²Ü <  s’ ú¢ $ =|  4errÞ · º  re† " ¥ Ginfoá ó, 0, SOCK_STREAMÏ < 1af,çðtype, proto, canon£’, sa = reI 1  }   	Â  %   ?et(d  k / %if!isP³ ÀEOUT:
        ósock.settimeout( %)
" ù   if source_address:  + H Zbind(* 
I & ªconnect(sa ù# Break explicitly a reference cyclex šerr = Non preturn l 
0 úexcept error as _Ã K _/  Ó ö ‘ck is noth 
5  %  f ‚.close()n  iff 6 :tryC Praise0 z kfinall' -Felsey u por("getÕRinfo :òs an empty list")


def has_dualstack_ipv6()U B"""Ru@True/ñthe platform supports creating a SOCK_STREAMª!etôwhich can handle both AF_INET and ó6 (IPv4 / IPv6) UQions.J 1""" !if¾ ½  ³ ! \  »  $or `attr(_Ïÿet, 'IPPROTO_IPV6')6 £V6_V6ONLY' f XR Fals«	Cwith(ê (6,!)± š n R      »  Hopt(³  , ¹ ‹ :, 0j�  ­d & ¶ Á�e_server(8ó ess, *, family=À  , backlog=ž€, reuse_=O ,w  Å  
[( D¡"""Conveni
“function . V+esUCtypeVm £bound to *· ð* (a 2-tuple (host, ¢ !))hþ  É a robject.ê*õ ô* should be either¥% o 6–**  \ ñqueue size passe£ q .~Cen(); Eá* dictates wher pto use S ÃSO_REUSEPORT0 op1I 
j!*:± ¹ ` B º±it, it willN	 )ò6j @ableg!acqÀª!or«? ®p When fc 2disS 3hisÇ 1 onF § ‘s that en) óit by default (e.g. Linux)·A>>> tÅ Î�('', 8000"s ä1...¨`while 7
    � , \# == .(}E  - #ß7new»Ö ¹ò“ †:hasª"ï"1 d æðValueError("SO_REUSEPOñ+RT not supported on this platform")
    if dualstack_ipv6:   C Jhas_# &()%  ) úraise ValueError("0 Š  J ÷if family != AF_INET’  # m …requires@ S ñ psock =  2et(n Ò, SOCK_STREAM6tryå ø(# Note about Windows. We don't set SO_REUSEADDR becauseA õ+1) It's unnecessary: bind() will succeed even in case of a�ó# previous closedÅ Ûðe same address and stY 'inB ÷TIME_WAIT state. P2) IfÌ ”, another` ¤is free to² Mr B | Ñ, effectively´ benting€àone from accep B  coðtions. Also, it may˜ € the pro? "aÄ g whereE ðit'll no longer respond¿ øany signals or graceful killsõ,See: msdn2.microsoft.com/en-us/library/ms740621(VS.85).aspxŠ pif os.n– Hñin ('nt', 'cygwin')¦\1  ß  ’hasattr(_¥8, '^'~	ª ?    : @.set €opt(SOL_ä ETì«2, 1ð 5    ex–  eÈÀ    À# Fail laterwÁU, forYqs which¶=notÞ #•pï| g   Epass< �if reuse_Í
—  â ê IPORTê 0if × ð„/ =u& ¬   ˆ àIPPROTO_IPV6,  «_V6ONLY, 0sl� 
ô"3 "* y ."{ ". 2 « hG ù× F0 asO
¶ñmsg = '%s (while attem ¨ V  `Y Ž %r)' % +�(err.str°,þ‰  ï 2" / ²errno, msg)Š6Non@àif backlog is  
º ö vlisten(h (elï v ( Q / areturn`ä0o C ëj Î  


def get"ðinfo(host, port, fam°ily=0, type Pproto	 ð<flags=0):
    """Resolve host and port into list of address info entries.

A ÂTranslate thD /@ sargumenI  a sequenceO ñ5-tuples that contain� 1allH ¤necessary H ñs for creating a socke> ’nected toP �service.Q Õ ðis a domain name,?  trH àrepresentation� ¥an IPv4/v6÷ !orL SNone. R sC p Z ð  such as 'http'i rnumeric8 ynumber Q pBy passŽ  b  >  KAvalu.Ã ˜‘, you can4 � NULL toŸ  5 punderlyL cC API.¥’he familyç ` U Pbe op
ôally specified in orderl anarrow«$ães returned. PØ @zeroØ "a Ö  Ëteach of» 'se‹ `select ±e full rangrresultsÝ1"""? À# We overridˆpis funcÈ 0 siuqwe want$	±žN  m_Btypeµ s= @enum±Dstan†  A= []B  ß  re/" _H @.get(  A(Ñ,,–!, ¥!, £¡ d1af,ï � % RcanonÎ�sa = res} 1 0ddr“ Ð.append((_int¼ °_converter(U AØF%),@  D 	 @   Ù ‘ SŠOKindC 	Ü 	· !))s 1o ¶ q
"""Gen6 f 0et d�er classe{ÁThis module � ž`captur ´prious aÅ tsÚPdefin Ž¡rver:

For[ƒet-basedj Qs:

-‘  ÷1 ð- AF_INET{,6}: IP (Internet PVCcol)W ¢s (defaultì @ ¤UNIX: Unix›ì Æà- others, e.g.t  DECNET are…ò ceivable (see <? S.h>
-| ý· ñSOCK_STREAM (reli? cstreamf 8TCP© 2 0DGR1 „datagram‘ BUDP)BrÝsC€ (includrœ c)\0cli  crverific†Pbeforúr P lookE !atqm : N( ä1ctu¸aa hook10anyV N C qAneedÎ Y G  _  … Panyth; Celse$Àlogging)
- hóo handle multiple ¤ s}€synchron–5(on% 3 is@ d„ ha time„1for (3[ 6 ðby a new process)
     ó- threading (each request is handled by a new, ñ()

The classes in this module favor the server type thaS Psimpl_ óto
write: a synchronous TCP/IP< @.  T[ bis badr ð design, but
saves someg ñing.  (There's also‰ Cissuƒ ca deepJ òhierarchy
slows down method lookups.í ©re are fivø ñan inheritance diagram, four of whiRˆpresent
é s' /  '@s:

–  '+- + r| BaseS[| .  I &  '  v7 + )  L … € 4TCP  ä->| UnixStream d (‰ ¶ /(--¸ /UD¸ 1Dat¸º & h C
Notd T @deriªUfrom ‰ `, not  
4 	@-šàe only differecñbetween an IP and a|!
s}8 ½ ‚ó address family,�@is s‡ y repeatedÄ”both
unixD àp.

Fork! o /qversionÂ: Â ÏÚ¡ can be crc 0
usC  – O @MixIÉ 4d Tƒ bmix-in¤Áes.  For
inse3, a‡ O $UD+/  ù q p as folÙVÕ q ‹(„ ,¥r): passôM› p must c|�first, si£äit overrides aP¦defined
in[ `! SettÈ  @varipmember  0ablD  È€changes
* qbehavioc  punderlyI | me0 �ism.

To îPementm²ervice, youÃ �# aC� eR
Hrm"reÈ 4 it#()ã a.  You÷�then run
Å  Ô , ²  § 0iceZ`combin¼ 0one?  "er‘ pes
with° rž›"  å /he ã b�Est for dôB or ;
”  quÀ`hiddenª Â$† A
subY2es Å;4or 
 ³.

Of cours’òstill have to useø Qhead!Š 
õit makes no sens3 aä ³ Õ Qer if	Ðservice
contañ2ins state in memory that can be modified by requests (since the
m  pcationsD ðthe child process would never reach9 ‚ initial} T
kept> eparent? áand passed to @ ` ñ).  In this case,
you· ðuse a threading server, but $ @will_  bably haveZ �use
locks –avoid twoõ !om*ònearly simultaneou7 Ðpply
conflict| achange  ‹ õ @.

OÀ ñe other hand, if¤ �are builÁ Åe.g. an HTTPÎ ðwhere all
data iÈñored externally (: if ðfile system), a synchronous
claª Pessen›lòAnder° º Ðice "deaf" whN 4one!` is
beó  È `led --& `ch mayKðfor a very long tiLpf a cliò Ã Plow
tv adÜ { à Tt hasn aed.  Hé°or forking
¯  erðappropriate.

In sÄ 2Ts, itž '  ½`part o¥ þ
7"lyU�to finishV ô Ain a� #edQdepenÑ0on
S  á B.  TËx’implement{ usS 
´ã   !do ¡n explicity Qg ™!r í
 â() method.

An‰¨o•l] `multipBô[ ú an
environ¸ FÁsupports neiå–3s n¬R (or Ë0the¹`re
tooÊ Áensive or in” Æ Ü  @ice)æ�to maintaw%n
PtableÁ Éi«$edL s C2to 8óselector to
decideÇì  Äwork on nextÂ ß 2 ��new
incom?=  µç1is ’ 1culJ im(!anºq streamëRices
!ü, Ÿ5potª�be connec1jeD(if
ycor subße;@nnot ð used).

Future ä Â:
- Standard7!esàSun RPC (which:#s â0UDP³HTCP)> emix-inE 5to ãP variB@authÒ O!
 ™`encryp`ð schemes

XXX OpenpPblems© W·ðto do with out-of-bÞ b�?

BaseS 1 ó split generic "£`" funcp PalityG f into = Æ ð.
  Copyright (C) 2000  Luke Kenneth Casson Le% ðon <lkcl@samba.org>

  exaî:pd entrig‘rom a SQL `base (¤ °ires overriMp
  get_ Pest() Pretur€ÿ S 0y fQ ðthe database).
 õˆ entry is processed by a RequestHandlerClass.

"""

# Author of the BaseServer patch: Luke Kenneth Casson Leighton

__version__ = "0.4"


import socket „electors o
 %sy òthreading
from io iM âBufferedIOBase Dtime  Ðmonotonic as  q

__all™  ["5 SÙ v", "TCP %UD &
  $"T‹ !   D 	7  j 
r r lStream 	9 nDatagr% t ñMixIn"]
if hasattr(os, "fork"):O ö ÷.extend(["ForkingÆ  Ã   c )d É¯, "AF_UNIXk BUnixê _" Ú  ¨ j
 Z 3 
F 1 d  ])Ýapoll/syQ haveä�advantageõñ+not requiring any extra file descriptor,
# contrarily to e\ Ðkqueue (also,^ yN ùe a single syscall).S• ³ors, 'PollS 'Æ, 2 = Ç Hors.0 S
elseù3 H  `or


cï!:
d!""*  Qfor s5 e8 ®€Methods ! @the à #erD ²- __init__(= Ÿ_address,Š)x -h �_forever(]Õ_interval=0.5' „hutdown( hÖ_Äðest()  # if you do ß;use^ <  åÀno() -> int <  Ó kí õthat may be overriddenõ ì Ebind�  …activate 7get² !->5´est, client2ä  Ö5outF everifyI D í Œ Fclos‰ *D ~0 d ]   � @ice_5onsÇ Þ zerror()t Žtderivedƒqlfinishn ÿ ECð¯variables Í 0o 1 orA •instances€ � #- äs_family 9S_type µallow_reuseå I`  ¤ i 
6Ê 3 ð - socket

    "ò""

    timeout = None ñ)def __init__(self, server_address, RequestHandlerClass):Q  U õ&"""Constructor.  May be extended, do not override.""">  r .q + =‚ 
- Ž  / =¤ 
7 ü__is_shut_down = threading.Event()0  -  , "_r w = Fals8¸ qctivate?¦alled by c$S to a4 C theï .‘ TC27den >Bpass6  Ç� �_forever� ú, poll_interval=0.5  ÔT one æ Aat a*t until ƒ •Polls for  s yn ú seconds. Ignoresa�Ð. If you needñdo periodic tasksAuthem inC sanotherÆ. \
øg.clearì6tryË {p# XXX: Ó´ider using o ðfile descriptor orÙ@nect&  toÏŒ O `socketÚ ñwake this up instead of6 ˆ X H »reduces ourM àresponsivenessU a„Âànd wastes cpu Ñ1ll 0O  „s= ± qwith _S@SeleÕs() as s 
0 4  u.regist} Òs.EVENT_READ)° 7   whV #²szr  ;  ¿y-¦ .o (óÖ 3  Å# bpo-35017:@B() c¯0dur‡P ú), exit immediately3V  if$1f._h;Á  8 Ybreak–    1if â < .h—+Ÿ_noblock(h  V 4  )@ice_…7onskfinall4 Õ  X  , l0.se^å §0hut¢
�PStopsDÌW loop€Bâ s  A   ð has finished. Th@mustŒØiˆ  ¯  ec  () is runnú%inò',êuit willA @deadŠ ~ Ìu = TrueE 1:wai28erv° 4 
9C¹%by=Àe_forever() ƒloop.

  ó4May be overridden by a subclass / Mixin to implement any code that
J ` needs) òbe run during the u ) 5"""€ BpassŽ ñ# The distinction between handling, gett	 pprocess` ¡and finish Z ò# request is fairly arbitrary.  Remember:.  " -j #e_=  ()?  À ñtop-level call.  It
 ²s selector.	 3(),M  ­ J †, verify  ¹ È  > ->  ˆ `differõfor stream or datagram socketsB \  F  Î Bplac¼ó may fork a new 3  W ƒcreate aO    `threadärÝ.) -�Ó Ø instantiates2 o!r kT; thi¾ �  constru\S will- 	@ 0all¯bitselfF3def* �   )ê ‚@"""HQTe one(÷, possibly blocking%qRespectî¡f.timeout.ñ R  ó
# Support people who usedŸ .sÃA  ()Igescape@ î„p beforehz æ was availableˆ ™ " =. .4q g 4if . vis None! Ó  K  ? Belife   [?notJ 
Cmin(/ ,= )X 
— Q 0dea1e =Ã A() +	 2out À ä# Wait until aæ€ arrivesà 	Ž ¡ expires -^ ­ ŠL  nem0ary±€accommod eaZ°wakeups due! VEINTR–Ówith _ServerS.A() aN<
{IÀor.register(Á2. Ös.EVENT_READ)ò  ª ›while TruÎ   ¹yG ±„ -   1if 4 
ž     breturnÇ_³1_noD(T ?els›   P ú (  · 5 = -v  4 d ?< 0Ø , à ß s (u jú  ²s ?outrsI assum¦	 r() has £ !ed†ºò¼ Âàable before thó(is function was called, so there should be no risk of
  õblocking in get_request().# 5""" Etry:  C 0 ù	, client_address = self.S 9 ìexcept OSErrorQ Eturn+ "ifI everifyŸ w )L ®  ² ˜ processP ˆ  : · E¾ :ionm  " \ €handle_eÜ (© 	Y ; Œshutdown˜ )/ ˆ ~ C  r UraiseY JelseS Í O : Cdef ð €timeout(7 ˆA"""C’0 if�Cnew ò  arrives withinéG !.
`  ¨ ðOverridden by For°_MixIn¤Bpass>  ž 9 ž ,� ¶
· Vs E0 `.  MayJo” ©  Re»P Trueí w{n!edè U thisQ ¨  æ frI !  É E ³Ê  �t finishZ· `ã and Threadings˜²  � .b û5 aÏserver_close_±to clean-up´6 è »	Ì 
@Õ  ´ @FqD oneï À instantiatvRoH3xrClass.Œ  o .%  ],E)6_ R Á 
ñ 'ded to 6 xä an individualÑ ¬ - e¦ � 
  � Ö? upƒ 
»™‰	k ùŽ o ; ¿ gracefullyàThe default isI�print a tC BbackRwontinue�õ5 ñ	('-'*40, file=sys.stderrÀ     print('ðException occurred during process ÷of request from',
  õclient_address, file=sys.stderr)- õimport traceback  ¶.print_exc(7  ('-'*40^  F ñdef __enter__(self):  ¨ preturn  
 . 3xit- w, *args4  - ñ.server_close()


class TCPS R(Base "):[ 0"""  * ò
for various socket-based Z & 2es.< ðDefaults to synchron: ðIP stream (i.e.,� )4 €Methods j £the caller� c- __inæ Ë ¥RÐ€HandlerCØ €, bind_a Âctivate=TrueŠ-´ ð _forever(poll_iquval=0.5' shutdownÂ1- hd _Bû()  # if you don't use] L  KÀno() -> int ;  ê ‚selector8õthat may be overriddent_å œ  að  7get± $-> *, îOã utimeoutF everifyI D í q/ sh0 O ¶ ”PerrorÚ 'G atderived¡DlfinishV Ò V oables  K by o 1 orA •instances€ b #- Îs_family hS_type xñ_queue_size (only5Z6 s=´allow_reuseÙlI“ × œ L| h  r V 2"""	 
Ò # =6‚.AF_INET% : â " ²SOCK_STREAM& ö  2= 5 ß  ‚ = False! "<2lf,¢r/, Ú  BŒ """ConstruÀB.  M°ôextended, do notÁ e. Ÿ   [p.Úž Ü G Ý�AV<.‡
ï A  U ›o .ifZ L :try   Q iµ   # Ä# eá	^ À     self.seërver_close()
  araise
 adef se. ±bind(self):  5 ð"""Called by constructor to 0 Â the socket.Q  6 ÷May be overridden 5"""^ i| ölf.allow_reuse_addressƒ  Q  – .g 0set
 @opt( äet.SOL_SOCKET,Œ ö SO_REUSEADDR, 1J  Á ñ .| .  8 = D gŽ 0namiÚ S�activatef W4 [| ?[¤ alisten„ ò.request_queue_size)¸¶ 7 B ³ ¿to clean-up¤ 7t Œ afilenoµ 
† cReturné ' w number& Interface ð "irÀ@sele½) ŽrY 4elfl ^ 7no(— @get_T ?estœ  1Get" Ä and client ?Afrom$ ½~ åÛ¨  haccept¨ ‰shutdown­ ,:estRâ4to 6 ¹ ôose an individual@ .8:try®µ#explicitlyR #. ².êñ merely releases;   #W‹ Àwaits for GC{bperforH0actš W .F †.Ö 0fHUT_WRç ex?Š OSErrorÍ ð pass #some platw as may Eå ENOTCONN here~  <é €� K²    3  x? up–p †  0
clË AUDPSU3(TC
 "):…c"""UDP / é× ¤ d = FalJÐP_type$ —b_DGRAMc `max_pa/|r = 8192  ‚_Sdata,N& f ¬@recv]—.i ì>(O  ví)] “ Ë�# No need˜Scall o)°6UDP• LY £	c Í– anything_ Àself.close_r‚equest(r ó)

    def close_ s(self,  !):&  * Â# No need to3 ¥ anything.% ópass

if hasattr(os, "fork"K öclass ForkingMixInc ¢"""Mix-in & äto handle each” ò in a new process."""Î  ¨ Õtimeout = 300™ õactive_children = None 8max 49 ñ# If true, server_/ñ() waits until all \ ” ¶es complete‚block_onC v = Trueº Œeollect� �1*, = “ing=FalseN ñ   ð"""Internal routine§ £ B forœ  ø ñthat have exited< B  0if .1!is2­1 freturnÆ   5õwe're above the max number of’ ,H� and reap* mU�R ðwe go back below threshold. Notd ‘at we useT tpid(-1). 6o bðS 1abl'cu”  bÕsize(<defunct û>) syscalls instead§ 2of ; `ren>):Õ Ñ downside is †¢this mightú 1 Q PwhichØ âdidn't spawn,  `is why °only resortú] Qwhen ‡T •õ¥ ‘while lenB) >=%B >try  _ Àpid, _ = os.£ªI, 0)¨  +   �Î.discard(pid6 €except CîP%_Error� #@ do]5anyñ,@( d. •  � oclear(˜ /OSŽ \breakO2Now% i•
¼ ï1pidÄ<elf½k.copy(? Í ®Åflags = 0 if†P elseÀWNOHANG¹è S  ‡ #f  / H ˜­` yet, Ý ‘will be 09¯ignored by‡ $# -& É9 f2rsomeone; í_ed it� ;[À            “  pass

  õ
def handle_timeout(self):"  ) ð"""Wait for zombies after - .: ö seconds of inactivity.m  K üMay be extended, do not override.y 	 o öcollect_children()c  Ð €service_‚ ?onsÑ CF C theÔ  Q ñ processes regularly in( ËForkingMixInØ u ¤ is called< ÐBaseServer's . ïe_forever loopø 0¹ r_requesÉ#,  þ, client_addressâ Ý £ a new subM 4 toN I."""™ù pid = os.fork() jif pidR „# Parenta 	5  ! "if` É%veð \NNoneR  5 #2 [= set— - Š.add(pidÅ . Uclosed, ireturnÓ ?els´  0# CÈ
 v Ñ# This must n0\ p, henceu‰_exit()!o  < ­status = 1 ?tryAlfinishç EV 	u 0 �except E ?ion‚ –cerror(g€ ofinallÚ ó ¶ Ìelf.shutdownù à 3 m 
 ! 2os.›ˆ¨ 1er_Q¥�super().-( 
Š í@bloc¨=  2_oni ó)


class _Threads(list×�Joinable   ÐÐall non-daemo; ­5  |aappendÎ 1, ta [  � Greap‹#if( .\ 
ëHg a ÿ  qpop_all€ x 0[:]¡sult = [],\5[:]] l 0 re$ T LjoinQ  	}  ß× { w  ó & .E   ©  8 /   r[:] = (6 p !in°  /§is_alive()Ô#NoÖG›À   Degeneratñe version of _Threads.
    """ ñdef append(self, t& !):  * Qpass
  , Ajoin* " r
class f ‚ingMixInG ¢"""Mix-in $ óto handle each request in a new„ .¤ y Ä# Decides ho ó	s will act upon terminatî 3the; Ámain process rdaemon_é „s = Fals. òIf true, server_close() waits until all non-I #ic° s„ ed‚block_onE d = Truh '�s object˜ œ# used by| !to A for| º `compleò p Ó 3_Nob &()½_q0 Ï,†÷, client_addressè """Same as«QBaseS%@ but "a š .r  =pIn addi¤ p, excep þ÷ing is done here7  ú ?   2tryF     ¨t.finishÊ (Ò ½ Y 5 | $ Eƒ S  “o_errorQ ofinall› Œshutdown� ‰‚Itart(4 toàD theÉ? û   1if 7
“
AvarsŠ ã).setdefault('&5s',C5())Y3t =÷Bing.u`(targe u w,C  ¡  0argœ‰‚ .‰" =ä  · f ‹  .ôtG s[0	 @ `super(+(n 6ó
)


if hasattr(os, "fork"V ¢ForkingUDP]( O%,  1): š 9	: /TC:  : ±[ (ÆÄu  q ' [ :  u òsocket, 'AF_UNIX')::_ £UnixStream
M h¦p_familyU .S P eDatagrR ó ƒ MR « FBÌ  r ï 	M ¨  :nix# Q Àclass BaseReñquestHandler:

    """Base class for re' " h(  2es.0 BThis ñ is instantiated= EeachB Sto beH qd.  Thet óconstructor sets theK Äce variablesH ñ, client_addressD Àand server,  ’then callN ½ �() metho} Ño implement aD �specificI ðice, all you need to doæ  	 serive aû QwhichD “defines aè s 0 ‘ can findø oƒas self. , b ý  ý  (  Ì Per (iQse itF  Ò €s accessÚ Bper-@Õ information)_  „.  Since1geparat­ /reÿÂ Œ   8ÿ other arbitrary x2"""QÐdef __init__(2,(,!):v  î 0 b$ =9 
 
Y/ =~L '# =k 
J usetup() 6try‹ C «' ofinall+ †finish()
c  × æ Fpass# ` $ 
Y $  
#¹â following two`es makc� possible[0use½Q sameRice
#3 %ñstream or datagram' €ers.
# EC� upN  Êm"ð :
# - rfile: a  Ñ object from §‚ receive_ ×AreadA w9 A #to?  �Preply4 °written
# Wq  `k¡ returns, W  5 òflushed properly


à S	Rq˜(�
 )¬Do* · ý ¸.o  Â`…sockets.;ó# Default buffer sizeõ L ³ .Šc# We d0 c Ü9 ped becaéÁ wiŸ`t coul A  reÈQ slowøQlargeô¡ (a getc()´á per byte); weUC Õ -unx Ð(a) often aftC ›0e()A swant toD  è'%weÙ“ Xâ line; (b) bigE !t G  " s are typik�y optimizày stdio even w P  | ±#; 2n't^@rbuf~Q = -1a w 0½ # A timeouÍ 0 ap„!to¶ ÇäÒ, if not Nonea 9 Ð= None

    #ðX Disable nagle algorithm for this socket, if True.
    # Use only when wbufsize != 0, to avoid small paC s; dq _q _q �= False
` ñdef setup(self):  y   á.connection =  urequest' i? ölf.timeout is not NoneL P  C.set4 z A )Z Ç ^  O@opt( õ et.IPPROTO_TCP,d  ™  ; ÁTCP_NODELAY,›¥ Dfile!3P.make c('rb',@bÀC BÚO== 0Þ  wK Q = _S(bWriter<t W ?els‚F ¹ 8 ¬ w¬ ’ )+afinishv ,!ifõT a z.closedÆ :try  z4 fflush(Â   cexceptn.errorD “# A final(  ( ý may have occurred here, such as³# the localB ÂECONNABORTEDT ”  6pasE È ü È  r¾›()

classËãBufferedIOBase_á"""Simple writA
(   Qmenta¨ Oa	¸2Doe•ñhold data in a bp !, AÀing any needVcO’B."""K  .�__init__,j ¬  í _9 6ock9 Á 9 3 areturnY
- e* 7, b- ` ¦.sendall(b3ðwith memoryview(b) as  
6s   v.nbytesz  ©!no{ x 2  ( Í’DatagramR"€Handler(Ì
 "):m “"""Define Q B and H ² Y k:ets�½pfrom ioPort Bâ %IOòÆ ,— ± et³Lelf.å0 Â$ =M !.E �* » * @6 ƒ Öt.I ³.getvalue()­ ðclient_address)
#
# Secret Labs' Regular Exp"  ¿aEngine+ ðconvert templateïPinterBaformat( øCopyright (c) 1997-2001 byn ¡ AB.  All , ð
s reserved.
#
# See the sð#re.py file for information on usage and redistribu ó.
#

"""Internal support moduK ¡sre"""

im D_sre ð sre_parse
from  £constants 0  *

assert : ¡.MAGIC == 	 d, "SREn ómismatch"

_LITERAL_CODES = { T, NOT Æ}
_REPEATING*  S, MIN S, MAX ¦}
_SUCCESS2  ö, FAILURE}
_ASSERT#  ",  ¦_NOT}
_UNI# • 4 ò4| {ANY, IN}

# Sets of lowercase characters which have the same upp) ð.
_equivalences = (
    # Lù ÿ SMALL LETTER I, ‘DOTLESS I9 ñ(0x69, 0x131), # iÄ± R SR aLONG S6 Q(0x73O !7fO 1sÅ¿ ú# MICRO SIGN, GREEK­ !MU( P(0xb5A 13bcA AÂµÎ¼ ³# COMBINING@ ßYPOGEGRAMMENIU DIOTA FPROS/ S S(0x34n 1fbev ±\u0345Î¹á¾¾* #s 
`ôOTA WITH DIALYTIKA AND TONOSw 2 AOXIAh  ’  90 A1fd3‹ QÎ�á¿“ … UPSILONˆ 5 	‹ b‹ e‹ O°á¿£‹ &BEn  q SYMBOL1  Ù  b2Ù 23d0Ø 1²Ï� × E× FsLUNATE  Y Ä"f5Y ?µÏµY 'TH¦  N 8§ OÎ¸Ï‘N EKAPPb N aN fõ ?ºÏ°N PÆ,PIH c‹13d6ä OÏ€Ï–H 4RHO9=RHOJ 1’ à 4Ï�Ïñ– PFINALµMæ 	ÑFSIGMºcác.OÏ‚Ïƒ¤ &PHí Hî 6¤ dÒCÏ†Ï•J ç Sü�OT ABOVE¤* T a(0x1e6A1e9b_aá¹¡áº› ‚IGATURE ô+ Tm  !ST= a(0xfb0ž2fb0»€ï¬…ï¬†
)	PMaps æ
hode to?odeÀignorecase_fÿixes = {i: tuple(j for j in t if i != j)
   + t+ Ñ_equivalencesB i ñt}

def _combine_flags( R, add S, del i öTYPE_FLAGS=sre_parse. !):5 &ifR 6 &     À y V &= ~ < rreturn š & |I U) & ~ž Î ñpile(code, pattern, ^ � @# in pal: com/ ƒ a (sub)0 x pemit = I q.append ¡_len = len ùLITERAL_CODES = _ # –REPEATING%  ' vSUCCESS% 	 # fASSERT"  ! áiscased = None xtolower fZ$ "if!R & SRÏþ_IGNORECASE and not$ fLOCALEÄH 0UNI%  í¨ €_sre.unig_ ¸  '   À 	+  	+ Ø p_ignore_ & OelseŠ 
_asciiˆ ) †  q`op, av_Jm Pif op 	!   ì /ifhŒ
0  4  §>(op *av /el¤È X   C 2OP_  J[op]U + n  :Ù3(av„ 3  f Â Ã H Slo = Ž f ò    [ ûQ:  # Á'  + � /OPï 
( /lo  e!loÌ1in ƒ¹C 3OP_%s )c  INc _ ±  ( @skipÀ1len=1); 	0/ ÏTs NOTôä  ] J oNEGATEO  =kr(lo,) +5O[lo]U NV { k  — oFAILUR˜  —[]0 -  ?W ßJs IN²  chUt, ha�£_optimize_ ð(av, iscased, tolower§, fixes)
  þif flags & SRE_FLAG_IGNORECASE and  yLOCALE:H  S ³emit(IN_LOCD 
l ÿelif not hascasedC 8 À ¯:  # ascii� Á E /sep O_UNI³ ñskip = _len(code); æ 0] ó_compile_charset( ,=!, < 	°   [_ ]` 0 -  + 4šop is ANYÁ ¼jDOTALL( œzANY_ALL¼ /el6ANY, Š ún REPEATING_CODESn – TEMPLAT4 õ2raise error("internal: unsupported template operator %r" % (op,))* æ úif _simple(av[2])› # OBMAX_É %  ) è! F_ONE	    9  	3MIN` ?  ç	û[P _av[0]†   l Oav[1  —»!, “I ~SUCCESS ¯® QO^ }î  ò ?if T yKUNTIˆ I S: –Ês SUBPATTERNÑ±group, add_ëT, del  Þ,avE3 
F Ÿ  lNMARKÂ.(8 Z-1)*2" $# ‹S_info�!p, Bbine� (  « êP K 01if ¸ ð *&+1ò ”#n P(2/op7 oASSERT6  ˜?À
           û if av[0] >= 0:
  ùemit(0) # look ahead% Nelse7 €lo, hi =\ Ù1].getwidth()<  l ¾if lo != hiG  ! Ðraise error("… ñ-behind requires fixed-a ž pattern"i Ê %loË F 	� â_compile(code,¼ z, flagsP L zSUCCESS  : Ñ[skip] = _lenL @) -  n ú elif op is CALLú ^ *opY  ? 	S !; ( 0' Ã À N/AT¾ "ifGú & SRE_FLAG_MULTILINE@  ôvav = AT#  B0(av”
ð Y _LOCALV   S œõ® oUNICODV ! W  J&av¿ h jBRANCHÞ•tail = []J /  �append =  . 	% ’for av inØ
m  F b + $# hQ_infoä œm 1 / * ÷ FJUMP) A    Ú Ù (Z) 0 Œ + v pFAILURE" K�of branchG ‰  I  Hw     M ÿŠCATEGORYL ” ð2CH_ð:[av6� è3CH_èO àŠGROUPREFá nif notŸIGNORECASn Ê ÷ 
s ì’  _q 
qT Ÿ åixes:  # asciiÀ K   ’ O K #
8 ?UNI‡ V&-1ž š 8w jEXISTSì a @ðemit(av[0]-1)
    õskipyes = _len(code); emit(0)
' ±   _compile$ ê, av[1], flags)  if 92]:?  K W JJUMP1    ˆ /no‡  -  ¦ [2 Iyes]4 3 -  M + 1� Ä 2Ä 	f /noe )no` Nelseó « G õ2raise error("internal: unsupported operand type %r" % (op,))

def»“_charset( ¿ , ¦ )½ ## è % ± subprogramð  Å! =3 q.append `for op4 in< S  M 6 6(opùö if op is NEGATE*  . ApassV   %el, zLITERAL- [ &av[ 1 aRANGE ›  l  «_UNI_IGNORv I 6[0]L �  ð d zCHARSET•  R�.extend(œ ?BIG; %ŠCATEGORYt "if�û & SRE_FLAG_LOCALè Ô #CH  <[avô  uÝN oUNICODO ! P rW' þ2set:torþê tFAILUREŽoptimizeöiscased=None, fixup !es *�Q ù‘acter setÃ�out = [] Ftail  bòmap = bytearray(256"ha‹ � = False@ f›while TruŠ:try+ V "    U @     l·*	ê   í ![lNœ, q 0es Ñ loN_fixes�  :  k,  e 0  4 ’ kß‘ 
Enot � ˜ ' ñ h 6 =—Å |  ó ¦ /av§ Šß� àr = range(av[0ß], av[1]+1)
   Ÿif fixup:  1 " /es"  & Ñfor i in map(R O, r)4  8 ïcharmap[i] = 1…  +   "iff ?fix’  /    š kš 4 ?[i]•  7   � k� OelseU  „ Hÿ if not hascasedŒ & p = any(°i8  ²&â Þ rz Oìÿelif op is NEGATEN àout.append((opß)µ ± Otail@ ÿexcept IndexErroÖ  sif len(Ñ �) == 256°  # ' ÷acter set contains non-UCS1  _codes D ÿmap += b'\0' * 0xff00. }ontinue o# Char� <BMPŒ .B 1]/Tr€   Vñ# There are only two ranges of Ã	� €ð# 10400-1044F (Deseret) and 118A0-118DF (Wac } Citi),Ö ˜  5  ÍDboth’ þRANGE_UNI_IGNORE works B À5  ( Qop = $ Y ” ªabreak
9 §# compressÃ1map ‘runs = [] Bq = 7`while ©¬  › m¦.find(1, qa†if p < 01  Ñ ‰  
    v j) >= 2-   j = Non 
E  ¦ 	ˆ I0, pˆ qˆ  [ Ý)p,¥&
n 9 q. 0if   ” b ´ Í à# use literal/_Ñ  G@p, qy B 6 "Pq - p91   ãpLITERALý þ  % ãðout.append((RANGóE, (p, q - 1)))
  µout += tail õ0# if the case was changed or new representation is more compactH `if hasE : °len(out) <  •charset):0  “ µreturn out,= ! ð # else original—  racter set‡ µgood enough5 R o V " Á# use bitmap %ifž ¶map) == 256¥ ²data = _mk_6 (Z  + ?  Ä ðout.append((CHARSET, 8 xª 
ü V F# Tova a bigþ ¡set, first  Æ g of al@s inÏJ +óconstructed. Then, this Mðsliced into chunks[ 3256I  ø ~Äs, duplicate* ò	are eliminated, and each  3 isE ñgiven a number. I« Kpiled exk1sio   _ 6A Œðed by a 32-bit word sequence, ï `istingÅ 2one! 3for‰  ð…  ! ’different° Es, aM    Ñ256 bytes (64K sT# .Ó  ~2dexž XtheirÀ€unk posiH%a� »  P 1256Ô X Bs (8r Q3).
2 4Com, ¿�normally :sa typic9;plarge rÞ ÞJ ñUnicode will be either•ðletely excluded (e.g.0Óonly cyrillicH €letters  toJ �matched),K 0P ,inP š H 5sub£ q Kanji I )ºsÁ ° 
E =0oneSsˆ  .Azero OM«  00can» `also d:Àefficiently:Yþ±significant3 ofz  [S5 £‚an indexd ' ¥ :3theG ]less f "isúJ ’ H  (just like G ’B4ingA š Qmap =¾ s×� # shouldrhashabl“  Àas = {}[ @mapp0A ’array(256‘block = 0+  i ( % Pfor iªî (0, 65536,‚(Ý = map[i: i +% ]^  „"ifº N ¨ Â  ¬ Q[i //9 ! =ß!s[] H  q;  Ø  í ‹  p ÿ I+= 1 +Ê 1unk  	_   
 ‘[0:0] = [R Q] + _ˆ@_to_´#s(Û ð )
    out.appenñd((BIGCHARSET, data))
    out += tail `return ð, hascased

_CODEBITS = _sre. ÀSIZE * 8
MAX • = (1 << . p) - 1
_9 P_TRAN? öb'0' + b'1' * 255
def _mk_bitmap(bits,D =N Á, _int=int):¬ @s = . ·.translate(l q)[::-1]* Ö [A f(s[i -a r: i], 2   õfor i in range(len(s), 0, -� 2)]
¼ óbytes_to_codes(bŸ ñ# Convert block indices to word arrayŸ òa = memoryview(b).cast('I'– 0assG Ëa.itemsize =ˆG '  ­ Za) * 0   bP £a.tolist()É …simple(pÁ 0che¹ ò	f this subpattern is a "0 ¡" operator† 0if k rp) != 1ª Su QFalse) Âop, av = p[0§Pif op\ ­SUBPATTERN@ Pav[0]$ ¢None and _‡ y(av[-1]â  N qn _UNIT·Sé 0gen² Ðe_overlap_tabù Srefixþ 1"""§ G, C an /  /  %ñ the following pA .8 A/ 4: oRqe same Ð0as J @ a whichE  informs ab©# äotential self-’  Œ @eachf exº- � D - _ð 0[i]C#0,² ¥[i:] can'tã ‹ b[0:...žA  ök with 0 < k <= iQ ”-k+1:i+1]R s, Ö  w 20:k\ m = ä*HÃ Ö å –(1," · k@idx Ô1bleì  Twhile  i]¤ê Bidx]* (   1if J := 0   ª H# 0Õ    Ybreak I 8[ '- • Jelseb ^  . 1+ 1N D Ë2t_i¨c(flagsqif not  ö & SRE_FLAG_IGNORECASEr W  Rg Nelif: 0UNIç7 0uniþ‹ G × e . Uascii, FÂget_literal_“(n,Œ Ù a# look}/ Ït : B = [Y `appendkN. 1 …_skip = S ð ™  b9  �Ã3in « .[" rÑvLITERAL  ( `ºÈd #avê  $  RÚ 2(av" / ¾àop is SUBPATTEWRN:
  ôgroup, add_flags, del ip = av0 % Â1 = _combine, ( H )A 1if , ÿ1 & SRE_FLAG_IGNORECASE and!  jLOCALE»  Æ Ybreak` ’prefix1, 	 ð _skip1, got_all¹ Âget_literal_% 3(p,t ¬ ! F Ž is None† 1if H " ?not&  ° O b= len( 
x  * IelifÄ ] () +J 0 s.extendŽ 1� 0if Ö Cÿ 
…;els#  
 creturn› 	±a, True¨ % 	ÀFalse

def _ÖucharsetÖcatternÜ)¹ Qwhile_   lá p0 V.data  ! …  þ•   o7Hv = 7 5[0]! Tif op¶ŒSUBPATTE€ T FF,h 
”L Ö� ‹Š  ‰þ piscased—  — $[vLITERALo3if 0  3(avÀ '  u      "[(œ)ŒJŠfBRANCHm 1B = [,  F  PappenÄ  . á  ' æfor p in av[1]T   Q
   £ 	J  ²  NC  + �(   () D Ã Â (‹     
œ    °  U dIb# 
³â
 Q3in ; 
#  ’ " & $  ( Ì �  Õ ORANG  & "ifŸ > 0xffffm #K dny(mapÜâ, range(av[0],i O+1))ä  A   Ò À  return chað0rset
    return None

def _compile_info(code, pattern, flags):
: @# in Cal: 4 @ an 7 ñ block.  in the current version,z ô# this contains min/maxm ° width, andW óoptional literalC ñ
prefix or a character map  „lo, hi =T A.getW !()   if ’> MAXCODEØ  Ü 5  * vlo == 0%  ò.extend([INFO, 4, 0, w ]d  O eI �# look f² Ì  Æ    W = [] ‘_skip = 0  é 1set% ± # not used !if (ªñ & SRE_FLAG_IGNORECASES  cLOCALEÜ µ ª ¨   " ¬ ,¿ ¤ ó, got_all = _get_; _, (J³  K !# ¹ K  C%ì @ 0 . t/ “ K 2 �  �  ##4  ~ b #:
   ôprint("*** PREFIX"í  õ )4 !if…?setG ”CHARSET",) %A# adç>ë 0emiçjRappenå  (r> 1len°1); ! 0 #3¾W EmaskN-ifG   < f _ý ;  2 þ 1 is?Wþ
’O  |’V qLITERALW (el< e   2 !=  9 E9 @mit(! í bq length$ ~if lo <ç'"lo; Felse¸     ‘ $ Qx#[:" ¬4 tmin(hi,m )= ápœ U {  Í H)) #Î  ˆ ‚C  $ > £ = B ( ’  # ±  (  j  Mš  ! yã( = ÿ	# generate overlap table= _, _, _, ’ V Á , hascased[ Smize_ ( I  » aassert9 š ä6 > á , ø K  
 [1] =D  @) -  2Ãisstring(obj@ñ° isinstance ò , (str, bytes))= _P #(pz 1):
¥ ž¢= p.state. |Âs"  7 1 #ƒBë àinfo(code, p, ñflags)

    # compile the pattern _ ø (code, p.data, =   ó .append(SUCCESSW preturn ! °

def _hex_ O !):c & ð
'[%s]' % ', '.join('%#0*x ò(_sre.CODESIZE*2+2, x) for x ic )d 8dis^ ¢import sysë álabels = set()� ‘level = 0 ðoffset_width = len(str(  º c) - 1)á  Ô ó dis_(start, endÕ  V  ÷print_(*args, to=None$  ( Ðif to is not      ¶ r.add(to¶     ^ Ñ += ('(to %d)4Zto,),- � �('%*d%s % ï #, È b':' if  _ ± else '.'),* z  ¡end='  '*(P-% "  { 	>  $2%6 \ 8'*(® Q + 2*l )å j ‘nonlocal 3 Á   <1 i Ñ  wh0i <â
ž2E = i-  × Aop =ø9[i] ik , !OPÝ;[op0 @f opƒ[á, FAILURE, ANY O_ALL’ ] äMAX_UNTIL, MIN kNEGATEk / oJ_(opR5eliˆ ÔLITERAL, NOT_ 	ä  I  ! P_IGNO´ 5  < 4UNI, u _ D ?LOCD   ?argÇ ß Ë   C , Àb2x (%r‘Ûarg, chr(arg)µcJs ATc V ‹ "5  ¾"AT_Jarg]Û] ýssert arg[:3] == 'AT_'UÛ  , +3:L Ä �CATEGORYÊ >/CHÊ 9Ê Š Ð 9Ð •n (IN, INDL—?IN_J
?ski �Y * ) i+ ­p_i+1, " ™ = 	Áðelif op in (RANGûE, RANGE_UNI_IGNORE):
  ýlo, hi = code[i: i+2]& mi += 2 òprint_(op, '%#02x  Â(%r-%r)' % (a ’, chr(lo)	 Yhi)))O þelif op is CHARSET¬ o P_hex_³ ( ¸ û + 256//_CODEBITS]c  ú É 	' ‡ ?BIGŠ 5arg3.1X  | `mappin9 ðlist(b''.join(x.to_bytes(_sre.À  SIZE, sys. Zorder0 Q  †for x inÔ`  cSarg, ´ | IT õ Plevel> § j§ Ÿrange(arg   ä • /2(õ% D °  `  ¬ :-= ¬ ›ön (MARK, GROUPREF
 a v,i  ‘   H C_LOCB  m"4› Y	ƒ Ñ ns JUMPiOskipà\  * p, to=i+ (P�s BRANCH� J`while � g  „¯dis_(i+1, Ã  & ? E 	I    Ÿstart = i N A /if¢  ! s‘'branch',/ y
 6 Oelseö   T FAILURE»²n (REPEAT,  ¦_ONE, MIN_ Ì  CP, min[xd w3I Âf max == MAXX Ï & % '& '‰í  «
„ E
3bänEXISTSÀ h ” 	… Ã 4 ¾ À            §  i += 2
  òelif op in (ASSERT,  i_NOT):-  8 ý	skip, arg = code[i: i+2]) µprint_(op, 4 p, to=i+ )1 ¯dis_(i+2, " À  = 	< Ã os INFO³ ù flags, min, max¿ 4¿ "if& ¾= MAXREPEATZ  L '& '�  " 
Abin(� )� 
½start = i+4^ 1if L p & SRE__PREFIX° Ãprefix_len,   S +4Ñ6Ë H2(' < 'J Ú : Ã M + 6Å  " � ˆ 0 !:  +  ´ — /',c  g   ð
'[%s]' % ', '.join('%#02x px for xx )M @(%r)9 'K tmap(chr/))	$+=J?lenµ ?t’overlap',{$ p 'MoCHARSEþPlevelW1¼ ?in'– öÉ ø ³i >-= i .seõraise ValueError(op)
» e  � p0, len(íò))


def compile(p,}#=0+ð# internal: convert pat … list to"  h2mat Óif isstring(pM  ø = 1= p“  Ñ = sre_parse. Š f(elý D BNonep  Ï @ = _ = d ¦FLAG_DEBUGP•(m  “ 2dis"^ A# maUò either directioâ�groupinde†�p.state. Bdictƒ    @ = [· I] * , s)  ¬@k, i¯0 X w.items(H ! r[i] = k© Äreturn _sre.ÕX  Õ 8ä% |€ q…
� &-1 w � �, tuple(  Cñ)
#
# Secret Labs' Regular Expression Engine+ òvarious symbols used by the r: À expression ðbengine.
# run this script to update the _sre include files!
#
# Copyright (c) 1998-2001 by Secret Labs AB.  All r, ±s reserved.E "See asre.py_ ð for information on usage and redistribu  E ñ
"""Internal support moduleK ”sre"""

#Õ ó,when constants are added or removed

MAGIC = 20171005

frommd ðMAXREPEAT, MAXGROUPSg @SRE \  dard excep« À (access as î ò error)
# should�ñreally be here?

class , $(EK ¥):
    """ q raisedñ `invali+ñgular expressions.
: "AtB2es:  O £msg: The u|2tedz @ mes�<  + 0patp/ ,reg    0 "os, �index inY&   wì r compilò¡failed (maUNone)M blinenoP   à corresponding½?pos< 4col; Pcolum= B û 1__m[’__ = 're'Aôdef __init__(self, msg,
=Ã Q, pos
 Á P  , `.msg =1 å  !=G  @os =T  $if* € is not x 8  B �   € `'%s atQ i±r%d' % (È &os‚ 3 aif isiD3ce(ª W, strÝ  )   1newªe= '\n'¯   Jelse�   1 b2  O  noÿ ‹s.count(8 1, 0mY) + 1o =  < Dos -2m.rfindB 	> 3if b  Äõ ¾ O(¨ S %d, o6%d)U�  " Ano,  š i& 3 ' =4 ! =ë® …super().”Tmsg)
P£_NamedIntCC(int¸Êónew__(cls, value, name#  ¢ ‰  ‚ h P P, cls~ H Ü  A .U ! =\ » areturnÜ \Crepr\‡ - M  ¹–= = ˜ (´' A')

÷  makecodes(™ sh  ¦  s.}¢p().split(Ð @itemŒ[q i:š  =“enumeratek ] ¢globals().� ({[ Ú  :  G 0temD   "s}ƒ 	  … op^ `ors
# Oðure=0 success=1 (jñXust because it looks better that way :-)
OPCODES = _makecodes("""
    FAILURE SUCCESS

    ANY ANY_ALL
 qSSERT A A_NOT; A aBRANCH C1 ‚CATEGORY ²HARSET BIGC  ”GROUPREF 	 q_EXISTS #IN !FO	 AJUMP	 bLITERA— AMARK ƒMAX_UNTI 'IN HNOT_5 aNEGATE7 CRANG
 3EPEÏ R 2_ON ’SUBPATTER‘ GMIN_" G À RIGNOR7 7IN_ €  —  
M 4LOC  ƒ;IN_ U  Y  
] ;UNI]  ]  ]  M_ r 0 ¥;£
""")
del ›÷ [-2:] # remove 5 8and9 ÿ 
# positions
ATØØAT_BEGINNING  Z_LINE aSTRING°  * pOUNDARY$ SNON_B   0END 5ENDK   E &  {:  /   	N )  2)   	) -ÿ
# categories
CHú |u_DIGIT   ¼ z  ZSPACE&  
& JWORD%   
$  YZBREAK)  \y   E .    ¦   -  ½ .    .  
Š   Å .  .  s -   , Ñ 1  ã 

Ôñ placement opera½ó for "ignore case" mode
OP˜A = {{ Š#: 	   ,    ':  %  }
S cLOCALE Z  €¶^ ) b 0UNI“c  šc ) °}

AT_MULTIaÁ  ­ä:eòšÅ aAT_END  § A 
Q 	N ë.  å ™K š&  \ ]  ß ]  & 	] À}

CH_LOCALEû	 = {
    CATEGORY_DIGIT: ,$ =NOT(  , WSPACEP  $  <  (  , GWORD' @LOC_ &  >   *  . ˜LINEBREAK/  ,  C 0 	 ï
}

CH_UNICODEe2UNIQm  ‘ ,  m  0 E ,  (  @  ñ  ,  0 K +   &  >   U    . E Y  0  ^  c    }ð	# flags
SRE_FLAG_TEMPLATŒö1 # template mode (disable backtracking)= �IGNORECAS? ö2 # case insensitive+ PLOCAL' ÷4 # honour system local+ PMULTI¶ @ = 8” öreat target as multiline stringe ¿DOTALL = 168  ~a singl7 �3Å €use unic"� "d QVERBOñ 6Ë ÷ignore whitespace and commenthPDEBUGš 2Ó idebugg¼  ASCII = 25¼  „ eascii ‚ 
¼æ for INFO primg  p_PREFIXh  g‘as prefix¿ ! `LITERA$ ë óentire pattern is literal (given byB öC  CHARSET = < òstarts with character from K ñset

if __name__ == "__main__":Jädef dump(f, d,{   Žñitems = sorted(d)6      @ in  s5  À.write("#def;ò %s_%s %d\n" % (',;  )\ Ð ðopen("sre_constants.h", "w")’fm fi ñ#""\
/*
 * Secret Labs' Regular Expression Engine
 - r  e  ¨matching e) ð NOTE: This file¼�generated·
® ðpy.  If you need˜  to© ng³!ytb ìin here, edit C Û rua.¯ ðCopyright (c) 1997-2001� ÷ ¡ AB.  All , ¤s reservedG âSee the _sre.cÑ Òpnformat'aon usa® `d rediþ bu  G †/

""")
Šó ôUMAGIC÷ 3 À  dump(f, OPóCODES, "SRE_OP")
  §dump(f, AT#    *CH  A ðf.write("#define c þFLAG_TEMPLATE %d\n" % ‡ F ŸIGNORECASH   J _LOCALF   B �MULTILINE   H nDOTALL B 0UNI�C  D _VERBOW D ^DEBUG†  @ ^ASCII@  /)
e¹INFO_PREFIXB  ƒ * jLITERAŽ D ~CHARSET‡  Ë ñ)print("done")
#
# Secret Labs' Regular Expression Engine+ óconvert re-style r/ e/ áto sre pattern7 øCopyright (c) 1998-2001 by} ¡ AB.  All , ±s reserved.E pSee the] ð.py file for informat« ðon usage and redistribu  E `
"""In— ó al support moduK ðsre"""

# XXX: show B ‘ng offsetX ñoffending character‰ ðall errors

fromª Ñ_constants imo ±*

SPECIAL_™ö
 = ".\\[{()*+?^$|"
REPEAT ÿ*+?{"

DIGITS = frozenset("0123456789")

OCT% 	o")
HEX" 	ñ89abcdefABCDEF")
kLETTERz ) òghijklmnopqrstuvwxyz= ðGHIJKLMNOPQRSTUVWXYZ¤ ªWHITESPACEÊ ° \t\n\r\v\f' _ a
y C{MIN S, MAX r})
_UNIB	Z ó{ANY, RANGE, IN, me, NOT_ ðCATEGORY})

ESCAPEx {ÿ…r"\a": (- @ord( 4)),! b!  'b"! f!  f! n!  n! r!  r! t!  t! v!  v! \!  ƒ\"))
}

"IA2  AT¾ð_BEGINNING_STRING), # start of ôstring
    r"\b": (AT, AT_BOUNDARY), B ?NON"  d" ôIN, [(CATEGORY, 
 †_DIGIT)]Q D/ 
>NOT3 s3 
XSPACEb S/ 
 b 3 w3 
HWORDa W. 
 a 2 Z2 dóEND_STRING), # end of ”Á}

FLAGS = {ƒñ# standard flags �"i": SRE_, ²_IGNORECASE¶("L TLOCAL m „MULTILIN  gU cDOTALLQ x7 TVERBOl ³# extension› a, SASCIIE t tTEMPLAT{ u ò UNICODE,
}

TYPæ  � W & |å  E q
GLOBAL)	C XDEBUG1 ’ ñ

class Verbose(Exception):|Dpass$ RState Ò# keeps trackÑÄate for parspódef __init__(selfV  Œ  .åA = 0m  �groupdict}  ñwidths = [None]  # 4 I ¡lookbehind  2  1 R ‘@property  « $ © ¡return len .& � ); Aopen $ p, name=k ò agid = ø + C
õ X �.append(A d  & (if= Â > MAXGROUPS• $   òraise error("too many "s"³  ' !if¦ € is not l 
H o±  ’P.get(Þ ,2 O S 5 S  % 	Ÿ Predef!0ionH˜ R%r as· e %d; "	 F  '"w- C" % ¥ `gid,  – )¬ ˆ × [Ó u] = gidh ú  #Qclose¥ é` pæX Ì@[gidY p: (‰ O KheckO L � ) <ü7and V si {
É g À gsourcey k4 s- N"ot• cÖ 7gidW µv .©@'can‡Àrefer to an U'3@  if¨# >N¦ à:
            ð6    raise source.error('cannot refer to group defined in the same '
 E  ò'lookbehind subpattern')

class SubP :O 7# a( ,q ñintermediate form) òdef __init__(self, state, data=None)S  ¡  ! .  " =( E   !if2 @ is 5 4    L U = []/ J    
 qwidth =J 
  ¨ Cdump¤ wlevel=0› ‘nl = True/  u õ	seqtypes = (tuple, list)!  for op, av ’ 
» aprint(p ö*"  " + str(op), end=''Q  v Pif op*INI   €# memberœvlanguag°  !   r 
V   ¯  ® .av^  % = ° =+1)³ aX %el° nBRANCHV R 
7  j  � @i, aŽ ÷ enumerate(av[1]— *  Nif i`  h 	iN"OR"y  1 !a.. *+1$ Ô þ GROUPREF_EXISTS} Acond›£, item_yes
 uno = av- v   § E'', < 
  % L ¦ ' fv .noš    l å É_"ELSEv /nou �isinstanc®$, 'µ TNFals¥ þû‰ íi ,£j   î   0if 7/nl #   x    	    á 	5   Oelseˆ « ?' '/ h  Ö a) · ˜– c 
9ç *  è"av0  ƒc__repr+Èpreturn  ¢.Ô7 ?len6 ?len5 1delÔšWindexv Edel ·[ b« ?get? 

£? h, slicó �Þ eÀrn(self.statóe, self.data[index])
  mreturn!   ðdef __setitem__(F !, B �, code):(  K   b ! ="    H oinsertC .- j I cappendI … .&   ; �getwidth= ¼ ñ# determine the % ñ (min, max) for this subpatternU  ù "if=5 ¶is not None ' h+ A µlo = hi = 0  q ‡op, av i�
S ú if op is BRANCH  t  T ÕMAXREPEAT - 1`     jv      ~ z ^av[1]Y  % ¥l, h = av.WV !   † �min(i, l"  † Žmax(j, h"  mlo + iÀ 7ihi + j %elNCALLÂ 0i, v ¾ z ,¯SUBPATTERN€ O[-1]B	„ *2n _ý_CODES† 	2… ‰ * av[0]o ë‹$ 1$ “n _UNIT“ ð ®c 
 [ ¯s GROUPREFì ¨±state.groupŒJs[av®  Ò ‹ y"‹ o_EXIST~
 ifs 2]ë] ®   ”[Ð , —-;elsã V    Z Ë    N,oSUCCESF UbreakŽßÔ0 = vIlo, !), 'hi u§ò
class TokenizerZ Óe__initgstringWŒ òistext = isinstance(* V, strz .    = 5ing× !ifW$ R ‡  Y  8 _ Àng, 'latin1'3)
  òself.decoded_string = 	 
% šindex = 0 ºnext = None  __ (k Cdef   r %):, W   .  6try(  ° @charž ´ [: ]; €except I´ ZErrorI m  Ÿ º  f ereturnK 2if x j= "\\"I w U += 10  C º   F 1+= } 
s¿  / Ã  # praise eà ù("bad escape (end of pattern)",ž  ;  ‘ óg, len( ¿) - 1) fromä ÿ "=  +C b ù �  Qmatchb ,Xj? 
o HYÈ µF Tru‡ BFals  € 1get~ x DthisW ³ ¬  Y o W  6 * V Qwhile[ 2, nÜ 7setg Presul,!''8  b ÷for _ in range(n/   c—    –@ not<  `:set+ % Ubreakl   „ I+= c ê 
5 0 ì Suntilì ÷terminator, nameÃ 9 7 = ò '¨
° ë œ  Î !is™
N   !…   # Aa F@miss2" +Î ÷  ,  4 d%s, un!edA D" %  /or‰c  �´ )ãî '==N Õ !if@   a À ô :, 1z  7 L€ ;‘@property  @1pos;	) sL-‰ “b or ''–  D 2tel€E )AseekŠ ,ÁL Š Þ¿  	 „  ’ @  ÷ , msg, offset=0V + %  0 .{ Ú  v@ 0)

^ r_class_àƒ(source,ïa ƒ# handle  Óq insideiÀacter class
ð    code = ESCAPES.get(escape)
 !if" :   areturn  @ �CATEGORIC A and7 Ÿ[0] is INU 6try Bc = “ Q[1:2]v  Š  › v == "x"-   Ó# hexadecimal; ò (exactly two digitsâ  2   c   += sourceúwhile(2, HEXDIGITS4 dif len1Z != 4‹  Y TraiseU ôerror("incomplete  S%s" % ,V 
r ´LITERAL, in°†[2:], 160 %el#!u"Ú jistextª Q# uniÍ	1Ofour2426ˆ 2uU2(_eight383/104L sZ	 ¥’chr(c) # à`ValueEÞ² for invaliñ² 7 Ác ¯N}dimport´EdataH  f t# named  Xù e.g. \N{EM DASH}4 dif not©¯match('{')l¦missing {"� Š @charŒ  XÀuntil('}', '! Qacter³ '> 		 O    žCord(± ý €.lookup(M  n )G ¡except Key¢Ò  undefined V £ 0 %r«   k ,E      &1 1) +à{r'\N{}'«  bin OCTŽ
É W# octò¿up to three�&2,d 
J |1t8# uz> 0o377¡  .‰'· vIÿ %s outside of 'd‘'range 0-z 'NÀ
           ó return LITERAL, c
  õelif c in DIGITS:  ! õraise ValueError úif len(escape) == 2: V »ASCIILETTER\ ` €source.eb b('bad X c %s' % ,q )‰ F Þ 3ordš 2[1]+ gexceptÊ ® ApassO í 	� "� "� b
def _µ (A ,· bstate)p ƒ# handle P code|¡expressionŠ  ó= CATEGORIES.getÓ Ð  _2odeV  : C _ESCAP@ !6try] 3c =² Q[1:2]a  u  †  ü6"x"-   Ó# hexadecimal; 6  ! ,B += / á Âwhile(2, HEX�ì  0   tJ!= 4v  % Å•incompletx/%sÌ E  7$in††[2:], 16¢ I¤== "u" andÚ jistextª P# uni¬ö (exactly four digits\  � 2426ˆ  Y 2qU2(_eight383/104L ^Z	 ¥’chr(c) # ®’Á for invalidO	gÁø ¯N}dimport´Idataf t# named  Ôùe.g. \N{EM DASH}4 dif not$“match('{'( ó  ò '$º"missing {"%@charŒ  XÀuntil('}', '! Qacter³ '> 	ô  ž Q± ý €.lookup(M  n )G l1Key4> undefined V £ 0 %r«   k ,E¤   šÐcharname) + lçen(r'\N{}'))
  õreturn LITERAL, c åelif c == "0":  < é# octal escape  ÿ += source.getwhile(2, OCTDIGITS„ Bint(H v[1:], 8/ • 2in I ˜ 	ö *or* decimal group reference (sighY  × $ifµ _next e  * ž 
æ (M  ' 5if É ]P C and?.[2 	S J   Qœ L ) +   ³# got three¯ódigits; this is an Ï u  ê  q Oc = » #  Z> 0o377¾  * Traise“xerror('yÿ value %s outside of 'Ç  O   ‘'range 0-Š 3' %”,E 3lenæ\q d " \# notŒF, so¨½	ž Ù{
�#ifC �< state.5 s{!ifŽ % Qcheck* ( i§ @"canÖ o1 toß 2pen† "_[
¥ ¡lookbehind© ¯  D ƒ
 s‘’GROUPREF,— 	VÕ rinvalid. KR%d" % ', ³ F - 1} )if J== 2€ú in ASCIILETTERS" ¼ 4"baM0 %sŒ ¶	� ‰ F ÷3ordÄ2[1]+ €except VdE}Œ Apass.&� ó
def _uniq(items\šólist(dict.fromkeys& ")
9 ¢parse_sub(,Øó, verbose, nestedW !# 1  ‡ñalternation: a|b|c
Ë † V = [] `append× £ .  v ematch ë  Ftart CtellV TrueO{ ] !(_© Ö O + 1D
 |Ðnested and no³t items))
  õ	if not sourcematch("|"):!  ( abreak
 rif len(G V == 1+ breturnc 2[0]1 òsubpattern = SubP r(state)$ â# check if allA ñ share a common prefix„ ¦while True|  q = None&  ¹ 1forN # i— 1   ý  Í 
   õ  
  #if† 1 ish 5 ‡  T  <   Aelif� c[0] !=M E 
z 7elsè  H #&0sube Æs start with."‰ %".9 ù
move it out of the branch( 7 K "de¨ä ï‚.append(Š r > ”continue úXnext º– $ i° ð can be replaced byþ Áharacter set= �set = [] Ø Ø)œ× ± �  
   „op, av =Í]   Pif opzLITERALÜ4set(C ‰= ÀIN and av[0]+!is¤nNEGATES 0exth&avd4Á 
 A# weLÜstore this asK€ instead4aî #<  (Hócompiler may optimizQ –even more¢ (÷ (IN, _uniq(set)rX3 6 V�BRANCH, (,ŸsJ F  ²def _parse(,Móte, verbose, nested, first=False!# : £ a simple çœ ö	0pre6ûute constants into local variablesT Z6 = g ) ÍgúØ $.g è ?  . : 0_le§2len ’ord = ordry!  ô3=B.É ² is ‘
»’Q # enW> W < on "|)"< 
{ ø Cget(dT Ù
O ñ# skip whitespace€ y2ent} ?   — ›WHITESPAC” ' á�   < [== "#Ò    _   	jÛ #   g ¥À or this == "\n":
  ]break •continue
 ûif this[0] == "\\T ñcode = _escape(source,4 …, state)L  ‹ ðsubpatternappend(A )p #elr ú not in SPECIAL_CHARSÐ L ð (LITERAL, _ord(¹ /))]  Ì [Ë 0herË Ã ¹.tell() - 1À ù # character set Œset = [] ê   =1 . 0
## 2if u ¹match(":"):!  ' ×pass # handle… yclassest Q P.next¹:'['< S êimport warningC     .	 (b     ð'Possible nestedã ó at position %d' %ß T,J rFutureWŒ ;ƒcklevel=Z =+ 69 
\VnegatÃN*^"&  Â�eck remaiù M
®while True; [ ÑïJget(d  Èois NonD   % Traiseðerror("unterminaP	n"; I  Pq0 - Ü£  Q]" anÀî  ] 1¯! <    è1*±0  ?els8 â!et² ‹‘in '-&~|' þ ý " Õ  ™  $     ' '    /%s O =  Ô'difference' Mp== '-' 9   'iI0sec‰
C &C ¯symmetric Ž ~K ounion'Â½€)4 9"$t  ¬O v Šo-½ E  ý# potential rangeK  2 0thaEY ' ;at ]À              ñ"raise source.error("unterminated character set",
6  V ïtell() - here)A ÿ if that == "]":$  t ÿif code1[0] is IN+  / , # =4 _1][0][ ¡setappend(6 ¨  U ) ÿ(LITERAL, _ord("-"))8 _break þ  Õ  /\\ � ò2 = _class_escape(j,E‚ Oelse-‚  €?'-'(   ÿ import warningsÒ  (   % .	 (+ 
 / �'Possiblelÿ difference at position %d' % M  Q .‚/2)ÁrFutureWß ð, stacklevel=nes?+ 6Ê 
� � ½
8 ú4 ï3!= 7 1 orÒ21 ¶˜msg = "baÎÀrange %s-%s"POthisA	 À - �msg, len(@ s) + 1 + /at'lo”K#hi" ?2[1³¯if hi < loø —:ïRANGE, (lo, hi7± q1K/1[š 2 ))
–0setrŠuniq(set¬ò# XXX: <fl> should movÂ�optimiza¸Éto compiler!_ @if _B [  ‚P1 and [0² éúë(# d 	W  ±�if negatû£subpatternûS(NOT_m ,ƒ /1]È ŸU jset[0]6? ¯ ÿet.insert(0, (NEGATE, None¢  #»7map#Àon can't be ûadded here because
  ý# global flags still are not known3 õsubpatternappend((IN, set))
- õelif this in REPEAT_CHARS:#  Š ù# repeat previous item# ¿ ù = source.tell()! i j== "?"`  d ù min, max = 0, 1< §  > *> 2MAXÍ ê  c 
G +G 61, G  >  
F {F  $ifPnext ´ }'   Q ¦àLITERAL, _ord(œ*))J 8   Šcontinueå   
LÇ  ( Élo = hi = ""q  YwhileÉ ‹in DIGIT -   Dlo +;get  " ®match(",")	 ) |  5 /hi€ Oelseq -lo!ifc×¶ }¶ Í)b `.seek(Ló_if loÜ Ïmin = int(loW 0if % &>=óK  gñ	raise OverflowError("the$þtition number is too large"{ _if hii 	 ´ .hi9  ‡  ´ ?ax ´ ]{ <5¿  & (Øe' fKÁgreater thanø -",„ M  ^ o! -E
/óœ PAsser°Åûunsupported quantifier %r" % (char,‹ñ# figure out which1 to)atÍ  ÿ–9 T6 = FY[-1:]B Î 9 :Non:½ !orš `[0][0]™.AT‚ U³vnothingÓ ¢E 	ša + lenÔÀ))
         û   if item[0][0] in _REPEATCODES:
  ýraise source.error("multiple repeat",6 E   C ùtell() - here + len(this))E ¦ Îs SUBPATTERN¤ ôgroup, add_flags, del 5p =ñ )1]e  — 1if ? ö is None and notN  U ‚ J ytem = pc #if<®match("?")> ósubpattern[-1] = (MIN—Á, (min, max,È )OelseR /AXR ´ Pelif �z == "."[ © Áappend((ANY,8?))
E (E ctart =.1@  N•i= True aname =t 	 þI = 0 ¸ ž™# optionsU  ¤ EcharÉ Jget(Ä # 1if & ^
O !   dóunexpected end of #"e  ³Pn `   ÿ # python extensÐ  ( <± )    # ŽdBô: skip forward to¹  $ < ?     Dò.getuntil(">", " # ö   >   !if° & ï.isidentifier(j  0  ¡msg = "bad£Pacteru a %r" %ä À  N À Amsg,Ü — ^) + 1· ; p"=qÊbackreferenc U   | \)\Ó 0gidQtate.Ù@dictg(” 8  $id· (   Irunknown5@P € så Qcheckê ð(gid):
               ú%raise source.error("cannot refer to an open group",
B  ïlen(name) + 1)> ñstate.checklookbehinds S(gid,¤ @ ÿubpatternappend((GROUPREF, gid): Ÿcontinue
œ _else:  ú cchar =� Oget(g 1if . ois NonT  X ˜óunexpected end of ñ "u H ñknown extension ?P" +ž Þ Ú Ó  Ú2„ $eló o== ":"Fò # non-capturingfp! =>! 
m #m }comment@  uŸwhile Tru�#ifío.next Í&@missï À), unterminaÚ  gÄîtell() - start• è   È µ ¢)5 /   _break9B—in "=!<d  # õÿahead assertionsm  dir1 qk  Ë  ¶·‰È  ˆ98 Í   è<è" a ì #   �2-1 ÑÆ« .  ô# Üs“ B !if9	E ”oh � � w ò p = _parse_sub(x,pðte, verbose, nesÐô0if -?< 0  Þ 4Àndgroups = N_one
   ÿ	if not sourcematch(")"):-  @ Sraise0 ÿ.error("missing ), unterminated subpattern",Q  U  Ž ÿ.tell() - start)B ïif char == "="· ‹ ÿ
append((ASSERT, (dir, p))a OelseW ?_NO[ �continue
Ú (elØ (Ø ý# conditional backreference groupX  h 4 dname =Æ€getuntilú1, ";  # " œ 0ond" ï.isidentifier(7 v Y =Ï1te. �dict.get(   Q r  ¸ v 7  is Non™ 2 âmsg = "unknownØ a %r" %> t ' A   ð †msg, lenµ O + 1º ??try\ ~  ò O= in' 6 	+?< 0d  2 æ `ValueEÔvexcept * \ ƒ1bad§acter iŒOQ from#Ê úbÉ !™÷ Ö �onumberå wE + 	ÔÏ>= MAXGROUPS¸ �sinvalid'$%d	É - ‚  
ñstate.checklookbehindv H
 ,“Lòitem_yes = _parse(�,Rà, verbose, nes€–#ifi .ó|ó	x /now / F{ Anext¸|à /   y "·úð with more than two branches"?)
   _else:  - ïitem_no = None' ÿ	if not source.match(")")U Traise1 ÿerror("missing ), unterminated subpattern",  ¦   � ïtell() - startc ñappend((GROUPREF_EXISTS, (condgroup, 3yes
 Ono))X �continue
¸ òelif char in FLAGS or o== "-"<}# flagsO  ÿ  ¡ = _parse_ (,ý 1te,a « "if[ 1 isé²:  # global t  x þPfirstÅ MÄ  4   ßimport warninÔ  (   % .	 (‹  +    'F&•`at the Qrt of ÿexpression %r%s' % T  X NÐ.string[:20],'ÿtruncate long regexe¤ E  4' (= £d)' if lenµg p) > 20 ¥? '')# ÂDeprecationW~!°cklevel=nesx?+ 6i
H Þ ¡if (state.…p & SRE_æÑ_VERBOSE) and _verbo€	 Q /V+ • n D 2addR, del / =Üí÷ �ß¬ *ÛÑunknown extenxA?" +Ž® ½ !   1j) + 1)R!# ô ³  :ent‚#if !isx ÍÁ >try  � Z =Hqte.open ^(name	qexcept þ 0 as	 W - �err.msg,ñ _ ñ Q fromš	 Csub_CT = (( Eor (ò�‚	K  ç   Ò(*Ä 
ø p{3subÄX y¨ %, a1C J<H	8 @À subpattern"?,
  ùsource.tell() - start): ùif group is not None:"  g ±state.close. ( :, pM ôsubpatternappend((SUBPATTERN, 5 äadd_flags, del Up)))
y úelif this == "^"“ h ÿAT, AT_BEGINNINGL $L :ENDF sð,raise AssertionError("unsupported special character %r" % ( ,^ ò# unpack non-capturing—söfor i in range(len(†))[::-1]#–op, av = % 1[i]J  ÍAif oð�<  ! Ý¨U = avM  0 D @A andMB  ñ
r  F ­ ¢: i+1] = pgreturnÐ Â

def _parseB(í,å1te,t)f  0get1getÃ ¢ 1= 0 ¢   !ifM g != "->›while Tru Ü� = FLAGS[ê{ è 2if ‘ r.istext¤    q n== 'L'   ( ðmsg = "bad inline w `s: canÈ0use=  Ã with a str  "ì  I  Òž eÐ:msgä,el B ³ u³ ))u'³ _bytesµ /ç!|=` 	ÿ @if (>� & TYPE_º)´(: 
 !H �™ b ¡s 'a', 'u'^ þ'L' are incompatibleš– gÞJget(µŸ/isád  P"miss‰¯-, : or )"U gn ")-:   \breakk«  £"in$Dqunknown±#" Ä °.isalpha() ‹ §  	r  ˆ Þ  Pmsg, I � )Ù b s)Ï þÀ5|= h Ÿ ü &if% ’ & GLOBALWí •  ÏÿÀon global flñag", 1)
    if char == "-":    ² sourceget(/   3 vis None4   Sraise7 þ.error("missing flag"H Ênot in FLAGSM âmsg = "unknown@ ² ú.isalpha() else f È ” �msg, len(è )” ›while Tru×  » " =¤ [4 ]b !if� � & TYPE_Ë   ˆ Ï ¡bad inline5 `s: canrturn ofL ùs 'a', 'u' and 'L'"s  Q m 6msgÎ  $ @del_¾ As |=p 	F  Ë # =°
ç = ë
 ! ‚  ‰:ì , M  k:k    Ybreakž 2  " 8 W&:N'fassert6J 6if kŒ& GLOBAL
/aglobal½	¹3addÛ&| Bm   zQed onl6offh  re  l ,k ’

def fix† Q(src,¦ "s)† q# CheckU 2fix p accordòto the type of pattern (str or bytesÎÒif isinstancei 3strg  ‚bs & SR‚r_LOCALE‹  $   bValueEž}Buse 1 § € with a ‹ ˜ Ï0if ” <	r ZASCIIq $ &|=— uUNICODEê/el½ & 
M ¾ r a1 ¾ ós are incompatible½  +S x (6y 7»Ñ|  r v æ-Ãß ±  C 	K G Ñ$ ÂPparseu¾ =0, state=àe!# ' T 're'Ù   into list¿ñ(opcode, argument) tuples
ëKÀ = Tokenizers ) "ifr  U‰ @ = S‘ † .Â  Õsc  $ .³=¹[ ðtry:
        p = _ñ:parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
    except Verbose:   c# the . G ñ was switched on inside( ÷ pattern.  to beF !on! Psafe / �, we'll ²  @wholF Åing again...A Ç @ = SÏ (³  Ÿ  .Þ =Ÿ =s |æ 
G ¦.str = str .c.seek( ^ Qp = _¢ TATrue@G +p.Œ 1ix_˜ i(str,  !)
3 2if §÷.next is not Non€iassert( a== ")"B  ¥ Traise! ðerror("unbalanceda–enthesis"x š eDEBUG:U sp.dump(1 Ðreturn p

defR ºse_templatej)C #% ð 're' replacementu àñ
into list of literals and� ñ# group references Ós = Tokenizerw 
@sgetÒA.get+ @  0 ![] c *=    „append =� . @  ÷ 1addW ³(index, posî  †1if  " >s., s !   «.¦|invalidî b %d" %O g „  A i.
Y à ´ “(''.join( )' B   4delå "[:!  ² C 5(le@ 2s),� I [ s0  ·g H  f2ate Ë `while @Ç 0thi± Ëà1if  +is ± €break # ·/ofh m  * G @[0] >6\\"y    r0   1c =| &[1#  Aif cF gE   †name = "Ÿ    !ifÞ·s.match("<"> !  %@miss3"<"^'   n søÁuntil(">", "‚  5   ‰ Pame.i‡�ntifier(Œ :try) v  Ð" =¿ [s 
.- `@KeyE£V ÿ Id*  ÍRknownh Ö 0 %r" n 7els@€   Î Oint(Y  C   ë?< 0È  * Ì QValueÌ 	` !   & T P s@ðbad character in gñ roup name %r" % ?,
  @len(; ÿ) + 1) from None? ÿif index >= MAXGROUPS:+  } ñ	raise s.error("invalid g° Àreference %dµ Y ¶ #� 1adde (U  å 	/ Þelif c == "0"Ë ÿif s.next in OCTDIGITó éthis += sget()f    O  0 S ðlappend(chr(int(/ ú[1:], 8) & 0xff)‰ ï ?in Ê îisoctal = Fals	Ã E ¼  # Yif (cZQ and Ç -2] S H £ )Ì *    _ ¨ ' 	>Tru #   Lc = |© l> 0o377¡  W 
<'”ÿescape value %s outside of 't  N 
 ‘'range 0-ˆ 1' %r,' 4= rc(  sif not <ã ž³) L - 1·.seM >try  ®  Å 0 = €ESCAPES[ J][1]X  - °except KeyE¨R ¹ïin ASCIILETTER S ½Cbad »/%sog ¶ ² ,el( ¦if literalÉ  #s./ƒ''.join( Ç»÷instance(source, strOð6# The tokenizer implicitly decodes bytes objects as latin-1, we must
&  ð# therefore re-enA   õ final representation.å» Ps = [¯ —1 is¼ ) xN #('~ €') for sX@ ]R breturn™$s,Aôs

def expand_template(	 s, match2g = .zW Uempty ’string[:0t ' m 4 = Z = ¢ % =� "[:; ðtry:
        forò index, group in	 Gs:
  ‘literals[- a] = g(1 ¡) or empty0 €except IS VErrorG praise e ’("invalidl ò reference %d" %’ )Q breturnb d.join(‹ ð@)
# Wrapper module for _ssl, providing some additional facilities
# implementedú ôPython.  Written by Bill Janssen.

"""Thisr h "esg Rmore E ¡ic support– ðSSL.

Object types:

  SSLSocket -- sub Q of s . ° which does1 “ over the& 1

Eu5ionU { T �Aion d� 2I/Oˆps

Func; ðcert_time_to_secondsG €convert  @ strY2useO  5 qificate³7 `notBef!äand notAfter f€ ¿ to integerF ” ApastpEpoch (� ovaluesB Q » 1romÑ .9 0())‘×fetch_server_Ù Ð (HOST, PORT)) ‚ & d€ !by6 c P runnM0on a A at 4 h _.  NoJ Ba½ 3 ‹ òis performed.

I[� constantðöSSL_ERROR_ZERO_RETURN
 œWANT_READ \WRITE ·X509_LOOKUP xSYSCALL S d ‡CONNECT
& 7EOF sINVALID® €CODE

Thñ@llowA�ˆ define prequireåós that one side is
a@ /'  J f�he other* ø:

CERT_NONE - nob /s 2  R are T ¹ed (or willÍ�be lookedõ#if³2ed)l ªOPTIONAL -m  Y 5not] g, but @ j . bŒ0@ed, ƒ3if   afails,›QconneK 	µ  ÑPalso 0 © �REQUIRED© r  4 bew ‰ ` ™  ‰ åò identify variouA�protocol ù PROTOCOL_SSLv2
 3 2 6TLS ªTLS_CLIENT iSERVER +v1 _ 2ãÖ  al¢ð message descrip1s að
http://www.iana.org/asüsignments/tls-parameter Z.xml#" ÿ-6

ALERT_DESCRIPTION_CLOSE_NOTIFY  ÿUNEXPECTED_MESSAGE%  ïBAD_RECORD_MAC!   �OVERFLOW"   DECOMPRESS• oFAILURk ¯HANDSHAKE_$  � ¯CERTIFICATF €UNSUPPOR× *  �_REVOKED¾  & _EXPIR& UNKNOWNL  ÿILLEGAL_PARAMETER$  > ?_CA  ¿ACCESS_DENI‡  kDE_ERRO\ DECRYPT  ÀPROTOCOL_VER­‚  ÿINSUFFICIENT_SECURIT]�INTERNALl ÏUSER_CANCELLÌ ÀNO_RENEGOTIAÏ�  ì_EXTENµ Ä¿UNOBTAINABL? Ñ¯GNIZED_NAM$ …ÿ _STATUS_RESPONS2 ŸHASH_VALU- �PSK_IDENTbô """

import sys óos
from collections & ¢namedtuple# Denum E @as _	 P, Int	     DFlag   ‚ X_ssl  Ô# if we can'tf òit, let the error propagate
” H ° eOPENSS|œ_NUMBER,  MINFO O þ_SSLContext, MemoryBIO, SSLSession4  (
Ô @SSLE® , ¦ZeroReturn ŠWantRead RWrite G rSyscall  z 6EOF ÀCertVerificaº ; )› qtxt2objŽ U, nid  : ÑRAND_status,  3add
 Dbyte qpseudo_ Q
try:‹ ^§B Áegd
except I”¼ 2 ð# LibreSSL does notøBvide  =  h_pass
	 †�HAS_SNI, 	 BECDH
 2NPN	 $AL
 RSSLv2   3 aTLSv1,Ä  B  '_1 _4  /3
u ô_DEFAULT_CIPHERS, _Ž5API&3

_6¢._convert_Å '†°Method', __”"__– ðlambda name: name.östartswith('PROTOCOL_') and name !=  ñSSLv23',
    source=_ssl)

_IntFlag._convert_(& Ð'Options', __R "__? alambdae : .Œ ROP_')) h MEnumh ±AlertDescrir q ÿALERT_DESCRIPTION€ ïSSLErrorNumber~ ŸSSL_ERRORv ^`Verify boVERIFYp fp OModeâ C_Óx_ï = _SSLMethod. UTLS
_+ âNAMES = {value^A forg!,  8 ing @__me¸às__.items()}

ˆ °v2_IF_EXISTT €getattr( £ ,!ð', None)


class TLSVersion(' Y!):ðMINIMUM_SUPPORTEDý 2ssl÷ _ 5  '3)   ZTLSv1   _ '_1! 2@  '_2! ~ a !_3! ?MAXÒ 
 %ü _TLSContentType*3""" ñ types (record layer)
} ðSee RFC 8446, sec{2 B.Ý 1"""& ñCHANGE_CIPHER_SPEC = 20   3 �HANDSHAKE qAPPLICA#@DATA û ¢# pseudo cÇ © W ÒHEADER = 0x10j ðINNER_CONTENT_TYPd   1× f ß
B.Ì Œmessages"6"Ü "°LOSE_NOTIFYµ Ä ðUNEXPECTED_MESSAG± 1Í ×BAD_RECORD_MAORDECRYOAFAILà2[/ €OVERFLOWG…  DECOMPRESS† 7  URk 3k “_ 4 0NO_g IF  3 4k  ž  k %UNy: 3ô 6 a_REVOKÂ -44 REXPIR 5 ÁUNKNOWN = 46 ñ ILLEGAL_PARAMET!47 ,  _CY!48 ²ACCESS_DENIc 9  )"DE8B = 5s  EXað_RESTRICTION = 60ñ
    PROTOCOL_VERSION = 70 ðINSUFFICIENT_SECURITY 1 ôTERNAL_ERROR = 87 ðAPPROPRIATE_FALLBACK  68 òUSER_CANCELED = 97 ÒNO_RENEGOTIATˆ "10 ÓMISSING_EXTEN¤ 2109N ªNSUPPORTED  1< €CERTIFICŒ òUNOBTAINABLE = 11É òUNRECOGNIZED_NAM 2_ HBAD_C âSTATUS_RESPONS* 3* ’HASH_VALU% 4% òUNKNOWN_PSK_IDENTR1115 j aREQUIR""11:pNO_APPLÍ DION_º Ë ñ20


class _TLSMessageType(_IntEnum):d 3""" ñ types (handshake protocol)
+ ò	See RFC 8446, section B.ñ 1"""& @HELL¼ƒQUEST = xL7  ¡ + tSERVER_ c  ~@IFY_ö G e `NEWSESô`_TICKEa KòEND_OF_EARLY_DATA = FQ HRETRP CiENCRYP-S›Ÿ  ³ ´ ±KEY_EXCHANGÑ¼ 2 » 1¼ : 1DON2 · 2 PVERIFRÿ4k º aFINISH2cÛbRL = 2³ d ±  ²  .„LEMENTAL72°  x PUPDAT¯ 2¯ BNEXTiQ = 67'€MESSAGE_â Y 5+ À_CIPHER_SPECòx0101


if sys.platform == "win32"—ófrom _ssl import enum_certificates, Qrls

/ dsocket1  ò, SOCK_STREAM, create_conn¿: @SOL_6  ET> c_TYPE
† U R as _  `base64A  ð	# for DER-to-PEM transla12 Terrno ²warnings


X Á_error = OSE
 ñ # keep that public name in module pspace

}€NEL_BIND+ Ä  Ùð['tls-unique']

HAS_NE…ÄCHECK_COMMONö€hasattr(ˆ¹, 'HOSTFLAG2 ÀSUBJECT')


@TRICPîÿ { ƒ_DEFAULTFS

CÎä P= SSL 2Verç1ion °


def _dnsõ ð _match(dn, host Ï   ing accord
 !to¹F6125¹R6.4.3Ú3- HG ñs are compared lower case.ìõ- For IDNA, both dn and† ð must be encoded*ôIDN A-label (ACE)K ö$Partial wildcards like 'www*.example.org', multiple, a, sole•   5 or sv Às other then ð	 left-most label are not!
  ñsupported and a CertificateError is raised.2 ò- A wildcard must match at least one character4 1"""< ¡if not dn:  € Ñreturn False
 ] ñs = dn.count('*') õ# speed up common case w/o– s) l N s ôdn.lower() == hostname Œ &ifV G > 1E  -({  Ø   —"too manyE Fin cbP DNS w ò: {!r}.".format(dn))ƒ òdn_leftmost, sep, dn_remainder$Ópartition('.'8 ™if '*' in0 Á c# Only½& / n ‚ segmentÃ Ð ô K Pcan oc  be present_ Ethe c rlabel:  c   "Ó8sepÇ Õno right side€¬ EsoleœÁ without addM1al   Qs are¹,± ¿0 !=“¼ ¼&al‡ O?ingË G sl
hÇ /edÉ ‹ ‘ .” — ÜÃ# P 2 orb
ÜMi	)L n ]1àôO ð


def _inet_paton(ip¨)¾ð"""Try to convert an IP;@ress àpacked binary ×ÐSpds IPv41 àes on all plat- s�@IPv6   ¥ ; 6ö ‘£f!# · ¶ ð) also accepts strings like '1', '127.	 Bsome- Ttrail�d# data1 ò27.0.0.1 whatever'{ 2try v0add˜†_socket.� Cº  ex’ 1 OSe=  # "N2  [ 2pasÞFelse5 9if n Pntoa(‡ Ûw .  I #›² injective , d  (   F P ‰ 
€  & €# refuseë` short§4Ï aÐ[f`X  J »BValu‚
U " " ™,� quad-dotÅVO× à)
            ±)

    try:	   ô
return _socket.inet_pton( ñAF_INET6, ipname); çexcept OSErrorO ¡aise Value ó("{!r} is neither an IPv4 no 16 "S  Ž  ó"address.".format(† 	‡ ‚Attributt Ž $# ¾ å not availablep Bpassr¹  : µ Ž “

def _ip# ¶_match(cert P, hos )¤ ‘"""Exact - £ing of IP D 2es.� ðRFC 6125 explicitly doesn't defineWñalgorithm for thisè ð(section 1.7.2 - "Outi �Scope").& """†Ð# OpenSSL may‰ € a trailž @newlm ÷to a subjectAltName's¹ ,S ð # commonly woth÷6R  ÐÖes. Strip offa "\nŽ bip = _�aŽ
H0.rs< "()Ä 5 =b
‘Y_v ¼�,#   †ÐVerify that *l Ð* (in decodedPrmat as k Qed byä BSSLS:pgetpeer= 2())Ò„es the *€ @*.  Ì�2818 and  ÙL órules are followedÿrThe funÆÒ enQes ra\€than dNS‘Es ifê  �ae evalid § I0ng.�4�† ðsupported on all plat†s¥7IPvÐ3 / 4 wiÿT $ (™•  íCton)ö “Certifica× Ä ¦� ñfailure. On success,m)Y ¯sþBhing¸ ë if  ²� ~b 	Á±empty or no, ” ,ã\� needs aÎ
 Xj Q   rcontext##Š Ž  à"CERT_OPTIONALE  ’REQUIRED"	â }_	Q  (Ï¸4# N " (ÙC cas ©  S i 2Nond0dnse as = []j Qsan =Hk.get('F$, Õ Ä`key, vMv in san— ö if key == 'DNS'  Š ú � 0is Ž n_� œY  @  ?¸  C ‘s.append(E v # 'el™ BIP A¿  
 ›¤ ›¦ 3_ip³ k  ¥ Àpend(value)
ð    if not dnsnames:
   ð# The subject is only checked when there ÷no dNSName entryE $inD 0Alt"  0for ã in cert.get('p f', ())�  ‘  0  key, value7 :sub#  ' ð# XXX according to RFC 2818,² ù most specific Common š  G   õ # must be used.º     Áif key == 'cG  F '“ , _eq_match(Ç `, host{î  4  mreturn   S ‚s.appendU )+ tif len(" V) > 1œ  raise Cert¤ateError("� Q %r "H  g   ‘"doesn't ¿ 0 eiÿj of %s) 4% (F õ, ', '.join(map(repr,m2)))« -el­ /==® :/%r¤ #5[0]‘ /se,ö no appropriate - o=Ù� fields wAðfound")


DefaultVerifyPaths = Ždtuple("! !",¥ò"cafile capath openssl_ K_env   1 " ""<    ˜ ’def get_dŸ !_v  _ #s(¸A"""R§   w/  … C andŸ J"""q @partè @_sslg 
è ò
# environment vars shadoww $ p S= os..  X (i R[0], 
 "1]~40 20 23])… � �({  if|  	0.is˜ ²) else None· X • 	J Bdir( I *í  ^Áclass _ASN1OÖ([ Á", "nid shorœP long- T oid"™¡"""ASN.1 oN P idenN‘er lookupŽçÓ__slots__ = (I YÀ__new__(cls,_ P h‰super().* á*_txt2obj(oid,%s=False)\ @ï amethod‰  m rfromnidm 7nidm `"""CreÈ
 1 ñ OpenSSL numeric IDQ  £ Þ   ¯ 1nid¯  v £ 3ame¤ ?ame¥ ­,¯  ‰O¯ À"
        reðturn super().__new__(cls, *_txt2obj(name,  ñ2=True))


class Purpose(_ASN1Object, _Enum):
    """SSLContext pu/ ñ flags with X509v3 Extended Key Usage oO sG  ñSERVER_AUTH = '1.3.6.1.5.5.7.3.1'& oCLIENT& %2'À œ &(_ ¼ 6An  à holds various ð
-related configuration op Qs and� ñ
data, such as certificate# ñ possibly a private key."""> �_windows_9 ñ
_stores = ("CA", "ROOT")
+ ¢sslsocket_Ÿ�= None  #­ S Ð is assigned ½ $r.; q; Ú; < Idef ;ðprotocol=PROTOCOL_TLS, *argY0*kw
 g 'wself = „
ŒQ )p  2 "reº2elfü … °encode_host¯(X $,  q %if  ×  '± \   `   t ôelif isinstance(X W, str] @ # .š °('idna').de© †('ascii'× Oelse‰ I : ž  ý Rwrap_ÿø   ñ, server_side=False,3  ¥  ñdo_handshake_on_connectò2 ÿsuppress_ragged_eofs/ 	ˆ É =[ ž Qssion C²Ì � 4lesÏ G  Yòing before it call8 á x# ctx._pç (.>™._create(/ T= 
e 
% c 
= n 7 v� ?
- c¨=
 "se§ y€3bio}ñ incoming, outgo
 } ‹
$ ¡ 'rNeed toeÒhere because  £ ¥) can onlyÊ "# b` ASCIIÒ C&)&ý å  	h­þ  Š!._ä	×	& )D 	¬,ž ×À      )

   ù def set_npn_protocols(self,  C):
  ( õ s = bytearray() Afor ! jcol inE D  K bC $s(1 –, 'ascii'P  ) ôif len(b) == 0 or Z> 255U  0 õraise SSLError('NPN” às must be 1 to@  ¦ klengthw – ’s.append(‚ 
™ " 0ext" 5b)
 B.._Z2 ) }óservername_callbackƒ _ Ši½ < 
" Š is None“ 5snid ! =& ´ ;els3 pif not • _able(�  |  €BType�"E aG ƒ object" 2   ò him_cb(sslobj, q  ÿ ‡, sslctxþ  5   % 1 = æ À_encode_host= ¹   
Á ? creturnk 
Iˆ 	ì E w ]sÍ ) Þ _et_alj 
 ã /(k
F 
ýlV/ALmi
Xsh ‚ô	_load_windows_store_certó  '—, purpose�) Œ:tryq  1 !, Œping, tr{qin enumx •ificates(y p  X  P# CA L òs are never PKCS#7] %edÄ 0   "if 0ing5ª"x509_asn"¦  +   $if� `s Trued@.oid#½ >  B   .
  iñexcept Permission
K �warnings.	 @("unp ¡ +rerate W¶
8 7"k !if s] �úð	verify_locations(cadata=± sG  ¿B qdefault¾6*"=P3Ç.SERVER_AUTHÏM³isinstance(8 �, _ASN1O1  WK3 «  ±ys.platformí[win32ê �.Ðname in self.û_windows_cert_stores:
  ¥self._load0 + 6 !s( åname, purpose)C ; ñset_default_verify_paths()
) ðif hasattr(_SSLContext, 'minimum5 fsion')œ ‘@propertyB  ± Kdef 1 ( 5  ' Ðreturn TLSVerV ›(super().= �  4 @ .setter{ {, value‚ "if 7 ==‡ f.SSLv3á  x    Ã â.options &= ~O `.OP_NO0%v3‰ 1 Ï H å 0.__ž_*¯ – L f(ax—< ä f
= 	f
 f
# { · 
<Öû &,  :).mH 
 e�| ÷ ó ŸV. è @ Ü T Ð Ì S Ëaÿssl, 'HOSTFLAG_NEVER_CHECK_SUBJECTg@hostñð _checks_common_  Fancs = É_; ï_flags & _ssl.‹ 		Ùa N /!=< = @u  � °  ‰ ¬  �/ ß ¡ : ×
‡  ú ?= ~ü OelseY | “ 
P 
ä   ü 3 ŸBTrueA
V  R Ñ_msg_callbackKD ô """TLS message ' L  a =The ð provides a debugging hook to analyzefaconnecO . S i 1 isu  ed for any8  a Ttocol{ I ò(header, handshake, alert, and more), but notS `pplica| e data.L 0Due° ñtechnical  limit+ Vs, thà can't be used6 8fil� traffic or †abort a ÷ À. Any exceptóion raised in the
  ð
callback is delayed until& õ handshake, read, or write operationJ õhas been performed.
 ðdef msg_cb(conn, direc@ ñ	, version, content_type,/ 
 edata):L  º Fpass^  S 	 ð:class:`SSLSocket`º  ö Object` instanc˜ 	P  ``ÿ `F !``%``" Á   ¡ l BTLSVà Ð` enum member� ô int for unknowny. For aN òframe header, it'sŸ 9 3 I – R_TLSCnOType› ™supportedH a   .  á    s ”Either a | !nu aé 	G ‹message,I ^AlertÃ G 0n a G M^ I oÁ F sÇ, ®  s! É	I åRaw, decrypted7 _ REytes4 5""" ðinner = super()._Ï& "f ) ºis not NoneKbreturn& ‘.user_fun›E ?els5  N ‡@ q.setterA  û	 t(self, « Ú%if  � ^ 
¬ ì 1SSL½Fxt,  ƒ.__set__n  L )�  •  ø ¾   !if!„hasattr(Ÿ P, '__ 7__'«  2 R 5�Error(f"{)  O}À  p  vable.")k  –3:try' � •6 = ƒ( 
	Áexcept ValueÉ M 
o _ t ¸Á; = ê í àƒ 0 .Äq r ~.HEADERÐ  +Ž3 	#/eld _ALERTc ©a Y \ž �	= ƒ <  „à = msg_enum(ms—g_type)
  ùexcept ValueError:  * Ypass
 ðreturn callback(conn, direction, vers	 	6  L  qcontent• B, msŸ v, data)q áinner.user_funa % =| (  super(SSLCX Fxt,  0)._` ± ñ .__set__(self, b r ‘@property» Ádef protocol- )²_SSLMethod(‚ $).2 S Ïverify_flagsW V# F" Ú ().7 \  u.setterº  g 0, vèÅ ³ )
5A 4I ~49 Amodey r 9 2 = z Õ  + ¹  "6tryh  lMV G ËÇ@ 5 ´ £ 8 “ ¾ 7$ @ 6
Yñ create_default_Âxt(purpose=P õ.SERVER_AUTH, *, cafile=None,2 % bcapath( 0 caV ŒA"""C� ' a)Ó object with š  WRings.;•NOTE: TheE and& ñ may change anytimeO ‚out prio ­ pdepreca5.R ¢0s r ÷sent a fair balance between maximum Ócompatibility‘ qcurity.& 1""" Ðif not isinstT q�, _ASN1O% ¦ ’raise Typ / �#= sets OP_NO7v2, 3 ²COMPRESSIONÀ#& sCIPHER_í¡PREFERENCE6 ÑSINGLE_DH_USEÜ 3OP_ "EC Ý D# by·÷ V' =¨ Ó(PROTOCOL_TLSÈ 3if yO == | ‘#ß‘ify certs� ðhost name in cliº ÿ•  E‡ Ã  ý = CERT_REQUIRED, `check_[ Z b= Trueƒ#ifB or é
  æª v Sload_ñ"lop"s(I Q )   > T elc I	µ !¶ FNONEi Ó# no explicit›  Q  Y ™ „ but the@%isù #€OPTIONAL9 	"ð . Let's try to Ö íf systeð# root CA certificateó#s for the given purpose. This may fail silently.
  ócontext.load_default_certs(D ), ñ# OpenSSL 1.1.1 keylog file  ³if hasattr(S 2, '% _% qname'):,  {    ò = os.environ.get('SSLKEYLOGFILE'�  5 #ifx 8 ó
and not sys.flags.ignore_L Fmentq  @ š .} ˜ ' =W ¢ sreturn 0 ó


def _create_unverified_  ð(protocol=PROTOCOL_TLS, *, Jñ_reqs=CERT_NONE,b  �    check_host1t=False,Î#=PÖ¿SERVER_AUTHN 0ert+`=None,å  † 
a( s capathC acadata ÍA"""Cr a SSLCPq object–ñPython stdlib modules
€ OAll  À shall use tÂÂfunction to ˆm K q  s in order* �keep comm betting! qne plac eç`figurab M óis less restrict thany &ë @()'sm  in™ ±se backwardJ Ãcompatibilitw1""" !if¿¤isinstancer�, _ASN1OCg ,ô raise TypeError/ )L#÷ sets OP_NO_SSLv2, 3 ²COMPRESSIONG#& sCIPHER_d¡PREFERENCE6 àSINGLE_DH_USE ‚3OP_ "EC Ý S# by Pn-' =¨ :Ä 
ÄC .  1 = (x &ift1 isb þE Æ†y_mode =5 F 	Š? „ BTrueŠ§ C" ¤   H ÍCValuÎ"$ Ñ must be speci"Ü  H 4 orÏS Ì N p_chain(  5 n # * � CA rootsÿ  g  
  ýp O1locG1s(cB ,@   > Ê  elÌ @.: ‰5!= )i ê# no explicit Y ™ 0 bu©"e Q  j2e iÒ  ?#[ €OPTIONAL9 l ÐREQUIRED. LetÌ ryÐÂ d1temK 2!CA5ificate„]À keylog fileñ
    if hasattr(context, 'keylog_filename'):,  0    õ = os.environ.get('SSLKEYLOGFILE')5 7if 8 ó
and not sys.flags.ignore_L Fmentq  u š .E ˜ ' =W m sreturn 0 ð

# Used by http.clientô $no% ð is explicitly passed.
_create_default_@ #s_Y ; =   
s ñ Backwards compatibility alias, even though it's�a public p~ gstdlibw — ¤unverified ó


class SSLObjecD‚"""This  Pimpleaðs an interface on top of a low-levelK ! oL 1 asa@ V‘OpenSSL. c + ñcaptures the stateX nO ¡connectionP rbut doeðprovide any network IO itself. ñneeds to be performedI 1thrRPsepars S"BIO"¾ Ãs which are ³  'sP aabstra� � layer.
N Ï 2ž Uhave ¨ñconstructor. Instancesb …!M b``SSLC]³.wrap_bio``5f ãis typically u´Qframebauthorƒ�that want�Á asynchronouÛ 1forqãmemory buffersè 0Whe.`mparedP ¬ °Socket``, t:×BlackÔÑfollowing feaë:7p * Any — óÄ€, includ4  methods su’°s ``recv`` ‘``send``.:ð	 * The ``do_handshake_onô F5 òuppress_ragged_eofs`` machineryO 1"""W Ðdef __init__(\°, *args, **º'gsññraise TypeError(B  •  0f"{@ 1.__ÇP__.__Â6__}×
9ƒ  =   /f"I ËC6().M )‚@ˆ cª ì ­A(cls‰Áoming, outgo
 ñserver_side=False,<  ¡  $ @hostâ ã=None, session  C # 3 ls@ew__‹ `sslobj" %_&
n?inc» 
£  Ç 
Á  ¼  
- `owner=´ ß ç ¼  ›_Â 	 (  M  �property#  �4ˆ4·e÷ ø ÉPurren¬ in+.× «q .– .b � À @context.señtter
    def context(self, ctx):      “._sslobj.)   =% 
$ ‘@property  N qsessionN I ²"""The SSLS! ñ for client socket."""G  y yreturn € [ z  9.seÎ  € #,  ‰ R $ =) \ Ö q_reused] T ¥"""Was theÒ å 0 ÿ during handshakeê o • Ÿrver_side’ ðhether this is a se0 -0 s 3 c † hostnamŠ  ùÓcurrently setŠ  4   (õSNI), or ``None`` if no¿ 5  isL 6Ã l Ç  ª2reaÊð, len=1024, buffer=� 
áñRead up to 'len' bytes fromùó SSL object and ÀRthem.s  ÖBIf 'b '“ provided, Œ R into¯$ I ¥ number of„  = . \#ifÑ  n @not Ø Þ “ vý%lfæ N D(len)Z Oelse= 5 	v xBwrit'j, datahW   ' 'm U\�«  d 7ten{ …V PargumxÁmust supportÅxŸinterfaceVÓ 	J q  e(¶ )ê ¤getpeercer^úbinary_form=Falseý Rö ¬ " �atted verQ1 of£  c 1 in  Y „ificate L!by$ o4endA  Mwchannelz  w ] 5wasa @, {}# a" z ‹  B t wŸvalidatedQ<6^ÿselected_npn_protocol	 Û  I†= @ NPNÛ =   a{ st­	ŠÛ –if a next4   ä `negotiå  Ä!ifZ !is d•ed by oneP Õ &sÊ0if wŠ.HAS_NPNw�/Àselected_alpón_protocol(self):
  ô"""Return the currently selected ALPN > õ
 as a string, or ``None``P –if a next4 ð was not negotiaU Ror if[ i `suppor eby oneQ !ofš •peers.""" Àif _ssl.HAS_¥ Ô  Û rÕ  î .' Dobj.Ô G_alp!)
T ¯def cipher$7 ñ3-tuple ``(name,\  ’ ùssl_version, secret_bits)``Ø º a (ª rshared_ s² „a list oÜ "s : 1 byX�client duÓ Åhandshake or½  æ ³Sthis ³õa valid server connection.7 °Ø Œ Æ à pcompres.Ý ³ 1 ù algorithm in use«5 if  5 § ¹œ N { ”ä d ÁpendingÝ `numberp ðbytes that can be read immedT/lyEr f5do_ïŠ  QStart…SSL/TLS . 	n 	f	T l ounwrapf Ÿ shutdownk rØ3 _æget_channel_bikú, cb_type="tls-unique"CGet <  < ” data for#ï÷  Raise ValueErr8i¾`requesÞ` `F]3.  Šìù y °6or Še• Žñvailable (e.g. before½µ)¶K7² ËÇÌ Â $Á identifying‹ IC  ždŒæ †D SSLˆ/. KQ rverify_ã__postî@ 
@)


3 ]Ãcopydoc(funcK²"""Copy doc/P fromÓ �Object to dSocketÜ  @ ò.__doc__ = getattr(SSL5 #, "  Z4__), :Â  " ð


class SSLSockeò&t(socket):
    """This class implements a subtype of 3 . ± that wrapsC óthe underlying OS/ ñ in an SSL context when necessary, andC Ðprovides read ò write methods overw €channel.¹ 
< ðdef __init__(self, *args, **kw
 ë  ï ñraise TypeError(B     0f"{@ 1.__û__.__name__} does not have a public "A ýconstructor. Instances are returned by7 BSSLC#.X_i6().` )î @› | ÿ ±create(cls,}ñ#, server_side=False, do_handshake_on_connect=True,L   òsuppress_ragged_eofs+ \ @hostO=NonA  ô � session �i\@.getô ðopt(SOL_SOCKET, SO_TYPE) !=  r_STREAM»ª ÔDNotI¾"edÞÁ"only streameÙ0re Ý uorted")ù  ‹ 5
c  õ 
   ‹ ‡ CValu\"„3 Q can ’ Ëbe specified J  ÷ "in client modeµ  + � ^" i¤ ‘¡ 7 ™ /inœ ™ $ifõu.check_1andI
° MF Œrequires�"( þ{ = dictë`amily=t!.f  , í  
 r, proto  
$Sfilen  (L
  Q` = clsMBew__¦œ€¡super(SSLS  ÃElf).Û2  Òelf.settimeouÙ J )‡ ·ock.detach(" ž .	ž=³”  b _¼$ =Æ  ‘closed = i �sslobj = •
  ¤\ ²' A§ …._encode\(R +   É  !ˆ   ¸   ¬ „±# See if weueø " :tryü•pgetpeer`X‘except OSàZ as e<  if e.errno3	 ð .ENOTCONN:
      graise
 ÷ connected = Fal _else:, UTrue
 hself._L  $ &ifm 
X õ# create the SSL object:  ° :try5   w ’sslobj =  ùcontext._wrap_socket(L  ;    0 Ð, server_side 3lf. Ÿhostname,= downer=C Qssion A._se 7 )I ôif do_handshake_onEí  ² ttimeoutì 3get (\  0 3if !  == 0.0W  + í# non-blockingª  #   Bß ValueError("Á ù should not be specified fork  £/s"Ã  b.d ë ¡except (OS� ,œ )î N [closeG Ü ú areturnUé‘@property# Á@_sslcopydoc !deá |(g ~ K & $ T ®osetterI W, ctxN  ] G   = 8  Ã  .\ # $ Ä ¿Ä !if.÷  o!isÛ;Non&	í Š T ô  .ô  y  ŠFø & " Ø  ü ¢ 	%P Q )q_reused· ® Ž 0[ 7 `<duph ‘áNotImplemented
€("Can't 4 ñ) %s instances" %ä  5 &°_class__.__6__)Ž p_checkCNÿ `, msg=	"# £ 2an ¬ñ	ion here if you wish to N ‘spurious ªs­ Lpass 1‚ }È �
�# getpeerÝ s() will° €ENOTCONN§  ™§’ is reall? >tà; Ð�at we can„ Ê even withouç&# Ð ð being set, e.g.‰ C ’() first =%ed# ‘ à# EAGAIN.
      ðself.getpeername()

 �def read(! ñ
, len=1024, buffer=None):+  / õ"""Read up to LEN bytes and return them.1 R òzero-length string on EOF."""Š  _  … õ ._checkClosed()J 2if   sslobj is � œ  A òraise ValueError(¯ Aon cP ö or unwrapped SSL socket."i :tryU #if t ?notx  | ë ¥ .[4lenPf  2 Jelsek   HH @ `exceptÃ é Z as xL ð if x.args[0] ==+ ¡_ERROR_EOF²c úsuppress_ragged_eofsI  •  + À 0º    ï   3 9b''5 1 ä4 ¾Swrite¿Jdata®W P DATA±°the underlyƒ  ¢channel.  «s‚ “number ofä"ofH ÿactually transmittedÇNÈ ÈUå_5.-'B@ qcopydocú  S(CcertYøbinary_form=Falsa µ ‰_connectÕ¤ ~ x ±± 1selZ Ñ_npn_protocol» Œ ] / ñ %Š.HAS_NPNÁ  Š? Î·& ‚ ‹´ æ /alç L/ALè @
¶ é 	ocipherÀ0¬5‘ ´ 	rshared_* s¼ jÀ self._sslobñj.shared_ciphers()

    @_sslcopydoc ñdef compression(self):  0   õ ._checkClosed() 2if  æsslobj is None=  A areturn 9 ?els& O .– ¾  ­ Asend¦ ÿ , data, flags=0µ '1not  
¹ "ifZ Z != 0 Ø õaise ValueError(Þ    “"non-zeroL  k ñallowed in calls to Õ ¯) on %s" %L †_class__‡ l f# �p.write($, zquper().‰  4 Xy.to{ _or_addr,  =Œ=rm"¨ 8to Pÿ on instances ofJ 2 0_SAelifÎ Ô
s4!toj6yE X‰3msgŠ°*args, **kw
 {ñ# Ensure programs don'tm<  unencrypt�Õf they try to‚õ# use this method. –âNotImplementedŸ?msg -¥€ 
3allµ° Ø (‘count = 0-Gñ   with memoryview²P) as  , ‘.cast("B" Pbyte_  #amc Elen(( ñt Rhile � "< 6 N  . 2v =P ÜS [< .:][  5  U += vê ä `2^CfileW  ², offset=0,Ê å¢"""Send a / ñpossibly by using os[  @() il is^a¸ òclear-text socket.  R>ðthe total numberß tsÌt’À  """
      ÷  if self._sslobj is not None:
  dreturn- ðendfile_use_send( õ, offset, count)@ ;elsN P# os.9  8 õ() works with plain sockets onlyH  � ˆ fuper()D  I � : �def recv(é ö, buflen=1024, flags=0)ì  % æ._checkClosed(È -"ifZ V != 0\  À   ñraise ValueError(¨    “"non-zeroL  ˜òallowed in calls toÜ ¯) on %s" %L Ö †_class__Ò  p R Rread("% ¿3 …^6 S!)
‡ {V_into€Àfer, nbytes=j5 ˆÂbuffer and (J  » M Ì Þ  P= lenÚ 8ferÚ #if‰ ? 
®>  /Ó  T Yg
	þ 37Ð � ¨îéFfrom�N~"À … ûcÿ on instances of]  ]A �  ¡?len'U h –[I% L þ²4’ 9n†  >[F3msgl°*args, **kw
 8"âNotImplemented©÷ ?msgñ -/`32msgÕ  ¡/, ­ )H ² Àwed on insta¿nces of "
  ñ"%s" % self.__class__)
: Á@_sslcopydoc Àdef pending(2 !):  e   õ ._checkClosed() #if` össlobj is not NoneA  E ireturn- .p O ?els8 0·  ¦ �shutdown§ _, how¬ È © =¤ È …super().]  W t +aunwrapƒ ~ 
:s =ÿ l   *§ 	   J¼ 5 ð	aise ValueError("No SSL µ òper around " + strÇ 	òverify_client_post_handshake> ì 
½ ”‹.] 
ç ; Jp_real_cÔÅ …	,? =	+do-×, block=False?u i‰_connectmttimeoutH3get ‘6try‹ /3if & ² == 0.0 and� 
)  - ‚ sX  È‚"  =Iobj.Ú ( kfinallˆ [ • 9�ù ‘ƒ, addr, 7_ex.h¬server_sid;Tcan'tN   i� < -< f mode"Å ð# Here we assume that the socketë? ,W5not—#i 3ed :  ô  ¾ F ”call.  We' @ it,` n¦E it.K ë 9 orM Ž y¥attempt to{ ƒalready-i ed.Sè !Äý†�context._\_(º 3!, í,µ ³™hostname,/ `owner=k  . Qssion A._se . ­öÌ >_exè rc¿ ô) (oV  ½ v  @  Œ     U R  !if#.rc—  õ .åð= True
             ðif self.do_handshake_on_connect:
%  2 )()( •return rc ñexcept (OSError, Value )d \ å_sslobj = NoneF  ˆ araise
 Cdef ¨ (7 g, addrP B"""CÈ ðs to remote ADDR, and then wraps L aion inb  q õan SSL channel."""  u d._real0(‚ �, False)¦ ?_ex© c‘° 8Tru¯  ac®« 
NA xs a new0dfrom abbclientd{ s4pa tuple= Ìtaining thatQ  –öped with a server-sid–k 1theaess ofÓó‘ ¼‰ rnewsock5³ = super().ý Ò)  #  *€context.¢ _B 3et(# ,]  9 [=Ž J òsuppress_ragged_eofsG  D J_J=÷¨ ª ‰ Ö Ã@�bcopydoÓ zCget_�_binding2÷, cb_type="tls-unique"Hs U  åais notê
‘ (- .v p ²JelseK $if– l ú	in CHANNEL_BINDING_TYPES5  o®(ãD"{0}"  n ýmplemented".format(´  m   Æ   z ‹qversioni5T � V	ž Ò
# Python doeÓ –ðort forward declaratb ¡£ypes.
SSLCT0ssl| Z`lass ={kSocket' †object_c' O 0


�� R  , keyfile=Kf, cert Z o o%Ì2 þ _reqs=CERT_NONEaCssl_9ð=PROTOCOL_TLS, ca_t s€ q ¢g   Í+ bcipherw ð ):

    if servóer_side and not certfile:
  ôraise ValueError("$ ñ must be specified for server-W "G N  Ñ"operations")' `if key~ � 4X âcontext = SSLC Â(ssl_version~ & á.verify_mode =T_reqs¢ 0ca_ s!9 @loadS  > 2locÛ (0 e !ifR  ä A  ] p_chain(  * ,D _ipher„  Rset_c ( 5 treturn ¬ Áwrap_socket(Ú  ˜  = ,Ä=Ð ,, ÿ	do_handshake_on_connect= 9 ÿsuppress_ragged_eofs= k ñ)

# some utility func5B

deNñ_time_to_seconds9 )eB"""R @the . C in . p since  ÁEpoch, given  + astringŽ  re» aenting  ð "notBefore" or  ñAfter" date from aòqificateG ðin ``"%b %d %H:%M:%S %Y %Z"`` strpx  Lpmat (C NQle).
?  f u s–ôuse UTC (RFC 5280> ð2Month is one of: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
* Z jshouldÿòas GMT (see ASN1_TIME_print()‰"""è eimportø ä  “calendar "  . "gmmÇ Fs = ¿ð"Jan","Feb","Mar","Ap ¦May","Jun"‡@"Jul! òug","Sep","Oct","Nov","Dec§ µ  z @_for�<= '¹ñGMT' # NOTE: no � p, fixedÓ 2tryŽ A" ’_number =1 vs.index¾ñ[:3].title()) + 1H gexcept‘V «'¹  Œ‘a %r doesåqmatch 'O  Ž  'ì ¶"%%b%s"' % — ,BÖ7els3Ò# found validÝ l tˆäU J[3:]Y 2 ## ½±an integer,~°previous mkè €()-based/alementƒH €ed a flo\1fraN%alðare always zero her{$Œ  q ¢gm((tt[0],ä Ð «ð
tt[2:6])

PEM_HEADER = "- ðBEGIN CERTIFICATE !-"+ GFOOT+ ?END)  ú1DERŠ ù e  .B(der VbytesÿTTakes‹Àficate in bið8nary DER format and returns the
    PEM version of it as a string."""

' 0f = ð'(base64.standard_b64encode(der_cert_bytes), 'ASCII', 'M Act')q ôss = [PEM_HEADER] Ð+= [f[i:i+64]³ ô i in range(0, len(f), 64)4 €.append(N ÃFOOTER + '\nk ì  à.join(ss)

defö ­ ato_DER A(pem	 _° Ang):š p"""Take ß pificateš à  K  ­ `BDER-"dh -¤ sequence"n{if not ‘  vqrtswithò @§  ¥ñ
raise ValueError("Invalid¥ † ðing; must start M A %s"ë  D  %= ¬Âž –rip().end¤ –¤ %?end¢ j É ?d == Ÿ [G 0>- A \;ï deã ¬As(d.I.e(à]ƒget_serv2³(addr, ssl_pñ=PROTOCOL_TLS, ca~cs=None2°"""Retrieve² ‚Afrom l 2 at �pecified q Aess,üä5PEM›ó.+ DIf '� d' is sS !, O  Cthe y  • ¶ against itE ì H 0useˆ !in´ pconnect„vattemptzÁhost, port =Ó ¤ %if0 ¢  . 7³ Ä • @_reqnÑCERT_REQUIRED? Oelse, ANONE( `contexz ó _create_stdlib_ (ã h |  
™ =
 : dafile=›�Á � Hn)ÌFsockë / ½ `.wrap_  0et( 0  sl 3  Î 0der®   b.getpe R(TrueŽ 7S@_to_l <  !  %åprotocol_name(  l P _*PNAMES} 
/ ð, '<unknown>')
"""Con¥ats/fun[s§ð interpreting resultsù os_1t()&ños.lstat().

Suggested usage: z  1 im™*r ¢

# Indicej ! àstruct members6 9Stuple‹eed by  à

ST_MODE  = 0 @INO  1 1DEV 2 �NLINK = 3 ðUID   = 4
ST_GID   ð= 5
ST_SIZE  = 6 �ATIME = 7 M 8 C ð9

# Extract bits from the mode

def S_IMODE( ñ):
    """Return+ ¡portion of afile'sA ñ that can be set by@ ±os.chmod(). 1""" rU  j • & 0o7777… ?FMT„ '�describes£ l  § _ typeƒ `170000(ðConstants used as • å) for various X ñs
# (not all are implemented on ðsystems)

S_IFDIR½@0o04u Ñ  # directory! $CH! 2! 0cha¾‘er device( 3BLKI 6( Xblock$ 2REG$ 1# 0m qregularÃ H 2IFO$ 0%  $ ñfifo (named pipe)) #LNq 1™ Ñsymbolic link% ¥SOCK = 0o1ß bsocketq ±# FallbacksQôuncommon platform-specific c‹X @DOORX  EPORT "WH p
# Func¦‘s to testd Aeach~ 
kOSDIRlrTrue ifÞi0a§.Ë ×¸1 ==36DIRj /CHj ð#alÔÆ ~ 'CH~ ?BLKè Fz $6BLKø ?REGz œç 6REGm OFIFOn  1 	æs 6IFOs /LNZ	/n 'LNN [á yh  [ ×  li Ldoorg FFals]S³T €n event x[ /WH4È�whiteoutW b# NameŸppermissù :Â@SUID}oá . ô  0bitž#SG   &      @ENFM±1S_I* #Õ º¡ing enforcBM ÀVTX = 0o1000ð  # sticky bit
S_IREAD = 0o0400 ðUnix V7 synonym for ( 0USR0 RWRITE1 o200 # 0 W0 BEXEC/ 1` 
X0 BRWXU0 70 Amask… ðowner permissions� BRUSR/ ¿ �read by .  "  ‰ "  ° ‰ # write#  | # ¤ [execu% BRWXG% !07)™ ]group™ 3GRP/ 4/ ™ . ™ " 2" ™ # X# 1# ™ % CRWXOj  07Â™ ñ others (not in 2 )© 4OTH? 4? © > ª # 2# ª $ X$ 1$ « & �
# NamesÎð	file flags

UF_NODUMP   ‹ "x0 H 0do À Pdump 5  . �IMMUTABL‰. š  " A may4  be changed5 kAPPENDc ò 5 ðonly be appended to: kOPAQUE: 8å ðdirectory is opaque when view@ ðhrough a union stackS ˆNOUNLINKð ã�  ö òbe renamed or deletÍ ‘COMPRESSE½2�QOS X:* ” Âhfs-compress: hHIDDENÍ "80j: dshouldEõdisplayed
SF_ARCHIVEDº 1­ º  BRrchiv2 ®22 ì ® g ®45 ®SK
[  >¡ o [ ´SF_SNAPSHOTá ® @ Ñis a snapshoth@


_[ ð mode_table = (
c ((S_IFLNK,  Q"l"),   6SOC P"s"),LAMust‡ðar before IFREG and IFDIR as IF> 3 == | ^ 7REG{ -{ &BLz : "b 7DIR: d (CH c 7IFO: ap")),
“  ² Cr"),  ¯ w  «¡|S_ISUID, /[ L fY   "S—  : Y x— 7GRP — 
 — 1GRP— G—  — 
Y — ?OTH— 	
 — ðOTH|S_ISVTX, "t"@),
  �(S_ISVTX,  8"T" GXOTH ðx"))
)

def filemode( !):Q Á"""Convert a! 0's  ò to a string of the form '-rwx Q'."""F ‘perm = [] äfor table in _v _ v  ¹  & �bit, char*    $ "if� €& bit == B  "    ~ €.append(M )†    Ubreak JelseF B 2"-"A ð return "".join($ ð)


# Windows FILE_ATTRIBUTE constants)¡ interpretAñs.stat()'s
# "stú_attributes" member

U Ü_ARCHIVE = 32 üCOMPRESSED = 2048! PDEVIC< -64 ÜIRECTORY = 16 qENCRYPTY M1638? `HIDDENw ; ñINTEGRITY_STREAMº -76œ `NORMAL~ 2  ñ T_CONTENT_INDEX‰ =819ÐNO_SCRUB_DATAM M3107& `OFFLIN	=409í qREADONL
Î ÐREPARSE_POINT` -02S#  ¹] = 51 PSYSTE	; qTEMPORA†-25š QVIRTU%Q65536}€If avail`ò, use C implementation
tryß`from _z # ò	ort *
except ImportError, Ppass
Ð`Basic 5 Qistic”ule.

Thi à provides funcv öqcalculaõC ðof data, including
averages, variance, andy ¡ndard deviÐ G.

CW 9 /
-  =

= -    #
F× B  pDescripî g 5@mean[  ±Arithmetic  (ò )ˆ G1.
f 5 ²  Fast, flo~zpoint aL Æ.
geometric_C G p ­‰.
harmon+ # H + LmediÊ M ×(middle valueÄ 3 F_lowÈ BLow  ì  U_high) H  ) rgrouped, „ ð, or 50th percentile,9 , Vø8  þMode (most commonÈ Kulti; @List`   s?  s  u a).
qua‘ st ð  Divide data into iýntervals with equal probability.
= -    ñ

Calculate the arithmetic mean (" ñverage") of data:

>>># ü([-1.0, 2.5, 3.25, 5.75])
2.625
b ñ standard medianR ziscrete[   °([2, 3, 4, R .3.P G ñ, or 50th percentile,\ ðata grouped into class a
. ared on ß p valuesqñvided. E.g. if your§ ð points are rounded to
.õnearest whole number1 Ö _� Þ á 3ç ô])  #doctest: +ELLIPSIS
2.83 ò...

This should beÎ pD å   t @way:° ™ have two¸ iî #
inQ 1.5-ÉBthre�é 1 p 0valö -3ú anB Š X ' Ç3.5-4.5. TheùKthesf "s ì æ �ƒing variþ í�spread
- 
*/§
Function  pDescrip b 0pÞ 7nceb 0Pop™ x  €%.
 1 bSample) K - gpstdev* 7   ^ “PdeviaÒ :/.
:   h 7 	yž7	¤ sò  ´b° !([ÅŽQ5, 11š!11›eÑ4.38961843444€IñAÄpreviously c3d2 ),jQcan p^At as o"ñal
second argument to  fQ"Í3" fis „avoid reo  #itè  ó � = [1, 2 4& )B, 6]Ÿ2u =¤ . ) i( @, mu© WAExce­ sUÄ

A single e  ð is defined: StatisticsError Ra sub@of VK ð .

"""

__all__¾ 
”Ò'NormalDist', V  fk ¨geometric_ kharmon ! 0E  ‘ Khigh 5low 5ode Wultim r u 1qua£s ·À',
    'variôance',
]

import math tnumbers órandom

from fractions 9 F  tdecimal D  …itertool; rgroupby dbisect9  s_left,  Rright-  ® + òhypot, sqrt, fabs, exp, erf, tau, log, fsum= „operatorA ¢itemgetter  Zcolleå @Coun  Â
# === Excepñ===

class StatisticsError(Value Ó):
    pass

D ðPrivate utilitiesZ ó	

def _sum(data, start=0A 5""" # [ ð]) -> (type, sum, c® !)
t ðReturn a high-precision) ð of the given numeric x U as aë,I Ñtogether with8  r ð to be converted 1and  ‡  e  a"s.� AIf o;áal argument ``è R`` is� @, it 2addU  © atotal.Ž PIf ``« 4 gempty,H °(defaulting“  0)M rBed.
Œ �ExamplesR -  2>>>‡ð[3, 2.25, 4.5, -0 ±1.0], 0.75)< "(<¤'float'>, £(11, 1), 5�ÀSome sources°round-off e5P willR‚avoided:� ’# Built-i¹É bs zero°  1e50, 1, -
 �] * 1000¨  007 A), 3/ Ø Æ  s ÔÍàs are also sup=§  † & ZF\  , ÍÐ[F(2, 3), F(7) 	 A1, 4 l5, 6)]¿ t$s.¢ 	t6´ 0)C ? l ˜ Ÿ • D•  Vñ = [D("0.1375"),  E2108 E3061 u0419")]D Ù  I ¹ € .K
¶ 9¸  ­» 0Mix2ypexàcurrently trear ¬n> ú š€ that inC” Pallowù ‡1"""  1= 0 ñn, d = _exact_ratio(–Ã ñpartials = {d: n}5  t_get =  A.get  TR Àcoerce(int, 4W X 0for 0, v.Ss in  2 ÿ ½ R TP ò)  # or raise Typt€  2  b Ý xin map(â w a  3 E+= 1F   ß 7[d]í  ü ¡(d, 0) + n1 pif NoneÍ 4  F Q# The€ì@ NANÃ ñINF. We can ignohlMafinite^ E Y ,œòjust look at this special one#Ð    total = pó artials[None]
  ñassert not _isfinite(total)$ Qelse:
  1 ò # Sum all the pS ð sums using builtin .6 ðFIXME is this faster if we*  M Ðm in order of Õ denominator?K š   =6 ð	(Fraction(n, d) for d, nI ssorted(¡ ¢s.items())Ô ±return (T, P ç, count)


def"x)û 2try	  > Sx.is_0ò)  # Likely a Decimal ýexcept AttributeErrorM Umath.xP ôCoerces to float first.¥ c  Ä S¦ 2"""4 à types T and SA �a common â, or raise Typ’ !.
c@ ðion rules are currentÚ Àn implementayÁ detail. See³? QeTestN  test class”   _s: Rstics°A s+1"""7 #P òhttp://bugs.python.org/issue240685 ÀT] Åpbool, "È1ialð     ` Ib' å  ÎÐsame, no need5bá anything. PutÁ¦ �€, so tha ñe usual case (no B  O S óed) happens as soonI ²as possibleÕ "if´ CS:  oT, òMixed int & othere e±  Æ   Ú K S 2 1or   Z s 6int Su `If oneG âa (strict) subÜ°z  K ·� % �  À8 l(S, T)m 7if # GT, S# OIntsø 
H 7intJ Ú 
m  S,X% o tfo# &�Þ¡3(or ÷ )ø 4T, »)£© "S,B Óp² T. G  c m× 5AnyC mbj «Òis disallowed¿ ðmsg = "don't know howâ1 %s€ "%s`[(? õ% (T.__name__, S )vpexact_rZ(yB"""R­ÐReal number x| / p (numer$,1c) pairÕQ>>> _/ ^ B0.25
b(1, 4)üxàbexpect @be aNt°,Ý C–"»	)p# Optimh š‚"ofçbs. We u F’most ofte! `# usedBeric×uwill bet� s‘ ry$Ðmake this as
  ó# fast as possible.
 ø if type(x) is float or …Decimal:3  ; õreturn x.as_integer_ratio()( :try5 ð# x may be an int, Fraction,u II vral ABC¢ o ð(x.numerator, x.denomin w úexcept AttributeError‰ š  d ž 	þ š subclass˜  8  ( ˜  ' õ # Just give up?N    Apass P ‘(Overflowè b, Valuô )õ #Ñ 1NANi&NFÈ ðassert not _isfinitd  q à ‚(x, Noneiðmsg = "can't convC  I• '{}' to ©/¦"V ’raise Typ¨ À(msg.format(C ó(x).__name__))


def _e  (và 3, TÞ C"""C   {  <n� !icËR T.""} ñ. õT(ðThis covers the cases where T#	² K " i— 3F# a k$ (E"orˆ)~^C Tif isn0(T,(a) and $ ôV != 1½ 2T =_ H 	äð# FIXME: what do we   ð  ï  Cso˜ Tpõr¹{ µ ò ¥   
U ÌC) / j à v  9 Felsen   Dãfind_lteq(a, xu q'LocateÆ‚leftmostDà exactly equal2!x'4°i = bisect_2 N  0f ioRlen(a�–a[i] == x™ à i3 ¢ �	­ r­ l° Origh± 3 ² b, lo=l= ™ ¸ (¹ 5+ 1¾ O - 1Â   Æ rail_neg ðs, errmsg='negat½¯'�P"""It¹ e mˆ s, failing‡°any are les{uan zero¸ƒfor x in; u†if x < 0  ± Statistics(¥  & ðyield x


# === Measures of cent�ðtendency (averages), —–mean(dataè R =ðsample arithmetic 0  ]  3 !.
b1>>> ò([1, 2, 3, 4, 4]¦ 62.8' cfrom f3…s importD áÐF
    >>> meañn([F(3, 7), F(1, 21
 A5, 3	 1	 ñ])
    Fraction(13) 
 ó
>>> from decimal import D Eas D) ñmean([D("0.5"), 
 7 &62 3 { M ¢('0.5625')| ñ&If ``data`` is empty, StatisticsError will be raised.� 1""" €if iter(E )D  	 :  ó   r = list#  n 'en †if n < 1: m ‹  ('ñ requires at least one l bpoint'p÷T, total, count = _sumv dassert 1= nž ñreturn _convert(D ð / n, T)


def fˆ J ³ B"""C0 ˆ ðto floats and compute the arithmetic E .ŠñThis runs faster than0  % a() fun=P ¢it always ­ 2s ao �!If: Qinput� 0setœà"itË 6 ìŽ ”y ó [3.5, 4.0, 5.25OA4.25,2try õß±except TypeS, �# HandleFPatorsú ò
t do not define __len__()à e 0„    ”å(ŽVable)d  ! ƒnonlocalä    0forØåx in enumerateD ›, start=1M  : uyield x‚ &0= fc‹  ‘)‹Felse‘ 	, & G 	EÙÁ }" HËZeroDivisionP7°8ŠCNoneé¡geometric_­ É òD ñRM‚ / i½
u€ containD €zero, or= iÑ ãnegative valueßðNo special effor¦òre made to achieve exact resultsz°(However, t± may changeA Þsfuture.` Heround(Hò[54, 24, 36]), 9&236.ÓWAexp(Ï‘(map(log,ã)jkVï › Ÿ%Q non-4b  E'€   '–�ing posi|�numbers')_oharmon^Rˆ V' ¢ !of� ÍIThe   0, s´±imes called0sub2AraryG ,1theÒ arecipr!o€§  ð reciprocals of ðthe data,
    and is often appropriate wh ñveraging quantities which are ratesG  or òios, for example speeds. E !:
- ðSuppose an investor purchases ñequal value of shares in each ofF óthree companies, with P/E (price/earning)š  J a2.5, 3õ 110.G @What aï eE QratioÍ   ¨ Ò's portfolio?Î ò>>> harmonic_mean([g Ö, 10])  # For× K FmentK ‹ 23.6S  Uss x °arithmetic [ ¡ would giv>° ò of about 5.167,¢Þ Âis too high.\ PIf ``  ``÷ qempty, ¡ Qy ele™ òis less than zero-)``é ò`` will raise ``StatisticsError``× 1"""Œ � justificanbuð \ ê  G Íˆcs, seeF ðhttp://fixthepitch.pellucid.com/ðs-analysis-the-misc -c åy-of-summary-sµ /` ±papers.ssrnW Ssol3/ ñcfm?abstract_id=2621087A €if iter(d)c 	 :  q  r = list#  ¢errmsg = '£ ð does not s4€rt negatÿ!s'> nQ 'enP †if n < 1x ¥£(o º` requil²at least on.� point')p !el` (==a 1x =X1[0]%  í  ðsinstance(x, (numbWö Real, Decimal))¨ 7 Zx < 0   Æ >œ  &   …return xŒ JelseQ M AType°C('ungsed typeï 6try9 `T, tot½ ñcount = _sum(1 / xÍx©‘_fail_neg”#, ¢ £ ñexcept ZeroDivision� e ½ 0½ sassert o 1= n # Ä_convert(n /™ ÓT)


# FIXME:c!igÕ ayp calcul qmedians= Bòsorting? Quickselect?
def * Ð ¯B"""Rf «  ‚ (middle¾)uqnumeric…W] 5  & es5Sodd, ä  ) V & \I aeven, C ë  ] pinterpoAd byP5takuvö{ 8 Ctwo  uÇ ùõ ¢([1, 3, 5]á3R    3, 7# 24.0�Ú  = €"edfF Ü(==ÊÝ3"no¶À for empty dñ	ata")
    if n % 2 == 1:   ñreturn data[n // 2] Felse& Bi =   9 (: ‚i - 1] +H ñ	i]) / 2


def median_low, )V B"""R{ sthe low( ± of numericM !.
r PWhen * `number&  y ñ  points is odd," Àmiddle value â 6ed.I  it Beven3 RsmallV  d Htwo F ` G H 3>>>² Ú ’[1, 3, 5]m3$ 	5, 7' ( 1""" Ò ‚= sorted- wn = len ÍB== 0M�ó	aise StatisticsError("no§ ¡ for emptyX1O <
øBhighº ¬ 
ù  ¡ !ofK òROlargñ& µ (ò	% ó5Ðóh¶]²Sgroup�Ï, interval=1ºò50th percentile (ï)¢I ¸ continuousáB) TA2, 2L84,  [!.7? A52,   ‹4e352.uò This calculates.ž" a Î ñ , and should bex `used w�AyourÑ  Mä  4 Ò 2. I·áabove example,I  j¥4s 1ô òetc. actually representª !idî ZqclassesH à0.5-1.5, 1.5-2	 P2.5-3	 O 9TheÎñ falls somewhere inH T ` 3.5-4<  Æ ü€polationæ ý ãto estimate it¯ Op$ €al argum´ !``? Vval``Ë hl   g„ ñdefaults to 1. Changing 
4 a natur'`will c+ e) I [ º ;ed Ö:‰GÌ D ¸	] A3.25	 = 2	Ž@func9ð  does not checka@therÐ cûás are at leastƒ 	fðapart.
    """
   ð  data = sorted( ×)
    n = len  if A= 0:!  % ñraise StatisticsError("no median for emptyh "[ $elK 1K Qeturn' 1[0]b ñ# Find the value at ðmidpoint. Remember this corresponds to+ G �centre of ñ class interval.$ 2x ={ bn // 2€  ½ ¥obj in (x,2 )µ ÷if isinstance(obj, (str, bytes)* .BType(Á'expected nuÆ òbut got %r' % obj06trys uL = x -Ž ô / 2  # The lower limití ˆ
î uexcept Š ^ ð# Mixed type. For now we just coerce\Rfloat; Ú  •  b(x) -  t )£ 
gð# Uses bisection searchR 
  txr Šó with log(n) time complexityP "AposiS ñof leftmost occurrencýX < ñ l1 = _find_lteqé2, xs{Y OrighZ 
e[l1...8Hò# Assuming always l1 <= l2‰ 2‰ r‰ %l1�  cfŒ1-  02 -C "+  r;6L +@* (nxP - cf‚Áf


def modeì �B"""R@  h6Rcommo‹ iñ  from discrete Qminal4.Ü ``[ @`` aí &es0  Ëb, and ª “s a singlØ0. T¿ isŸæ  QÖdard treatmenÐPode aì ¤ �ly taught2‚schools:�  —2>>>ð ·[1, 1, 2, 3 "4]í + 36 ‰ ¢also works�"noí Ñ(non-numeric)û l È"red", "blue  Pgreen    ‰ R'red'� I°ñ re are multipleÑ ™ ó same frequency,_ F@ fir !nePPencouñ/ed³ u $,  £ @', 'Ã  ¥ *áB* isë$, !, !s"21"""ž ’pairs = C¤ R(iter£ ).‘_‘"(1¯	R C 4[0];âQIndexmã“ ’  ('´ \ �²"')üDNoneA ‰ ë£ Y F@a liz¼ ¿ ¢3tly‘ 
Òs
DWill¾ñmore than one result iO CRor an€ ;if —k ð >>> multimode('3aab ácc')
    ['b']
 ò >>> multimode(', çccddddeeffffgg4 Ÿ, 'd', 'f> * [ 1"""c  counts = C	 òer(iter(data)).most_common(œ 1max2  , “ P_item= Ñnext(groupby(! ps, key=! 0getT Â1)), (0, [])M ð return list(map{ m- (0)b ÿ$))


# Notes on methods for computing quantiles
# - ó
#
# There is no one perfect way tob e` @.  H2 åwe offer
# two–  that serve; ñmon needs.  Most other packag¬ ‚surveyedM �ed at lea+ ðne or both of thesek P, makó ðthem
# "standard" in' P sensž à "widely-adopt\ ònd reproducible".áy are also easø …explain, kñ)e manually, and have
# straight-forward interpretations ðaren't surprising.Ù³The defaultF Žðknown as "R6", "PERCENTILE.EXC",ñ"expected
# valuô Àrank order s~ pstics".èÏ alternativek   L+R7m $INm  ô ‰a  Ë °For sample E! w\ óbaa posi~ ±probabilityÉ¿  ¼abeyondÇArangÓ t"Aata, šR6 exclusÆ ða
# reasonable choice.  Consi„a random¢ rof nine:ps from E Qpopul·ð	 with a uniform distribuÓ0 00.0%P1.0. b*
#% ¸` third 4ked Ppointêñdescribed by
# betavariate(alpha=3, Ñ=7) which has‚à=0.250, median !86—Q
# me  30š AOnly< laŽ" (H ²correspondsë €R6) give° ×Âdesired cut ° 030%	 —-@fall—Qbelowñ—² it1par£€to a resù~ðn inv_cdf() funci£ ÷ µ¡idempotentR ‡V ‘ ¤ 
–B endØ st!to†€ includeÌ< < ‚7 ‚€&
#‚`InsteaâH  šr, it usiÌQ ÿF ê mU3ior´ ð.  Per Hyndman & Fan, "One nicÀ€propertyg‚ F `verticLáf Q7(p) divide� tÂinto n - 1
#ËAvals[Õ exactly 100pš  $ @ lie i “left of
#g  0à100(1 - p)% ofñ the intervals lie to ð@right of Q7(p)."

# If needed, other methods could be added.  However, for now,T ð
# position is that fewer op ps make 3 ñeasier choices and/ ð	
# external packages can{ Aused< Àanything mor’ óvanced.

def quantiles(data, *, n=4,Ê ð='exclusive'):
    """Divide *2 *.ðo *n* continuous B€with equ¡ Árobability.
L ÑReturns a lis]ð(n - 1) cut points separatÁ 	�D 1Set~ Ato 4ï AquarÒ   (0 ·default).  + !10, 0decü .Ž 	   Rperce ° which give«@e 99¦ s§  ¾G °   C3100Ãsized groupsÄ %Th. ½Áany iterableY0ainbsample°  6 (Âare linearly�`polateˆ`tween °¯ y BIf *´*‚0set¬ 3*inõ%*,æQs treO aô @pula¤ó  Y 0.  ‘ Ðminimum valueT 6  �F0th VÉeF ?max; 
*10= 1"""> ‚if n < 1¦ ªðraise StatisticsError('n must"Áat least 1')D  È ‘ = sorted ‡ld = len Ÿif ld < 2p n Uhave p 8two�~ #ifvU == '„'b m‡ d"¯ å ¥esult = []  1ó i in range(1, n½ 2   ðj, delta = divmod(i * m) F  ( 
G!=  a[j] * ©D 1) +Í `[j + 1  9/ nM r« ˆ.append([ f q r + > 
�1+ 11 G "1 = P // nH  #¥ `cale i4*m/í  j = 1 if j•“ else ld- >   j  # clampH A1 .. Ì  „ R ž *m - j*� 
 1actg•9athN { Ö W ¾Ú  „ /) Ö3œV%—“f'Unknown2: {™`!r}')
nÀ=== Measures‰ spread === ðSee http://mathworld.wolfram.com/Variúp.html
#W1 À//mathworld.ðwolfram.com/SampleVariance.html
#  ð	http://en.wikipedia.org/ ó/Algorithms_for_calculating_vL ð
#
# Under no circumstf ðs use the so-called "computational formula 4
# S ð", as that is only suitable* e hand Œ ð ons with a smalØ ðamount of low-precision data. It h` @erriS ñnumeric properties.Õ `See a ± `arisonP Qthree Å ómethods here:
# RÑwww.johndcook…óblog/2008/09/26/[ 1ng-W -I @-of- uh-L‘dard-devi8°/

def _ss(Ñ °, c=None):
ÐÐ"""Return sum³ usquare ? s requence
: €If ``c``u Q ,¼@mean pðed in one pass, Œ ä` M Ffrom@  � 
A �a secondF È. Otherwise,© 1areM ; X § ´as given. UhS BcaseAcareMait canM ñ	lead to garbage results. 1""" @if cö @not \ `±T, total, ceñ = _sum((x-c)**2¡x# œ)M  7 r”(?  @c = aÉ ! ` @# Thqllowingùðshould mathemati€ðy equal zero, but due�rounding® ò # error may notUö 2— %2 ø _ - c)÷ Ñassert T == U(2=;2o M2 -=VÇ2 ** 2 / lenK  Ž0 á< 0, 'negativeò =of ër: %f' %\ o ˆN|u o, xbarV ìsN° Q î.H   €0be ?1ter¾òof Real-valued numbers,­Áat least two¬ & !s.Þ#op3�argument£ B, if,r  £  V1 ofH    • a. If iU@miss+!orß
ëFauto4}à npis func– ¡ when yourO 8#a $°Qa pop9Ron. TÞ X '€ 1  ² gentire: ”, see ``p, #``’ !Ex‘"s:�2>>>‰ £= [2.75, 1 b25, 0.    A3.5]( 8 \ ’Â1.3720238095 g  Ifô Õ have already–!edÖ † ( ,  ‹ø �!as|  ò äë ``� ``¬„avoid re? Æ$itú À>> m = mean(ðdata)
    >>> variance( 2, m Â1.3720238095 
2 ð4This function does not check that ``xbar`` is actually the mean of
y  ``n ö``. Giving arbitrary values forK ñmay lead to invalid or‘ òimpossible results.ª ñDecimals and Fra² òs are supported:+  bfrom d4  U 3rt C Q as Dm  ) 0ÿ[D("27.5"), D("30.2 4# ‚41.75")]c^ Ë('31.01875')� f¶ ‘ Ç  ’ F’  ‘F(1, 6), 	 2	 D5, 3s @ ƒ(67, 108q 1"""M qif iter
)À ¥:  µ  r = list#  n 'en †if n < 2: ôraise StatisticsError('KÀ requires atèqst two p rpoints'3±T, ss = _ssp  , l ôreturn _convert(ss / (n - 1), T)


def pu A ‚mu=None)­ B"""RH  ²apopulaê6 E of ½¯§ ñshould be a sequence orPa��of Real-ßö d numbers, with÷ 1oneU& €. The op� öal argument mu, if given, z  ³ e   � 0. IÙ Ñ@misso0or ö ,™ ®�utomatic³@calcþ #edQYUse tÿ5to & J &N € ventire J.à  To estimatT e… 9 ‚a sampleŸ $``W &``{!isI "usaó a better choice³ !ExH sè � = [0.0, ³ �1.25, 1. `75, 2. Q3.25]k  ý
>y 9 
öIf you have already!d"   ‹ ,2 Òcan pass it aÙ  =ûfsecond´to avoid re� Ö'ité Amu =té« Ã B, mu Ç ™:>=;6_24.819&‘ 141	 M1, 2:o13, 729J1Œ s9¹ : 7one:9À, ss = _ss(dñ&ata, mu)
    return _convert(ss / n, T)


def stdev(d5 ±xbar=None):= B"""R@ ñthe square root of  ñample variance.
7 dSee `` ó`` for arguments and other details7 3>>>Ž w[1.5, 2 ò 75, 3.25, 4.75]Ü ò1.0810874155219827€ 1"""ˆ Uvar =� ä ? 2tryç (’var.sqrt(# ýexcept AttributeError5 Bmath6 4varXpY/muW¥population¾ $[p\"’ ]ÿ0.986893273527251\‰ ]v[GÒ## Normal Dis– '# !!_nQ ð _dist_inv_cdf(pCs, sigmañ# There is no closed-form solu®!toilase CDFü +e ˜ # k Rñion, so we use a r÷±al approxim ‚ instead{ð# Wichura, M.J. (1988). "Algorithm AS241:± ð  Percentage Poi�½‹ N ó!".  Applied Statistics. Blackwell Publishing. 37J ô(3): 477â€“484. doi:10.2307/2347330. JSTOR  : ±q = p - 0.5 òif fabs(q) <= 0.425ø ¨  á180625 - q * q6   õ# Hash sum: 55.88319_28806_14901_4439. rnum = ( õ2.50908_09287_30122_6727e+3 * r +7  i  ÿ3.34305_75583_58812_8105e+4)8 	ÿ	6.72657_70927_00870_08538 ÿ	4.59219_53931_54987_14578 ÿ1.37316_93765_50946_112¨ ð1.97159_09503_0655Eà 
ÿ1.33141_66789_17843_7745e+28 
ð3.38713_28727_96366_6080e+08 ë6den½ÿ	5.22649_52788_52854_5610½ÿ	2.87290_85735_72194_2674MÐ3.93078_958002A71_0o õð2.12137_94301_58659 ½ð5.39419_60214_24751_107œ ðr +
              ô6.87187_00749_20579_0830e+2) * r +
+ 	 ÿ4.23133_30701_60091_1252e+18 
E1.0)R Õx = num / den òreturn mu + (x * sigma6 ñr = p if q <= 0.0 else 1.0 - pC  # Âsqrt(-log(r)9 @if r3 A5.0:'  Î  + ur - 1.6 ö# Hash sum: 49.33206_50330_16102_8903/  ¿ 2= ( ÿ7.74545_01427_83414_07640e-4M	ÿ2.27238_44989_26918_45833e-†ÿ2.41780_72517_74506_11770e-‡ÿ27045_82524_52368_38258e+0À
ÿ
3.64784_83247_63204_605049 À5.76949_72213 Ÿ691_405509 ð4.63033_78461_56aO29599 ñ	1.42343_71107_49683_5773« ðEden Áp1.05075ÿ16_44416_84324e-9Á	ð	5.47593_80849_95344_9460ùO
ÿ
1.51986_66563_61645_71966úð1.48103_97642_74800 9úð6.89767_33498_51000_04ˆ30676¥ÿ 8301_83803_8494ˆÿ
2.05319_16266_37758_82187ú, ä¶55.0Æ#¶õ
7.52583_31754_92896_71629/ 	¶@2.01aÿ43992_92288_13265e-7õ	ÿ2.71155_55687_43487_57815e-5õ 24ÿ09473_88078_43860e-39 
ÿ
2.65321_89526_57612_30930.ð2.96560_57182_85048_9129 (ÿ78482_65399_17291_3358õP5.463Ø ï9111_64114_369¶À6.65790_4643J åA7772r Á	¶‘2.04426_3Çÿ 89939_78564e-15Â	 "`151_17/0164 88?7‰
`1.8463ÿ 175_10054_68180û 7.86869_13Ÿ56132_591)@4875#0290Â�61_48525ûð1.36929_88092_27358_05ÿ 310e-1) * r +
  ÿ	5.99832_20655_58879_37699 A1.0)S Ñx = num / den ±if q < 0.0:  x  & !-x ñ4return mu + (x * sigma)


# If available, use C implementation
try:H pfrom _s Pstics) òort _normal_dist_inv_cdf
except ImportErrorœ ápass


class N9 BDist "  J @ribu€ ð of a random vari« "‘ ð# https://en.wikipedia.org/ /N ˜ N 8 Vf ñ nce#Properties
9 Ñ__slots__ = {  kò'_mu': 'Arithmetic mean¹ 	Ò '',; Œ > ÑStandard devizA }• òdef __init__(self, mu=0.0,é=:` ® d u` wherebis the· 2and9   sš .€ O #if- €  uraise S1!('ó ò must be non-negative'â <  É ü ._mu = float(mu H    )@_amethodl $ ¿0_saÝÇs(cls, data)Make a ³ 0 in0ce F  F @ 
dnot is- (a ÷ , (list, tuple)p  ç  " 0 = " . ä @xbarý  K Ñ@cls(& q, stdev%  ,  ) ÷ ¬ s÷ n, *, seed=NoneŽ Ó"Generate *n*â ×s for a given	sgauss =².  &0eedR w T else" RÛ(” )/ ³ #muÄ4 =  ¾ Alf._ð* [o (8 )Á @i inn bge(n)]# 3pdfx	°Probabilitycs @funcŽð.  P(x <= X < x+dx)‰x£5nce³ © u ** 2.0° 0if ,- … ÷ 8 ¯ )7 pdefinedÀnwis zeroB…exp((x -Aô )**2.0 / (-2.0*ƒ )É †sqrt(tau .c.QCumul¾	å 2X2&x)& Õ" „ û0.5 * (1.0 + erf ‰  ! X2.0))JÛ3p3À    """Inverðse cumulative distribution func	 ó.  x : P(X <= x) = p

  ñFinds the value of ñ
random variable such that åprobability ofL F 2 �being les^ âan or equal toI p   # ue givenM d .¯ EThisÚ ò  is also called› Æercent point* µor quantileb ! 5""" @if p100.0¼ •p >= 1.0:!  Añraise StatisticsError('p must be in– `range K <V  I %')J ãif self._sigmau i òcdf() not defined when H  at¹ §below zeror ð return _normal_8P_inv_P #p,Ž $mu
 P )†5defK s(¸ f, n=4)° €"""Dividþ óto *n* continuous intervals withíR¦ €s a list›£(n - 1) cuâ�s separatm €_ 51Set† bto 4 fr0s (4 ·default).  + !10, …deciles.®	# $ pu ( a whichÌÖ 99® s‘  %atK ¼ e$Œ
Ä ?So 100(·sized group’ ·Ú[™.Óai / n)Ï i“�v(1, n)]ÖsoverlapÔZotherÖbComput® - px€coefficixÿ(OVL) between two Ø  s�pMeasure€e agreemH B  %	&
2^F  z0andx › µ  ùÅ farea i€    ¿ punderly3 	� 0ensÿEÓ  ¡>>> N1 = NcÖDist(2.4, 1.6ú* 2* �3.2, 2.0*  #1.¶ :(N2 õ0.8035050657330205i"Ã# See: "The K Æaumš x˜Z )# � s rˆ`estimaŽ N  [z  'woO /`ñies" -- Henry F. InmanY ÷Edwin L. Bradley JrF õhttp://dx.doi.org/10.1080/036109289088301276 !ifJ±isinstance(,Ã »ÿCTypeù±Expected an< ;  V ‡aX, Y =o!, 1 � #(Yð, Y._mu) < (X._sigma, X._mu÷):  # sort to assure commutativity
  µX, Y = Y, X €X_var, Y õ = X.variance, Y . qif not 5 1 or ; :#  p praise S… ñsticsError('overlap()8 õdefined when sigma is zero')N  dv± � -w  ðm = fabs(Y._mu - X < ­ +dv� ðeturn 1.0 - erf(dm / (2.0 *C ‹ `* sqrt &))S a# n *3"- ~ *ž b* M 4Y._ X @dm**r ±+ dv * log(H" /H t õx1 = (a + b) / dv"x2 - rä (%qcdf(x1)) 4) +C 2 2ù l ödef zscore(self, x)SÑ"""Compute thõpndard S0 À.  (x - mean½ astdev
U  (ñ
Describes *x* in terms ofK `number 2staU ¥deviationsD PaboveŒQbelow9  n  7  � ð normal distribu< .< 5""" õ # https://www.s¼öhowto.com/probability-and-$ 1/z-/N | /ú2 ú "f!êfn !muj3elfz ps@proper Ó 'ÑÎ¡ArithmeticµG	<… € q Mdians R­ ® me" u t "od¶å (""t ?oder Í  ´PThe m- !isgpvalue xÁ�re which (X dens‡@func„ñ
 (pdf) takes its maximum U ¢fdeSCô .gÃO9{ EquarcÌn 
r ** 2.0u  ¶ê__add__(x1, x2Ö�Add a cone t‘another NaDist i 2ce.T  ÚAIf *( *ƒB ñ, translate mu byà` ,îsleavingÆŸunchangedb � ’, add bot= •Qs andk TsÀMathematicaló#ly, this works only if the two distributions are
  ãindependent or4 y# ö jointly normallyF 5ed.A 5""" ñif isinstance(x2, N< eDist):'  { greturn  À(x1._mu + x2	 q, hypot asigma,  %))L H 
 , U 3 
3 àdef __sub__(x1S ˜ ñ"""Subtract a coÉ wanother¯  ç .Y  Ô AIf *( G* isB á, translate by•] 1mu,™  @ �leaving ± € unchangl" b _4, s»  õ0meaéand addr @vari—s» MathematicßAµ-(/muA- H A?mulAóMultiply both mu andÑ'by7òUsed for rescaling, perhaps to � measurem©GunitÈS s ? qed withôòabsolute value o|	ÄQ * ÑQÂ * fabs(x2))\truedivoDivide¿//1posuR
 q$py¤^]™¤=negl pNegates˜¦while keeps :_same.v 	- _  « Ñ__radd__ = __
 rusÏW from/ œ…¨ P-(x1 º” ¬” 
 ” !eq"H, x2’8Twoêaobject7c equal& irHà#arÙ% œ oif notQtImplò%edð x1._mu == x2._móu and x1._sigma == x2 ñ


    def __hash__(self):   ð"NormalDist objects * ò equal if their mg c ‚are both% %."N areturnA (j `._mu, t ’ ())” Nrepr” F qf'{typeH ò).__name__}(mu={R qmu!r}, •   ÷F!r})'
"""A collection of string constants.

Public module variables:

whitespace -- a= @tainH µall ASCII w, ÿ 
ascii_lowercas< + slettersC ?uppC + 
C   À ) 
digits0 ‚decimal 0 B
hex
 : Khexa> ?oct> 6octv qpunctuaÝâ - acharack�printabl¨6 Auidered A 
qã

__all__ = ["Ö4",   Á  ¥capwords",ZB   "$ ! o  >  Ž   K ¯ ( F z  òTemplate"]

import _7ƒ

# Some	ps for c¤u-style !¡ classific�Jó = ' \t\n\r\v\f'ëô= 'abcdefghijklmnopqrstuvwxyz/ .ô = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ/ Ý3 = ‘€# + Q ç= '0123456789'à=ó$ +© ' … %'
� š B ('
}õ= r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
Í v Ã T8 + [ +ˆ@
# F@ions ñ ch aren't availô#asÍp methodÀ# Capitalizeþ Œ5 inð, e.g. " aBc  dEf " -> "Abc Def".
sÆ (scp=Nonez6""" € [,sep])C i ›QSplit� Óargument into�  us�s$ 6, c± Aeach6 ¶  &  ,-AjoinY  dW @  % A.  I0 opf¥al second “  sep is abs¡ 0or ç ¸@runsum"sŒÀ replaced by]aingle rƒ  Ù@leadê   ðtrailing whitespace añ4re removed, otherwise
    sep is used to split and join the words.
. 1""" €return (> €or ' ').1 ñ(x.capitalize() for x in s.Z  1 o))


# 0ó
import re as _re
from collections " �ChainMap(  ñ

_sentinel_dict = {}

class Template:ï Â"""A string    Ù 0sup€   ¡$-substitux .(: ñ delimiter = '$' ð# r'[a-z]' matcheszònon-ASCII letters when™ówith IGNORECASE, butK   1outª? òflag.  We can't add re. 0to   Ãs because ofI ðbackward compatibility.  So weˆ d �?a localG )Ë 0 paµ #n.N ñSee https://bugs.python.org/issue31672- #id< ° = r'(?a:[_ b0-9]*)8Xbrace. 2NonÅÓ =.'
_ ádef __init_sub¾r__(cls)Ü~uper().( )D  $ Cif '© 'ÒQcls._9&__J  * & 0 = $  H 3elsV ,   $ ¾ `escapeŸ .  ;„  . #idY 
[   b  /!or� 6 ¥ P = fr¼ J  {‰ :}(?æ b  (?P<° #d>% ¡)  |   # EÈ € sequencgQ two K  Ô sµ L ³named>{id})| L 5 o1a PK0 id¾KfierL  {{š ÿ @d>{bP #}}˜ L & L  J „invalid>– � 0# OI¶ ill-formedÞ Z exprã 
Åd% ‚Cile(–,¹ä|ä�VERBOSE)â“_(self, t¿äDelf. % =# D �# Search²V$$, $_F, ${ "},‡²ny bare $'sC i,‡ 'mo� ãi = mo.start(') '€lines = Â © B[:i]; æ(keepends=True< qif not $ 
§™colno = 1% )  ˜; ¢i - len(''ä = vs[:-1])‚    V  .   s  òraise ValueError('IWÀ placeholderXg:Ì @ %d,Ði %d' %Â  p  (m !no,  noað     def substitóute(self, mapping=_sentinel_dict, /, **kws):
  $if. J is 1 &  - U e = kws@ @elif , Õ_ChainMap(kwsš )@ ö# Helper function for .sub(% çdef convert(mo¾  ˜ õ# Check the most common path first.n  0 ñnamed = mo.group(' W') or vbraced'…  < 1if -  ,Šnot Noneú  & ³return str(5[6 ]M „ Pescapp [ Ùelf.delimiterß  ÑÚ Ÿinvalid')V  6#._-  b	R óraise ValueError('UnrecognizedK! iwitern',D  	 s 0pat, : ß  ý!, 7 ¡template)
d  Ïsafe_substitäcØJ>tryí Ö·ñ + ¡except KeyLP 
! C 	â8jø ¨ 8‰ã# Initialize TP.s€  __initR�class__(Càautomatically  ‘ed
# only¸1sub0 @es,   Ì ˜b   1 itÈ
 .o  O


# 4!
#AFormq† ñ 
# see PEP 3101À ódetails and purpose of this5 ñ
# The hard parts are reused fromk ÀC implementaÕ . 6 py're exV ðd as "_"
# prefixed methodsq Sstr.
k poveralln 0serÉ\ àed in _string.òformatter_parser.
# The field name  ö is implemented in _string.D 6 _6 ô _split

class Ff ¢:
    def 5 c(self, P ð, /, *args, **kw
 )9  = preturn 9 #.vF  @  2 #, : 
s .  ; t 	4 n Pused_ � = set()N ˆ qsult, _ Dlf._` Ž %, Q 6, 2M  “ •.check_un# (
  , „ Ô  �    reŒ ê ‹  X ë 
	‘ õrecursion_depth,ì  k  @auto‡_index=0˜;if @ F < 0J @ òraise ValueError('Max G> ¦ exceeded'!â U = []– òfor literal_text,¶€õ ¡pec, conveÛ  ¹\C  •    (.é(¾"):U $   Ä# output the|  | 	R $if ˜ 
 G Î ˆ.append(Ä )p  ifl bre's aà ,„ ,itv € ¯Žnot None€ @# thÐÐs some markup? ndn é object and doe  ¾ !# % )Jting´ # `handle· ,âing when emptyÊ ªÍs are given.k 'if* n == ''Î  q :if œ OFalsþ   0   Ž0can5òswitch from manual† - '¡  H  ñ'specification to  _maticM  Pnumbemw ù=P(H5 
$ ] += 1à )elƒ—.isdigit(ùS ‡® 3 ~¸p# disabïuéqrg incr+ý ing, if it getsa #  later on,_An an	p@�will be 6dF Ï!= ÿœ À given the fûield_name, find the object it references
  C#  a0 qargumen2 �came from1 ðobj, arg_used = self.get_f„ ( Š €args, kw )I  @ _ T.add(R -)
) ñ# do any conversion onã “resultingí < 4obj¤ > ¨ Ç   Q w 4expýformat spec, if neededo ' _' @autoá d_index‡ "_v% (=  š A @,/ Da, recu�_depth-12 
• = “ oR @appe8o ˆ£  ., (*N -…  4)� ò return ''.join(K :), ² 
/@def „Qvaluei Q, key©ƒ:¡ áif isinstance(* Fint)!  Œ‚  £U[key]> Oelse+ ë- ™ …check_un­¡  § Gpassâ *cD ñ #,  Dš Á  (+  \  «#, 2  &\ •!(ifÃois NonIz p
: f== 's'Œ ­2stré p.el> r> ?rep? a? \ascii praise V™èError("Unknown ¹Óifier {0!s}".´{)­"# ×ðs an iterable thatQ ñ tains tuples of� L -A# (l3 `l_text,8ã{y ‡(# 9 ó can be zero length& œÿ$  äà, in which cas® ƒere's no7 ¿3 toË•coutput# 7if ] i= tA,âÄis looked upt¡s#  withZ á _ ä  Pthen ”q  RDparsN E—at_string)�  ¸Ater_= *r(8 Äwgiven aÓ  � Q¹.– '# 2 À:   the fielðd being looked up, e.g. "0.name"
    # 	 @or "3 Uup[3]%  used_args:- ð a set of which  ° have been , ]   @, kw ñ
: as passed in to vformat- ñdef get_field(self,  _® ,e J !):3  ‹ òfirst, rest = _string.X 2terO C v_split(T %)
F `obj = u .„ cvalue([  » y 3 #YÒp through the… !of g u, doingl  # è pattr or @itemeneeded( pfor is_) 0, i2 å ú  þ $if# 
   Ô 0getB …(obj, i)^  " Oelse8 fobj[i]ï qreturn G ò
# This file is generated by mk‰ò2prep.py. DO NOT EDIT.
"""Library that exposes various tables foun*Ahe SÙðPrep RFC 3454.

There are two kinds—A :¦0s, I©� member t/ü	is provided,
and mapping3  � functioní 8 Ì ð

from unicodedata import ucd_3_2_0ß   

 ! 4 @.uni< P_versg À== '3.2.0'

1in_Ø @_a1(i (ifz ’.category# £ != 'Cn': ÀQFalserc = ord(  ñif 0xFDD0 <= c < /F0<  M @(c &% €FFF) not¤„(0xFFFE, `


b1_/ `ñt([173, 847, 6150 5 6 `7, 820# 1204 5 ú88, 65279] + list(range(65024,65040)))(b(´ ó  ­ š  £ p3_excepàðs = {
0xb5:'\u03bc'Î adf:'ss `130:'i "07 !49, °2bcn',
0x17.  Qf0:'j- I $34Y 9! `37a:' ! !b9= 1390N 03b9 !08 1- b !c5 	 "c28 "c3, d, "b2X "d1  #b8  0 5 3  #cd 4 b@ ¹ #c6  6  0  ê  – #ba p "c1@ fp   fP b€ 1587P  56Ü 1582F p1e96:'hX 3H p1e97:'t 0Ê q1e98:'w | z1e99:'y ¡a:'a\u02be� @1e9bq 21e6]31f52^1¨ 41f5¹  ™ 1313W õ 41f5& ª $f5# 4Ù !f8n @1f00Q  þa 0x1f87J1f01 … D1f02  i!f8µð1f03\u03b9', 0x1f84ó:'\u1f04\u03b9', 0x1f85 5 6 6 
. 7 7 E 8 0 9 1 a 2 \ b 3 \ c ¸ d ¸ e ¸ f 
¸ "90 2¸ #91 
¸ #92 
¸ #93 
¸ #94 
¸ 9p2¸ 9p2¸ 9p2¸ p¸ p2¸ p2¸ p2¸ p2¸ p¸ p¸ p¸ ap6pap6¸ ap6¸ ap6¸ ap6¸ ap6pap6pap6pap¸ p¸ p¸ p¸ p¸ p¸ p¸ p¸ bB7pbB:03bpbBD03ac�˜b+. #429b+ 4 µbÕ  mb¾ ~\ c¡ 
µc¡ 
‡c¡ em c¡ .  ¡ \ ¡  
4 ¡  ¡ d�  ¡  . !08 0ò d– 9  11',n d…   … 	d…  Q  en cœ 0n en 	 n e
cÂ#13¢ e… 4 h …  h  f… :1f7öf ¹ !fy 
ƒfy . \ y   8 K 2fƒc   P 0x20l!rsÑ t2102:'c  ’ Axb0cr2210] 425b!  �Dxb0f Db:'h c q
0x210d  n c110:'i$ '11 C2:'li T15:'n$ T6:'no D9:'p Da:'q1 Db:'r c d c20:'sm1 s21:'tel3 d22:'tm D4:'z 8 Å D2c:'ù &2d&S30:'e0 ð 31:'f',
0x2133:ô'm', 0x213e:'\u03b3 f #c0 ñ45:'d',
0x3371:'hpa „3373:'au S5:'ov @80:'' 5 T81:'n4 "82_ %bc E3:'m S4:'kan d85:'kbS E6:'m E7:'g Ta:'pf4 Tb:'nf4 cm  c90:'hz P91:'k § P92:'m  ê V93:'g E4:'t 'a9Þ Paa:'kì 7 Vab:'m Ec:'g cb4:'pv¨ Tb5:'n/$b6¨  E7:'m E8:'k9 9  û wÏ bû  û wr Ed:'m Ee:'k f Pc0:'k#c99 Tc1:'m æ cc3:'bqw Ôc6:'c\u2215kg d7:'co.A D8:'d®dc9:'gy( bP Td:'kk4  ¡ ¥ƒ33d7:'ph' d~p  r5 Tdc:'s6Rdd:'wv rfb00:'f�fb01:'fi4 �fb02:'fl\ @fb03' i 4  T5:'st6 6 q 0xfb13¿“574\u0576? (14 $65 5 bR 1:57eE 7. dE 01d4Ñ 5  21:'H   E2:'c' 3½0 0x E4:'e 25:'5  26:'¼  27:'m  28:'  A9:'j°    ùN 2b:')  #c:`  Ed:'n4 Ee:'o4 Df:'p B10:'Rr1d411:'Ô  E2:'s' E3:'t 24:' ' 25:'$  26:'Þ  E7:'x4 28:'~  D9:'zœ E34:'R!35R83âA !37R
R'38R!39R4 aR3çh cR!3dR4  ôh fRh '40R4P' '42R!43R4 4R År4  ½ 7R4 8R!49Rœ '4aR!4bR4 cR!4dR4 '68R!69R4 '6a¤!6bR4 cR!6dR4 eR'6f¤'70R £¤T72:'kê  ¯¤'74R7� '76R7zA 8R'79¤'7a¤!7bRÐ '7cR!7dRÐ '7eR!7fR4  >¤ >¤'9cR'9eE'9fE!a2+h #a5cÀx1d4a6:'k', Ò0x1d4a9:'n',  ra:'o',
 Eb:'p Ec:'q Ee:'s Df:'t4 Tb0:'u Ub1:'v E2:'w E3:'x4 E4:'y D5:'z Ud0:'a D1:'b4 Ud2:'c E3:'d E4:'e E5:'f4 E6:'g E7:'h E8:'i E9:'j4 Ea:'k Eb:'l Ec:'m dE8!deER'dfE'e0ETe1:'rh 'e2R!e3RA 'e4R!e5Rh 'e6R!e7R4 8R!e9R4 6504R1505R4 6507E1508E4 9E' aE150d+ e+4 f+6510+1511+4 !12+4 &13+6514+651615174 81519[ a151b4 c7538'39!3b4 !3c[ '3d'3e!40I4 '41!42A '43!444 6' a÷ !4b÷  c÷ 4 d÷ '4e÷ !4f÷ 4 !50÷ 4 '6c÷ '6d÷ &6eZ756f'70'71'72!73Zh !74‚ '75'76!774 84 Ÿ"57Ÿ Ÿ4 Ÿ157dZ' ¬'57¬'58¬'58¬'58¬'58¬'58¬'58¬'5a¬'5a¬'5a¬'5a¬'5a¬'5a¬'5a¬'5a¬'5a¬5½¬'5a¬'5a¬'5a¬'5a¬'5a¬'5a¬5Êñ5Ê¬'5b¬'5b¬'5b¬'5b¬'5b¬'5b¬'5b¬(5b¬d¬d¬'d6¤d¹d¹ûd¹d¹'db¤'dc¤dÓ Êþ5Êl°5Êþ5ÊC5Êo5Êp4 Ó Êr' à ÊP(5eà ÊP(5eàeàeà!edþð608:'a', 0x1d609ò:'b',
0x1d60a:'c',  Eb:'d Ec:'e Ed:'f4 Ee:'g Df:'h U10:'i D1:'j4 U12:'k E3:'l E4:'m E5:'n4 E6:'o E7:'p E8:'q E9:'r4 Ea:'s Eb:'t Ec:'u Ed:'v4 Ee:'w Df:'x U20:'y D1:'z4 T3c:'a !3dRE'3eR!3fRl'40R!41R4 '42R!43R4 4R!45R4 6R!47R4 8R!49R4 aR!4bR4 cR!4dR4 eR!4fR4 '50R!51R4 '52R!53R4 4R!55R4 '70R!71R4 '72R!73R4 4R!75R4 6R!77R4 8R!79R4 aR!7bR4 cR!7dR4 eR!7fR4 '80R!81R4 '82R!83R4 4R!85R4 6R!87R4 8R!89R4 ¤a8:'\u03b1©#a9 2 a 3 b 4ì#ac 5$ d 6 e 7 f 8H #b0 9$ #b1 K#b2 b$ 3 cH 4 ¬#b5 ±#b6 fH 7 %c0H  c b 86  c b c b c b c b c b c c c dü ~ e ´ e$ $b2Ø e ´ e 4Ø e ´ e %b6H  b´ e e b´ e %baH  bÔe b{e bÔe $beH f bÔf@ Ôf Ôf hf Vf  ÔH  Ôf  Ô`f Ôf  ÔH  Ô#70ü  ~ H $71 Ô#71$  ÔH $71 Ô$71 ˆ7®ðÔ#72 ð b6', 0x1d722:'\ðu03b7', 0x1d723:'\ B8',
 4 9$ 5 a 6 b 7 cH 8 d$ 9 e a f b %c0H c 1$ d %b8 e %c3 f 4H #30 5$ #31 6 2  3 c 3 c 4ü ~ 5 ´ 5$ $b2� 5 ´ 5 4� 5 ´ 5 %b6H  Ô5 5 b´ 5 $baH 6 bÔ6 $bc� 6 bÔ6 %beH  bÔ6@ Ôv6 c 6 h6 V6 c 6 c 6 c 6 cÔ6  Ô�  Ô8ü  ~ 9 ´ 9$  ÔH 9 Ô9 ˆ9 ´ 9  ÔH  Ô9 9 Ô9  ÔH  Ô9  ÔØ  Ô9  ÔH  Ô9@ ÔH a Ôa ¨a  VZ a  ÔH  Ôa  Ô6  Ôa  ÔH  Ôbü ~ ò)}

def map_table_b3(code):
    r = b3_exceptions.get(ord% )% ñif r is not None: return r   V �.lower()
v 32(as Jal =� ag pb = uniH ó
data.normalize("NFKC", al*  C š"".join([Ü ò h) for ch in b]1 c[ b[ ’if b != c $í cí Melse #alñ #inf2c11B, #~ == " "1 21  ‚category' G €Zs" and 3 µ X  ïˆ ?_c1[ #£ 2Ô ,a < 128� · ñ Cc"

c22_specials = set([1757, 1807, 6158, 8204 5 !32 ð3, 65279] + list(range(8288,8292)) + lö
ist(range(8298,8304)) + l ¼65529,65533 p119155, ò63)))
def in_table_c22(code):
    c = ord  ô	if c < 128: return False 0uni@ Òdata.category? … == "Cc"8 2Tru7 H üc in c22_specials
œ 1  : u Q or \¤  × &  Ö u v 3¿ q <o"
½ 4G Xe0xFDD0#	[ x   F  C(­  & 0xFFFF)á ( $E, ž 5ž å så ´c6_set = se–}4_6h  ´   P ]


c7Y ®12272,1228Y 7Y P  Y 8Y ñ [832, 833, 8206 *7]Mœ8234,8239KG8� †  � 9� k917505�   ž36,917632³9l c ô/d18  JÒbidirectional, L�"R","AL")R 	<F R  áL"
__all__ = [§Q# Fun| s ô'calcsize', 'pack P_into $un 
 r_from',> Riter_ 1',
 ƒ# Classe` fStruct PExcepü   aerror': 0]

\ 1 _s4 Ÿ import * ¿_clearcache  õ_doc__
# subprocess - S  es with ac ðible I/O streams
#
# For more informa· ñ about this module, see PEP 324.9 òCopyright (c) 2003-2005 by Peter Astrand <a	 ñ@lysator.liu.se>F ñBLicensed to PSF under a Contributor Agreement.
# See http://www.python.org/2.4/liO R for  ÿing details.

r"""&
T° allows you« cspawn s°es, connect ð their
input/out @ pip+  qobtain +  ü ¤  ’ña complete descriO8 of•”Qthe PP docu'Ä@.

Mc àAPI
========
rðun(...): Runs a command, waits for it to ðplete, then retur2 %
  1Com# ôdProcess instance.
Popej bA clas\ öflexibly executing„ ² in a new pP A

CoR Dts
- ò
DEVNULL: Special value that indicates ðos.devnull should be used
PIPE:É E 
ga pipe< ÿcreated
STDOUT: „ dstderrD  go\ôstdout


Older API
= _
call¤*¢3the´× code.
check_] �Same as  ô) but raises CalleÕqError()U (ifT “ is not 0\ coutput» ^ w d I ¡ ±contents of` Gˆead of aq I
gete 
Ä @ V _shellÑk 	Õ 6 Y  c bstatus Î i 5pa (exit’", b ô) tuple
"""

import builtins Terrno i
 o! Dtime  esignal y% „hreading uwarning! �°xtlib
from V  “ �monotonic3_ F ±types

try:Z1 Ápwd
except IÖ I# ­pwd = None7 ?grp7 4grp7 Ñ
__all__ = ["m@", "Ö  Ÿ 
  Ý ‡  8getå!",¹  E   "f + 7«  0run #  ›P 3SubÑ ) àTimeoutExpired L("]” Á# NOTE: We i3QionalGñclude list2cmdlinÕZit isB Ñconsidered anG @rnalàþlementation detail.  issue10838.Ýamsvcrt` ïq_winapi ô_mswindows = TrueÒáModuleNotFound	2 QFalseI \ eposixsG YselecŠ  ‚ors
else` Ï£  ò  e÷(CREATE_NEW_CONSOLE,  ÙPROCESS_GROUP") àSTD_INPUT_HANDE   7OUT ² 0 
  , VERROR> oW_HIDEr 
²ARTF_USESTDu US, ST ’HOWWINDOWE À              ÿABOVE_NORMAL_PRIORITY_CLASS, BELOW 
B  MHIGHK LIDLE C � REALTIMI PCREATà ÿ_WINDOW, DETACHED_PROCESS,† = óDEFAULT_ERROR_MODE,  ñBREAKAWAY_FROM_JOB)
P ó__all__.extend(["1 èNEW_CONSOLE",  � _GROUP"– ò "STD_INPUT_HANDD   8OUT ƒ ˜= Ä = oW_HIDEp ²ARTF_USESTD6 S¸ %ST 2HOW[D 
oUPINFO# … n ‡R „  J † B ƒ D …H ùO‚ C „< � E Y ƒñ "])


# Exception classes used by this module.
 õ SubprocessError(= “): pass

) xCalledP, < !):€`"""Rair ñ when run() is cA ó
 with check=True and the † C òreturns a non-zero exit status.k¢Attributesx r  cmd, < Ácode, stdout ±err, outputc 1""" údef __init__(selfB S 7 B=NonT 1err ñ  q : .{ ' =ˆ h % Pcmd =« 
 d ( =¤ 4 €stderr =Ñ 2err º 3str¹ Ž <if ‘  g 4< 0; k Z  try   Ö ` "CommF ’'%s' diedË…%r." % (Ï  4  v H�signal.S 1s(- _  °)))D eÇa Valueœ› ‚unknown x ? %dª › š Jelse‰ Á   /edÁŠ 07elfUc‘@property”  ç¾ð"""Alias for output aóttribute, to match stderr"""
  ñreturn self.output
 á@stdout.setter 0defA @out(/ ‘, value):  O ð# There's no obvious reasonƒ ÷set this, but allow it anyway soH .~ ð is a transparen6 „ias for ®  y    “  " =› ó


class TimeoutExpired(SubprocessErrorÂ ð"""This exception~ òraised when the tJ ! eK ñ s while waiting˜ aÇ cchild f .SA‘s3Rcmd, x,] Derr,m Q ´ …ƒ__init__‡D ™ M T=NoneJ  æ +‘cmd = cmd_  H ) =~  « # =´ 
< ^  =É 2errö ± 3str° ˆ |á("Command '%s'x d` õ after %s seconds" %q  ’   .À "))~ ‘@property9  Œ Z7 ‹ C ä @ / ­Ãif _mswindow~¶STARTUPINFO• 'dñ*, dwFlags=0, hStdInputZ O= m ž	  6 q% q wShowW”  U %lp!2Lis[ ¢ K Ÿˆ $ =’ 	n #  j   & =¬ ' · (  ) º (  ' Ñ ( =ß + í < =  òor {"handle_list": []}–  ¥LcopyÊ  Aattr5  Œ Ú] .9 )— Gif 'o U' in H  _    [6 ]Ê Oist(  ˜ C   ‡(à=Ê ,«  9  ò7  9 ÷:  ; 
:  9 (;  = Ë=ið)


    class Han³dle(int):
  õ closed = False
 Pdef C b(self, ñ Handle=_winapi.   R  Y pif not ; .b r       u = True}     a ‡ )  bDetach 
` € 4¢return inte 	¡ òraise ValueError("already ò "® ‚__repr__K 
° i ±"%s(%d)" % & ö.__class__.__name__,Ž ` ’__del__ =¨R
elseb `# WhenŠñ%ect or poll has indicated that the file is writable,ñ �# we can ó"e up to _PIPE_BUF bytes without risk of blocking.C åPOSIX defines = ’as >= 512( V �= getattr	dect, '5  ',1 þ #Ñ @/selà AhaveÊ �advantageŒ  ‹ñrequiring any extraï Ÿ ðdescriptor, contrarilyé e1à/kqueue (also,b "y R ’e a singl¾¢# syscall)Ñ  iflÈ 0orsË AollS³ 7or'<d_Popen # =¸Wors.P3 µ ä +: O  ôor


if _mswindows'BOn W  ïpjust neoÐ! `œ 1._h0` wXÁwe no longer0 › †# it, soZakernelF�free it.Q Bgetsl dF ’mplicitlyn  ¤‡ ‘` instanc°�finalized72e `”.`Ç@hichà ¡ `aA` asÔ essin [1])Æ !erh snothingž àfor `_cleanup`,"doö#" ó[1] https://docs.microsoft.com/en-us/ˆð /desktop/ProcThJ/G ñcreating-processes Ó_active = Non» ·“ (YIpassñThis lists holds ÞV s Þ w1 vpunderly5… @ hadå‹ P# exi7I0timä#s ƒÀ method got }£ed: those N Tes arC�wait()ed„ ösynchronously from á Sa newÁ 0obj	i#!# <0ed,Ÿ·avoid zombiy ³M"[]fK >z!is{C †  Ì   H ¬C in e <[:]3 1s =|°._internal_xõ	(_deadstate=sys.maxsize)^  b `if resØ é 	^ À     try:
    ü_active.remove(inst)
& ýexcept ValueError:#  3 ñ!# This can happen if two threads create a new Po" �nstance.R ðIt's harmless that it was alU "y º ¿d, so ignorL ðpass

PIPE = -1
STDOUT �2
DEVNULL ’3


# XXXÍ ð2function is only used by multiprocessing and the test suite,
# bu°  Ã 0ere¢ Â  %òbe imported when Pythk `compil „ithout
#Eò.

def _optim_args_from_interpreter_flags()¦ð$"""Return a list of command-line arguments reproducÐ  Ì qcurrent›p 1izañsettings in sys.q A."""+  • Q = [] v6' =( K e 2if " 2> 0±  K C .DÒd('-' + 'O' *+ ¡rÕ Crgs
 6 S,ä @warnâ 1ons  #_x $ 2 Ä�_map = { ú Õ'debug': 'd',  # 'inspect i 2terÈ ð'dont_write_bytecode$ BB q'no_sit S averbos v  I  s_è !inª b Aquie¦ q @# -OC@hand×/inÂ }  Ü/ =6 @for eP, opt¨  rU.item" wÀv = getattr(² . !s,B o %  ¬ ¨   š 
¬ r Q* v)
º !ifR Ÿ.isolatedë"I'o Felse$ 
C å€_environº) � EQ   	G qno_userûA 	#s'È @# -WMAionsÙ  CoptsÝ   "[:ü	*' 	 N #
‰5, '=R', {}ðdev_mode = ('dev'âB ° 9if f F > 1é ® sú!"eÙâ:BytesWarning"m ,elK G �default:I 4if ¹ B 'B ¸ È P4in ³ < 
{W(3opt ð# -X options
    ifÃ dev_mode:
  ñargs.extend(('-X', 'dev'))# ð
for opt in ('faulthandler( °tracemalloc Áimporttime',= c  Ð'showrefcount. @utf8 ¶oldparser')– $ifv †xoptions  O „value =  Y[opt]t 2if % gis Truò  @   Parg =g 	8 ?els, ò '%s=%s' % (opt,a ( Q   O aarg))
e preturn % ð


def call(*popen  , ?àout=None, **kw ð"""Run command withM àuments.  Wait ³"  to- �plete or„ a s, then ’ 3the ò code attribute.¸ 6Theh @ are= � same asq  A PÆ ò constructor.  Example:H 1ret` =ø Â["ls", "-l"]G1"""¥ Ú P 	 w p6try  ‡risp.wait(ó = k  ' ðexcept:  # Including KeyboardInterrué F  ùqd that.¦  C   vp.kill(X   ¡# We don'tí  Œ q) againÁ á.__exit__ doesY M*us` Traise1]heck_7))Q.  Ifà  Õ ¡  µ€was zeroü9Â, otherwise ¦  û ñCalledProcessErr
 D ñ object will havZ} Ã{  inu ¢/ 7P funcSžc[šÃ»„À  if°  ¿ “ bcmd = Ó`.get("Ý"90if $ 0is  9 = +&[0ñ{- Cw(® ,V f W0Oioutputk,ˆr`
 œh Bits ^ K!IfË
WAnon-["itG?s aÏ  a.  The^ì J ƒ r ‡ Ä Òš   J ì· ¬ +  # Ä  Ë2argw(B>>> ui (wµ, "/dev/nulbb'crw- r 1 root õ1, 3 Oct 18  2007 < Ð\n'

    The ñstdout argument is not allowed as i ñBused internally.
    To capture standard error in the result, use stderr=STDOUT.
A ñ>>> check_output(["/bin/sh", "-c",' 0...o  ÿ"ls -l non_existent_file ; exit 0"]; s‡ )_ ^b'ls:L ¡: No such Z ñor directory\n'
; PThere5óan additional op	 X¢, "input",[¡ing you toG  pass a str !to=Àsubprocess's>qin.  If8 …use this¹G  R 3mayÂ!sox ˆÐPopen construÂ ¥'s "stdin"B A, asF àit too will beD 	ú¢  Example:Ä 1sedÀe ¯s/foo/bar/”t=b"when;ôcourse of fooman events\n"µ. 8bar. ¨qBy defa�Ðall communica¨ ÀÐin bytes, and¤refore any»`should
/ Õ return value<$ ¶ ‚ext mode›[  W ‰ Z ' • Pdecod®SccordC°locale enco ”, or by " ´" if set. T˜ M Àis triggered1 @settS  ¯ ‡of text,V ðs] òuniversal_newlines&2"""Y 2f 'o'åqkwargs:  Úpraise V@ED(- ¡×™,—¢Òoverridden.')•Aif 'Vk Úv [ ]ûFNone‡ Ð# Explicitly ˜ ü K =) ð was previously equival;%to0 %an× s# emptyÜQ. ThaQ±maintained DfŸ ac   ds “patibilitm $0if ! Žgs.get('r ')Š$  °&')à  G ’ E= ''§ 7els% b& Y >=Ý t`run(*pq à,ºàout=PIPE, time  ,þC=Tru z  "**o ").6P


cl) CoBtedPs(objectå S"""A 9  tnóhas finished running�TD#isdñ Á )  •Attribute© Õ  : The listn0str¤sþPed toe "()þ \  ¢8 ¡   Ý ž­ °, negative csignalD GB m6! (š!if"’d€ ò: Àard error (Nñone if not captured).
    """ ò def __init__(self, args, returncode, stdout=Non 1err !):D  P  ; .: ! =A 
 M ' =Z 
% f # =o  2err Aerr
 ½ Crepr½ ‘ Œ  ['	 Ñ={!r}'.formatç ¬ !),G  À  '« 5   %)]; 1if þ À !isp - _  ‰ ’.append('- c   /))_  _  ¥÷ gstderr_ Ó ” "{}({})"$Atype)ð).__name__, ', '.join(Ì "))†ñ__class_getitem__ =  pmethod(K òs.GenericAlias)
:  Àbcheck_†  nu :ð"""Raise CalledProcessErrorÛ�the exit <  tn-zero.â {£g a    rb � .6 ,ê þ  ¯H V  ' ‚0


ÿ ¡run(*popenU ö%npr»@_out ¶False, time–G= @**kwO  Cð un command with¤puments  â ¥ a Completh¢ instance.²3TheÀ%ed ð will have attributesb G q ç ‹Ä. By defaultj #   ð1areP!d, Hthosn Q ‡ 0be {`. PassE  $@PIPE8 0/or   ´in order to!S themî 1If X X@TrueC    r waïsQ, it K1s a’ ´ . C w objectK Úr…ÜP !in  òq## &æ �2if 6qstreamsQ Dwereú dö \ ø Rgiven]  ’ p€ò takes too long, a T�qExpired^ ’exception× "bei  Th~ iƒ! o(  al7™0 "iñ", allowing you toZ pÝ byh€or a str" !to 3sub¨ 'qin.  IfA `use thu !rgi P  [ 1mayjRalso ' 0e P›õ constructor's "stdin"« 2, aNiÀ be@  !ƒternally[ë1all“Qunica%ais in Ö qPreforyyb shoula+be/ ð  stdout and stdð+err will be bytes. If in text mode, any
    "input" should2 €a string$ ±d stdout an Z & ‘s decodedN ð	according to locale enco ”, or by " ´" if set. T˜ 1 isH �triggered1 @settS aany ofÅ ,V `errors] ñuniversal_newlines.
O ñThe other arguments are the same as for ñPopen constructor.C 1""" iIñput is not None:  Nÿif kwargs.get('stdin'),  0 Àraise ValueEÇ 3 o™± 1mayr @both¨uused.')| y [u ‚] = PIPEÿif capture_output³ 	:out´  \^ × :err$ Q Ø H‹Ú  e Õ % 'Ô  L  ['withÐ 	 Ë 
I Ë ) Ç   v \ 0(*p ÎB, **6 )+vprocessó 6try  g 6,> 3#= 3 Ñ.communicate(á£, timeout= Ñ‚except T  @Expijas exco ^ Vkill(A  Š Çif _mswindow²     2# W Á accumulates( 6ña single blocking) >  ð# read() call run on child th 1s, Y qè E   beçBdonew `join()L @thos¯L 8.  G
ð  “ ¢# _after_  €Arequ@âto collect thaÚoadd it’  !toŠ2ion d  Dexc.î ò
« 7els;Q —# POSIX _ä 0 alú Qy pop£ X#e £/soº  cfar inÀ CÏ JKwaitJ¬j D  :  # Incluâø KeyboardInterrupt,ªp handle¼ *atJw °e  ¢# We don't^+ ¢  �Á.__exit__ do½!atÎ*use 
Á 0ret¸ œ)po> 4Aheck�. 
wQ ‚ CalledPÆ. ,÷E	×  Û  Õ=T`stderr 2err@ãreturn Complet{ Àss(process.añrgs, retcode, stdout ñerr)


def list2cmdline(seq):
    """ ð"Translate a sequence of arguments into a command H : ñstring, using the same rules as áMS C runtime:
7 E1) A\ ðare delimited by white space, ách is either aA "    ¢ or a tab.Y R2) A • ’ surroundU ô
double quotation marks isP €interpre…  as
Uingle e€gardless¦ C ñcontained within.  Ar $ed• Àcan be embedš Tin an@ pÍ 3Í ¸ ` prece@ Ðby a backslas(L Ï �literal Q r D4) BL  Á reúC aly, unEtheyr ¤mmediately  / ao 
V5) If¾ Oes iD ,x  every pair— N ¹¿ ÖÄ = /  . Œ  Â_numbeL Aodd,ÒMlastA r escapeôOnextû % arÁdescribed in31 3.W  ˜	 S# See
 ó&http://msdn.microsoft.com/en-us/library/17w5ykft.aspx< ¯or search F C for. A"ParÐRC++ CóV-Lineµ8±result = []; @needa‚e = Fals» f¤ rgå ³map(os.fsde¯Œ �bbs_bufP Q   P# Add� � to separ­EthisŸQ fromžo(eB if ¨ ô S    Â.append(' ')B  È @(" "» @arg)nI("\t 0not… ° 5if @ s 
"s  %ch 
6 Êif c == '\\'  « À# Don't knowë !we~  (é2yetV /  jþ %c)¾  ! %elt "s L<.esb `¢\\' * len({ :)*2u  y      P  ?! Oelse ¢Normal chaà4 2if t 9  ' t 0ext$* ¶  *  º chÛ`remain@Q,Í6anyY¬ À           róesult.extend(bs_buf)

  Õif needquote:   r9    " 0app[ 3'"'X ò return ''.join(' ð$)


# Various tools for executing commands and look ñ at their output òstatus.
#

def get # R(cmd)Ë B"""RŒ £(exitcode,I H) of| âmd in a shell. E› e� @ str� W'cmd'* Ò with 'check_€ '¤ J²a 2-tuple (¨ „ ð. The locale encodd qis usedC Pto de¸ … a  ` ó process newlines³ pA trailG  1 is½ —pped fromJ .d  „   ž –4the�ó can be interpret› Qaccor± !toT BruleÔ > ò
function 'wait'. Example:\ã>>> import subÎ �    .ÞÑ'ls /bin/ls')1 Z(0, ' D 2catE DjunkG †1, 'cat: ó: No such file or directory5 i — 	e y27, 'shf Ÿnot foundV skill $$3 s(-15, ' 1"""2try
 ³xdata = ¬ ,,ô³=True, text Òstderr=STDOUTk G  +’1= 0e âexcept CalledP˜½Error as ex� 2ex.É> S 2ex.7 c ! 0if º Ý[-1:] == '\n'T " A:-1]3 B  ª ,A -}  û '  ¨@doutñ.MLikeŒ3),   ‘ f¡is ignoredÐ  · Â Pvalue»a½PntainÚ , -#'sÐ/. a(÷ ([W• V¨ ì  xB[1]
iö_use_posix_spawn(mC.I if  h ü„4 » requires aE idQmenta}@that,€perly reqsÍ e¢ ‰¼Qparen*  Vñ, & sets errno on$ `follow�ƒfailuresÌ#* öÁ attribute aý s + "edi0* FG  %()0 ¤ �Prefer an+&le× Qwhich1°use vfork()—ðsome cases for bestñ
    performance. 1""" ñ!if _mswindows or not hasattr(os, 'posix_spawn'):5  R W# os. Q() is> •available, Ñreturn False
 °if sys.plat˜ È == 'darwin'c ` a7 ñcall on macOS and properly reports errorsk  ­ � 3Tru€ ñ# Check libc nameG rruntime qversionD 6try— Pver =þ ñconfstr('CS_GNU_LIBC_VERSION')9  } ¡# parse 'gn ¢2.28' as ( ¦', (2, 28)3  paÅ ñ = ver.split(max	 &=1& qif len(- f) != 2¥ y ð reject unknown k%at™  $ Àraise ValueE4 ¬ =» Uts[0] ó = tuple(map(int,* #1]± b'.')))î i òalinux'{o =% k ">="4 S %# R4´€ a new LV  ;õ implementation using vfork× P _whichNp to theé 0ent& BcessO ?   i    ñ# Note: Don't useF ” £in earlierÕ @beca, –it doesn'¸#E À “ (even if6 ð2.26 added a pipeµ #$ Ù )Ú òexcept (Attribut',3A, OS<Ÿ )X$   vw4Bpass>ð# By default, assumC(atä!()'M ð Ï ¡‹÷

_USE_POSIX_SPAWN = _use_>ð()


class Popen(obUí ñ""" Execute a chilŽsgram in’2pro+o0For+ o•¡te descripš!of@argu¯@s seë Áe Python doc È.A- ýð args: A string,}Ða sequence ofº  g J ð  bufsize: suppliFs’ PbuffeO  5 5a) funcÃ 2whe4 ûp  creato aÀstdin/stdout 2err¥Rfile Xõ1  eV H Í areplacÅÀ #to% eÁ b ", c Yñstderr: These specifyÔ a e°±s' standard¨Á PinputR  s output[  n Å °handles, rel etivelyŸ 0prev a_fn: (w“ only) Anÿ  W0be ã edB 8W Fœ ¢just befor&( ð is executed.

   ðclose_fds: Controls  áing or inherit ðf file descriptors.

D ñ'  shell: If true, the command will be executed through% 9 G ‘cwd: Sets ò	current directory before uhild isW E ²env: DefineH €environmL Ñvariables forI ¦new procesÏ GtextÎ Ðdecode stdin, @out Û �stderr us  ô ãgiven encoding #€(if set)T ) õ	system default otherwiseÆ àuniversal_newlÌ °: Alias of   ,¶ QvidedË �backwardsx¥patibilityP ±startupinfo» ôcreationflags (Windows only)Öúrestore_signals (POSIX$ X  ¤ �_session& _group aextra_  a Ouser: _umask @passÓ �àerrors: Text må a handlâPo useoÚpobjects#‡µAttributes:B 	V^ð err, pid, returMe/ 1"""  _cý_ÃÐed = False  #<ò here since __del__ checks itÚódef __init__(self, args, bufsize=-1,X ,a=None,z  Ë º   ù 6out 2err 7 0pre2_fn" oƒ =T=2 %=å S, cwd8 3env
 - K  #  F	/=0è  ¦  ù¡ t �p=(), *,D ø‰ 
 K ž   ¿   F=-1)g@"""Có e ñô Popen instance.Y Û¥_cleanup() �# Held whÿPanythais caltwaitpid ·— has beenL Aupda`o prev–pclobberV < 0if Y (5’poll() ar ª #€   °rom multipl reads at oÝ Ñ  After acquid  �Flockì!# â�must re-0 .� Áto see if an± Ê‡ead justá ¡finished aÀ Qpid()« .% [ _Þ @pid_Œ # =N •ing.Lock(‡ Š �_input = �J  lAunicÓ_›, ð if bufsize is Ngone:
  õbufsize = -1  # Restore default, óif not isinstance(: j, int)U óraise TypeError(", ° must be an6 xeger")
d ª_mswindowsR ñif preexec_fn is� NÎ  Ù } DValu~ : âsupported on Wq % "‰  G  Å"platforms"). ;elsUu# POSIX"  L  Â ±ass_fds andÁ Pclose 
í  / �warnings.	 4("p; µoverriding > Â.", RuntimeW7 �  L   - | = Trueœ ¿startupinfo_; _only a: À þif creationflags != 07ý
6 ?is   7DÀself.args =  
 €stdin = ¯ ?out ?err ?pid �returncodÎm e  8$=  
Ž e¬ Ã 	 ˜ñ# Validate the combin‹‘s of textÓõuniversal_newlinesa Aif (( »4 @   6^bool(h )  e )�¢Subprocess•@'CanÓ�disambiguà ’when bothÖ '�  …  '˜ “ A areŸlied but M àdifferent. Pas®Ae orxwother.'1b# Inpu}0out ðobjects. The general principle\6likþW# thil#ñ @# Paˆ ñ g Child) - )   ) áp2cwrite   ---€--->  p2§T pc2preadU <+ ±out---  c2pD W :err, 1err, ;err, 6 "On¦,]cÔ  >¼0filçscriptors.  On@ 7? !se3   ; `handle7  ‹pMa G  '0 %dek  –…o!. ÑF 
1-1 ¿ Õ usêðPIPEs. The child oó bjects are -1
  õ	# when not redirecting.
! õ(p2cread, p2cwrite, B c2p <c2p 2err 1err ñ) = self._get_handles(stdin, stdout Ferr)€ Ó# We wrap OS 5 õ *before* launching the child, otherwise a« ð# quickly terminaç 1 ð could make our fds uns WpableC ·(see #8458)"åif _mswindows:/  a%if6j != -1  # Vò = msvcrt.open_osfí  €?Ü.Detach(), 0)f ‰e  d   c 
Ðc  c   
c Ç ðtext_mode = encodØÐor errors or "   øuniversal_newlines1`How loÁo resume waiñCon aöQafter7•first ^C.� ð# There is no right value f† Phis. # q purpos) ¸to be polit4 yeZ‘main goodA ðinteractive users tryí æto exit a tool� €_sigint_Ì ÷_secs = 0.25  # 1/xkcd221.getRandomNumber(KF qclosed_,`_pipe_ñv= FalseG"if­ s•
»ïif bufsize == Ø  –p_bufferÚ V= Tru ú  Q# Use…pdefaultV Afer Z m�e underl"åbinary streams± L   a# sincR ðy don't support ‘ ^ â /  Ï  ! Jelseý    O 	à @–gid = Nonõ ‚if groupWt 
Y !ifŠúhasattr(os, 'setregid'),  …  raæVšE%q("The 'f €' parameæÈQed onu"A V 	 ÷"current platform"R * ñelif isinstance(}  Ér±   Ñ  Q Õ W Ó 0canµ@be a dÎ  ` ñ"on systems without¬grp moduleã  6 Ð0grpbRgrnamê ‰).gr_gidJ?int Z ;oupE xCTypeòGS@must€ðor an integer, not {}"
  ù.format(type(group)))
7 ¹if gid < 0:  Z ðraise ValueError(f"GE ÷ ID cannot be negative, got {gid}"e µgids = Nonea ‘if extra_” Ps is M  $ 
† !if òhasattr(os, 'set7 *')- ³ h"The 'n ´' parametery Jð "supported on the current plathõ  ‹ øelif isinstance(„ _, str¿ qQs musmqa list,aE <ingy r%[]p � 8foru8 in sK¾ ½  f  O rpXÍ    [l"Items– g¤] €"stringsª1sysY qwithoutºK ¬grp modulegn  oÐ.append(grp.g 8namñ™).gr_gid)“ B &_, int%  7 u Y` .seÜ C ƒ3TypÝ‚zV >0"or¿ Beger®° — 	´Û ºò # make sure thaÛ Ð are all posiš° here so weQ‰ do lessŒ # checking„ àVC cod´ œ  DAgid_+  (  o ^ & Z M €^~ 	d?uidc &usâŽ[_reuidZ e R 	.2"rR | �oif pwd‰‚- V #ép_ "on  ˜ SÌ0pwdI pwI ’ ð ).pw_uid
        ñelif isinstance(user, int):
!  `uid = " 	 Nelse- ðraise TypeError("User must be a string or anp yeger")
Z 0if t ?< 0` CValua fb �ID cannog ønegative, got {uid}d :tryY úif p2cwrite != -1  ôself.stdin = io.open(5 ù, 'wb', bufsize)Î  > 1if A �text_mod9  ' $ e æTextIOWrapper( !, ¬ í_through=True,u  R   line_buffe= ; ”encoding=	 0, eÛ"s= 
î ¯if c2preadJ7outK5 O, 'rJ9e K?outý <?errý 7errý 5 ý =e ý ?errý -	t ò_execute_child(args,  �able, pre ï_fn, close_fdsˆ  ÅApass* Ÿ cwd, env4 ð	startupinfo, creationfla“ _shellC  p28 %d, 3 Ê1c2p§3  ?err3 ïrestore_signalA gid, gids,], umask› DÆ_new_sessionïjexcept+ñ# Cleanup if the � failed M Iing.8ùfor f in filter(None, ï[0std°Jstderr)¯ Þ ?  !f.p(Â     Ê 1 OS´
Ò       �ð  # Ignore EBADFÇSother.È ‘½ _| dA_pipøk "to* Y = []' …  H„n= PIPE@  & D .8ðnd(p2cread)
      ÷if stdout == PIPE:
  ý
to_close.append(c2pwrite). Q ?errQ ?errQ ÿ
hasattr(self, '_devnull')­  7 .5 ² ¤for fd in æ W /ry  &ÿif _mswindows and isinstance(fd, Handle²  B   @fd.Cg(¦     Oelse‡  " 1os.¬?(fdG ïexcept OSErrorM Ypass
áRraise Ádef __repr__™Û 1obj I = (@ Bf"<{Žû_class__.__name__}: ", Âreturncode: 7  Ñ} args: {list€ . V)!r}>H  tif len(š j) > 80û  4 =  Ç[:76] + "...W ‡ & _Ó Ágetitem__ = å òmethod(types.GenericAlias)9 ‘@propertyÿ  Xñuniversal_newlinesâ b.# $ À as retained @an ag à of text_mode î1APIl  .õ# compatibility. bpo-31756# ï ¹I ¼ ‡ q.setter> Í ,Â  á 
m Ž = bool(n D i ª_translate7�, data, eK`ing, eøsn  ! ! =( 0.der(. Ñ  2 4 ø.replace("\r\n", "\n")  /§ __ente6 X  ú 	. 3xitc`, exc_I÷, value, tracebackÎ  ƒBelf.Ù
å ^  &	$ +er 8 ðtry:  # Flushing a BufferedW%ar may <2 an~N R± *in°   | -in{ kfinall˜%if( …�KeyboardIwNruptb ù# https://bugs.python.org/issue25942²  — Ð# In the casee-a k ¡ we assume* oSIGINTJ  ð!was also already sent to our child processes.  Wu ?n'tJ  ðblock indefinitelyÐthat is not uû ser friendly.
  ÿ*# If we have not already waited a brief amount of time inJ  °an interrup; .C ÿ() or .communicate() call, do so hereL  ïfor consistenc¹  ðif self._sigint_m ­_secs > 0:R  ÷ ?try   M  F (â Bout= ` )\ ÿexcept TimeoutExpiredn MpassH p þ = 0  # Note that this has been doneØ`return8 Presum: ´e KeyboardI¦
„ p# Wait {ð
the process to terminate, Úavoid zombies{ Ã E)\ Àdef __del__( ó , _maxsize=sys. €, _warn= Pings.	 )?!ifœ A Ü._child_creatcð # We didn't get­ 0sucÆ bfully 5 1 a D â 
Ã :h Æcode is NoneŸ  @¡ <ting sub?³exit status€ 3s a>‚ e whicht P ð is only destroy� üõ e parent pythonC  h 	B S'("‹  %s¼ òstill running" %HIpid,?  … Ð  ResourceWar/ ",  
‚# In casg]0has‡¤ ûed on, check if it's½àDànal_poll(_dead?$e=:x �± and _activ± ÛµCMÀ, keep us alA Puntil'1canj on it9n q.appendî²get_devnull @ßqhasattr 4, '. '	 •&K ã = os.open(os. , fO_RDWR,Áí[ ¤³stdin_write� Winput|  ´  ¸  Ž U£ R .R L 	`2ú BrokenPipeError]  a  + È
CÑmust ignore bC p pipe eE •j !OSb ~ as exci  if �.errno ==K žno.EINVAL.  › Á# bpo-19612, ø30418: On Windows, n) failùL Rwith o    ƒJJ Fr 	U J ð     # process iÿs still running but closed the pipe.
   Mpass ]else:  > eraise
 :try( ±self.stdin. %(), úexcept BrokenPipeError?  Ž ñ  # communicate() must ignore b? Ñ   eA sØ b !OSZ z as exca  if �.errno ==C šno.EINVAL*  î  � À   9def½  ó, input=None, timeo )s ñ"""Interact with process: Send data to [B andÞ6 itÿ 3Rea) @from+ 1out, östderr, until end-of-file iýôreached.  Wait for„  y ¦terminate.þáThe optional "å õ" argument should be½ @be s  to•YTchildl R, or *Rif no= L A  9  
5ð	returns a tuple (stdout,Gerr)È ÷ By default, allÁñion is in bytes,N`theref�5anyÆ  « 
3 �   w±"be[ Ç  Ifp átext mode (ind
Pd by Q. _ )’ y|| “ °be a string( dƒ % •s decodedB `accordQàto locale enco ªDby " ´" if set. T½ I ³is triggereÇ  ttW pany of Ñ ,Z Ú5 orA ÷universal_newlineø6"""•„ Flf._±ion_startedÁª{ ÙÃR Valu—€("Cannot±dÀq after I  » 	` &")‚  # OptimizaÀ: If we are Q Pworri‰ bž s,# uhaven'tô #m (ed’Ì0we 0 @ one3AzeroPs, us  gselect�#( pthreadsÖ@unnec6ary~Cif (•  $  Š4 » |X¸  Q[- ¯,µ€#°err].count(f g) >= 2 F 4 ! =	` Ó | 
æS   _ q_write(¨ % 'elF ?outG  N( =Ü .[q J   =out   	n +er " î K ðerr.read()
       öself.stderr.close()
 !    Gwait Yelse:& ûif timeout is not Non$  V 0end( @ = _ D() +9 	P b 
>  ^ 
2 :try“  1 ‚stdout, à " =Î ð_communicate(inp" ™ ,Ž 
þ	except KeyboardInterruptr ù# https://bugs.python.org/issue25942¸  § ð# See the detailed £ ‚ent in .~.7 u c asigintu ¥a= min(Ü_  f m_secs,i  A  A ‘remaining_ (K)C @ Ö  „  Ÿ Z  › š ' p = 0  #ˆPhing x € should L K>™  _5 (� =•  æ  -T~Expired* ^ MpassÔ Praise¿ Rresumz
ýofinall¿  Mðúion_started = TrueI 4sts&
ô H éÄ Šreturn (y")
f �def polly)ó#"""Check if child process has terminated. Set and h  Ecode‚ Õattribute.""" ) ÿi¿Anal_Œ � _â  _$, Ñ
± ø onvenience for UP whenÃ0put€+s“ $ifY  3 Ñ`  ³   Ç  É& £ $ -Xr _c\œ1out|Ô R, ori¸)tout_seq5 �  ™  Cskip_ Aand_ºk=FalseÞ-’  Dif asíe/* ¤ ?if ˜  ¥ ŠD() >{Mz
¹(X ø IKargsA- Ðoutput=b''.jow– Y)ò,  © ò„Ç	I 0err: I  I ÞÀf wait(self,ó timeout=None):
  ò&"""Wait for child process to terminate; returns self. …code."""L $iff € is not m l  s 0endŠ @ = _ D() +5 H :try5 p | `_wait(<  Î  )< ú	except KeyboardInterruptQ õ# https://bugs.python.org/issue25942S  · Ó# The first k\ $ i]  ” ‘s brieflyL3theP+toJ ±exit under & ñommon assumption that it also received, +^CL ñgenerated SIGINT and will f ‰rapidly.6 § ô asigint§¡out = min( _  ÷ i_secs,a  =  = ‘remaining[ ()Ä < Jelse´  x ö# = � 	Ž u # p = 0  #¦Phing p q shouldÎ
3’�  
�f   Ò šTˆ~Expiredã IpassÀ Praise« aresumeß
3 ñdef _close_pipe_fds±Ÿÿp2cread, p2cwrite+ 2c2p+ ?c2p+ 2err+ 1err+ q#´tdevnull*æalways defined~' Ò_fd = getattrÔ 3 '_ !',i) ›ðwith contextlib.ExitStack() as s 
{Úif _mswindows  Q  if" Õ n != -1"  & X `.callbl ] .C’
 . 4if KU 3 V vV 3 V  ð zFz  7¯/_f÷  ?1os.Ì� D Cs ª… 5  † &E ‡ A b !-1‡ 
   ‡ &j ï =6if S VÀt None:
      ôstack.callback(os.close, devnull_fd)

1 ñ# Prevent a double / õ of these handles/fds from __init__ on error.N aself._A Ðd_child_pipe_< b= Truez åif _mswindows:? #
 " W † methods 
 “def _get_¢ (~ q, stdin 1out Ferr)e  ú ÷"""Construct and return tuple with IO object   ; òp2cread, p2cwrite, c2p 3c2p 2err 1err ¶  D 9""" "if¶ � is None“ lstdout 4err 
Ó  X Æ ^(-1,  ö - É # =5 	œ Ý ' ñ ' 	O ë Å ˜ ñ = _winapi.GetStdHˆ( ùSTD_INPUT_HANDLE)g  á  if¤ ‡2 ( q 7, _t °CreatePipe(’>, 0a = 3 =   N . ½ C’1 _+ %el#== PIPE#„¹ ¤ 	@ Ž  '),Ð Á¦ 	DEVNULL©   = msvcrt.¯2osf²±.Ãœ/()g  ³isinstance(Ü;intÑ
‹m  _ .seµ ó# Assuming file-liked/á  t .F ,noÜ ;  ¸ó._make_inheritable(! ·Á ‡C?OUTDN �p  }_*w Fd G 
± j   H *IÝ\ @ I IÒ ï§ J> jÀget_osfhandl÷	e(self._get_devnull())
  ùelif isinstance(stdout, int):*  5 ðc2pwrite = msvcrt.[ „osfhandl> b .seJ ÿ# Assuming file-like objectv $.H ,noá ³ ômake_inheritable(" ))
z ÿif stderr is NonÅ  4errò _winapi.GetStdH úSTD_ERROR_HANDLE! Y5if M o  ) &_,) $= a °CreatePipe(ª >, 0c  > d #= £  0 ` Close2 _+ A)~== PIPEîerrread¼ &@ �  /),Ò § oSTDOUT© Ò	G DEVNULLH 
)˜ ?err˜Æ˜<err¹˜-v ˜= ˜" ˜²return (p2cT1p2c´,ª ï  2c2p' Ð' G¢&)
]def _8 · ", ú,B"""R§ ãa duplicate of. p, whichY‰9"""Â &h áDE ö	)  ç ªôGetCurrentProcess()¤ ù 5 
O0, 13 úDUPLICATE_SAME_ACCESSa©² hQrfilter_AQ_list¯¯  XF6 Ã out consoleUùs that can't be used'÷in lpAttributeList["} p"] and ç  sure the – 
E s_ ÷	empty. This also removesíZ ,s.ÖC# An² ñ with it's lowest two bits set mighÊ ”a specialò 	’ #N ÿ Ðif passed in ÷lpAttributeList["handle_list"], will
  ù# cause it to fail.  preturn @ "({M S for  #in
 b 	: e C  if( � & 0x3 != 0 òor _winapi.GetFileType(v O) !=; %  ; õFILE_TYPE_CHAR})

7 òdef _execute_child(self, args,  �able, pre õ _fn, close_fds,J 	è  Apass% Ÿ cwd, env/ 
ð	startupinfo, creationfla‰ _shell> 
 p23 ¿d, p2cwrite. 
Ïc2pread, c2p. 2err. ?err. ÿunused_restore_signal*3 Vgid,  s ?uidÏ 
4 _umask) ké_new_session):ÉB"""Eñ	 program (MS Windows ver5 6"""K ô¶assert not ý"  Äsupported onQ .G âif isinstance(‹;str¥  q  [ 	º /el= _bytes?  1if Z
þ  Y   `raise rqError('G 1 isÎ YallowÌ )')�  H  Á ! == 2cmdline([ ], ¼ ¿os.PathLikeÂ /Ÿpath-likeÆ mwhen 'À  Ä  '8 Otrueõ *.se 3  )p'if£ �  z?NonR   ¼ utËö  = os.fsdecode( ] ¡# Process /©up details! C¹ „ € D  Þü  = STARTUPINFO(ø# bpo-34044: CopyB Q sinc¼ÿis modified abov ó# so the caller can reüêmultiple times 
Å  k.copy(A‚use_std_¯as = -16Ein (°‚ ^
;if I /ðstartupinfo.dwFlûags |= _winapi.STARTF_USESTDHANDLES
  ÿstartupinfo.hStdInput = p2cread0 2Out1 �c2pwrite2 ²Error = err1 	2 Ðattribute_lis‰ ¡ 4lpA IList9 ¥have_handl; [bool(Q .anÔ  "K _" in H $
7 [W 9])
Ã ÷# If we were given an ‰ À or need to ŸZte onr=if 
³or (use_std"ùs and close_fds):ˆ  ,ifò ~is None+  / 
ç ? = ·] = {}q ç =| 7M = \@  †  3ñY.get(v[, [])z = ;if %ë © ƒ+= [int(.0),   é*)]ï u M 0[:]8³elf._filter­
(* ½ ! ¹ fif notö&  – �warnings.	 /("Ì'['w O'] "˜ T 
 ¶"overriding‘ ²", RuntimeW� é   G �# When us> 9the#ðwe always request-jinheri1 J   #? `s but O Eonly Óthat will be H Zed arx J   #B  es5 N !†Š = False&Žif shell®—OdwFlÿ�HOWWINDOW� D ÇwShowWindow FmW_HIDE: òcomspec = os.environmýCOMSPEC", "cmd.exe")? óargs = '{} /c "{}"'.format ([  , % ‘if cwd isÌ‘ ! — Ëfsdecode(cwdH òsys.audit("subprocess.Popen", executable… ,u [, envG 0# SAõE 	ë >try¹÷hp, ht, pid, tidnrCreateP� (‡ 	\  oÐ               ÷# no special security
!  aNone,  5 ÿint(not close_fds),= ßcreationflags8 ?env. ?cwd. Éstartupinfo)Ê ‰finally:  Rð# Child is launched. Cÿ the parent's copy of those pipeK  ñhandles that onlyD ca ÿshould have open.  You needJ  Âto make sureO 5no _ oX ’write end˜ ‘ aoutput¯ ð are maintained in this process or elsm I  ñ e will 0@ wheD "e á I �exits and¥ Û  ‚ReadFileO ]hang.& bself._— {  œ0(p2sad, p2cü Ïc2pread, c2p8 2err8 1err8 ))
© @# ReM è G¤C, buW  thJ Á	E ê  #_ß šted = Tru†' ] A = Hi:(hpæ&  piB *piW�_winapi.Û? tÒ ðdef _internal_poll(O ß, _deadstate=_ô_WaitForSingleObject=p   ·æ_WAIT_OBJECT_0<  6  ÂGetExitCodePÆ;  )ü»"""Check ifÀÀhas terminat æêurns returncod›ªattribute.T^Qmetho^òcalled by __del__, so it can,¡refer to oCs(0in W0loc<copo :"""1  f À.¶  ä Â
	 ?if Å"._vŠ, 0) == ¬L  P y >= _‘	^ 
È´ À 
`­AwaitE ž, timeoutäIÑ¡ implement´ 2? ß) on Windows.C Y ;! ¤_millis = ù‰INFINITE•ð else:
           ótimeout_millis = int( ’ * 1000)
+  ùif self.returncode is None:(  . Ñ# API note: R0 ós immediately if k € M= 0.H ñresult = _winapi.WaitForSingleObject(– �_handle,C  �  
� 
ø  = 4if ‹ Œ ¾AIT_TIMEOUT 7 rraise TjrExpired¯ Targs,p Ó iu òGetExitCodeProcessQ  
K B ·%

%Ðdef _readerth M Ú, fh, buffer)Ú  ±.append(fh.5 )w ¬fh.close()k ³communicatej  input, end„p, orig_ ;out| €# Start s 2er ± �s feedingÀÐo a list hang µoff of thisô  ™1# o<ð, unless they've al^ €y been so *ed— stdout andèƒ hasattrÖ ""_ _0"È  � á% Y = []¤ ' K ð M = \'  +   # Ring.TÎrtarget=n  Ú è( «=Ø .Š ,Q¾  Œ t 1 _˜ í.daemon = TrueÅ 1  �(]€?err€	?err€% € & Å €m7err€ ˜  c€ # » €1 €	¬�*inø ‘in_write(ã)u &  # Ê0 foÈeÓ Å out.  If we ,­	’ #aremainO  ÿ �ð
the fds left open in caseG [ userL gcalls ªo again
!isÙ BjoinS_³ "inö(	Ñ x ¸ÔŸis_alive(e  iƒÀTimeoutExpir÷ed(self.args, orig_timeout)
  1if ( ùstderr is not None:(  3 ) Â_thread.joini ’_remainini @(endq )o  G 
s J ®is_alive()y  6 rraise TÄ _Expirã 		¼ ð2# Collect the output from and close both pipes, now that we know
€  #+  have been é successfully.} �stdout =T  s  ">outT ’_ Y_buffa  ³ " ! .ê (‘k ?errk ¥ I  k ?errk 5errk 	� ÿ$# All data exchanged.  Translate lists into stringsLÑ @[0] À bOelseeá3  Ö 3 	¨ ‚return (f ", ; %)
%  de6‘nd_signal[, sig¼�"""Send a anal toƒ0pro.E."""T  ­t# Don't. #a ) 	Žp has alwjy died$  ùÅ OcodeÕ( 	‡  C Sig ==‰ �.SIGTERM  j ›terminate[-elI ÎCTRL_C_EVENTN bos.kilOA.pidSHnal.7 
¿d _BREAKh #; l s ˜óValueError("UnsupportedAÐ: {}".format('LB fETbs?O  Be>tryß…_winapi.Î P?»._handle, 1vpxcept PQssionf^ ð# ERROR_ACCESS_DENIED (wine—0 5)Ðreceived whenM	ù„ud ( Trc = Ó ¿GetExitCodeÕ 
Ò  > 0if A B ÎSTILL_ACTIVEÝ  3 i¯  1.ÄÐcode = rc

    ðkill = terminate

 Qelse:
   #
 æ POSIX methods 
 ñdef _get_handles(self, stdin 1out Ferr)c  g ú"""Construct and return tuple with IO objects; òp2cread, p2cwrite, c2p 3c2p 2err 1err ¶  	 T ™ = -1, -1' h ' | ' 	O "if,w is Non† ¤   6pasy  %el5 z== PIPE $ Í ™os.pipe()� 
N DEVNULLQ 0 = á.ódevnullQ ³isinstance(;int ¨  W  2š • .   ó# Assuming file-like%	>  , ^ .1 Bno()õ "   N?out„  6 …+…O †Ü Ò ?elf‡‹ˆY YtdoutL
 4  Š` Œ
?errŒ  6 Œ�ŒO nSTDOUT ifsW  !*#  %{% =/ 	[$  ~  # child's 	õis not set, use parent  G K ê !ays.__sÎ&__p '  ýì xÆ ÿ _err, xY YtderrÖ x/` 	j {(2Y	' 8Ú,' u&)
{:³posix_spawn:ÿargs, executable, env, restore_signalsp Ÿ Ã Àwrite,
        ÿc2pread, c2pwrite,
&   2err, 1err, )):- ù"""Execute program using os.posix_spawn().""": êif env is NoneV  |   =G ‰environ
> ¹kwargs = {} þif restore_signalsZ ²# See _Py_R+ S* ù() in Python/pylifecycle.cc  � ½sigset = [] Afor |  meP À('SIGPIPE',  5XFZ
 ;SZ'P ]    A Ðum = getattr( 4al,Z ,6)}  < !if&  um]1not+  +   Ì q.appendh .umY qð ['setsigdef'] =h :set›°file_action¡" !fd1p2cS‰f 	  ¿if fd != -1Ë w Í ú(os.POSIX_SPAWN_CLOSE, fd)á •   2š W@(p2c™ N, 0).(I/ 1 <;, 2 é E@DUP2Ï   2í  J£NëRî 
ô‘self.pid ²ùe`able, ³,öB, **f 
ˆG p_child_p teR OTrueo  ö _close_pipe_fds£XÇ ï	 9 � Rdef _ó eÈ (Ô û 0pre) R_fn, Ê >fds\v p   passê R, cwdHâ 	Ñstartupinfo, Nÿ ionflags, shellm ñNHBŠ 
Ð, 
Àgid, gids, u _umask2 
&Ë_new_session“á (SA ver0  Ù	ˆâif isinstance(õË(str, bytes)b  â %  N  
R/elO  Ø~athLikeN À if shell:
   þ'raise TypeError('path-like args is not allowed when '
H  `'shellA mtrue')5 ` 0= [ ] Yelse:  _  ( € = list( ))
# 1if r 9 ò	# On Android the default0  ¢ ùat '/system/bin/sh'.]  € Qunix_c L = (0 = if2  6  òhasattr(sys, 'geta� °apilevel') õ $ ' /‡ ‘, "-c"] +«~ Ïif executablO  ™  GW[0] =* VE  +?NonM  $ =Ž :[0]I ÷sys.audit("subprocess.Popen", ,? ®, cwd, envæý(_USE_POSIX_SPAWNú Û `nd os.Ï–.dirname(¦ _4 0pre' 4_fnî _  Ÿclose_fds& 
Opass% 
?cwdo ô(p2cread == -1 or  ?> 2Ñ –(c2pwrite8  9 ;err9  9 
 ÿstart_new_session /giû 1gid‹ }I uI ®umask < 0)'�self._posçApawnf
œÿenv, restore_signals,’  P ª,³T5 0c2pð$, °5 2err5 ¬jreturnŸPorig_ù/ñ# For transferring possibleÇú failure from child to parentVð# Data format: "exception ¯ñ:hex errno:descri "n€# Pickle= w€used; it ñcomplex and involves memoryÐ cak 
’ …errpipe_C ²! =PJipe(S#¥ ( Amust5Qbe inqsðÀard io 0, 1,¾ª2 fd range„ 0low,A_to_^J = [ 0whim¬ ž >< 3Óð low_fds_to_closû
e.append(errpipe_write)
  	 Ÿ = os.dup6 	Ófor low_fd in
 ½s_to_close:b 1os. (5 
ƒ >try2   ¸ ð# We must avoid complex work that coul˜ ]volve‹ D àmalloc or freeÅ òthe child process toc C ÿpotential deadlocks, thus we do all this here.E °and pass itp Ïfork_exec()
2 ÿif env is not Nonm  â   ßenv_list = []N  &  Ë@k, v¾env.items()’ -  k&ªfsencode(kÒ'  pif b'='c kY  2 ð
raise ValueError("illegalû ÿironment variable name"€ 
2k +‘ +ìÆ /v)G /elÔ «   ] ! =�€  # Use Æ U‚stead of 	 - !utÏ “  ›  ifÂ €path.dir(3 l% #8 ,l 0# Tí€matches O€behaviorþ 1os.Ù_vpe()M2xec	˜ otuple(¿ 5 1os.…join(os.>Qdir),yT Ø  C    
0dir¦aos.get± _[ ?(en!fdù°keep = set(ÐO_fdsn 0 ?.adœ ™ óself.pid = _posixsub¥.2#
Hargs
^,3 
± È ", „÷sorted(map(int, Ê ?)))M 0wd,¿x Áp2cread, p2c±R, c2p 2c2p º 
2err/ ?err/ 4  9 ÿrestore_signals, start_new_sessionÀgid, gids, u _umask3 0pre»?_fn^Ðself._child_cû reated = True
  �finally:  ( ÿ# be sure the FD is closed no matter what> 1os.- ý(errpipe_write)
- aself._, _) ñfds(p2cread, p2c9 ,8  £  2c2p8 ?c2p8 2err8 1err8 ©  ý(# Wait for exec to fail or succeed; possibly raising an¹ ð# exception (limi¡�in size). ?þdata = bytearray(+ QwhileéÑ part = os.ì ™  ~, 50000T  b	ƒ 0+= H ¨  ) aif not   5lene  ¿ 2) >g Ÿ  B Ybreak\ £Ÿ'› ñ8if ÷ ² /tr7‚pid, stsj�waitpid(æ e¤if pid == + t  "  " ÿ_handle_exitstatus(stsÂ?lseO ðreturncode = sys.max’	� } ½ÿ ChildProcessError` Npassô=] ðion_name, hex_errno,��_msg = (”  ˜  ·ÿ .split(b':', 2)p# The eü  ²°here shouldå!chÿ {  # 4‘ten in by1 Bsubp° implementaôsC ¶like _posix< , 3err

 0.de¹ Po Value¦' w g%'SÀ 8 'Š Ÿ3 0% ¥ w = 'Badý p from cMï: {!r}'.formatåí scã\ _â 0typãgetattrg –builtins,² •m�'ascii')šC› ïif issubclass(© A, OS€V) andm*à_num = int(hexß_errno, 16)
   ðchild_exec_never_called = (err_msg == "no# "D ?if G :t  ‡ ] ? ""% ÿ# The error must be from chdir(cwd).=  b ïfilename = cwd+ Oelse§ E Aorig-outableQ  if² ¿no_num != 0^ bq os.strê  x> nUraiseqÆception_type: ,ƒ  ½	 Â Q M  B 5)

ç õdef _handle_exitstatus(self, sts,*  ã  $wa5 1_toC �code=os. Q °_WIFSTOPPEDF  :  8 1SIG8  )¬q"""All ð rs to this funcu° MUST hold  ._Å «pid_lock."Ù ÍÂis method isW ùd (indirectly) by __del__, so it cannotYp# refer� úanything outside of its local scope"7if 4K(stsô  ¶Î `return c = -_W#3 	� BD  2ýP Q cÓinternal_poll_P_dead? „e=None, n À [ >pidõr_WNOHANå ¡, _ECHILD=. ”"""Check Üñ process has terminated.  R(&s 0Í  L¦attribute.H  TJ òTence ó	f ÿ8theÿP (norF 9 ~sYKlls)– µ"ifÛÝ  º �
* Ò bif not0 �Ûacquire(Falsej :   @# So Í R h Abusy'  äù.  Don't allow two	 K   ð# at once.  We knowž ,:yet 1   æ  ß U >tryó  5 # 
 H 4  8 m (€ # Anothà`hread ù /ed²  õ z% =à(self.pid, _WN�OHANG)
   ÿif pid == self.pid:(  ; " þ_handle_exitstatus(sts] ÿexcept OSError as eZ €if _deadM Ïe is not Non/ ‰ Çreturncode =B ¾ Àelif e.errnoì _ECHILD‘  b ð	# This happens if SIGCLD  ÿset to be ignored orv I ðwaiting for child processe` ÿs otherwise beenI �disabledJ 4ourH ". ­ ] 0is NO, weL pcan't gÊ 0he {?us.0 ÿhttp://bugs.python.org/issue15756< 5	¬0, finally�A _Fúpid_lock.release(ve È  %

o �def _tryM (X  , X z_flags) à"""All callersñtòfunction MUST holdq T ¡ 5"""v  /trÝ  `(pid, =` = os.‹ 1pid™  ‰	� 	O \CNPMf
Â  y È9ingo I À ¦J   ¸ ž¸~=pidh jsts = m z „�ž, timeoutñInternal implementa!of>Ì() on POSIX."if° ˆ  Ÿ Qñ( 4 Ò š$if« L 0endÓ  -  D() +9 <0# Eå À a busy loop”we have a9 Ã& ?wasN  Pcribbºñ
rom Lib/threading.py in T Î() at r71065“PdelayØò.0005 # 500 us -> initial # nof 1 m� Ÿwhile Tru`£
ÑÛacquire(False … é   _ Ú 4  ±break  # An9 Jz'ed0À              ò(pid, sts) = self._try_wait(os.WNOHANG)
.  Ãassert pid =E   $or 0? 
$if( € Opid:0 
 … * ð_handle_exitstatus(É = _break& finally„ €  &ÿpid_lock.release(,•remainingg �_time(end > 5if / _ <= 0ž ñraise TimeoutExpired(¯ `args, e ?outh Âdelay = min( F* 2,| _, .05;  X b.sleep: 
& Nelse´ Rwhilevÿreturncode is Non/   ùBwith2 ¤~\  -   "if/ 
a ?note  8   )ð  # Another thread ø?ed.CU	0 g  ±# Check the±and loop ass  Uÿhas been known to… "# ó € 0 even :Cout Óÿ in odd situationsÐ ÿ# http://bugs.python.org/issue14396= ß¬Ûß 0   ?%

ñdef _communicate“, input, qa, orig„ 
I=`stdin � 9r Y ¯ion_starteº €# Flush C ðo buffer.  This might b?A, ifù…user hasÆ ø@writG@to .T nÉþan uncontrolled fashion•/trÙÔ P  .f° Ç úexcept BrokenPipeError1­ @pass9~Ü) must ignoreG « 0if m®e Í  † Ñ ?clo˜Õ  W Ù  	Ê0std…=~ Cerr  	 ñ # Only create t;0appðif we haven't al yMIð self._communicaû tion_started:
  ý
self._fileobj2output = {}* 1if - nstdoutJ  Y ! N [ 6 o] = [][ 	?err[  3err[ 	\ ³ • " =Ù ¸ 	W ¯ ostderrW  ´ 
X )Á_save_input( )% Ô # ,4 à_view = memory (]  R ð	with _PopenSelector() as e  qin and Y ) G ’.registerŒ estdin,e és.EVENT_WRITE) E ÷ ³ s 0not> "f. _.closã ? sÙ „ >out… OREAD„ 
 à„ ?err„ $?err„ 	Pwhileø TŸget_map()|QtimeoÒ  remaining_ @(end ë  40if   ? 0is nANoneî ?< 0x  @ r Qcheckn 4outq R, ori„  €å  ?  î", f,< Bkip_’ ïand_raise=True ƒ $ @ Runô ÿError(  # Impossible :=  A 'q  @  o..., s‰ / 'Ò 
²'failed to š Tâ›Expired.'Ý ‚   Rready“9(– Ã Â Ž Ê  ?err… ð# XXX Rewrite theseÉ ðuse non-blocking I/O on!  š # objects;( @y arE   longer usH C� :io!B   ñfor key, events in &Ò if1 .” Qobj i#€/in6  l rchunk ='žÆ�_offset D  H  ¡|D ð+ _PIPE_BUF]
      _try:
  ÿself._input_offset += os.write(key.fd, chunk)N 
ÿexcept BrokenPipeError‚ òector.unregisterw oileobju  È ¤ - .close(4 Oelse— ?if  w>= len( )K  ¥ ?selæ + E ê Welif 1 B in ¸ rstdout,ß ostderrÅ Qdata Breadž�d, 32768lpif not A ($.ï 
Çf<‡2output[E �].append(À ))
ÿ< Ñwait(timeout= °_remaining_ @(end )> Q# Allù exchanged.  Translate lists into strings.  ŸÈ1 isc?NonÖ ìÂ = b''.join( 
¶M ?errM  $ 
M  >
#Ç únewlines, if requestedË ÿ# This also turns byteý  ¸�text_modù  Ó ?outÓ  V" =$_t„_½ 4,� :  e Ÿ.encodingL 2 `sÊ ’ û  ª
 + þû ?err¯ -?errû 6L û 	’ re> ® Ý &)
ž’def _saveñ!, ý”`methodCòcalled from the _communicate_with_*() 0 s—  # Ø0hat0we  ™fwhile H  ü we can continueJ  en>à input if we rwetry.
  òif self.stdin and ù _input is None:3  > 4 % ¿_offset = 0' 	1 = T $ "if  m 1notq ‰ �text_mod„  ˆ ( =» �.encode(© Ý  Ming,ƒ  J  J …rrors)

J  deH‘nd_signalw j, sig)<�"""Send a õnal to the process."""T  ’ ñ# bpo-38630: Polling reduces9 brisk o}   Y M Twrongm 1 ifC | ± completed, ±Popen.returKK �attribute¸Qstillº,»Ó ðid has been reas+edG  (recycled)ô a new differentª û
. This race condition canM úhappens in two casesï#2 `Case 1` Òread A calls ü `poll() B B + &seü�). In th5 ñA, waitpid() succeed#YsN  9µexit status™ | 0 ki“ ’ because ¢ ð o P @did U ¡r  ‚ yet. CaOE ŸB preventž …`thanks¼	_î __lock|%2. vpid, 0)5 Œûed directly, withoutä  usù § methods: í 6is   ®tM   L .wÛ@úto a default valueUu# sinceÛ q) failsÁ " PìpLookupEK
ˆ i} 	ê «
Û  Þ¤c# Skipi9aQÑ that we knowq al¯jy died�  ‡s ï  _# The” mŒd
6	× �# describRbove ;  : tw= ‚ ½<tes ¸ &  9
Å :try‰ Â 1os.1 q ~ ±	� oexcept³ N ƒ# Supres˜
¬eç;ÍZ40550ž  � Fpassa P‚terminatÅIT  ¯Æ $� SIGTERMË À        """
  òself.send_signal( ´.SIGTERM)

- �def kill(3 %):    ü"""Kill the process with SIGKILL- 	  P ƒ  < ÷")
"""Stuff to parse Sun and NeXT audio files.

An ñ consists of a header followed by² ñdata.  The structure
of 3 Sis as9  f  õ   *+- +Ú À| magic word* | 4 	o size   4  ¿  2 4 €encodingš 4 ¯sample ratœ #y�channelsÐ Binfo˜   |   R
Í� ¥ð4 characters '.snd'.  Apart fromü
‰ ¥field, all?  ñs are 4 bytes in�Ey Ðall
32-bit unU€ed integr  ± big-endianL � order.
Á Àreally givesž 0 st­ § .4  
 � " i( ‚physical 0 3  Fë Ñ other
parame %`numberÂf 0s c¥ Âe calculateds Î  M� 0waySwhich�?82  ? âPossible value @list�Belowa ‰ª currentlyÛpn ASCIIÀ‰   Ða
human-readaf °description×  å >¾ m ’is
paddedÍ1NUL¤s‰ <  á.

Usage.

Rea[Z s.ð f = sunau.open(¶Á, 'r')
whereÇ º ei’é@name® a `or an >   poWr* ð must have methods €(), seek  IÑclose().
Whenv �setpos()h…rewind()D  ý“not used,0  N 
e  Â   0 ne1aryÒi} PturnsÃ sinstancÜ 4cla5 [¤ Ådpublicz JDgetnZ’()  -- re] ¹„' u (1 forŠM pmono, 2' … stereo)/ 0getÅ[widthr   1le   ù9 B ;9  ç ˜frequency6 n7  † á 
' : €comptypeo ð -- returns compóression type ('NONE' or 'ULAW')
  ñgetcompname()   -- returns human-readable verR %of= D   M | Dnot  Âed' matches • 	‹ aparams‰ 	‹  a ¡ ð	dtuple consisting of all ?the— 	Òabove in the  Uorder4 “getmarker~ ‘None (forÆ àatibility withP D  ¹aifc moduleé  l 0(idré ðaises an error since]  * Ÿ does notk 	_exist¨ 	 �  à€frames(n� ù ¢at most n !  hUaudio‡ crewind°>  1 to¾ cbeginn«| @ u streamG  setpos(pos‚ DseekE õspecified position: Ftell : ¿~ ~current7 Bclosð¨1--  6 PinstaÐ(make it unusU)
TheN )ced by ‰ 1andD © ` givenÉ ä @)
arÃ mpI0le 2 @haveßh)Uto do]v actualu Äa
file.� ¹ ð() method is called automati @y whˆ ”he class å ñ
is destroyed.

WriZè f %s:nð f = sunau.open( Á, 'w')
where/  � aeither	 ¸8  orä >  rpointerÊ  a must Þ £s write(),q , )  Cand
s.

This Vï ‹ Àp follow|cpublicKù ±setnchannel'b-- setá PumberX ! /Àsetsampwidth]6   1le  0 iKrate0    . n ’ û” ! 4  Š ( ,Xš ²  8 	Ù ¹vBC — úâ)w  Û Æeters at oncçs® º ø ùaoutputvx M#�raw(data
0  4¨qout pat¾ upb � 	  6H hea~Y ‰ † " Œàpatch up the fÃile header
  sclose() ö  -- patch up the f4 Q and 0   B ; 	 aoutput< ð 
You should set: ñ parameters before Àfirst writef  ‡sraw or
 ò.  The total number of / ð does not need to bes ð,
but when it is    Þ ácorrect value,‡  M 0havr 2
be�ed up.
IK @bestL ¼  à 7allà ð, perhaps possiblyd ñ
compression type,[t£ î d audioØ [using0.
W.  n þ ¨ Abeen* Ðten, either c& X + P(b'')ZÌ ()Á 	ô€sizes in¬ 0 .
y1 `methodL \ °ed automati yl_0lasI ð8stance
is destroyed.
"""

from collections import namedtuple


_sunau_p77s = )(' /',–	ò'nchannels sampwidthdbrate n � •	  ˆ a')

# ª Á<multimedia/¤_ øhdr.h>
AUDIO_FILE_MAGIC = 0x2e736e64 ÿENCODING_MULAW_8 = 1  aLINEAR! 2! 	o16 = 3" 	_24 = … e o32 = 5D ŸFLOAT = 6 ¯DOUBLE = 7 ïADPCM_G721 = 2¥ $  „ 2§ $ 03_3J « & 5& ³ Aw/27Û	×°UNKNOWN_SIZì 30xF öð# ((unsigned)(~0))¹àimple_encoding½['E	¿2 ¶83 /164 /244 /324 ’A]

c3°Error(Excep!):Øðpass

def _read_u32(€ xq) Pfor iÁsrange(4!  «abyte =›.E 1(1)3   !if? # q     ‘raise EOF˜ 0  q Àx*256 + ord(9 N ƒreturn x® }¯ 3, x‘ ‘data = []S ¶ òd, m = divmod(x, 256j  Ÿ  G ô.insert(0, int(m) À  x = d
    ñ4file.write(bytes(data))

class Au_read:

    def __init__(self, f):   Òif type(f) == '''  $ åmport builtins<   5f = é.open(f, 'rb')'  y  ._  •ed = True  Uelse:  U . FFals/   Ð Xfp(f)å 3delä Á 1if 2 _6g  iclose(H ^enterJ areturnN v 'ex[W*args~ { c ¾    , ˜ 2 ­ ! =  / å._soundpos = 0 Ámagic = int(ýQ_u32(Z ˆ2if ( ú!= AUDIO_FILE_MAGICóraise Error('bad8 gnumberÚ’ �hdr_size€ 1 O< 24z qheader \ —too small Û‚ _> 100R ÷ridiculously large[ ©  XÛ W{… - `ÊUNKNOWN_SIZE– `  » » �encodingi1 ô not in _simple_ s• 	÷$  < �(yet) sup	'ed)ÿ 0 Gin (_õENCODING_MULAW_8,: ê / A.  + Ùsampwidth = 2O   Qframe65= 1  .el¬ =
« ŠLINEAR_8]  � o )/16p ÿ ß |Î = à 3O(/32à 4p &	¯„unknown ‡£Æ Ø ?rat§/ €nchannelh ›ÿ›!if"6 
ê 	ª  PT# of b « ÀX àframesize * seó lf._nchannels
  Pif se åhdr_size > 24:   ' ! òinfo = file.read( 8 _- 24)8 ƒ, _, _ =l  K ö.partition(b'\0'; Oelse� 5b''f ?try* „data_pos¯ Wtell(a ñ
xcept (AttributeError, OS	 )S QNone
ƒ ‘def getfp8 creturnî  2	0 †7 
& 	< Ÿsampwidth< 
& 	< Ÿframerate< 
& 	< n s: ?s@ú== AUDIO_UNKNOWN_SIZES' V sX ôencoding in _simple_ sV —� $//ˆ ÿ  £ f ˆ 0r  ú# XXX--must do some arithmetic her}comptypXÆ ÿFILE_ENCODING_MULAW_8Ð ' ó/elV AU   U si'NONE'
 í ?namí DøCCITT G.711 u-law¥ ú 2b Ab @not ù jressed]paramAw_sunau_$ E.getÜ2(),ž5getµ5(),£—Ø n ÇÆ< Ÿ: 
 Á §9   Î)))æomarkerÖ  / H, id	Qaise WP('no ( 's'k  J[#, Ê D ö$ifI  sU� e 1¡ ³å6 % ›  ; Ê " *â_ç :izeT Ø`_sound³p+= len(T /) ¼ y í `ÀNCODING_MULAkW_8:
  íimport audioop ddata =  .ulaw2lin( ù, self._sampwidth)? preturn *   INoneˆ ñ# XXX--not implemented yet
< °def rewind(t )È #if†  h €_pos is ` #  j ðraise OSError('canl Vseek'¶  [ p._file. k $._Y ( Psoundq 6= 0¦ Atell9 ¤ ö _ 7 3 asetpos5 W, pos:  if q < 0 or >ï ·getnframes(/ ê è �position î ‡in rangeò >W! +¿ *¿ _¼ ?izeV6pos%Qclose$ð  «$ =S 1ile- 0if  
�  ! =$/ 3 ! jopened;  !  9 .ˆ ö)

class Au_write:ª �__init__­ 7, f° Òif type(f) == '''   f ‘‰builtins£ Df =  .§ w(f, 'wbÒ C Ç f = TruJelseÛ . FFals/   Ð Xfp(f)å 3delä Á P ,g  > ¦   _ r’ð  ï __rd N� 'exuH*argHh } c Ø   ,/Ê   ! = 6 ´  }Prate ÿ    6 Ÿnchannels  -    îû = AUDIO_UNKNOWN_SIZE› + writtenL   Ò olength;  @info…+''u @compÜð = 'ULAW' # default’VU-law¯5set%( …O
Ó 
YÛñÙ �Pge pa¦ðters after starting to „ 0‡(1, 2, 4”  ç	s Ronly ( Por 4 | ý0sup\'edŸ!t  ÝF  !ifœ H À('number of óchannels not set')
  äreturn self._n) 
  0def.  sampwidth(& %,  !):'  J i* C Öframeswritten!  % ðraise Error('canŽ  r Pge pa7 ðters after starting to M e´  m ” Ó çin (1, 2, 3, 4— v 1badÀ 1le Ó V  Ý %._Ý ! =) & 5get" m !if� H Orate J ‰ ; ‡pecified— 	¡ 2 ’ 5setl ’ %,  
� ™ n ¡Kj i  & =“ 	K" ¹ 
®  H KJ  m 9 ä*  ) Š 3setˆ #,  
‘ �   “àIg O < 0ö B# of[#s P¨be negativ2	¼ $ =á gú 	€— þ ? ³setcomptypeC  g, nameL 0if   °ç'NONE', 'ULAW'%  ´° S ! =7 m?elsW	€unknown ? qression@ &')± g± € 	ñ  D  ³ :  Ú ë :  ˜H6 3 ==à Åu÷'CCITT G.711 u-law'ä N A.N AN 2ƒ  . ¯  )6ed'è 1set•sæ ,¢sî n» V|,e,‰ E
  :# =P ð ò ‰V $(n
 ­% (
 % é(
 % Ñ( !   ¼ (	 Å 
O-%Mw_sunau_$ .râ 2(),‚	_%),  gô< Æ ð(),
               øself.getcomptype(),  �name())

- �def tell(" !):   breturn8 ö _nframeswritten9   e 1rawC g, dataI ðif not isinstance(!  , (bytes,  garray)5  ‚  ' Ñ = memoryview9 µ).cast('B')¬  » ð._ensure_header_› Ften(& #ifÎ ¦ == 'ULAW'÷  y åimport audioopf   ”  ‚.lin2ulaš e¦_sampwidth{ @b = lenÇ 3 //� @5izej Ð Pfile.Ç 2N  T  ! Sten =N  #+  ]  É ;  +ª ïìš  W  V ¼ …—  -  ¿ !À U or \´  { b _T ulength 9   N 
Ï3 Rpatch(ûQcloseÍ ~¥  ƒ
M :try  — b € *   ^ $ D  î õ 	9 ; 
  Ó   g.flushH # ofinall  2 Œ  ÄZ f = Non÷ Y   !nopenedp %  \ .¾Ï#k ò# private methods Å( — 
 ¶  .ÿ
� ß) Šchannels$  ° ôraise Error('# of , —specified× 7 	_ Z_  ( 1le …^ ˆOrate^ (  ) \ 
 ’”x   , 
}  )._ªLNONEªÓ ò ï N== 1Á ñencoding = AUDIO_FILE_ENCODING_LINEAR_8, w ‡ ò ‰size = 1$ %el­	ƒ 2ƒ %)16`  ˆ „ 2$ Àelif self._sûampwidth == 3:
  ýencoding = AUDIO_FILE_ENCODING_LINEAR_249 ùself._framesize = 3$ Relif % s„ 4„ %)32`  È _ „ 
¨ Nelseo ðraise Error('internal e %')d À €comptypeCj'ULAW'U DM3 %_8Z º 1  ¶ ²  *‘•nchannelst ³_write_u32(5 Hile,VMAGICsheader_ûƒ25 + len= Oinfo+ (: Ÿ+ 7) & ~7‰ 5 Y an  ÅÊUNKNOWN_SIZE¬@lengÛ ) „ �6 p P 5izeC :tryx 9 Rform_M c_pos =‘¦file.tell(Þ ñexcept (Attribute²A, OS	 )` 6Non– æ‘ z ¬ Bdata   =Ü5gthß I 	K ) b 7Orate0 ·0 I  ?Â�% ib'\0'*Š-ã > � - 24))
ô ¢def _patch‰) ‚Šá0is ‚
¬ÏÈ×('cannot seek€µ   r +._` 	i
 Ë 6ten2 a   æ . ý ° hŽ p0, 2)

Ðopen(f, mode=í !if   if hasattr7 '8 '4  k     P = f.	 … ˜  q = 'rb'& t qn ('r', \ òreturn Au_read(fëK i8 w8 (wb” 8  e9 `×�!("O …must be ‹ 0, '^ ðor 'wb'")
"""Non-termi†ðsymbols of Python grammar (from " ðinit.h")."""

#  This D mð automatically gñDenerated; please don't muck it up!
#
#  To update the symbols in this file, 'cd' to" ðtop directory ofD  : ñpython source tree after building> €interpre ‚and run:ˆ "  B ó3 Tools/scripts/gÉ _› ò_py.py Include/graminit.h Lib/$ 1.pyT qor just â   make regen-( ô

import warnings


 .	 …(
    "Tð module is depreca È `will b_ rmoved "; ñin future versions of P+!",$ DI BionW‡  ù,stacklevel=2,
)

#--start constants--
single_input = 256
fi g7
eval" ±8
decorator2 9 s $60 !ed ñ 1
async_funcdef (2
 p3
paramÖC á4
typedargslisš d65
tfp@ Y6
var 67
v R8
stm7 ”9
simple_ †70
small f1
expr °2
annassign­ p73
test‰ _B_.  W4
aug) G5
deX f6
passX f7
flow v8
break –9
continu® •80
return& †81
yield g2
rais4 3™# 4 @name¼ $85 Afrom 6 5as_' ˜7
dotted_ 8* µ+89+  $90 S †91
globa)˜92
nonloc …3
assertÄ ¦94
compounû #95\ÝV96
if3 @7
whÏ F8
foêd99
try/ †300
with 1 0ite"ð302
except_clausH‚303
suit  4
å d _3a = 305> 6 `_nocon‚307
lambÖ4308 # E9
orN f10
and V1
not 2#Pariso»1313 0_op€ 814
À1315ù T6
xorÚ1317g  É  v8
shift  @9
ar+" a20
ter&P21
faÞ : p22
powe*…323
atomE !24 ' %c å s6
trail= R7
subÕ ' " 8  r9
sliceî !30Þ - !31} @2
di¦ 0setÙ¢ ƒ33
class�e34
arg2 5 @umenY2336[i‹a= 337
æ ¿ !_f2338$   à@mp_i€340
encoÛP_declÂ 4ÜX#42í1arg! 39e_body_y"44  5ª6345 < 6VÐ  476endÀ--

sym_nameñ2 = {}
for _name, _value in list(globals().items()):
    if type(_/ B) is 0   $ 1symU [T 2] =e B
del
 o ð
"""Interface to the compiler's i ñnal symbol tables"""

import _sym V
from    ò(USE, DEF_GLOBAL dNONLOC  aPARAM,ê 5 bIMPORT5 RBOUND ôANNOT, SCOPE_OFF £MASK, FREED [ | ³_IMPLICIT,  $EX UCELL)Ö ôweakref

__all__ = ["ê Q", "ST  PClass	 €Function $ p"]

defB(²(code, fileùo_×Å0top´q .	 < 6²return _new€ ¤ F(topt @)

c±  " rFactorye ° Ó__init__(self˜ ]Óelf.__memo = )`.WeakVÁ!Di aary()
’  M 1newH ,B‹ q  Y  Ú P.	6 ==Læ.TYPE_FUNCTION2  6 ð x(d` ƒ  ) _ _CLASS\ ÝY ‚ L, †  	1__cQ\key =.G  Í `obj = š‹õ .get(key, None)) 0if , !is 
ß   	E @[key-X  ³Mô [obj

k/ =W  t:!	nl, raw_} ½     & =, õ   b% =m" Õs‹ £Nreprù$ifq= 	ë    ¢‘kind = ""X   Oelse$ k%s " %^ !._Ä"__% B ‚ .? (Z"top"Z  W"<{0}™ pðmodule {1}>".format(® ,� 8Eº ` 	0{1}Æ,{2` 
 Ì  Ôù àG 0 N ê ›  ý1get‰ ö{£oMODULE‹ð module"
       ò if self._table.type == _sym ÷TYPE_FUNCTION:
  õreturn "function" V _CLASSS VclassP nassertª õ in (1, 2, 3), \€ ¥ À"unexpected Ú ì: {0}".format(ø !)
@ ¡def get_id" )¡ ð 8 *id5 Oname7  ' 
9 olineno; ) = ¿is_optimize± AboolZ æ	is_nest[ . B Áhas_children… Q  0 G ’ŸentifiersJ ›×symbols.keys(J alookupA  , ‰‘ Ssym =g@ Aget('  Z Þ¦ym is None   UflagsD CJ [F ]F  .   Vspace3 f_check3 # )5  module_sco¬ Ê Ú .  ÀZ"top"7 Ü  ’ A = S,ç !, Ã œ ,  ¸  ¢ = ’ L&ymË ä,Õ ™/ [áÂ±ident) for  2 in» H  ,&)]d _` R í o  B_newTB(st,c P_filemÒ  � %st� YÓK M t.K  ¸  ®  Ê : ¤ ?A]


�# FÚ("):Nò# Default values‰Ànstance vari3sñ p__paramæ 3 [local 1fre' Mglob( :non? T  ¼!__ü¡s_matching9p, test_«èatuple(7 Æ  ZÂ … Ok ï &ifc s ”Ó[D '])‹ Z /etÔ  ›=q À.` m ðlambda x:x & DEF_PARAM)#
  ñreturn self.__params
 ð def get_locals(" !):  ; $if4   † is None"  & õlocs = (LOCAL, CELL)C  ! ótest = lambda x: ((x >> SCOPE_OFF) & �MASK) in U 	E  › #._© $ =™ ðidents_matching(l ~ 
ù Å 
ù Oglobú 
! û    û óGLOBAL_IMPLICIT,  "EX ’  i    al = 
2non(# Š & ­±x & DEF_NONF0
ÂT 
´ Ofree½ ¬ 0is_ žŽ== FREEŽ K Œm Ý >  


class C â(SymbolTable):õ €__methodi  � É ½! id = {}Û `for st“ØtŒ š.children
 Ýéd[st.name] = 1K A ¿ tuple(d«  ñ �__init__î  , v r, flags pspaces=&ð, *, module_scope=FalsU µ   ž  E ! =L ½  Z " =b  U  & ßð # like PyST_GetSŽ (m  ˆ À Ž  >or - Ù ) =è c__repr.æc1"<smñ  {0!r}>".format\0.__� )M  5   M Å 4 ßis_referenced9 Abool 2.__Jb& _symw7USE„ "isÌAeter4 ˆ O  iZPARAMK H B"""R>ð*True* if the sysš G9 .5""" \‡ )Cin (%6 ¤   _	÷ðand self.__flags &ñ DEF_BOUND))

    def is_nonlocal(self):   ¢return boo ¡.__flags &K ŠNONLOCALM ßdeclared_globT ú	scope == GLOBAL_EXPLICITX ¢ B"""R¥ ñ	*True* if the symbol is 7 .Ó 5""" ß  ‹ Ain (Ú u, CELL)2   1or 0¢.__module_= @and H-x‘annotatedI yKANNOOfreeF £ z== FREE`_imporŒ [IMPOR� oassign× s
• �namespacÜ ù`s trueø , ð	 binding introduces new  H .ù ÅI+   )qused as?õtarget of a function or classs¼ñment, this will be‘ h ñNote that a single� @ can. õbound to multiple objects.  Ifm  §)±  ø  z O ‰may alsoT UotherD Y �, like an& × 1lisÄ Pat do2 ot A  aBD  /J E  T2 sÜFget_ ºÞ0 a �  Š.  3w  ƒ  „  ° sú ó	} | ²G }  ìðRaises ValueError™ ‘ ‡  µ» î  Z s¦aif len¦ '._4f) != 1­ Šr ~  ("^ x "á<‚[0]

if �  __®¢"__main__"… Ar os, sy&pwith op¿ °ys.argv[0])ff4  µ Òsrc = f.read(‹ Pmod =Å÷table(src, os.path.split(sP £[1], "execÊ fx0denÆP mod.ñi wifiers(kainfo =& qlookup() ˆ  Ÿ `print('  ,  A.is_U&()  gÅÐ())
"""AccessÖñPython's configuraM J !rm .½
>
  DDfromù  " Àpardir, realp

__all”! [§'ï o Ð_h_filename',ÿ
    'get_config_var', s �makefile_ Hname Lpath _% 	C  & 
 ylatform; Øython_version jschemeW TparseÉ  ƒ ê]

# Keys for æ ñ() that are never converted to Pz ò integers.
_ALWAYS_STR = {#öMACOSX_DEPLOYMENT_TARGET',
}

_INSTALL_SCHEMES8 ãposix_prefix':N ‹ñstdlib': '{installed_base}/{platlibdir}/p  4{pys_short}$L  0 P   J %4ure— C ?lib„ Ô/site-packageä’ H � U ‘include':” h   @( · �{abiflagsE: b Í , f qscriptsøa$biðÎ Fdata æ}®SOhomeQÄP 'Ë 6Ž + S ÷P 	<è þ X^  : v//ntn<Lib¶ g$ `?Lib	 º
g/ 
4	IT]‚ ^ 3 `SèX Úò
# NOTE: When modifying "p"" �, update } ._í c ç1oo.�'nt_user³   ÿ_Onodo_
= ¾ ±: ôH À-packages',
  ó"'include': '{userbase}/Python{py_version_nodot}/I/ #,
A Ÿ 'scriptsB S/ B Jdata? ' } p'posix_£ G': { Ztdlib? ý /{platlibdir}/pÍ gshort}e '0 sJ 3>ure‘ ?libˆ ì/site-packages– L Ý U ò ¥ — ò8bin% Õßosx_frameworkÝLp Â/ §@ i •f : d¬ è WSa ó}

_SCHEME_KEYS = ('ç(, õ    >5',  ž  ¢   ¦ 1, 'íó)

_PY_VERSION = sys.@¸.split()[0]% ø_SHORT = '%d.%d' %5 �_info[:23  c_NO_DO: 9 
ðREFIX = os.path.norm	 (ž ÿ prefix)
_BASE_P, 
 _1 OEXEC1 Fexec1 b 6 g 
;  CONFIG_VARÂ¡None
_USER¶ 1 =  ñ

def _safe_realä   !):-2try	  ¼zreturn ( ' íexcept OSError2  Q A

if§ ¦ butable( „_PROJECT˜ s‹dirname(�  �C c))
elsJ #` ò can be empty if argv[0] has been changed and ¾1 isÒ @# un¤ ñ to retrieve theþ � program ¡ / _Å µ Áos.getcwd())	ð(os.name == 'nt'‚ I ð.lower().endswith(('\\pcbuild\\win32o ƒamd64'))À_˜  œi.join(, ð, pardir, pardir))

#ù4 set for cross builds
if "_PYTHON_PROJECT_BASE" in os.environ:
    " ö = _safe_realpath(/ [T ò])

def _is_python_source_dir(d)f  ¤  fn€ ¢("Setup", 	 s.local"(  ’  if¥  ~ p.isfile…  ÷join(d, "Modules", fn);  ? Çreturn True
 ñFalse

_sys_home = getattr(sys, ' �', None)
EPos.na* b= 'nt'Ê ì afix_pcoã  l …if d andÁ ñnormcase(d).startswith(™  1  1os.â 0  ó Á_PREFIX, "PCu /")ö * ` d _ ëÇ 	 )0 ,_,  üûž a(checkP=w¢6if  'Ž\ ² O0 ¡ , î 4)

ŒBUILD = µ  1ø	* š  ÀaschemeÄ@'posƒrefix',   X'í  Ì ò_INSTALL_SCHEMES[C ó]['include'] = '{srcdir}/I ~A JplatE óprojectbase}/.'
—ásubst_vars(s, m § 2tryâ  o P·s.format(**0 • ö except KeyError; 	H L K¾ & P g as vaW  $ ñ raise Attributey �('{%s}' %/ a) from¹õ ñextend_dict(target q, other   wkeys = , . (ª  þ‘key, valuH s.items(O  ° `if key(O  J * # ccontin¡  *  ± @[keyl Æaexpand¹(E � #rsw  re¾ !{}¤ ifAs isz  3 = ' _%  ,r_configj 1))
R  ÚHBin (* 3(nt+ ò % ==õ Quser( � * 4res') : C'(_ò7 *> ã4res[refault_[Í‰nô … r# the d;  ; �)  	 !_p&I 7 ‚ 	 '  /ð


# NOTE: site.py has copy of this öfunction.
# Sync it when modify this % ðdef _getuserbase():
    env_ ñ = os.environ.get("PYTHONUSERBASE", None)6 %if9 G  K ereturn 
*  x @joinx c(*argsy 2 áos.path.expand*   ; 7 )Q  if© Æname == "nt"‚ É ñAPPDATA") or "~"™ €  e v  @ ¦, "Python"q Ásys.platformv Àdarwin" and  ¦_framework� ] û "~", "Library",8 ,•  ™  ‘"%d.%d" %2 óversion_info[:2]¥ m `.localÉ 
ˆð_parse_makefile(  Iq, vars=ßÀ @"""P, C a M. p-style 4 .ŠAA diƒð ary containing S ò/value pairs is   ¡ed.  If anî  opÁ(alH ðis passed in as the second argument,ë!isC u* çstead of a newP .& """ôð# Regexes needed for  · é ! (Öò imilar syntaxes £# like oldQSetup"s)l ‘import rez ð_variable_rx = re.comp}³r"([a-zA-Z] ò0-9_]+)\s*=\s*(.*)"nŸ_findvar1E  Ó\$\(([A-Za-z] I <*)\@ 2@ {? }8 ‰!if  Ç #"   6Q = {}ë Fdone 6not   —with openxð
errors="surrogateescape")ûfj álines = f.read (ú Ã   0  s6 0if  p.starts€ A('#' Prip()Ò&''7  Û  Ï2inuÅ  Hm = Íp.match(H ¥ % Jif mH ön, v = m.group(1, 2/  3   Av.stŠ (    `# `$$'v°a literal `  n Â	, 2tmpI óreplace('$$', ''% P   `if "$"+ 2 
«    ¶y[n] = vc Nelse1 >try  J @if nh ¿_ALWAYS_STR)  - praise V3E`    â Zint(vB # gexceptB l ˆ# insertP	å  L    ».S/$'  I Õ @# doO  interpola	3 he65 óSlist(˜À.keys())

  ð4  # Variables with a 'PY_' prefix in the makefile. These need to
  C b! €de availL K „out thatK òthrough sysconfig.
? ñ Special care is] _ r ensureF v¨ ó expansion works, evenK !if¯ # Auses Ename— a” ‚  re $d_b õs = ('CFLAGS', 'LD 2CPP !)
r ¥while len(= a) > 0:  ß @for _ JGuple* &  * ðvalue = notdone[6 ]H  " ñ
m1 = _findvar1_rx.search(; ), 2, 2, Êif m1 and m2” v   = % Õ.start() < m2 yelse m2€   L  # 7  f ~ot NoneC n� Š.group(1ô  ® Éfound = True‘   @if n‰ `Z "  tem = str(% >[n]c $elH «K ð# get it on a subsequent r£ œ  ~ ½ NFals¾ x ¯os.environ{  doz 0lik›óke: fall back to = Omentˆ ig 2[n]ñ ¦  � B— @if (Ö9sp(n)}Š  l  3 @[3:]ºj )k  8 Æ .""»   ¿  " +Ï
 3 
 ±  Õ“ _ ]Q f  K ›? = ä 1if ° Ž �after = ;š[m.end():p‰ $ , ":mÀR()] +� !+ O `if "$"¼$ Ž  j ~øn S  H ?trye  !  ¾ ïin _ALWAYS_STR4  8 praise V§_Errorœ  )   4?intŸ #  gexceptY ‹ ýDame]%~.strip(ªb %lsJÀ              õdone[name] = value
 	 ðvariables.remove(7 /)
0 0if " ÿ.startswith('PY_') \4 1and5  [3:] in reC %d_| :p  ¯  . % =C h  ,   @ notk  
:1 
 5  & 0	4 NelseF „# bogus Ç ù reference (e.g. "prefix=$/opt/python");[   ð# just drop it siC Ýwe can't deal3 ²   J  — Úñ# strip spurious spacesg „for k, v?†.items()ðif isinstance(v,M   …   k.k (Tð# save the resultsh   ñglobal dictionaryŽ Àvars.update(U ) `returnzðs


def get_makefile_  5µ B"""R2  i qpath of„ M3 A."""Z öif _PYTHON_BUILDö t 0os.A ô.join(_sys_home or _PROJECT_BASE, "\ "´ ÷if hasattr(sys, 'abiflags'<òconfig_dir_name = ' ô-%s%s' % (_PY_VERSION_SHORT, sys.N m 
²C V  'ô š °.implementa‰ß, '_multiarch« 	R+= '-¤  � 
F .D s M Ã [Ë('stdlib'), º 4, 'V#')ú_8 2sys+ Adata;üj Ôenviron.get('åñSYSCONFIGDATA_NAME',¢  Æ'àX õ{abi}_{platform}_{0}'. 5at(> @abi=
šX A    U D=get1—
R, '')A )Ànerate_posixnÆR"""Ge Pœp moduleuðtaining build-timem*,Ámport pprint÷  ®Q = {} a# loada .Tlled ÀY³/ =ÂJ 2try0  –e_parseî(D ,£ s ÷xcept OSError as Áó msg = "invalid ý £ õ@: unô  to open %s" % j ”  ‹ Ô€e, "strep "Ò ' q   €+ " (%s)N e0 P Traise¶ B(msgÎ Iðpyconfig.h:
    có onfig_h = get_c ñ_filename()
    try:	   ¤with open(/ f) as f"  & UparseQ ‚(f, varsO àexcept OSError= e= ñmsg = "invalid Python installation: unable toˆ t %s" % Ž © ðif hasattr(e, "strep &")m  ª q   €+ " (%s)N $e.0 P Traise¶ B(msgÎ ð# On AIX, there are wrong paths¦ ðthe linker scripts in/ P Makeme @# -- #se;  K  reö vî  H õ source, but whe"#edK  , m  H `in ano£ ± directory., öif _PYTHON_BUILD ³ñ ['BLDSHARED'] =Ç&[' 
D 0# Tý ñ
's a chicken-and-egg situ¹‘ on OS X Cdregard F B_sysÉðdata module afterp change?òtroduced by #15298¸ #Ê Á ¢() is call-  é‘platform(»ppart ofa ‡ ð`make pybuilddir.txt` target¥PwhichW ³a precursoréB 
É 4.pyÌ Pbeing­ó
structed.  Unfortunately,B  ¨ _Ç ¡eventuallyÏ òs _init_posix(), – ƒattemptsG ªto import “ / àwe won't have ñ ót yet.  In orderI :forq  ñ àwork, if we'reá÷Darwin, just mock upZ
… 2manØ ò and populate it* Ë ™ d}µ q isƒðmore than sufficient ­ Pensurm @ psubsequ  3 to×  g‚succeedsf  @ = _% 	š_ Qif 'dö '×Dsys.Q “ f„Btypeš  mß!=  !.M PType(_ _( .Q_time�È  &  y R  s[@  ® ¤ÏA = 'M ð /lib.%s-%s' % (ç »  Qò_PY_VERSION_SHORT“ Yøsys, "gettotalrefcountcv Ñ+= '-pydebug'· 0os.jVdirs() ò , exist_ok=Trueu @dest*` = os.[Y.join7  ö ’ + '.py')õ k®A ñ, 'w', encoding='utf8'	Äðf.write('# system³RfigurË generated ³!us\Õ  Œ 'û B Êð2\n'Õ  ' j ’	ß& rpprint. ( , ¢Cam=fë P# Cre8'“    /ð fixup -- see Modulesð8/getpath.c
    with open('pybuilddir.txt', 'w', encoding='utf8') as f:
<   †f.write(= ò	)

def _init_posix(vars)4 ñ."""Initialize the module as appropriate for POSIX systems."""² ñ# _sysconfigdata is generated at Æ Ä time, see _ Ž _Ž !()L `name =" tU _ % P_temp&  _import__( ó, globals(), loc
 !['€ _€ k R'], 0o   T  \ . ›  ¦ ‹.update(  	b2nonØ f%&NTZñset basic install directories—    § ð['LIBDEST'] = get_a’('stdlib'ü ) ?BIN, Oplat0  ›INCLUDEPY[ yinclude\ ¡EXT_SUFFIX-  £ ÷	.extension_suffixes()[0]» 1EXE/ g'.exe' qVERSION C_PY_ ×_SHORT_NO_DOT/ aBINDIR. 0os.@.dir)°(_safe_real @(sysl òcutable))

#
# public APIs
#
Dbparse_ëp_h(fp, GV=NonePP& 2 a ( ñ .h-style file.
¢ ÀA dictionary' €taining ž À/value pairsKñreturned.  If anA !op>  H Àis passed in¾ Ìòsecond argument, it i9u* çstead of a new˜ .i ‹!ifê  ‘  í < p  Q = {}/ Ž!re ò
define_rx = re.compile("# p ([A-Z] òa-z0-9_]+) (.*)\n"¥^undefA a/[*] # E A[*]/E ˆ ¦while True¸ 0linjpfp.read ^ Õ pif not  2   QbreakT   Bm = Ë  _rx.match(4 ¼  " Jif mB ön, v = m.group(1, 2/  3 :try2    ‘  ×¾_ALWAYS_STR%  ) praise VCUError¬      } Zint(vv gexcept9 _  ]	O  û [ncv 7else q  %ª$ % (  a *)j 0j ’š åp0_h_j K(”RFà ô ñ"py1 %.hËöif _PYTHON_BUILD`if os.U † == "nt"  « �inc_dir ='  b `.join(Åð_home or _PROJECT_BASE, "PC")
   belse:
  ñinc_dir = _sys_home or _PROJECT_BASE1 
; 7 ñget_path('platinclude')4  return os." c.join(: ð, 'pyconfig.h')


def M âscheme_names()® B"""RL òa tuple containing the 5 !s 6 H."""€ 2 ø
(sorted(_INSTALL_SCHEMES)|  § z  3 x c W_KEYSá 2 (²  =_ó ‚default_ ÿ(), vars=None, expand=True @mapp£an install!.
"``` Q`` is6
' =ñ. If not provided, it willD Ò sµ d A forT €current Qform.8 ’#ifÐ Ø „S _è _ú K
4 Ì[á ]m(,© r. ¿° correspond}!toû ~ n	Ö   e s	 )[Î ã F9V*args'óWith no arguments, e ða dictionary of .I 0ura š ÿvariables relevantè2 ð
On Unix, this means everyÓL ô defined in Python's±Äed Makefile;O óWindows it's a much smaller setoê ç @listá Pvalue÷ðat result from lookÄ!upq Eeach/ £  ë	É B
åñglobal _CONFIG_VARS\ )if  † ã2 Q = {}7  %ð# Normalized versions× ôprefix and exec_ ó re handy to havOK pin fact¤rese are¿gtandar` �used mosÎ ce§ * – ’Distutils ` Å "['�  ']aePREFIX> 
) ¾ . _EXEC_3 
3py_2 ¯PY_VERSIONd 1 l_short7 o_SHORT= Onodo= o_NO_DOD qred_base  bè , 
]  |àbase'] = _BASEã_EXEC_PREFIX
  ÿ_CONFIG_VARS['platbase'] = 0 Wrojec3 ÏPROJECT_BASEd alibdirf @sys.w  4 Etry:  ¬ 
© …abiflagsC  4 úexcept AttributeErrorS  # } : ð may not be defined on all   eforms._ “ 5''
+ úif os.name == 'nt'‡ ø_init_non_posix(ê )F q aTZPATH%''( n S q  m õ# For backward compatibility, see issue19555z  SO5Pö.get('EXT_SUFFIX'Î �if SO isqKNoneF A['SOå %SOk ñ # Setting 'user³ N ðdone below the c½ to ;  oñ function to enable usQ ÷get_config_var' in<  V  @ -@ ·[— J4get¨ &()ð# Always convert srcdir” õan absolute path„ # (= p j H', _‡	u‰úif _PYTHON_BUILD— „D# If¨ Âis a relativ§ ` (typixÇy '.' or '..ù C   #•°n it shouldv¶interpretedV ¿¥ directory	 F   #>@tain¾†Makefile— #    $  =Š O�.dirname(îm5 _:  )5 <   ]B Pjoin(V ,
4 ;elsÕ F #,  ­ l0mea¸ �ful sincep instalV_on isò  Áspread about3  º ñsystem.  We choosN >  L: Ú>Œ ¯we know itE  [exist â (jÑ"['H ù _safe_real»( 	GFOS X¦ô require special customizaòehandleÖ ó# multi-architecture, pos-vers+˜&er“!ifD!áldarwinYàmport _osx_sup   7 .° e‰s«> vif args¦‘vals = [] à    for name i—n args:
  õvals.append(_CONFIG_VARS.get(name))0 preturn 3  FelseN  E ò


def get_config_varV 8 B"""RU 0theY Ðue of a singl €riable u  % ²dictionary r Qed by� 'i as()'.
 ÛEquivalent to� 6s()í . 1""" 0if ‚ == 'SO'³  <ñ import warnings-    .	 ó('SO is deprecated, use EXT_SUFFIX', D BionWN 2, 2rÞ ­ 
_¢platform()¦ Yñ	a string that identifiesM@curr? /@This» °used mainly8Ädistinguish 2 ð	-specific build directorb 1and,  t P @ribuÐós.  Typically includ¥ "OS‡O ±version andÅ ñarchitecture (as suppli` 'os.uÆà()'), although9 œ €exact in=a‰ | d¹pends on. @ OS; aLinux, skernel � O ðisn't particularÌ -3ant]€Exampleséä"edû›le Q-i586V 2    ‚alpha (?"ò   solaris-2.6-sun4uðÃWindows will'0 on\ô   win-amd64 (64bit 4 `on AMD ðaka x86_64, Intel	 ¥EM64T, etc… ôwin32 (all others -  Ïd, sys. Yø )¯ 2For: ¥ non-POSIXa3s, ¦sly justÐ 8s 'V ê¼0os.ù¿(nt¿1f 'û A' inœ Ãd.lowerD Ò  ­ % '2'•¯ if '(arm)J  Nrm32J /64L #&64L ± h4if ñ!= "posix" or not hasattr(os, '3'M p# XXX wDQaboutz@? NTÛ) T A¬*” ò # Set for crossG²s explicitlÛðif "_PYTHON_HOST_PLATFORM"Ã¥os.environß& ð  [A ]M# Træñ various flavour´AUnix×  os_ó, host, release, L°, machine =… Q(ð‚# ConverFà1to €cG òremove '/' characters,õ�ranslate‡  # spaces (E "PÃð Macintosh")
    osnamðe = osname.lower().replace('/', '')
    machin. 
 '  ' _( O A-')
Q #ifx ñ[:5] == "linux":  s ð # At least on L “/Intel, '… ÷' is the processor --A §i386, etc. ñXXX what about Alpha, SPARC, ?, òreturn  "%s-%s" % (,,.elÎ WsunosÎ Pif reÎ Àe[0] >= "5":ç  �# SunOS 5•Solaris 2‹  & | R = "s  " _    3%d.° Cint( •[0]) - 3,‰ 22:]Á  ^   ð!# We can't use "platform.architecture()[0]" beca% a… °# bootstrap•Pblem.U * û dict to get an error? öif some suspicious happensÄ « ð'bitness = {2147483647:"32bit", 9223372036854775807:"64 }r JS += "5[ Õ[sys.maxsize]4 à# fall throughÍ ƒstandardÐ-o-Z árepresentationI 	13ÿ(aiýñfrom _aix_support im   —L  © (Ú	j 6j gcygwinœY Y u %re Prel_róre.compile(r'[\d.]+ ’ 0m =g”_re.match…–  " Fif mí  9¯ = m.groupÄ :darÄ ª 5_os3´ à ø¾8 = 0 T.get_\  (B  Ÿ   > ïconfig_vars(),? ¥ 0ã‹Ž:Ù p)


defhò_python_version()tO ó_PY_VERSION_SHORT9 p_print_°Ã(title, data= ðfor index, (key, value) in enumerate(sorted(7 “.items())@  J"ifC  ï0”     | ¢('%s: ' % � ):  0\t%ÿA"%s"' Š  E_maió °"""Display Â inÚ”B sysº² detains.""]‘if '--genÕ p-posix-ß'î  "FargvÀ _+ _+ 
	w Æ Pc:fÉ  H†(÷ - Ì Ì3  è09 ð
Current installation scheòme: "%s"' % _get_default_scheme())
    print( _ ð _dict('Paths', ; p 2 „Variable6 °config_vars< ñ

if __name__ == '__main__':‹  ñX()
#! /usr/bin/env python3

"""The Tab Nanny despises ambiguous indentation.  She knows no mercy.

tabn? €-- Detec- ? ofF ðB

For the time being this module is intended to be called as a script.
However it1 €possible1 pimport  ñnto an IDE and usey 1fun¤ €
check()ø ð	cribed below.

Warning: !�API provi“ ,by® `likely{ òchange in future
releases; such   �s may notÜ ð backward compatÅ .™R

# R>  1�public doçð, by Tim Peters, 15 April 1998.@ ’XXX Note:² `is nowD@tandt slibraryz@.
# 3 ó Pneeds× uundergo¿ !ho|;M±current cod¼3tooH «-@.  Tã@willö ðaddressed later.

__versionÌc "6"

É$os
 %sy €tokenize J„hasattr( r, 'NL')	ôraise ValueError("' ô.NL doesn't exist --    too old")¦ 1all¢ !["=A", "<0Nag �process_D ñs"]

verbose = 0
file°Aonly �
def err*c(*argsµ �sep = ""Ëpfor argZ # ×  oðsys.stderr.write(7 “+ str(arg”) O  P 7 0"\nà  Ž  ](… ƒqgetopt
‹ sglobal × ), Ô " 6try¡ Popts,¼ 0s =üBopt.O (… âargv[1:], "qv"7dexcept- e² ü6msgW 32msg6  å areturn…  2@o, a3 „ ; Aif o/#-q) ;   	Ë * =Û A + 1Z  * D vD $ ="8 !ifô
ÀÈ ¥"Usage:", 0A[-v]‰ ó_or_directory .... � ø *¯r

classôQNag(Eq3ionö"vR8dh
×r() if dë ngc1.+0Capd~@handÇ2in Œ )% n  |ò__init__(self, lineno, msg ¡  ô  " .!  & 
   . =? •  h  … % !noj W K G Àineno
    deóf get_msg(self):
  preturn  A.msg "de/ Oline0 	    

. £check(file[ 6""" ‘_or_dir)
^ 0If )  ñ* is a directory and not a symbolic link, then recursivelyL pdescend D Øtree named bym !, • ¢ing all .p sL QalongJ _way. §  ñ	n ordinary Python sourcec b, it iK f ñ0ed for whitespace related problems. The diagnostic messages are” ðwritten to standard output usÇ �the print  qtement.: 2"""oòif os.path.isdir¦h  g ¦if verbose  9s  ("%r: listŠ ÃA" % H 1,))‹  1  Ž0s =‹  1 ˆ !  + % 1 in»sq Afull C Î Bjoinh 1 l  p Fif (Û o B )û w  ,    s0 1 -or0 , �normcase(� ó [-3:]) == ".py" _  (Í ³ r†±6tryü òf = tokenize.opeò 9 öexcept OSError as msg; 7err§AI/O ( F: %s£ 3 §ˆ üF > 1X U Ë  ù`%r ...S  ×å	Å �process_É !s(  Ð „generate `f.readV)G ã 2 TÇ ï ) ñ m ¿Indentationj / p #€NannyNagÒ 'naÁbp = nag.À 2no(ÿ T     Â¾ 6 Â ¾ð*** Line %d: troubleƒÐtab city! ***Üj” 3Q `offend ˜ A: %r:   2 Ø  ˜S ,elp`if ' '™  d:q‚ = '"' + + 	§ih ™b_only:)É B � p  #, ç p, repr(Á Ÿ %hfinall±s.close(ÁƒñClean bill of healthK¦  5…
class WFË#©Ócharacters uspkðand tab
    S, Tó	 = ' \t'

    # members: U  raw  # õthe original string  n
 *  nuO ù of leading whitespace characters ini /ntJ 4tab1 E[:n]* Enorm � öormal form as a pair (count, trailing), where÷  @ % 	R   ða tuple such thatº  ‰ ¡ contains 9 &[i›  8   �instances™S * i + Tc “ 	  <  yO'  K 5 âIt's A Theorem¯ ùm.indent_level(t) ==n n! ðfor all t >= 1 iff m.pQ == n
 .C •is_simple  Š Atrue9 1raw.i Ö �‚(T*)(S*)‰òdef __init__(self, ws)Ÿ N   ¡.raw  = wsi   …S, T = Wd8.S, k * £B = [¥  Pb = n Ut = 0T  ü  ch¢u ‡  7 Pif chS   O E + 1N      m b %elN TN n³ -ntP  j @if b·2len÷G     Ö+ [0] * (b - ;  b )Í 3 S[b] =û b]) (  õ Y y 3elsu   Ubreak> wn "= b    t /  î=¨ô :, bQ ¦( =à B<= 1ƒ€# return 0gth²qlongesté iguous run †ä(whether or noÅQpreceýRa tab@ âP ‚_run_of_E ï¤]«2 = û î ö ª Fmax(¬&-16 W	ý K ,• Gsizeu #ÉO, ilq #R  iWrangew 	F 0   Ò n6[i]Ó#¶   ` �il + (i//Û0ize=$)* *Œ P 6 œ"il­ xquickerg ` -R+ sumj se !s*aB[i] K 3 Mts *8 5  Ö d +Í o 
 [(© 
< )%  | )³ D Ðnum_tabs]
     ð"# and note that i//ts*count[i] is 0 when i < ts

5   # õ, trailing = self.norm$ eil = 0 ñfor i in range(tabsize, len(O 5)):-  d @ Ail +— / 1 * , 5[i], freturnŒ #+ \ A * (@ œ "t)À %# 2 bue iff¼ û
indent_level(t) == other. x  # Ï ¡all t >= 1  def equal(q ,? Õ w   *c 8D � ña list of tuples (ts, i1, i2) such³5  i1M Z 
¯ Os) !É sã 3i2.C ð
Intended to be used after #Ý )`known,ÔSwhichI Äcase it willk`at leaÐ  ne witness8@tab …  AAnot_h _' Mqn = max ñ
.longest_run_of_spaces(),’  L ¼ / 3) +Ê / Va = [f ð tsì Àg1, n+1Þ 4 iL„	
ó D ‘a.append(òÂ  #  ïô .   ÿ "5) )g ¤a+R]/Tr+	<ë*êð # The algorithmM0due{äVincent Broman. @Easy @prov]¤'s correct" qXXXpost vTrivial9 ni ô	sharp (consider T vs ST)6 !UnØ ù    �e's a fasñgeneral way.  I suspected so atLñ# first, but no ¢rc 0ForW  8  ¡ (& ‘common!) Aqwhere M¡¡N are both$hec ñorm (T*)(S*), M.less(N)Õ  €n() < N.d)K 9 `M.num_' ! 7= N p. Proof*ev › QkindaÄ  -w>dÉ dXXXwri?$up NSMI  Æ he4° ¥  ™ M’[0]) <= 1C  Î  åKin~ÖnKÉBFals/  7 �is_simple½ H  ‡ 0.nt¢ o è V ‹N#-bñ ð test already didv¨=’ ž  ¹Àange(2, n+1)7:
  ýif self.indent_level(ts) >= other 
@  K Åreturn False]  QTrue
 ##  óa list of tuples (ts, i1, i2) such that5 _i1 ==¤  3 3i2.C òIntended to be used after not[ Qless(ð ó) is known, in whichH Åcase it willÍ Pt leaÏ òne witnessing tab size„ 0defl _g _& (x,e)Uqn = max ñ
.longest_run_of_spaces(),‘  { » / U) + 13 ea = [] `for tsë Çrange(1, n+1‘  c &1‘a.append(ð€  _   wô 6 ÿ Ä5) )g | 

ŒdformatŠCes(wñ ñfirsts = (str(tup[0]) $ up%wS Åprefix = "atì"n Öif len(w) > 1Ø2 	 B+ "s1 ›  ò  " + ', '.join(” )º ò process_tokens( ½ ‘INDENT =   } — ,DE   xNEWLINE;   HJUNK †COMMENT,i !NL) ‚ @a[White±B("")pò check_equal = 0 ]S(typeO ð, start, end, line)yÔ sP0if 5  ê«   °# a programQ òtement, or ENDMARKER,Êúeventually followk#,ñ
some (possibly empty) runÊ�
  he0m ‰   # s (NL | =B)* (Ÿ2 | ‹;+)?6 cIf an '  ?�ars, settdOÑis wrong, andØ K  ù0ndo¦ãhen we see the_ ©¨ 8   [ 2= 1ª  'ely™ 
x
: 0† §thisguy = ÙV a   i. NP[-1].:(@ ï *  T) =5  noÒ$sséA 	–  D 0msgÍr  «P grea#Ae.g.‘4î
»  M ñ raise NannyNag(Ïƒ[0], msgÒ	� v s æ u,
u#É@re's» hRwe neóð check here!  wh÷at's important is
  ñ# that when the run of DEDENTs ends, ¡indentatio! ;theH òprogram statement (or ENDMARKER)i ‘triggeredU  n ‘ ±equal to wh¼ qleft at1 0topŸ  ª ‘ sp ;ck
� óOuch!  This assert z As ifK ”last lineQ \sourcÖ 2is i ñed *and* lacks a new>  --O n3p£ +ut‘ ou {in air.   bcheck_ý õ # else no earlier NEWLINE, or an  IN©	R I := 13delÑ Vs[-1] Xelif ; pand typ… ©t in JUNK:i  <  s¡ first "re½öken" following aÀ Lso iwmust beH Dtokeim next `“ q;N "¤a" argu”bexpose² @lead� �whitespaýPfor tCÔ;
 ~1cas9o ,L p{n empty™ ð string, so willÐ ±perly match­ 7  ) ’ with whi M "•"s"ÿ¹ was seeded) Ð9= 0  Ù uguy = W (.)' Pif no ÿ4.¤(@ ) [˜witness =jB.notÞ_  B 	p  A cmsg = ä  s ô e.g. " + formatI 3es(S 
»  K òraise NannyNag(start[0], msg³ò)


if __name__ == '__main__'Ý   ÿ()
#!/usr/bin/env python3
#- /ß
# tarfile.pyR 5ôCopyright (C) 2002 Lars Gustaebel <lars@g ±.de>
# All 8 ðs reserved.
#
# Permissð is  hereby granted,  free P€charge, Çð any person
# obtainwpa  copy/ f�oftware  |áassociated doc¾~0
# (@s  (‰3 "S7 #")p   d„ ªV ! !  UPout
#Ú @tricÐ�,  inclu# S limiðG ¡to  use,
#¿ Á, modify, meó °publish, diÊpbute, s `cense,Ý ‚/or sellD 1ies5g ® , o px#t EsV@whom2 '
#á  –ð furnished  to  ôXdo  so,  subject  to  the  following
# conditions:
#
# The above copyright  notice and this  permission ð	shall  be
# included in  �copies orŒ Ástantial porx 1 of— ’Software.ˆ ôjHE SOFTWARE IS PROVIDED "AS  IS", WITHOUT WARRANTY OF ANY  KIND,
# EXPRESS OR IMPLIED, INCLUDING  BUT NOT LIMITED TO  THEP PIES
#T ð MERCHANTABILITY,  FITNZ ð@  FOR  A  PARTICULAR   PURPOSE  AND
# NONINFRINGEMENT.  IN  NO  EVENT SHALL  TH2 ðUTHORS  OR COPYRIGHT
# HOLDE ’BE LIABLE| ñ ÒCLAIM, DAMAGE< aOTHER + µ b
# WHE ÑIN AN  ACTIONã áCONTRACT, TORT~ B ðWISE,  ARISING
# FROM, w OF¤ ‚IN CONNEK  “D»!OR `USE ORP‚ €DEALINGS	 ÷ /  üÐ"""Read from sPwrite¾ñtar format archives.
"""

ver�ñ	    = "0.9.0"
__author__ ðLars Gust\u00e4bel (lars@gustaebel.de)7 �credits__M  2 Ðavo Niemeyer,
 lJ ô	, Richard Townsend."

#- P
# Imòs ã ¡builtins i! à open as bltn_ 
 4sys o
 $io eshutil 4tat Dtime Ustruc  ä �re

try:
Es £pwd
except¿ RError# ­pwd = None7 ?grp7 4grp7 ð
# os.symlink on Windows prioròñ
6.0 raises NotImplementedˆ 
; _£ ñion = (Attribute$ ,9 )² A# OS) ` (wineß â=1314) will be€ 2d i¦°caller doesû@ hole6ð# SeCreateSymbolicLinkPrivilegeØ 
 . ¾ C+= (� $,)B2NamË wbass

#ttarfile;*ó!ll¸À["TarFile",  @Info 3is_6   1Tarþ    v    °   "Compresa … "Stream uExtract THeadeZ 	M €ENCODINGq ÀUSTAR_FORMAT 7GNU 5PAX 	C uDEFAULT   "&("]px 0
# ^1con ¦C ( Ã
NUL = b"\0"C
 #ïPnull 3úacter
BLOCKSIZE = 5122 °   # length.@proc�ðng blocks
RECORDSIZE = BLOCKS�IZE * 20  ð# length of records
GNU_MAGIC = b"ustar  \0"0   À# magic gnu  Ìstring
POSIX9 R\x000; 7 Xposix9 ò
LENGTH_NAME = 10›  k   : Wximum­ ¤a filename? OLINK? Hlink? `PREFIXA "55w  ~ ð	the prefix field

REGTYPÀ "b"ð ?  ‘# regular¸ (
A0 \.  / 5LNK^ 1‰- @  # Ï € (inside] U)
SYM8 28 �symbolicA E
CHR0 30 öcharacter special device
BL£ 4; \block7 &DIr 57 ådirectory
FIFOŸ 6- l# fifob ECONT6 76 ¢contiguous�  2 S_LONG–6b"L; P# GNUfQ longF5GNU3 Š?b"K3  ®f RSPARS:S1  Õf csparse� 0XHDj �x0 !# Šõ.1-2001 extended header
XGL? g? dglobal= ˆSOLARIS_„ XE �# Solarisw ü
USTAR_FORMAT = ä · a1988 (x€) format,< 1ê  ’1 6PAX1 2*  o &E(paxm vDEFAULT@ M O

#- % 
#3 ™¯ constantsO +õ File types that_ ðsupports:
SUPPORTED_õSS = (z$, „#, _#,
 C#, ª$, ‡/ n#, L#, / 7 j,Z « | I7 
;\)

# ùwill be treated as a„.´OULAR	á ¼ … €are part_ 4Ñ¥.× î ™P v1 	� ò elds from a paxºÀr that overrô%ide a TarInfo attribute.
PAX_FIELDS = ("path", "link @size ™mtime",
  @"uid g 0una% 1 "g	 ò.)

# Fields from a pax header that are affected by hdrcharsetž FNAME£ {£ v }v /int ñnumbers, all other f© !
#” @trea“ £as strings� WUMBER’ !"ar: float%/"c  F
(  CD: in8  L ‚ 
Û - %ÿ
# initialization
#K %€-
if os.æ‘ == "nt":
ýENCODING = "utf-8"
else ðsys.getfilesystemencoding(5˜ 'ð# Some useful funcê së )ô
def stn(s, length, ® ’, errors)á Ã"""Convert a8ñ to a null-terminWÑbytes object.91""" as = s.` !e( 5ingg # ¢return s[:� R] + (   -£ ±(s)) * NUL
½ 0nts½ N µ  © 	Ë 
µ pµ ±find(b"\0")¨ ¢if p != -1i  :ß A[:p]" Ê o.decodð À /i(cÆºž rpython  
¥ P# Theoõ re two possibleÍQs for­ V Q, see¬ Ò# itn() belowZ ó	if s[0] in (0o200, 0o377 ð Qn = 0@    ` i/ Prange´w(s) - 12  ( un <<= 88  ¢+= s[i + 1>  ƒ "=={ j   ~ �-(256 **#o B - n¥ž 1 :tryB  °?`"asciiî #ctæ 7    l `int(s. Òp() or "0", 8j  % Ðexcept ValueE:
n áraise InvalidH'& 2("i <{ ?næ ŸÀn, digits=8,Îómat=DEFAULT_FORMATj	ª	5HAí¡ó# POSIX 1003.1-1988 requiresxsD bYVed as!ofÖs# octal® r follow. #`, this¤Pows v6ss up toE R(8**(ò ð-1))-1. GNU tar allows storðing numbers greater than
    # ðt if necessary. A lead8 ó0o200 or 0o377 byte indicate thisE ð particular enco< À, the followK �digits-1E õs are a big-endiŽ ðbase-256 representation. This aM ôs values up to (256**(_ S))-1.– "A À 	· Ãs a positive8, aá `a nega  H >V ¡n = int(n) óif 0 <= n < 8 ** ‰ a - 1):#  g2s =ø ˜("%0*o" %) ñ, n), "ascii") + NUL; ñelif format == GNU_FORMAT and (s Œ  C Ž  îV >= 0 ¥ qarray([<]ç   Oelse1 73771  5  /Œ ¢Q + n
Ý   ïfor i in range< ( ò s.insert(1, n &®›  # qn >>= 8[ 
« praise V5ð Error("overflowz Ý‚ field")› óreturn s

def calc_chksums(bufØ`"""Calõ`e chec%  ²P a metð's header by summ upË«     charact aexceptA  >u œ ± which is tÅtd as ifE ðit was filled with spaces. Accor“ / W ôGNU tar sources,D @some as (SundQNeXT) ulô’ ` Qigned¿ C ¥ ñwill be differena0theôr)0ars| �  bu$ ² ˆ   ÷high bit set. So we‡ 5twoobs, unsŒ 4andE  µ1""" ( Î0 = œ+˜ð(struct.unpack_from("148B8x356B", ús[ E bE bE d“ ), ] �òopyfileobj(src, dst, length=None, 9aion=OSå° Asize! ³3opy; ’ ë  8 _ @ src&n  i BT   If8 2is v cM  ®@entiÙbontent3 u0bufˆ  
 Áor 16 * 1024˜i[ =–$# ~ ‹pshutil.� ¸ &~ ¹ (T U àblocks, remain¥’= divmod(^F@  ¯b¹¯? \ \ Pbuf =DP.read, ú <    è   0) <Q  É  # ­Ïö
("unexpected end of data"U ‘dst.writeX ÁÀif remainderƒ != 0:
  õ
buf = src.read(remainder)" åif len(buf) < ! C  J öraise exception("unexpected end of data"W ‘dst.writeZ n òreturn

def _safe_print(s)m ôencoding = getattr(sys.stdout, '  r', Nonel 4if  q is not R  » s .$ !e( öing, 'backslashreplace').decod% a ¤ ,è ô	=' ')


class TarError(EÉ X"""Ba0A."""Cpass> rExtractB K A vGeneraltb for e5   ex sW OReadT ¨ L  unÿable tar archiveU ¿Compression\ Qavail] c=  methodd oStream_ `supporPopera•as on sF P-like ?FilÒ SHeade¿}
¾.h1 yXEmptyW  ×
ƒe4  [ —TruncatedM ( Y t8 ] 	7EOFK W ëOfileY 	oInvali´ i6 Y 	¯Subsequent¹ @missZDand h �extendedq ?
#- ³
# internalr Oface9 :�_LowLevel «€"""Low-l  a’object. Së s ¯Å  [Aing.VP   Itþ0useà Astea”˜a regularR Ï(4ingA baccessP  ® ªó	_init__(self, name, mode| d  A = {5     ú"r": os.O_RDONLY, w  WR " |, TCREAT VTRUNC8  }[i ]H aif has)ços, "O_BINARY"›  Š  6 2 |=a # D  Ö A.fd  Vopen(â ‘, 0o666)
.  Qclose
c 6os. 7.fd0  ³/ X, siz3 “ $ 3.fd' q  èq $, ( Ó #os^ðself.fd, s)

clað8ss _Stream:
    """Class that serves as an adapter between TarFile and
; a   a sL ÿ-like object.  The  Q onlyu õ+   needs to have a read() or write() method and is accessez ðblockwise.  Use of gzipA ðbzip2 compression@ ”possible.� A¢ ôcould be for example: sys.stdin,=  @out,Aocke
 ôtape device etc.
1 t Š €intendedý qbe used  brnally¥ 2"""@ ñdef __init__(self, name, mode,ê òtype, fileobj, bufsize)ä ­ è¤onstruct a³§    j S._extW u = True  $ifq  × FNoneo  s 7 æ_LowLevelFile(¼ )L  0 p  RFalse " %ifí z == '*'r ñ# Enable transparent2 	`detect á&thÍ  _ #Š:fac Ð BcProxy( 
Ì  ~ ”$ =$D.get &()Ô ö   ‚ ! =Ú Æ%""#  ì#   
 Y ! =ï  z 
! ¥  � 
  1      } L = bš 4pos 06 0cloÞ V Ê:try»ÛJ"gz"!  c 6     µimport zlib‚     �except I# ^ErrorY  ( vraise C7,  ("U  j0uleè�not availi"ö G ­4 =� ! Bcrc   Ÿ.crc32(b"L   ify eì/"r p  DN_gz(• )  ~ e4+lsÍ B   ¾ o ©p 	A ,elÍ?bz2¾  Î9bz2X   À Í'0bz2SÌ€Kdbuf ®  50cmp# €z2.BZ2De³ —/or°!OS’­àcmp = bz2.BZ2Cçompressor()

  ùelif comptype == "xz":#  . >try   ½import lzma5 �except I# _ErrorD sraise C¤ 1ion,  ("U ý module is not available")o  if- Å rÄ   ¯ ý self.dbuf = b""D $ Qcmp =× p.LZMADe$C '  [ ó 8ion= Ï k OelseJ � Âo!= "taÿ fqunknown á  ½ Q%r" %   8å 
¼ !if » º_extfileobj%  3"  z.close(Ë!  ‰d = True;Ç ÄÀdef __del__(6 )n ¡if hasattr 2, "R f") and«  8 ¢  -i Ñinit_write_gzV p ð"""Initialize for * Ñing with gzipJa.Ó "… Ä .ø Uzlib.xfbj(9,  •DEFLATED,L  ½  -A ŸMAX_WBITSB A ßDEF_MEM_LEVELE 0ôqtimestapðstruct.pack("<L", int(" . 6())8 ˆ _’ð (b"\037\213\010 @" + 4 [  + " g02\377;"ifQ�name.ends®g(".gz"Ý Tn  ' & =3 U[:-3]ñ# Honor "directoryóõonents removed" from RFC1952< _ Àos.path.baser l.
 ý #B ñ says we must use ISO-8859-1ˆö the FNAME fieldzs @  c Ã.encode("isoG ó", "replace") + NUL  èe£ 7, s5@"""W-@ strPs to � fstreamˆ � õ u‘g‘­ 4crc‹(crc32(s"6crc-0 Æpos += len(s q @sk 5cmp’H c M ?elf!õ if a whole new block0   PreadyX!bep7tenXÀ""
        sãelf.buf += s
  ³while len(s  D) >  Usize:,  3  Õfileobj.write9 ![: 0buf7 .])8  ~ =] [/ 1:]
0 ‚def closW )} @"""C ñ the _Stream object. No operation should beQ  µ õ
   done on it afterwards." 5""" "if£ ‡ d‚  J breturn«   Ã ) f = Truu :try< X ó mode == "w" andm úomptype != "tar"< l  C Á ­¶cmp.flush()’  * j 
?buf\ ×
È _ õ  ‰ 7= b8    ~ cÓ  ì /gzÒ   . M z ótruct.pack("<L",#>rc)� D ÷pos & 0xffffFFFFQ nfinall´2not€ C_ext© A• ÒÑ_init_read_gz1
Úð Initialize for ) °ing a gzip Isressed € ¹KCcmp dtzlib.de? Qobj(-$  –MAX_WBITST dÚÁ# taken from” `.GzipF;Ówith some altƒ__ý 0(2)à«b"\037\213ðraise ReadError("| ú "« Y 1Y /10U @CompD3ion\ µunsupportedb ?wmethod"S¡flag = ord».Í 1=: 6; 1if > :& 44OxlenT � + 256 *p 
ö +(M 	t 8t ì ¥
 M 5Å 1P     0if �`s or sÁ>NULI  * Ubreak=*160 ‘ n2� Æ2Æ ¿Atellû
¶R‘s�!'s¡Ð pointer posi“¯L\2posÃ o Aseeko ,B *=0v ?Sets  to4 ð. Negative seeking
    äis forbidden.
 5""" àif pos - self. U>= 0:   4 ðblocks, remainder = divmod(1 < ,F ‰bufsize)E ò for i in range(T )i  m ˆ Qread(
 L  $ “ m JelseW ö%raise StreamError("seeking backwards is not allowed"P breturnÚ Apos
Ö Adef �  ‹ !, ï u B"""R6 �the next" ð number of bytes from # sœ .™Sasser8 œ ANone~  (Rbuf =– _Š 	s ˜ Ï­+= len(bufÓ 6bufÎ E ?elfÏ  è ¼ ™ Å "if¢ öcomptype == "tar", Ì c_‰ Î U "c Ç × dÍ Ut = [ ]3 ‘while c <|
q €# Skip uÍ!ly	ñuffer to avoid unaligned double b! 6ingH » â :bufc   ¤ l   µ $ b“ # Å  , 7 ‚fileobj.û ¼* 6 !ifÚ¢    Ubreak7  ?tryÍ 
`cmp.deÕJress\ @ bexceptû >ionR ˜CRead–„invalid Z  ~7ata� ^ Žt.appendx /c î !¦b"".join(tH LP = t[Û:>“0t[: ]( )áÃ If internalR ye,ƒ ×‘ another ,-/ q	('6bufè &	ok	g É9­ È’# class _)

 ÃProxy(objectœ """Small p > õ	that enables transparentº4ion �detection‹î{ 	òface (mode 'r|*')_ ÔA  i�__init__#, û   ðself.fileobj = fƒileobj
  ±self.buf =  f  ñ.read(BLOCKSIZE)
1 Adef   + �, size):  N   8 L & breturnm 6bufY Àgetcomptype(K Z %if0 ÷.startswith(b"\x1f\x8b\x08"1  � i E"gz"} 'elK õ[0:3] == b"BZh" andg S[4:10 v1AY&SY"é ^ ?bz2_ ª « b5d\x00 P80", À �fd7zXZ")½ x½ /se… Ftar"IMclosC R.Ý" ÿ
)
# class StreamProxy

#- à
# Extraction L  object3 ` p_FileIn (3 ï ø"""A thin wrapper around an existingj T thatÎðprovides a part of its data asC ¡individualE 9 ƒ . '"":�__init__€,4 ²obj, offsetñý , blockinfo=Non Tobj =? g  3ƒK # =T 
  Q =:ize Aposiv:= 0 ó name = getattr(~ 0, " 1", £ 
3 þ’d = False8   &ifÛ 1 is; 
pú b = [(0&)]C ð# Construct a map ©“rnd zeroe s x ­map_index ã  G E= []Æ ylastpos* Breal O g2 3forq´ 2 in‡  Ç
ä #if* 3 > i 
! ³ .µAnd((K,1 2)ˆ < FTrue2 º ! +^,o Ø )D î !+=' 	` µ cK $ $if§ " <ð w
ä D?mapà !  8 b!QflushBå õ Bpass'D=abl¥³ - Owrit- z. Oseek. ¸ %., ¾ Ltell½ B"""R¶±the currentß ™Î Q ò   Ð u * 
« k ,G ÷, whence=io.SEEK_SETF """Seek toô0in ˜  Ö ‡ Ðif whence == çio.SEEK_SET:
  ô	self.position = min(max( a, 0), & Usize)= ô elif whence == a :CURa 4if L J < 0  ‰ \ #  = ~ 
 +B  Ž ‚  = OelseS ?in(S  Ý :ENDm ; ¼  B  S  ¼  )È Ä öraise ValueError("Invalid argument"‰breturn£‹ 
%�def readü  , � f=None)Å ñ"""Read data from the file.C  d5""" !ifG @ is J I  )  a " =Š  - –  %   ò / ~  r E )Ü  G wbuf = bŸ Rwhile¢ >l ?Tru1  ÿ p, start ¤op, offsetÏ Amap[¿¥map_index] ‹     B # <ø z < stop- 2   ]breakL " ,   
† ] += 1>  (  Ž  Ü±  ¦#le	7map 0  d 9= 0c clength-¯>topªT !ifem  r“obj.seek({!+ ¹ž-¢)üa b¨H ÷¨ . 0if 	Pb) !=
 >gth—  [ ˆ !‡òunexpected end oÔ � 6    ›I+= b8Õ+ SNUL *Ž 	6  a$ -© 
  áf+$ 2buf5Ainto\7, b Š »@'(bn1b[:8@uf)]y%ufŽ j  o Qclosel i ó @d = “ð 
#class _FileIn "

  Ex ðObject(io.Buffered—Fer):l �__init__o P, tar	 Ginfo�   Xobj =q (1 . 9 .‘_&ó  ç  0tar^ .¨3 Wspars/…super().¤ e )ú ç M

#- €
# Expor}C-/es' 6ð TarInfo(object)ñ.:
    """Informational class which holds the details about an< ô   archive member given by a tar header block.3 0Tarr ð objects are returned; ²TarFile.getV 7(),< 
 ‡s() and 5 starinfo 4are= ðusually created intern œ A"""
, ñ__slots__ = dict(  .�name = 'N !of
%.'­ A mod. ø Permission bits# 0uidP ƒUser ID S u ‘who origi£ Ã stored thisnH gH _GroupI *1siz´ S iÌ)te² 2mtiT pof lastë AificE˜ `chksumã H@chec % 0typt  ('Ü  . D is µ3oneõ se constants: 'œ    µ'REGTYPE, A
 2LNK 2SYM	 2DIR	 BFIFO
 K  BCONT #CH0 #BLK 0GNU –_SPARSE.'¦S link+(,Àtarget file ! ,iÿ is only presentÖ  Ú  iné	> 2 ?â å 	“ uo  ˆk  ‚g   A   €devmajor" rDevice   nu÷+ *in+  + `offsetT 8The0¸starts here[ 0 �_data = "5  I1's  6 "…Bpax_ˆqs = ('AÓ ì ryIðtaining key-value pairsm/an‰¡   'associIÃpax extendedô	|Psparsâ"'S
 Ø §yè 0tarØ v = NoneÊ _H P_stru9   w_c )Ûñdef __init__(self,ˆB="") h@"""Cb g + as.1  › #op7 3‹ ˜h`[ &   .8 " =T  ! C   #à 
. RU0o644. -pds3 b0.  !# a*id* D* gR+ &, #Ö  
W 1- #0 R
4 75 #Z B
2  63 = òç h  . À   self.link¡name = ""  p# link  
 �   self.u ) Ÿ   # user,  g, _group-  Ãdevmajor = 0r ’# device  jnumber�  6 /in6  6 
7 goffsetk  Æ ÿthe tar header starts here= T_dataB  # = qfile's  > 
? PsparslBNoneê ##   meã Ê information< Bpax_Ÿ as = {}~4pax´ 9 : ‘@property �def path(Ë!):  ‚ F'In F @s, "ºÐ" is called "7 5".'3 breturn - 
 @' S.sett©	r ,÷x  ‡ .> ! = E ´  Œ Z ¸  *  Q 	¼    ? À     5     / È  † ,! 6 Ð  '   % =# Y  �__repr__D : Oñ"<%s %r at %#x>" % * Ð.__class__.__] 5__,=1,id% &))h @get_ êB"""Rº ±ðTarInfo's attributes as a dic~Aary.Ù &5"""  \  ‚ !  š  ": ,# Hmode#   › & 0o7777, 3uid+ O ;uid" g" g" 9sizp   E Cmtim$ T $ achksumŽ $  % 3typH °   # "":#  ' fn '  $ ^$  $   Uo  '   -'   »}Z Ú!ifŸ ["Þ ó"] == DIRTYPE and not  ç].endswith("/"ñK Bnfo[k†] += "/"h  i  ?QtobufÔ", #ø,=DEFAULT_FORMAT, encoding=ENCODING, errors="surrogateescape� aÿ
string of 512 byte blocks
'‡›ö f»  ;SUSTAR¼ ¦ '  G €create_uU (î å )³8elii =GNUg À    return só elf.create_gnu_header(info, encoding, errors)
  õelif format == PAX_FORMAT:#  * ‡return se ?paxe ] +seH °aise ValueEŠ “("invalid„ 1")
x Cdef Í Tustarj  � /, Õ k B"""R² ñthe object as a N  q block.q  å 5"""  c ò["magic"] = POSIX_MAGIC¢  1 aif lendÑ["linkname"].o!e( vö ) > LENGTH_LINK°  M rR Ä is too long! 2 	 { JNAME{ í ‚prefix"]`"["R " =öÐ_posix_split_ ÷    4 í '=_Ö‚D s, USTARx­–à.9GNUŸ sequence<GNUxbuf = bM(9 _ +•N  'Ñ@ ŸÀGNUTYPE_LONG|gY:¬ G¨  ©¨ 
Yf ¦	_ ¤ÕN ]Ø]);fñ If it cannot beÔ mô    represented this way, prepend a pax extended­§H ñ with supplement( Ú?ionÎæœ  } Ws#ss.copy(¶ 3 ð# Test string fieldsÝ  võ±s that exceì e"  Gcgth or!Ö I# be …in ASCIIÔÚ @for H2, h 0lenV Ein (Q  ¤   (à”, "path",™ uF), (Ð!,  
'  D/),V  u{ D", "	 !32O g 	 V32)):% ” "ifº 8 inwr %   ð# The pax header hasË priority.
  ™continue
 ú# Try to encode the string as ASCIIK Itry:B  g ²info[name].H °("ascii", "N Ict")5  except Univ E| ^Error\ Ñpax_headers[hd 6 = q 	W  Œ è vif len(8 0) > ?gths t ð# Test number fields for values that ì !edZ" u limit & N 0 @like’bŠ@oredŠVfloatŠ d  ÷, digits in (("uid", 8), ("g ‘size", 12 Cmtim )ý 0if V  N w
$  d¢# The pax šF has{ö  Avoid overflow¶  ;   †E = 0     Â?valù ¹ pot 0 <=|“ < 8 ** (@- 1)qñisinstance(val, V ‚ ý ×  = 5 
È - Î Ï ¡# Create a*„extended3 ³ wecessar® if- ñ
z0bufˆ aelf._c[ _© sgeneric4 ( –²s, XHDTYPE,ß6ing¿ Oelse` 6b""#preturn z 8+ sz c Qö, USTAR_FORMAT, ü’replace")R Á@classmethod'Hdef Ê TlobalÉ Hcls,¨B"""Rš  °`object&jgG hæblock sequence�1"""„  Ãç ?clsZ"GLZd"utf-8ã  Ò Ð_posix_split_P(:,[Š0, eñs× S5 ! a, p longerF n 100 charë toTUrefixÃ d   and: 7par.ë Ácomponents =f .¨ 7("/£ _i€range(1,+(; )µ  @pŒ · = "/".join, F[:i]v .  , +i:, ¸a ]d5ingC)øÑLENGTH_PREFIX\ z    ƒ N JNAME& D Ubreak] Jpraise VÖ ("q q is too×0 N ~ä '0kstatic1ü‚Ànfo, format,ó encoding, errors):
  õ)"""Return a header block. info is a dictionary with fileA !  * 0rma$ @, fo õ must be one of the *_FORMAT constants.F 5""" ñhas_device_fields =c ð.get("type") in (CHRTYPE, BLK	 )C =if F ô  û €devmajor\ 0tn(í `  „", 0), 8Ò ] ? /in?   ? OelseŒ astn(""w µÞ � 4 
5 @partJ[  G  < ü þname", ""), 100,9,> i:0mod> ±0) & 0o7777È ): 	=uid00 	g0 2sizš E, 12Ñb 	1mti 3  b"C  á", # checksum ¶
)2nfo_¿Q, REG²
„ 
ŽOlink’i ûmagic", POSIX_MAGIC„
n uk /32ü
> g> f
    =
 
j eprefix¦/55ª  |%]
 ñbuf = struct.pack("%ds" % BLOCKSIZE, b"".join(.)ô!chÚr= calc_ us(buf[-? k:])[0]q  # ð:-364] + bytes("%06o\0{ I  , "ascii")$  T F357:J r¡2bufÏ Ñ@staticmethodp ódef _create_payload( ì �sstring '  Õ2ledáBzero­ ^  â�   up toÊ�next 512$  borderÌL�s, remain^°= divmod(leg¬ )Ã…t'if7 :> 05¸ E+= (ƒ& -3 u) * NULÂ F8 J_classI’gnu_long_`(cls, è , Æx ¢ W0GNUìØ_LONGNAME or  ÉLINK sequencX1forp [ Š " =! ,!e( èÀrrors) + NUL3

  ™info = {} û["name"] = "././@LongLink"' 2typ'  	  2siz @len(P )! Qmagice –GNU_MAGIC™ ð# create extended header + L … blocks.S Âreturn cls._: _1 (ã õ, USTAR_FORMAT, encoding, errors) + \L 	M spayloadÉ + Á@classmethod Ddef } ´pax_generic‰ Pcls,  ™ 0s, 6� !):F  ~ B"""RÑ æa POSIX.1-2008”or global…sequenceD ò%   that contains a list of keyword, value pairs. The sD çmust be stringr&""à# Check if onec ¦the fields� `surrogÕõcharacters and therebyw À# forces hdr+ ðset=BINARY, see _proc_pax()* ` more èvrmationÖbinary = Fals<for(inœw.items(“ —6try¤    D.RÀe("utf-8", "06ct"õ , ð except UnicodeE† eE‚W º 6Tru¹  E   Vbreak.·records = b–2if F 
^ P# Putt_¬" a ”beginningÊ²W ƒ t +u '21M ¬6\n"¢ r$ª$ =¯i
_ñ  ® Ð# Try to rest/ ¡ñoriginal byte representD û `Ü'ø N €NeedlessS Bsay,l U 
 <:Qmatchm .ngL d " ={ß E  I6lescapeR:lseß   T œ)• + @l = ¢j 
  B   á3   # ' ' + '= 5\n'« C ™n = p = 0 `while ¾   2 1l +y jstr(p)É V žif n == p?    
   ‡ n‡ §Rytes(p �, "ascii"ä db" " +c` + b"=  	Ìð # We use a hardËd)APaxH¨"§0lik;far doeX�# insteadf 5 6®î µ Wmmendp à«‚  : Ð["type"] = tyCpe
  ûinfo["size"] = len(records)$ Qmagic% ÅPOSIX_MAGIC
% ò# Create pax header + L … blocks.- Ñreturn cls._c7 _3 (� õ, USTAR_FORMAT, "ascii", "replace") + \N Ë 	O vpayloadÍ . Á@classmethod ñdef frombuf(cls, buf, encoding, errors):-  h ñ"""Construct a TarInfo objectK ± a 512 byte s þ 5"""P !ift–buf) == 0j  n Áraise EmptyHSE� 0("e f"©M Ï!= BLOCKSIZEU ™TruncatedY t ] Ñbuf.count(NUL° c 
9EOF] ¶end of file_ 
ù
chksum = nti(buf[148:156]à & Ânot in calc_ s4 ©?jInvaliè €bad checs &")ÆPobj =I(v �obj.name› g [0:100]) Î  5 2mod5 Ð 07 8Ð  % 1uidY $ H8:11ô  $ g$ k16:124H  ÃI \24:13I 3mtiÈ o \36:14“ Q “	Ô 0typÔ  y56:157]  Klink-157:257/u8 o265:298 g8 o97:329p ‡devmajor6{329:337[ ) *in) g37:345) aprefixL $_345:5&3ð# Old V7 tar format represents a directory a wregular@ Nöwith a trailing slashq if„.¼À= AREGTYPE a‘ÞP.endsH K("/"H „= @ DIR; 2ô# The old GNU sparseÊ Ðoccupies someû’the unuse~ ¤#4  ceÎ  Qbuffe€ up to 4   T t7ureH°# Save themt à later process	@in _ _™ /()0GNUÙ k_SPARS2•pos = 386x º ‘   [  Pfor iÑ {range(4N # :try•    aoffsetG£@pos:€ G+ 12o ,  0numn Š <2 ; ð 24])
            ñexcept ValueError:
  ]break ýstructs.append((offset, numbytes))3 ™pos += 24 úisextended = bool(buf[482]B ãorigsize = nti% \3:495) ³bj._sparse_¦ C = ( &, q $, U %)
” õ# Remove redundant slashes from directories.5 êif obj.isdir()H  0nam¹  ».rstrip("/"z 2con© Ð a ustar long? 	m ¡prefix andx ÿtype not in GNU_TYPES† = q+ "/" +A  a Í `return Á@classmethod% 1defÓtarfile(cls,  ý B"""RK ðthe next TarInfo\ 1ectE   CFile a ‚S ú 5"""  Tbuf =v .ˆ  ^æread(BLOCKSIZEB obj = cls.Å0bufAµ —.encoding  sA .äv  •tell() - z § Mã._proc_member(Ü ÿ/#- 6z ò# The following are Áas that �called deÂ & 0on ªNCof aK ² .S ù entry point is Ó ð
) which can be overridden—M 1subOã to add customI 4*()§ =. A S MUST• ‘implement³ ê  ¢operationsÓ# 1. Set selfÈP_data‡  ô @posi0 a whereT  Óblocks begin,] P   if#  re( U† 2# 2s êv q "mæ's header willx ˆ S# 3. ` Ö ð or another validYm6  »	µ ; ö
½RChoos`right À0ess+M	<¦ º1he G ¢ h2 it�  ! Ç"if”. pin (GNU¿ _LONGNAME,Ò GLINK¦  N b É c0gnu6d '   )elo %==\ bSPARSE- *   Y VX  Ç 0XHDµ R, XGL	 ƒSOLARIS_ Æ ?paxj /se¦ vbuiltin= šÀdef _proc_buóiltin(self, tarfile):
  ñ """Process a bu- ò type or an unknown Uwhich; ð   will be treated aF €regular j .. 5"""  � ä.offset_data =š .5 ¥obj.tell()2 - < = ; " "if pisreg()¿ , Ì önot in SUPPORTED_TYPES ñ# Skip the following ž fblocksË  . ‘ +’ _$ fV.sizeº sï 2 = : 
¹ q# Patchy ÷TarInfo object with saved global5 öheader information¡ ù °_apply_pax_% (‰   = s—.encoding frrors)¨ areturne ñdef _proc_gnulongÿ B e _,ðs that hold a GNU C Enameå    Æ  ¶link memberæ R?bufE Aread• . Ù D# Fe�Rnext P and ß  &itx :try:5 	Cfromjr�except H»Ea
I ÷raise Subsequent) `("miss“…or bad s& ° "Ó T ¡ l¶ ë  iw#  w Žb = ÓpØ   �€ ==â uš_LONGNAMEú P o †= nts(bu®� i   /elo 	OLINKo   Us ' º asparsezú0 È³ plus extra {ôp# We alå€y collec„Ssome R  structuresÿ ûVbuf()Ì! ðs, isextended, origÅo_N _- 1del.! " 2# C˜ ‘   Ž  ç u ê    Wwhile� 
Çö–BLOCKSIZE~ )upos = 0¡   Pfor i ‡range(21º     ô    ö ¶i¶P[pos:f Z+ 12]}  0   pnumbyteŠ %nt6  2 ; /24;  >_Value=  Z   ðbreak
            ñ	if offset and numbytes:
  òstructs.append((9 ,6 -))7 ™pos += 24 öisextended = bool(buf[504]B ãself.sparse = { 
G  � ð_data = tarfile. –obj.tell(Q  5  T  b  C !+ V q_block( FsizeC  p = orig ’ areturnC § Ñdef _proc_paxO ,¤ )aå"""Process an õor global header as described inw õ   POSIX.1-2008. 5""" ¤# Read theO ¶information3 ?bufH Aread¿ .)ê  (t# A pax` ÷stores supplemental t · for either¥     following È$ (š) or all ! s? (2)Ñ !if�ö.type == XGLTYPE~ º Bpax_esþ  c Oelse< i.copy((�Check if�3ðcontains a hdrchûàt field. This Ò8s uô  3Pencod2oT  th, linkpa
 Qunameàg
 S @s. NElly,á #” "seu Ás are UTF-8 c Éed but sinceu ×D $imô _G aÖaed to  i mÕ raw binaryåwings ifM  á atransl­ A “ Vfailsë÷	match = re.search(br"\d+Lö=([^\n]+)\n", bufÚ2if A ¯is not Nonê&[" B"] =; ù	.group(1).decode("utf-8"ü0Forú ð time being, we don't cp@abou�1ythÓ #æ than "BINARY"ô Á# The only o( Pvalue. àt is currently8 ow¿y~ ¨standard iKò"ISO-IR 10646 2000ýC" in` Rwords †   =MX.get(+	o6 =Ü 
^v Ý "”# 3 = ƒ¦PW § ª–ò. A record looks likO˜ ð# "%d %s=%s\n" % (lengg0key !, †2).   Š Å	-## ¬ co-$tex QincluÍ 4 B ±0 it€ Èý °£ newline. ‚  # … ÂBboth´Ð encoded stricngs.
  õregex = re.compile(br"(\d+) ([^=]+)=")/ upos = 0 µwhile True:  Z QmatchW Agex. –(buf, posN  * qif not # 
D   ibreak
[ òlength, keyword =< Š.groups(^ - r = int( 
! 2if  ^ == 0� òraise InvalidHeaderError("i ! h $ ¸ Ávalue = buf[Û Â.end(2) + 1: pstart(1 ‚ J- 1]ì ð4# Normally, we could just use "utf-8" as the encoding and "strict"
Ž  #+  Ã Ð handler, but_ abetter�AtakeU ™risk. For„ô2# example, GNU tar <= 1.23 is known to store filenames it cannot
’   °# translate5 PUTF-8© @raw Æ ûngs (unfortunately without a– óhdrcharset=BINARYž)ñr W— qrst tryè  i µct standardM,Nûif that fails wew Áfall back onN euser'sE D et
� Ëóself._decode_pax_field(! ,ó	 	Š  Ü   0taru.s pN þ in PAX_NAME_FIELDS É™  ,é ,{ �,¡ ¥ ;elsQ 2 m ? = Œ # P '	«  }Û#s[1A] = „ 
) Sos +=F¿@# Fe šCnextŠù:tryo& Þ CfromŸ ( ¸wexcept Ž
I ´§Subsequent) `("miss%…or bad s& ¡ (")Ä qProcessæ spZ  iŠfmationÍ ‚if "GNU.$ P.map"_E
£ #R ’extended 7   fíÖt version 0.1b  ±ù‚proc_gnu5 @_01(:', m Ä +elœ Osize� 20� 0�  pf¢ ½ Z.get(NPjor")¢1"1"M/ 
%in/ "0"xÀ        # GN÷U extended sparse format version 1.0.
  âself._proc_gnu5 õ_10(next, pax_headers, tarfile)
A 1if @ ótype in (XHDTYPE, SOLARIS_ %):4  | ò# Patch the TarInfo object wit É € Z info»  £ €._apply_©  " (	 2 ² •.encodingÄ ‰.errors)– P ‚offset =Ù  ñ  ½ �if "size"ò o 
ã  * A# Ifä Ì �replaces  L y field,� B ñwe need to recalculate9 � R wher  Á C  z startsC d G  = ? . ]_dataK "if$ ¢isreg() or ÿ0not SUPPORTED_	Ss +t a_blocks.
— 1 {ž 2 = § ™areturn�  Ldef ×000(¯,' Ý7buf¥ð"""Process a GNUü[X,\0\5"""@­ es = [] Qfor mðin re.finditer(br"\d+v .�ö º=(\d+)\n", ­  !c Á.append(int(] ¦.group(1))Unumbyte� 'A ’ 
% “ 3extî Ã = list(zip(Ö $, M )}Þ1ÞÙ/17Ù  Ø q x)n  xS["GNUÝ ö.map"].split(",")~Q  c[::2],Ô [1 	1éK-1íÊ \ENoneîÇ  *ò Pbuf =Z V. öobj.read(BLOCKSIZE¶X ü  =F!b"1* 0 = •7  ¢while len(“ 2) <}Zs * 2¯1if ^  Ü:buf!  z Æ +Ç  3  Î/erË  . ¨ G@ ÒÀ   next.offsðet_data = tarfile. Ãobj.tell()
  ònext.sparse = list(zip( s[::2],  1 1))
< ðdef _apply_pax_info(self,  ñheaders, encoding, errors):>  } ð"""Replace fields with supplemental W õrmation from a previousH    s ò extended or global † .* 5""" ðfor keyword, value inI _6 ‡s.items(±  µ $if6 ƒ == "GNU=f.name"Þ  -   ssetattrc"path"q … ) /el\ ?siz\ & a, int(Ñ )a Areal? Á & e Þin PAX_FIELDSZ ð * oNUMBER1  '>tryJ     ÷ ! =v 	L [ë] 6  €except VE®i 0I Õ  !ðH ­  º.rstrip("/"¶ � 
DË Eƒ  .~) =ÐXcopy(¾adecode¿�¤� º–fallback_Í  (ÖDX ƒ a singlÞ¿Ÿax record˜àbreturn£.³ (‰ "7'ct5Æ0UniÞ Œ Î W Ö ¶ é ýSblock4Wcount+ Üñ ound up a byte # ó by BLOCKSIZE and ˆ 5it,È’   e.g. _b Ï834) => 10244( ñs, remainder = divmod(v ,t ]&if0 
¡O U += 1” §  *Q Qisreg	"'R¿ Tra�f the TarØð object is a regular ¦,.'w Ú1typ¤ØREGULAR_TYPES  < € Hà ABisdiÙñ iá ŸdirectoryÞ 	`== DIRÙ Ø ?sym× f À a symbolic ƒlink.'
  ñreturn self.type == SYMTYPE
%  def islnk($ !):  = "'R; ÿTrue if it is a hard f <LNKf ?chrf ÿcharacter deviceÓ <CHRm /blÓ _blocki -BLÖ Ofifo× OFIFOË  # Ì lsparsee Ü"  ¢ˆnot Noneß<dev= ß|one of ~(, #@ or ¦ É 	Cin (•#, 5,6  Ü õ)
# class TarInfo

 ³File(objectŽ`"""The+   ! C9 ñprovides an interface to tar archives.Î4"""pbug = 0à ð# May be set from 0 (no msgs)X b3 (all O õreference = FalseU ð# If true, add content\ ;bed fil¯ !he¥ : 	  #Õ  2 0, ef 2theƒ‰ Ìignore_zerosŠ ‰ °skips emptyÃrinvalidÛ Hd‰  É òinues processing.† êerrorlevel = 1Ç † ‘0, fatal * ÿs only appear in debugƒ Âmessages (if5 p >= 0).sC> 0,` K  are passedâ Vócaller as exceptionsà ñformat = DEFAULT_FORMATé  # ¢" ðto use when creating§–O Pencod ¡= ENCODINGK   4# E —for 8-bit•dstring˜ N=ö >  0# E–P handØ  N punicode”sversion’ �tarinfo =k –	I  á udefault  µð E  ¦¾P = Ex²OÍ3   &Cile-#  � 0extë 9 #()F  –�__init__ºp, name=Ù±, mode="r",F3obj € 	þÚ  5 de¸ iA Ÿ 	N qò="surrogateescape", pax_headers8   D - ² copybufsizæ ü ƒp"""OpenC�(uncompre´)ð archive `name'.ö `mode' is either 'r' to
  ðread from an existing archive, 'a1 ø  append data to+ L ¡file or 'w5 Òcreate a new  bverwric o Cone.­ P €defaultss H'r'. @If `T 1objá �given, itî �used for Þ  Ð 4or x  Ä x. If itP ócan be determined,‘  P Öoverridden byx is mode— 	” €not closM �when TarF$#is < 5"""�  V ñs = {"r": "rb", "a + w w x Exb"}> !if—  ~ !in %s:  úðraise ValueError("r P must1'r'ù,É ÐEx'")B Qself.1 =] 
 _  s[ %]
" !if– ¸
• 7if Z =ñ A and1 �os.path. zs(name)>  × 2# Cr1non* 1entxDs inÃ ’ v 7   z 6 "wŠ      Û :"wb" Ð Á = bltn_open¤ ,Ò 8 @P 6ext; UFalse*Jelseâ 1if U  �ANoneƒhasattr(G 0, " ") L  q   ¤isinstance0 .. ÿ , (str, bytes))Y  & ! =K1obj5 	] >if ‰  i"M  	K¸ O	S & 	!6Tru   ˜ 0abs&& ) l@ame J 1` < z × ¦p# Init Yfibutes0 ifW!maf a Y 
¨^  or% =. {  if tarinfoÇA & =0 C ¿dereferenceG * '=  O Ïignore_zerosP 	+ (=  R Pencodx!isÀ&' $=  F Gež 
	 £Ùif pax_headerµ  úwf„Ï= PAX_FORMAT« H =V ‹  B9 ){}ž _debugM$  —5bugn 1if î _levelB ) =6 Àevel

      ó  # Init datastructures.
  ÷self.copybufsize =  ' Úlosed = False Ãmembers = [][ ¤# list of  úas TarInfo objectsE V_loadb  H Õ# flag if allI êhave been readE ‘offset = Û åfileobj.tell()*  [  ð# current position in the archive Q G c Pinodeú ${}S P# dic> ±ary cachingF , %ofC 3  #r >lí …y added
A Etry:  F "ifû ºmode == "r"!  % º Rfirst_ f = NonÕ $   (   fnext()†  , y ay  ‘# Move to0end!a,Ì  W �# before1 ³ Æ empty blockË ,   ®while True÷    À  Ç Qseek( 8#d H  @tariÓr €.fromtari a Z  E  ‡“s.append(F 5 ÿexcept EOFHeaderErrorí `  ˆ ñ  7 ]breakŽ  € } O as o 1 ¡raise Read« (str(e)?	°in ("a", "w >x")à 84 ò
‘ { •Qpax_h.sJ  ) 4buf5}€.create_; cglobalB Ð. R B/()®§ Ÿwrite(buf, Šz += len, z
Á bif notôC_extk 
%  â 	‰ cÍ!   æP 8  Æb/#- 6b“# Below açðclassmethods which actfÒalternate conÒ3orsPL @TarFF Ò. The open() S 1 isMponly onZ at 0nee€3forJ Ñpublic use; i#  «‡"super"-‚ @ andB 1ablÝ@sele± nI Padequ¶ J"sub: ð
for a particular compress~$us;smappingP  ^¢ OPEN_METH# À This concepð6t allows one to subclass TarFile without losing the comfort of
    #  ðsuper-constructor. AN  ò is registered and made available
P `by addo  it•  ` Amapp Ñn OPEN_METH.
1 @² amethod ódef open(cls, name=None, mode="r", fileobj ñbufsize=RECORDSIZE, **kwargs):T  š ð"""Open a tar archive for rea° `, writ§ €or appen …. ReturnH P   an  …ropriatenÊ ×  r !  ´ ƒ ñ    'r' or 'r:*'ç ‚ °À transparent®ypressio� C'r:'b  F ñexclusively uncomC e_7 T'r:gzD  oˆ Ogzip� 3bz2@ ? _bzip2@ x Olzma? aFa ´a, creaË ~ /Ø if necessaryÌ"'wK wK 
AEˆwF=  F
/w:F 	? F/w:F 	@ F	ü xü xü 3e2G b, raisöU	 Àan exception~Š@s alty§™xS” 	F edÃ ¤ „  ‘l á 	‘ !if 8  Ì„ ˜„ 
‹… QÝ… )n Ñ… CBC'r|*çj°a stream of‡ blocks»|P »)an¦_ ¨Ÿ Çar/edP D îM-a ìô E ®E ¬E wÀream for wrifting
  c'w|gz' ÿopen a gzip compressed stream for wriB  3bz2C B _bzip2C x… on lzmaC E"""
Õ ñ if not name and …fileobj:%  ñ ðraise ValueError("nothing to É )")V úmode in ("r", "r:*")R ð# Find out which *G ñ() is appropriateJ  l 0he Ÿ .œ !deÆ _†( Ktypet Ê ôeturn cls.OPEN_METH[0 �] == 'tarr 'f  Ò'  Ú ysorted(H —, key=notŒ ƒ  àfunc = getattrC ,� )„  À !if0obj* ¾JNone\ (   ´saved_pos =5 n.tell(W ?tryD r0 ´ (( Î$",O ®, **kwargsS Áexcept (Read53, C)1ion   ¸ ä  0  •obj.seek(õ ’  , ‰continueYß©  ("R R coul!beå à¸uccessfullyô€elif ":" ý
M O   ,¥ š0 =  Ú.split(":", 1± 4 ¼ . y or "r"» ”=\  ' 7taré ú Å# Select then Ø±tion accordfoa q# given^  å:ion€!if Ö iZ
 †  q ý"?elsç ºX‰("unknow¶  ¢ U%r" %± 
sì…ñ'ý|ý%|ýPSF 5œwš ¦Wð: °must be 'r'Œ8'w' 9  A= _S
4H°RzbufsizeŒ‘0t =*U v �‰‹6 d.closeÀ           rgaise
  ût._extfileobj = Fal" •return t
8 ðelif mode in ("a", "w Ex"):&  e < ñcls.taropen(name,> #, w ¶, **kwargs)e r« ñ ValueError("undiscernibleB "0 Á@classmethod€ Ddef q Vcls, v E="r"z W=None ¾ ð"""Open uncompressedS � archiveR ñ	 for reading or writing.„   5""" 42not8 ˆ =
tð must be 'r', 'a  w'~ U'x'")o {sC!gz³B%level=9S
Tgzip 1 V!�   Appenw0is Rallowed{³vqr6try@ þQfrom î æimport GzipFil‚�except I ç
B C‚1ion$ !("U tmodule „vailable ‚ “ éŒ u + "b",œÍ,[¶ !OSŽ 
² $ifÖ™  cA and²0 ==¹
4  ª ê AReadU !("Õ> 'Ú/ -è Ot = v S   Ú 	 † ¦obj.close( 8 ÜÞ : Y   • 
3� 	K–á
&Ý?bz2AUbzip2kÎCbz2 ?BZ22 S mÐfileobj = BZ2ùFile(fileobj or name, mode, compresslevel= C)

  Etry:   øt = cls.taropen(S j µ, **kwargs); ñexcept (OSError, EOF
 )_ C v.close(@  { !if» z == 'r'8    ¡raise ReadZ à("not a bzip2 Y "P 0 ¢ 
V  5 ?objŽ 
> ct._ext0 … = False\ ‚return tXÁ@classmethod# adef xzOGcls,§Q="r",¼  obj=None, ¶#et j¹ Å"""Open lzmaæáed tar archiveb À for reading�writing.“  P�   Appen! 1is Ofllowed% 5"""1 ¡ ) Ain (½ ‹"w", "x"é?c Value® —€ must beáP, 'w'™ O'x'"“	Bfromî °import LZMAû,
 _ ¤ ‰I*  : õ ˜ C1ion$ !("Ntmodule ˆvailablež † �È à 	s, ˆ Å uX~ utq# All *e") }òs are registered hereÛÕOPEN_METH = {=p"tar":   I ”",   # un>f/ �gz":  "gÜ. { # gzip˜2 0bz2a 7bz2a Âe xe A"Ä" #2  }ƒ/#- 6¼ Å# The public]�which TarŒ¢ provides:‚  ôåGself@"""CýD the= P. In   e-&À, two finish½¡zero blockÒ’ 1  aÁ ˜oQ å $ À � ïdÃ¼  8 ) f = Truî41if /  ¼  a]  = }ø ú(NUL * (BLOCKSIZE * 2)Ð: Àlf.offset +=û (BLOCKSIZE * 2)
  ÿ# fill up the end with zero-blocks3  þ(like option -b20 for tar doese I ð, remainder = divmod(self.offset, RECORD­ D 'if? M> 0:˜  Ú O öfileobj.write(NUL * (\ & -J )i zfinallyX qif not W C_ext[ 
% y �close()
£ Ñdef getmemberð v, name)E ñ"""Return a TarInfo objectY;   `6 S'. If A canŸ !bej  ˆ ±   found inÒñarchive, KeyError is raisedJ #a ^ ©occurs morM �than onceQ ‘its last : !re$ ð s assumed to beƒ › õ	most up-to-date version.$ 5""" @tari
=E 	¹ if{+ vis NoneZ î   ("Ä B 1 %r>02" %– r’† Ì sÍÇ LX@s of ‰€ as a li8fíYs. Th~( 1hasB psame or? c 
ìNÃicheck(<àploaded:4À# if we wantËPobtaiŸ’ %of& - [  >  ()   S# all\ s,K Ùfirst have to@  0  0# sÞ ITwhole@Ý  } 		¥ ã£0Qtheir@s. IÁ 	 ¡ ™&¡ Ved by6s()Ã î. # [p.¿ þ  €ì Is()]ò * —d=,< O    1obj 
¾0Cre–…1romƒ`resultÓøos.stat or equivalentÖàon an existingfeß
  …ReitheZ#ßH, orG ’specified9 ¼ ` Bobj'³aZ  descriptoràK °given, `arc$' \ sª ±alternativeî|"heV bN Ð0, oÇ Qwise,# [  ß ttaken f:' Ê' attribute D'Ì   H 1 rrgument< E p should^Ya texvðstring.
        S"""
  õself._check("awx")
 ÷# When fileobj is given, replace name by1 , q's real! . (ifL •not None:   “ S =( . ‘ ³Building th !of ‘member in varchive{ ø# Backward slashes are converted to for! ,˜ ò # Absolute path; Bturn8 srelativ t `if arcÂ  ;ë  ='n Edrv,9 P= os.u Ã.splitdrive(9 )3  $ =8 .¢Ï(os.sep, "/"/ 	qlstrip(& V `# Now,‹lU÷TarInfo object with, ðinformation specificS;  0tar. 1 = ~ (¡  @.tar: )    ’ ˆt needed0Use(pstat or l q, depen0öon if symlinks shall be resolvedž 
¦·0if »» «dereferencÇ Ë ƒ Ares Ä‘ (ç  % ?els;  H : 6  % m f (;@obj. Fno()y   ‹ V = ""I@stmdlåtatres.st_modeä @Àtat.S_ISREG(/ )¾�inode = (� D Wino,  6devŠ  QH and8 n¶ A > 1 \—  C  € "inY s/ "!t [ ]Ä  L á# Is it a hardy Æto an alreadò -   #z sd0-e?ž 0typ}LNKTYPE  c ’Y™ s  	. û€ AThe 6  m added onlyö‡its valiå 4   °# For win32ð ¶is always 0 (   Ã ?REGÃ "if€ /[0Q  @ Ù ±ã (elg?DIRgŠ 9DIRŠ 
< OFIFO=   > ?LNK= 9SYM<  ß Ã0os.'  ¹ß /CHß 	/CHß 	/BL¡ 	*BLhÐelse:
         Ðreturn None

   ÷# Fill the TarInfo object with all+ õinformation we can get." 0tar# °.name = arc
  0mod Mstmd þuid = statres.st_ui% g% g% õif type == REGTYPE:f  ò ¥ 2siz† k   + Oelse9 
0+ R 1mtiø ¾  )   §  @link64 =  $ kif pwd– *ry ä uJ Ôpwd.getpwuid(¯ uuid)[0]^  9 þ except KeyErrorZ Epass2 jif grp% t� 	g� 0grp� 7grg� g� &‘ \pin (CHRýP, BLK	 )¨ ûif hasattr(os, "major") and  in 
>  ,H1dev= a = os. (Urdev)¢  9   =  a =   = Â< Åðdef list(self, verbose=True, *, members=÷ð"""Print a table of contents to sy~£dout. If `X ø' is False, onlyØ  D àsL   { ` are pm !edM  itF ¢ ø an `ls -l'-likeP Qoutpu+ `produc> `T ˆ  opŠ!al´ómust be a subset… Q  ' DPed by½P &()Æ5"""6  U’._check()q ¾$ifX Ê  [
V  Ê5elfN Cfor ½4 inC 
; $ifÄ
  w a_safe_K%P.fileNÔ  )n9 ¥"%s/%s" % 6 '� U.uid,¶  z  Ñ .ÜE  Ð‹  Ÿ'‡ischr() 4 gisblk(¨y 
Æ  10Å ¦ 
y("%d,%dì ®,Š.  x)9 ‘ � f  Jû 
3 Rd-%02  
 : ?" \× 
 % i`.local
 Ènð)[:6])

            ô_safe_print(tarinfo.name + ("/" if  ÷isdir() else ""))

  ¹if verbose:  # 	F ^sym()$  ( Ž u"-> " + @linkš )^ ?lnk^  O ? toc î àdef add(self, � P, arc	 ñ=None, recursive=True, *, filter  ù  """Add the! 0e `E '”   „archive. ñmay be any type of6  (directorys Ðfo, symbolic î ó, etc.). If given, `» 'G àspecifies an aº anativeî F for³ !in ¬ F DŒ H  re5&edñly by default. This canã ˜voided byP •setting ``+@Fals%cø ' is a function@ °that expect# ðTarInfo object argument an¥ QturnsÛ xchangedJ 
; ,#Rit re5  : 
' ˆ will beI Pexcluê Afrom4 I5"""2  sÓ._check("awx"“ 9$if†  „ 
aè! =Å¹`# SkipÃ °somebody tr³ toQ  ‚	™ %..� 1if ’  ¶ u @not y C°os.path.abs (% F) ==3 
  J ñ_dbg(2, "tarfile:� ‘ped %r" %» 
þuÏ G 1�#»# Create a › u á ø µ 3get Î ÷c ç  æ 1æ ²UnsupportedÜï 1# CŸC or M®
à Ò i40terŸ °
£ ã   =^4ter
xé  “Œ	ÓEõå  < Ør# Appen-¡tar headerkLdata5¥Ò l.isregãwith bltn_openÙª"rb") as f š Ö 0add+7, f&el.4
H D `ç
<  „  ƒaf in s4€(os.listžhd /  w Ð(os.path.joinõ(name, f), os.path.join(arc /
  €recursivE qilter=f %)
7 Uelse:  L óself.addfile(tarinfo1 Ddef   ' #,    , . –obj=None)Q ó"""Add the TarInfo object `; A' to  Óarchive. If `O H' is� ñgiven, it should be a binaryƒ T, and– ø.size bytes are readN @fromL  3 ]added‹ ÜYou can creatÃ 	š ó
directly, or by using getç 5().{ 5"""  GÓ._check("awx"k Š; € = copy. ‘ & Ubuf =ó atobuf(V �format,  „encoding jrrors)‡ u«.write(buf  Úoffset += len  0bufm=l  ©  a #×Àthere's datalöfollow, append it$!ifÐ°obj is not ZY ú  h ´ ( ß  C
#, • = ß  N ôblocks, remainder = divmoduF šBLOCKSIZE@ 'if; :> 0¬  b › euNUL * (S & -E )`  B ¤  ‚1Z  Z Ÿ' %* X ñ+ ‚members.yà { æ¡extractallL , ~c=".", < êû, *, numeric_owner=FalsEM D all>  | ÷   ø current workingæ c1oryä Šr ñ, modification time! ïpermissions onI iÀfterwards. `å �' specif a diffe‘ ~ J 3to *c to. ` ·0 op� !al� Bmust­1sub» fõL Ðlist returnedC3getP "()	j`¨True, onlyK  I!nuãð for user/group 9Ausedœ  ]2 Fames‚¦ý  F= []O%ifÓ/is¤ Â ! =‡8  — �4 inD 
4%if×gisdir(Y ö  $# ^¤ °with a safeeÖ  4   .     ¨ ˆ)   - Ø.mode = 0o700œQ # DoÑ§set_attrs � À, as we will÷ do that further down
  óself.extract(tarinfo, path, set_attrs=not  ™.isdir(),G R ù  numeric_owner= %)
7 õ# Reverse sort directories.$   & ÿ(key=lambda a: a.name)/ r] (r pSet corj  ž ÿ, mtime and filemode onŽ 4for) i$ :ƒ  	0dirA` = os.
 `.join(
 ,A º  7 :tryH    Vchownž` ,i >  J uî J B1 - _chmod- ‚except EB®Error as eÊ 1if V e$ žlevel > 1(  ƒ YraiseT  ?elsX    Y À_dbg(1, "tarÌ“: %s" % eDdef ê 1 ‚, memberï8=""ò|True, *dfFalse)µ 3"""û # aO ð from the archive t…õe current workingdyK us �its full á0. I @ile Ÿ¤rmation isÏ  edt¨accurately:âas possible. `ò ¡' may be aõ d  ¸ù TarInfo object. You ca2ñ specify a diffeÒ §"y ¾ `ë@'. F³  B‚ibutes (tŸ  , xP) areu• unless `�'í |i. If `T`P 2is »Aonly† nuå s ¾¡user/groupYsr  us@hnd notK  Ã �5""""  C³._check("r"e Žâif isinstance(sW, str9 ( R" =2get, 3 –ù; 3 W@PrepJ À @links1get@make &()e if"  Z.islnk(§  ._9 @_tarM Ü
 )  :Ý?�_Æ l9	3 L ==
 6 	Z¼e õ/OSðì07I èë , Pif e.Ô V ?NonÀelf._dbg(1, û"tarfile: %s" % e.strerror)
  ]else:  % Øself._dbg(1, S 0 %rV (W @, e.q Vname)d ð except ExtractE� K as p 1if k ¡ žlevel > 1” Yraiseª ¼ M ¸  µ 1e)
C Rdef e˜  ¹ (5 –, member)| 3"""¾ # a ð from the archiveÓ  a F ¢ object. `I y' may bµ *  )Õ or a TarInfo; &If> Ãis a regulara r¾  Ÿó   a link, an io.BufferedReaderQ ð  is returned. Fs yll otheJ ƒexistingä zs, None= š édoes not appeaK (inR, Keyú Š  Ã%d.Ä 5"""  ‚³._check("r"¨ ê âif isinstance([H, st© ( @tariK=P2get, 3 ˜ô; 3 % U 3if  €.isreg()¸ Atypeöin SUPPORTED_TYPESE G 1# M\ð s with unknown @ Ðs are treatedMòs- G Ëà  rq¾• :)el¿ :lnk¿ gissym(ð d 
o—k @, _S¨ m2  6 ñ# A small but ugly workaround foràcase that somecUtries J   D# to € a (sym)ì B-û ŽÙa non-seekablo M   #-Qeam oÍk blockZ ) b ã ´P("canç+
‰  g"] I ™ #Ê #'sÒ3 j0itsk:get 
 _ š  Œ p._find_-„_target(¤   @# If¢0re'ÙÁ data associ—¶ õ ù (directory, chrdev,ÅP# blk s etc.),…W`nstead�ÍF
ê æ  ‰� ´_ð _ˆ ó ,7 ú	 úgetpath, set_attrs=TrueŸ  F ÷numeric_owner=Falseà ÿ 
¯y  ®¨a physical	 ˜p called- � é p# Fetch‡@`given >e ð# and build the desótination pathname, replacing
  õ## forward slashes to platform specific separators.; `target] 6 =  Ï.rstrip("/"), ‘ e- ¥, os.sep)
6 ÷# Create all upper directorieŠ  `dirs =E  “ @.dirô (™ Ž "ifN 3 uand not9 uexists(T %):�  4” Š ‘ that areI û	part of the archive withG ÷default permissionÒ  j pos.make¥ Ž  ifv÷ info.islnk() or Ksym(½ ðself._dbg(1, "%s -> %s" % (K  5,F @link )=Jelse	V 5tarH Ë	­ ?regš  ï Dfile� ˆ d� 	M ?dirM   ‘ L OfifoM  N <chr”?blk` ?devù ó Y Ë` 2typÏÿin SUPPORTED_TYPESþ  a unknownd > @ ú:Ïif set_attrs†  /ch€ ö , numeric_ownerL h!if·Ú?.is9  ( ç_chmodã  ,   0 OutimÐÖ /#- 6P a Below� � different _á methods. They% £called via@ à_extract_membeÂSwhen  b() is 5 F ccan be\ded in L qsubclasU`implemŠ  other funcŸbality.×@def  ¸ ?µ O	 
ú•"""Make ayœ  Â0 ²1"""å  ž6tryH   @# UsJ �safe modeÅê!y, Breal!  is�S F PlaterI‰  *  ßké ¢v, 0o700ŸÁexcept FileE—ZError¸ Epass>À makefile(se±lf, tarinfo	 ³getpath):
  ð"""Make a file called4 + .*  àsource = self.: ;obj c.seek(~ Õ.offset_data)) ebufsizH Ccopy # àwith bltn_openO ™ £, "wb") as® Ô  Û  if  ù ú.sparse is not None+  / Bfor £ !, “ +in@ 4  8 btargetë @ Þ      Û '(=�p Ó, ReadError, J n Y ® * štruncate(" ?els ¤ 	n ¬ ²ðdef makeunknown(é  ‰	 ¾‚ñfrom a TarInfo object 3an Y Q typer a at¯] ´ « �  ˆ I” Q  · Ð._dbg(1, "tar3 2: UÖ * ‚ … %r, " \9 Ž   "extracted¥qregular= @." %°  ‚ .I !)
C ?Ofifo</fo¾ðif hasattr(os, "mkq "” Á 2os.  ,ZGCrraise Eô Ê ("X v`suppor«by system"õ ?devô 1cha`ÿr or block devicÇ!if� Pnod")S  /
 lakedev*ú sspecial‘ { q0modk    Ïkisblk(­ - õ |= stat.S_IFBLK= ¬/ 2CHRƒ m ú7nodù , 3 ,S  '   ,  . Ñ`devmajÉË   [inor)óOlinkô°(symbolic) > ó   If it canÀ§be created¼ ñ(platform limitation), we try toÄ0 a ñ of the referencedÃN pinstead) a• €:tryDS# Forss that " å ‘ and hardX sY  |	3symÀ            ð if os.path.lexists(target O):
   Ñ# Avoid FileE4 ðError on followingV �symlink.E Pos.un p * 3os.F  ' Pinfo.4 gname, © 	9 Nelseº þ # See extract()– 
s _t _o !os™ ¦ 3 ª  ]®   cself._² ‚_member( Hfindc x )),
 F  Ð è5 sexcept t_ :ionO:try  d ™ ® Bª  s Ÿ A Key�” rraise Eô$ ð("unable to resolve Þñ inside archive")
‘def chownxÉ 	 %÷ , numeric_owner q"""Set  7 of°p accord( to  U J. IfL ƒ  é ð
   is True, use .gid/.uid· @tead_  .g0/.u M ðFalse, fall backW °when the se` basedá \ — VfailsL5""" ðif hasattr(os, "geteuid") and  z() == 0¾�# We hav©pbe root£ Vdo sop  5g =C5gid€   u u jif notr
…  B ì  nif grp1      — Ägrp.getgrnam£§I)[2]ª  3 Ð % Mpass: ¦ 	?pwd¦  !0pwd¦ (pw¦ F¦ 8¢ iýbissym(	7l€"X   x!  _’]u, g)%j?os.E  !OSKUoQcouldibchange
`?mod`ù Qðfile permissionsý#\à"""
        trGy:
  õos.chmod(targetpath, tarinfo.mode)/ êexcept OSErrorG Ñraise Extract  ð("could not change O 1")
Q ådef utime(selfs 	 ˆ )c `"""SetA  ification = 0 of­ 1 Ð according to Å o  ò 5""" !if™ Ñhasattr(os, '� 'v  5 ereturn8 .tr@8 	@  | m¥ Ô  )R;
_/#- 6ü  ¯Anext®#A"""R"P the " q memberšöhe archive as a TarInfo object, whe[     ðFile is opened for reaÔ#. j pNone ifr r, qno more©  ´Õ   available. ÿ tÆ._check("ra"“1if  SfirstË !is- x “ i =m =. p  ! K  = F 	$ b" m 6 �# Advanceã   fvpointerÎ ¨ …offset !‰ ·leobj.tell(¨ W � ! AseekÍ.B 6- 1 / #	6  ‹+(1X  -  CReadýàunexpected end0datiü  # / ã 8Vblocká „ 2 whJTrue‹™ – D Æ  €.fromtarY
ø ç‘EOFHeaderÑ  Àr  a †Êignore_zeros˜  &   � ñ_dbg(2, "0x%X: %s" % ƒ †7, e 8  @ «Å+= BLOCKSIZEO)   ycontinu Ø InvalidÜ » õ $elŽ'O== 0�®Lstr(y/WEmpty-Q v & "e\ à�Ë j�Truncate­û À           r÷	aise ReadError(str(e))
  ñexcept SubsequentHeader1 i as e:/  : rW ebreak
; ûif tarinfo is not Non[ óself.members.append(5 ³ ?els7 æ_loaded = Truex dreturn|  /#- 6à ò	# Little helper methods:n ‚def _getÙ (å t, name,– =ö, normalize=False)xò"""Find an archive N 1 byK ñ from bottom to top.›  ®I   I~�given, it‹@usedçöthe starting pointB 5"""N ó# Ensure that all‹ Âs have been Œ@ ­ @s = þ .2s()$ §  F@mit ‰ 1 0 seï � list upÙ D[ XN   
 #[:	 e.indexe]Ž &if�‰ ¨  »° = os.path.¶ 	 ( Ï  fo	 ÌÓ in reversed(y Ý T n   4 _a y  . ' 8 +  / N  = ý  '  “ came ==á2 
 ( aH C ò íë 0"""Œ� throughëeentireØàfile and look E…readable‚#  ’ s¢ whD  
® K†Znext(1
M –
B  ð Ø 
   Ð|Qchecka, modeé
C# € if TarF¸ °is still op¥  —  he �ration'sN °corresponds'M ) '"ifŽjclosedé á!OS@("%s*) 2" %8 ±__class__._&__M!if¢  6 ëÕ/ 
!in& { 
6badù ? %%rˆ   xuófind_link_target€þ
~V q+ X� of a symF � or hard æ Ñ)th‘ ¨?ivej~ w.issym(…  E„# Alwaysð ‘ 
X  0  ‹  îð = "/".join(filter(None, (os.path.dð irname(tarinfo. 4),  Alink G))
  Ålimit = None Uelse:  . Ð# Search the 	 ¡ive before  _ ð, because a hard  ; isI ôjust a reference to an already] yd file.<  P  Ä - =× ( Ô ü 
 òmember = self._get (Z 0=ö, normalize=True;2if ; 1 is<
/ôraise KeyError("` ñ %r not found" %# Ó Z creturn^ » Ðdef __iter__(» )n  """ProvideE $ ¶ator object?5"""#if floadedL  é¢yield from% æ 
Ä£ œ  4 1# Y6 öitems using TarFile's next() method’ P# Whe÷lì As haU0en T, setH R as _° C •index = 0Û ÷'# Fix for SF #1100429: Under rare circumstances it can? Åhappen that 0s()ç called durá kGion,? ¢which willÍ Õ‘exhausted-˜Cfirs™ w  0 ž
¨ÜÌS Š  –I+= 1 á? Ä`while å
h 2if I Q< len~.† p   W – ) [B ]‡ Aelif Ð.Û
{ Q  ç   & K ~ F  $ h ! =ê 	‘  $   Ý     )  è  sÓ1dbgQÇ, level, msgUð """Write debuggu`output2¦sys.stderråU # <îE 
¡print(msg,m=T )¦ ?_enzQmcheck(¿  	D 3xit½÷	, type, value, tracebackú !if$  þú [ g.closew £ð# An exception occurred. We mƒ X Ó L ¾	##�would tryyw“uend-of-
ölocks and padding– ,¡» @_extÜ:obj� ) "  å ! ² ðd = True

#------ ú
# exported functions
#%  ð
def is_tarfile(name):
    """Return True if  ñ points to a tar archive that we; °   are able) âhandle, else rT tFalse.
/ '\ ð' should be a string, ˜ A, or	 Ñ-like object.= 1""" 2try¸  ¼ ¡if hasattrÒ ƒ, "read"Ú  "   �t = open(c @obj=… )N    ¯ S   1 
) †t.close(; å  9O ö except TarErrorV )  

�   =' PFile. !

£Smain(¿  imÜ’ argparseDpdescripëð = 'A simple command-line interface for¾ ù ‘ module.'ª S 5r =_  .ArgumentPm 'r(i = ü > c.add_a7 ñ('-v', '--verbose', a“°='store_tru �default=,�  t rhelp='VL ‚ output'~ ‡group = † ñmutually_exclusive_&  (required=¤? ¼ l¼ ólist', metavar='<1/>'ª © PShow > bing of5 w´ u  �'--extracx �nargs='+n š (› 2 '<!_dir>')¬ Ep @into get dir² 	c'Pcreat¾ ±  N>A <¨ Cf  š  0 ß from sources¤ 	 I_'--teË$@Testøz ƒis validv  ¥† 2s()¤ ifV s.‚ Æ is not None2src{% i¥3srcBwithËÀsrc, 'r') as"\ , Ðtar.getmemberœ   lprint(' ‰²=sys.stderr55 Ü åw V P'{!r}ü E= .'.format(Û Y ‚U¥r.exit(1, O  K
S +\nU M$el©  ” ‰  : … % 8  ç …5Tar¼ Î  �#:*�f0tf.e (8=D. 	
Àarser.exit(1ó6, '{!r} is not a tar archive.\n'.format(src))

    elif args.extract = QNone:#  ' xif len() f) == 1#  ' Ysrc =O 5[0]E  " Âcurdir = os.  ‹ f 2f ", = n L s¾  y ó parser.exit(1,  d_help( . Ñif is_tarfile0
ƒ ðwith TarFile.open$ ê, 'r:*') as tf1  U $tfe’all(path=Æ )¸  ' ‘\verboÇ ! 8  ‚>'.'j  & Smsg = Æ  ä9ed.	  < /elx   V (hW - 'K  5  a'into ¢Çdirectory.')–×
 ? –print(msg ¥ Õä¥ Ð`create3 I
„tar_name|, f.pop(0ž b_, exté ë¤.splitext(@ , ùcompressions = {EI# gz Ë'.gz': 'gz', t <# xD xD xD   [# bz2p 0bz2Š   ‹ ba  7   }w  <0mod|x'w:' + <�[ext] ifz)in  /6 'w¢ L  Â sÙÉ tå 3  û,Z_‰ í@for Z '!in.   s«ptf.add( / ˜ € 	
ã =  ¾ Ú­  ØAif __ !__5ƒ__main__<  ó ()
r"""TELNET client class.

Based on RFC 854: ( óZProtocol Specification, by J. Postel and
J. Reynolds

Example:

>>> from telnetlib import Telnet
>>> tn = ð('www.python.org', 79)   # connect to finger H b ñtn.write(b'guido\r\n') H€tn.read_™€))
Loginƒ@   Në  3TTY
 `  Idle 1Whe2 aWhere
f   Go ° van Rossum r  pts/2 ð  <Dec  2 11:10> snag.cnri.reston..
© Æ

Note that « à won't read unðtil eof -- it just reads some data
-- but Ñguarantees to( ð at least one byte unless EOF is hit.

It €possible= ðpass a Telnet object ða selector in order âwait until
mor™  S ðavailable.  Note that: ¡this case,¨ ñ_eager() may return b''
even if there wasó 0 on ð  socket, becaus] ñe protocol negotiationV ’have
eate<  ;@.  Tˆ `is why0ErrÚ €s neededª i ª Uñdistinguish
between "no— Ñ" and "connecx Òclosed" (sinc  ´ Ñ also appearsQy
for
 `ing whø –D ñ ).

To do:
- op^ â ð
- timeout should be intrinsic¢Gthe š Òô instead of an
 Z !on0oy• ñ calls only

"""


# Imported modules
i 6 sy £ <as
from³  4 àmonotonic as _Í â

__all__ = ["Š "]x 0TunTñ parameters
DEBUGLEVEL = 0% »ÿ
defaults
TELNET_PORT = 23- `characZ ñ (don't change)
IAC  =Kðs([255]) # "Interpret As Command"
DONd  x- y4])
DO A [3])
W( 2  ILÌ < ˜1])
theNU x0])

SEQ ·40])  # Sub!‡ End
NOP» "41) qNo Oper*9
DML 2# ØData Mark
BRKC 3  ‰Break
IP< 4 @rupt›ycess
AO(  Bø # Abort output
AY8"46K �Are You T)
E‰"47$ tErase CÀ9
ELm 8& yLine
GA! 9! æGo Ahead
SB = ï]QBegin§ ë †«ls codeK#É  sekps all cÔaarpa/tÂ–.h
BINARYx … q# 8-bity¦ path
ECHO$  Ý˜# echo
RC÷°apreparê#reF
SGA@  Úp# suppr/Ago aFNAMS&  ä#È÷roximate message size
STATU/  ëö# give status
TMM  æ# mnFRCTE   âP# remIðcontrolled transmissë ƒö 7NAO@ ø#@e ab,nè line width
NA$ 6 pç fNAOCRD© 1¡n  CR disposi¿ k 'HT1³ànegotiate abouü,t horizontal tabstops
NAOHTD = bytes([12]) # negotiate abou; À dispositionB (FFB 3B Œformfeed< 7VTS~ 4< bvertic·  ¸ V¸ 5: ¶ L¶ 6@ ™output LF· gXASCII· 7= ÷extended ascii character set
LOGOUT4 84 ÷ force logout
BM  9   —— macro
DE? !20 ödata entry terminal
SUPDUPJ !21+ äsupdup protoco' HOUTP— 2 - ÿ w
SNDLOCR ã‘send locaWTTYPE$ Ë– — type
EOR" ³ E ×or record
TUIL2–óTACACS user identifiv gOUTMRKU ‹¹ Ê marking
TTYÁ }� Å ø number
VT3270REGIMÓ “  Ç regime
X3PA° 3–·X.3 PAD
NAWÝ3ˆøwindow size
TSPEE@ ~˜ ¶speed
LFLOWã 3~÷remote flow control
LINEMOD´ 3‡±Linemode op­YXDISP3Ž´X Display LÙ·OLD_ENVIRON… šùOld - Environment variables
AUTHENTICATI; £@AuthË·cate
ENCRYPà3¢QEncry³ º ?NEWŽ  š?NewŽ ñ+# the following ones come from
# http://www.iana.org/assigØ ’s/telnet-Añs
# Unfortunately, that docu’does not C · er; �to all of• ð m, so we are ma± ` up
TNnÐ4b  
Xe–4c h
CHARS44^ 7
RS%4UTå " R\úSerial Port
COM_PORT_OPÏ4b1Com) " CŒ! O· Ž÷PRESS_LOCAL_ECHO° uv �Suppress{—l Echo
TLB4u/ çtart TLS
KERMI=4b —
SEND_URLw ]  ç-URL
FORWARD_X# R €
PRAGMA_Ç1¨rTELOPT %  % ^
SSPI0 X 0  # . ; —_HEARTBEAÎ 1ô	d ) W
EXOPÝ "25UðExtended-Optionsñj-List
NOOPT = bytes([0])


# poll/select have the advantage of not requiring any extra file descriptor,
# contrarily to e\ Ðkqueue (also,^ "y N òe a single syscall).
if hasattr(• ±ors, 'PollS¥ ôor'):
    _Telnet 5 = 2 .0 _
else3 H  ²or


class e !:
s 2""" ± interface ' .  ¡An instanc:Bthis  Ð represents a'ánection to a tÉ b Æserver.  TheL Ðis initially �0conB 0ed;Rq open()A ðmethod must be usede ™establish ñ.  Alternatively G ðhost name and op­ ðal port number canb 3pasd 1the< €construcC too�Don't tr re´ ´ an already%ed÷ 8 TFPhas m‚ 3 R_*() ï ps.  Not½cat som!em‘ ñraise EOFError when70endá òQ “0is _ ‚, becausÔ Atheyò `return¹ �empty str�for other< 0son’  Se‘ @ ãindividual doc6 sâ  o ò_until(expected, [timeout]Ø òQRead ( ¿ , N  9à been seen, or[E 1 is
 F óhit (default is no k È); may block› 3all^ @ † ƒall data� ?EOF<  �= ±t least one� ¬ C ­very_eagerI † •availableOvdY  f¥he socket,rwithoutî 8ingñ m !eiàö µf  è Œ z r ‚  z 	Olazyæ i·Araw y € (procesF´ it first),a y  do£ 8ƒ H I/Oï az  %s ç{ bcooked~ h  ` y h 0sb_>à &s 2  P betwÇòSB ... SE sequence. E¢Qset_o €_negotia¬_PTback(	 GAEachó  {á  Œ ¹° input flow Ì0allU á €(if set):  i !ed}Ÿ`followz²parameters ˆ G /  L (þ “ command,” ·  5 é P will|echr(0)Ñ reˆ ðno option.
      ò,  No other action is done afterwards by telnetlib.

    """	 ñdef __init__(self, host=None, port=0,3  7  õtimeout=socket._GLOBAL_DEFAULT_TIMEOUT):: ã"""Constructor†  O ð0When called without arguments, create an unconnected instance.
C   aWith a¼ EnameC S, it 9 Us the< ;Þ u number¨ Cand Ý p are opV&alj  ; r    1õ	.debuglevel = DEBUGLEVELS %  U! =  
  c! =Œ 
 † =� 
  z0 = ¨
 ªrawq = b'' i 0 ocooked2 keof = 0 Siacse/ ù # Buffer for IAC seque™þ  sbI q # flag- 0SB k/SE3 Cdatai 
³ ”_5Lback!ifg 
1not"ˆ¶Popen(–æ,f)#  À ) %=0+ þ ½3 to§&Thiu secondÁ Ç  ·(­u, which€defaults\  +  Cdardö\W (23)s �Don't try5  reë  etalready2k(0if y ² 
y  å = TELNET_PORTÄ  g.�%6¦ys.audit("ýT.î 0", t Û)Ž b  2et.‰_KGion(>)?S__delV

$De	‘ -- close›] .e& (_ 3msg±ªmsg, *argsg �Print a ¡€ message=!eno  ºgis > 0!…If extra‰s€present,A y ‚substitu˜  Gs ` using  ›0str pformatt Zopera!if°n;> 0` ñ "('æÁ(%s,%s):' % )_ö.Š¦), end=' 'ù  ifô s[   p_ Qmsg %" 
7 Oelse4 ºAset_|{œ ,¥ 
Å1Set:1 ð level.

        ñ6The higher it is, the more debug output you get (on sys.stdout).

    5""" Qself.@ rlevel =M  
&  def close(, !):  H @"""C ˆ ¹connection._ `ock = : U.sock=  z = None ›eof = Tru Êiacseq = b''2 esb = 0 0if o ­  ±   .Ë )Ü @get_ /etá  aReturnâ $ ù object used internallyõ r5 ã l ofilenoh $ O) ofx ,.K � BwritÉŠ, bufferÑW  Ç a string toƒ p, doubl ÷any IAC characters_`Can blùiÂ 2 is Öed.  May raiså�OSError 9 ºdi i!if‘ #in× 
úë  8ô Ð.replace(IAC,8 U+IAC)= 6ñaudit("telnetlib.T
 .A!",ÒC:  Nßmsg("send %r"$  M.$ Ball(ž “¡read_until+ð, match, timeout=1
¸QRead 2 „ a givenÃ€is encou«Sed or' L OrWhen nom  ªsfound, Ï`whatev~õs available instead,�possibly9SemptyŠ @.  RíO EOFæE "issPd and” °cooked dataš € ¿ �n = len(8Ù ŸÖprocess_rawq( i§k lq.findA šif i >= 0_ < 5i+n¿  m buÃR I[:i]#  ~ :[i:, …5bufC  % 1notI
š Àdeadline = _òD() +GI bwith _áÐSelector() asæ 
U s$ “.register¦ Æs.EVENT_READa `while « ü :eofZ  $  »a R (º  Ä- 1 ‘ = max(0,ôZ s:)-n�  0   % Lfill   % /$    ÿ, v ;?, i� J O  ð i = i+n
         übuf = self.cookedq[:i]
'  ) 8 /i:8 ­return buf[ ýif timeout is not None:(  ƒ ) à= deadline - _ /()1 ] ?< 0U  Y UbreakB ® í ñread_very_lazy()
& Adef  @all(( )\ ó"""Read all data until EOF; block ñconnection closed."""^  ’  U ×.process_rawqâ Qwhile+& 6eof~ < Lfill9  Y 
� #e = b'' / Ý Osomeòt least one byte of ` 6@less7 Bhit.{ Ä ROX'' if# 1  BbRif noH áis immediately¡  C —availableW €$¶ _q and•�Ì_eager›e# ðthing that's possible withªÈ ! �in I/O (Q )LPRaise›PError§ð1öŸ *  î(no1  Èµ otherwise.F UDon'tuP in the mid|ÿf an IAC sequenc0 eoU dTQsock_£ (" €º¤!n@ ƒ ®�•æ < 7ilyA ­ÂñÐ°x×k‰ ˆ SB"""P-¦ % ÒÐ that's alreaódy in the queues (lazy).

  ö+Raise EOFError if connection closed and no data available.C �eturn b''? ›no cooked0 õ	 otherwise.  Don't blockG dunless° ÷	midst of an IAC sequence» 5"""= õself.process_rawq() r  #  read_very_	"()	Kdef   . %):D B"""RG <anyÚ c÷ j  (e  e nz?`buf = ô .Æ qú    =æ pif not =  #* e³ 0tP  �H vrsŽ('telnetx'Ã;buf±0sb_—(| ¯’SB ... SEêÑ+ ÿõ Should only be calledðafter seeing a SB orl ðcommand. When a new  5 isB Ðfound, old unž (  í P wills ¨discarded.QÉ " ¦ã sbG ã ã<	y`set_op!�_negotia  AbackŒ,  
–•Provide a  C funnB :²each receip 'z .Û  ý. _† % =b 3	! 6 
� òTransfer from raw% tÓÜa#Seæ ÷wÒ>#isA
ñ éë ¡ñÏP[b'',”]L *ryo_whileŒ �cû «‡_getchar@ $   ï 8z.iacseqi  $    D0 ==wONULL%  ) …continue¼    F b"\021"F ) !=CB Abuf[Ö 0sb]  ?+ cŸ  § À 
Oelses o E? +=d  �elif lenNo)V1U ð# 'IAC: IAC CMD [OPTIOÿN only for WILL/WONT/DO/DONT]'
   Ðif c in (DO, ( ,;  , < /):4  G ÿself.iacseq += c) Ÿcontinue
" G O= b'¥ o== IAC’ Abuf[O isb] =  +¡ OelseR ÿ
== SB: # SB ... SE start.Ð    ‰ O = 1( Pdataqµ  S %el� E´  * } 0} 7 Œ +A/1]A 
 d1m¸ 1if Z ÿ option_callbackÃ 3# C( ÿ
 is supposed to look intoš 
�# the sbÍ * 
œ ( ÿ sock, c, NOOPT)F E ‘ÿ# We can't offer automatic processing ofc E 2subEÿs. Alas, we should not get anyF `unless; Qdid aï¯/DO before×¢msg('IAC %w þrecognized' % ord(c).¿2len\:o) == 2
Rcmd =:- O[1:2�®% DOopt © Z)mdüos %d',v
Í ð= DO and 'DO' or ANT',3?opt5  ø  D"1v~Ú@md, x » Úd  O �.sendall(+>/ +^   { ¬qu! ^ w 
 y Ýy´À.sendall(IACó + DONT + opt)
  ö except EOFError: # raised by self.rawq_getchar(9  @   ðiacseq = b'' # Reset onS f - isb = 0 Epass R `cookedS 	 Š+ buf[0]- esbdata-  - 11]
. Idef È  Y !):  œ À"""Get next è P from2 r queue.F  * ÀBlock if no y ð is immediately available.  RI [m ð when connectionB gclosedg 5"""0 m t�·  ‘  Ê `.fill_á ¡"if7 :eof6  : èŸ 2c =5  P [_ i : ++1…! 8  8+ 1Â = � >= len(  Y ˆ —  SE  ` G‚return c§ í O b v"""FillÜë÷exactly one recv() system call™ #Se¶@eof öÌ þ Ã .ö <?P# TheZõ)fer size should be fairly small so as to avoid quadraticÕ ó# behavior in process–e above+ 4buf.Qsock.s&50^ó Pmsg(" P %r",¤ !  Xo= (not   [e  # y _¯‹
$@Test³Etherè-  Ü ß@the C 8et.­ðwith _TelnetSelector():s 
‰ ‘.register� ,‚< Æs.EVENT_READþ  rõ@bool4 . .O F(0))é €interact& fç I  ‡1fun�ñ	, emulates a very dumb tÓ j clienó  eýys.platform == "win32"ë Uf.mt_� Ð #IW4'orƒ�ys.stdinˆ¦  ‰ªwhile Trueð   ð for key, eventso 	 (’ 2   if9  Ú@eobj% b 0 =try À            ÿ text = self.read_eager()
  ÿexcept EOFError:)  @ ÿ!print('*** Connection closed by remote host ***'w  N oreturnq !ifÎ ’ ðsys.stdout.write(ÿ.decode('ascii')‡ C _flush-óelif key.fileobj is ; /in¥ @line‘¨ !in–  Y().en§ 
	@not 6 i R' L !)
r ðdef mt_interact(& )h  """MultithPped vers÷5of 4 Q)."""N  ‡ ‚import _3   £.start_new r Ç.listener, (±vwhile 1�  `  ½ Tm  ( ?if 8Ybreak/  ù F b Ÿ/¬ º 
,©Helper forUò) -- this executes in the other +	Fû :try è @dataõ
éÝ/Ñ 0if ž ´ ;¹ ' ¹OelseI 
¿Ö ×CexpeÒ , µê, timeout=NoneºñRead until one from a6 ð of a regular expres¢s matches.J ŒðThe first argument)H F  @, ei·  D öcompiled (re.Pattern instances) or un% •strings).A  …  op�›al second� ,†! ¥s; defaultG Tis no2ä R¹€ a tuple ¿�e items:ÖPindex]  ã z& e\ $T thatX;L @re.Mhf objecŸ oqed; and*  ý §� up till ‘including$ ³Í  Ifý ¥9  K  õ  H1wasN p, raise( %iO¸ wise, whenohi e Bes, ¤ ` (-1, s,Ô). r¸ !is   ñreceived so far (may be! bempty õð if a
        tiómeout happened).

  õ-If a regular expression ends with a greedy match (e.g. '.*')E øor if more than oneL 3can= õthe same input, theE ðresults are undeterministic, and may depend on; · I/O timingÒ 7"""T f = Nonf plist =  5[:]) ðindices = range(len($ )å fæ C in , :=  KPif nocQsattr< ê[i], "search")/ 3 Ære: import r¨  !    … 0[i]™ ”e.compile^ œ  ifå!is‰  õ 
s ôdeadline = _time() +6 Ë òó_TelnetSelector() as s 
U  õ .register(self,. Æs.EVENT_READ¯  Ù Qwhile«  2 J.eofZ  $  Úprocess_rawq(D  $ — "   mô2i].’© Ž.cookedqW  5  Ô•      I_m.end•       0texnÈ k 6[:ew $  )   =Ff£ '[e¯4   àreturn (i, m, v Ò $ L   Rready� .è(8>out]  5  D = dk-ka )  4m h¸ ?< 0(  V _breakl   Oelse@ ~continu‡™Lfill‡ l) f.É §_very_lazyé ,  ÊN òåraise EOFErrorÆ Ü1-1,Ëà! Ñdef __enter__Ói:  n ñ. 3xit- ÷	, type, value, tracebackE  > °.close()


C Stest(# ð"""Test program �t?3lib–°Usage: pyth¹ ðpy [-d] ... [host ["]]® �Default  €is local 3; d  / c is 23k ýádebuglevel = 0+qÁsys.argv[1:]V –] == '-d'$	G  !+1R  TGdel C   ¤ E = '± ' 'if* &:]f 0 G Ý ¾ = 2=  & 0str„Û 2aÀ     try:
    °port = int( Tstr)
 õexcept ValueError:  #  0 ô = socket.getservbynameL r, 'tcp'S öwith Telnet() as tnQ ötn.set_debuglevel( ?  s àtn.open(host, � Ù, timeout=0.5) ðinteract()

if __™ ò__ == '__main__'� 0tes' ñ2"""Temporary files.

This module provides generic, low- and high-¹  Lúerfaces for
creating t\ 7 ÷	directories.  All of theE 
v gd by tŽ Àcan be used \€out fearC órace conditions
Ëpfor 'mkŠ 5'.  û  is subject to =  © ´
should nott @; it9 Ÿ  ] ñbackward compatibility onlyLð e default path “às are returnedóstr.  If you supply bytes as
input, all4   v `s willœ "in- q.  Ex:
³1>>> Õ@.mks(.�(4, '/tmp ƒtpu9nin8²7 d7 “suffix=b'% b> špbi8f0hy'6Falso;ð some data itemsp ðAuser­ ñ	TMP_MAX  - maximum numbe×0Ethatï Átried beforeì  ( 0givwQup.
 þ 0dirW Ib is¼!señPa str, G �Pfirst]: ofX øany routine from•,Š�considerÖD ðother candidate loca¬ Qstore³ 	Œ """

__allÇ! [S e"Named¸vFile", É #¢ ¢9safb /o"SpoolJ 	D¬2y",z I o !mk ",K 
 #%y 	�; I ú # deprecated unÃ � ; � 0get­jprefix[ #bstants7  ) 7dir7   	I b$ b	p]


# I9t2i
 � functool¶% _ 
 rwarning    io4_io o( $os ashutil&   Berrn> 
 
¢srandom { R Bas _ < "syg %syh 1typx! _
 * qweakref€   €_thread
¨ Ô“e_lock =  1.alì €

_text_×Pflags) Ños.O_RDWR | _ UCREAT @EXCLÔòhasattr(_os, 'O_NOFOLLOW')Ø	[ Àgs |= _os.O_öNOFOLLOW

_bin_openflags = _text û
if hasattr(_os, 'O_BINARY'):
    B t|= _os.& 
A tTMP_MAX@   { 3os. R
else`  ðv = 10000

# This variable _was_ unused for legacy reasons, see issue 10354.
# But as of 3.5 we actually use it at runtime so changing ñwould
# have a possibly desir‘ ñ side effect... m ðwe do not want to support
# thatŽ òan API.  It is undocumented on purpose.  DJ Qdepen ðthis.
template = "tmp"+ðInternal routines.

_once_lockurallocat ó()


def _exists(fnç2try�ô€os.lstat  æexcept OSError* Âreturn False) Ù I  DTruey binfer_ ³_type(*args‡ ð """Look at the   € of all & ° and divine  ²ir implied Q 1 A."""Œ  e b = Non£  Daarg inT Í  if  œ ,   Ê rcontinuB   ôif isinstance(arg, byteÉ  #   #if› ‡ Wis st@ #   ¡raise Typea²("Can't mixV ù Anon-d  » ã  <  ñ"path components.")0 
Y    . É 2 
& - Ë o1strÉ ³ 
Ø ‘@  # _@file¥sµ! a bÿafault.Y 9  ÙÞñsanitize_params(prefix, suf 6dirê@Commù + ñ eter processingéBmostŽ 0in u moduleáaoutput�  ë[ Â #if“ î« 7 = ^ (:2if R 6 (if0    è; =j ÉŠ  3n,  m�fsencode(£ 9 Ž dsÛ‰‹  8 P= getR 3dirà Œ - b. ÿ	ã,ó


class _RandomNameSequencd"""An L ð+  ñ generates an endlessBsM Àce of unpredó<ictable strings which can safely be incorporated
    into file names.  EachD ñ is eight characters long.  MultipleF xthreadsm °use the samw –stance at atime.
@ ð_RandomNameSeque+ òis an iterator.""", ‹ ó= "abcdefghijklmnopqrstuvwxyz0123456789_: ‘@propertyt ádef rng(self):  õcur_pid = _os.getpid() 4if " ¡!= getattrD p, '_rng= w', NoneV  Z  i .#  \ ñ Y 	"  E $ =j } ureturn I  É  __)!__Š x 2 - Nnext- 2c =\ c{ dchoose! ’rng.choicÿ ¼ 1let2= [, õ(c) for dummy in range(8)]U ž ƒ''.join(C 1)

Ó ócandidate_tempdir_list(Þ `"""Gen@e a  0 of�4  4 óorary directorie€ Ä_get_defaulta – will tryn1dir\ B= []B€# First,( ÍÁenvironment.[  ö 0envQ ø ñ 'TMPDIR', 'TEMP 6MP's1dir, sCenv(A 	z) :Ó  – ƒ.append( )¡ £ailing tha¨ òOS-specific locations® !ifê‚ Z= 'nt› i 0exti [+ ñpath.expanduser(r'~\AppData\Local\Temp'),   \G ÿvars(r'%SYSTEMROOT%D Pr'c:\ç2',  !mp  r\tmp' ]EIelseu
Ú  '/- u, '/var "us  E Ï @# Asq�ast resorb he¬@rent›ny^>tryt · ƒgetcwd()£ ñ
xcept (AttributeError, OS	 û N˜ K ccurdir[' Ró O‚Calculat¸Ð @ to Õ Þ v] ;IðThis routine shouldsôcalled exactly oncö�We determ1 ûwhether or not aË ˆ  �!usäbÄ1tryèPo creº pand wriÄ 2o aÙ!in	 B š‘  If thisÒáis successful,ÓCtest= ñs deleted.  To prevç�enial ofC rservice= Joa &e I @mustrêFizede 2 r"È $ 	Àpdir_list()
ð 
    for dir in Qlist:    if æ != _os.curdir  "  :  €path.abs U(dir)F ñ
# Try only a few names pey uectory..  � 0seq� ªrange(100)u  @ € = next( l  ” @file  ™ @join– ,} œ  0 :try`   #fd? Topen(S p, _bin_ Êflags, 0o600P  ? T  
  �with _io.a þ(fd, 'wb', closefd=False) as fp³  B  þfp.write(b'blat'¢  * ofinallþ      ÷ } >(fdC ? 
 ; eunlink>B Qretury  w ûexcept FileExistsErroz ( Opass9 ¯Permission9 r# This h ðion is thrown when aøš •¡the chosenA	u  Š ±# already e± ¶ on windowsÛ )   @if (¥¡= 'nt' andf @`.isdir°) n  E  A `access( ,< [W_OK)- ,   �continueM ñbreak   # no point trying moreï sŽt22dir	G H? OSoc (Qraise
�NotFoundd ù (_errno.ENOENT,Ž  î  ÷"No usable temporaryàfU  á _%s" %J 
0dir!@)

_¼ñ_sequence = None

def _get_candidate) #s(•õ"""Common setup A  öÑall user-call¯ ñ interfaces."""
œ qglobal X �  +if  Ö ˜ +ö_once_lock.acquire(•´Q h
�  ;³RandomNameS&k :� dreleas� &
d 
n0mksÖQ_inne3Ã, pre, suf, ¥¸output_type‰Bde cŽ3to H 4, T$ ,€ Æ d � 	sñ ÷™‚  –Vbytes—D 1map‚fsencode®"s)ú $	sTMP_MAXÓ  ‹ I sÞ Ãð  = _os.path.joiðn(dir, pre + nam csuf)
  ð	_sys.audit("tempfile.mks 0",  - Etry::  A àfd = _os.open(- æ, flags, 0o600; úexcept FileExistsErrorN €continueZ µ# try againr D ¯PermissionD  r# This + ñion is thrown when a directory with the chosen m … ‘already e´ É on windows.) @if (b±== 'nt' and path.isdir�) 	=  j  = `access$ ,8 jW_OK))# , '	E Nelse+ Uraise( ¢return (fda ™ 0abs ½1))
- 7 ¬ñ (_errno.EEXIST,)  �  °"No usable GQoraryJbð found")


# User visi- ðinterfaces.

def getA sprefix(à"""The defaultÛwfix form äqies."""¬ þ  Q Olateb  bc $~ as bytl  Ö›fsencode(Í 0)

‹ šdir = Non‘  -ð A%oræ  j.? á aglobal1dirô $if   f $ö_once_lock.acquire(¯êJ 	‘  Cget_¢_ ^ kfinallL� dreleas� ¹ Ø 8dirµA‡@ ver" oÿ .Y3[ ¨) )&€(suffix=HT 3dir ¦text=FalseÀ æQ-callPfunct›�to create Œ wa uniqu;ÊÄ    ú) Pvalue×ba pair× �)êPre fd "th A ³ descriptoro ced by Á,ˆ  C 9 µ  .BIf ''" 1notº,Ea  - ” will enda2at 6 5�otherwise7 "re/ Sbe no' n ûn @begiœÑap a6wis usedq ?dirn × #be´–d in thatQo �y7r  1s ‘specified‡GtrueY0is dew 1extÐmode.  Else (Êðdefault) the filð*e is opened in binary mode.

    If any of 'suffix', 'pre
 ð and 'dir' are not None, they must be J ¡same type.V $  7 Qbytes4 ` retur‹ n, @willA ! Q; strH „otherwis¢ qThe filÊ �readableš Awrit ponly byŠ ñ creating user ID.T !If Boper `system% °s permissio ðts to indicate whe� ! aG ‡ Qexecu| Ø   � „no one. Á C  descriptorš S�inherited4 €children‘Ãthis process®QCalle: €responsi�for deleø t/òwhen done with it2"""úå", ÷à, dir, output_Çÿ = _sanitize_params(4  )N �if text:å  YPflagsD   _ƒ   Oelse*  7bin) * 2@ _mk°�p_inner(« Œ _ 	Â ò)


def mkdtemp(ê =Ä?  1dir
 )– Á"""User-callbPfunct!"tob‚ž �a unique f Qorary¼ ±directory. . AvaluÍ ªApatho¢4 W‘Arguments‚0as ìÀ, except tha 0e 'l ­5 1 is‰  f ac+ #edI ”l  ŠZ$, W,easearchgW 	kX ¡{ ¦[ k•áget_candidate_ !()Ö )if1is   Ù- ñ = map(_os.fsencode,   ¨0sequÓrange(TMP_MAXbI ƒ = next(;     Q = _  "X.joinö! +m # +¾»  : À_sys.audit("� J .!",I- 6tryØ >  os- 0ir(8 v, 0o7000 pú FileExistsErrorC €continueO ±# try again\  D PuD  0# Tü+  w�is thrown‘0n a­\Ý Kachosenm  q @# alÞ1y e´ ² on windows %   @if (r Œ� == 'nt'  ‡Aisdi~) 	f  A  (  h"ss¬  WW_OK)õ (   '	E 
 '   Uraise( F  #  ”Àrror(_errno.ŸEEXIST,
  ð$"No usable temporary directory name found")

def mk( ð (suffix="", pre   Plate,? q=None):y Á"""User-calli øfunction to return a uniqu… Afile€ a.  TheK  ñis not created.
 ðArguments are similara 0mksš À, except tha £e 'text' a9 1 isI  [  ac+ ƒed, and ë  Ò í    abytes ˜  , 1notL fsuppor¥ òTHIS FUNCTION IS UNSAFE AND SHOULD NOT BE USEDø \ A mayW ArefeÜ a Ó 1didòexist at some point, but by the timL you get arß +Rqing it,? €one elsez p have bt n < !to�  T apunch. p"""

##pð from warnings i]t P as _ )  "("Zð is a potential security risk¦ ãyour program",C  p P  Runß Wt ò , stacklevel=2)( ifŸ e  Ã¡ = Pdir = -Cdir(0 Õñ= _get_candidate_ !()ó ó	for seq in range(TMP_MAXÿ ^  / € = next( s:   ;ô= _os.path.join(dirk! +# +ˆ: !ifñ_ò s(I s  \ ]  þ °raise FileE'ïsError(_errno.-$ ^  Ô '”
class _TQ q bCloserqð"""A separate object allow~°proper clos Gof aœ o '«punderly%   I Ð, without add ða __del__ methodEtQ îô B .¾ :  0 = $¡  # Set heY5nceP ‚checks iî ±  e_æ¢ed = Falsew 8á__init__(self,¹,ÚÄ, delete=Tru3 ƒ  ( .ˆ   l r=A 
 M # =V � @# NT4Svides A-on-³  �°a primitiveûá we don't needa #>@wrap�°to do anythcð	special.  We still use i†rC  È .»  is" ‘ful (i.e.Ê±"(fdopen)")Äi NamedFe!if0I r!= 'nt'Y P# Cacéæhe unlinker soÓ  õ spurious e2s aÃ@ Ñshutdown when÷ qmodule-KT "os"AÂ'd out.  NotWC “Ñthis must be µPencedpÝž `, beca/•C Þ 	ý W}€may also¯£† ð before
        # _ó_del__ is called.

  òdef close(self, unlink=_os. %):,  3 pif not - .8 _S B and @filek  ' JNone@  D = i= Truei  ) >try>   B  i „ -(); ofinall? "if« _delet¡   c   f.name)8ð# Need to ensure the ’  û X bd on _|   p X _Ù X(m 7els¢  ?   * = œD = ;¿‚)  × .  • ò
class _TemporaryFileWrapperj 5""" w ? Th‰E ³provides a # q around7 Ás opened forAts ð use.  In particular, i˜0eks–€automatižy= Wremov¨@when3 ðis no longer need  þ2"""±  u�__init__µ,Ÿ  , ", î=Â‘:! =. „  W   : ! =A 
 M # =V 
 _û;r =~CÁ r(¨
• DÁ ugetattrÄ  „ ± ñ# Attribute lookups are‰ 2gatí æªunderlyingÙ #Bcach³õ non-numeric resultsÐ â# (i.e. methodj ; ,�dN Sfrien 6notè ì " =Ç __dict__[' %']e Ca = ö E `if hasa(a, '_7__' ²…func = aX    @_ `tools.¼ s( \  $  x  _! ð per(*args, **kw
 h  3 preturn 6 . 	€ q# Avoid- ‹ š ÿ 1 asÍ    {  —kalive,F  se®¹sue #18879.   ˆ ¾ .Ä 	0  r4  œ isinstancer;ints¤f ¢6, aUa˜g# The �“__enter__W 0 s�Áwrong object— !# g .6Ð) so override#to= < ß7  Õi B Ä  Q .# ¿  % Â F�trap __exe ¼@wellÉ_#geF#š ˜Êpused inJðith statement
   ó def __exit__(self, exc, value, tb):
  �result = ( e.file.; 5 4 + uclose() rreturn P 
  ˆ '  2 u 1"""!  „ CH ð  the temporary ‡ õ, possibly deleting it.8 D  _ !._k !r. "()ƒ ñ# iter() doesn't use __getattr__ to find�  __- ‘__ methodk  Ä  LÇ @# DoT û  = # Gð), but yield from itn `avoid ¥ 1ingc  #ô € as long pit's be÷ Bused ÷erator (see issue #23700).  WeN  ca™  í '‚ °' here beca °  k") Â s  J �object iteÑ, which has aÅ e-1, aFuE § would getO  ù qed whenn 3genÕ  isŠ°alized, due.öPEP380 semantics ¶for line in¼Ø Uú  % 0


ÉdNamedTgð File(mode='w+b'°ðffering=-1, encod UNone,Ã  Y  0newa =% s suffix 5pre ? 3dir. å@e=Tr£‘*, errors s‘"""Createk³+ a7!’Arguments'‹ B', '¢  
 pdir' --Y L0mks�@ '  ™  # aS  –Ðio.open (defa?c"w+b")< #buGA  _ sizeH $-1E ~D  A  ‡”'šA  @ ‘? qwhether± 2 is•Sed on ÃÇ ÆE  JÕƒ 2TheAis cúª#()a!docR†Ss an ¹awith aH @-lik0�terface;Ð qname of  Ü G qis acce€e"Pits '+  ' 9…ibute.  ¢ ñwill be automaticallyK Gò it;Runles/'& 'Qis se1RFalse[ ôU Ð,pÿ, dir, output_type = _sanitize_params(4  %Pflags3 @bin_Ù A1Set}°O_TEMPORARYt Ï(  NÈ  OSÍ © #Xó@ isó	only supported by Windowðpif _os.€� == 'nt'i ð:
        flags ð6|= _os.O_TEMPORARY

    (fd, name) = _mkstemp_inner(dir, prefix, suff ñflags, output_type)I Atry:	  V @fileP qio.opene õmode, buffering=
 ,7  ;  ƒnewline= p, encod= 	 ’, errors= )Õ  D ðreturn _TemporaryFileWrapper(  ÷ s, deletÅ Áexcept BaseE 6ionÖ  Aqunlink(2¸   ‚close(fd‚ �aise

ifz 2 ò != 'posix' or _sys.platform == 'cygwin's ñ# On non-POSIX and C  0 sy§ò
s, assume that we cannot ¤ 0 a ç ¥ @# wh“`it is “. 	‰ = Named d

else‘ ðIs the O_TMPFILE ¡ available¤ Ñdoes it work?f R# The+ òis set to False if os$n£] 0) rBCs anG ÐIsADirectoryEø ±"io" _™ õ_WORKS = hasattr(_os, '  '*Idef ð (§h='w+b'­'-1}ONoneµ«=$  5 J Ñ  %
 2dir  % *Ú J )� - ‚"""Creatmæ a ·çõÞ / –ArgumentsB '‰ B', '   
 ó dir' -- as for 	H '"    # a[  Îé÷ (default "w+b")@ ïE  _ sizeL (-1I ûH  E Gw'¨E  D tC  B ˜1s cÕd�}ö () would do it.ÛRÛ Ã object withðò-like interface. } f ehas no ’,³ will ceaseÌ exist whenÇ1is ÛdÌ5"""E |global z­ m@ç> 'ÿsanitize_params(4  ° Ó ts7 @bin_Ì ’  pèü @ 	ª    D Q2 = (
 ! |µH P) & ~çuO_CREATn  <    fd’ 	ÌI †2, 0o600 . · Ð
©  * ð# Linux kernel olderðßn 3.11 ignore–ð :
             ù6   # O_TMPFILE is read as O_DIRECTORY. Trying to open a directory
    ç# with O_RDWR|F b fails DIsADB �Error, aJ  f ¢ cannot be� ñto write. Set flaœ PFalse¥ ?notN  ­try again. _‘_WORKS = M 	) ‘except OS² :  ö# The filesystem of the,` does È vsupportz“ ä# For example,v ø (95, 'OperationM Oed')G  §  üOn Linux kernel older than 3.11, tïregularL   ï ð (or a symbolic link‡#a 8 )ûjM "=Not#vbecause6°N  |Ipass4 NelseÔ>try  í°return _io.õ(fd, mode, buffering=
 ,j  ?  ƒnewline= p, encodI 	 H eQ"s= ){ ÇÖ Î_os.close(fd:  µ YraiseT #+Albacô0_mküµp_inner().
- $‹name) = ( ñdir, prefix, suf  Øæs, output_type” ™ »  un{(d w ¶ ®7ž¦	 {‚z · rjó
class SpooledTemporaryFil®5""" hð wrapper, specialized�ñswitch from BytesIO%Por St± IO'  ¶#alK phen it º òeds a certain size ow& a2  no”bneededu1"""f u_rolledZ ðdef __init__(self, max_] "=0Qh='w+b'W/-1 #t=None, ¦ k   b, w 3dir
 $*,È E )1‘if 'b' inñ  ^  Ä !._=i(ºi5 rTextIOWÈ(dG û   x  	 Ä “> À              ƒnewline= $)
 ôself._max_size =  " ërolled = False ðTemporaryFileArgs = {'mode':  õ , 'buffering':  ,I �   ¢'suffix': 	 b, 'pre 	 G Rencod�  3, '3': 
 M òdir': dir, 'errors': 	 !}
Ö ñ__class_getitem__ =  òmethod(_types.GenericAlias): °def _check(Ÿ�, file):V   0if  "._•…: return  Ã# =(  " %ifèA anda •.tell() > r  v s  r Wover(«   " §  Ö £   Ÿ 0new 	 9 = g0(**p )._  }Ý3del% j Ø  po¯ p ‡ ³if hasattr(’ È'è  E   .Úq.write(T ödetach().getvalue()¡ JelsefI B 9 ' ³seek(pos, 0’ Ž  ˜³BTrueð b# The �ù
 caching trick from Named,ð# won't work here, because _å ² may changeH a7  BytesIO/StúòIO instance to a real|³ So we list; Uall t­ skdectly.Ê ñContext management protocolC F�_enter__I´C ¿ z.closed‰praise V²Eà‘("Cannot R # c~ Rwith @ Ê "Ý– �´ ’ 3xit‘ q, exc, G, tb¡  6 .]ž q#f ê ié … O #__* 1 – Á $ƒ •@propertyg? d@ { ( F •H * J  ±sH ( F   ,no8  Mù b  à @ Y_flushQ Ü  1 ipy2 k ( : MÀy
    def mo³de(self):
  6try   preturn ' µ._file.mode0 ÿexcept AttributeErrorB ðTemporaryFileArgs['P 1']
S ‘@property def nam¥ ! 7 D  Ä ¥ ONoneŠ |ewlines3"n* J  Æ Aread8 w, *argsr? - ' 
B   F 1 J É ‘  K ,s(L Oseek’ - B AtellB 
& )rtruncatp, size=¼E !if @ is  
”ÏK )0:lse0 M >	@max_u 
&  lZ –rollover(T  Ev  F Ù 6wriÖ Î  z# =~   ­ Prv =  .< t Œ p_check("  u&rvS> æ 8 ¯, iterable† !H B ­  Z .’ u
class +óDirectory(object‘ ã"""Create and Ò 4a tb$ d8 ò.  This has the samÂð behavior as mkd; ð but can be used ña context manager.  ForÖ ‚example:I æOwith½ )K [tmpdi!2...> ÁUpon exiting© w , Ï ð peveryth*  & Qained‘ ñin it are removed. 2"""e  ��__init__y�, suffixAV, pre 1dir s ß Ã _$ =4(A < ,zl1 ô_finalizer = _weakref. (£  ^    1 ,ëscleanup  w ,, ñ
warn_message="Implicitly 9  ñ up {!r}".formató )r@jRmetho=±rmtree(cls,ý    0oneå÷(func, path, exc_info+  Ê �if issubg (% ñ [0], Permission39  =  l °resetperms(i &   * µ   ¢_os.chflagD À, 0)
         øexcept AttributeError:
#  Opass ý_os.chmod(path, 0o700)
, ?try^ 0if : � != name%  ‹ °resetperms(u  5 @.dir5 | -))u 7  3 ›   & Ÿ    o bunlinki h Á# PermissionMÿ is raised on FreeBSD for directorieTœS(IsAD+ yS ,d )/¿cls._rmtree¶ g ÁFileNotFoundf T ýelif issubclass(exc_info[0], U ª  R  s  DQƒ_shutil.Û  ÿP, oneÀ= å@™ amethod´ñdef _cleanup(cls,sç, warn_message© C h a_2 Pings.	 ( @ ó, ResourceWarning� | Ç_repr__(selfi ñ
return "<{} {!r}>".format) 1.__É P__.__ˆ @__, B . 	_ Oente` 4 N’ Cexit’ ÷, exc, value, tb¢ ; :s     / "if¡ ÷_finalizer.detach(%  [ 8 § Ô ø Ágetitem__ = 
Óð$(_types.GenericAlias)
"""Text wrapping and filling. ý

# Copyright (C) 1999-2001 Gregory P. Ward.+ ñ2002, 2003 Python Software APation7 ¡Written byU O ‘ <gward@p: ñ.net>

import re

__allæ  ['Ä WÃ `er', 'Î    É   `dedent
 $in
 �shorten']â ñ!Hardcode the recognized whitespace characters to( ¯US-ASCII
#( ò.  The main reasonÐoh@thisôñ that
# some Uni… q ðs (like \u00a0) 5�non-breakB œ Fs.
_ ñ = '\t\n\x0b\x0c\r '


 (¸1"""ìaObject   = /> i CtextÌ €public i9f¡onsists ofH  @ A %()J2() ‚!s;7Tother × @just  re� H (enñoverride in orderƒ@weak7 ñ default behaviour.D °If you want0 ð completely repl¾  ® Ÿ ³ ð ping algorithm,ñ'
    you'll probably have to override _wrap_chunks().
6 ð(Several instance attributes control various aspects of K Qping:E ó  width (default: 70) Ó  the maximum( A õed lines (unless break_long_wordsD „is falseV çinitial_indenty $""# ð  string that will be prepended š Qfirst‡ Ø %edx ñoutput.  Counts towardsÔ  » "'sÓ .2 ¯subsequent› ,1all• 1s sÈ1he ª h  ­  ¥ Š; also c© AeachI ª ·expand_tabs?5trud1  E$  $ Ðin input text=ðspaces before furthertcessing0  E„ 4tab…°come 0 .. '[ Rize' N 1, dŸ ·õ on its positionù  ‰ !tsÔ R.  If!, ê  f ðis treated as a � Äle character™ | þ 8<Eû 	¼ uÅ© 'c$' Â~ Ñreplace_whiteþ ‰ 
‡R+  / Ñ As in’¡#byS� PafterÌ ˜ ²sion.  Note""if ° 6 anµ  n@ue, Iy` l`converˆEto a‰ �ô ! øfix_sentence_ending—	üs  Ensur· 6 -6 € punctua3 t×always followÙcby two$£.  Off by Áp becausc Öe algorithm i‘€(unavoidk´) imperfectÞÉÜBò í ø £Qhan 'R'âSthose, d3not@ Üpbroken,²  sd ¢ps might  ` @ ° ˜on_hyphen|
ŒAH¨ ¥/ lÄ .‘ 2 ,#öSoccurm  †0fer<F on Ôs¼ r± °a •s part ofB ‚compoundwOdropR€Drop leahs PtrailÑ Œ Q fromgs_ Bmax_Tê7Non2‚Truncateþ à@ ògholder†' [...]'} Ap¤ e ¢'la¡ta Ðd text.
    "ò""

    unicode_whitespace_trans = {}"  ± = ord(' ') —for x in : : V 	[D qx)] = uW … ð# This funky little regex is just the trick y  sp% 1ingq ó# text up into word-wrappable chunks.  E.g.0 €  "HelloW ð	re -- you goof-ball, use Ã -b option!"; { sj  !  L ñ/ /there/ /--/ /you/ /T /U P/ /us  th S-b/ /] J ñ(after stripping out empty Bngs)Â  ã ñ	_punct = r'[\w!"\'&.,?]'L 0letJ  S^\d\W æ9 ÷%s]' % re.escape(Îè)no4 v'[^' +  A[1:]s  ” `sep_re[ Òe.compile(r''”  w( # any@ <   •  %(ws)s+ ñ| # em-dash betweenÝs" ò
  (?<=%(wp)s) -{2,} (?=\w¼  W  E  › ÷, possibly hyphenatedI 1%(n~ F? (?È B #1 € 6    C-(?:ˆ ·lt)s{2}-) | 0-%( &-)–  8  ½ "=  3 -?
 
$  ¾ oend ofz  (?ü os)s|\Z8  ;® 11(?=40 š L 0)'' a{'wp':ƒ w‚, 'lt': h,d P  'ws0 TA, 'n O}8 ¢re.VERBOSE| 9deln h  ? 	;?les@=´ñ  on recognized ~/s.h/V ¼ Wosimple^ P(%s+)¥”D‚.PXXX tmòis not locale- or charset-awa ‰Áng.lowercase‘ #”ðUS-ASCII only (and/ð refore English- ‹ Ïsentence_endÃ  `[a-z]'z %# v e}   	  	X.\!\?L $# } @-endU8HF   O X"\']?š #âal end-of-quot: 	 kr'\Z') #E  Ý¥£ödef __init__(self&> �width=70   9 ×ial_indent=""$ À        subsüequent_indent="",
  ÿexpand_tabs=True#  ÿreplace_whitespace* ÿ
fix_sentence_endings=FalsW ÿ break_long_word Odrop| O Ÿon_hyphenO  ê _ize=8ê  *  ßmax_lines=NonÈ õholder=' [...]'):jÑself.width =  
 sinitial¥: =  
- IsubsÕ= =  
3 á7 =  
' å> =  
5 ð? =  
9 ­ü< =  
1 ; =  
/ M `  
1 3 = 
 
 5 =  
# 7 =  !

) ÿ# -- Private methods - I ð(possibly useful foròclasses to override)} ˜def _mungÆ(›g, text°>"""*  $ Ó : string) -> ^  TM]  #1 inZ :sXñ and convert all otherÖ  D > ‘characterÎ uõs.  Eg. " foo\\tbar\\n\\nbaz"D rbecomes&  U Pbar  # .$ &""0 0if .¼ @ û =Ì %  "<.
 Eize)Z N 9U ’translateT hunicod¨_" e Rretur^\ßQsplitD Ô Î 	É[Õ]ËSI A theõ  Nðwrap into indivi}pe chunk–C	 E are	‘not quiteH �same as èp; see _T _C !()ÂEfullA `detail^ áAs an example,P  Æ * à  Look, goof-bV --* ¥-b option!0 sÏ  å “followingÑ ª'[ P', '  c  	  g    #-- c c  'use F 'th %-b ™ '7 #if¦A is —o or inœ ð ball', ' ', '--•', ' ',
  C'use F 'th $-b …option!'6 ¥otherwise. 5""" õif self.break_on_hyphens is True:*  † ‚chunks =4 õwordsep_re.split(text)1 ?els? osimpleF s Ã[c for c in  Uif c]p Tretur 
 ðdef _fix_sentence_endings(õ ,H )å ?"""0 r ²: [string])b  qCorrectŸ i  i p buriedµ 'D ñ'.  Eg. when the©  G �original Gö" contains "... foo.\\nBar ...", munge_whitespace(xBand �`) willK ðvert that to [..., "T P", "  PBar",\ Pñwhich has one too few n ñ s; this method Â�y changesÕ  3 Ù 3  y ?two†E = 00 ”patsearchiU ¾( 0 âwhile i < len(f6)-1Ö ^ ,¾€[i+1] ==ù  ,o ; 7[i] <   W = F "  D    ei += 2—     ) 1A£Àhandle_long_VŸ’reversed_} £, cur_line
 —en, width°  ÂO @  ¾V ’  h 2 ƒen : int–  )Hç " ax2 ofëð (most likely a f, not ß)½[!is� 0 X0fita@any d°# Figure ouZ �en indentê`largerd “p specif¸_,(6mak­0# sL €at leastð  `racterS  'Àpped off on Ëfy passÆ f¾; < ­2•_left = 11 N	) ¬ " -&"en` Úð# If we're allowed6ó D s s,¹õn do so: put as much€ #³the nextÅ0nto9  v rO ‚ : {6fitŽ
l y ís©|‹.append(f[-1][:ø ]ù ë .  ? =   [C (:]+O1€, we havüp preser &he4 í€act.  On¼'dd,im:the if/@re'säðhing already there --
     ñ2   # that minimizes how much we violate the width constraint.
    õelif not cur_line:     õ.append(reversed_chunks.pop())
4 ¡# If we'reU ðallowed to break long words, and� Çre's alreadyH ptext on"  œ Prent   @, do\ €hing.  N' 0timè Prough1 G ómain loop of _wrap» 0(),© ÷ll wind up here again, butE ðen will be zero, sol   n‚  š  xentirelÎ Rdevot	 �Áòwe can't handle right now.Z+de¼ bself, „)²9"""ã ! õ  : [string]) -> \  æð Wrap a sequence+@  ©Ðreturn a list!  ò Es of'€length 'œ .qñ' or less.  (If '_ý _µ' is false,G AsomeéPs mayn 0  er* qis.)  CÁ correspond ýt"tohgð whitespace betweeN ‚em: eachL5 isˆ ÿindivisible (moduloÁ  )+#neä5canF cÎ o rany twol  Æ `shouldÕå have internalF » r; ie. aC  >€either aÈá `or a "d"ëW  ÙÐÁremoved fromÔ‘beginning>9endéCinesø Dpart7 (atdÆis preserved„ 5"""Ö BE= [] 6if ?V <= 0Ý ©ó
raise ValueError("invalidâ€%r (must7w> 0)" %Q )h 1maxõsK ,No“ + :> 1–  š 0ind¢=o 2subM"t_ z  , ;elsg  )  B initial? rif len(0 1) + 7Ðplaceholder.ló �" >” “¹ SF ò too large for maxi"ó`Arrang¸  ` order"PitemsÞ “õefficiently popped#Fpa stackafchucks;´.b (‚ Rwhile&s:Ö U@# St£uºI  Pt³@make % 5curk| K @is je 0 ö!ofƒ  _  in·^
H F Iine ú b  len = 0Æ ðFigure out which st÷atic string will prefix this line.
  !if )s:  ! ò
indent = self.subsequent_ 	0 OelseB tinitial? 	@ ÿ# Maximum width for± ! –  b- len(— +)
Y áFirst chunk oní ñ is whitespace -- drop it, unless| H i Ðe very beginnbñof the text (ie. noc ís started yet)sS u _ˆ 2and¨ `s[-1].Ä p() == ''   ¾© 7del8 
 Swhile ¡1l =;v ? ñ# Can at least squeeze#Y Q onto@curr4 © 
ô  I òif cur_len + l <=í—  - *  ®rappend(£ y.pop())› .   2  \ := l  r# Nope,·     Nfull¨ Í E Zbreak\ P# TheØ ù Y ,´ nÁ   ©too big toÇ P# fit¢Q*any*E¢ (not just· >oneKX sl    A?) >aô_handle_long_word,Î _#
 2en,I xt°= sum(map(l.  Kine)O2# I0lJ«  ò › 7all�,›
§"if–C d1ineŠ  
Rw, Cen -H  ; ú u" 
ë/in1f (‚1maxhsø yNone or t   Ù ‘‚s) + 1 <ý ? 7 ?fsZ J G ˆ -˜1d*  º{ %[0Ì)0 _%en)‹ õ �# Convert1 ^”back to aå ¿store it in�  # list of _KÜ (return valuX €   * .ƒa± + ''.join(1ç -  D’;û  J 5if a  ƒ¾<andä À            ÿ cur_len + len(self.placeholder) <= width):
  G ®ine.appendI > 
Tlines; ôindent + ''.join(\ /))E 
_break" E Qen -=é  ine[-1]W 2del!* ^ Oelse1if Þ "  VPprev_( " =/  ˜ �.rstrip(   ; @if (»C )ÌÁ  F  õ 5  µ s® 5 = ƒ 1 + E Jz ¿g "e #.l23c Š breturnp
 ñdef _split_chunksÈg, text  " =ã ð_munge_whitespace( € e ª [ ! q ÿ# -- Public interface - » Owrap² 1"""  œ 0 : &‚ng) -> [ ]F  ÒðReformat the single paragraph in 'F À' so it fits ¡1 of×  G áno more than ' Tó ' columns, and   a list of ¨ 5pedH Y a.  Tabi ~ óare expanded withÕ . utabs(),F  k ¦all other ®ð characters (including newx U) areD Ñconverted to ì. 5""" ;!	P ;"ifEð fix_sentence_enƒ s1@_( (o U R2  NÌ) ©  ëOfill0  ¯ 
0/. to+*1 noŠ  -*3newí@ pcontain» ¶dentireK¾°1B"\n"q; :«A)


©C ni¦®% 

y\ ,]Ó=70, **kwargsiž"""Wrap a„!of’,= ö @×.©
ÓÀingle paragrð	aph in 'text' so it fits ð-lines of no
    more than 'width' columns, and return a list7 �wrapped H Q.  ByG Ádefault, tabh } ò
are expanded with string.  . !()k G ðall other whitespace characters (including new„  ) c ²converted t× : Á.  See TextW· ñ r class for available keyword args to customize“ ñ  q ¡behaviour. 1""" 8w =b (F= `, **kwW )+ M w.T (ž±)

def fill !, 9 7=70< := ð"""Fill a single paragrì0of M ,® ­ a l
A ÎReformat theD 0 to-,(G ,3new{ € contain“  w WentirX&edÇ R.  As$ )M à.!ed”!Œ % 	I  • pÉ 	8ù	xshorten	�CollapseptruncatÆqe given Ê0fitÈ z ^.2The)  first has $Tg `d.  IfF@then ã9 [ *V  *,! #is… ¬€s is.  OÑàwise, as many psA €as possi‰ ê@join<  nd¨n ð placeholder is � P"::É  Ç1>>>Í  ¥.Fp"Hello n Dld!"]"12� 8 '# qworld!'’   O 1O R[...]N '@max_Í7s=1ïŽ 4+@' '."!.Kðp().split()))


# -- Loosely relaÿ functionality - 6

_
ð_only_re = re.compile('^[ \t]+$'zð.MULTILINE)
_lea¥C > (? í*)(?:[^ \t\n])K  adedentõ )PRemov“y common v <¡from every² `,`Áis can be us@ð make triple-quoA j2ngsD "up¦ üAleft¨@edge   €display,‰ Ple st¸@presÿ ngÔmŠ  , @sourä"odPin inî  ed§m¨ !Noá ¾ a ›Úsÿð both treated asð whitespace, but they
    are not equal: ô
 lines "  hello" and "\\t !re: ðconsidered to havI ÷  common leadingx !.
6 ãEntirely blankl … brmalizO Pa new‰ ± character.@ 1""" ¢# Look for´ eongestx 0str 1of õ sÅ Dtabs¡ #toG 2all† ` Âmargin = Nonè †text = _Cð_only_re.sub('', # )P pindents0 8 ¶re.findall(3  Ã 7 B in 
 !s:N  ¡3if ” !is•     =9 e  ‘# CurrentÞ Ã more deeply+  iöhan previous winner_ @# no[nge (& ò is still on top)> y Celifc Â.startswith(© )_  , Opass³ a stÃ  B Ã!noÅ eö¼ Ait's3newÛ ¤ ’ ¤ }¤ '  bAFindd 1larþ+¨ between c� RQé#¦  *se0,€, (x, y)/Óenumerate(zipd,~)É  qšif x != yX     ì 	 E[:i]      Rbreak¹ñ# sanity check (testing/debugg…3nly1f 0Ç_ „  Ø î!inM».split("\n"Å aassert³1 !oràÆ] O), \¼ "7 T= %r,Y  P" % (  )ß ­  »3 =  £r'(?m)^' +O *, Rretur× T


de,1fix pdicate=zö ð"""Adds 'prefix'j¡the beginn]¡f selected	s'£ 'r!If? ] '¹‘provided, X wË ˜Pe addoÛ IQwhere3 L /)R nTrue. j  Zn E 1it l pdefaultÑ !ad+ä  •“non-emptyØ pthat doûJ @ solP'ofm ·6sõ7 ifqÀ   lÚ �2pre ß   üÌ (.c#p(': `fixed_ #s(Ã 7 ß'  ;+  / QyieldsQfix +  º › Q else ^� ð''.join(prefixed_linÿ6es())


if __name__ == "__main__":
    #print dedent("\tfoo\n\tbar")
"  ð  \thello there\n ò   how are you?"9 Z (Z H4 .5 PThis  nz üHed."))
s = """Gur Mra bs Clguba, ol Gvz Crgref

Ornhgvshy vf orggre guna htyl.
Rkcyvpvg "vz 0.
F r  ¢pbzcyrk.
P	   Ìvpngrq.
Syng! 1arf ]Fcnef_ ó"qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g f ñrabhtu gb oernx gur ehyrf.
Nygu �cenpgvpnV ðorngf chevgl.
Reebef fubhyq arire cnff fvyrag1’Hayrff rk "yl pè !Vaq @snpr’ñnzovthvgl, ershfr  grzcgngvba§ Äthrff.
Gurerx ñor bar-- naq cersrenoyl ba ð r --boivbhf jnlF Wqb vgã Agung €znl abg S 3 ¢ng svefg hÊ þlbh'er Qhgpu.
Abjª7ire] ‰vf bsgraTñ *evtug* abj.
Vsð ?3zraô pvf uneq¶  Dÿnva, vg'f n onq vqrn; 1rnfñ ;  ä „or n tbbA ‚Anzrfcnp" OÀ ubaxvat terŽ�qrn -- yr| aqb zbeµògubfr!"""

d = {}
for c in (65, 97)  i ƒrange(26  
àd[chr(i+c)] =  ò(i+13) % 26 + c)

õð"".join([d.get(c, c) [ r ñ%s]))
"""Thread module emulating a subset of Java's t+   amodel.Ê óimport os as _os
 "sy %sy _A " ófunctools

from time > ‘monotonicV   $ €_weakref™ + rWeakSet  AiterT I aisliceF  q, count 
 C
tryw † Ä_collectionsE BdequD 
 ‘
except Iû WErrorA @ à
# Note regardQðPEP 8 compliant ,Qs
#  ¢8 ( yñ was originally inspired by«ð, and inherited
#&p convenØ  Ó¡camelCase ‡1ion5 bmethod  –õhat
# language. Those +  v0not´ any immineÓ Á�r of
# beÂ ñdeprecated (even’pPy3k),sÏ$isŒpprovidex em°¡an
# alias5 Othe 8_pthat usv  , ?new0 Á facilitatesö@titu)q
# with?±multiprocesR m1ð, which doesn't provide the oldò-
# Java inspired names.

__all__ = ['get_ident', 'active_cou �Condition öcurrent_thread',
   'enumerate* Emain' Û 'TIMEOUT_MAX6 #Evy @Lock: R	 �SemaphorP yBounded T† pBarrierJ cBroken AErro 2Tim ?  	Ê ‘setprofil{ qsettrac Plocal\ «stack_sizeÐ ‘excepthooÍ E ðHookArgs']

# Re…ò some stuff so "from Xóing import *" is safe
_start_newX3 = 
 . 
Þ§ocate_lock*  alÃ  ç
_set_sentinel& 	 
 "  Q
try:>  !na>+id+  * ò_HAVE_THREAD_NATIVE_ID = True"  Á ¡__.append(£D 2')
f¡ AttributeÆ‡ ] gFalse
ö¤ eË !_C†!  w 
3 WNone
ñF  D
delÀ
1SupóCfor ~Q and | QCs

_ _ 1 = l _# 	 V
def Çb(func) …"""Set ae    á z 3all†!s V3ed ›e  Ÿ�module.
­@The E ÷ will be passed to sys.‡ )d CeachL Á, before itsL Àrun() methodûccalledi 1"""% yglobal  	 ! =– 
&
 - Li (
 Î U þ6 
 ˜ñ 

# Synchronizaä  cl¤0s

n ¢
4ôÀ(*args, **kw
 FvFactory8ðthat returns a new reentrant ˆÇA P must8Prelea:Tby thp X AacquÂ¡it. Once aï 3U has # aa ,N 5samS 4may/ ‘ it againO �without b° Aing;; e ¨ ¥  7 o‡  6Ò imÈ ‹ K � #itù À4if b!isÄ› M@O _Py[ % t£Às)

class _Rñ,Lock:
    """This class implements reentrant lock objects.
6 A ñ(must be released by the thread that acquired it. Once aM $ 6has# aa ,N 5samS 4may/ 1 itI ð again without b¸ Aing;; e ¨ ¥ P it o‡ Ôfor each timeM 	� #itù 2"""òdef __init__(self)P T  !._€ Ð = _allocate_‘ !()« ' Ëowner = None ˜count = 0s Nreprs F {  M 6tryœ  y  š active[ V].nam‚ ú except KeyErrorA Epass_ óreturn "<%s %s.%s, W A=%r È õ =%d at %s>" % (?  ‘ "red" if Â =. ²() else "un )",> 2 _Âß__.__module__' @qualô ) ¸ < È 
 bhex(idÚ)± at_fork_re-* N¼ î _+ P & ˜ *nq ,a=True,égout=-1·B"""A£! aõ7 � or non-© 3ing ¼ÅWhen invoked|AarguG:Óta� alys™ ÓTAincr� ð recursion levelU“one, and w÷immediately. OtherwiseQ Pf ano Œ7ownz a untilt  � D is m«q Õ# P (notÒ ø anü ç )·an grab  ’rship, se± @ Q è ;to è €. If morÿ an Ï iŠž †oaitingÕ a, onlyG  ™v will b{able to¾ 5 of(p. There/$no’�value in ÷8Ocase6	T Á  º @ * ƒ t¶!do& 5ing^ @as wˆ@callG s3 M ‹ ' false, do õ² �Ì Ò … 
$n † b wouldq,.O  Æ;Õ ¶Î n  (ú  ò K ðreturn true.

    ñ:When invoked with the floating-point timeout argument set to a positive
 N ñ  value, block for at mostW ônumber of seconds specified byg L °and as long  ™ W ñcannot be acquired.  Return true ifo - 5hasQ Ebeen4 e, fals- ä Õhas elapsed.
: 5""" õme = get_ident() iØ õlf._owner == me:  ! se ©count += 1 rÂ  Rrc = 3 P.ï ( Ding,3	„ /rcu ” 9 meu _ ’ ‘ � "rc´__enter__ =A Àdef release(L )| B"""R 0 a Œp, decreB1ing£÷ recursion levelr�If after' 8 ñ  it is zero, reˆ!he^  ‘ unh @ed (! ó dî ðby any thread), ^!if 1othi   Rs areÀ  aiÊ&th; g  q tbecome x ð, allow exactly oneî@them. Pproce®Ý �  Üå    ö ’still nonÿ  & ˆ fremainç  !edá \rhe cally é lAOnly à this method w e 
8 Q owns– h 5. AÅ 0RunFPError° braisedŽW !isk  ]a  I & iÁ O£ PThereU 3no œk# ¤‹!±£ ”¦  ¼ #("bÙC un-{dk"p ô$._@  -ç0if ™' 
† 2  ¯vr = Nonl ¥  ø.– &()‚�__exit__ƒ§, t, v, tb�A : 0# IÕ3naló0s u±0by ž it˜—variablesn r_restorù|, states _´ 2 -‘ 9,åþ I o · B_savl e éT t0Yß+V ¡  ïÂ E = 0 Ç í  4  ç /ò /ô(ƒ ,„(er!isvd 8 ] Ðowner == get_ñident()

_PyRLock = _	 ñ


class Condition:
    """C ôthat implements a c* ± variable.
4 A  ñ# allows one or more threads to wait until they areK ónotified by another7 l  If1   lÌ @argu� ñ is given and not None, it must be a þ 2or þ  ë qobject,5  itE qused asb ¡underlyingm 0. O� ²wise, a newJ  F ½ €is creatE ?nd N 	92"""	 ñdef __init__(self,u =È )™ ² !if  «      =– !()‘    N #._    �# Exportï   Á's acquire()`releas umethods< V - ! =– . 
$ C $  $ 7# IÑ“defines _' @_sav~ ƒand/or _b `_resto¦ ,I Ðthese overridm‡e defaulÇaé s (which jGcallF z q U() on'°).  Ditto f• µis_owned().H :try�0	× 	 A úexcept AttributeErrorS 6pas�q À 1t  w =p  i &@ 60ersÅPdequeÚ ä? at_fork_reHF;A  æ+._* ,f i.clearc r_enter_£] xreturn d + )â'exâ_*argsF 1 + J ?rep‰ %"<ÖÑ(%s, %d)>" % S, len ñ )« ‚ Ù ©   F .'  ()‡  # No stateê Ã¹ z‚ ?, x^ - ^ 0IgnN Y dh ` jY V 2# R¥WTrue I¼ o‚current_¦Ìr# This  { 2ped onlyI \ådoesn't have _† (if!Û WFalse¨  D`: ! p<  ðelse:
            reñturn True

    def wait(self, timeout=None):"  & ó
"""Wait until notified or a9 ‚ occurs.]  ; ð
If the calling thread hasG ‘ acquired$ õ	lock when this method is‡  E ped, a RŠ ÷meError is raisedw TB �releasese punderlyŒ  p A, an~ 0n b sÒ (ity Ðawakened by a¹ Pify() qy_all()å A fori åsame conditionÄ ðvariable in anothe/  ,P  Ø l@  op8 ,al[U OnceO š  v  im•£ut, it re-^ù  Þ í  re¤Wtek pargumenP pres  (@not a µshould be a� Pfloat\ñpoint number specift*(Poperaë   se2ò€(or frac  Ç Wreof)è» Ø �an RLock® iq@d us§ &itl  #()zs, since� ayøÁ actually unQ Ü	 ¸%it
6wasÞrmultipla@s re%Ðively. InsteaÖ¢n internal	 'faéoHÑ ` classã  us‡which re™ sBevenQ its� Hbeen† ª SseveruCs. A¢™ t@ ‹   to restor7ec ‚on levelŒ 3 ¸e¤¼5"""ª !ifw ž·._is_owned(› dþ	P("can® Üd on un d °%")c  # Per = Æ`ocate_" (" .«  — A ’s.append( > âsaved_state = 3 l_ P Ægotit = Falsä@try:ç #\M ðno matter what (e.g., KeyboardILFruptŠ  E %ifæ!isÍç     Â ð      ¨ H   NelseP t >> 0   > S |  b —
Ê  6 p   P Z
H r 1 0finN
¬ ¼_é(Äà
Y ¼Y 
I  ¡  Öo    f �s.removeU- ²except Valui à    pass

    ódef wait_for(self, predicate, timeout=None):
  õ"""Wait until a condition evaluates to True.
6 X   should be< ð
allable which result will  õinterpreted as aM €boolean p Te.  A¬ @ may: ñprovided giving the maximum+ 5 toM  © 5""" 0end0 =   2    5out Â =H%() “while noté T [iŒ R 1 is'  v 
% ) ™ !isš $  ( % 0= _U A() +î  ”  )   OelseG î R -R G  K É O<= 0W  * YbreakD  ….r (  ª ? 2 `
creturn]{ âcnotifyà<n=1Ìñ
ke up one or more threads. ?von thisë‡, if any8!Iff@call3 C 2 haÊ�acquired$ ƒlock wheV •method is
 E ped, a RfpmeErrorgraisedw T˜ B PwakesÌ ²at most n o– Ž Ñ 1forŠ ¼{ @vari’@; itq pa no-opð %no4areŒ ;!ifÂÐ§_is_owned({Î Î 	ä P("can"µu on un-> :"@all_(bers = l  Ñ  C_to_T ÷= _deque(_islice(G F, n)` Å C 
Òwq  \2 1 in&6ers 
< ) ‡.release, :try.   ­ q.remove+&er·  ' ²except Valu>J Lpass&A_all*ªñ%5all »  ê-U }?all‰úA(lenÝ .6"))  PAll =·0ify	ó


class Semaphor"1"""w Äimplements s( ƒ objects@ qs managû ouß  representL ¨`numberº bs minu%
( "()( ô, plus an initial(ðThe acquire() metð<hod
    blocks if necessary until it can return without making the counter
G ñnegative. If not given, value defaults to 1.
y 2"""	 ñ# After Tim Peters' semaphore class, butW `quite ~ òsame (no maximum)N ódef __init__(self„ A=1):x  ® #if™ 6< 0   praise V¶ vError("‹  U 3ial; åmust be >= 0")[  s ü
._cond = Condition(Lock()' =R À sacquire¿ ¢÷ing=True, timeout=NoneÓ B"""A7 & a?´, decrement¶“internal ¿s by one– ÅWhen invokedø@arguG  s:, �I åis larger than×zero on entry‘  a| D andh±immediatelyL`it is D Q L Q, waiß ¸�some othˆ àread has callef ¥lease() toQ @makeŽ ¾ r `. This€ Adone� proper ý  ; W soò tP Äif multiple Ì)‚ Rs aretded, reŽ `will wˆ aexactl”Q  ofó@m up“ ae implÕa]� may pickÈÁ at random, ˜ Qe ord² O Twhich† 0 th%š aƒ ¡ned shoulds be¨ aied on  ren@r#Î@in t6?casU
€ ? ettßdL!e Þ th @as w’ÂÅ ‘™,G M Ó	~ ’false, doô  Û€a¸ü&ouã4an y ! w+ŒO  Í;“#wif 5theË í w l så a.}  ¦ n 9,ït· f for aÞ Emost;  seÎ0s. ÛÏQ does* coŒ`te suc@vfully iÿBthat/0valóO B.  R; ¯¤  !¹ & ”   ¤&otº 6‘tÜ ÑÕcan't specifyæ  Anon-wc…Û`rc = F(º0end‚ ! =z   - 

’ Swhile 3,==‡ï  
E  !   Ubreakx     %ifØ i§ õÐ:
             ôif endtime is None:
  ) 0= _1 P() + 	 ?out4 ?elsN : % =� -X N  Ž $ifq _ <= 0«  - ]breakK óself._cond.wait(‡ )) º ; ©value -= 13  r •rc = True ¡return rc
 ò__enter__ = acquire Àdef release(g f, n=1)à B"""R ð a semaphore, incrementing the i` pnal cou ò by one or more.o  ­ AWhen3 * ðis zero on entry and another thread$ 6 n Vfor iùáto become larg2 "anQ óagain, wake up thatP � 1"""# › †if n < 1   praise VøError('n must beã 'ËPwith Oñ
O  ÎE+= n~  l Ý · in range(n‹    @ I‚notify()] Ìƒ__exit__Í‡t, v, tbG ? óô)


class BoundedSã(
 < q"""ImplõRs a b1 TA À checks to mŒòsure its current àdoesn't exceed! rinitial% €. If it , ,” !¨ñd. In most situationsH ¾ s are used’ ñguard resources ¼ólimited capacityÜ !If¹J v  L  ß !ny*Ps it''psign of1!ug¾ "no½bgiven,× � default$1n ÆLike regularg.s,a¥s manage abrepres¡ÿ  ¥`number� Á calls minusÝ $ )"()$ ‚, plus a±–4TheYÐ() method blo÷ Vàecessary untilÂQcan r¦Ÿ  w0out! å ®  „negative> : ÔV  ¬ l	äê>.__+ Ö:" Aial_H " =À�Y - ,MÞ!Dðreleases exceedsó the number of acquires,
  õraise a ValueError.
 5""" •if n < 1:  B ? = õ
('n must be one or more')6 ú with self._condO #if v� c + n > �initial_ 
6 ‰ ö"Semaphore released too many times"•  B ” _ U += n²   þfor i in range(n)‚ @  Ô ò.notify()


class Event3 A"""C àimplementing e! ƒ objects‚5 s±  ag£Ðflag that canaÁset to true W íñset() method and resetÍ wto fals- Uclear/ —. The waiB Áblocks untilM† "isQ Qrue. 6   §"lyk Ë  I2 ó# After Tim Peters'ü )(È òout is_posted())‘`def __` 0__(m„  Pð = Condition(Lock@  Â  ' « 0= F[  at_fork_red b ”# Private[ñcalled by Thread._i¡_internal_9(d}  _l â 0is_Â - à ’"""Returní!ifÚqonly if—w  Þ !is) .x ù   rA  Z  ._& ü pisSet =q (¦ k†  ,  f
o …í m  Al. sQ äD²abecome£ Ð are awakened�4 †  H ï!llF q() onceñ  Â  è ¡ will not ¯w at all�  bT �– l   u = TrueŠ   6 ã@_allç   5P E ½¬=he 9’« ñ Subsequently, t\ s n D�ð ì š ®) ) ê¹ z 8Wagain *#L¦  ,jŠout=NoneB!Y
Úš Ié³ on entry, çöimmediately. Otherwiseø=0ano! ml"s R to	 qê,Ùzg  opw$alö d occurÐ %AWhenN  ‚ è@argu ¼pB!ntÜ Í 4°, it shouldóap Afloa;Tpointäðspecifying a timóeout for the operation in seconds
  €(or frac  s/ ureof).
! ñThis method return' ó internal flag on exit, so it will always5 P ñrue except if a tim¯ Àis given and‰ ¸  # Ws out˜ 5"""T °with self._Þ :  å £signaled =#  ± 	" tif not ) 
? C  f `.wait(› Iout)Q (Q ð


# A barrier class.  Inspired—qpart byø ƒpthread_0 `_* api!
#  xCyclicBN ó from Java.  See
# http://sourceware.org/\ äs-win32/manual r “init.htmlv L j` ðsun.com/j2se/1.5.0/docs/api/! ð/util/concurrent/
#C  	¹ ` !
#¦ainform¤ñ.
# We maintain two ð states, 'filling'œ q 'drain @enab $< 2ao be c4A.  T\Qs areõQallow„tºPuntilÃ¡has fully c ¡ed
# since` �previousY eÍP addiG±, a 'resett™ º  Ásts which isN ‰milar toÇ Rthat 	�s leave æƒa Brokenÿ�Error,
#Aa 'b '. Yp 5allM  geY „Qion.
’ S ÿô """Implements a �aUseful¼õsynchronizing a fixed number ofw –at known 1 ñ9PpointŸPblockV'f)î µðsimultaneously aw# o™yO h/ ô 0mad°sat call½  :' `def __í0__(? , ˆigd=None,£ )  Ð´"""Create aÝ , O qialisedÚR '	…  @ 'e 0' ib ¢ Bable#ò, when supplied,S Ê alÍ‘by one ofÊ  N  ë1Aafteý%y e± • $he® 6€just pri.oN `releasÓPthem >  I¯'ò¶ `providŸ  itÆ uö a!J bdefaul� ”µsubsequent Ý ü s £ Ô    ™Øb = Conev(Lock()x' R2 = 	 …  » $ =Ò  ¬$ =  Ês= 0 #0 ˆB, 1,#…ing, -1 ûR, -2 ’I ’count = 0h ‰è § o	2WaiI íä7À   When the ò2specified number of threads have started waiting, they are all
   ð'simultaneously awoken. If an 'action' was provided forL â barrier, one
N  † eŠ Bwill� Pexecu� ðthat callback priO Åo returning.L R sŠ ôindividual indexõ õfrom 0 to 'parties-1'.
C 5""" õif timeout is None:  ¿  ƒ= self._ $ Cwith Jcond= 3 ðenter() # Block while-v drainsä  y Ò w Ucountu    \  Y += 1 :tryŠ  2 #if'T+ 1 =Z "/  3 ¹# We releas² 	m  )   ’ . -()$ ;els] 6   g  “Õ until someonz Ms usN  8 r  9 (˜v r0ú 	E ofinall( V Z-Z w Ö# Wake up anyÖS
 ƒÜ
Û D e bexit()š&th0is Ãy[ Àus, or raisePexcep‘Ý  # æÌ!br¶ Rdef _ˆ y )î�  ÷._state in (-1, 1&  ² 1# IX Ñ 1ing† BesetI †¿dü ; _   .' @#see³ ï Rin a Á  ³tK#ifn­ 6< 0Ì  k Bü BŒQError ! iassertE D== 0„OL A runÓñ9andZ Ô 1ingc #@Î ú€ \¬ã i
à  Ã  A "._ L  !# æR ¥'š     >   Þ ©§notify_allc m
’ B#an  pion durw  ¢ ò handler.  Break G©™  b$ s  ³ , -  |+itex!weÊh_d.  R& £ b" ûrË Ôw¸ ß(,+¾Tif noO9 / Ù_for(lambda :lO!= 0H  ç #ÅUd out,¥ ÿ  '    � !._,À()
         ó   raise BrokenBarrierError
  õif self._state < 0:  # A iassertE Q== 1
F ð# If we are the last thread to exi 2e b› Ã, signal any' sH ±waiting forJ 2  F adrain.( Pdef _V (Õ )Ë ç Œcount ==è ! —in (-1, 1D    a#resetŽ 1or ~ 1ing€     ‚ W?= 0  òcond.notify_all()9 É g É @"""R  ^�initial Ã .I  Ž AN´ currently Rrwill ge‰	*¥ exception½ d\ 5""" Cwith	 × ~ … a‚>�	$ Â ¦  %   ƒP, wak!)up: .  
–%-1½ % %elª † *-2Ì , a#was b]`, set Ï!o ¹†_  ; ñ#which clears whenÊ  Äû 1  Á 
Nelse« 
3 
Š  ¯†_abort† BPlacÕb½’ into a ''+ðUseful in case of e‹0.  ¡™(]s andÓaattemp„@to 'ÌA()' Ì?havó¼"%Xbreak¡_   '@# An erÊã  (Õdetected.  Thó1 is:%to+3# aUCò all parties awakenedð   h%-2H  Û‘@property/  ob ë RRetur¤`number¼žqrequireÐ0tri~Ý .rF – m ¤Œ  n_Ò?ingŽ FaÙ¥	’ ð# We don't need synchronizaõ‘ here sinè is«Àan ephemeralè1ultA ‰#·’way.  It ï sÚÐcorrect value ®bsteadyãÎ}‘GL� ðreturn 0

    @pñroperty
    def broken(self):   ó"""Return True if the barrier is in a< ¥ state."""? r<  U !._ ñ == -2

# exception raised by] B] aclass
 ! B�  ÑError(Runtime ± p1  [ ò Helper to generate new thread names
_counter =  µ().__next__ ô() # Consume 0 so first non-mainS  has id 1.
K@_newe Á(template="T{ C-%d"¬ " # %† @er()Ã dActive`  administra11
_a °_limbo_lockÆ �allocate $()& P = {}Ìd# mapsS  id ˜ ‚ object
Q 1 ò
_dangling = WeakSet()
# Set of 9 1._tÖs  ‰ s  Tdaemo!3s uâ‘_shutdownM €to wait Ì¥l all Pyth7 Rõs get deleted:
# see€ 8set„ E().
c – s  ‹ " Qs = sä @
# MÜ{3for3#s
Žü %R"""A * óthat represents a8  ‘control.
CThis5 ñcan be safely subL "edYðlimited fashion. There are tw<!ysQ ’to specifC@ity:T  Ç£a callableï   Îñ constructor, orQ  by overrid;  & ³run() metho� ­ Õ  ø< ò_initialized = Falseø  !__jó, group=None, target  A U  Á ±args=(), kw ? 2*, u7 h 4 2"""ré à should always‚ ðed with keyword argumÌ4. A  }:Ï  \ *Á *P 0be �  ;  rv»ðor future extensò0whe8IGå  Z@mple~ #edbp %*"  — · Ô†be invokS¼b Ä . Defaults µ `, meanð@noth  ¦:all�  ™ S@. ByJ T ¡, a uniquen ­ fUed of�  Ä Tform #AN" wåN6 @a smèdecimal number � ±r tuple ¼"e 4cB
ý  5‘ *TS Pa dicr0aryÆb E  €j '{}» EIf aòoe¡%e . ”àit must make sJ!toÍ %ker  HDbaseWë(gð .__init__()) beófore doing anything
  õelse to the thread.
 5""" òassert group is None, " ñargument must be † for nowD ”if kwargsA :_  �  E= {} ò self._target = 	  ±name = str( por _new ;())-   =    	  �if daemon¶ 1notÝ 
º ¦ & Cic =1 C  f2 ‚current_…2().N C c  idf=ƒ  ÿ
if _HAVE_THREAD_NATIVE_IDs «native_id F a ¿tstate_lock! `starte> lEvent(`�is_stopp# UFalse¨ b ‘initializ" 6Tru! ô# Copy of sys.stderr used by > ý voke_excepthook� 7 6= _E ƒ E » = _make_in _ Â# For debuggLÈd _after_for‰ à_dangling.add(¹ )Uñdef _reset_internalks% ¶, is_alive)ºò# private!  Call	x  ÀU T our Y  ÄEs asý #æPy may£áin an invalid ÷P leadÛ �to a deadD ¥ or crash.J  Ó #._A._at0_reÝ3%ifÓ Ò  ëð # bpo-42350: If™  /ák happens when  { alŸ#y _� P Q(ex: ŽÈ ñ_shutdown() has been cFG), _íN áq. Do no3  i‘ vis case ~ #ifžQ  ² - 2 A/ E 0   4 wacquireqi5# TÛq isn't c, º�: it doe rhave a › kanymorý — 	÷	Õ» \a q_repr__	ÿwe ;B, "T¯ __u€__() was®âx Ý`us = "+ 6ial »Í É 7et(ƒ Á 2tatB ( B › ¹Ð() # easy way˜ · ._U 2setÝ¦appropriatŽ 1 
8Ê ˆ < 9Ànic:
         ðstatus += " daemon"
   õif self._ident is not None:$  ( D X%s" %7 * ðreturn "<%s(%s, %s)>, (d ó_class__.__name__,F   ", d !)
O 0def !rt< )Ž ò"""Start the thread's activity.>  ³ óIt must be called at most once per? ð object. It arranges fo eŒ  N $ ð's run() method to_ ôinvoked in a separatœ · of controlœ DThisD ôwill raise a RuntimeError ifº 0morQ "an¼  onþ œ 0sam  Ì )""î ßŽ¶initialized^ ë Œ Š "("i0.__6 A__()(X"³ < Ps¤§ed.is_set(Á ' c 1s cæ  lyZF ö g awith _õÊe_limbo_lockÈ  [î 1] =k3;try- k R_new_ì xõ._bootstrap, ())@ �except E :ionM Ÿ  Hdel § `   %  Ç !._¦ ƒed.wait(x + – " hB"""M¦Àrepresenting9ø7ð You may overridY¬â!ubÉP. The¥Yndard¶ sv  .Cable¤a passeD ËaÑconstructor a: N Ptarge¥pgument,"Qany, q@sequå òal and keyword ar. us takenM Afrom˜ Bargs2 w 1 p, respe[(el[TJ® 
 Ø ¨"._ "(*  y 3, * k‰ nkfinall²ð# Avoid a refcycle KÁ Í@runnõ¡a function+ � E# an%ñ that has a memb%�at pointsða .G  ËÌ Ú ÜÚ  Ø œ ¶^n½`# Wrap¤aaround©Ureal ‘1 což¥at ignores� "#  €ions durðinterpreter cleanup.  Those typižyB h Pn wheÖ89� wakes upRÖan unfortunat0B# mo¤AfindÇP worl�Ñ Ñit destroyed,ðXs somG frandomÑ à *** while tryÚ sto repoÐexception in
  ó*# _bootstrap_inner() below ***.  Those random exceptions
@ ø- # don't help anybody, and they confuse users, so we suppresE †them.  W  @ ðm only when it appears that g world‹ ñindeed has already been destroyed‚ ? Ë 7 inC  ÷during normal business hours are properlyG ðreported.  Also,÷ Ì ü  À ðm for daemonic th³ 's;G •if a non-% �encounteiS@meth¡ åelse is wrong.F Etry:  ·^self.è $ 
4 2if 7 ‰  ã@_sysr JNone0  h Vretur\ Qaise
j ð def _set_ident(^ )D   . E = g' )= ö
if _HAVE_THREAD_NATIVE_IDB ` œnative_idd  ‘ h # l  (p M ¼tstate_lockO 1"""Ù  W `Set a & ð object which will be released by	  iÒapreterîI pthe und^ ã# … � (see py 0.h)&–s deletedÿ— î Ä " =„¥sentinel()z , „.acquire è bif not�   áwith _shutdown7s 
'  + & 2.ad±'._° �¸ ± B÷rë    > .�o  $ v '   O L   " !ta';setm ;!ac½_limbo9$ [Q N1] =”Íu Qdel _M / ]N  à ¯trace_hook£ays.set$ !(_ + 
K G oprofilI & #(_	 M 	· È ® ì ;run4º/ ‚_invoke_%  â Ân kfinall-‡¨  } #Ö%Acall™"._¨m ca" à5lsoŽ  ;  ’# grabs _ëÂè,   ç, [<À)]
           ‚except:
 
 Qpass
 ö def _stop(self)/ ò# After calling .& ö), .is_alive() returns False and .join e  } ý&# immediately.  ._tstate_lock must be released before~ .P 
 ñ Normal case:  C code at the end of ×thread's life? (v â_sentinel in _. €module.cë › sº ,õ L Ðthat's detectÈ øy our ._wait_for÷ 1(),â ( :M PnÒ.  Any numberÕ  Ñ qs _may_J §F ðsimultaneously (for example, if  Riple ò ps are b—Wed inJ ¢ j !s)û  Yòy're not serialized.  T
§harmless -I �they'll j÷0makùðdundant rebindingsã A._isz;pedk	B�.  ObscurwP  F 
¬� last so ¥ ¹ ’ `"asserÃ (lft "¾× always worksM (yQ €is execu@onlyr	º Ÿ is None)ÜVSpeciÝS_mainœ.“ˆ via thi’ Ç°'s _shutdow£†functiony  õ0 = 	¤ Ü 1if $ !isñ ¸ 3 çö   ) . Eed()B \ ÕV= Tru�  =A !if{ ( jdaemon‚ Fwithç _s 
'  ­    s.discard(µ ) ldelete"à"Remove currenn ŽP from]P dictÃ  ply runnLi%."Õ µ Áactive_limbo“ 
³ Rdel _$ Õ[get_ident()]F  Ô r# ThereR ‡b˜‚y pythonqbetween¦ pprevioun†J  €a Ñ  ­. äpOtherwiûP tracÝ V– ðcould try to acquirrePPagaink i 0sam  N7, (‚– P#()‰wa ¸.¼Ž , , timeout=µéÑ"""Wait untilŸ³ terminatesP   BThiss, 4 E awhose † —) method š ? 'edk ` -- eiW! nÖPly or›òough an unhandled âðion
        or unótil the optional timeout occurs.

  AWhen+ " ðargument is pres õand not None, it should be aJ ðfloating point number specify a† 1fort Popera¢ µ in secondsP €(or frac  s/ óreof). As join() always returnsž Õyou must callM €is_alive6 DfterC öto decide whether ¦ àhappened -- if‚ O `thread#astill \ ,# Y  ~ ð _d outq eu#orÒ É*'wi× „block unð˜ ˜terminateê#A  0canºEqed many« .  ° raises a Re pmeError‘an attemp)qmade toý |current1aÉAat w?Àcause a deadÉ 1. IN ‘also an em W  ºO `before‘ðhas been started ³¡ sš Tdo soÏ  REsameP Aexce+©5"""  !if õself._initialized:"  O-	*1("T*!._6 A__()I  Eed")? 	a Ä Ÿ.is_set()f 0can; µæ$is
q  Î  Ã¬_o > w &")[ 4wiž
É  € ð._wait_for_tstate_	(Jelse7 #añbehavior of a negativeÇ è‘isn't docÌfed, buŽ ­�# historiŒ0y .<(@=x) ¤@x<0 Z!acSsù# 0¼ N Ì 1 4max` C, 0))Odef  S !, âd=True,Ý 7=-1ð# Issue #18808: P½  åÓ ÿt …be gone.¼ A# AtP0endK5 ¡'s life, a0Úall knowledge* M iŽðmoved from C data structures, C code relea[Hour üœ ð This method pas/ Dits £Ù	< ˜acquire()F I¼ Y ï$ d¯� Ais dÝ 8 z¦._stop() i’#Tðed.  That sets ._§`toppedi« G .›    ?™ � "= m ýO%if´  : p:  # alyBy deä t  ‹ ð the C code is dWone
  õassert self._is_stopped$ ðelif lock.acquire(b µ, timeout):+  V   ©.release() c  ` 1()
 ‘@property �def name() W ò#"""A string used for identification purposes only.^  � ñ,It has no semantics. Multiple threads may be given the sameŒ F. Th0qinitial ¡ is set by2 ·constructor 1"""Û  ‹ 
iJ �ized, "Tˆ 0.__a ö __() not calledA creturnª )ç @ q.setterm 	H,­ N‡ . ž ._u   =—( Ñ¨Ò ó Ç£er of this•Ô or None if iÅçt been startedhT9 ð	is a nonzero integer. Seèbe get_� `) func7 Þ 7 ¤! Uifierô recycled when aŸ ôexits and another %isN pcreatedf eê  ©  vailable et1aftB  «  ‘ µ c 	æ NGø Oö
if _HAVE_THREAD_NATIVE_IDè
· 8s|tive_idî ! P"""Na  ™4ral0+IDú,û ^ 	ÿG-negk n  § ³N �represent‘#e ¯ ID as repo�ügkernel� F ­  x. E  Q2_id¹ „is_alivCR>3whe®l � 5 Á Qrmethod t  s True jus…0for? ƒe run() * ˜qs until* Wà	1 ¢terminates$emoduleŸ˜ enumeratJ� `a list<Aall ö SsÉ †‚.#if}' ¬ ¬0ed.  7et(v½FFalsS9 ðwait_for_tstate_F() Cù 5  f ­i
— ðdaemon(self):
      ó0  """A boolean value indicating whether this thread is a daemon C.

  T)  must be se Àfore start()= �called, oZ õwise RuntimeError isM ôraised. Its initial£   òherited from the cre· ª ; M Cmain°  † <notÇ @ and3 !re³ 3all0 sZ Ued inP  q T ¤default toy= Falseðe entire Python program exitsodn onlyC É §s are leftL 5"""Œ Óassert self._* ize!"Tµ!._ P__() ú „A creturnA Ü"icÖ@ q.setters 3def¡ (s , Aic):   !ifi    	“ "  & â	 (² )a ] [§ed.is_set(„ b 0can ŸÝ  ŸÓtus of activeù"o l / Eic =ô & 1isD‡ ]A 4 7set5 Jz 8 w getNamev 	Inamet 1  ,  ­ n   ! = b


try¶i_”ö	 import (_excepthook as  ,« ˆ	 !_E4 €HookArgs8 
 ")
H ! If „ u# SimplA Ómentation if ¡ .™ y ô‘available� Ñ ”tracebackÓ Sprint>  T Kas _ > `collec| s@  >Sdtupltî Y" (J  ''?�'exc_type]_¤ ¹ “&')ä
M W(argså’™ !(*' E „ ÚA 7, /D €óHandle uncaught uPrun()µ  ep!.ì < 0if w .Ò  å Ò== SystemExitõ    à# silently ignX* ]  ) á Ê    4sysùANoneî _sys.stdery²  
v   '= . n $elÁ …c G ï . "._] O ­   L �  # @# do® h¥:if Ç  4 ß  @was  à
             û   # when the thread was created
  ereturn Uelse:  , ó# do nothing if sys.stderr is None and args.p  	G h  ,if3 1notO 
 hname =, . H ±   å = get_ident()- ðprint(f"Exception i)%{8 E}:",.  þ r  file=ñ Æ, flush=TrueU _V $_eT (’exc_type,»   Hvalu œtracebacks y  ~ r Ž .� ó()


def _make_invoke� bhook()P1# C� a local ï àspace to ensur0ñ
at variables remain alive[f  Àcalled, even+&it Ã late duringL ñPython shutdown. I0 ômostly needed for daemo©1s.
@ 7oldç 2 = � ô   :sys$ _¾) ;if L À9 ‡òraise RuntimeError("ìFing.P  ï  "¬Z † ^ 
¨ X Ü R „_info = Ö  ! ã™1 = ¡ 3sys6 K ?9á ? lglobalh  6try-   †“    1if ! 
     =—¬      e2 = Ê¸HookArgs([*3(),*])>  a ¨© Q ÆQ   asë 
Ø ðexc.__suppress_context__ = d M   !de,
y "if ³ ÖõD¶ ûâ! 
ˆ  ` $ =Q ˜	†  	< å"._M 
¬ � =(3
ü: i  Æ
D	« © Â ýÐ  _C 	� ,H  .g0ept‰ 
8
 (“rkfinall:ò
# Break reference cycle (´  ™`stored»a­Àable)
        Ðargs = None

 ñJreturn invoke_excepthook


# The timer class was contributed by Itamar Shtull-Trauring

c1 T= ‘(Thread):q ò("""Call a function after a specified number of seconds:®  ²   Bt = \ �30.0, f, Ú =Ø E, kw )t  3   Œt.start( €cancel()$ ” # stop tü B's a¨ ñif it's still waitë  6 2"""¢ õdef __init__(self, interval,ò ® # Q 4.K ·  Y .X % =c î ! a=z 
!  '! =;3 if Qs not"Š else []5 ^# =g 9  i; *{}; ð finished = Even‰!  5„ ¹ * I"""SŽ o ¥it hasn't Q @yet.„ 4    G . 9.sek 1run›h 
0  Û" d{!if 
1 1is_d À… æ!(*3  s2, * 8\ " ¶ @
# SAal tI�Áto represent®Cmain# 
€R_MainK†s
]¼ 1 
|†, name="Q û ", daemon=FalseÆ  Ç_tstate_locktæ _Š#edœ /   Ret_id!    ö
if _HAVE_THREAD_NATIVE_ID¸  ' A —native_id{ `with _Ï�ve_limbo� 
C   [K ˆ @] =  SDummyiŒ ïæ b here.R`se are¾àgarbage collecQ0wheÃãey die, nor ca !bes`ed forL  If÷y¼¥ anything Ping.pª òat calls current_I1(),B ð
# leave an entrS   *P dictv  ev¨ ® € ñTheir purpose is ’OQ*someŽ m* fromy @ y£ marked asQ\ s so we wo- ” „  ™ Am
# +õwe exit (conform previous semantics).¹Ý3@_new!("[ U-%d")RTrue)™ €öVÀ       with ÷_active_limbo_lock:
    ð[self._ident] =  
)  def _stop( )> Fpass# Œis_alive& ¡assert notT A._isN sped and €started. Aet()z  ¦ ¶return Truel Ajoinh ç, timeout=Noneœ v °False, "can�  8 ð a dummy thread"


# Global API functions

ú ‚current_. (c B"""R™ Cthe $ ! TR ñ object, corresponding to , saller's Â of control.à /If( A wasOpcreatedJ Aough7 § 1ingA{module,ó ¡   with limiE ÷ ’ality is y#ed— 1"""S 6try$  C2getA1()]- þ except KeyError9 DŠ7C()

I $ =Y}‘Ï_count�`numberZI ‘sO 1ly ªÚ 5Theí  W  ÿ Tequalµ`lengthR  ÃFlist2 "byë £numerate()X 2g#†rJClen(' A) +  µ2)

õ Cô 2 =  _¬ &_e f§# Same as  Q, butø1out0 ñ. Internal use only.Ô ™ 4istš ‘.values()£  ¤  ‘ u � 2!a Ajof all4£	5 ðincludes daemonicýYeads,Õâ$s #¥`P1(),‚ ÔCmainL s. It exi dterminh k  4 l Êqat have–”yet been Ó×\ê]  u
Õ ñing_atexits = []
_SHUTTING_DOWN = ¦“_register3 (ö, *arg, **kwargsó“CPython i/$: @   *: *0@be cä�d before usv~ $ed@ $is= 6 Å Ðarguments jus[U 1all„Bnon-¾3s at ñed in `_shutdown()`ÛPproviD‘a similarJ ppurposeÃ `A.Þ 2()`: �  é  i ë �prior toJ  ó { € insteadB=tpreter   4For“  …2to ‰ ,«Ž &ed¤„ ðin reverse.
    """
   ó if _SHUTTING_DOWN:
  ðraise RuntimeError("can't register atexit af ±shutdown")
D ð
call = functools.partial( ñ, *arg, **kwargs)3 ²_threading_[ �s.append(M “)


from ' ò import stack_size

# Create the main S ð object,
# and make º Ávailable for4 óinterpreter
# (Py_Main) asJ Ting._ì @.

_f ’ != / TÇ …()

def . "()^1"""ï PWait `l{ UPytho±  stÇ 0of G…non-daem ás get deleted.N V ð# Obscure:  otheØ  Vø
s may be waiting to join Â ‘.  That'sS ò# dubious, but some code does it.  We  V FC# £to releaseK ’A's tä ð _lock - that woahö– Ÿô	# is nearly dead.  So wes  Ü‘here.  No€at just I ý b_stop(w N  w oenough7 alC	?Gon _Â … PA._isj 2pedü¾ T was _  ž !ed1 ) breturnOkglobal®* 
Ád = Truu ½¹, tm=ôÇ & ;# T? is!ôfinished yet, so it †1te _ 4hav† Dbeen›®rassert �  Íbot Non2  .S #ed«0 .Y 	Àn z @0# C>°#ed aŸ ions befor9 êQs are_p# Orderyðreversed, similarKP  M _Ò  iþ 4 (+ä ± 5 Ä J¥ È 'ea®QwhileõcFwithycs #  p  \•s = list(•) “ &    d.clear¤  ! aif notse RbreakÅ )   x    . ’# mimick E.£é >    6 �.acquire   3 S# newþs² 	‚spawned Afwe wer ¨  ´DI Qsô@comp‚
éùëRÅâ ! … ‘.ðIn normal condit‘,3 im¢ Pwhich) ¡ B.^Fstar'À""
    returòn _main_thread

# get  ó-local implementation, either from the- Ç
# module, o ò
python fallback

try:
   @ x  d Rort _r 1as 	 þ
except ImportError< 3ing7 i' ; ò

def _after_fork()< 1"""€ sCleanup¿ 3ingÀ P statÖ ñat should not exist O 0 a Q .G O ð# Reset _active_limbo™ Ñk, in case we9 ped whild e® ¡k was heldR �# by anofP(non-n 3ed)« ò .  http://bugs.bñ.org/issue874900J oglobal“ 	ö �, �shutdown» s :, _ ] é ` = _alº!te9 1()
+ #÷ á() only copied;dcurrenpñ; clear references to sm3neww R = {}^ R Ç R  ‹ ‰Ñ[get_ident()]Ž U7KeyR < §  �`called»ax µ!ch¬ bspawne³> #by* Qing.TQ�. For exaD%, K = p.start_ë ‡"()ý  e ß BMaine gÔ3 = , %2# rŸÊ!(){#s:´ Ðs re-register�Qir _tÌa belowA  qü ± , d = set± Owithž ¨ > p# Dangl�a instaámust still havM"irÔ ì ,­ G ð
because someone may join(U&emag s¨ Õ_enumerate())O $ @.upd #_d¤ "  foC R A0 × ” 1Any¯ `/condi\‚ variabl  $beÃl)  ed[Uin anŒ K rinvalid»@, sok±reinitializæ  6 #ifú4 isi 
£  & p# There$ ½ =â> B. Wep 5 j9 to¡ I òits new value since it canÁvchangedŒ 7   @!._Â‘_internalwfs(Truey /   ‡ =Íý’ W ,  &  ˆñ [! 3] =ú 	+ Oelse>1AllÆp are aly stoppð OFalsñ  Í  U _ 	ˆ.Y((À   _active.cƒlear()
  ó_active.update(new # ´assert len( ñ == 1


if hasattr(_os, "register_at_fork"):k L_os. 0(af* ¢in_child=_  7 ÿv)
#! /usr/bin/env python3

"""Tool for measuring execution time of small code snippets.

This module avoids a number of common traps b 
b òs.  See also Tim Peters' introducŒ ðo the Algorithms chapter in
 PÖ ñ& Cookbook, published by O'Reilly.

Library usage: seeZ  Timer clasÝ ÃCommand line* }<òit.py [-n N] [-r 0s S p h ð-] [statement]

OpÐ sÌb-n/--n2±N: how many^ Cs to‹5e 'A ¢' (defaultº Pbelow`Ï-r/--repeat L   + vrI ! 5@ Õs/--setup S: p  † $be‰ öd once initiallyD �'pass').% ENRthis j g ais NOTú dE ñ-p/--process: use . _Â &() #is  Ñerf_counter()Ø ðv/--verbose: print raw/  í“results; ©ñore digits precision
  -u/--uni{t5`outputM  e  p (nsec,± Ac, m aor secŒ „h/--help‰ ˆ@ mes� u@exitp -ä‚parate o7V fromŸj V when  
 Àrts with -
  ~Ø HdGÆ¡

A multi-ÿ¦Àmay be givenVpspecifyIBeach.sas a
se¸ @arguú¡; indented& às are possibleL `enclosK 4an
6 ¡ in quotesu  @lead( Pspace>M¬ eple -s(€are
treaq qsimilarþÂIf -n is notÉ �, a suita‰ Ž€of loops) acalculI Pby trï q
increa� 3 sš _Pseque(ð1, 2, 5, 10, 20, 50, ... untilAb
total@@is apast 0.250ond�PNote:/  re‘ áa certain base£ñ overhead associ­  ÍPng a
£ð
.  It differs between verî VAThe ô he`oesn't ð
to hide it, but you should awÛ€of it.  F § rcan be
u¢Pinvok× CqprogramÄDout  C£Aes:
l·Q

Fun(  ÙPit(stÓ",  �) -> floa^ ó$ 2lis# lpðr() -> float

"""
¤
import gc
 4sys Dtime ðitertools

__all__ = ["Timer", ",  it
 Qrepea
 €default_ ð	r"]

dummy_src_name = "< ”it-src>"
1 ±number = 10  \ E = 5  A  +   ó.perf_counter

_globals = 
 ñ

# Don't change the indentation of ‘template; "re# á() calls
# in û ó.__init__() depend on setup being^ üed 4 spaces and stmt
## 8# $.
�  $"Â inner(_it, R{z ‘}):
    {t } S_t0 =% !() `for _i· 2_it2 6 4tmt5 15 ðreturn _t1 - _t0
"""
y Csrc,ã ‰ Å"""Helper to( ð	 a multi-line statement.Q  ˆ j ð src.replace("\nN¢\n" + " "*„‚)

classÊ A"""C  æ 0timwQexecuÓPspeedÙñsmall code snippets.
ðThe constructor tak¨©  Ì 0be d d, an addi^ !alA Ò ` used ˆ � , 1d a9 `r func5 v.  Both_ sE þ l b'pass'~ u < @ is ›Rform-r�ent (seeE ó
module doc string).  If ''A ¡specified,àbwill bE =ð ed within that ³Â� (as oppoë ‚to insid2it'Ì - )c‚o measurtb  r ß  ž ŠVfirst,N ¢ Ú  ) àit() method.  ·  Þ aÌ€venienceN µC  �"plµ ’ƒ`a list‘ Yresul#æPs mayf €tain new× s, as long bthey dk on( ‚ 	 Ÿ  lZAals.   	 Edef \Qself,4 =""",c  #r=A,G  ] S=None®   ?ýr.  See eG« 2  � .t " =Üm plocal_nt{Y 1 z  –T() if™ ¸ — T else U  éV = '' Óf isinstance(l7str×  x r# CheckÁ bëPcan bò@mpil!utÂa¢h  E !co( f 
Å0, "Ì"g /    ß‚prefix =«f + '\nÁ & '=&b 4M Aelifu3ablè ã q1['_$']s 	Å Cð+= ', _setup=_setuGp'
  ëstmtprefix = ' @etup  _s
 &() Yelse:I ñraise ValueError("5 õ is neither a string nor callable")G àif isinstance(š ,2 )i ð# Check that the code can b õ
mpiled outside a functiong  þ !co( e ÿ "+ r ÷dummy_src_name, "exec¦  ?  * ± = reindentG 6, 8Ë Eelifã  Æ °local_ns['_M A'] =€ 	¦ ±init += ', & = †‹ G £?tmt¢òsrc = template.formaþ =Æ !, ô=  , ¿ = Rself.F   õ # Save for traceback displayá%= ´Orc, ¦ µ(9 a, globl$, v‘ uinner = ![" 1"]
„ àdef print_exc(Ã ·, file=NoneØÂ"""Helper to1 ' a× Afrom±Qtimed·.a  È�Typical uYw     àt = Timer(...) E   #â ªtry/except: *ry< =  t.€ %itN  # ~b.repea 	E X H )È ð he advantage ov0he ÕGdard"isÄÅsource linesz !in+ôdtP willê%(edDPhe opí!al¢ñ argument directs where[ piw ðsent; it defaultsËµsys.stderr.  5""" aimportÁ fcache,å $  f 9ü 0ot >
W B . [å #A(len‚ I %),_  Ù  s 5 ¸ ¿.split("\n"z 
Ë € # K‘òis already stored some¸ , kÂ.Š˜  “ ¼ð È “, number=à_ 
Å m" '  ' JuTAs of© @mainÑ te[€oš`precis3his? eìe; ¥ once, andÉ²then return3  ½  ‘0takE oQ Š  E aæ ± ð imes, as a floaót measured in seconds.  The
  ðargument is the number of time Qrough õloop, defaultingE âto one millionb 0 mau @tate` ,B tsetup s F andE !het ðr function to be used are pas !toL Åconstructor.E 5""" óit = itertools.repeat(None,ç ), øgcold = gc.isenabled( @.dis  Etry:A  Oòtiming = self.inner(it,  OrR kfinallA 1if ‰ 
W  [ 2gc.– € `return4 ŒŠ Cdef è  „ , =´_ ÿ  õ)w p"""Call\ ±eit() a few 1s.
k  – @This9×a convenience¿€hat callGÝ M ? Ž @edly©  Í  ?`a list‚cresult²t first °E òspecifies how many§  = |   w º  %5;D  ù`  X   ¾ K E 
&ð Note: it's temp: € �calculate¦n °ndard devia^ Afrom÷0 veù6 `report Àse.  Howeverqž5notG @veryQðful.  In a typical case5 õe lowest value gives aB   ±r bound forvð
fast your machine can run• B Vn codvò snippet; higherk s¦ mã $re¤ 8ly Í !caàby variabilityE €Python'sÅõed, but by otherÉ €processew `terfer~BwithË ÎÂaccuracy.  Sy7min† *3he ´ ±is probablyü  on´ TÆyou should b�interest¥à.  After that,ˆ 2 alook aæf entirB °apply commoñ`nse raö  Q n`tistics2er = []" ßiPbrange(¯&  d k."3it(KD  $ ¦r.append(t r½r' ¸Bautoi  P ,9Pback=²v B"""R=  ,p  . žs ‹ € taken s³ 72otaÏw >= 0.2Æ ê¢� method pincreask %s ‹@sequòí ñ1, 2, 5, 10, 20, 50, ... untilœ  isÑ le=50.2F Š2.  ç #s U,Ë_Ù )À @If *ê -Ð* is given anód is not None, it will be called after
  ðeach trial with two arguments: ``6 õback(number, time_taken)``.I 5""" Ui = 1 µwhile True:  ~ úfor j in 1, 2, 5  " s ‰ = i * j=   Š € = self. #it« )1 !if Ï m  R í 	N  p  >= 0.2W sreturn ˜ 	C	V Ái *= 10

defhõit(stmt="pass", setup  ~ ¡r=default_ ,P ?!   , globals=!)± ñ#"""Convenience function to create Timer object andI¤ „ method.ï 3 À ¹ ù r‚ )°ø _repeaø *B ø  ",    � 1j '@ ( ± )‚main(arg¸¢, *, _wrapø¾ ñMain program, used when run as a script.
/`The opñ@al 'd 'ð specifies the commþ@line’be parsedyŒ0ing Çsys.argv[1:]k Pvalue­¶an exit codT s´ 0to D   a(); it¯ 0mayÏ ¿ f Pindic£ssuccessj Wð [ !ceÜ Á happens dur¡ àiming, a trace Ž ¡printed tom astderrò  ¼ c1.  Exb ¡s at othersA q(includr €he templ® pcompilavQ) are´Tcaugh—'à'› 0an œ Brnal	 BfaceÞ Lôunit testing.  If1@mustBaÅÀable that acÉ  LÈ  öþ Fs anæ r' ! (i‹ )$ if\sÐ  Â€ | x È5y Âimport getop6try7 Ropts,S =% ., .ò, "n:u:s:r:tcpvh"© q  "["S=", "u2, "™=D   "F A Pclock	 0pro¢@ pverbose:  Ü� bhelp"]Ûeyð  getopt.error aƒs err:
  «print(err) ð"use -h/--help for command line  "5 ‘return 2
G ñtimer = default_  ñstmt = "\n".join(args) or "pass"% Anumb@ ñ0 # auto-determine  ¡setup = [] PrepeaV o   ±verbose = 0  Š @_uni/ #NoP   ðs = {"nsec": 1e-9,  U6, "m C3, " 1.0}X Ñprecision = 3  2Æo, a in optst@if o ¢("-n", "--ñ &")$  Ÿ 0 = £al@ s@ ?  �.append(? u?   > "if»   ¼  ˜   Hað     JelseÈ   hà"Unrecognized [ ð. Please select �€, usec, q,isec.",f  T   Éfile=sys.stdÆ    ™    >rÿ / ~D  N<= 0î  5= 1µ w pw |processx  Z <  .$ AK vK æK 3if  £ ±+§  Þ 4   À hu 
Z çö__doc__, end=' '» _ ’�¥	 ø ð.# Include the current directory, so that local imports work ( CpathJ �containsK C ð of this script, ratherV n* u E 8 Ý q 1 os q ó.insert(0, os.curdii�if _wrapÚ�r is not ’Q  
) ( )f@ = Tj(V!, :#, #  k4if E	¨%# Q! @Á0.2 <= totalK R < 2.­ S ¡callback =® ï   lDdef 4 (� £ k_takenó J 0msgð
{num} loop{s} -> {secs:.{º@}g}  0 6  “plural = m R != 1¤#   © msg.format. =Ÿ “s='s' if M  Ó? ''‚ N   • =‚ß  , ® = )Š 6tryë A ~ `_ = t.÷drange(>; jexcept> !t.Ó V_exc(*  X àreturn 1

    ð    if verbose:
  �print()
 6try òraw_timings = t.repeat( ‘, number)8 fexcept; !t.W R_exc("  o ‚return 1l  def formatf Ve(dt)A @unitu @ime_ 3  E 0if  » is not NonÑ qscale =&  s[, ]¤  = ,elÿ .  à ![( ,8 )š 
 !,  1 in –s.items()T  X $ Ps.sor ¦verse=Trueü  & 2forN e  T 9 ø  '   ‚if dt >=0    $ Vbreak^ð"%.*g %s" % (precision,O /N ~ ò¼Ã("raw times:O ç", ".join(map(¼', ,&))ö J  KS[dt /@i dtD ]× 0besCmin(> K W Á"%d loop%s, * Pof %d­ A per "ú ³P, 's' ` != 1 G '',1 4   ìì (k  ä *   = = ¢ 2wor» *ax» 2if  ">=µ 6* 4ß°import warnwc  ë .	 ð_explicit("The t%øresults are likely unreliable.  P  J ™  óò	 (%s) was more than fourO bslower9 2theë Z .� (% `(š  ),-0 {+))±Ù b UserWP,á" 0D/ @ò

if __name__ == "__main__"›�sys.exit( ô.())
"""Token constants."""
# Auto-generated by Tools/scripts/  _t?  .py

__allx a ['tok‡ â', 'ISTERMINAL :NON ñEOF']

ENDMARKER = 0
NAME = 1
NUMB ð2
STRING = 3
NEWLIN" ó 4
INDENT = 5
DE P6
LPAJ 27
R	 Â8
LSQB = 9
R	 €10
COLONg p1
COMMA `2
SEMI
 `3
PLUS
 R4
MIN A5
STZ €16
SLASH  B7
VB Q8
AMP° `19
LES? �20
GREAT ð21
EQUAL = 22
DO¹ r23
PERCÆ €24
LBRACÝ E25
R E6
EQ; U7
NOT 8k  9p  p30
TILDS Ð31
CIRCUMFLEXL 2
LEFTSHIF‹ v33
RIGH ƒ4
DOUBLEö !35Y 6 7 8" 9ç  "40/ 1I ð 2
CIRCUMFLEXEQUòAL = 43
LEFTSHIFTEQU k4
RIGH Å5
DOUBLESTAR* 6 @LASHO 7 ' @8
AT 59
Af ð50
RARROW = 51
ELLIPSIS t2
COLON? P53
OP `4
AWAIJ €55
ASYNC Ð6
TYPE_IGNORE 7 aCOMMEN. ð8
# These aren't used by the C tokenizer but# µ needed for à.py
ERRORTOKENh &9
c @60
NPñ61
ENCODING = 62
N_0  Ø ñ	63
# Special definitionsg pcoopera ð with parser
NT_OFFSEÈ ð	256

tok_name = {value:  '
   ¸   !, " ù in globals().items()1 áif isinstance(5 á, int) and notd p.startsŸ ô('_')}
__all__.extend(œ .B ²s())

EXACT_© 
{} ‚'!=': NO, ´%': PERCENT  &   ”&': AMPER  (  & t(': LPA% V)': R @*': ÑC * ç  Z  _ *  B  +Ä 3LUS@ +$ HPLUS$ @,': ?A% u-': MIN5 -5 "MI$ >¾ 5 d.': DO* .. J# /ã  Ÿ   Í 	  q  ­ / S.  :Ã 3LONZ :& º ;€ 3EMI <�$ES< ‚$ <J 
˜  SL  ™ =   :UGREAT/>%  	*  +  x >/  2 @‰„@W æ< [ó 3SQB ]Å ^F“IRCUMFLEX$ ^F C n {N SBRACE, e|': VBâ|;   5 }t 5 ñ~': TILDE,
}

def ISTERMINAL(x):�µreturn x < ‡- ?NON0 .>=1 >EOFY ò== ENDMARKER
"""TŠAhelpñPython programs.²ð(readline) is a genE ·�hat break ð stream of bytesÛ#o
W þás.  It decodes* ðaccording to PEP-0263– �
determin ðsource file enco1 À.

It accept„ « ð-like method which¼ ðcalled repeatedlyp 0get‹ `
next ç  Â Ðinput (or b""Š R EOF)À  ²es 5-tuplesMtýð 
members:

    óthe token type (se –.py)
    " –(a string ústarting (row, column) indices of? p2-tuple FintsH OendiF /Àoriginal linÌ ­ ñ	
It is designed to matchœ @work{ « bPythonðizer exactly, except
that it produä rCOMMENT3 ò	s for comments and gives^!OP ðall
operators.  Additionalh 2allL q lists cò with an ENCODING# @
whiÈ ’ells you  AencoPbwas usó adecodeô @byteY ðream.
"""

__author__ = 'Ka-PñYee <ping@lfw.org>'
__credits+ ò('GvR, ESR, Tim Peters, Thomas Wou ÑFred Drake, 'X \ ð'Skip Montanaro, Raymond Het^ÿer, Trent NelsonC óMichael Foord')
from builtins import open as _ _ +  c) ólookup, BOM_UTF8
A `collec­s7 $io\ ÔTextIOWrapper0 ‘itertoolsv   $re
 #syQ �o *e 	 ò*EXACT_TOKEN_TYPES

cookie_re = re.compile(r'^[ \t\f]*#.*?@[:=] Ð]*([-\w.]+)',6 ÍASCII)
blankK bL Ê(?:[#\r\n]|$< Í °  S!ll% A.__a A+ ["  ize", "gen!e_ s tdetect_È,",29 1"un: O TÎ“Info"]
deL…

class  (Êa.namedš%('" A', 'ôˆ1end^A')):• ódef __repr__(self  › ¡annotated_I Ð= '%d (%s)' %k0lf. ,Í_… [A  ] F wreturn › (6 C=%s,�0=%r 1art
 1end  0=%rn «  M  i  · BlaceP 
® 1))
5 0@pr¬!ty  î eÒ ð 1if X  Ÿ a == OP F=in ÁIš ï & G ]�  2 Oelse@ u  ‰  

µ  group(*cho™3): g ô '(' + '|'.join(    !)': ?any8  P  0 *0 _maybe2 à?'

# Note: weª@ uniŠ¡ ƒ P ùs ("\w") but ascii$ °
# number lfáals.
Whitespacð'[ \f\t]*'
Comment = r÷#'#[^\r\n]*'
Ignore = Whitespace + any(r'\\\r?\n' + ð) + maybe(Comment)
NamB ù#r'\w+'

Hexnumber = r'0[xX](?:_?[0-9a-fA-F])+'
Bin' $bB' 1  9Oct  $oO  !-7! 7Dec! A(?:0g …0)*|[1-9. –9])*)'
InP egroup(© %, � %, x %, b ¡)
ExponentÔ �[eE][-+]Ó 	h °'
Pointfloa+ h  r'û 	( ]\.(?: n)?',
  Mr'\.- 'Š� § | v   Ê,  
F¤ Aª ½ Q, ExpK k)
Imag) ]  x[jJ]', W A+ r' 4)
Ni S 	2 %, ¦ñ)

# Return the empty string, plus all of Svalid ò prefixes.
def _all_8 _ 1():ho# The = Â Only contaiƒ òlower case versions¯Å#  and don't2 Àany permutat+ ó (include 'fr', but notˆ s 'rf').� Zrious> ñwill be generated.: _½ à   = ['b', 'j  'u
 f b Afr']> ò# if we add binary f-, s, Q: ['fI $fb5 PresulÞA{''}G 3foruO in “ q Ü . t) ¨itertools.)(¦£ 2   ñ# create a list with upper|œ— Aeachž  >   É#  character  ‘ u‘ ñ roduct(*[(c, c.j @()) - c- +t]¢  d ñ.add(''.join(u))n rÌ" 
›Ãcompile(exprN ' . Á, re.UNICODEÿ Note that sinceæ qs#	AQ
#  SLP-@ can^jà (making it opÈYal).
; "= Ô*j¯ €Tail end™'¨q.
Singl;ã"[^'\\]*(?:\\. x)*'"
# < "< BDoub< H'[^"<  K)*"'< ,''z 3Î{ ~ –|'(?!''))‡ '‰ "‹ M Œ M `"(?!""M ˜ �""'
Trip¾ ;	PŠ+ "'''",¡²+ '"""')
# 7¶-line ' or ‹ I  “ ðPrefix + r"'[^\nñ '\\]*(?:\\.[^\n z)*'",
  ðStringPrefix + r'"0 "?  ð:)*"')

# Sorting in reverse order puts the long operators before their prk ô
es.
# Otherwise if = came- ó`==, == would get recognized as two instances
# of =.
Special = group(*map(re.escape, sorted(EXACT_TOKEN_TYPES, É å=True)))
FunnyH £r'\r?\n', b Õ)

PlainToken' �Number, = ", [„, Name)
+ 0Ign&+ A ð	

# First (or only) lineÖ �' or " s§•.
ContStrs d ¿ "'¿ïþ<" +þ (’"'", r'\\ç )&Ì h '	'h 9'"'h å)
PseudoExtrasÕ Š ô|\Z', Comment, Triple5 QÃWhitespace +Ð V +, —C˜ |£or a giveni ¦ð plus quotes, endpats maps it to a regex
#  Qmatch`remainsof thatX 3. _Z ðcan be empty, forD àa normal singlW! tô „ dF “ (with no§ 4).
œ …= {}
forh ‚in _all_A~ Qes():8 [ ± + "'"] = S‚ $ 0'"'$ oDouble$ 8"''J 3' 8'""M 3PA setý0all  S?andW0es,H`includ¤ ; @open È".
K _ 0d =m 2()
i  KtêE	 % u% Q(t + å 	 3"'"f s	v q.add(u)> "%@ 'B 	¢ B ñ
tabsize = 8

class ôError(Exception): pass# AStop' _izing'  K 0Untãaizer:
¯ ødef __init__(selfä Aelf.1  Í![]1 ý   Ïprev_row = 1   co¹0 AencoÉf= Noneƒ Uadd_wú‰ w, start� Rrow, X  \ 0if ‰  < Á .™ !or =&lf  v G 0 2colC à    raÉRValue|"t € ({},{})¬Pcedes	 PviousQ "›  K   .f$t(Ñ ,¹  À.prev_col))
  órow_offset = row - self.prev_row
( 0 if , :   1 ÷tokens.append("\\\n" *4 )4 e ucol = 0 3colf 0 =  ’ 5col)  if , ’  � ] !)
I pdef unt½ @ize(Ë ¶, iterable)V i   (  @   Åindents = [] õstartline = False ¶for t in it` H Úf len(t) == 2     � �.compat(t¦ 
S # Ubreakj   ¡tok_type, å !, ™ s, end,   t2  if+ 5  ‰ �ENCODING�  encoding =6 )enK  � vcontinu   d ~DMARKERe Ò < nINDENT9 –’þ 1ž +eld /DEd Npop(\ °äGrow,X Ö=‚-
� ÷ in (NEWLINE, NL¤ Y  âÛ+TrzM " Cand *C$ =" 6[-1á j   "ifSa[1] >=ÂQ š   0 Ž.0 / E6 "0 × tJ ñ add_whitespace(2 
º   ® &  — ÜPÁ‚] += 1¦ € @áreturn "".joinÒ.Á sóF F Ù	iÚRtoks_è" =Ö` k¬ ]ˆ" 0[0]ø	¿.  Í 2strK2 3 ok= _§ Ñtools.chain([[ ]¶ ÷atoknumæ  vakjtok[:2É ?numò&va’ o   UÁ   d  AMÀ_UMBER* 0tok® b+= ' '« D   ±# Insert a Åò
 between two consecutive Ns… À    if toknuëm == STRING:
  Þif prevstring  . ò tokval = ' ' +  I F y = True" Nelse^ 	4 iFalse
6  ifn !nuÂ nINDENTE ò indents.append(Ÿ )H  Æ mcontin— 	c /DEc Opop(Z  þin (NEWLINE, NL)Ä Ÿstartline<6if " Cand ô I Stoks_
% N[-1]µ P "= z % G Qó


def untokenize(iterableÐ À"""Transform·ñens back into Python source code.£ðIt returns a bytes object, en' ñd using the ENCODING: ˆ ¡, which is! Rfirst} ò sequence output by Bize.g´Each elemen† !ed( 4he Þ ¢ must be a? X … °with at leay $woP %s,1 pnumber ¸´ ± value.  IfD ‚only two` Ñs are passed,Õ `resultÊ sis poorÆ öRound-trip invariant for full input(U¿dŒ€will matF -  rexactly+e `limite’	h 4# Ov Ód ý 2ize!toÝ    |Ñt1 = [tok[:2]Å  toA u`f.read+%)]7 0new+( =Ÿ&t1ö4 @ = Bd3IO(4 )P N /t2… O ƒ  °0rt Á A= t2M 1""" Vut = zrDo ?ut.T9 aif ut. ÿ§is not NonLF o( $e(
 2ing` 
Äö
_get_normal_name(orig_encÊPImitaº+ 5 inŒDr.c.ã 0# OÆc¼ ab”  °�Ò12 charactersödenc = w À[:12].lower(�âplace("_", "-"Å  if Ê "utf-8" or .Ésˆ( #-"Ç  Qü  ŽJ  •€"latin-1i †iso-8859  )k \‘,  t (D -E  F ?-")—  u ` ¯ ¯`detect eoding(~×ƒEThe + Àcoding() fun÷(ction is used to detect the encoding that should
    be/ ñ0code a Python source file.  It requires one argument, readline,Q !inq ±same way as ñtokenize() generator.
2 ÅIt will callM ò a maximum of twice, and returd Õ  ñ K Ñ(as a string)/ `a listD @any § ps (left™ Ñbytes) it has{ 6 in– @À l AfromÒ �presence\ õ utf-8 bom or anq— `cookier ðspecified in pep-0263^�f both aC  è $a 6 2re l !t,N °but disagreÂ SyntaxErrorI’be raisedY 	 U Qis anN àinvalid charseÏ ; ( aW r.  Note=Gif aï ‚is foundœ 'P-sig'Š­$edTEf no ! ,Tn q defaul´O '× ý P  ¼1"""Ã Atry:	    ¯n}=Ñ ò .__self__. * ñexcept Attribute>E ANone3 Abom_ê r = Fals %= * Á #= À @ 1def’ ¦_or_stop()p 	Â  Æ 90  Â !()C   º `StopItH6ionI  " < 2b''` y Rfind_ü(Q | 	B# De
ñ s UTF-8. Eitherž >  ºä€ declara€ ‡   #ç which casej| x°pure ASCII,5pit must v ò I 5peru.$  š _ü! =ë!.dÉ (‡E0Unié ï  v tmsg = "#por missG‚ û � 8   !if: r /1not!
« ) e õ
'{} for {!r}'.format(msg,F ¾  6 á¤ - )ñ   smatch =EA_re. ý%Q i˜!t " 
¡ LÛ [ ü €= _get_n­  l_ê (C –.group(1)b á xc§dookup(T 2 èL  œ ð # This behaviou›2mic­Á¹interpreter)› Ý 
ö  æ —v"unknowÐU: " +Ã	W OelseH íT: {}"ñ½
F �  )À       raiseó SyntaxError(msg)

  Õif bom_found:   úif encoding != 'utf-8'$  ( ù# This behaviour mimics the Python interpreterc  ? þif filename is Noned  ) umsg = '” ’problem: ™ Y ?elsJ ” for {!r}S „.format(  )d ^raise^ ¯  ° •+= '-sig'F ereturnf•òfirst = read_or_stop(z +ö	rst.startswith(BOM_UTF8)5Ðu = Truep [  E[3:] `defaulw ç¨ qif not 3 c º 7 B, []½ í á= find_cookie(> Ä % O  1, [2   ‚ ãblank_re.matchS C ’ B ã osecondU á # P ©  ç D è ", : E]Ë % –
def openš¹ ‘"""Open aS1 inFÐ only mode usÎ šÃ ±detected by, _  1(). 1""" ùbuffer = _builtin_‰ b, 'rb'2try—  P ¬, lines = i Z .ø # D  ;  fseek(0 0tex±âTextIOWrapper(, ,To _ @ing=
D .M= 'rš c ö fexceptÎ P c.close� ª !

 •tokenize(Ñ ? IEThe $ ñ) generator requires one argument,Ê q, which— ò
must be a callable object$ ‚ provideŒsb Šaface a G ¢ Ñ() method of ß2-inKW �s.  Eacho 1 toä�functionK sshould Ã Â  ´  P Pinputv @byteI ÖAlternativelyà G ;canØ f ` termi7 0ng p StopIt=2iondŒ1ead| =+ myÇ ð.__next__  # Examp;3f a” eoØ ­¢òproduces 5-tuples‰ áthese members:á` type; Ü  ²string; a 2E Ò (srow, scol)1¤ts specify¶qrow andH Àcolumn where] Nð begins in the sourceð:; a 2-tuple (erow, ecol) of
    ints specifying the row and column where  Ñtoken ends in+ qsource;K  3  & `line o8 1ich& 8 ñwas found.  The ( �passed is) G �physical  !.
  / bfirst K òsequence will always be an ENCODING* > !wh‰ ’ells you  Pencodó  ˜ u… ‚to decodí Ñbytes stream.H 1""" : ô, consumed = detect_ P(readâ )3 òmpty = _itertools.repeat(b""# jrl_gen$ dchain(f  , > Z  , < 0, e\ D qeturn _&Bize(U ´.__next__,   x)


def+ ± $ :¼ ðlnum = parenlev =÷ Atinuø 0$ ñnumchars = '0123456789' Ðcontstr, need  % 2', :    (q = None2 @inde˜R= [0]%if»  -1not/ ¢ É! æ== "utf-8-sig"$  ( T# BOM8 ¥°y have beenîRippedð /   4 W   pyield TTInfo(~E†, (0, 0) "''­Slast_û "b', °while True:n  	±# loop over:£¾T < <try’We capturõ€value ofŽG ° variable hbbecaus¦ R    # Gº 1useÉ”Oð ng '' to signal> ` einput,š H hÔ`K „` itselfªâ à ¡written at§ ;endH À !is
Ët g 	9   % =Î (§ › úexcept StopIterationJ<  ÈT ´ [ 9   .~(p€ ƒE+= 1\ ðpos, max = 0, len(B )- X !if§?str;
#& Íestringc F  k \ 
ð   Rraiseý Error("EOF`multi-5  ",	 VstartÕ  C  endmatch =Qprog. Î  #  N. ‹  po{ enŠT j.end(0p  M ´aSTRINGÍ ¨! +ùj[:end]¢ >  1strÏ 0, (� ð"d)D ø E }  ï]   * K  v   elifO y * ð[-2:] != '\\\n' and û	line[-3:] != '\\\r\n':
  ðyield TokenInfo(ERRORTOKEN, contstr + M ,< K ðstrstart, (lnum, len(6 "))H  B b O= ''  7  = None  :inu Nelseæ h 
 Ô T t  *  +  E ñelif parenlev == 0 and notK - õd:  # new statement?  O!if/  x y: break ©column = 0 ðwhile pos < max:J  ú# measure leading whitespacA 8 !ifòP[pos]È /' :  ) � I+= 1‘    É G /\tH 2= (R ó //tabsize + 1)* c fc 
;ª 4  ‚   ió  û os. ‚« J 	 	fRin '#¤ c   # skip com*¡s or blankŸsN  2 	R _== '#Q  _tø! =O  §±:].rstrip('Œ )c  g 4pCOMMENTéW 0
&Epos)3W9ð Ÿ  B GŒ 5 =6  
» · 7NL,ù ¯ â   B õ
‹ 2if åè > indents[-1]µt# count  ÷!de* Õ B s.append?+ü 1IND² ¹  [:è‡0’)$
R pÆ <§ Æ ¡ ï  $in. ¥ [qraise I½ationError(V  ,   2"unQ does<ó match any outerp M  level"ë1("<rize>", Ë3pos
 € } 3s =g js[:-1]ñ ( €"DE€%''xzý Ü N  À      # cont÷inued statement
  Éif not line:  $ ðraise TokenError("EOF in multi-5 W Ù", (lnum, 0))K Bcont„ E= 0
 ú while pos < max ñ	pseudomatch = _compile(P ’ !). († ,G 
u 7if D :Ï  	À# scan for tð s§ 6 Èstart, end =[ z.span(1~  5 qspos, e  æ = J )/Aend)X s  if_Prt ==x 
" c   ^> È ±, initial =å[} g:end], ]— T   Dif (< àin numchars or 	  # ordinary' =berŒ  / N ¢== '.' andl/ ! _..'))ô Ryield™ÂInfo(NUMBER,O (, z œEelifŸin '\r\n'm  J¿arenlev > 0%  á – L’  A ?els†     _ oEWLINEd ‡	÷  ‡#ô aassertGî.endswith("\n"P  COMMENT  q  fßtriple_quotedwxendprog#  Aats[G ]« 1end= X B M ß    ifˆ; R	Á# all on onee‰ M   �  f/(0³  . Ó 
ÉOpos]^ 2kSTRING‘µBpos)€ œ1strY å ¶  #6"pla(  Ñ:strè å  /  å0 ^breakçó# Check up to the first 3 ïf {�to see iff  # ' Ay'reºuhe sing¾Á set. If so,) ÙG Ÿa string.   Wea u[  F « ±, because w! ð looking for
     ñ#  "rb'" (for example) at the start of ¨token. If
A   ð#  we switch to longer prefixes, this needs /beB Ÿadjusted.  ñNote that initial == � O[:1]2 eAlso n7 �single qu ÿ	checking must come aftery  ^ trip9 ~(above)y delif (¥ 2in y _y >d od  @ Ì ?2] 4 34 -):Ë  g #ifh 0-1]AP'\n': 
 ÿ# continued stringN  5 2str#‚= (lnum,2)1  # Again, uWÓfirst 3 charsl@ Ã 0. TSais looÌ ¿ ³PmatchÝ?endG 	dregex 6 Àcorrect type„ °? 	 ® øacter. So it's really‘ A 	Ðendpats["'"] { À'"'], by tryÇ /toF 	Cskip¥oHš žs, if any§ ¼   … ð rog = _compile( tats.getÈ)¸ E  C ¥/1]D /?2])X ²Astr,e  � = line[Ÿ_:], 1G /  , 3 ( _break OelseI £# ordinary³M  6 pyield TqÂInfo(STRING,ü‘, spos, e  º -)
J ‰ˆü .isidentifier()ª — >namœ‘ ONAME�  3  Ž z\z 3 
~-mtÚ  %  ³¡=Ù �8 %ifA�in '([{'+ e ¯parenlev +e  " 	×  Q ?)]}Q -Q ø/OPeó O ÀnInfo(ERRORTÿOKEN, line[pos],
  Ö(lnum, pos),  2+1)B )= ‘pos += 1
 ñ*# Add an implicit NEWLINE if the input doesn't end in one> €if last_¬ F and €[-1] not. q'\r\n':2  Ê óyield TokenInfo(r C, ''Ä ¥ - 1, len(_ )à  0 + ñ "''ï ‘for inden 
 `s[1:]: 	 ô # pop remaining7 olevels² gDEDENT± 4, 0   ‹ ì ŸENDMARKER= ð

def generate_t.`s(readm)N1"""GÐize a source $  Ë ñPython code as uni ‚strings. �This hasì€same API/ q òize(), except that it expect3 *n  ’ *-ñcallable to return str obj2 ñinstead of bytes.5 1""" 1 ì  { \ r, None) ª( ò import argparseÓ ð# Helper error han3’g routineÖ ]p! ƒ(messageS  õsys.stderr.write# § " R'\n')€  [ 	Z °, filename=È ¡, location x  O à k   „args = (H E,) +F 4 + ¡ ,  3   á `"%s:%d p: %s" %7s1 Eelif© 
 H 
B ‘  FQ /seH † 9 	\cexit(1Q0# PÞ£‘argumentso opGÒ0r =×  #.A, > ’r(prog='p4-m â54 dr.add_e t(dest='v@', nŠO='?'•vmetavar7 ?.py/ `help='j g  8˜ €; defaulj`o stdicØ « ò'-e', '--exact', ¼   ac*Ï='store_true” rdisplay( ¿@s usZ ® Y S type@ 3 = G  I#s(Æ6try#ÿ ¸ M e ifÄ s. w 7  ý  ê& ?  % ÷with _builtin_open«P'rb')äfZ  9 } lQlist(  Š$f.Œ)á	œ !"<²>Û [   Q  _ åmÀdin.readline£, None)

  õ
# Output the tokenization" 2for 2 in	 %s:  F 6 r_type =! . 	$ Úif args.exact? C * V 	I m @rangn q"%d,%d- a:" % (  ƒ.start +Ž Iend)E ñprint("%-20s%-15 Ir" %&  ™  R _r ,Q a_name[h Ÿ ] ¢en.string)k Ñexcept IndentQÆError as erràline, column = .)…[1][1:3]‘ e> B(err €0], fileŒ 8, (F 
� TÓ{ v .oSyntaxw Ê Â 	3/OS8 	. ÷KeyboardInterrup]æi Yed\n"= E¥=ion—p¦ °"unexpected›`or: %sh2errJ  %±raise

if _ò__ == "__main__"î  ð()
#!/usr/bin/env python3

# poryðs copyright 2001, Autonomous ZonesVunáes, Inc., all 3 `s...
#­ ñ...  reserved and offered toîÁpublic under €terms of A
# P› À 2.2 licenseZ @AuthðZooko O'Whielacronx
# http://z ñ .com/
# mailto: @   h
#
# Cê î0, Mojam MediaÚ Í ‡ ëSkip MontanaroU ÿ 1999, BioreasonS ÎAndrew DalkeQ b5-1997•omatrixW ª 1Y ø5, Stichting Mathematisch Centrumë© pPermissÑQto usZ±py, modify, di;”bute thisç€software$ à
# its associaýTdocumÊ ð$any purpose without fee is hereby
# granted, provid{"hakWaboveêànotice appearsk Ó�copies,
#–   t= Bboth
 '= "ndÓ p X ‘ in
# supk9ng × e   [ qneither†ñ&
#U8 or·0 beydÂ pdvertisÌ2or p°ity pertain Uto
# “ º€ �]ðspecific, written priW í ð.
#
"""program/module to trace Pythðon program or function execu
 ð@

Sample use, command line:
  trace.py -c -f counts --ignore-dir '$prefix' spam, Ieggs< t2 -y ykcalls W 	® Ù @mati+ ðy
  import sys

  # create a TÊ ò object, telling it what to Ó  , ÿ ¡whether toE !do	 1 !or-
 Tboth.ñ 1r =- !e.r (W ò dirs=[sys.base_2,§   � O],
   0e=0§aunt=1)ž µrun the newÀ usœ   Rgiven’ r¤ Ò.run('main()'F 0mak' re@`, placC õoutput in /tmp
  à  r.results(A „r.write_ €show_misˆ A=Tru\€verdir="K ñ")
"""
__all__ = ['1Ò', 'CoverageRa C']

Ø ˜Tcache $os
  ó& ”sysconfig Ytoken %izC tinspect $gc
 %di] ôpickle
from timehàmonotonic as _ « ñthreading

PRAGMA_NOCOVER = "#pragma NO  ±"

class _IZ |ñ  def __init__(self, modules=None, W  )1  7 ( ô._mods = set() if not< Q else M  À : "  <  V  ‘]9  6 Ð[os.path.norm	 &(d> D  	Pfor dM R ]çw *ð = { '<string>': 1 }ËSnames@file   #ifñ    t f / ¯ creturnþ ‡ [ < ]  ) À# haven't seVðhis one before, so  7 {C  D   i C  •o±j P list? ·  Ð:< AIdenïX st I O I í Ì I = 1) ü 1å [checkÆ @is aJsper subÜ ‘of someth,nZ #’˜ á   !mo¤ Ú   ¼ `# Need”t• a ² care since© X ,  À# "cmp" must Emean*  70" bÎ dB  BSpamC k also E   f.Eggs"¯ € 	³À.startswith(è W+ '.'— 1   ý "¡
 - ¥BNow ©tÂð isn't in one ofó the directories
  õif filename is None:  $ ò# must be a built-in, so we iignore4 bself._ R[modua Y] = 1) •return 1
 1# IP ! a˜ ñ	 when it contains one ofÐ a –able pathÔ ’for d in ˆ LdirsÔ àThe '+ os.sep'ú àto ensure that@ ¥s a parent:%y,© `as com& íd to cases likEû d = "/usr/local"I î †	' <.py* ,or; [ 4  ^ ä.startswith(d +)I eŒeí
 - ñQTriedÑQdiffeqDwaysfbdon't a b this S‚ 0% z °0

def _modn(:Õ B"""R�€a plausi[l  -  Y I’patch."""¸`base =M N .  / \ � cW, ext+ �splitext(4 )+ ¨ 2 ¯ Ofull³ -² 2# IC g   '· @part^ ù`ckage,˜n CQisn't¬ €# enoughûðuniquely identify it.  Try !doD PrightÄSng byD qlooking±0ys.� j�longest mr % ãprefix.  We'llB Sassum¹  r3 !iss !paÉ Á.°c²i ·@normÀ·~ 2= "† 8dir«   O  2dirÚ  $if0 ~ 	dxir) and  P[len(@ 1] =Z 6sepp P $ 0 >  ´ Ô $     =Ï
3if  W  ‹! =S€ ! q) + 1:]r7elsá1  #xÀdrive letter`PneverPa ¦Z8 2 #, O o
.# %$   ’.replace(ÌR, "."p if“9alt6 4 ! =f ; ' >   Æ³�.lstrip(‰ ó
class CoverageResult�‰€_init__(Å�, counts=‡Ä, calledfunc  in—  4Ü 0 r, Ðoutfile=None)3:
  âself.counts = 	  8if   vis None=  D ! E= {}=  Her =I ò.copy() # map (filename, lineno) toŠ L ‘alledfunc«  ' °   µ & º  	 Í  Ã z   r� %rs 	™ /rs• D K ~  m ‰  inT2 = 	 ‡ 9 3out 
  ¦ 6 
çP# Try™âmerge existing¨ s R .I  :tryB   ¡with open(‹ i Î, 'rb') as f3  7 —0, c épickle.load(f)†  > k bupdatew ¯__class__(Y 	)J óexcept (OSError, EOF
 QValue Å >errÇ Ûprint(("Skipp9� %r: %s"º  ¾  "% Ç >aerr)),ƒ€=sys.std 
O ð def is_ignored_¨ lB 4   )± ñ"""Return True if the]  ) ð  does not refera m  ¬ pwe want Öhave reported&""ê rk — p.starts'0('<!nd_  | C.end 6>')ß Ûz, otherÏ M²!inÉ Ádata from an, ø CoverageResultsž 
½é �"  
' §ˆ6 „ _i  �C  _: ý" =è . . w > * "rs6 ¨¢for key inL „ 	 % ˜ U[key]é.get(key, 0) += ) c 	 h  D O = 1H /rsD  +rs@   rwrite_ràúÐshow_missing=êð, summary=False, c@dir=ô
RlWZ X. Cage g .¿ x:param r a: Showðös that had no hits*: ™ ’: Include›  m ³ ½ per module= ™ ðdir: If None, thÿe results of each module are placed in its
  òdirectory, otherwise it is includD Ethe + N ¥specified.$ 5""" õif self.calledfuncs:  ¢ print()  ". btions > *:"'   =s =a 	L Ófor filename,.  _  
  1qsorted(R )¡ ¥ $("I H: %sM  Q    @  4% (F B $, > E)))
Â 	?r; É �ing relaCLhips@@lastŒ 0 =  c ¾ ¸  A0((p �, pmod, p¬ A), (3 1, c c 5) \¾  ?  3in e/rsl 1if m " !—  y ’ W ;     P"***"° Qile,  
C +      i " =} Ã  % ò ; = % D 2if  !E G andZ"!=  Í 	‚"  -->",* ¬ i Q ­ ý  • ‘%s.%s -> 	 W" % (Ä»xp# turn çcounts data ("½¡lineno) = # õ") into something— ñ# accessible on a per-oFbasi«Aper_ E= {}?  �   ¬", v ´Xž 
S # Ps_hitÎS [B ] G.getÑ *{}qH [
  no; ½u [; ! ()]Bõaccumulate summary info, if neededã 0sumÉ&{}@ 
ö b õ #{.items(@/¡is_ignoredP :­ 3  %†continue~   %if9ÿ.endswith(".pyc"D  `% =6 G[:-1T €coverdirpJNone¼ %   Ñ= os.path.dirÀ  0abs Ð 
µ A m 6 p = _mod 1 w , ?elsƒ « 	1  5  Â%ot£ ¯exists(dir  0 ¢os.makedir& Q m² Ffull¶ Àlename)

     ô.# If desired, get a list of the line numbers which represent
E   ù2# executable content (returned as a dict for better lookup speed)N ùif show_missing:  o ö lnotab = _find_| _² Ùnos(filename)< OelseN ){}. �source =�cache.getb ` ð coverpath = os.
 ò .join(dir, modu– Q + ".- "¡ •with openÁ p, 'rb')C.fp¼ ôencoding, _ = tokenize.detect_ €(fp.read¼ 
q ‘n_hits, n:ðs = self.write_results_M(¯  Ò ", ,- — ½”, count, ¤ 
˜  ¤ummary andŸ  @perclÂ= int(100 * Ô $ /6 
Z  ¥ Vsums[�4] =, #, R ¯ ,  O%

õ ¢  S 
Ÿ  pr“ "t£s   cov%  @   (L)  Àm in sorted(V )W  À ®­  Íé ]µ  =   œ  %5d   %3d%› %§ €(%s)" % z J[m])ñ  0out
– 3# t«@storAunts¼hP info¥obF 	š :tryV  « š8 D, 'w4  8 Ñpickle.dump((; q"s,€ ©calledfunc ?rs)ØJf, 1Uàexcept OSError­>err˜ w•Can't sav( QÀs because %s‚2erry³=sys.stderr�Odef £  æ  , X,´4s, m† ìqW=None]A"""R±  a­cerage  ˜ ] E."""¸B# ``e E`` iè(of~  , ™ T! "1"dï P   W, "w"Ç AŽŠñ("trace: Could not}1 %r© c €F %s ò  ] °"- skippingÁâ , ·)Ê D ryF0, 0æE = 0oÜ !• N {ðno, line in enumûerate(lines, 1):
  ð# do the blank/comment match to try ¡mark more L G  Q(helpJ ýreader find stuff that hasn't been covered)H !ifa Qno in
 ^s_hit·  Æ öoutfile.write("%5d: " %7 [¬ >no]g  ? nZ ms += 1‡    ? ! *elª ônotab and not PRAGMA_NOCOVERË Æ ò# Highlight never-executedÉ �, unless[ ’ Ÿ contains¶ á# #pragma: NO € ( => / "+ y /seÛ d  U/  d 
)  l õ.expandtabs(8))
Ä rreturn ½@, n_. €s

def _s °_from_code( c, strsÿB"""RF ôdict where keys aà ³  ] ñ number table."""Œ   ‚nos = {}ž afor _,µ¿@dis.’  + astartsŒ †  D 6!in¦ 
L = 4nosË ®� 	  k ÷ 4  þ  ¶ @all &à objects reachï  G ù `# get 3 oÙñ ’formation6  @V  ( áis scope levelÂ ‡  C¹b#aQcheck constants Æ  references±Qotherº Ö t  ) cÞ š A.co_D stÐif inspect.is% '(c± µ#Ú-anc ñ, so recurse into itv  7   ò @.upd—÷ #(c¬�Ý€strings(úóname, encoding=None¬ ãaçò of possible docF   i±"s.a2The/ AmapsÊýS5 Qs.  T3€is an en#1forê  â ï¦p only aÛñing or a part of a triple-quotedB f . mdg C0# IOàe first token Š a ,Rn it'2Hmoduô Y €# Add th–°pecial caseÀ¬ ¼@test*  ²loop passesA Âprev_ttype =… q.INDENT¸ Ÿwith open§°f) as fz4tokL qize.gen½_ã @s(f.X `#  Î… `, tstrCð art, end, line —in tok:
  °if ttype == šen.STRING&  1 ‹if prev_/ nINDENT/  3 ùsline, scol = start}  $   e( e( ?end& ó for i in range(] < _ + 1)„  ` ‰d[i] = 1W Í  ðreturn d

def _find_executable_ª Ãnos(filenamev C"""R9 ðict where keys are 5 € numbersÁ )th  [ A."""‚ 6tryË Bwith™†ize.open{ V as f+  ê ñ prog = f.read()P     rencodin   " àexcept OSErrorW 6errY Áprint(("Not   E àcoverage data œb%r: %sÄ  p  %% Á �, err)), M€=sys.std •  ? �!{} ð code = compile(ì <  ‰0, "§"ô cstrs =¿fstring´$, þ - f ì ¬ s(k  , F â)

class Traceð	_init__(self, count=1, t'  	  sfuncs=0  `caller Ð  â  ò ignoremods=(),  3dir n$ NoP6out J ´timing=FalsŸ f _  b@paramµ ó true iff it should ²î of times eacho  P  5@ is ‚6uteÀi i OA out] )that isj "be}/ung  sl @justk €put a li ff £Bmoduë , Îl)ñ  Otion« È w	ø€d at leaw °nce;  This GOrideE `Ô q' and `G'³ ]+ :×  c « s¿Ä Cs toXC  nC ¯directorieG   0allu  ‚ ð(recursive) content‘  Þ  from whic÷ Çc store•~ %beB v  	 ¡added into fresultY0?o &inm _write: 	Z\ pinforma· be display{ /".iñ "= 	 Î    =­ é
 ï ÝI3(   7ÛÐ    self.counóts = {}   # keys are (filename, linenumber)
  áself.pathtobas) E ñ# for memoizing os' .& 
B `donoth( := 0 �trace =  
 ²_calledfunc»  r P_cach] *{}; �start_tim ENone ¥if timing:  	6 > (*�if count´ /rs?  aglobalè 1 = R  _ k> | $elX V ” < 
T  n Re and¶ Y %ltQ !;locá  à ae_and_” > ã � … U
{ Ž { Ph { *seu Ó# Ahem -- do /…?  Okay.7 kR!1
  €def run(Zf, cmd)a ñ import __main__0  L edict = 0.__ !  M Ð.runctx(cmd,    )w  !  - z ", Ú s=]!,  • f' @ is * :  ª¦ #ifB ( R Œ' 2notZ  ð Ñthreading.setu/.¯  Ó 1 ?sys+ :tryi Bexec1[ s_ kfinall8  ifüÄ 
—  :W     ë  ) 0-  ,  ÷, /, *args, **kw­Presul, E C  e ¯ B%q  ™ (• ~ BDrreturn � å *€_module_” ttion_of?Grame00cod]f 0.f_ ¸ t0 =  @.co_]  ‡$ 4if  
Z‚  ,  ¹0mod Çðelse:
           ó modulename = None

  Cfunc €code.co_   0cls 8 6 @ if / õ in self._caller_cache:>  / /if#  [> �] is not“ 
5  9 { c @ h ;elsv 3 É  i õ-## use of gc.get_referrers() was suggested by Michael Hudsonƒ I P all SÁtions which N ‚ to this7iobject<  6 Às = [f for f[�  6)7  w  i6 €spect.isQ  ‡ I(f)]3 à# require len(' `) == 1£ òavoid ambiguity caus÷  áKs toK @new.C j á): "In the facRK , g;theD `temptaB  ƒ yguess."$ %if¬ s­ /AdictAdAdA « Os[0]E N IÐsinstance(d, ] G(  D  ˜  ( aclassež cž cž H ž  R  ƒÿhasattr(c, "__bases__"¨   2 D‹ F *   q# ditto­  ä7 Oobj(:°- eh!._O)__Ï a  !# 45ñ result - assump€is that … O* isI  K §€ed laterNrdisturb|1relgOshipH 	Íð could be flushedy G ž :s iÖ   #Ô 3new€R get   .~ ¸`;  „žH © À³"%s.%s" % (J ,«  )’return fi1,½  & 0 / ðdef globaltrace_ ká 0rs(É ö, frame, why, arg)·¡"""Handlerd 7 ‚ events.^  C0AddcAform¹£ about whoI [efs²g&""Q if�  ó'v '”  s �# XXX Shö€do a betM0job#úidentifying method“ å_w" =’  J_‚  8A_of(
Naparent& > z.f_backE  yà._callers[(paráent_func, this ð)] = 1

    def globaltrace_count0 ñ
s(self, frame, why, arg):7  ; ò"""Handler for call events.\  % ±Adds (filenH Dmodu  g   �) to the r  ._I  ed xs dict.r   if” P == '1 '˜  w ì " =V  ‚ _} �tion_of(ß )V  < † [N 9/lt13!Ifðcode block being entered is.õbe ignored, returns `None',Ì Eelse Õ 3locèT!“ =0.f_ l  8 c Ï $ Z�s.get('__" P__', ª 
u0if   @ 
Ê Z `# XXX ¿   ñ() doesn't work rightƒÉpackages, so› E  c6p supporA G C @ „ & =� ¸ 
Ñ  s 7if 3 ais notü ã / Ò4_itµ­ .q sDs H fi > ?_itn * ü'  + Çprint((" ---Ö `: %s, ­ ¦   "7 ?  6% ( , L@.co_D /))Ö  B rëÒÍ	q  öÊ 9  xœ øB _B_andË~j"line"r �# recordÊ  Ù P and .   number of01ry ~ 	Æ  5 4 L$ 	0  W 'noz 	$ 0key! ‹#  Ps[keyï Ç”key, 0) +B ˜  "if˜ªstart_time $ E¡'%.2f' % (' L() -; ª), end=' 'b±os.path.basY
/ p q"%s(%d)� v E ,‹&no0 ¡   *Pcache  o F )± ° tAku7Àe file name ÷and line number of every trace
  ôfilename = frame.f_code.co_ 	0  W 'no.  
% ùif self.start_time:   € ñprint('%.2f' % (' L() -; ¹), end=' ')E b· ±os.path.basÊ (¸ 
/ p À"%s(%d): %s"v E ,-9no,`  ¥   ï �cache.get o F )± ° breturnÚ Rlocal‰p Fdef  p_count(?,’¶, why, arg)F if P == "… "  ³ §Õ" L  0keyO /í Â #  µ .À ‚s[key] =ò   1Å(key, 0) + 1; qresults7 —CoverageR& … @, in=™  ä6out4  5 ²calledfuncsm _ > r: Prs)

Smain(ö `import
Rparset 5r =  .ArgumentP% "r(' c.add_a  ö('--version', action=' 
 !='­b 2.0')t ogrp = S  ð _group('Main opR *s' @'One‘àthese (or --reÙ ÷ ) must be givenm · qc', '--X» «store_truet phelp='CZ8 th œas eachÐ is executed Fuwrite '¬ë  'H � ð s to <module>.c�B forU  T  ’N , ð	\'s directory. See also ï  verdir, --£,J C--noQs below.ˆ<grpHtHàHPºß  | ÿ �sys.stdou¿xfore itLƒ lƒ Alist?‡ AKeepÑkO`which C uE arevß at least oncÎì ØrÚ Qafter@ïprogram exits.‡PCanno€ specifiQ±longside --t þF¦T# 2 kWs$À',
         ñ   help='Keep track of caller/ üd pairs and write the results to '
  ñ'sys.stdout after4 ñprogram exits.')
9 ôgrp = parser.add_argument_group('Modifiers2 _3 1grp0 ómutually_exclusive: )`  . ( X ñ('-r', '--report', action='store_true',= Ù %²Generate a ; ð from a counts file; does not execu. /ny%€code. --7 Ñ must specify.b ïto read, whichN A ñhave been created in a previous run with --´ J ’ o=FILE'DRD/noG!DogN PpcoveragY ”K/s.Ÿ ðUseful if you want†paccumulž K 0 seQ lò 	lfÇ  fôKFile` :-s g -˜pCe å ?diri äDirectory wherf‘ go. The F +€ñfor <package>.<module> will beÈ0tenØ  ù ge<dir>/E /E .€ ì mì missing]PAnnot¿7ðable lines that wVdÈý !"> / "¥ s¥ summary¥ Wƒa brief ?  nAeach¶ UÿÃ€Can onlyŒ3useÌ ”5or œ€S  Zo'--timfqPrefix ®  ^F ‚’time sinc{­startedÈ OÄ Á h(0rac� Û@FiltÙ
m'#be ied multip‰0ime ˜ ‚-ignore-ð×úappend', default=[]t áI? bgiven I 1(s)ÿrits sub s6�(if it isv€ð). Accepts comma sepaG`d listpÆf Q nameÁó WÉð 	À     help='Iügnore files in the given directory '
  ¥'(multiple( ñies can be joined by os.pathsep).')
I ð"parser.add_argument('--module', action='store_tru ádefault=False,H ”   âhelp='Trace a S A. ')1 y pprognamd šnargs='?'` T  "ð to run as main < ?ram_ 	â Bs', ` 1arg‰ ¯.REMAINDERo 8  t  •l Ì qopts = J !r.  N#s(e0if # !.iàQ_dir:8  %ð	_prefix = sysconfig.get_ª’("stdlib"3/ Oexec4 Eplat8 h 2def� _‚ 6(s)…  ¾ Ê.expanduser( vvars(s)Œ  6 Âs.replace('$Ê 3',   ) ·  !  P dreturn§Q.normsGDNæ = [mod.strip(J  *
 Pfor iTE    0mod Ñi.split(',')]<0 0dirr á	K+ 
r   [ w  G   är l �]›6freport­bif notR 	  s � âr.error('-r/--A ð  requires -f/--: , 7 QresulÆ’CoverageR 0(in+ = 
 P, out	  yÃN s.write_ (C ‚missing,À ssummary c{ 3dirðé Qany([< tK, 3unt “listfuncs  ( wkcalls]å
ðmust specify one of --: qe, --co_ =,x 88'--~ rD ~ eÊ* R and i 2 or€ ´ 0canú¶ Wboth € V Å  S Ç )ˆ v0  Q ]‰ L
.$--4  V@only[qused wi† ? u pu  4 Ü� is Nonek ( -:¼n  ƒô opžsk At = o[1e, ¦ +¾’
÷ )  C2ers+  ›×", ü3mod  _•K  $diI   ð, infile=opts.filIe,
  Ðoutfile=opts.
 ‚, timing  )5 Atry:	  A 1if 3 fmodule  µmport runpy1   - r_name =@ @prog ( % ð , mod_spec, cod5 U c._get_N ƒdetails(  M °  r   Àsys.argv = [F @.co_ê  * 1, *Ç ©arguments]‰ ™globs = {  U !'_¢ ü __': '__main__'^   l ( } V qpackage1 þ .parent^ jloader/  /  M	- & acached( ;Non5}· ;elsûlYài 8 ppath[0] s. @.dir¥(J %)
€  ‰šwith open& Ú, 'rb') as fpŸ 6  ‹ú = compile(fp.read(),–Š, 'exec'Qô# try to emulate   ® Pspacex @much ‰possible· Z
2	ù ª r ¨…WÓ ?'__÷�t.runctx(F!, Ë  )àexcept OSError6err… í±exit("Canno* ô ð %r because: %s" % (-  ¾™[0], err)c ¦SystemExit_ Bpass$`resultÁ#t. (?0if z aPno_re³D . s.write_ bsmissing*ssummary äcoverdir)

if #&==�c  /ò()
"""Extract, format and print in ðion about Python stack 7 ’es."""

iq´collections …itertool Alineç" Àsys

__all__""'e’ _g ' l @t_tb • _ã:ionô' W_only8 Glist e C o  n 5 0exc   epô ‰  "lao  n " ' b Ëclear_framesD F Sâ r Sz ¡TracebackEñFwalkI ±tb']

#
# FòFtingö   #Bs ofã _  ¶’s.
#

def _' (­!ed ,F=à)ið"""Print the lisõt of tuples as returned by extract_tb() or
    pstack()3 Áa formatted   7 ñe to the given file."""E !if ‘ is None:  ^  & Â = sys.stdert Ðfor item in Sx óSummary.from_list(« !ed ").’ &()[ `print(G ,} =l ã, end="")

defÈ C R I A"""Fì 0 a x <ƒor Frameœ € objectsT  | Qing.
ê GB 
–B ï š–,Ç¦ `stringà1adyD  V™ REach *  l ¾’resultingð ´correspondsà SP withîZ ¤same indexF �argumentE 8.  i eL Ñin a newline;E  } ‹ ôs may contain internal. ¶Qwell,kQthose.sG w  source texƒ  nez1not~.( › gp

#
# Pc +Rand E=  ÒTracebacks.
#jy ¿ tb, limit=
›  »1"""W 0 upq', 'h€entries  „ p S 'tb'u4If = ais omi°!ord, all I 2are³Ped.  9  ,'(<  «¡output goeÂ±; otherwiseA 'L ó should be an op"1 or�S-likeC\‘a write()E jmethodºS –¼
`:)b … 
õ:tb(Œ�A® 0rth× 6'^	(	l 5))'ìQ²g “ ­* 
Rª) a¬4�represenºj8 Õpre-processedô=©4@This+auseful`!al te  õ á(of‘s5l rø tA> 
ª [ ªyš au= 0 Ÿ €attribut$pilenameubneno,   Û |; 	= Ý"inò€ion thatz tusually) " aE p.  The Z  4     ‡ÓAleadŸ  nd³Qiling; ¡whitespace��pped; ifÜÊ0is À€availablò a  '
	7Ðextract(walk_átb(tb), limit= ôB)

#
# Exception formatting and output.
#

_cause_message = (
    "\nThe above exH ñ was the direct < " "2 !of `followj 7 p:\n\n")m oontexto 0Dur5 Phandl	 O ‚ ,n …another e • occurredn µ
def print_& ô(etype, value, tb8²None, file= Âchain=True):á 0""PM s qup to 'tñ' stack trace entries from 'tb')  _ 1'.
O ³This differ' « {tb() inLÁways: (1) if? g bq ris not ¶ "itò Ðs a header "T’ + Á(most recentF öcall last):"; (2) A  è8 7<:` after¤ G ú @; (3¥ 1 çis SyntaxError@ hI> ³appropriate©,‡  line wheres ! sS   eT B ûò  with a caret oEQnext B aindica Ý x aximateF Aposi.{` . """å#¡ Q Ê �ignored ] # ± some time,õ ñcode such as cgitbW €# passesðRbogus˜s& òa result. For compatibilityç O Y wÀ "# ˆ  =,1(ra$@thanc  õ Enew !BAPI)ë !if1 isSü2    Á= sys.stderrÃ 4for]X  M >    D(@)‚ F").«( € B #(Í¬ Rp, end="aóB £ôd éF0) aÔ : C"inl 5ionÖó e arguments hav²€ame meanÚû± correspond 5 V"toÇÅ @).  “breturn) ¥Àa list of stBqs, eachG e\ €in a new8�žacontai’ „internal% �s.  WhenE Qtheseäñs are concatenatedN •²ed, exactly¤ ò  ì1 isG &  ÛOdoesà  ' jØÊ ¿(“;7 À tb, limit=lñimit).format(chain= ’))


def  ñ_exception_only(etype, value):
    """FG U the 0 ñ part of a traceback.
2 ûThe arguments are:  d B andg ñ such as given byD •sys.last_-  �  . f creturnH €is a lis– D ótrings, each ending in a newline° Nß Ally,¨ B pcontainR �single sM  ; however,Af ¶SyntaxErrores, it F s3 0al u Ás that (whenA òprinted) display detailed in¦Óion about wheOsw A e| ƒoccurredÕ  ð message indicatÿ 0whiö 6  >@lwayŸ  e {\ ÷  6 þ ` 1"""! ƒ  $(T	E` 	Qd, None–{šp# -- noÃñficial API but folk probably usU  pwo funcÄ"s.Ü_7`_finalh _y	Œ ÝLñstr = _some_str( )Þ &if] ½ 1 orŸ # 2str# ' b Á = "%s\n" % JD Oelse( $: , 	š 2str| Z#ne× ¢ U 2try	  † 4 Æ µ& A'<un}ðable %s object>' % w	°.__name__

ŸŒ 8  [ (lk=c, file n8=TrH`ShorthúUfor 'D ‚ (*ã@exc_øA(), [ V 4)'.r7 == =˜ ", “  )Æ (9excÇ # ¼ ULike { !()•oa£  †"".join(g ê 
³     ®y  –	©  Ø pAThisÙ/ sz y ] n,¶ ë%,  î !if#åhasattr(sys, "^ "z®`aise Vm@A("no{I" È0ionU � ­ Õ  u  $€)

#
# P” 0 ­ Exô ?’Stacks.
#@— s #(f‰T   õ 1"""Z  22ack;à from its invo©ƒon pointl Ìo¦eal 'f'^p can beð d to specify anð alternate
    stack frame at which to ñrt. The optional 'limit' and 'file'C ðarguments have the sO ñ
meaning as for print_exceP 1().> 1""" Ñif f is None:  Ÿ Áf = sys._get¥ ‘().f_back# T Ñlist(extract_Ñ A(f, ­ = 0), ¯ = p)


def“ %ma/ =w 4   )„ �"""Shorthô  Æ @'for8 t O))'.Ö *dreturn¢ j Þ Ó Ô E-¬@raw ;eVQ from pcurrent	!!.
u £ ‘value has3 ö õ“ `tb(). OC SfO¨/' LD üï \ ÁEach item in�  9 RÐa quadruple (Qname,D ðline number, funcê   q text),í Ó°entries area QorderD 2`oldest90new
 ˜ Xè0N 0= S®ƒSummary.\T(walk÷)ÄP)¡ = ’.reverse( À aclear_eDs(tbC ð  all referencesè ð local variables '@ V of aV.ã€while tb•;notë2tryt ø  Rtb.tb‘ .� ¼   GÚ RuntimeError= r# Ignor�. Ñion raised if"­  Ž ò still executing² h   ApassI  Rtb = š ànext


class FBšŠ ²"""A single\P”- :attr:`œ`(² Š ® › 3  Á"no1    within= 0 thäaÏ ¶active whenb Û was capturedo  � m  
  æô9•or methodi TBl  Ï l  Š= n    cache modu] or¾ a `of codøë A run‡z  Û‘s` Either§ 2òps were ¿ósupplied, or a dict„ @mappú ¯ ) to¢ t repr()7<d 2? Ñ__slots__ = (g C  ',@neno
  _  œ "')R àð	__init__(self, filename,ð
 lineno, name, *, lookup_ ‡=True,
  Álocals=None,<  %):% õ"""Construct a FrameSummary.
& h:paraml Q: If p   `| õcache` is consulted for the sourceM  Ÿ Acode� Á. Otherwise,-  M � will beq õ	ed up when first needed.P �  ë ˜ �suppliedQ fÓ  	u, which` µcaptured asO  Ÿ þobject representationss 1ineq ñprovided, use this instead ofÆ 0ingÇ  â )inq  Gh 5"""' �self.fileû4 =  
!  ] Ano =]*no :   
 ?5  iº ]3 !�  l .  oa = {k:>1(v)sk, v in‡¡.items()} d  ¸` else ¨v°def __eq__(Z 0, o'¹Pif iseQance( ,¿,  ² qreturn N G=Y  5andÔ  8   † .ò  ^6  4 
 n$ =2  0 
ª2  )• ù _tupleò ', É   ”   Ñ )| t =èNotImplemented©0getÔ®7posŽ ? 
|r  Ñ— Š X[pos]h Citere `   !([I e (])a  óa ("< ‚$ {k }a  {D0no}ï{Ñ µ}>".format(Q V9 =² @   ï  R 	² ?len± 4Û ‘@property€  [ X �F"if!isŽ÷   b°5getQ J	{†).strip(Çü R 0


š Ãwalk_stack(f� ¡"""Walk a  ` yieldQ 6ß1andòq numbertQeach  ÊT˜[ñfollow f.f_back from-0givh 3.â"noB  Ù ¥Gscurrent”  isû¡d. Usually p with SÍ Trextractãß0if Îqðf = sys._getframe().rf_back. ñ

    while f is not None:   õyield f, f.f_lineno 1f =  Q ò


def walk_tb(tb)D ð """Walk a trace+  T ðing the frame and ^ ò number for each !.
t ðThis will follow tb.tb_next (B @thusÇ !in[ òopposite order tº £ ðstack). Usually used with S  Summary.ex¶ !t. 1""" 0 tbj 1š Ü ,§  ß =Ctb =  Á ð


_RECURSIVE_CUTOFF = 3 # Also hardcoded Ý K©.c.

class¸ V(list�!A ï 2 ofO s.Ë Ì @= amethod  Åö  (kY ,4 ð _gen, *, limit=%�, lookupqs=True,D  8  ócapture_locals=False–   ¹"""Create a¾ Y from1$orÂ Sbject D f:param£ ò: A generator thatn3s (�‡„) tuples L   qincludee"hev þ  n :)D to 4 a™ Î!s | eÍxn a XQ: If \o(s"Ê immediately…”otherwise? ñis deferred until, Ò�rendered• 
Î—  Æãp variabWÃÁ¶	3be Q ad as oÙñ representations intoŸ FX–I  Ç ˜  "if› Ä  ž    ³ð = getattr(sys, 'Ý“ !',Ó)_  9 W í®zmit < 0i  4 N E = 0J F 
8 " />=S Ÿ „ò = itertools.isliceÚ  ž
Â 7elsÐ     Q acollecrY.dequR �maxlen=-Õ )‰ A ‘result = &(t Èfnames = set  orG `‚ 
	#coV îA r @file\ ” = co.co_ 	& 	"   ³ E   ds.add(? »  !  ¡ ¡cache.lazy
 * zglobals7 b# MustZ¢osd`we havõ¡lled check] h ~ $if6
 # f 'zsòÀ     f_local§s = None
  ùresult.append(FrameSummary((  3 ófilename, lineno,  `ookup_ P=Fals! ‘ocals=f_l	 %))M Dfor I P in fD %s:   i  J ±cache.check (5 K ñ# If immediate l‡ ó was desired, trigger es now.k #if » „ ¨  ¡ "
¡  ¥  f.§ M rreturn . 
 Á@classmethod ð def from_list(k 1, a )a 1""".  e 0CreÛ sa Stackšq objectK À a supplied V 5 of= Î4 äs or old-style2 v tuplesƒ ñ# While doing a fast-path � )²isinstance(Ï ,± E) is–  # m÷0aling, idlelib.run.cleanup_traceback and other similar code mayN ñbreak this by mak§  rbitrary fÓss plainè ÷ , so we need toL Ò  onç  8  R A W basi!ç) =ç (› 9 #inâá Ù7if 5+ (, ± 0   u ¬4 r  ! Jelseg   9·Rine =! 1   
l ™ ‰P =î §ormat(selfè A"""F ` the sòa readyd’printing.] ¥ Rt5s aÉstrings7 r  Each "  Ù&thï  :Eàcorresponds todRingle,x£ 6` e;  ü@ new;Õ   €may cont•…internal„2 ¡s as well, ñthose items with source text‘s Foôò ng sequences of‚ $amÈ  _ › , •first fewˆ ðrepetitions are shown� `llowed ~.‚  ´ £P UexactL `number… 1furÓ^ Cy”U = []G Plast_ÑÌ  Í   d •count = 0] 	µ œ
LAif (g € !isM P !O.# u %or_  ²  / « D  D   ?no B _ B  B àname):
         ôif count > _RECURSIVE_CUTOFF:
&  / .-=0 / ïresult.append(#  ^ ñf'  [Previous line repeated {s �} more 'C —time{"s" Ö ß1 else ""}]\n= )S ðlast_file = frame. Oname+ ° +   /no)  C T   ' ì I = 0  I+= 1 è ¾zcontinuÄ ‰row = []X 4row²@'  F	R"{}",™þ{}, in {}\n'.formatÙ
7,G  )~'if* �
™  „ s  c �.strip()] ^ocals_ @for • p, valueæ ssorted(\ 8 ž.items())A  Ë¤  R Q} = {U 6  = q =" ¶ 
B·''.join(row( 	J¿
u 	 ä ¯(/f'§!rreturn œ ò


class TracebackException˜t"""An e p ready ã±rendering.
Ú TThe tF ö% module captures enough attributes from the originalf P ñto this intermediary òm to ensure that no references are held, whil§ðstill being ableB àfully print orÒ cmat itÎ PUse `£ _ü `7  crO/ a instaƒ  7 Í €objects,k  ô ¿constructorV óindividual components· 0- :cï:`__cause__` A® *of|*1 !*.f J oontextL 3 N �suppress_JW  <>*__ *DS"thÏ 3 µ Pstackû  `S
 €Summary`@reseÃg²A  exc_type` œ $ðof the original ô+traceback.
    - :attr:`filename` For syntax errors - the " a where   H «  occurredX olinenoV   _umberX OtextV   P _offseR   Q intoû 
b 
?msg± ‚compilers‚ messageLA"""
a òdef __init__(self, exc_type
 Cvalu èñ, *, limit=None,J  û  plookup_…@s=Tr= ñcapture_locals=False, _seenA %):B ò# NB: we need to accept• hš 7 toK ppermit ›`wards qat withr÷existing API, otherwise weF Š ðstub thunk objects just¢ `glue i  geB b ð# Handle loops in __cause__ or  onõ&__4 "if@ is ] R 4… = set()¤  €.add(id(¿µ)! 0# G<rfully h” (�ñway Python 2.4 and earlier did)%ucase ofn @# be4bcalledM0no 3 Ö |   (¼ ,Â  )ã ¦ t 1xc_8 .!ais notB {   ¤ ç 3 )1  fGseenU 7 x@ = T	  ExYIion(_  ,  Ë ¢ a 
ê + n& % 5.__O.__3 ^   cNÄ t
 S C= 7Jelse€F Þs 6if .Ðä ÒÒ5 Ô& Ö&? >__)	Ø( ' Ü¥ç * =t Ý1 = À
        selóf.__context__ =  #
  0sel# ‰suppress, \&  - Ïexc_value.__/  5if " µ else FalseC õ # TODO: locals. � �stack = S õSummary.extract(+  † €walk_tb(l   áeback), limit= ø , lookup_lines= ,L ‚capture_“ = )+ ¢ p Qype =ç 8typÛ CJ ø- now to permit freeing resources: only complication is in thO ðunofficial API _format_final_Š  Ú 
  À_str = _some !¯É £ ¼ ñ  and issubclass.   õ , SyntaxError):d  {ˆ# Handle# `'s speª )ly- 5tfilenam5� . 	/ 3lnoZ%  á )no# R  ð  = str(lno) if = ²is not None~ 
 @  	i   ' ioffset)  + 9msg( 5msg%  œ ‹
OÐ R_load©1()
9 @’amethod €def fromú ep5P(cls,ˆÐ, *args, **kw
 ³ñ"""Create a Trac*2ExcC R 0 anF  A."""p  ì°return cls(  )r eexc.__|.__… É  ¸ à  ñ 
  @Priv¡ ð API. force all å `to be -)ed© `for frd0in b .1 
k! .W á "if. 
4 L  .Ë 	T* oause__F  D � &`_eq__(I h, othe{áif isinstance( ,Ñ ZÁ S a.__dicÿ=^  ‚ / çNotImplementedÇ S¢ i &e 6str1 ²eo_ùá ? A"""FÚ ÿ‰� part of h.]  ­ RThe r¡. D°a generator; Pstrin€each endˆ€in a new	O N„ Ally,q G àemits a singlerÐing; however,±@6É bs, it G s4 aÜ¥that (whenB 0pritò) display detailed inN .±about where® s®E e·Ð occurred.

   ò4The message indicating which exception occurred is always the last
I P  str; !in „output.
 5""" ðif self.exc_typeV UNone:"  6 ðyield _format_final_2 Pline(/ ,F Y_str): ureturn
 se =/  C   Ö.__qualname__+ Nmod * Xmodul(  Ã  + únot in ("__main__", "builtins")Ò ˆ  : �+ '.' +  ¬ 1if T ©ssubclass(+Û, SyntaxError_ 1
g 2?elszBfrom3„s{  _e| (Q )¹ 5def©
% Belf,ã ­ A"""FÖÍ nøs (internal helper).?ñ# Show exactly wheretöproblem was foundAfileëµsuffix = ''õ Í � Z noŽ ƒ c
Àaà'  File "{}", 4 r {}\n'.ª(W  Å  Á� b or "<,#>"‘ E &noÅ$el“ 7 !is• " _Ú U ({})� 	 ± — Dtextë  ¸ 0if  #  Æ = "   foo\nÝ [ 1# rB !  l z   "foo <  $  .r+fp('\n'  d C . #.l' [ \n\f* Ñspaces = len(/ 1) - D 
W ä Ö+  ó# Convert 1-based column offset to 0 ¡index into'AppedDt Ò @care’òE @or 0¯ B1 - É 	4 2if 7 J>= 0® S a# non-8  Ô"te ö(likes tabs) must be kept for alignmenÛ K   k C `= ((c  1.is 0() KQ ' ')H c8![:: ]k R 	o^F�''.join(9 ` )> 4msgº  Söno detail available>Xh p"{}: {}¯"¯È{, msg, L- ÞÜ Lÿ , *, chain=TrueØ >.% ï "If: \*B ñ*, *__cause__* and  on  Awillþ beYgmattedV  ÅôQ valuPáa generator ofvÐngs, each endóing in a newline and
  Âsome contain) dternal- ÷s. `print_exception` is a wrapper arouQ ñthis method which just D `s the „ Õs to a file.
� ðThe message indicat” G € ‘ occurredˆ ClwayX 5astK 0str; !ins uoutput. 5""" •if chain:  ðif self.__cause__m Šnot None+  / «yield from7 �.format(c = )i > j 	% delif (‘ jontext“ 	Õ T    ° 5 �suppress_ì> )Æ l È 5 Ê TZstack~ @ù'Traceback (most recent call last):\n'9 y\ ­ j' –Ô�_only()
I `collecëòs.abc import Sequence, Iterable/ ”functools)  total_orde„
? tfnmatch  Tcache eos.pat  ²pickle

# I Ptypesç q 1ionq `lement2n C‘  _tGUmallo½ * ²_get_object:  �!,  J “s


def _6Psize( c, signI€for unitl‘('B', 'Ki M G CTiB'3  ¤aif absO q) < 100ä J j!= 'B'*ö# 3 digits (xx.x UNITéS  ˜ 
8   ñreturn "%+.1f %s" % z ,º 
F ?elsé C B × „ * 1024 &@== '
¦ !# " 5ã xã %0ã .B  1 /=× ò


class StatisticØ i p differH± on memory «arð between two SnapshoTbstanceÃ V á__slots__ = ('­ ½ | ž   rcount')eÆq_init__O%, 5  ÍAze, 1 ¡A& & =2 ƒ  X#  q 0 =  
 Q " =Y ˆ Chashˆ p b  (¤ .} ,] c  \ )Þ ðeq__(self, other)3:
  öif not isinstance(other, Statistic)-  4 õreturn NotImplementedO  ñ(self.traceback == W  2  T   Aand 6 Fsize1   , Vcount-  !)
0 ±def __str__Ž Ç Ðtext = ("%s: a Q=%s, = A=%i"?  “  !% C ¾ ,$ °   _format_S 1  
 �, False)4 ó { %))U "if 
’average ="  a " / . D  ½ é c+= ", 8 j=%s" %ª  ¨ B Ì E S?repT - 5('<9  3=%rhig%>'i  «   gÙ  å , ä )ã�sort_keyqå‘ aB N ¡ –)


class÷BDiff{"""Ù ð!difference on memory allocations between an old ÜQa newó `Snapshus. g �__slots__£'£ @', 'Ç  _…   	  !S_init,”,’ 5   OG� & =I ½  ¿#  £  �>ize U   
# Ê " =#  3    ˜Chashç ¸   (#ÅS ²   X ¬0 ¦ 1  2 	”3_eqŠ ,ø‘ q z1  [Æ us&y ¶ ¶    û+2  . Y3  	ßãS (%s)ß’=%i (%+i)Û ª  †§ ì#Ñ _, Tru#>– J FÀ            òaverage = self.size / wcount
  ³text += ", 8 ð =%s" % _format_? ( …, False)B preturn E 
 Ðdef __repr__( !):  r - ð('<StatisticDiff traceback=%r o ¡=%i (%+i) °  %>'L  P   !% f .D ,é  G  m_diff,> "  . g /  0 '))Ô �sort_keyo Õ  1abs o? Q ‹ { 0 p 1  ­  Nè A)


mò
compare_grouped_stats(old R, new ¶  ! }as = []š 6for‡ , # 6 in; s.items(B  yppreviouD l W.pop(Š7Non,5if 5 pis not !   W z )= !S ­  (   A „Æ  % -z  \O G ‰. I  
OelseË P» &ª  Û  €.append( ì	ã	 =  ²P 0, -$ z @ # –  š9# ó


@total_ordering
class Fram‡1""". V of aâ. " ð__slots__ = ("_fD #",dS_initÑ!, ! # 0 isd Àuple: (filen� ÷ str, lineno: intŠ Ÿp " =E r‘@property¨  ƒ O d| J ?[0]E … C 1C  z E__eqû Wother !ifÈ±isinstance(" ,‰) ÇáNotImplementedâ  ž .!= P  	“l‘$ m – L<• Chash-� ¥  ß 	Ï /st2B"%s:•? 0ðlineno)

    defó __repr__(self):
  ñreturn "<Frame filename=%r lineno=%r>" % 9 .   , H .# ó)


@total_ordering
class Traceback(Sequence{ 1"""ƒ  B of ‚ ðinstances sorted from the oldest f© = !to £most recen . c ñ __slots__ = ("_? bs", '_³ n 1')
6 £def __init,,q 8s, / D=NonÌ  JÈ .< )S    #F ° is a tupleó {  cs: seeð constructor forç K Pormat@ aW B @; it` ðreversed, because _tˆgmallocH üsD 
pT#to{[, butŒ óPython API expects- G to F w 8†" =º (³ (&s)9/ { 5 l¹·‘@propertyh  Å3 ¼z Žù Ã	M  ? S__len: 1lenT .É 	=sgetitem= w, indexD Tif isç( U, sli £   § .((É) Ô3 inÇ :[O ]@FelseîV P _< D¥__containsÍ + Í ¤  ” UChashL E   W#eq9 w, other@ Pif noüV" ,€- áNotImplemented÷  	‹ 2 ==w å sól.z o œ Q<› /stö1strå 9[0]Ï +us = f"<Ô" {š D")}Ð ?#if“ƒ ™ 4
Œvs += ">< ¯# *f"~{t .` }E ”syf2ì q, limitÁ,¢_<¸_first=FalsÚ ã ú %[] "ifD  Ô  xØ " :> 0ò  !-_ò! =,![-• :d  (   >  :> = 9 À            óframe_slice = self

  õif most_recent_first:  % 
> —reversed( )0 Afor  2 in	 w 
R ðlines.append('  File "%s",  E %s'R  ‚ 	 "% { ¢.filename,i .; 6no)�  7   ! =W �cache.get D z.strip(K !ifG 
Ë d Ï  Á ! %. C areturn òs


def get_object_traceback(obj)d 1"""…Get the $ a where rPython F ñ *obj* was allocated.C R} 4a Th ¢ instance." qNone if\ p mJ á module is notŠ ¤ing memorym qions orq 5did* ª H 0ati® ` µ ¡ ì =_s = _` "ifös“  ¹ 7 “mî ïsŽMelse+  @ ‚


class&# ™ K T of aö Zblock¾ â__slots__ = ("Õ2",)b ò�__init__(…,Heî · #  Ô óa tuple: (domain: int, size Ÿ 3:+ )Œ H 2SeeÆ  !   constructŸ!orÞ`formatÒ 
\w K  © .Ê " =Ÿ Ï ‘@property� Ý © Û Ô ‹H ?[0]C  ß A 1A F Ç ((*’ 92:]¦%eq¤WotherÐ !ifÙ$isA(" ,o)  ‰ý áNotImplemented1 « d!= P  	– Chash˜ h d   J 	: ?str9 ²"%s: %s" % @ D2, _&_˜.
 ‰, False)c ?repd 1("<z $1=%sÊ3=%s “B=%r>ò  – : “ ,ß.Ã  ¤ Õ_‚ ”s(Sequencx º—sc3 .) N ¨ ¸�¹Y m�Ds: s“�Ž ÿÁ s'¢ ?lenÃ2len»©ðs)

    def __geótitem__(self, index):
  áif isinstance( w, slice%  , ðreturn tuple(Trace(t a) for  @ in f !._ !s[O %])m Felse{ V P < = ådef __containsÍ g ¨ ¤  ˜ … ” 
P %eqJ WotherJ hif not" 1, _« s+ Ç áNotImplementedj  ‚— Qs == S  )š Creprœ j ß ""<„ ° len=%s>" % _ A)


-ônormalize_filename(	 R  ° = os.path.5 7cas+ Ä 4if - ó.endswith('.pyc'L  æ # % =. Q[:-1]C » $ ò


class BaseFilter¼ S_initÿ  ²hclusiv‘*#in 5 =  FQmatch, ­ jraise °UErrorš – (¡ > ¢ 	,ú ‘_pattern,þ   ñlineno=None, all_frames=False, domain r  : ”super()._ñ ^ C   # ¥ @ = _û0' j È 2 = 	 é d Ø ' =å 
% ë # =ô »‘@property,  n5ˆ Ó\x Ü U  G _nQ_implH ³,É Z z !7!fnl . z,X Ò s  ¦Ñ   "if= n@ is B6     9 ETrue8 t(J (==Y ‡Å 1,| †: kò e@ ^ (b0 Í¸ ¯ãCback‚  4u
aif anyA .› ƒ  O  ä)  [� 7 â 	] œ < 8      : 	ž Àeno = traceb‡ack[0]
  ñreturn self._match_frame(filename, lineno)
8 Bdef ( (4 ‘, trace):  X Ãdomain, size Ñback, total_n^ " =8 6 Yres =† X  : (
 )/ "if, m Æ is not None‰  � ( ‹inclusiv  #  � Sand (S =Ž  z  3 ?elsI %orH !H w ¡


class D:²Filter(Base \ys_init__{Ö #, § þ ”super()._3 - Ì  Á"._; # =D ç‘@propertys | ' z ’  Ç J A  3 (B¯¦@ ^ (	� ñ b‚Snapshot'1"""Þ  2 of–s
 ñmemory blocks allocated by Python.=  E 	 ñ m � ýs  Ëg_limit?#q  is a tuple| ò �s: see _Tgñs constructor forz  ˆ°# the exact 5mat  Œ .R  cI Us& © ¦ ÜAdump$, *Ø   —   QWriteŸ sq into a9 F ( 4 —with open‡²"wb") as fpÀ 5   xpickle.’ 3p,  óHIGHEST_PROTOCOLÇÑ@staticmethod+ ÀEloadr Ï uLoad a Ì OfromÌ rÌ P½ � p´  ¢ !_f_ª€é#de ˆs, exclu . Ð ;if 5 
R!ifP2any([ ! ; „ 2forÖ6 < inn ‹ 9 ù QFalse�  ,ifÌ ¨  ¤  óã r ¨ ¤ 6¤ ¹ FTrue¦s§ sX òÕCreate a new ’‘instance 2Rtereda¡s sequence…Fters; Qðlist of Filter oñr DomainFilter instances.  If f ó s is an empty
  õlist, return a new SnapshotG ð with a copy of the tra` H 5""" @if n? sˆ (‚ Å, Iterable):.  ‰ óraise TypeError("1 ° must be a ©  }  ,c &%sv  H  d% type µ).__name__)~ i
’ ƒinclude_o U = []5  g /ex! 2for&D 4 inŠ
k  N )if, . Nsive+ / 
ž �.append(•o ã  1   ?elsO Ì O Anew_m s
  ð  é Qself. #s.* 	> �  1if 1 » 1 (ƒ,A K 
 × A Á )øB		Ä 4 õ .4(Œic(@ ,? Áback_limit)
ö àdef _group_by(h `, key_Þ¸, cumulativW%if" +Uin ('^ €', 'file  lineno'—DValu˜uunknown[ •: %r" % (Ž )í 'if› E and7 ’ y � … ð � mode canp�by used ! "Î1keyÀ ¿ p F@statß!{}ƒ  ? ñ˜ 
¶
.  i dÎs, size,} ò, total_nframe =  ¥  @   >tryY  0acec;   !s[` {  ö 4   ¡except Key¥] w7== r0  Y È  Sƒ Ó  - ,elc C` >[:1æ d Vse: #¯ Ê /i (‹Ñ  N¶[0][0], 0),  k  * @ = T\ 6 (2 Àtracebacks[t`race_t …back] =  +
  Mtry:  $ pstat =  %s[@ ], �.size +=  & Pcount' 1$ ÿ except KeyError— � Õ = Statistic(§ ,† E, 1)f JelseS Á# cumulativeè E s2  2for=‘ in self.d "s.`sR  2 ddomain� . ,  Œä, total_nframe™	r  D  v " "in C r  2 Ç 0ace q   !s[b Ñ‹ [ ÿif key_type == 'lineno'¥  1   y Qs = (
 ,¥   µ* #d �filenamef g [0], 0)n ­ D = T?= s¤ 6 RfÛ Þ ­
 qx M  0 |* € $ ù w ˆ"areturnp!s
1def (f,ò,¥v=False)]1"""B  º WGroupH 5 byE 2. Rv öa sorted list of<H ¥instances. g gg  ed¢ _ D_by(± 5 /à ! =} (9 ¿ed.values(), .® Ñ(reverse=True=ò ._" F_key? ar f£compare_tofÁold_snapshot[ ÊÃ t
ðCompute the differe:Ô with an old _   l U. Get`?as ¤UDiff  #, C5 byK  ?_by½2new±¿ ([ * =È O  _ˆS 0ed_%s(e %, © × $ ÐÀey=StatisticóDiff._sort_key)
  ñreturn statistics


def take_snapshot():1 1""" tTake a    of traces
 ñmemory blocks allocated by Python.D L  if not is_C 4ingm  ¡ òraise RuntimeError("then m\ â module must b Cing ‡ ±  L   "B ‘ations toõ Ø "' ˜ ‘es = _get¦ 7es( Õback_limit = #  , jSTW ,Ì . ð	)
"""Terminal utilities.0ð
# Author: Steen Lumholt.

from t7 ðos import *

__all__ = ["setraw", 
 õcbreak"]

# Indexes forC ólist.
IFLAG = 0
O
 31
C
 32
L
 ä3
ISPEED = 4
O ‚5
CC = 6P} ö(fd, when=TCSAFLUSH[2Put  ù  into a rawáeÿ  Âòmode = tcgetattr(fd‹  [° 1] =4  ð& ~(BRKINT | ICRNL @NPCK PSTRIP	 7XONJ ð J   J WOPOST) )   ) ïCSIZE | PARENB2 Q| CS8É [V   V @ECHO® PCANON	 AEXTE	 8SIGe pC][VMIND 1X C @TIME 0 5tcsK�,?)¹,¼7 L ¿è ¿ ö æ < Y£Define namñ%built-in types that aren't directly accessible as a 4 0in.Á
ƒ1sysb³terators inO €a matter; m @ but ðprotocol.  A large
# and changâBnumb8 z ­ ðimplement *some* flavoa C
# iŠ P.  DoÏ acheck UÐype!  Use has]     both
# "__E 1__"� q"__next €ttributeç bstead.Dð _f(): pass
Funcp1TypÈèype(_f)
Lambda l p: None)û Q# SamqJ X
Code= ø
_f.__code__)
MappingProxy%  op.__dict' S9N5pacž Asys.  S,Ô_cell_factory¶Ba = p F ø e ¼ 0non1l a © ølosure__[0]
Cell¦ g } (²yield 1
Gene= Àpe(_g())

asñync def _c(): pass
_c = õ4
CoroutineType = type(_c)
_c.close()  # Prevent ResourceWarning

as_ ðag():
    yield
_agf   ù 
AsyncGeneratorl Òag)

class _C@ ® dm(self² iMethod9 ø	C()._m)

BuiltinFunction% Dlen)  C  [].append)¶ ¿ # Same as R  @

Wr- ‹rDescripÇ òobject.__init__)
n 4 “ *  ¼ F_str+ X °str.join)
C#V + !di�   ù__['fromkeys'])

Modulä’sys)

trys`raise ¨ ÆError
except & ñtb = sys.exc_info()[2]ô�TracebackD I1tb) IFram~ ptb.tb_f " Z ñNone; del tb

# For Jython, the following two«ÿs are identical
GetSet  r.__code~?mbeÖ3 pglobals6 
¦ ðsys, _f, _g, _C, _c, ÷ð # Not for export
Ï ñProvide a PEP 3115 compliant mechanism6 @creaÒ
Anew_ ð(name, bases=(), kwds=<±, exec_body �@"""CJ  z B  „` dynam8Qly usXñhe appropriate meta3 A."""Ë‘resolved_€ 3 =   ( Ó < B, ns¡ © = prepareÆ > O + ? &ifÎ € is not å Š ±í 5(ns4 
Q 9 — : ¢ns['__orig· b__'] =Sæ Aturnÿ o
X Ø  **{!)
 ! Q r 0"""8ù lve MRO entries~ñ as specified by!5560v ýÄ s = list` ¬ ñ updated = False ‘shift = 0  ˆi2€ in enum‰eF ¦  RÂif isinstanc ,gI #   rcontinuk   !ifŸqhasattrW “, "__mro_ï ?__"F å Š.@ W é u ø .TrŒ È X {, tuple‡ ú(· � must reaC "o † FelseA  o As[i+ˆ:  +1e š 0   ( „ += len(" Q) - 1' `ò o – )  Ðtuple(new_basô6es)

def prepare_class(name, bases=(), kwds=None):
    """Call the __< À_ method of  °appropriate a\ !.
B ÂReturns (met  , v Rspaceq â) as a 3-tuple7 */ O* isf d *Q - « !d Œ r 0  ç + ô an updated copyÑ ‘passed inñ argument with anyF '£ û' entry removed. If no< 5is W ±, this willK ñbe an empty dict. 1""" "ifK 0is ›š ž Ç Q = {}' Melse  N (( ñ ) # Don't alterRñprovided mappingG 8if Ú Y  ö ! =’ W.pop(- )A 
ˆ "if_A  º E Qtype(~2[0]>   
B   0 d Ñif isinstance[ , M · 3 a# when� Ba  ñ, we first determine most-deriv«l M  m !eaó�invoking9 Ðinitial candiJ‚ directl% = ½ °_calculate_ ¶ þ û £if hasattr 's'Û Ans =Ù .! ÌA, **õÁ 
O= 3r�K B, ns�(® 	ÌÒ  D D.Çcwinnerº ™ 1for iY  4  '! =¹&'   1subÞ(Z È5 , . �continueu   
? l ", J ?  ! =¬ ` I  M ^ *# rðraise TypeError("ÿº ² conflict: ë P  "c3 Eof afF < Pmust _ä (non-strict) ;w 	Ýz  es 1its"s"’G("

• €DynamicChƒAttribut �"""Route ì Ã access on a³€to __get$ #__NT7i.Ðdescriptor, u­`to defÐ 2 V  8ñat act differentlyÂu �ed througÛ è U7 an ” C.  It± qremainsO  normal, but Ð  toÙ‘ i Q  Ÿr@d toIM E('s ¨Bhod;=°is done by a �ghÐ.

    This aò(llows one to have properties active on an instance, and+ ðvirtual
    attributeN ñ  the class with `same n Ð(see Enum for[ ¡example).
K 1""" ödef __init__(self, fget=None, fs 3del 1doc
 !):C  š  : .9 ! =@  0set ;set 0del "deá  K ð# next two lines make DynamicCð A =ø $asXyf ñ__doc__ = doc or¢ . 
+ �overwrite3 1 0is ) ’# support[õ bstract methods' S__isa" ! ˆ €bool(getÑ(7?, '+ ¢', False))¶®&ge­2Qowner�%ifY Í º s?if ® 
*  . areturn2 í  Uaise �uError()# $elg  ñ ‰ rC ¶"unreadable"Y � ƒ(	5s5WvalueÈ£  ²,£ `can't 5  Ó¤¢ ] L› ", z ×edelete‡Æ ‚ž  7ž ` C¡ 5del¡ <ggetter0fRóQ ¦ 
LJelseHPresulAtype_ )� Aset,fq.fdel, l "or ¾ N .u =- 	 ‘8‡ ‰sï 7setï , 7 = ³ ­ g­  ã	³  « GÒ›?del¬ › ± _ ¬ ?
“ò _GeneratorWrapperÖ�# TODO: Iœñ ment this in C.©ò	 7genç · wV qd = gen:  “ Risgen 1.__‘  __‚• LType6  H®©1gen¨ !',Ï‚m ðqualname__ = getatñ'tr(gen, '__qualname__', None)
    def send(self, val):   preturn  ±.__wrapped./  ) (  A SthrowB Ÿtp, *restH 6 0 O QcloseO D + Ë •@propertyI ogi_codK - = K OframL . M runningæ 3gi_0 Q ŸyieldfromS 2 U !cr,8 = 	1cr_É   . ’    Rawait 
f  .�__next__©    sà< Niter< iÆ¦lf.__isgenÃÇ«   !__¾ r__ = __o  

} ãcoroutine(funcœð"""Convert regular generator ( ¥tion to a @ Q."""
m éif not callablY œ õaise TypeError('types.I  () expects_ E %')\ © ð.__class__ is Func“  U A and‡  l qgetattr3 2 ;.
F @CodeB "):l  A ¡co_flags =ø  1 dode__. + À# Check if '$'š !A  ¦ .Ÿ ð# (0x180 == CO_COROUTINE | †ITERABLE 4 ˜ 4if ‚ 1 & E   ‰ £ Ü£ 2¢ ŸGENERATORŠ *20‰ ö# TODO: Implement this in Cf  Ó ,coe(  #æ 0‰ 	-  ÷ ¬ä = co.replace(75=coÅ" |] Ö  r * L Cð# The following M å�primarilyusupportîas thatž ## S q‘-like objïÖ(for instancers= ôcompiled with Cython).› RDelayv @oolsq _colle‚s_abc imœ €or speedÆ 1up ‚ •)  Y O ƒ  V  @'t+ .TssP g  ð ped(*args, **kw
 p n  & Ð
        if (÷coro.__class__ is CoroutineType or
  / ‘Generator/ Aand $ ùgi_code.co_flags & 0x100):P 0# '/ 'y �a nativeA ‚ ÷ object or an iterabl  	K areturn=  ð if (isinstance(k õ, _collections_abc.Ã U) and=  ÷ Onot A 3)ß ôeither a pure Python g>Þ @tor,î )it† ×# implements ¾ .¾   (~Qdoes · 3 K @ ½ .* P_qWrapperF)+ Âã $n s= of± q ]�# some o$÷ö-- pass it through¢ ž  Ò
Œ  w¥ Ad


¸ ðicAlias = type(list[int])


__all__ = [n for · ð globals() if n[:1] != '_']
"""
TheK ñing module: SupportC tgradual# ð#as defined by PEP 484.

At large scale, the struct!of `  ð following:
* Imn s«1 ex ð, all public names should be$ ólicitly added to û .O ònternal helper fun:… $seJ PneverP `used iió de outside this U Á_SpecialForm© 5itsBs (s  3Ñms): Any, NoRÃ0, CŽàVar, Union, Op®‘al
* Two ®‡es whoseX 0can¢  ëR argu1 inù iB  ü   Ñs: ForwardRef¡  ¾0Vara hbe»i¨’ics API: \ v˜_VariadicvØðlatter is
  curren‹Qonly K�by Tuple‡ @Calläð . All subscript¶±ypes like XÃ  ,=Ø],
  etc., ar3of ™Y$seA « Ñ:0couð @partý  •ø ‘ consists ‡#: õ Â €Protocol\ P’Z@get_ˆò_hints, overload, cast, no PcheckØ 	 Q_decot e }  é esTsB ABC15fewCal p­ sI ´ ¼pes: Newq, Named£ ,  PdDict1  §¬} rËuio rela¼.@�
from abcÓ 6ð abstractmethod,« aMeta
içÊ     „ntextlib ËDools !op«Àr
import re ð*as stdlib_re  # Avoid confusion with the re we export.
im D sys ±types
from   # óWrapperDescriptorType, Method  ) ñ!GenericAlias

# Please keep __all__ alphabetized² ôin each category.
+ `= [
  ê ÐSuper-special´ ñ ing primitives.' Ä'Annotated', y …Callable tlassVar UFinal ”orwardRef Ú  VLiter0 WOptio@ uProtocoP 6Tupz  AH   … �Union',
¾ �# ABCs (§`collecf ds.abc)ò ÀbstractSet',)( C.Set+ ¤ByteString} …Containe  †extManag HHash:”ItemsViewH I[ %toW 9Key0 GMapp‡  R 0Mutr  h  uSequencÊ t) " Sl YValue� AAwaip # \AsyncÆ  ë …Coroutin� C¨	M ?aN pøóStructural checks, a.k.a. pYòwReversi’ 0SupîDsAbs‚    |Complex, FFloaPT >Ind* -In( @Roun„Ï –Concrete � Ã·„ChainMap„ VCount€Dð 5Dico xDefault 5Lis xOrdered '– w'Frozen SNamed© JÁNot really a¯ H ³U ' 	òr ô # One-off thingÂUAnySt+&caÀ f’uget_arg¿  Porigi/ $'  ÍU_hint( 0New± ?1no_$ W h_decor«uNoReturi poverloaáy �runtime_T  ·X 5Tex�ðTYPE_CHECKING',
]ðThe pseudo-submodules 're' and 'io' are part o9ñe public
# namespace, but excluded /Bpbecauseóy might stomp on
# legitimatesf Cose Ž ƒ.


def 7Áonvert(arg):Ö`"""For„   –qNone to3( !),Î s|s F_A."""H  if arg is 3 \  ^Ðreturn type(Nñone)
    if isinstance(arg, str):  ! ðreturn ForwardRef% <  ðarg


def _type_check& ó, msg, is_argument=True] @"""C* ¤ that the & ` is a L c, and h ñit (internal helper).
© A1 ø
special case, accept NoneE  V (  ) ö àead. Also wrapû AingsT Ginto÷ /  %ðs. Consider severs Qornerz ñs, for example plainP Ÿ óforms like Union are not valid, whil A[int�]�OK, etc.N 0The^4òhuman-readable error message, e.g::1 Ú" [ôP...]:M £ should beƒ"."2 ‘We append«‘repr() of `actualÁ òue (truncated to 100 chars)¸ 1"""À !inï ’_generic_B= (G ¢, Protocoll¨HŸH  ò+ (ClassVar, Final)Þ Targ =À`onvertÂ| (%_¨ `Alias)b×  X  ÿarg.__origin__ in ‘  2 °raise TypeE¶€(f"{arg}ù1 as ©P"¡  Á Áin (Any, NoR¶_   9 ¨ O  Ò ê B, _S@€Form) or,  ¹ ’ ¶ Pñ ¼ \(¥,©|)Ò 
 (@callü Ô - ^�msg} Got¬ “!r:.100}.RsÛ÷3objZ 2"""i €an objec½Uq-casing¾sÇ If8  óÿ$weþaš�rter vers8Athany qdefaultÙ ;0.__Œ ²__, based o( Rmoduláqualified nameuBch iú@typiH€y enoughÈôuniquely identify $ aything†  elƒÀwe fall back„  • (>	ƒBobj,'.ctËN r 
ÑE © ai]A.__mö__ == 'builtins'`  - rd `obj.__- '!__k   2f'{# T #}. 4 !}'6   Ü6...m i e('...'ÍÊ  s.Function$Ø B  97.__§  'À

def _colleÐct_type_vars(
 ðs):
    """Collect all  ñ variable contained in s	 �order of@ ñfirst appearance (lexicographic - ñ). For example::
;   "_c} ž ð(T, List[S, T])) ==  !S)6 1""" tË Q = [] Pfor tž  Â sÜ  a �if isinst� ò(t, TypeVar) and t no6  N 6  : a .Ú Bnd(t}   R ø(_GenericAlias,  )g 9   U ¦extend([t · û.__parameters__ ifž ]ƒ Ñreturn tuple(O ò)


def _check_g� f(cls, S c, elen�  ö - P corrüBcounŽ 2 c of a O ñ cls (internal helper).|ðThis gives a nice error message–@caseP h ‚mismatch? Ò!ifŽ § ŠQraiseµET ±(f"{cls} is-   Bass"$¶alen = len(Ï  1if  !!=i 	°Too {'many'Ž7 >6 Ç else 'few'}cÎŸ ;¤ ò °f" actual {R Ð}, expected {û %}"Ð²deduplicateÈ µõ# Weed out strict )  ôâreserving the ¢òof each occurrence}2allxts = seti Ù!ifD$ 1) < VŽ  â 6newG “  à2 o  ã iny= 
   $ Y ‹  !   ¡ x.remove°z 6 = K Ý 9 BsserD ,‘ * sI mi º_dups_flattmÊ k"""An 6'°Union creat	  �€substitu #: T  ) sˆ Wamongp,à"n Š ÚW2# FŸ 0O [ `...],  2 á 
Tp¾ ™×  ;
Ap, _U 	ý.  2 F #s.ý¢p.__args__™ " -elV è­ÏQ) > 0¼@p[0]w j 
3[1:=e /se/ ë"p)Ÿö� /(_Œ ¨«t_literaPJ6vL: ÿ ,s ýßVµÀarameters:
   òif isinstance(p, _LiteralGenericAlias):
.  õ
params.extend(p.__args__)& Oelse4 1app4 + Òreturn tuple(V ó0)


_cleanups = []


def _tp_cache(func=None, /, *, typed=Falseª à"""Internal wru  r = òing __getitem__ of gè E ñs with a fallback toÔ PorigiM  | ñtion for non-hashable arguments.2 1"""  » ‘decorator» £  K “ Qed = W ƒools.lruç Ö  )9 Q  8 !.Û 2nd(I .  5r)
. @^  sM  ¢ pinner(*Ç|, **kwdô:tryÑ ˆ Àw d?   ) þexcept TypeErrorK ðpass  # All real e( ˜s (not ungòs) are raised belowt j   —  ÷ • # ø *!if†@ is s  `¦ / É9  ¯Peval_¾ò(t, globalns, loc	 órecursive_guard=frozenset()"ð """Evaluate allsñward references in the givenÂ" tqFor useá| D and A see: `docstr Ñ1get³ ‚_hints()L ª  "uz¥to prevent “infinite 4 !onV `ve ForÉ 2Refa ,
Œ't,) Þ0t._c (_pa ((_ç(,  ‡ t !evã# =¬{ +/(aÞ)½! a°/ 5if b 5= t" � … r.S  Ï 	¿ = " (i Ú4__,‚ * _ Å‚ `.copy_Ö(¸ 6   P


clÑ _F6Š `"""Mix² 8¡ohibit sub* 0ingÛ ó__slots__ = ('__weakref__',Ö ³ __j_A r__(selfÈ¡if '_root'ã0in éž  ñ   V©P("Canh € specialn 7¾ Ees")ó PImmutY ÷ PindicÏñthat object should’  be copied. � 		þ ƒõ  ž+ðdeepcopy__(self, mecmo):
  òVreturn self


# Internal indicator of special typing constructs.
# See __doc__ instance attribute for@ òfic docs.
class _SV óForm(_Final, _root=True¥ ó__slots__ = ('_name', 'q  ¡getitem')
× Ðdef __init__(Ù #, " S  û   #._ $ =" A    n  !._ +__& _ü E .� � µmro_entries– Wbases” òraise TypeError(f"Cannot sub3{· I!r}"ë CreprU N Ú'´A.' +æ.Ä › oreduceA  s 5 Ccall3 ï, *args, **kwdÑ 'otiate Ô " ucechecki 8objâ 0L 2} c7ô be used with isS *()?^
k /clÊ k 
S k ¡@_tp_cache=¤ß ™parameter{ È‡2 ×0 $

VyLiteral] c œ b(typed¨ F@ù

>AnyÒ ¤3"""½  }e— †Ran un‹Qained! .Úò- Any is compatibleSevery*  è) PassumB ño have all methods.×- All values . b’ ós)3Any‚ ‘Note thatM ðthe above statements are true from # PpointH qview of|  2 !ic´  ¤ñers. At runtime,ì pshould /
ønŸ K 2or IH Ü 1""" ä!isW ÐsubscriptableCÉ1NoR®Î ’functions5n© žƒ’Example::â 6’timport € #  ]•stop() -> Z þ"  õ PExcep~ „('no wayLBThiszð	is invalid in other posi6 ôs, e.g., ``List[‡ 1]``Z€will faiVÏ' ‰8Cb4Var‰Àarameters):
ð)    """Special type construct to mark class variables.

8 ðAn annotation wrapped in C/ ñVar indicates that a given= ðattribute is intendedq Ëbe used as ay A and= òshould not be set on instances ofp · ’. Usage::µ  T ‘Starship:Q  Ï …  stats:¿  [Dict[str,¡ “]] = {} #A @ 0damj  . R = 10V  #© Qš 6Áaccepts only’sù ! cm ñ ófurther subscribed’BNoteû M !is'Kqitself,Q FÄ ytwith isO±() or issubP1()./ 1""" €item = _;ð_check(parameters, f'{r )} Ö asingleÝ 1.')H ðreturn _GenericAlias(; 0, (d s,))

@_ªãForm
def Final( x )×
Ú:ingÜŸ  fE @ namªo—  Ë %erí% ‹°re-assigned'�overridde�  a¢53µFor exampleŽ’MAX_SIZE:Ê q = 9000$   ò
 += 1  # Error reported b ¬ Hâ`ConnecœˆsTIMEOUTo @[intØ*10< CFast@ 3or(
 3ionX	K  ëœ ATherò¢no runtime½  œ·Àese propertij k kt_Unionk  =!;  ñ [X, Y] means ei´X'Y°ÐTo define a u^ ,üS e.g.B òint, str].  DetailsÎñ- The arguments mus ‡0 o e pat leas*eŽ@- Noz  . I  Ž3a sAcase+ isu1lacuž k (D -´ €Î ñs are flattened,Ù ‰ 0 [,ê `, floa—=!   ¬o #a R vanishs ÷=ª! #KöÂor actually •¡u •Redundant4ç 0ski r ÉL, =Ü ]` °When comparI7, tîP orde”o ignorZ9]p ð str, int]

    õ#- You cannot subclass or instantiate a union.
    2 ð use Optional[X] as a shorthand for U8 ’[X, None]A 1"""I ñif parameters == ():  f òraise TypeError("C£ 0tak� X ñ  of no types.")< i Bt isÀ 6ce(d w, tuplef  8 = * M qmsg = "m ð[arg, ...]: each arg must b‘  … .Ø 	U r  (_ á_check(p, msg)Gp inv 	@ ÷_remove_dups_flatten© 2 Jif l  O1NHeturj 1[0]/r _ã ùGenericAlias(self,œ õ
@_SpecialForm
defþ. | 4"""!§!.
v   5ÿis equivalent to3
 t)= NBP, f"{¶ 0} rR !re�Ringle} #ô ó Ö ž(¢Ü)]

@_Literalí  ì 2  n 0ingâmÒ ‚define lW   ò es (a.k.a. valu  #s)BThis= 0can_@usedI Pindic‘tö R >ñthat the correspondingm€variableÕ@func°Ø! h¶†  7‰ O �providedJ Á p(or one0sev+Ü 2s):â   óvalidate_simple(data: Any) -> Pò[True]:  # always ¡ s  y   |] eMODE =B €'r', 'rb w "b'àˆ ðopen_helper(file: str, mode: L � 2str¶o @ °'/some/pathj 0r')º aPassesÛ•¸ 
: Uother; Btypo> ã  ‰@ "erì % y§%beªòed. At runtime, an arbitrary[‰  is allowed¥f Sargumse W, butÉ  ^2mayG Ámpose restriIsÓ # There is™'©°' call beca7~ s× A arel #¿ 0s, š ³ l â6g 
ma_ê_ sp6 6try+% Åb (p¿P p, _Öq_dedupl»q(list(_pB_and# f "))Ùfexcept&aunhashÓ{ —  ¹Bpass;rÜ_ÞÀas(self, parñFameters)


class ForwardRef(_Final, _root=True):
    """Internal wrapper to hold a foB ñ  reference."""
9 ó__slots__ = ('__+ —_arg__',  @code 8  u  % �evaluated* >   ?  isz ’ument__')¤ ÷	def __init__(self, arg, -  — ñif not isinstance(2 3str1 %   óraise TypeError(f"o-õ must be a string -- got {arg!r}")2try� [    4“ = compil… "'<G >_ 0'A Ñexcept Syntax’ 
P ¯  ± Ïn expression¶  S.û  =dÙ #  × 3 	 %  Û � = False+ o = Non& ð}  )w *Òglobalns, loc	 ÷ recursive_guard;if ê K in 5 —Qeturn< ã ƒP ž dd__ or” 1 is°­ 
^ 4if   )  #H and=   
5  ~6 =, E= {}£  $ /el_  K F a¤ E ! =Ð 	E �type_ =_ icheck(  ¯ 1valÚ± …5__,U ë-),@ ßsà™@ to � >s."> r=Ù *__: ß Â 8 û_ƒ ý ÷  ’ â ,˜K | {b Ã
õ’ 
 ‡ ¸ eFrè€Ã „5_eq«Hothev›" ,è’ 2v €NotImple%ed” ´Á  (` °   
¤i `AL == I  &an�  ¯  ‡&H Ðvalue__)
    ü    return self.__forward_arg__ == other  

: Ðdef __hash__(@ !):   V    B )C OreprC 2f'F” PRef({g L ó%!r})'


class TypeVar(_Final, _Immutable, _root=True« 0"""0 P vari# .— rUsage:: U  T =W ó'T')  # Can be anythingù A* áA', str, bytes6 @Must7 bstr or f 	‡ ñ!s exist primarily for the benefit of static type~ ñ	checkers.  They serve as8 ¡parametersK Sgener= s$ AwellF a! ð function defini  a BSee oGJ  ¡ 2mor‹ pinforma. I on n 5.  4 ] `s work‡ ufollowsz cörepeat(x: T, n: int) -> List[T]tb  '''RÏ0a lAñcontaining n references to x.'''ó  °R[x]*n“ õ q longes€ qA, y: A~ Ax  ¤2  ¤0twoOingso áx if len(x) >=
 ’y) else y† ñThe latter example's signature is essentiallyì„overload—Aof (ˆ1str¼  ~Qand (™ "->‘².  Also notÏ@that¨  Ý °arguments a~ AnstaR ‘rome sub  1tr,b 9  ¯ µ °still plain"yó At runtime, isi^ p(x, T) ³ $isa !(C wG Qraise£SErrorM SÂ¡ed with coón Œ +(ra » cè@used6@declù @ ; îE  /qPEP 484 )À details. ByiJault< b“ I ain allô´sï ¹ õintrospected. e.g.]‚T.__nameé$'T  ²constraints !()� "   •  BFals* %ntK #  " NA.___ ¡�QNote z onÙ6ypeó  1óined in global scope ö �pickled.´ 2"""KR__sloÑ 4 ('ý Ò', '__bound__ 	Ÿ 'Ä& 'Ã 5 ö  sdict__'Ô  Ï __Hï , �7, *r !, Œ _=None{  z=U*, ¹ Þ ­ 1 g ŠÐname
        óif covariant and contra 7:
  óraise ValueError("Bi) õ types are not supported.")C uself.__o ¥__ = bool( -  Ž 1  5 Í ‘nstraintsÏ �bound is— ONoneÓ 4TypÒ &Co@ 0canÍ ñbe combined with T 8=..Ý {  Vlen(cO o) == 1 pA singlr ˆ ½ wallowedQpmsg = "¾ �Var(name,Àw, ...): ’s must be¯.."œv smptuple(_Ýø_check(t, msg) for t in^ 	‰%
î  _ Y  A, "B±¨ aª iOelseW  çÚ :try/ ðdef_mod = sys._getframe(1).f_globals.get('__Sñ__', '__main__')  #þ …picklingj òexcept (AttributS,1)Š 	² 4if ¤ º!= 'typing'; KamoduleL3 
� Ðdef __repr__(, z 0if  
Š
^ Áprefix = '+'P  (el: €/__> -> ·e ~' sreturn  +ª ˆ
Ü NduceÞ A â 8 
ãis_dunder(attr1   p.startsä ý!')B 7end ó

class _BaseGenericAlias(_Final, _root=Trueg �"""The ce9òl part of internal API.à PThis »1eseÆ" gb € version8  ’’ 'origin'– Qargum7 ‘'params'.ÁQThereŸ�two kindF `hese aº €es: user{ê �special. »  Q onesT  ípwrapperú¸Qbuilt‚llection‡BABCs. A.abcZ !se—T `have '·ð' always set. If 'inst'°False, then Á Q can'Ü ( ‘antiated,V tS isá �d by e.g.Yring.LisùhR.Dict4""" <S_inito", yP, *, n é , · =Ëô 6‰ % ! =, ‘   4 ! =;  _e Ý ! Qslots   u  ˜<í1doc#edYÈ ð call__(self, *aórgs, **kwargs):
  öif not self._inst  " ðraise TypeError(f" " {0 �name} canC 0be @ µantiated; "e  J  Tf"useI À_origin__.__U Q__}()O Uead")I ƒresult =° 7  (*× á 2 ;tryÒ C !._< ƒ_class__R 6 ò except Attributý 
H Epass0 rreturn Ÿ 
 ðdef __mro_entries__(6h, baseƒ�res = []7  ',ifà ¤"in; 
ˆ ¡res.append_ Ù  L72i =; a.index)  dfor b ^ j[i+1:]d Rif isÝñce(b, _BaseGenericAlias) or issubR $  l Ü   Ubreakî Jelseo Ó E . j¨tuple(res)nugetattrj  € ð# We are careful ú õcopy and pickle.j a# Also$ ðsimplicity we just don't relay all dunder ½Bif 'i �'d ‘.__dict__x  <B_is_B (´  0ô Þ ¾ç!, 3 ¸ ³
»V +s+ W, val0<if ™  ç o  Ë !('¬A', ':	 ‡nparams'G  Ã ¦super().__y  H s ¼ / õ > ? p¥Ucheck7obj� OŠ³2 Ptype(1 	Z&  = I, clÈ,â"Subscripted g-s.Ÿused with)!" O(Û  ª ó$s")


# Special typing constructs Union, Optional, L¡, CallableW TJ0
# Žsthree sS   þsñinternal bookkeep $ofÚ  ‚ ¡es:
# * __@eter]Qis a ²À of unique fk  m ,   aQ A
#  U , ûexample, Dict[T, T].h ƒ== (T,);„ T ­  ƒ Àreference to’ æype that was s­,{ Re.g.,F o 0intq U "== ,ƒthe non-æ± version ofK    ë .š  ­:__  F�arguments�de— 8ing˜ — R ð int).


class _GeneôricAlias(_BaseGene ò-, _root=True):
    def __init__(self, origin, params, *, ins6 ¤, name=NonA  E …super().I C 8   8  = )x  7 �if not is" Tance(s Htupla  .  4 = & I  ¸ Á.__args__ = ? õ(... if a is _TypingEllipsis elseˆ  ^  -()> Ompty; Pa fory nE« Í Beter± ó_collect_type_varså 9 - Bº² ý amoduleÿ ~4.__ 
ë ë&eqéCther N c �o" 8, _E1  5 ñreturn NotImplementedp  Z2.__š  ¥ != \  4  8   Cand Ý Ú6  )Ú ChashÜ ¤     (‡ ,` )O ’@_tp_cach#8sgetitema i $ifN æ Cin (;§, Protocol3  æ ó# Can't subscript 2 …[...] or9  .'ðraise TypeError(f"CanTN …already- @ed {W-}"]ú¡"s,K³  Š€msg = "P;ßR to gƒ Ý’s must be %."Ð V ¾Ñcheck(p, msg)V>p iV_( _i ç¢Q, len 1.__d ˜ $__î … Ït = dict(zip0 Q )71newuU = []É ü rg¨  h™
·(ifùAarg,È(Va’ œ    arW¦ F[argl   /elL  (´,U)Ð E 1sub{s = arg,Ü  +    í2 
Ø     0sub¤Ž½ !x]ÅxA Q 9  ô Carg[K 
ö |¶.append(argH õ¢copy_with(Y9   ß$  3 êÚ Q s__class
Â8 í K  ._±A  íi { c__reprM ™ b2elfA ‰   S Q = 'tÔð.' + self._name
   belse:
  õname = _type_repr(self.__origin__)/ ÷args = ", ".join([6 Ãa) for a in B  0 6__]A  return f'{v 0}[{" A}]'
c ádef __reduce__‡ )¬ #ifW  ;   Å ª Ò = globals()[‚  + ]\  ' ü 9 / ó 3    � = tuple‘ 0.__ pif len( ñ
) == 1 and not isinstance B[0],K ×  ™  ; @, =  { ,òoperator.getitem, (¶ ,/ );³mro_entries@w, basesp 
Gõ   # generic version of an ABC or built-in class�  ¶ ¡ ªsuper().__ y 2 x eR is G| 
Ï°if ProtocolMI 
"  (^  2i =ó a.index´
"  ¥bX n[i+1:]^ (if¾ƒb, _Base¯ aAlias)çbÆ  ì BG  “ (©   4 ið ,)


# _nparamsZ ¡the number—�ccepted ! Ñeters, e.g. 0|ÑHashable,
# 1 AList¨ 2 ðDict.  It may be -1 if vari8 k '
#d d are a| ó(needs custom __˜a__).

&˜ _Special/(AÃ, _root=True¡EinitÀíP, *, V7  , âD=NonB  q!if  @  
– 1 2 = W 0.__ %__§Î† ) t  y t  8 YÊ¤ 3 = 
 W &ifr €module__,'`Jins'¦ P @_doc( O f'A§{� p.__qual’ U__}.'v ñX ¬ /}.l m ¡@_tp_cache Ç…,Q‹ :&Øs% B = (
 ,~0msg—P75 to0 Ø`s mustñ !."§  ,L ãÐÂcheck(p, msgÖp1, w _( _@	æ ,¬4 ûˆ“copy_withÒ Ì  * < H _c , PÀ params,
     °name=self._ c, inst   0)

< Ðdef __repr__(/ !):   ðreturn 'typing.' + " Q ? ÓsubclasscheckH W, clsM Pif isy øance(cls, _SpecialGenericAlia2 ƒ $isc  : Ã.__origin__,’  )¾ nif notu n c !¤super().__¦ 	 )creduce"I ¯1


R¨ _Callable· ((_ Ã, _root=TrueT Ö	cassert8 T == 'g '@1len .__args__), S2 and@  ö [0] is EllipsisCÄ&n«ÿ $(fkŽ  I   ñf'[[{", ".join([_typeÀË(a) for a inž ¦:-1]])}], ß  M   7f'{D àÖ  -16 '+Ã !* =y L Œ(Q ) H  ?3...À ™     € = list(  [:“ !,  5-1]a Bôoperator.getitem, (K5 )Y_Type(‹X‘copy_withx, param¸Œ ºaÀ? ,Ê  ÷   ¯Ä  Õn©  "� ° tuple) or ² k) != 2ÛPaise BtError("nÿ must be used as "á 
8 ö[[arg, ...], result]."* ù # =|[ ñ# This relaxes what+@ can� ÷on purpose to allow things likeH �PEP 612 PÝ §ñ.  Responsibilityl`whethet@userWusingI [Ó 0 pr¢ ly* €deferred‹ pstatic Ì <Eers.F 
; -§A = (¿1)-CJelseÆ9 \ x2 Ñ»W@inne5> $’@_tp_cachMˆ2  I � } Üðmsg = "Callable[args, ’result]: 	 ó must be a type."
    0= _ r_check( e, msg)* õif args is Ellipsis:  N ôreturn self.copy_with((_Typing4 ,“ )Z ð not isinstance(i Š, tuple)e   2 = " C  2 (Ë `onvert* P) for¾ 0 in s9 �params = 4 + ü " × 8 À)


class _T­ ôType(_SpecialGenericAlias, _root=TruÒ ¡@_tp_cacheFðdef __getitem__(G#, g #if [ == (« ‚_mpty,x
o z  |
 ,#rif len( )š S2 andª 0[1]56...Ç  0qmsg = "9¿[t, ...]: t¬ 5 *p «t ;[0]® , ;p, ”
• T0, t1š OeachŸ 	‹ " =¸†Qpž ‡p…, B« & eXUnionX((_ f  W�U~ ^ [u ']
–%eq‘Wotherw;if ¼" 1, _N ž 6 žáNotImplementedu  1set
0.__ã!__^  g  ¯ Chash± t å   p(frozenG  F )G NreprG  ‡ " =æ• ¶ 	 $ © 2òC![0 qD(Non ÷  ­ 1f't=².Optional[{Ý œ  Ú…s[1])}]'‚  A $eli zi 30i ¢  super().__“ 0__( u¢_value_and² Biter"Seters™F A((p,š2(p)­&/ iLJ 
^
’ _È"p  ½  l  Å Êx   nƒ ?, ö	°Àhash__(self)3:
  ò<return hash(frozenset(_value_and_type_iter(self.__args__)))


class GenericU ñ"""Abstract base c$ Rfor g(  S 1s.
„ A 0 is ñically declared by inheriting from< Cthis_ ðparameterized with one or moreT Áe variables.> åFor example, a‡ @mappf  ¥ ò might be defined as::¹  z M0 "(GÝ ’[KT, VT])fñ def __getitem__Jø, key: KT) -> VT0  6 "..§   s  # Etc3T÷ €can then£ !us  w follow¨  ~ Ãlookup_name(â #: » ³ ’ ,ï ault: VŸ <try® G[ Q[key]e¾ ÿ except KeyError= 0defu 8 1""" â__slots__ = () òis_protocol = False“¡@_tp_cache)  ø !__|Qcls, /s¤òif not isinstance(# w, tuple*  Ò   “ 
 ,š   I  € and cls× _ TL 
þ ¡raise Type(º  I  4f"PÜð list to {cls.__qualÒÀ__}[...] cang –be empty"— fmsg = K sG 	�A musë ù"s. … Ë =
(àcheck(p, msg) ÝDp inXÅ "ifÿ $n  3, P¼T#G5%  Ó P onlyâ”subscriptã_uniquÞ º   �Hall(Ý,s>Var½ 
  D ¤ % ¨]¤	 c0allÍ  g“« M pif len(‹Q)) !=  ¦ Tbž Jelse| 4# S˜ 8•a regularÐ1sub…Ð1  _C_„(—,è ãî  ØsXo_uXAliasC )Tinit_… "__( *Ç`, **kw
 �¬super().__9 4 � –tvars = [õ°if '__orig_@s__'!Ö jdict__Ge% =6 in;.D r ‡@  Ð and cls.__naóme__ != 'Protocol'
  •if error:   °raise TypeE õ("Cannot inherit from plain Generic")A úif '__orig_bases__' in cls.__dict__n ðtvars = _collect_type_ (5 L h  © ¤# Look for‰ å[T1, ..., Tn].• - ¢If found, t ÿmust be a subset of it6   ý 	: /is)  ’Also chec’ ªand reject,,– ( …multipleÎ ;...Æ gy = NoneI   qm8
s ð if (isinstance(; 3, _Ð©Alias) andd  8   1 .étin__ is¶ )m  5 2if ½ 0is Q Â *  . „ˆ  - ¡Ë [D Z ]'s.° @    #= Ü Éparameters__€ Ë e‘et = set( 
¿ w s %  % !if2C Ret <=J/et@s>ñ = ', '.join(str(t)* ÈAif tZ $inR }  ¦ Ps_arg¥
R gR gt»  > Ìpf"Some ‹Ò variables ({¸ y}) are"q F  !f"¿ `listed† õ{² /}]ê G Dg ló„ = tuple»ò

class _TypingEmpty�°"""Internalì�ceholderoð() or []. Used by TU @Meta`P Call  �  to allow ea  Ü /ˆ  à ‚specificg ¢s, without3 „ing themH Psneak7 òwhere prohibitedäL"""
Õ llipsisØ c... (e/ ").L ø	_TYPING_INTERNALS = ['__W C8!%, 4c:__'&üd'_is_pÈ!,  vruntime ô]

_SPECIAL_NAME‡ àabstractmethod› B _ÞUation ©« ?doc‘ p'__init  Á dmodule 4new Aslot[ ™Í 	 a'__sub÷ Dhook3 tweakref   ñ_getitem__']

# These ðal attributes will be not coôpllected as protocol members.
EXCLUDED_ATTRIBUTES = _TYPING_INTERNALS + _SPECIAL_NAMES + ['_MutableMapping__marker']


def _get_t ñ_attrs(cls):
    """Co� ˜ v from a ñ class objects.
@ òThis includes names actually defined in the @ °dictionary,AwellJ a? °that appear: `annota3 £s. Speciali ñ(above) are skipped.L 1""" î � = set() €for baseZ ócls.__mro__[:-1]:  # withoutç 4  (!if7 0.__ä  __@ 3('PËÃ', 'Generic'Y 5   …continueJ Ð ` = get¥ (” W, '__ r__', {}¹  L  ½  .  } Alist6 0.__SÑ__.keys()) +  J  ô K   pif not R p.startsý Ñ('_abc_') and & ?in § 
Q  U  N `s.add(
 ¼ areturnL s–Ãis_callable_	W_onlyœ�# PEP 544ƒñhibits using issubO!()² " U!s ?ö have non-methodk £ � 4ll(ƒ (ˆAcls,© ˜, None)) u_L)Ö ð
no_init(self, *args, **kw
 qif type$ d)._is_žNö raise TypeErrorj1s cØ  bÃµstantiated'ƒ ñ allow_reckless_&s_cheks(� @"""A% 0 inA !ceê) q checksõ slÖstdlib moduleøQe abc: ”functools$ ð indiscriminately h4 isq (]	Ëo)òwhole MRO of a user=À, which may Y6ainú
û7tryO�@sys.Ãôframe(3).f_globals['Ù ']^P['abcÖÜ !']¯ òexcept (Attribut b, Valu )GÑFor platforms£ U} )® �ñTrue


_PROTO_WHITELIST = {z "'c¨Pions.ž 1: [  D #'CL ´ AAwai  @Itere 0tor VAsync J DHash1 PSized. �Containe; 10ion ÁReversible',F ] '¡ðextlib': ['AbstractK ‚extManagP  “  r],
}


�_p€Meta(ABC Õ!# ‹Bmeta- Qis re‡punfortu‹°pexists n± because of¼ #©@lack{$__±bhook__´dU 1 __·,Q” À     # We neó%ed this method for situations where attributes are
  õ# assigned in __init__.  Àif ((not getC õ(cls, '_is_protocol', False) or8 _  ) ðcallable_members_onlyI m)) and4 ñissubclass(instance.__ ©__, cls)):6 ¦return TruÚ  if* .� ª 
5 ¡if all(hasÙ k ,+š  Ö r# All *lös* can be blocked by setting them to NoneR D  Z(c ” ,; )YC 2 ¼ 0is ´ y ))6 !  # b õ5getÍ_ s�
/ ; h €super().C´ucheck__ÄA)


Å# P:�(Generic,ºa $=_ CMetaç�"""Base " ¼ Ò Aes.
ç <   ëP defiàBas::'  Ë L 1 ( 3colo     0def™ îh(self) -> int#..~ ISuchz ñprimarily used with static type "òers that recognizÃðstructural subtypR(> Rduck- !),~exampleâ C± Ô Õ00 9 rfunc(x:À9  x. &()@ < îC())  # Passes/ ±See PEP 544Ü ‚details.x 5colesdecorat\@‘.runtime_d ~  act as si)ƒ-minded '  QŒ6 P  ¬ Êñ presence of given(Sp, ignor£Rtheirß X@aturŸ Pg¿ ;gOthey³1GenI ¶?[T]¹T Ž  ·  1"""é Ò__slots__ = (6<& =_  99" =Ã . 
4it_Ì __VÐ, *args, **kw
 » C
9 4 e  ¾ â# Determine ifEis aÑà or a concreteLú�!if,�cls.__dicÿOget(ä
H5 ¶ = any(b is­ �bi. ‡_bases__ó# Set (or override)raµ S hookº À   def _prot÷o_hook(other):
  ûif not cls.__dict__.get('_is_protocol', False<  G ùreturn NotImplemented
c ù# First, perform various sanity checks.4 — Ñgetattr(cls, “ runtime› ðif _allow_reckless_cla _heks(Í  Ñ    ñraise TypeError("Instance and g Ø ù can only be used with"î Z  4" @ì !Table ‘9s")A / ´@call, �_members_|  Að  "ZPMsÃ non-method ª ñdon't support issubm/()3isi™þ_, typÈ€# Same eÎø  message as forg z1, int)­ ³'œ ° arg 1 musta!,')(fSecond)õthe actual structural compatibil>
�  ´  7… in _get-_ s 6 @base6 *Š.__mro__1 í   0# C¸@ if § Ä€ appearsE   � XŠionary..«  J   0if œ  7  „ Œ| 2 	* [@ Ÿ] is None8  < µ   Zbreak«' P# ..."àn annotations,iŸt a sub-·ü : 4 = ó Ý  ô_ z__', {}üŒ Gif (ï7 �, collec� Ð.abc.Mapping)®	IM   U •N 4 úH‘, Generico   .«š € |  ?elsâÚ" FTrueÔdif '__M -1__')in
X6
7 2 = ptc �# We haveW ñ hing more to dof s(Ým •
‹ × o À ... otherwió-se check consistency of bases, and prohibit instantiation.
  1for/ ¡ in cls.__= 5__:#  * €if not (  + ù(object, Generic) or1  5    1 °.__module__< ð_PROTO_WHITELIST¨ < 	?nam: [^ ]† ¡issubclassÂ ·  $F Êis_protocol)ý  È óraise TypeError('P, ÿs can only inherit from other'Ø  P  '¢u Ás, got %r' %“)= ™Ðinit__ = _no_ 1


Ô ó _AnnotatedAlias(_– Ã, _root=TrueÙ ñ"""Runtime represent =Dan aO q type.
‰ ÕAt its core 'q �[t, dec1 À2, ...]' is G  �  b1theK 2 't¤with extram ±ions. The a7 ðbehaves like a normalE 2ing# ,— Ø ngy  l xsame asõ0ng  punderlyE  Ü ’, bindingL @t tod  esJ Aalso5  O 31"""* Qdef _…ó
__(self, origin, metadatal éRif is© 4ce() ¶0  4 G # =Z  F[ E__ +h �  2   \ 4  %__' …super().¿ " Á v × 
u =u O  Pcopy_ÏgparamsÍ ³assert len( Q == 1A  ³ @new_‹2 =   5[0] mreturná4 -, ¥ )® ›  __Þ¡’ U †"typing.Ì {}, {}]".fn%t(‡  ¨ ¥ R ê 2.__92__)Š %    ", ".join( 1(a)aû®   2   ¸ Oduceº úoperator.getitem, « Ò ,, ¬ N,) +5é 	† #eq‚ ,ÎCÖ ð,ª3  å zåNotImplemented}  ³  /Ns4  V    È^: P)__ä Chashæ ¬ Š   (� t)‹{C`"""Add Õtext specificH parf0Exa%: I r[int, r°à_check.UnsigneðNd] indicates to the
    hypothetical runtime_check module that this type is an unsigned int.
I `Every L ær consumer of : �can ignorT ñis metadata and treat’ 1 "as_  ðThe first argumentÇ ñ
Annotated must be a valid­ !.
; ‚Details: `- It'sÅ PerrorF ecall `L °` with lessþ Un twov sï P- Nesx 6 ó  are flattened:n  # [
 qT, Ann1 !2] P3] == Ò [# " Ã ÀnstantiatingÌ a	t¦sequival)i1 þpunderlyD  7 µ C| P1](5)¡ DC(5)‡ Ð  Ýñbe used as a genericˆh alias^ «Optimized ò ƒ.! 1()]Ä H [d[int-Dint,À	= > IListw   ?[T]@  y   } . �  G 2"""9Ó__slots__ = (Mðdef __new__(cls, *arg 0*kw
 %):Ê °raise TypeEÂ (" 9 Œ!noöCed."j ƒ@_tp_cacy Ôclass_getitemƒ gparamsz 0if Z "isY 2ce(# ó , tuple) or len V) < 2·  F» BÀ[...] shouldÈJ"ô  =  "§Šat least¦3 (a{ nd J ?@ion)(j vmsg = "¥ 0t, ¨ 7: tq ;.a  origin = _ M•[0], msg)Ø =C) 61:]% …return _ˆ AP(i ,IàÑ‚init_subÙT¡  !"C  O E {}.Œ €".format¶A.__m6&__¾ @)


” Û@able2 ]ñ"""Mark a protocol ¹ L:  ØESuch  ö8¦)d$isÁ "()ÆRJ° if appliedja non-‘ 8  Th@llowëò
simple-minded structural H`similanZð one trick ponieéð collections.abc sß pas Iter/{ pFor exar Q@$^à
        class÷ Closable(Protocol):
  õdef close(self): ...
" õassert isinstance(open('/some/file'),d )9 ñWarning: this will check only the presence of ñrequired methods,� 0not ñir type signatures! 1""" 0if * ñissubclass(cls, Generic) or  “cls._is_pñraise TypeError('@runtime_·  >r can beÂ ´applied to M  y Aes,'“ ` ñ' got %r' % cls)) • q P a= True$ `return4 1


¯´ast(typ, vaÏ�"""Cast a  ueœ a7ÍT‹J sU' áunchanged.  To lù !erÂ… }l; a• L G  ha Ae de( t±ype, but atB ã ó we intentionally don't"ðanything (we wanl !is@  to�Aas fè Ás possible).  ™ /ó_get_defaults(funcð"""Internal helpð €o extracy  Ð 6 ô arguments, by name.o 6tryJpcode = d 0.__ !__� ò except Attributi8 ñ # Some built-inA   sThave Q 5, _Ï r__, etc kþ !{}w Àpos_count = Ž q.co_arg ! @arg_Ï s! 1var ! - %[:Y ]& ^ü   __€(î$kw )  + re� Vdict( V) if  g else å Poffseæ ™ t - len(q � f1ame:u‰V zip(Ù  ? L E:], = ª !VRin re¡ s[ 2] =• ) °

_allowed_i ë  Ëpes.Funcô ˆ,»0s.B)in R  l  J !.M<? aModule 6  ñWrapperDescriptor)  G   
) )^ ] € ÷_hints(obj, globalns=None, loc �include_hvs=False‘Rí R  R  ´˜an objectÎ�is often¶psame as' �.__annotaNs" †ƒit handl­Ðforward refer‹�s encodedF 0str…`literaMpadds OpR Pal[t]�aT$î` equal} ú @ is – anh ñcursively replaces allD "'A° Ped[T,�û]' with 'T' (unless '9  %')e¥Ð may be a modðule, class, method, or function. The annota ñs
    are returned as a di/ ‚ary. ForR 8es,; Ñ include alsoH ñinherited members.
 ð	TypeError is raised if t‹ prgument ñnot of a type that can containJ º  Œ §d an empty²  K Î Yif no¶ 1areK spresent£ ‘BEWARE --– €behavior� ñglobalns and loc òis counterintuitivU ±(unless youVñ	familiar with how eval()M àexec() work). š™ ±search orde1t €s first,Ÿ "n ” _1- Iæ  µ# aQs€ `passed+@ att*  made to usgº  U Ð from obj (oro p respecä – module's- !),¿  Ü Qtheseƒ   j Z óÐ  . ¶   Àobject does cappearL tto havep Ê  Ç ñCusedË1one ø io 3 ” for botha  ½ { ¨ ÃU :twoU 
ePthey +?ifyP ,O1ly.l 2"""f ðif getattr(obj, '__no_ñ_check__', None):9  ½ë1 {} 0# CýÂes require a“ €al treatmv Òif isinstancep  j [ thints =\  n 0ð ase in reversed< ‡.__mro__>  /  Ñ @!is» º  !   Sbase_Ór = sys.h s[  [ w`__].__æ!__í  =   OelseW a nò 6   cann = f Z ‡.get('__kw9{})u  
¡name, valu«ann.items( k $if)  & L =(ê	u  # 
¸1 _, strt   / !   =Ç�wardRef( T, is_.j=Falseá = _·‰=  4µ,A C[(2] =Ñ º#  P€_extras Ö¸ {k: _strip‘1(t)º@k, tŠC {}L{
Dl ü1s.Mj8Typc 
?  =ˆ ® 
„ nsE/ ó  J c# Find!!nsÉ  @unwrüda 2ect¦ 2   ‘while has\  ð wrapped__'):
    �nsobj =  Ø.__wrapped__
' ñglobalns = getattr(1 R, '__ •s__', {})9 aif loc7 …is None:  ]  "= B !ns /el9 	5 Hhintž 1objœ ¢annotation   † ¢ 2if 5 œ ÷ # Return empty C ñ for something that _could_ have them.Æ  á áif isinstance(“ ú _allowed_types)rw %{}B ;els5ðraise TypeError('{!r} is not a module, class, ª Uod, 'R  ˜  €'or func'�.'.format° )+adefaul`T_get_ # Z Jq= dict( :  0âname, value inuw.items( $if# +>  = 6(Ä É 
e) W, str\  '  á = ForwardRef( ¨ " Q_eval " ,Ÿ,Ð5 0if à  Ù T and  [ ]  ¶ 
ï€ P = Opy1al[ ]Q ‘ HA = '  ÿ ànclude_extras 4Ç {k: _strip_À1(t)Ã@k, t³ C Œ}


def7 º @"""ST sé
±rom a given¦1"""³  ¦ 
Rt, _A™hedAlia	Þ ½ ².__origin__‚W |GenericU 
 ×0arg'otuple(d  a!a@t.__0 n  ” if\i#  F == ( & (   Ê t ¹.copy_with(™ Õ Ô ‘¤ (©Œ0ã r T0 3(tp¸a"""Gethóunsubscripted version of ajaò This supports g! �s, CallabTúð, Union, Literal, Fin C71VarR  È§. ÈE — n "edg Ñ. Examples::
B  õÝ n P[42]) + 1int#  n   © B[intM  . ÐGeneric) is Gƒeneric
  Âget_origin(G ƒ[T]) is  * ÂUnion[T, int-  +  List[Tuple0 BT]][4 q== list3 1""" ñif isinstance(tp, _AnnotatedAlias):(  » ureturn    A c(_BaseË D ,Ù  )S Ctp._$__W 'tp† ` - ™ °None


def csargs(tpn ñ)"""Get type arguments with all substitutions performed.
a PFor u�òs, basic simplifica2 �used by •ø constructor areP  I–Examples:Ö ± „Dict[stréD== ( )�  B / Pint) $   Œ  ü,—   
W, strA(int D R D ]¤ ]{ ?  ª ]K  èCallable[[], T€    É ß š((HQ,) +  †metadata\ô#(_O¡¯	2s =T  ^P  ‘"if Ø __»acollec T.abc.° and res[0]' Ænot Ellipsis U  reo (µ(0 a:-1]),;  
 /( ™1res #()0no_÷¦_check(arg`Decora§`to indÐ‚e that a Ä §  G c hints&ThNñ must be a class or fun ; (tï  2, iŠñapplies recursively to•qmethods0S Òes defined in§  ÷ Q(but ¦ $o : . ‘its super2 eŸ 3sub )Ñ Pis mu Us theÂ 0(s)Ñ / @(es)� aplace.} ¶Aarg,sr ­€arg_attrÛöarg.__dict__.copy(8f<t	0valn 	- gitems(W  [ 9if ,  bases__ + ö,.  2 � P.pop(— 
� 3obj{ ´ o.valuey R2objö 3s.F OType  iobj.__ ‘__ = TrueW ¤    >§a S  	M B(objÑ 6try\J	* 
w pexcept ¶ òError:  # built-inÞl � 9pasyðarg


def no_typeõ_check_decorator(
 ´):
    """D õ to give another - Ò the @no_typeT ‘ effect.
G ¡This wraps+ 9 þwith something that( !edE »function inm .  2"""n @* Qools.t Ö ) 1defe 7pedû Ó*args, **kwdsÿ   M & =í () R ( 	(= )# preturn  ª   ¦ 	� 0


¥ û _overload_dummyz ¢ÄHelper for @2  ­ðraise when called.# ¬  õNotImplementedError(¬ ñ "You should notB D an a !edÈ  ‘6. "7 ¶A series ofŽ -ò5 s5 ôoutside a stub module~ øalways be followed;  by– iÈ a‘ H!is¹ -)[Ç ¢Kí N% · /¬3odsÚ$Inµ òfile, place two or moreÒ `definiœ s¨ 1Asame8    Ù´a row, eachs1ed 'É  .  For exaö :K nU    Bñutf8(value: None) ->	 B: ..79 Qbytes: 
 ; <str9 ž 7Anon-ð ;ð (i.e. a regular .py  Q), do7 1A butB 2 it:an k.  The SQ*not*G /begÄ çÖ<  #‚goes her•+´‹Fsfinal(fX D"""AN or‚‘indicate )  ;C and dclasseMPUse t+/E 0to a µ erL!at0 )g @ can¹!be´qridden,| /  € * 1sub "edh! R Base7j@ã T  ‘done(self �3  ( †W @Sub([ S # ÆK   Ä¶É reported by#� J ð ...

      @finAal
  ³class Leaf:   3...   `Other(& ó):  # Error reported by type checker; I  óThere is no runtim/ òing of these properties€ 1"""> òreturn f


# Some unconstrained~ Ñvariables.  TO care us¡ phe cont1 r1 fs.
# (*  not for ex× ð.)
T = TypeVar('T')ú "Anì 9.
K K  $Ke  V  V  QValue i.
T_coc �_co', coÊ ynt=Truev  Ì Ks.
VI   I #“ V K Ê –  ; Lntraã   S  	 ë QDittoÞ #ra  ¨�Internal;  #blÞ µ ¨P[].
Cv r  o 5 V€, bound=·)UA),fu` @with� jt[ isû°resents strÄ J R·is one *is*R˜!)
AnyStrŸ  �', bytes,N )æñVarious ABCs mimickg ð#hose in collections.abc.
_alias = _SpecialGenericA `

Hash ! * (B " 1, 0uRNot gD .
Await@ # ï, 1)
Coroutineq # ï, 3)
AsyncIterf ' j 9  to\	ß 	' 9 m " / c 
/ 1tor/ pReversi¦/= ” $ 3 _Sized0 žCÙk # j C>o $ 3 4all›C  vi T, 2)
 Á.__doc__ = \Ó4""" Ô$;  a[[int]]2Qa funê )€(int) ->*!.
K ÀThe subscripó syntax must always b,Ñ±exactly twoA v• s:…À argument li> !nd � å^
( F o Bbe a;  ÕPypes SŒllipsis;M ¤ 5 TsinglQ 4Ó Ñto indicate oí  ala ukeyword– !s,B Esuch>À types are r÷Jarely used as callback types.
    """
AbstractSet = _alias(collections.abc.Set, 1, name='3 ¯')
Mutable@ 
$ ñ$, 1)
# NOTE: Mapping is only covariant in the value² $.
- ¥ ! 5, 2•  Ù ™ ( ; �Sequence5 " Ì B  6 ) = pByteStr× $ ñ, 0)  # Not generic
# Tuple accepts Aòble number of parameters.
- 1= _	 `Type(t@ ô, -1, inst=Falseë' "')8 Ä.__doc__ = \@! ¢;Š `[X, Y]Ó ÁÑcross-product'  ’ ‘X and Y.
F ƒExample:@ aT1, T2B !a �  3 ñtwo elements correspondingD "to] ÿ As T1e CT2. Y ø int, float, strb D aof an & a( B a- 3ing® ÅTo specify anv-length¯ @homo£1ous™ ,ˆˆ vT, ...]ƒ7Lis|2lismŽ ) @')
D¢id ,«+ 9')
ž/sea ÉSet')
Frozen3 f 9 3  ÖOView¥  Rr % 
@Keys 2 " / OItem0 # ÖVJ2 $ d èContextManager™  Dlib.

+ €
 Š')
Async Z 
0  _     'icPdict, 2Þ0DicðpDefault Œ d! J 7 ¯')
OrderedE ! ’ZCountXr  ˆhainMapœ C T G9ato®V  y# 3, 3� b  6 i( l  =1  V™¶ )  C?ypeBAP�al constr) usSó to annotate class objectsŒRFor e>ð, suppose we have tñ
he following classes::

   ð User: ...  # Abstract bas< r ; 	8 PBasic= ( )C 	! 0Pro  LTeam  @ òAnd a function that takes a‰ ‘ argument ' 2subÎ !ofD  Y õ and returns an instance of the correspondðU = TypeVar('U', bound=X )b ð   def new_user( _ƒ :8 £[U]) -> U:.  r % 0 =  , (L   �# (Here w› ‘uld write«  2 ð object to a data£@ ë ^ âVjoe =¥ ³)! ABais poiMñe type checker knowsd I 2has  G .Ü ñ """


@runtime_> Qable
ò SupportsInt(Protocol)ô"""An ABC with one a�ð method __int__.e  %Ó__slots__ = (Ç @5 4 •  �< Q(self�2inty  J Opass¸ OFloaº #f: ¼ &> ¾  À Complex|"c< Ä &@ Æ  È _BytesÆ "b: Ä &> Â  À ?Ind†$i: À &> À "&Ab|o[T_co]Ä ab²Êóis covariant in its¥]é$a ã  ¡ ¢Rãbæ r@ "__2è Cc ê °, ndigits: ¿1= 0åÀT_co:
      ð:  pass


def _make_nmtuple(name, types, module, defaults = ()):
    field â[n for n, t in; ]# F € = {n: _ Ð_check(t, f"f@ ñ
 {n} annotation must be aG !")G   g }  ð nm_tpl = collecI  s.È dÓ p !s,2 Q  ð =	 =˜ x 6.__Á es__ =  _new__!   sŠ creturn2 ñ


# attributes prohibited to se``NamedT¬÷  class syntax
_. ñ= frozenset({'__ˆ Â', '__init__ Tslots ‘getnewarg � "'_JC  _&'^'g5 qreplace aasdict ðsource'})

_speciaÔ
É ³  ä 	„E 
0PMeta({1):
à þB(cls÷ U P, bas#nsî bassert †[0] is _^ R  '  b  ‹ns.get(' R', {}A . <_w  6 [;   ïa  \:j  % "ifŠA  $ *ns!  % 	e †.append([ Ž  - DelifòV Q  óraise TypeError(f"Non-g  ¯ |œ & {l 9} "À  r  1f"cÏt follow� M ? Ã{'s' if len(• Ê ß) > 1 else ''‹ {�L.joiK }Ÿò+ =M  ZŸs.items()'´ ‚s=[ns[n]` Ý Í ]H /r=ns['__ F__']ð€# update0am user½ô
space without overriding ˜ Õ â°Ø ¹0key± Ž3if  °±`Ae""C � fwrite ~7@ " +d å  TÕ z !noFb0and.   É.ä™ 0setñ (( ,; ‡, ns[keyWÖ i¬ „ B,Òás=None, /, **kƒv0"""d`d vers !of {.ÆPUsageldPython, “s >= 3.6:íÀ    class Em÷ployee(NamedTuple):
  ™name: str �id: int
 òThis is equivalent to::  K "Emf ð  = collections.[  dtt $('# P', [' ’', 'id'])G ñThe resulting class has an extra __annota[ ð__ attribute, giv5 a­ ðdict that maps field q às to types.  (p  ±are also inG Qthe _! sk Pwhich€part of (  ^ è a API.)A ¸Alternative9àkeyword syntaxJ v �acceptedV¾	J y Ã=str, id=intLàIn Python vers‹¿ <= 3.5 useb $[(­pstr), (´,")]è 1"""ð "ifl*FNonegGò = kwargs.items(? Celif 1 ñraise TypeError("Either lisuQ 3or Os„  Œ ð" can be providedP², not both"‘ 6try‰ ðmodule = sys._getframe(1).f_globals.get('__Œ __Ö’__main__'Q  exÛ4 (A±Ô b, Valuà ’mq  BXò return _make_nmO Ç q ,t", 9 = F)

_ã ! =÷‡.__new__vMeta, '+ ñ', (), {})

def Ö Ûó_mro_entries(bases· cif len F > 1?ÈMàöple inheritance with „   ”“supported™qassert { 0[0]' 5 +(ü F,)

& (._Æ O__ =â 2


„_†PdDict-(yø  SAcls,e,  ø , ns, total=TrutÑ"""Create new™!d ´p robject. Ì}`methodó ±called when!›   1subB 1ed, < /or)  áinstantiated. _ 5way4 ð  �´s all three¶õforms described in its docstring.N S–  Ê )  | 0ces;j äaactual@ionajJ h Ø 1forh y s  !ifX“) O
É
1  5 ¬!'cpªQ from(' ay % 'ï  I  ¶'and a non-ö  º ê* : 1tp_´
¾ l(+  ,)nû C àannotations = C{}
  øown_annotations = ns.get('_ �__', {})8 @_key< Kset(R . &(): ðmsg = "TypedDict('Name_ ÿf0: t0, f1: t1, ...}); each t must be a type"Š  † {  å @n: _2 ü_check(tp, msg) for n, tp in µ fitems(µ 1ˆrequiredó (  opG*al �  t @bases   %s:  « ‰€.update(& Ÿ.__dict__™ƒ  I 	¥ K 
	* æ'()­ M 	Ô M 
	* M ä à  yÇ Šif total"	¯ Œ 
D {H JelseD 	¦ D 
¹ !tp‚.7 = Ó .  	¯ °__ = frozen(	 ° k 	¨ = 	 = ó if not hasattr(L Q, '__MJ__')# .! " =xÎ sreturn ) 
 a__call”  šP  # sB‚c method& ádef __subclass×__(cls, other‹ !#  N ¡s are only¤Y ñstructural subtyping.�  ¤QraiseD qError('O  _Q doesñsupport instance and ›  œ 2s')¸ $__#  ç È 0


à h (dò	name, fields=None, /, *,Só =True, **kwargsÿ ±"""A simpleÚ d F ð	space. At runtime it is ~ñvalent to a plain7.½ ‘ ¡ creates a aionaryb ñ	 that expects all of itsNû s` 0havq@certg 0set+  Òr, where�Rkey i? ðassociated with a value7 ‘a consist½ pype. ThÓ ‰ €‚ ¯|Fed a0but£enforced bÕ 0 "rsrUsage:: "é…Point2D(&… "   ax: int‡     y ¦label: str` 3a: ] ñ = {'x': 1, 'y': 2, '3  ': 'good'}2%OKh b= Xz': 35 !ba4  �  r# FailsÎù ‰ Tssert� ð(x=1, y=2, label='firðst') == dict(x=1, y=2, label='fir! ñ4

    The type info can be accessed via the Point2D.__annotations__a Q, andL 
* ð required_keys__& H  opD $al ±frozensets.L òTypedDict supports two addi9  _ âvalent forms::Ò  Ö ° 5 = H #(' €', x=int Astr)z @ a{'x': = %'y
 H ‚': str})Œ ðBy default, all P mustf@pres¾ Fin a¨ ñ. It is possible” òto override this by specifying totality;XUsage@clasQ Ä(,8 �=False):i  ý   xß 	 y  T„ âmeans that a p"È L±have any ofH ‘omitted.AyP pcheckerø ôonly expected to ± a literal ±   or True a„ ¡e value ofP  Š¢ argument.- i- •�nd makesŸPitems²pined in´ P B@body¹Ú.å C! esyntaxÆ ºK ñPython 3.6+, whileÑQotherd = ÌP work× 7 12.7AA3.2+. 1""" �if fieldsv FNoneÈ �= kwargs/ Celif ) QraiseºuError("#! t ei¦ ! að yukeyword^"s,Ž  ; ó " but not both"{ns = {'Q!':c (» !)}´ 6try¬ `# Settõàcorrect moduleÿ  ne·0ary7 ÖadS  ¢Òes pickleable. ¯ qns['__mI ð#__'] = sys._getframe(1).f_globals.get('__name__', ; bain__'Añexcept (AttributeV0, V¢ mBpassG…return _}PMeta(œ j „, (), nsµÞ6)

/ ! =ï –.__new__(  I 5, 'Y 'M E{})
 Ð.__mro_entrie¯÷= lambda bases: P À,)


def NewA (¡ #tpØ 3""" ò creates simple uniquqñs with almost zeroíqruntimeï^head.e  ëðconsidered a sub'epF   ¦c _cs. At b ,Y  ƒ*Àa dummy funcréÈ #y ) E its-. y…UserId =k '  ',=
 � M Eò_by_id(user_id: / @) ->V 4 #..€  àUserId('user')  ô# Fails type check

 äname_by_id(42) /  4   3 QUserI: )3 'OKY Sum = ! a5) + 1A #‡ Q: int… 2"""5 €def new_¦ A(x):  3 ‚return x' # 1.__‰ @_ = 	 /  PsuperL _" !tp  K ' ò


# Python-version-specific alias ( Ã 2: unicode;2 ð  3: str)
Text = P ñ
Constant that's True whenù €òing, but False here.
TYPE_CHECKING = ó


class IO(Generic[AnyStr]#3""" b base / @for ™ òIO and BinaryIO.EòThis is an abstract, g_  
’ of the r“of open()C aNOTE: I ðdoes not distinguish betweõ ñhe different possibleŽª Pes (tBQvs. b§ p, read  Qwrite
   / ,= ñappend-only, unbuc �d).  Theü C subs B Ñbelow captureë À fctionsÁ � �which isE Ápervasive inD ð
interface; however we cur Qly do+o¯ ! aD pway to ‡kD SotherNŽ ^  Ñ� system.< ?q__slotsî"()çA@pro+ @ëamethod  uÐmode(self) ->Ç{OpassK  ‰K ˆ Gclos‰ ONoneŠ 'M dŒ OboolN � ffileno@ ?int? Flush> Ì ~ fisatty@ ¾  -> 1, nkQ = -1à=Ì  M 7abl›� !2linB , limit— 2 U sé h£ Wì DList.ò CseekV Roffse­ ,Æ$ceº 0P v K «0Ú [ M+Atell�   Àass

    @abð)stractmethod
    def truncate(self, size: int = None) -> :1  5 Qpass
 ?@abS rwritablS A OboolB ? ±, s: AnyStrJ ?intI Slinesà  r: List[W ]X  ì Y ‘__enter__X C 4'IOS 'K 3xitJ ð , type, value, ²Qebackb ¥ ò
class BinaryIO(IO[bytes])„ ñ"""Typed version of the retur ±open() in bE ’ mode."""æâ__slots__ = () ú	¸RUnion�  , – RarrayqÉpô nBText?str!Otext�property
fbuffer/¾ §ZR †encodingT ?strO (Brror(n�Optional[>W ' r_ý 	¬ ü 0newY ¯ ?Any¥ ¥Q1O"io` ñ"""Wrapper namespace for IO generic •(esF1allDƒ['IO', 'm 4, '
!']AqIO = IO % 2 = 	  / % =ö€


io.__� e  ÷+ '.io'
sys.modules[+ ó] = io

Pattern = _alias(stdlib_re. ¯, 1)
Match%  # |/re-!reê o *|  /b " 3 = 
 " 1 =  _


re*re+  ð2re
#! /usr/bin/env python3

# Copyright 1994 by Lance Ellinghouse& ð"athedral City, California Republic, United Statesš Am?@a.
# PAll R~ ñs Reserved
# Permisàðto use, copy, modify, and ò0distribute this software and its
# documentation for any purpos( ðHwithout fee is hereby granted,
# provided that the above copyright notice appear in all 1ies‹  9 r
# bothE ; n_  is permiss­ V Ú
# supportingÙ ,g   ðname of Lance Ellinghouse
# not be used ª pdvertisS Àor publicity‰ @tain 5to jPion
#\  pDðspecific, written priW Ö ðJ.
# LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO
# THIS SOFTWARE, INCLUDING 9 xIMPLIEDA ðOF MERCHANTABILITY AND
# FITNESSC À NO EVENT SHG   ðCENTRUM BE LIABLEA àOR ANY SPECIALI ðDIRECT OR CONSEQUENTIAL DAMAGES  2  ð
# WHATSOEVER RESULTÊ ðFROM LOSS OF USE, DATA= ðPROFITS, WHETHER IN AN
# ACTION0 ðCONTRACT, NEGLIGEkAOR O0 ƒTORTIOUS1 `, ARISt POUT
#@ OU RCONNET ‚0THEŠ „ aERFORMÃ*OF�ð8.
#
# Modified by Jack Jansen, CWI, July 1995:
# - Use binascii module poÉð actual line-by- p conver"Ò
#   between B  ù O Pry. Tqresultsëð 1000-fold speedup% 1e CI U  ðstill 5 times faster, ' ghÁQ- ArgWPs mor€mpliant 
ö python standard

"""ImpleŠ!ofá rUUencodŠAUUde @func°Bs.

  Ñ(in_file, out
 0 [,ç,5òe], *, backtick=False)
N ; & [= 6 �, quiet])  @

im\Ž $os
 òsys

__all__ = ["Error", "¥  
 t ¡"]

class # `(ExcepÒ ò):
    pass

def : ¤ ¢  Þ R=None­  ç R R"""UuM  )1"""j # C If C á`a pathb � open itA°change defa5;   & !edysû ] 2try~  Ô ib f== '-'  Áñ = sys.stdin.bufferK  #  elD 0sin9&ce3str9 '   1if ¾ 0is #
k  !  P= os.ê P.base T )u  - !ifF N 	é  2  m¼g Estat^ @.st_ 	f  4 e	3 At¸¾  + $ 	  ÀÀe = open(in_×file, 'rb')
  popened_ ±s.append(in ) #3 ¡# Open out# ö if it is a pathname, 
 &if2 u== '-':  Œ O õ= sys.stdout.buffer)  elm ¤sinstance(5 o, str)Q  á , /'w\ ðSet defaults for ÷ � and mod # zis None¬  ë !ifJ  X0  d • = 0o666
3 £ñ
Remove newline chars from© 3  ƒ   ÷.replace('\n','\\n1 ! ! =F ( r( ?r')Ž ïWrite the data~  m .w* ñ(('begin %o %s\n' % ((õ ‘& 0o777),‚ ö)).encode("ascii")® j 3 = É†.read(45   while len(* Z) > 0•” 1bind q.b2a_uu6 ´, backtick=	 ‚  × \ † 	%ifC ~ y'`\nendŒ;elsI´ *' 6 vfinallyk  »Pf in $  Ã ñf.close()


def derY,×=¨,¶ ³quiet=False�A"""D? 2 uuº d x1"""Ãb 0Qinput# ,iwneeded., ¸ Q = []  'Â m¸  h(ingc/ b ! =9/^� Z© 'tr�þ  tò # Read until a 0is 4ñuntered or we've exhaustedb O[ H 
 ï;Tru2;hdr  1(( G ªif not hdr  óraise Error('No valid²  K ` foundcÌP C _ Ò.startswith(b'; )  vcontinuh  °hdrfields =ª í.split(b' ', 2Ð  ù2 )&3¿ 0[0] † ù 	» �  Fint(G Z1], 8 ) Ubreak¢ Áexcept ValueW{  + Epass< ^	bÀ        # If÷$ the filename isn't ASCII, what's up with that?!?
  @out_= ù% = hdrfields[2].rstrip(b' \t\r\n\f').decode("ascii")I ôif os.path.exists([ )):)  } ñraise Error('Cannot overwrite @ 1ingÖ …: %s' % N M `if modó Z Nonef  f= int(Ø V1], 8· #K a# OpenJaoutput{  
  æ 2Z= '-'w ¦ õ = sys.stdout.bufferE õ elif isinstance)[, str.—fp = open& F'wb'Æ  P‡os.chmod%  % ¹ 5 fp� ? Qpenedvs.appenJ D /QMain  ¨6looQ '  s �W ¦.readline(P Àwhile s and +p› != b'ende:tryv Ä ¡data = binž–.a2b_uu(sp  & fexcept& ƒ^ as vR ð# Workaround for broken uuenùrs by /Fredrik LundhW q Pnbyte	ý(((s[0]-32) & 63) * 4 + 5) // 39 Ð "[:S ]Ù  l 0if I^quietÏ  " ”Aerr.k�("Warningfz\n" % vX Ñ0  – 
!  Ü /inå” s� 	 ÄTruncated in{àgfinallî ‡Af in³
\ `f.closi£
def test(U4"""½1/uu¿0e mË±program"""
Šñ import optparse 
 r� €.OptionP" ‘r(usage=' 0: %R Â [-d] [-t] [Ü [_#]]á T a.add_oM ¢('-d', '--Ÿ •', dest=' qhelp='D‹  (Eread of –!)?3 ð fault=False, ac¨ Ï='store_true t 0tex
 }  {  @ is  ,v !ñmat unix-compatible% ’ f(³s, args) = $ _ Dpif len( V) > 2+ 2r.e`ðincorrect number,“arguments	rexit(1)Q# Use V ryŸÀeams underlyûbstdin/èÀ èÿ(inþþÒ 0Ò V  í ð [0]
    if len(Ãargs) > 1:
  �output =  A[1]
 öif options.decode1  Ftext  Q âif isinstance(\ j, str)(  ,  u = open, Q'wb')„  $   7els     ûprint(sys.argv[0], ': cannot do -t to stdoutQ  ?  9 fexit(1m ê ‚(input, Ÿ  
ƒ L    O, 'rÿ 6@from/in  enê ò
if __name__ == '__main__'Óùbtest()
r"""UUID objects (universally unique identifiers) according to RFC 4122.

This module provides immutable Ue Qclass á) and the func¼ 
uuid1(), 	 3	 4	 ð 5() for generat‹  ² Áion 1, 3, 4,U  5
Ú �s as specÁ Hd inµ ôIf all you want is aö 1ID, ðshould probably c2  š a1() or¥ á4().
Note that   Ðmay compromisðivacy since it createt  ª À containing
 : ñ	uter's network address. c 74()C arandomUò.

Typical usage:’>>> impor¢  �# make a9 ‘ based on’qhost IDMÁcurrent timeè M  .  í €   # docZq: +SKIP)  Û ÿ('a8098c1a-f86e-11da-bd1a-00112444be1e')“  usâðan MD5 hash of a ÛRspace¹  F u 	ž  3(¤ ó.NAMESPACE_DNS, 'python.orgjª þ6fa459ea-ee8a-3ca4-894e-db77e160355ª }€  ¨ÿ16fd2706-8baf-433b-82eb-8c7fada847da
o SHA-1#5ÿ886313e1-3b8a-5372-9b90-0c9aee199e5d« ÚaW Ñ°of hex digiw@brac
ònd hyphens ignoredÌ Ñ1x =ø.©ö{00010203-0405-0607-0809-0a0b0c0d0e0f}Œ tconvertë?to � 0in @dardimÒRstr(x� '} 'Ð1getR�raw 16 byö!of  Í b !x. à
    b'\x00\x0ñN1\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

    # make a UUID from a 16-byte string( �>>> uuid.( ‘(bytes=x. )!  ô''00010203-0405-0607-0809-0a0b0c0d0e0f')
"""

import os
 `sys

fƒ Senum   ñxEnum


__author__ = 'Ka-Ping Yee <ping@zesty.ca>'

# The recognized platforms - known behaviors
if sys.platform in ('win32', 'darwin'):å À_AIX = _LINU	 ±False
else:  ³ L  _ •_system =� . (B]  ”.= 4 r= 'AIX'R   Š ] ò= 'Linux'

_MAC_DELIM = b':' òOMITS_LEADING_ZEROES = Ì 0if ˆ Ï A .  W E õTrue

RESERVED_NCS, RFC_4122,  —MICROSOFT ¡FUTURE = [å ð'reserved for NCS compatibility', 'specified´@RFC f /',?  žMicrosoftE 	g ð	future definition']

intt0int� 3 ^�built-in  Qtype
 * 	 (  * Á

class Safe8 äc�safe = 0Æ #un #-1 k¾t= None
H  D ²ð"""Instances of the   q 0repð !nt _s as E.n 9 òobjects are immutable, hash
 `and us  O 0dic8‚ary keysI pConvert±iRto a _P with ð() yields someth/ !inÃ  ™“  '12345678-	    q9abc'. À ñconstructor acceptsJ Ðfive possibled0ms:” `imilar�  € ðof hexadecimal digits, L a tupleL `of six
beger fÆ (Ù €32-bit, T 8  1andJ 4   values režptively)^òan argument named 'm '” SK bof 16 v‹ 1allN8int¨ óin big-endian orderm H q R 
p  jl  y¢first thre'«  ­olittles à o 3_ler “ ’single 12.Ð ?as ! Rint'.í `s haves#òad-only attributes:,  ì|  	    1 5‡Î"� (contain3 ú 1six© <  ª 
z n ƒ 0_leC  Z  Ã ƒ À16-byte striòng (with time_low,
 omid,
   2and" õhi_version in little-endian byte order)
F bfieldsS óa tuple of the six integer '  OUUID‰ ówhich are also available asP õdividual attributes� ‡  Ó §wo derived/ :¾  + $    Ã Ôfirst 32 bitsØ  ¾ 	s B 8mid>    B next 16A { =   A  clock_seq_F iariantA 8� @ 0low9  � @ Cnode3 	  @ olast 4A  D	;   B a60-bit¡Ystamp9 » 1   9 !149 ö sequence numberÿ4hex/ ² Ú jöa 32-character hexadecimal stringC iiG  s C 1128~ 3 1urn/   
3 0URN �specified„†RFC 4122@ và¶  5(on�ÿconstants RESERVED_NCSy@RFC_g ,, ÖMICROSOFT, or gFUTURE1	Ð  sù (1 through 5, meaningful onlyÐ F   Awhenß Ú 4is ¥ } bis_saf}ñAn enum indicating whetherI ›ñhas been generate� áa way that is e ðfor multiprocessb Aappln �ons, viaM Tuuid_s _1 R A(3).0 2"""áó__slots__ = ('int', 'å   Ã__weakref__'ðdef __init__(self,²a=None,µs 3_le ” …  w 2int!  Ñ / 3*, ¬ P=Safer¥.unknown):5 Ðr"""Create a $ � from ei«ad o 32Ë }fdigitsÁ+  d@ytesA V'¯ßs' argument, . ” îé
M :_leP ï7sixJ óQs (32î…&16  Œ   º{á BãÞ+,  À_low, 48-bit³ node) as
  ñ'the 'fields' argument, or a single 128-bit integer as 6 Eint'H ; p.  When> õtring of hex digits is given, curly braces,G ð*hyphens, and a URN prefix are all optional.  For example,“ %seH ±expressions6 yâ  $ Å same UUID:
.   À('{12345678-	 -
     ;}')7   1 ”urn:uuid:2 p 	> ûbytes='\x12\x34\x56\x78'*4˜ ) 0_le, "78(  0 8    5' +Ó  g w u ID=(0xÜ ",     @   12  34   , )N Bint=> & .  )È°Exactly onex�'hex', '	 0_le « 'ë'ËU must	"be©@.  T#0verN$ ËŒB; if/ ˆ¥ resultingO  b° will have qvariantê^ ° set accord;¶to RFC 4122"boverri  h¥  ê .2pis_safeÍ ð an enum exposedçñ an attribute on@Æinstance.  I/ñindicates whether, ö ðhas been generated i €way that|  „ ,Pfor m@@procÅpng appla  Ñ`, via B_S Q_timeÊ E(3).J 7"""ë �f [hex,  _;,áõ].count(None) != 4:N  óraise TypeError('k ] + H  0'or ‚sŽ †iPpis not ¨ 
¢  m=s .replace('q ó'')  � 	á ? ˜strip('{}7 -3  ¡if len(hex2*32‘  ë 7DValu8Àbadly formed® �adecimal› | 'ngö  E Pint =&_l F, 160"if×!_lÌ©  "_là/16®  v\ Ÿa 16-charª b A = (	 å_le[4-1::-1] +¨ P[6-1:  	… î  @ @8-1:0 , C >8:] QÀ           iûf len(bytes) != 16:
  ñraise ValueError('0 ù is not a 16-char string')B òassert isinstancen !, E ‚_), repr 
: ñint = int_.from_1 ) > ˜order='bit ”if fields  JNoneÕ iö ' ÷ ö 0 W ›a 6-tupleð ±(time_low, 
 3mid
 ¹hi_version,"° clock_seq_# wariant, M snode) =Ý 	A !if‰B0 <=t ºlow < 1<<32ú  ÚÏÙ ð 1 out of range (need a 32-bit vÿ)ì y 2midy Hy 2y /16y  9\€ 3€ +¾… 8}4„ ?n 8„ û} 5} + šñ 4u 6u / 4ò æ E = ( 5Š << 8) |<
,U(¦ 3  964  Ây< 80) |9  ;2   & oA< 64@ ’  T 4ˆ  Õ ifÎA˜ QÈ ýÃ/12U 0 /isT/12U3if ’• 1]- O<= 5Üuillegale knumberE²# Set the vûÙ to RFC 4122.„ å ³&= ~(0xc000h# e|= 0x8! 	  n 0• i fH &64É  Œ %|=Û U<< 76j ðobject.__setattr__(self, 'int',N - `s_safe1 
 !)
c ãdef __getstate] )’Qd = {k  : x Q.int}: ð    if self.is_s÷afe != SafeUUID.unknown:
  `# is_s+ Eis a- ü instance.  Return just its value, so thatN õ%t can be un-pickled in older Python versions withoutw .N 3d['� £'] = self. .… . r£ !d
 ðdef __setstate__(: !,  )ÿ qobject.* Eattr) S'int'0 [ !])Y  81rwas addà €3.7; it Fólso omitted when "�"L ‚ •%',,  |  Ú(Ú -® 2   5if W š= V else‡ª )P%eq!WotherJTif is2(  , t$  { § ��.int == -   é % ÓNotImplementeÙò # Q. What's theŠñ of being able to sort !s?V €# A. Use4 �m as keysû øa B-Tree or similar mapping.û /ltû ><ú Ógˆ ?>ˆ !lUÀç%<‰ ?>‰ "Chash$Ë  „ è	T$inÒ6 &‰4rep§1 ²'%s(%r)' % n ð__class__.__name__Õr )ˆ 9set . ,_h ðaise TypeError('ã Å°s are immut‡'_ ]N Àhex = '%032x´ ð  *  >G'%s-  + (× $   �hex[:8], 	 C8:12 T12:16 C6:20 C20:]Ÿ ‘@propertyQ  TRbytes"*Š ¢ B.to_( „16, 'bigï P <_leS @ Õ ƒ  Ð n ( Â[4-1::-1] +  @6-1:  @8-1: Ð-1] +
         Àbytes[8:])

 ‘@property ñdef fields(self):  ( qreturn  °.time_low, &  8mid µhi_version,D  H   5  clock_seq_+ cariantA  d Onode³ � ž µ p Ÿint >> 96ø E ?midE  .F Ï80) & 0xffffP 
 Ü @ œ  W /64W  \ 8E \ $56\ ± Z ?lowS /48S  TJ ( = Ë 'W�0fff) << b |@9 0mid( W32) |�?low-ç G 6 ™ ( ¡ž 3œ >8) › k: ˆ 	 Òƒ F  kd h  »?hexK ’'%032x' %?intD ?urnD òurn:uuid:' + str( I v•eif not‡   & (0x8000Á'48‰ $pÅRESERVED_NCS/elL 4L FC_4122H 2H ” —MICROSOFTR &se4È oFUTURE;`I c# The Pð bits are only meaningful for RFC å u UUIDs.š "ifz�0 ==+ h ± 3int ˆD>> 7@@)


(ó_get_command_stdout( s, *argsÓòimport io, os, shutil, subprocess6tryŠ ðpath_dirs = os.environ.get('PATH'L @.def) °).split(os. Esep)ø   I ò.extend(['/sbin', '/usr ]1 Ãexecutable =¬ f.whichÝ  T =m `.join( i )L 7if O ois Non   ´ ð# LC_ALL=C to ensure English outpu*Ðtderr=DEVNULL) sprevent" à
        # on ð'stderr (Note: we don't have an example where the words) ƒsearch
  ð# for are actually localized, but inA õory some system could do so.)N ùenv = dict(os.environ õ['LC_ALL'] = 'C';  proc = sub
 õess.Popen((executable,) + args,6 Æ  xstdout=N ?IPE8 8err8 DEVNULL; venv=envî pif not Ï :± µreturn None ± #, Ù=7 Ö.communicate(Y @ ²io.BytesIO(> " øexcept (OSError,SS^ )˜ T ” ð$

# For MAC (a.k.a. IEEE 802, or EUI-48) addresses,#ñ second least significant
# bit of& ¥first octe%  esªAther"  x [ ± is universœP(0)
#ƒ ¥Ply (1‡ ðministered.  Network caó from hardwåPmanufêùrers will
# always bek &adV ð to guarantee global- tquenessÛ 0MACO >òany particular machine may­oö �interfac	0ich‘"
#Š8ly ‹ F.  AáT`latter- ìubridge U Q to
#ZñTouch Bar on MacBook Pros.
#
# This« @Ps outù bBA42nd ‘counting [@1 be  y ú(
#ü0ð1<<41.  We'll prefer?×á wÿ esî?ver¢ ones sinc¢ RformeÍ£ lyf 1queŒA
# w� ì ² �šFpfound i �at's all=¼#ha/ðSee https://en.wikipedia.org/ S/MAC_Ë $#UÇQ_vs._À¥

def _is_äC(mac—§  D  ã & (1 << 41))
; ðfind_mac_near_keyè(7Band,-  ps, get_" c_indexh A"""SSes a < 'ÿ2put • l $ aW !.
Å`Each lÜ#ofn: G H òis case-insensitively � edg H  1ÖTgiveng üs.  Upon a matchÍ  ýqinvokedH ‘to pick a� ¬ ò £ ", [   
ÁZ  . þE Hñ , lambda i: 0 wû1getB U T R b Bwhilß< [i - 1@ : dprecedG°.ƒ 1""" àstdout = _get_ó command_stdout( ò , args)
    if  ‘ is None:   areturn 
 òfirst_local_mac =  , ³for line inP H qwords =  ò	.lower().rstrip().split(� J iG ¡range(len(A &))R  ( 1if  0[i]. 1key 
%  ) >try    0 # =F @get_ ¡_index(i)]ó  (  ÷ 1int• ö.replace(_MAC_DELIM, b''), 16Ó A ðexcept (ValueError, Io  à 5 ÿ # Virtual interfaces, such as those provided by¶ ÿ"# VPNs, do not have a colon-delimited MAC addressF ðas expected, but a 16-byte HWAddr separaN ‹ ðdashes. These should be ignoredÍ¯favor of a‰ Oreal° /paÉ  7elsãe  ÿif _is_universal(mac” / ?mac¤ , 4or = L "   ’Ð


def _parsey|› A# AcVJ'HH: '"ñ (ex: '52:54:00:9d:0e:67'),À #Ð´reject IPv69 òfe80::5054:ff:fe9' or '123:2:3:4:5:6:7:8').P  ½§H ­ —N ?by ‡ q@partÙ 8È	ÿ0if Â* f) != 6Œö’  | CöOMITS_LEADING_ZEROES1 ð# (Only) on AIX theC ´  vT` givenÊ çaprefixr 0, e.g› ¾Ð# en0   1500 š0k#2 ñ  fa.bc.de.f7.62.4 110854824  ³0 160133733   0Æ  
 #b g 0h  ifi • all(1 <=f)  2 � u N  s/ £   |  €hexstr =½`.join(5 €.rjust(2Ô?0')U  é 
S™ ú_) == ” 4·	ÕÍ   ð(hexstr, 16)
   ó except ValueError:
  ó%return


def _find_mac_under_heading(command, args,  )F ñ"""Looks for a MAC address F $ a1 c in a M ±'s output.
� ðThe first line of words4 3the, Á is searchedp   QgivenD ™ 1. W; 0at   AsameM ‘ index as -  a ¡subsequentG  � Ps are( ðn examined to see if ¸y look likeô 1es.D 1""" ãstdout = _get_ü _ 
X)0 2if   ë BNonee ®«  32key$=4 P.read¾ ò().rstrip().split(^ 6tryP rcolumn_$= N . (8 A– Å`_localK" =  Â  " Ÿ tŽ Ê    ½  B 	Á    7 ! =ß(s[Ò ]O # ½ Iýþ  ‚continueT  0mac±PparseÃ (e 	  0if " !isÙ Â   M     óif _is_universal(mac9    Ø5mac³ "ifGo l F G V " Q


# kðollowing functions call external programs÷p'get' aø  Ü  vJÐ to
# be usedVCbasibn uuidU€ifconfigSnode( R"""Ge£Phardwq ^  :ð on Unix by runn¨ G .[ É  isûðks on Linux ('' or '-a'), Tru64 ('-av €but not é  ` ®ü€ = (b'hw‡ ¡', b'ether
   Aess:  ll ' Ö  ÖA('',|  #v'ë  ç 4=cSnear_y $('Þ 'e òs, lambda i: i+1s  P ‡
õ  #    6å/ipŠ-p„Òwith iproute2þ p7 link', [b'
 /|]ý æ ù  õ /arö -&ar÷ òimport os, socke8	�0ip_$# =" ò .gethostbyname(7   )Ü¯+OS¬	Ô  Ú # Try gett ê|ð  from arp basedðN on our IP address (Solaris).
    mac = _find_mac_near_keyword('arp', '-an', [os.fsencode(ip_R ñ)], lambda i: -1)U  ifX :  e `return 
 À# This works£ qOpenBSD ‘ :/i+’ $ÿLinux, FreeBSD and Net¤ -¥'(%s)' % i>ô  $ R2i+2S2# REòNone instead of 0Ès Z ‚ = ò	

def _lanscan_getnode()¯õ"""Get the hardware;óon Unix by running F A."""Ê ÚQmightà ßRHP-UX§ ˆ pO tÉi', [b'lan0'g#0)Ä netstatÄ ,F Ä ž1AIX
Õ ŸTru64 UNIÚ ó under_heading('f Û  iaP2b'A”'Ð �ipconfigÑ  ß[DEPRECATED] ¢	wWindowsÎ ñbpo-40501: UuidCreateSequential() is nowõñonly supported approachÝ½fwindll¥ ŽFbios R½ ‹P
# Imð ð" optional C extension at toplevel, to help disablòit when testing
tryø iT Q_uuid?ñ_generate_time_safe = getattr(( >, "% 0", ¸_Ã=   
5 1has` ƒ  .$ s
except'RErrorä : ! =  ä  ¿  ¡ 	6 | ( eðload_system_func±s½	kõPlatform-specific 3  I  á#t © • Çi OunixË {	 us @Iemodule™?if � X ³ 8*0, _£( - ›ðUUID(bytes=uuid_ðtime).node

def _windll_get ñ%():
    """Get the hardware address on Windows using& ñ_uuid extension module."""P âif _UuidCreated  h  6 ˆ_bytes =" !()7  # Áreturn UUID(* F_le=8 	Í orandomÍ "a   é 5 ID� ô"# RFC 4122, $4.1.6 says "For systems with no IEEE$, T Qly or³ ’# pseudo-m ðly generated value may be used; see Sect4“4.5.  TheI ðmulticast bit mu	 Ôe set in suchˆ 0es, ‘order tha¹cy willK ânever conflictÍ Ðòes obtained from network cards.À#H YThe "˜ ¤" of a MACŽ q is defQ  toë "HSleastG ¢significanÜ !ofEÁfirst octet"
0is ‹ bs out L  K  41iN Pcount‰¿ @1 be  ) t  n ², or 1<<40.�  ð See https://en.wikipedia.org/ S/MAC_61#Un›U_vs._J cimportm Ã@.get
 ð#bits(48) | (1 << 40)


# _OS_GETTERS, when known, …PtargeL for a specI0 OSÖ °platform.
#H ðis by 'common practice'É %D 8ed ? ðNote: 'posix' and '+Hows'¢ • €prefixedg óa dll/dlload() method
# whichÐ ðsuccessful, means noneIpthese "HSrnal"@ sg `calledÜ   ka(also)O € Atest�0.py3ðSkipUnless(), e.g.,
#X` @unit/ &.s$ ; 0_if,$igK _ ›P...)
ÙRLINUXÔ¼t = [_ipB -, U `]
elifb.zÏ == 'darwin'R š X, _arf tnetstatx e Swin32d Ì# bpo-40201:F@ alw¹`ed, so±!se˜¡not neededî� ?_AI$±  s#K B Uü 
Œ é _l ¦, _lanscan/¡if os.name�ŒüÛEunix6 ( +ØF #ntkº  Q|]E x 1

_ÊS= NonÏÇÀ the hardwarðfe address as a 48-bit positive integer.

    The first time this runs, it may launch a separate program, which could
L ö&be quite slow.  If all attempts to obtain the hardwar® �fail, we˜ ô choose a randomÆ ðnumber with its eighth á 0setb 1ö ¢recommendeš Áin RFC 4122._ 1""" ²global _nodx "if Ñ is not None:+  â breturn" @òfor getter in _GETTERS + [_º @_get^ ]F 6try  W  # =I %()p jexcept- rcontinu¯  > Bif (B ´ ²) and (0 <=¯ Ú < (1 << 48))R 	Ö  R û assert False, 'Ê 2() 2 òed invalid value: {}'.format’  )


_last_^qstamp =TÀ

def uuid1(=i±, clock_seq ¨ q"""Gene}òa UUID from a host ID, sequence !,þ  fbcurrenÞû@If 'r 'ã`given,}   () @usedN° �bå'¶ T P %itI !asò¥ ;J xotherwiì!14²/  N pchosen.¾= R# WheO`system�@videù’version-13gCóor, use it (but don'tM   ðUuidCreate here beca  n {s2 @ conê %[)a Cm eøP_safe¿ Qž m  =   � B  , C 4ly_X Ed =  # e ;e!is# p = SafeË (U y  V×VError•  !L �.unknownJ # #{w(bytes=Î @ = )L�
1R RimporÆ Ñnanoseconds =».b3_nsð# 0x01b21dd213814000a $¡ of 100-ns²rvals betweRh #Á ñ epoch 1582-10-15 00: Ê T DUnix' •970-01-01'  ¢ Á  //‰ / +³  …  Q
 Ê 	M[  ð
- »& ,= —1+ 1m  ^·   &if¥ ‡ 
²¨û0  ã=Ð@.get% ðbits(14) # instead—Òstable storagé » C_lowî� a & 0xf Àff
    time_ðmid = (timestamp >> 32) & 0xffff
     ½_hi_version1 "481 01 õclock_seq_low =  X V  [ `ariant[   Œ Z 3‰ ñif node is None:H  ¢  P= get
 !() ñreturn UUID(fields=é  • ,Õ 3mid
 ß ,=  V  š ² ,Ý X  � 3), ,ð=1)

def uuid3(namespace,  )Â Ñ"""Generate a° ñ from the MD5 hash of a5 @ & 3and A."""¸ 9  1 álib import md5 PdigesdAmd5(  â  ‰ T ‘.bytes +  ¬ ¦, "utf-8")ñusedforsecurity=FalseN ").b € S = V[:16]"3"/4(arandomô é Þ^ Bos.u* 7(16ƒ4a 5× ï ƒ_SHA-1….Asha1& �0 =  � |
X S Vñ5)

# The following standardI@s ar £r use with¤A) or ñ5().

NAMESPACE_DNS =< ÷('6ba7b810-9dad-11d1-80b4-00c04fd430c8')= <URL= 1= <OID= 2= LX500> 4> à"""Python part| Œñwarnings subsystemŽ
gðsys


__all__ = ["1 1",  �_explicit @show Fing"Z¥   "format ƒ "filter s= Rimple > Drese= , ecatch_> ]� ð	(message, category, file‚, lineno =s  ª±Hook to wriÂo   aM ñ; replace if you like< �rmsg = W]M� — ’ ò_Ù @msg_&C(msgþ	Y_  þ ë PFunct2to R 5 a ð &hed?wayâ 0tâ ö_|  y ë  lð file = msg.fileñ
    if file is None:    Å= sys.stderr 3  7 #2 U ÷
 when run with pythonw.exo < õwarnings get lostu    areturn àtext = _format7 ‚msg(msg) *ryÊ p.write(7 " æexcept OSError- R# the¢(probably )Ð ð invalid - this z 0ing° s± .€  ® ›pass

def¦ Q_impl« v ô category = msg. ‘.__name__Q €s =  f"{"  š  !}: ¤lineno}: {;    ) Ámessage}\n"
F !ifc  2  Ì 
ñt4 Á pimport . QcacheC       & = @.get  Ù .¢ ,o "now ; {E‚2ion    0# W.a[iY€gged durlP@¦ shutdown,… 	¢ Q# andÎÉ ÿmachinery don't work anymorÜ  	R  à 
! =- 7elsÇ # É  " !if¢ ç   <v.strip(ñ s += "  %s\n" %: 	½Qsourc°1not‡ Y Ã±tracemalloc’ h@LoggPkpshould Y Âraise a new ±	ª…# catch Å,6 aonly I8Xƒ‘Recursion !W C È   ¦÷suggest to enable Î  ¿Ait's} Pavail" ä  H  .  æ Z= Truè(tbÉ - 
Í  ?  
 E@.is_ 7ing»/ y    h  0 ? ¡get_objectG Qeback9Ý > ' " 3 Ž 	.O 9% > í ;Y Pif tbq Y  
êó!'O ¥õated at (most recent call last):\n']  t ú for frame in tb_  ! c P('  FìB"%s"6!noi
N  1  1% (W Ñ  ÂBno))š-  ƒ i 6 @i².    / '6 c„ e  / g C  ØÀ              Äline = None
  �except E Mion:"  * B 	0if  9 
 ! �.strip()a `s += 'k q%s\n' %T + úelif not tracingm = ñ(f'{category}: Enable0 õemalloc to get the object 'a  z  !f'. Ration? rback\n'¹ ðreturn s

# Keep a referenceb �check ifg AfuncH ÷was replaced
_showwarning_orig =  e

def % ‚msg(msg)ó p"""Hookj ƒwrite a J   ta file;k  ‡ Áyou like."""î 2tryK  ï +sw|   –NameError/ ApassE Felse �if sw is¢¹ Þ (  ] #° 's.ô 9() # *  ú@callÓ3(sw!   ’raise Typ³ #("f �must be s	Bo a  C  "ÆÁor method")
3  sw£ä.message, msg.Œ  ˜3nam  9no,D !  7  ) 3  % tg |6 f€msg_impl� )•)cformat7—	 ™ ›Fð2to '  ÿ he standard way’f’< Œ ð ”!f”	Q Ý –	+ ˜	Ž/ fü	¼ ¿    éùc _” ï *cfilter-1s(ar#, �T="", Œ"=Wv�, module  o Mno=0� ° Ãappend=Falsewñ"""Insert an entry intoñulist ofä �rters (ayrfront).?'¬ €' -- one9  "er ", "ignore
 `always
 pdefault Á "µ ‚or "onceÙ'd  «cgex thŽ 5, Qmatch¹'8> _class>  TRa sub$ "ofA ¦ ? )re}   y ”8 n_Aeger± number, 0 © ees allqÀ
    'appendñ$' -- if true, append to the list of filters
    """ ðassert action in ("error", "ignore
 `always
 pdefault �module",H  T 
 p"once")H cnvalide ’: %r" % (t !,)@ ˆ ðisinstance(message, strF    must be a 9ingÈ @ àcategory, typeB  C [classB 1sub (0 Ÿ, WarningE   9 P Ò 1Ñ  � ?strÐ òlineno, int) and  � >= 0, \F‚" + Út* !"
) 4if P2or Ê:  C œimport re- # > ·= re.compil³Bre.IØOelse6 ANonep  Š 	&   [  T  1 = S T R_add_îfï &, Ö÷ ,I6==Û)

def simpleL C =úC %=0E bFalse)Ô R"""IngP ` entryË
¢whs«A (atÃrfront).�AF — Ã matches allËs!¤!s.'p)0oneë/2or èc e !a G3 thÅ Þ òk2 ofA ¹? µAeger¡© number, 0ð T Õ'»? ºü/ Ý ; v V
F T*itemúôð# Remove possible dupli!Ý�, so new Ž@willÖaplaced#��correct  C. IfÜQ=TrueæX òexists, do nothingú if 9 “ 	6try   O1s.rº (Ö q  Ðexcept ValueE"
< 2pas„ , I iöF(0, L 
!if   $in
[ N ‡— À_filters_mutó'ated()

def resetwarnings():
    """Clear the list of % ô filters, so that no ñ  are active."""L / �[:] = [] _ D_mut� ñclass _OptionError(Exce —  ¡ used by o" õ processing helpers‚ ‘pass

# H 4 to- 3 -W?  s % °ed via sys.í Z s'_`  S(args–  for arg in sB F6try   B_setA  @ )  eè 	ü z as msg@ æprint("Invalid¾ ° ignored:",5 ,� e=Ç wstderr)þ  ® Í )ã 
ž { pparts =Ú ¢.split(':'º qif len(" R) > 52  Ñ YraiseÐ ð("too many fields (max 5): %r" % ",)Z Xwhile] <] q “.append('�  uðon, message, category, module, lineno…‚s.strip(n  ±   ?së† Î| r = _get ( a ‹ "  (	 & $if½ 3 orµ R‘import re5, " ú Ó = re.escape( a 4  
3  ”) + r'\Z'o =: Ü! 0 = £ w [ /‚6< 0I  3QValueýy   ( ¡, Overflow* ‡ ,   I 	H#"i2˜ r Â,)) from Non^Felse¡ & A = 0“ º 1èx„n=„ aif notV"on ç âeturn "defaultl#if( Ã == "all": r) ò always" # AliasÍ  » Î#('H B', '*  
 X 
 E 
 @once e£'} } 0.st1Dwith³ · a «	Yc !É ŒSGYb… K  – Wœ aif '.'{%inN3 ‘�builtins°9  P kÌ=7  
WQ\, _, .  .r]iñ F('.'GumS_‹ 4__(T  Ê,Ð1, [^ à])
        exc÷ept ImportError:
  Ñraise _Option  ñ("invalid module name: %r" % (m Ñ,)) from NoneP 6tryY ñcat = getattr(m, klass)) 0exc‘ ‘Attributet ; � õ	unknown warning category•  — Ðif not issubc… r(cat, WJ )x x Ü `return  ñ


def _is_internal_frame( y ñ"""Signal whether the " t is an = ð CPython implementa±± detail."""� @file¯" =F ´.f_code.co_ ( © !'i„lib' in # ù and '_bootstrap Ú next_exÜ 	AFindÒ  , ‘ ö that doesn't involveÝ +sÑ  4Î AbackÂ Gwhil+ å Œ» v þd&X   ó


# Code typically replaced by _sì  �(message,¤=– ñ, stacklevel=1, source 
tIssue aæð, or maybe ignore it !2an I5ion-³# Check if ˆ F„lready aöq objectGÖif isinstance¾  c$ =\ 1.__R!__J } ) @argu© %if ”  |3 c= User} 8  Û(¥ . ,–!e)ò
àyåc ÷=2Typw$("M p must b€  2", \ @  "� ð'{:s}'".format(typef† @).__‘2__)ÿÀ# Get contex5 1ionï 	F'if7P <= 1 Ý �sys._getµ7(1)ñ  ± C# If~ðis too small to careU !if¨ Ã aÂoriginated i™  H   #’ Y,7 An dof0tryU ‚hide anyt !s.Ú  =   ¤ : = ´ & * Felse$  < 13  % Ô# Look for on" less since± ° above lineb«rts us off« @or xfrange(¤ +-1b x � _í		 4 i˜
   µBValu¶G þ  +ðglobals = sys.__ƒdict__
  õfilename = "sys" ¡lineno = 1 Qelse:
  9 óglobals = frame.f_ " X # „code.co_ , k *    `if '__¢ s__' in i Œ PmodulÀ  [0 ]C 
» m/ ’"<string>ô ¤registry =c ô.setdefault("__warning( �__", {})c   ô_explicit(message, category, ô ", Ü ", ˆ $, P ,I  ] Ò ÿ , source)

def m [   V=None„   Ó C  •  )�Ü r = int(  #ifð @ is t 0  ê m  JiŠÃor "<unknown� ) D ö[-3:].lower() == ".py"R  - V 	 ð[:-3] # XXX What about leading pathc?æ %if•¯ ¯\ = {}/ ð.get('version', 0) != ñSters_ ª M r.clear(, ¿  [M .] I  ¦isinstance{W®™ T ¤text = str& p ©3 = ½ƒ.__class+
DK + ‡  b  % =ù
j  ke^(> )ñ# Quick test for common caseh �n7keyä areturn) À# Search the ‚  V @itemM0fil ’±action, msg£ ¨@, lnÕ1temB  ì „if ((msg"0 or5 a.matchã e)) and1 5 AssubW(rf * I(mod[ #od[ Ñ]  (¥ 0= 0Š S 7ln)  … Qbreak— 
Õû 3 = ô ) Ò# Early exit  s #if  k w"ignoreŠ�+ q# Prime� Ÿ 0cac™ orç€matting,” ë & 6 ";"€actually% Pa zip  î ¡something.4 aimportie  s  6   s(?  öä4uleñ!)
2 
Ü XerrorÛ Daise-0 s# Other :oncr@[keyßi £ ) -²0if & ) Ö ( 
 M ð return
        Ðonceregistry[ ñkey] = 1
    elif action == "always":  ! Apass * gmodule* e 	a  D ñaltkey = (text, category, 0)\  % 4if B R.get(5 )Š  % ereturn4 1 [- × default® Felser ã# Unrecognized'²s are error˜ Ðaise RuntimeE (¥    ?  "K  û (%r) in warnings.filters:\n %s" %E (ªr, item)<ð# Print message and conj> rmsg = Wb M% (- ‹ò	filename, lineno, sourcef P_show§ ümsg(msg)


classZ ‘object):
} ð_WARNING_DETAILS"} D", "
  �   ƒ  
   !",M I
 "*  ( ­ "")x ôdef __init__(self, ó  n _=Noner   j   ¡ h .Ý $ =q »  ñ % =
!  ‚  ‡4 =  
!  ‡ Cno =§
  3 : 
  6 4 
 8# =Ô 
 _¯ _“  !._ U__ ifÉ  > >…3str„+ÈD ("{0F: %rœ   Ï z   Å  no Es, "«  " ar}" % ü”!, ƒ
Õ é P  9 Ž H Ž  )`catch_0Zings(D"""A£ñ manager that copiesÃÅrestores the  rter upoqexiting% õ.}PThe '½ðrd' argument specifd vwhether[ ñshould be captured by afÀcustom impleH a0%of> .Qing()Á ñbe appended to a listN ý`  Þ ¹ 0. Oš wR MO is 3 O B . ó js{  d  } ¹òs whose attributeÍ mi½P* 9to à cc isï i`y an aÓrnative .  !  •  Å  æ4d '2'CÄimported und# )  ë iˆÖðis only useful
    when testiòng the warnings module itself.

    """	 Ðdef __init__(! ó, *, record=False,A q=None):? C óSpecify whether to: } óand if an alternativeR K òshould be used oM ‘han sys.mÀ 4s['Ò #']Æ  ‡ ð8For compatibility with Python 3.0, please consider all arguments to be
K   Çkeyword-onlyf  0     &"._## =ò Ì  e_´ / =Á  $ 0is ZN elsM ¡entered = ‘¹Crepr¹›•args = []– 8if · Æ Ñ  / ’.append("Ø ~=True")@ µ ?notÞ _ @ c=%r" %“  l ±name = type’@).__ %__� àreturn "%s(%s)K (" À, ", ".join(Õ ()),G-  *ed½ ðraise RuntimeError("Caný 0 � %r twice…  cÈ   !._& ½ SÂ   fi ¬ . - 
  \- &[:î	M _! œ_mutated(¢ Cshow[U l  �  Œmsg_impl: _! @ pj
o:log¹  
Ï Y c = logÀf  8 „# Reset 2 Ping()¥ €default ½ e
Pation †make surM Xthat Ø ‰() calls d < 	Á Ž 5‰ing_origÏ õ&lo  4
A%  R	üxá‡exc_info30if Ôª ´Z 
0xit	 zAout @ Ÿing firstdŸ û “ - Í( e ] " Õ ò 


# Private utxAfuncD ñed by _PyErr_WarnUnawaitedCoroutine
| z$_u $_c (
 ¡ � @line)[¼  f"# K Ð '{coro.__quañlname__}' was never awaited\n"
    ] ñif coro.cr_origin is not None:#  - õimport linecache, traceback$ `def ex 6t();  ? €for file– ,F €no, func P in r£ Jsed(Ž H  L  „ ! =E ‹ @.get (a )š  7   myield ) Š œ 9 @msg_\ ÿ*s.append("Coroutine created at (most recent call last)\n"K  6 +==Ñ.format_list( B)< åmsg = "".join(‘ ¥).rstrip("f ñ # Passing source= here means that if the user hÒ ’s to have“ amalloc8p# enablá !nd k[ wT  F  ©
 c,a Awarn- 3illM rcontainˆ  $<±. This does¨  § y˜ e*both*F ~­ J ˜ Q*and*§ eÅ ¿ ’ Ãy'll get twoK òpartially-redundant?  ÔÀs. If we wanä€to be cl¥  TcouldI ðrobably detect tÒ ðcase and avoid it, but 0nowC `don't Ý 1er.K  6 áò, category=RuntimeWPp, stack† Dl=2,ç ‰P)


#cSters mó s a sequence of ð 5-tuples
# The components$  Ú! ñ6 are:
# - an action: error, ignore, always, default, module, or once
? d iLRregexæ©must match4emessag9 àlass representU ¢  +  )¦ g   ‚ Pis beG  O #edE  ðq number° p  , 1ingâ 0> `A any’ 
#9deithero aý sW^,þ Òanything.
try8`from _— Sings ~ ¹ à3, _p–ñ, _onceregistry,N ð   T  ,  p_explic›@_filY @_mutÔz	d + =u e w  "  ! Ä ² ñs = True
except IYEVû ‹ B = [¢‡ " Ær b = {}
x Ò ²version = 1  ¦ð ¯uglobal # A V  P  Ï[ í QFalsežM@ iniy0izaR°
_processop `s(sys.Ÿ A)
if�] 00# S–ð al warning cateðNgories are ignored by default in regular builds
    if not hasattr(sys, 'gettotalrefcount'):
-   ófilterwarnings("_ ò	", category=DeprecationW( ,l  ?  õmodule="__main__", append=1)4 bsimpley "("Û p F  Pending½  M  dImportþ A  �ResourceC  d
del _‚_�ðs
"""Stuff to parse WAVE files.

Usage.

Reaè  Ýàf = wave.open(8 Á, 'r')
whereI ò	 is either the name of a `or an >  Îpointer.
The @ muszðve methods read(), seek ñand close().
Whenv �setpos()  …rewind()D  ÿ ÓSused,0  N 
e  Â   ð necessary.

Thi} PturnsÃ sinstancÜ ¡class withO ôfollowing publicz G°getnchannel¥ b -- re[ anumber2Tudio ' u (1 forò&�  mono, 2% t stereoø getsampwidth() n   1le   ÿBbyteöï  getframerate7  ß “frequency˜  Ù 5 × 	k Ù ' 8 qcomptypk £   €ression   � ('NONE'é rlinear Ç sñ  6  { ¹ N `human-E�able verY #of‰ W   K �   Oed' ‡ Sparam‡ aàdtuple consistP ) llþ?the“ Pabove° b Dorde“getmarkerz _‘None (for× •atibility»t Bifc �h h A(id)8 h 0aisa n error si$ §  * P doesNg _exist¢ 	. a‰  ÐP (n‹  ‰ P¢at most n !  \aZƒ Â ² 0 $ ¸ PbeginÊ :   > s streamE o0pos~ E   C àspecified posiõ8 Atell¢}  F|current5 î3 m  4 —ð(make it unusable)
Theö position returned by tell() and the$ ñgiven to setpos()
are compatible2 Àhave nothing, qdo withJ factualQ  in ð
file.
The close() method is called automati @y whˆ 0 ðass instance
is destroyed.

Writ† PWAVE e As:
  àf = wave.open( Á, 'w')
where,  } `either¤ ¢ name of a `or an >  rpointerÆ  a must Ú £s write(),m`, seek Cand
s.

Thisœsr ë ‹  clÿ _`followò cpublicGö ðsetnchannels(n) --Êß PumberV ! *Ësetsampwidth4   1le  . ›framerate.    , n Œ  Ž ! 2  mPtype( ,–) Ù Þ  6 @ressé 9 ©?the: à   human-readaÙA 9  ¿arams(tupleŠ Pall p/  eters at oµ³ t  “‰ current6aoutput{‹ P.�raw(data� . r audio 5 ¥�out patc¼ up_ ˜ 	  6s header% V O �   o}  z Þ 
a „ "--¯ 2  ã0 Æ J¥You should°`beforeN b firstÃï wraw or
0.  Ñutotal n^/ P does%P need& bes R,
butÞ it�0set  †ácorrect value,‡ }M aRto
be�ed up.
IK 1besL ¼  Y 
��, perhapsiPsiblyd 
ú,Yt�î 
E us~ ê `raw.
W.  n  	AbeenCSten, j ß e+ P(b'')ZÊ ()	$@size ¬ ,„1 p L \ J$ð	"""

from chunk import C  PollecJs  2d
0 p$op „builtins estruct ðys


__all__ = ["W�", "Error	 PWave_¤ zB"]

* `(Excep› )ÿÀ pass

WAVE_ô#FORMAT_PCM = 0x0001

_array_fmts = None, 'b', 'h', ð i'

_wave_param* Ènamedtuple(' O',
  ñ'nchannels sampwidth framerate n ¡s comptype	  d °')

class W€ Qread:b ñ"""Variables used in this / !:
& uThese v) �are avail8 p to the> ñr though appropriateA ©methods of]  ã �_file --D Qopen  Twith 7  ° �(), close	 ¡and seek()_  H  qset thr…  • £__init__()M 0 _Gy `number  daudio g/ [   õ e 5getQ i ’g  e / c 	e ¢bytes per Ö  + l’ Î  Ô  . bq † pq  ) ïling frequencyÒ K c Áb aAIFF-CÏ�ression à°('NONE' if # Û ` w   /�`human-~é c †  í u „soundposu Ppositâ Še»_treamk EtellÙ +, C esetpos/ ðÒternally onlyD ÷p_chunk_+ È @1 ifëae FMT    has been % † `_data_Èv_needed; Àed correctly›È= ½  01forY Rsa  Á-- instantia_Cof a› ì C  4BDATA i _S !iz¦s bof oney –  6  † 0 2"""F@def ~�fp(self,Ù)4 ¸   “._convert7B  ;= 0  p @ = Cx( °, bigendianš2if k  & .­öame() != b'RIFF'”  { Ðraise Error('4 ñ does not start œ 9 O id'h  æ#(4f OWAVEf 	 \  a & %U º (mtbJé€. wh`1ã V 5 5= 18  
"trãÀ              chunk = C ÷(self._file, bigendian = 0)
  ùexcept EOFError:  ( Ybreak h bname =t @.get ([ "if   ¾ == b'fmt 'c « ‘read_fmt_` ( 
Q  � , ' _6 I = 1¢ .el| Odata|  if not W ©  � araise - ('U å € before ã » '¼  4 ä @	¼  d Ž tnframes& .W tsize //± " ?izeC l °seek_needed + âW.skipÓ*7 orFu ­ 
B	:(€ and/or 6 K¡missing')
¬ Ádef __init__×F, f)[ -Ái_opened_theöf = Non÷if isinstance(f, strF  wÐf = builtins.O  ' ;'rbËq f°  K ð	# else, assume it is an V  •  object alÂy9 6tryÛ  J n  ý Ffp(fT¸
+ #if
(  W wf.closeà  £v3delu,“ ? º £^enter/ areturn› [ 'exÑ_*argsc 
#i ò# User visible methods.   ‹ Qgetfp+S ‡ � lrewind1 ç _˜_Cm# psoundpoª0U ! " …   ~  =&-._ÁÛ  ¢!if?
ÑV 5 c  @  g ûV  1Ltellÿ 	0ã ß  ô�channels; 
n& 
< Ý: $ 	8 Ÿsampwidth: 
& 	< O Orate< 
& 	< comptyp; % :  u 
 :  % 	: _param]ð_wave_params(selfð.getnchannels(), self ïsampwidth(),
  , ˜framerateA n  T ? ycomptyp>   �name())
@ ð def getmarkers({ !):  œ ½return None/ , H, id0 ð aise Error('no W 's'k Rsetpog W, pos<  if q < 0 or >6_ó — › k õposition not in range')È  × À._soundpos =_  ödata_seek_needed = 1ô Cready L #, ” 
À   ,._J 
¸ $ `chunk.t V(0, 0¯  à ¨ . ¹ *‹ 5izeÅ  3 B
o   E — s =posu *  — 0i $ifü Z == 0n 05b''0  w # =¸   _„  R(F Ø #if< :ð != 1 and sys.byteorder� Z'big'“  s ¡ = audioop/ Pswap( —_[ w  qconvertp  4 ^ 8+ [ J  Ã R+ len4 A // W4._n=¥  o — «#wò# Internal methods. %  ó_B_fmtŽu !, š)â 6try  J¤wFormatTag;¨  › µð, dwAvgBytesPerSec, wBlockAlignótruct.unpack_from('<HHLLH'Œ .§ F(14)O‚except s< ek
¤ r!OF‡ W Á Á   6if È  6ú WAVE_FORMAT_PCMO  C ŒÆ 
Â a2))[0]… ?   È  % Ì  % aYF = (  @+ 7)W8}  Å,otY
ù  [ €  e`('bad Y 1le Â`Jelse> 	: ‘unknown f>–: %r' % (†,á	œ _^  ˜ T# of 3™ ”@size¯ ‰_	)<  2 F† = 'NONEÚ   Rà = 'not compreñ(ssed'

class Wave_write:
    """Variables used in this 0 !:
& uThese v) 0are- `r sett< ñ through appropriate methodsB )ofV  { ñ_file -- the open  Dwith;  ª �(), close	 @tell aseek()\  M  5setŠ  V £__init__()R 0 …_comptyp} pAIFF-C  �ression  p('NONE' # n 0setC  ; A() ooparams€  5nam€ ¡human-readL l �  ¼ è   ì ~ ”nchannels|ônumber of audio   q K ð žsampwidthr “bytes per|  + /lez  ( S z `framer�h 8 ïling frequencyl E l n( V  Òaten toøoheader„ ] ‚ B § ÔÒternally onlyû–_dataleng˜@size <0!es‰· _› Ù iUù Aactu‚ ) ² „  … C 2"""¥Edef ñ‚self, f)ë 0`lf._i_jbed_the�V= Nonr÷if isinstance(f, strF  J Ðf = builtins.O  ' J'wb'! ƒ q fü  K #tr�    5  µFfp(fP fexceptÍ  + 1if . Ô 
(  , #f.Az   Vraise=w  U ,Œø   .1 ¨I  ‹convert N 'K = 09  aÉ  :¾8 v6   V;  ø ; ¯= 8FalB€__del__(÷ =� ¬^enter/ areturnÝ�A__exË \ , *argsc À   #
    # Uñser visible methods.
    # õdef setnchannels(self,  !):'  1 i* ö lf._datawritten  " ðraise Error('cannot Y ðge parameters after starting to M 8e')j � O < 1f �bad # ofh  Á G  Ë &._J =× 
l  ý gý 
ò  Ã H Ž hnumber�  A t— {return V ’ Ãsetsampwidth� 
� C �Q�  �F or  ?> 4   , 1le Ñ ¾    & =U g
^ •H �  $ ‰ ™ , ˜ Œ @setfÆCrate™ 
— Û ™Q� _ <= 0ü  ‰-  ¿ ‡   Õ = int(round( &))g
ü “> — $ “ ‘*  ¢ Š  ¹ · 
‘ �Tg n‚ 3 = 
 ®  j =¥ 
$  6ten? ¤setcomptyp}  , 
 GnameT ®Z €  ™ Ä·in ('NONE',�  ±unsupportedÀ €ression H Ÿa =,  $ Â V y "   "   <g<˜ 	| E \ ]    O ¶
% t 1setõœ z ™,ù!, þ ç,Bß — 
  Œ " =Rs©  ðÀawritten:
    ó2raise Error('cannot change parameters after starting to write')
 J �self.setn= Unels(
 )% ¥sampwidth(
 % f~ Urate(
 % n #s( ! ”comptype(	  , 
 aname)
™ qdef getî  s(È !):  Ú 0if   %._Ò 7 or Ä 
 š  À N  R 	q \ 8allk7setW×return _wave_£ � ", ž ‡  � ,Ï  �  0 3.   ) &qsetmark$±, id, pos, & å 	á 3 )0šupported'|	V ~	K 0no ( s<  -er¹9FNoneçAtell¾ d bD Ý6ten9   ePAsrawC g, dataI +°isinstance(!  , (bytes,  garray)5  ‘ ' Ñ = memoryview9 —).cast('B¥ àensure_header_› rten(len8 Î 5 =  A // ¿ %._0$ *¼C #if vconvertçº — " … rA o Ð!= 1 and sys.ïorder == 'big'c qaudioop/ Pswap(5«[ ¸ “ Pfile.!Œ  D   Wten +%½ F G* = #+  6t3`  X \ • © ?  „length !‚    > :ten5X b_patch&(pQclose� ˆ:tryC y  D
  úb Š0¿  +   N  ³ Ç  :   m 
Ï    $  ­ v.flush(… kfinallà 0 1 = &N  H  gÐi_opened_the_   3 0if  #= o  H  E .œ­#h ò# Internal methods. h_ˆ ã sðsize):
        if÷ not self._headerwritten:
  'if( šnchannels$  / ô raise Error('# ) = ¯pecified')\ Ÿsampwidth\  ( 1le + ^ Ÿframerate^ @ing , _ 
: 4e@±(datasize)
ç Ydef _!  4 Ö, initlength)Ž bassertr ”P  g B q._file.Z w(b'RIFFY
±ø ¯D n ' =� S // ( Â*% yvÅ+  ÷ Ð # =, ] < 9  N Û 6tryì Borm__ E_posc Vtell(� ñexcept (Attribute�A, OS	 o` 	ENone– ã m qõstruct.pack('<L4s4sLHHLLHH4s',8  a C36 +$�, b'WAVE'	 šfmt ', 169    Ã_FORMAT_PCM,E F Ã ª
? ´ . t/  †A / 
 @ * 8Ý  ô &')ž#ifÈ fÓ!isø x H û ¯'; U V¢ > 	w = TrueÒRpatch$ ,VÅG   �  RTten =8  – 
	ereturnE ?cur„ 	Aseekª +._z6, 0Ÿ2  ˜ +e(ê;', Ñ ' =tenAv  Ö Áv ™  E q b   ? ZB  R  

­Ðopen(f, mode=ŽÛ!if @ is  › if hasattr7 '8 '4       P = f.	 Á;elsŠ  q = 'rb'& t qn ('r', \ Â Wave_read(fÊ)el: w: $wb– À    return Wñave_write(f)
    else:
   ðraise Error("mode must be 'r', 'rb ò`w', or 'wb'")
"""Weak reference support for Python.

This module is an implementation of PEP 205:

http://www.pB Àorg/dev/peps `-0205/~ ð

# Naming convenO ú: Variables named "wr" are w® ñ objects;
# they# €called t´ pinstead  á"ref" to avoidX ò collisions withF é p-globalp() func› 0 im�ed from _� iref.

 ' " (ž3get) lcount, s 3ref
 Sproxy @CallP CType  RÅ$ Ä_remove_dead­ )­ 4set°  °Set, _Iteraò rGuard

ø   _3e¡s_abc  # Ie afterjƒcirculard .K 4sys µitertools

Õ Us = ( -, á)

__all__ = [ß1, "9K", "t
 #s"D 9!  QKeyDiÚ 0ary/ 	P  Ž > › 	- s  YXValuec ƒ 4Set- `Method Üfinalize"]


€à.Set.register(f NSet)' 0MutC. p
class > w R(ref)Z1"""§ £A custom `Ê’.ref` sub= üwhich simulates a«!toH ‘a bound mà `, workþ!ar ðthe lifetime problem¾5 !s.J  š 	 q__slots "_ª_ì@, "_f P_typeIR_aliv
 A__"
D ñdef __new__(cls,   , L“back=None °2try    Qobj =5 ‘.__self__X      – !   ! ñexcept AttributeÄ
` Ý Ù ð("argument shouldç[bnot {}¿ „  €.format($(.2)))Û ò Ã gcb(arg Q `# The ò -à trick is needŠtQcreatí Vqc M Rcycleà     \ ! =c B_wr(û    !if .Ü
4    =  ‰ = Falser  $ %ifè¶ 0ot ý M  - (Z Œ     =× .GŠobj, _cb* .¦4 (( Àmeth_type = Ãtype(meth)
  ùself._alive = True  _wr = ref() 7 preturn  
1 Âdef __call__, :  g åobj = super().& N @func" Œ   _r   0if D °is None or %   i  m š  ) �   ®  ._ _
 E ,Z )Ä #eqÂ †, other)` áif isinstance( Ç, WeakMethod*  Š aif not$b!or :  ^  4   ®  ã - Ë ! mref.__¯ C andu  á  K2 ==Ì $._ Q n èNotImplemented/ne{ T³  3þ / !"‚__hash__. �


classñValueDictionary(_colle ós_abc.MutableMapping63"""  K @thatz�erences vW ’s weakly.¢õEntries in the du p will b ñscarded when no strong 2ref^ 1 toA d â exists anymor1"""2 Á# We inherit2 ðconstructor without worrying ab  š SinputB ¦ ð; since it uses our .update() ©’od, we gen DrighG ¡checks (if‰ Ois a�,‡ Pobjecç âre unwrapped oJ�way out,M we always & # F  ) 3in)�Jinit4Ã=(), /, **kwð É / ¡remove(wr,µ@ref=ý ®±), _atomic_& 2al=	 pe_dead_7refQ  U  : M I F  !iff  X H &�% ¾._iterating$  M  j ’._pendingš @als.Išnd(wr.key  6 OelseP 1# Aî  î ¦ ƒecessary+Athisþ ^„ T  P# canû �ñed asynchronously by//GC= pÊ|.data, Ð þ «  ;	 U ð# A list of keysb"beÚ %ed' E C[ = []$ ŒÜ&t(YD  ¤ Z = {}7 àupdate(other, ñ**kw)

    def _commit_removals(self):   $ @l =  •._pending* # d# Edata ó+# We shouldn't encounter any KeyError, because this method6 J õalways be called *before* mutating the dict.7 vwhile lË  Ï Õkey = l.pop()+   Ø øe_dead_weakref(d, key/¡_getitem__*  d /if.#  m R{‘ oSW[key]® Êif o is NoneW Uraise](»  o   <els. weturn oO_delÞ O2del& 1Þ ƒ 3len]‡X4ró 1len¾.� 	Þƒcontains‚ ßD:try¹ð
eexcept×
: Ò UFalseÐ &1not*cCreprâ d6 ò"<%s at %#x>" % *ñ__class__.__name__, id )Bs w, valuek Ï4G ÄE  =$aedRef(q ,fÚÌBcopyÀ R˜ 4°new = WeakVù §DictionaryÆ°with _Itera CGuarO�  ¸0for„r, wr inÒ  ó .¨'s(U .    M'wrk     9
i  "   4newOoR2newA __?P__ = 	  PP_deep ag, memo§ Afrom5 „ import 1 m †:$¾�Š ÄBO] = ‘ |1getÑê,ßðault=None):
       ÷ if self._pending_removals:
  $ ecommit# %()$ :try1 Bwr =Z •data[key]- ú except KeyError9 æreturn default4 :lse) go = wr„  ¯ »if o is Non/   õ
# This should only happeng  &   †   eŠ   1 !o
K  def items(9)¹ o4üwith _IterationGuardk  – Æfor k, wr inŽ.› —  ,   vT  @if vX?not\ & Pyieldq v?key�!ifYð í °__iter__ = ô  	�rvaluerefB"""Rò an3±rator that Nñ	s the weak references to V "s.k  �8The' @are ² guaranteed: Ábe 'live' atG Atime· C Pthey 9 rused, sj ñresult of calling9 ’ VneedsE ðo be checked before be8  W ". ‰0can(    ™ UavoidD Pcreat2 f ¡will cause… ágarbage collec>oE Akeep& +Ñ around longeg n º 'edE5"""@ °\óW from®» "()ç R \oY™ Z ?obj\  !is¬º š6obj	0popÌû¶5‹hile TruK1keyTá.Š  ³ ¤
 šî rh R1popê ,aw, *argskö Àelf._commit_Ãremovals()
  Etry:   ÷o = self.data.pop(key)2 þ except KeyError> ENoneS €if o is  
+ zif args  ‚ areturn 5[0]J   Oelse1  Eaise‘ ° 6 2 _ !o
$ ð def setdefault(ú s, key,  =º )u 1_[key]-C › ¤._pending_Ë™     ( ecommit' “ $  á°   ==cedRef(ö ,@ e4 B F/ K  ocupdatekQotherd�, /, **kwqi¡/lfû ÷ dØ°  Ÿ ‚  £?not§  �hasattr(° —, "items"§  þ   ! r = dict. 
92for`Qo in . .M (M  d oš

] K^ Z * %‘valuerefs¹¬ C"""R²ñ list of weak references to the D "s.z -8The' @are m guaranteed: Ábe 'live' atG 6timaPthey 9 rused, sj Qresul‹ qcalling9 ’ QneedsÝ  ˆ ðto be checked before be8  W °.  This can(    ™ UavoidD Pcreat2 f ñ that will cause… õgarbage collector toE Akeep& +ð around longer than º 'edE5"""@ -4rÑ Ïï” 2())Á q__ior__% ,Î”ïêb  " N M Òif isinstanceZ3, _F÷ions_abc.Mapping…  àcýKcopy/c.¢  8 ¦ c` èNotImplementedÁ rÂ MŸ__class__Ç À    c.update‡(self)
  …return c  ñNotImplemented


class KeyedRef(ref):5 ñ:"""Specialized reference that includes a key corresponding to the value.
N ñ This is used in  PWeakV$  Dictionary; “avoid havK acreateF Qa fun, ñ object for each† Fstor_ ñmapping.  A sharedD „callbackB 0can– ’ õ'key' attribute of ar insteaF pof gett£ aú  àfrom an enclos) SscopeA"""
� ò__slots__ = "key", ôdef __new__(type, ob, ½ ,ð © ö   =‰ .5 " / .¥ =H ˆ  F $  … ainit__e† “uper().__3 ³ )m ø6Keyöq(_colleÙâs_abc.MutableMÃé C"""   ·‹šsÍ ƒs weaklyhtEntriessdjñwill be discarded whe™ reª!noð longer a strongcì!. ß J beM2d t> áassociate addiå°l data withÈñowned by other parts ofƒ  an applicaA : 1outR &ng®s=SthoseÛs˜ D œ "esÓ ly§ 1fulN 0 Û†overrideZ B ‘accesses. À¨ð : , eS=None¸ [  .ù A= {}C    >  remove(k, % qref=refn)A  .    $ =' (Ð  !if » t € É   % p._itera¿$  ,  j A._peÐ_¢ `als.ap *(kz  1 OelseK 1del™ þ 5[k]ü d \ e¼  €# A list„Adead×‘refs (keyì2be > d� U  ¦ 5ing¹ L = [y RtND òdirty_len = Fals‚ ì !ifãjA pupdate()Necommitš è:ð# NOTE: We don't neeNú  tFñmethod before mutÈÀ m ,C¨because a Cð never compares equal=da livejI peven ife 1y h— } < E Î$ ,P# Howo “, it mean¦ may alreadQ tve beenÐd @ lž-lf�Às
        d Ó= self.data
  …while l:   :try   édel d[l.pop()]0 þ except KeyError< Qpass
3 ðdef _scrub_removals(– )5 /d ©  % •._pending< â = [k for k inà % "if d· O ÷dirty_len = False¥ ¡_delitem__¡ W, key¦ A ATrueä .#  nP[ref(? ]` ?get` SreturÒ D 3len  › #if	ß 3and Bx · #& ð may still contain¶s which werú G ±explicitly èñ ed, we have to õ
 them (see issue #21173).F L F3)# (1len§ÞE) -  )…NreprBU ð "<%s at %#x>" %« ñ
lf.__class__.__name__, id~ )\ sáw, value­ß á,ƒ7B)] =4 ¶ Bcopyo ½ö	new = WeakKeyDictionary()°with _Itera CGuarµ F  pM#eyª V £ .°'s(¾  1   0o =o     úif o is not Nonem  "   Vnew[oë     ˆ2newþ  __ü P__ = 	  SP_deep Íg, memoª Afrom5 „ import 1 JC�ãÑ @“Ö (hã P ;1getMá , default=¬?:  7 ×,5 	þ(s‘ þdTwr = R ² [OType\ – » 1   )wr¼,Å Ê à Þ/wr‡key = wrM ¨    š/ey Pyieldbz Î =keyBÍ ÀtionGuard(seglf):
  úfor wr in self.data!  , ©obj = wr()<   0if  ¾is not None?  ( Pyield+ 
C ò __iter__ = keys °def values(� ª üwith _IterationGuard$  f Î ,F 	Õ w.items(T  0   !ifÚ  Ã ¡ ° mkeyref± ñ"""Return a list of weak references to the .Q  � 8The% 1areZ guaranteed8 Ábe 'live' atE AtimeY C Pthey 9 rused, sh Qresul‰ qcalling9 � VneedsE ðo be checked before be8  W °.  This can(    ™ UavoidD Pcreat2 f ñ that will cause… õgarbage collector toE Akeep&  )ð around longer than ¸ 'edC5"""> r† „1â)o p0pop  €ö._dirty_len = TrubQwhile 
î4key}=Q.e 
?oýU QŒÓ oj 	Ì È ,T, *argsÔ W ú   ¶ ”(ref(key)N m ¨setdefaultt  =	{ \ > c ,0“_remove),J «cupdaten Adictf ›, /, **kwî 'd ‚0if : a!ifo€hasattr(- 0, "#'s"Ñ  g     ± = type({})0 
æ “!in� �/d[2] =×Ì Mlen(ú  ˜ Æ1! »s__ior__JWotherÛ ;  r ÇN M áif isinstance(O 3, _è÷ions_abc.Mapping…  Ä cÂKcopy&#c.Ý S 
r¦ c· èNotImplementedÁ rÂ MŸ__class__Ç ã  ‘â #
v À finalize:
 ô)   """Class for finalization of weakrefable objects

   ) ð	e(obj, func, *args, **kw
 ñ) returns a callE a !erF S á which will be, ped whent ñ is garbage collected. TheC åfirst time the˜ r7  v ñ ed it evaluates« (ª © I 5and±  J þresult. After thisa ‘dead, andB  o 0ingp EjustN RNone.7WÕ  ^ ð	program exits any remain@ $”tð  at3   attributeè Etrue?ðrun in reverse orderË1cre×.¬ ³By default R  à 2rue 2"""± 2# F E ± don't have¹ Pstateb °their own. ŸBy ar¤!# ðused as keys to lookup _Infoê ^ »   �registryK !is´ €# ensure‰ atŽ€y cannot7@part† ¤a ref-cycluá__slots__ = ()K _` R = {} ò shutdown = Fals» €_index_i =  ´tools.countM Zdirty7 ` £ered_with_e[ r cwÿ :  Y	­ "€@", "d   [  e 
 \  
 ­ "")»ðdef __init__(self,e­/°… 0if V 5 .+Ë -  ¶ p# We maÆ ¸1eÝqO0mor¤Óan once becauf C   #Áð thread race, buë atérharmles 1   TimporÇH  .Œ ._@ M
 (   uð b = Tru 0 iµ"= # Â .»  =�' - v  B .‰ ! =%»   ç0 =  
 ø3 = 	 0or a
% ú ´ .$s = next äž  ¬ 0ry[ @] = œ k 4#  ~ ~ _=© ): """If alivpen mark" X WCµ_;h  p”otherwise0  h  Ã     ¶  ­ary.pop,Aû !ifç � ¿  Z rã0 Ì (*l .· a( ª7{})žadetach„ !U B,(,)Àe"""
       ð info = self._registry.get( 3)
  Robj =. 1and	 –.weakref(& 0if ) Àis not None .  K ^ 1pop^ ," %):e  l Âreturn (obj,g Cfunc Cargs  kw � or {})
C �def peek] W ù"""If alive then d _  M ", U !);O  Ž ”otherwise4  Ô 5"""! @M6‘@property»  +, 0Wheö Ò finalizer is>ù r¨ Û; inA�s  Ctexi[Ú >"""t ðshould be called at = „ }¬ Pbool(4 )– 
 !.a’ °  v.setter(# )w, value\ E @!ifÍõ  ^ = ‚ 1 = Ÿ ` �  ¥�__repr__ x   �¸ à
¥ =@'<%sÝ0ect‹ò%#x; dead>' % (type£ Ò.__name__, id  Oelse^ cfor %rm g \” : y !, ˜ Jobj)—   5Á@classmethod_ v°select_for_uG(cls}2# RþS(�s marked º  7 á, oldest first^  ¹ ¡L = [(f,i)* 
 gin cls&€items() :%]C ð.sort(key=lambda / : –[1].indexwÃ*[fp "L]h Á  ü öAt shutdown invoke+sb bwhich N =Utrue.¼ `# This Ú‘once all n÷ non-daemonic threads have beenG fjoinedY õreenable_gc = False. :tryy*ifp
  §•import gcE     ‚if gc.iso 'd(   
� 6Tru� #   `gc.dis¹ J    ‘pending =,Š `while [ À  ? iB !isC à or finalize._�dirty:
  ÿpending = cls._select_for_exit()9 ¡finalize._b � = False0 sif not l � _breakB 4f =? O.pop˜ /trê ð# gc is disabled, so (assum¿no daemonic‚  @ð# threads) the follow= !is Ïonly line inE 
ðis function which might trigger crea E ”of a new ‰r- f/�except E ?ion™Bsys.. chook(* _info()%rassert û"in`…registry¬ ¾ l·ö# prevent any moreæ Ðs from execut|0dur zshutdowx^ ¥ j = Tru§pif reen>_gc2gc. ñ2()
"""Implements (a subset of) Sun XDR -- eXternal Data RepresentÕð.

See: RFC 1014
U ñ

import struct
å 3io  rBytesIO ;Dools ñwraps

__all__ = ["Error", "Packe
 5Unp ¢Conversion) R]

# â±ions
class  ( )5"""  ) ñfor this module. Use:
åU � xdrlib.R r as varN Xbvar haF$ pinstancf \ ež X ÆPublic ivarsJ 0msgrcontainP rmessage7 1"""— ódef __init__(self, msgâ  ”   .O = 4 Crepr4 / preturn  O  ; j /st5 7str4 
}£(r `pass

Z uraise_cÏ _eù(#3ion0 �""" WrapP3 di.0 {s in a s  . .û @cW  € Qesult¿ s, values  D�&ž 	7 S  6 2	   2eæ & Æ ² ²(e.args[0])'2Nonìz r¯ 
dY !"", š`ious dº Ðº 'Åto a buffer. 
	NI ÿ Nå  .    + @__buïó"()¹ 5 0get "fe0: ß  P ð .__buf.getvalueñ()
    # backwards compatibility £get_buf = 
 Afer
 ñ@raise_conversion_error ñdef pack_uint(self, x):  t    ._Y à.write(struct.4 P('>L'/ )h g "lg  { r_enum =» 2int� Í OboolÍ  mif x: Ó Ab'\0 "1'i ù Oelse, 	#0'ö u ouhyperw  6tryQ \ ‚ Ç v³x>>32 & 0xf ‡ Àxcept (TypeE¶#, ‚Äj) as e^ î% Cî7 õ(e.args[0]) from Noneæ¢ ž bŸ 'ZïhòÛOfloaÜ fui odouble ñFdj PsfstringO Gn, s˜�if n < 0ûBValu-#('E ÷
 size must be nonnegativeòÁdata = s[:n]{ «õn = ((n+3)//4)*4 .  °+ (n - len( P)) * U'. ( Äâtfopaqueä· ! 	 ¦  ~ s9r [ dn f (\l 2 
Œ v Ë  Tbytes©   ¨ 4lisp  ,§7temÂÀfor item in & 
Ê¿ 1¿  –ˆ  = (  6 0£ffarrayR x ž !ifÏ ! j) != nŸ diawrong ` mYê Ì 
KQ ±  � ®   " a !n,„^ À



class Un¤ "er2"""  s various Íò representationsfòthe given buffer."""i -ƒ__init__à  G !À  self.resetñ(data)

    def reset(self,  :     �.__buf =  vpos = 0M Áget_positionT )N sreturn U 6pos7 s7 $, F A : % =  E  | obufferz 6buf5 Ldone/ 'if¥ R < leÌ ‘  $ñ	raise Error('unextracted0— remains'p¢unpack_uinvP 7i =z muj = i+4  ³7 …buf[i:j] !if¿  & V) < 4�½ !OFÀ 5 ªbtruct.± S('>L'"6[0]B _Ï ŸlÏ Ë senum =  =intí Lbool65 8)  >hypªh~ ')š$loì  …  �Íhi)<<32 | loÁ } x\ & ~ Êif x >= 0x80 
W I zx - 0x1' %00Ê ª x› Ofloa�fK Z£^doublem_1	äì8  Æ7 ì8•©ìdÒ 	qfstring8, nÂf n < 0{ QValuei#('B ÷ size must be nonnegative'uò  4 ·  Æ + (n+3)//4*aif j >øO7buf¥  ? 0 Øjy­ y3i+nèvfopaque:å â>– nè O úƒ " ` #(n^ ‡ ð string
    unpaôck_bytes = unpack_string

    def ¤list(self, aitem):(  ,  ! U = [] vwhile 1#  ' @x = G .o euint()4  # þif x == 0: break ,!=W  8 û'raise ConversionError('0 or 1 expected, got %r' % (x,)| 6tem ã �  ç €.append( ? preturn ! >cfarray@nC÷for i in range(np ò  l � P ” (Õ – 	• ? e n®] Ðê ä ô
import contextlib $os
 Gpath dshutil Estat y4 ðzipfile

__all__�q'ZipAppþð', 'create_archive ð"get_interpreter']


# The __main__.py used if the ò@rs specifies "-m module:fn".
# Note that this will always be written as UTF-8 (> ð
 and
# function names can5 �non-ASCII�Python 3)m óWe add a coding cookie even thoughg !is¿ xdefaultH �
# becaus¶ €e resultL (@ may…  (pnded to £run under ‘ ó2.
MAIN_TEMPLATE = """\
# -*-  p: utf-8 Ä{ $}
	 µ.{fn}()
"""ŽðWindows launcher� È s� UH�when pars» Óshebang lines» ^ ‡àhas no BOM. SoÑ#3on h  Z�On Unix,!  ú _0sys"enoó.
if sys.platform.startswith('win'B� _9 A = '
b'
else%   \ 6get{ A ·()


class åa(Valueðy †pass


@o. €manager
ÚÃ_maybe_open(ö,ÖeF Öif isinstance" ó(str, os.PathLike)0  ’  R  R as fñ  '   qyield fÞ “ "

­  C e_°_prefix(f, žÆ… ³"""Write a Z.X \  Õ û’ - ˜= b'#!' +\ .�#e(% Ñ‘) + b'\n'Å  _ !f.¨ *  °kDcopyƒK4new 	Ì D=Non†ñ"""Copy an applica*±0ifyÿ ¯¢ 
ô •îÀn(archive, 'ãrb') as src:
  ò# Skip the shebang line from gource.1 ÷ Read 2 bytes of& Á and check i †y are #!? �first_2 =‡ ….read(2)] 5if ! v= b'#!'«  ² ‘# Discardv uinitial�    Ê Erestš Ö ‡  L j E b''ƒ   1src›  
5()
 ówith _maybe_open(new_archive, 'wa:dst¶ ö_write_file_prefix(dst, interpreter � 1# I@”re was no�3, "· ¡" contains 	± L 
¤ † Q, so •  = ðm before copying  DH  A 
JAdst.N (‡ _Ò ‚ pshutil.^  < Ãobj(src, dst](ifGªisinstancefFstr)^Šos.chmod$ xos.stat À).st_mode |  ô.S_IEXEC)


def createÍ!(söÙ, target=None¯ Bmain 	+ õ ’   filter  ó compressed=FalseÅ A"""C{ ó an application W‰rSOURCE.ŠBThe  q can be°@nameôða directory, or a‡ e  Q-like² Ñobject referrûo‰ Pexist † z  v!en_… �is packedÄ? È ¡in TARGET,y TwhichÀ ¤     . o ä N Z O qomittedGù will default to+Q ÖA.pyzK ˆappendedó ¡dŸ` dhave a¤A`specifOW ñthat it should run x ðINTERPRETER (theò ³ 'beöR !ifJ 2 0is ›!),ì @a __’b__.py bÒruns MAIN (if	 !isH Bnot ¥ 0iedA  ö	G Ž Pused)‰At is$ArrorJ #toI ya fw@nythBoÕ 0 thß› a!noG v  � d/k  ¾ Úd `Q h(I ¨1""" 0# A`é&anõ ë?* Ÿ 1_isµ1 = ´ ¥if hasattr&'È ]/nd  I'ò _ 2Tru‘Felseß( ó  = pathlib.Pathw 2#ifO.° (k À      sourceô_is_file = True

    if source :   â_copy_archive(& õ, target, interpreter)3 breturnZ ó	# We are creating a new Q ñ from a directory.F cif not” –.exists()• ñraise ZipAppError("SÀ Q does< 5 "• ³has_main = Â Q / '_ ƒ__.py').(2 1if 1 Dand >  	¶  /  A"Can¿ ðpecify entry pointj3theÚ  [  ‡ ¯ þ (‚  or& « A£ . 8 nou "")Œ P ¡_py = None³ è Û Â# Check that@has ³ Âright format¦ ì °mod, sep, f_ c â.partition(':'P+  _ok = all($ ð .isidentifier()\   ö in mod.split('.')E /fnD /fnC _°sep == ':' ç0mod[   e n ¾ s xInvalidkQ: " +8³  wâMAIN_TEMPLATE.K�(module=ISfn=fn®#iff1 is±¥~# =Gó.with_suffix('.pyzv#elì ‚hasattr(9 —, 'write'ã  ó  = pathlib.Path0 ‘  f Ã _maybe_open  N –b') as fd¤ _c k@_pre› /fd1 compressioD@(zip¢€.ZIP_DEF-D9' bed elsÁ › ? fSTOREDŒÄ ! pipFile(˜ T'w', a Gion= Ü zÛ  p �for child­˜.rglob('*X ,   `arcnamv6 Ã.relative_to“¥  0   ”if filter3 or (P Â 2  !z.~(l ,m } §.as_posix(Q 3 :_pyå   K Istr(2,æð_py.encode('utf-8¬Zb Šc.chmodcð.stat().st_mode |  ÷.S_IEXEC)


def get_s  # ´#ú¾‚D, 'r¿þ  {€.read(2)%Vb'#!'  æ! f' Aline¡ �rip().de�shebang_"4ingª  `(args=‰¡ a"""Runk`zipapp�m� ] jRface.Í€The ARGS2 am�³ lets you sy ·ðargument list diòrectly.
    Omitting ARGS (or se ñit to None) works as for argparse, usingG Àsys.argv[1:]( 0the( ¢ument listn 1"""/ `import" J 
  5r = A.ArgB Po 7r()' c.add_a  ð('--output', '-o', default=À ,8  î   ðhelp="The name of ­ ? ¢ archive. ¨  0  õ
"Required if SOURCE is an6 "¢ 
apython¢ p¢  P? À interpreter ?use¬ (ÿ: no shebang line).¦ 2mai¤ m¤  1 ” functionOqapplica KŸ  Á qan exisˆ __Q ___.py« �compressSQc', a„ ß='store_true'üC8 ± files withïdeflate methodF3 Aare e Dd un‡ Ted byyf8inf¦0FalPÀ qDisplay´ Afrom Æê	_sourc S 0 di)1ory¡] �Yrargs = ¿.  š s( )Ü¢# Handle `¥ -m zipapp=`pyz --`- if
 s. :j  ‹ðif not os.path.isÅk .Ó ),  0 ðraise SystemExit("Can only get ] ÖÇ; B c=5 _ 	z ¥ †print("I¬×: {}".format(@ Ò or "<none>")? t  Pe® 0A/ifó 5Ð!isÂ f (3Êž.' U) and½  €  C Lsamex,®R †ÁIn-place ediùoï~sW å0sup((edŽ ' 0gs.&ê G achange 6 ­Ówhen copying"iscreate_æß	á 
X/Ø=ý.í , w   
 < F)  �)


if __®t__ == '$' T 0()
]@ReadÍ¡ write ZIPÎàs.

XXX refereô.nces to utf-8 need further investigation.
"""
import binascii  …lib.util o
 „tertools o
 ”posixpath (shD Estat Ftruc yD ”threading* Dtime òcontextlib

try:
    ± â zlib # We mayý ñits compression method5 qcrc32 =6 . ‘
except IRError` Y i= None; 9? ‘ ?bz2� y  A x ] Olzma^ +B _ ó
__all__ = ["BadZipFile",  f e!", |à   "ZIP_STORED0   fDEFLAT TBZIP2 KLZMAB dis_zipd qZipInfo0 ˆ 'Py• ULarge 	Ž æPath"]

class Ì !(EßBion)×Tpass
( Q *  - í óRaised when writing a º T, the ð requires ZIP64 extenƒs¬ —and those á are disabled.'  x 
r# =Ê  $  £ ˜ ±  # Pre-3.2ïàatibility nameå † ð_LIMIT = (1 << 31) - 1
±›FILECOUNT$ &16$ ¦MAX_COMMEND   ñ
# constants for Zip ¬ sr 1A = 0 2A = 8 3Q = 12  5  Q4
# OÑ1ZIPí 
Ü�s not supÛñed

DEFAULT_VERSION = 2r '64 145
p   6
t  ñ63
# we recognize (butp ´necessarily| °) all featu up˜€that ver

PhEXTRACž ±63

# Below@someRPmats 8ð associated data  2/• headers usH#šsqÒ module.  TheV  « 3of @ /ë 1rds‰ °‘used
# inT àPKWARE descripZ1 of  ž ‘format:
#©ð8http://www.pkware.com/documents/casestudies/APPNOTE.TXT
# (URL valid asf ÐJanuary 2008)4 Ñ @"end õcentral directory" â ñ, magic number, size,pindicesn 1secÏ 4V.Ií Ê  ­ ")
R ð	EndArchive = b"<4s4H2LH" ;ing ÀPK\005\006"
y ÃEndCentDir =£ P.calc (a ð)

_ECD_SIGNATURE = 0
_ECD_DISK_NòUMBER = 1
_ECD_DISK_START = 2 ÁENTRIES_THIS! K = 3 ‚OTAL = 4 ‚SIZE = 5 POFFSEP 6 ƒCOMMENT_& ñL7
# These last two indices are not part of the structure as defined in the
# spec, but theyA !us! ñternally by this modulF Ùa convenience¤ B = 8 ÒLOCATION = 9
² ö "central directory"Ÿ ô
, magic number, size, andÞ  
#Ó  B 3iesÂ ? Ô (section V.F òformat document)
CE ð	alDir = "<4s4B4HL2L5H2L"$ 9ing$ àb"PK\001\002"
š 	 V P.calc ( # )indexesÄ  Ö Ð
_CD_SIGNATUR#0 ²CREATE_VERSc1 bSYSTEM�§CD_EXTRACT. 3.  / 4 ’FLAG_BITS‘ð CD_COMPRESS_TYP„ 6( 0TIM 7 0DAT 8 1CRCö ¼ < EÇ å1Ã /UN  Ç ð FILENAME_LENGTHm2Y ² g_FIELD Î %4 Ï ¡N¶¨!15O �INTERNAL_q  _ATTRIBUTEù 1ä /EX" ù  ç•L_HEADER_¹ 18òÿThe "local file headeró×A×QFileHd ×2×$2HÕ	" ÕR3\004Õ	 ÅÕ# l)

_FH�/FHp 1* ¾5CT_p2 øGENERAL_PURPOSE_€3" )¢ION_METHOD:ÃFH_LAST_MOD_Ž51  —6 —7 Ó—8 –9  $•0 × •1�Zip64 endúë  /to	  W ™ôuctEndArchive64LocatoÆ%LQ¾% òrx06\x07ò0End§8DirM ûT  Ùçæ �" recordäñGñ’ ótQ2H2L4Qñ" 6# =yõÀEndArchive64ó)

_CD64_SIGNATURE = 0 ðDIRECTORY_RECSIZ 1 óCREATE_VERSION = 2 wEXTRACT 3 þ DISK_NUMBER = 4 £_START = 5 - à_ENTRIES_THIS_F O = 6# ƒOTAL = 7 Ã À 8 bOFFSETr p_CENTDI– j9

_DDÁx08074b50

_Þ À_FIELD_STRUC¯ �struct.S ñ('<HH')

def _strip_extra( ð, xids):
    # Remove E! ñ Fields with specified IDs.. Ÿunpack = †  . ( 2mod: q= False ±buffer = [] ‘start = ið � òwhile i + 4 <= len² ¬  # Âxid, xlen = q # B[i :: !])^  - j^  N +4   if0 in s
 1   �if i != Ÿ 
   Æ s.append| +  € |  ,  5= jy   2Tru   * tif not ) … qreturn ÇT  ’b''.join(ž ûócheck_zipfile(fpH6tryS æif _EndRecData%  ’   b  ª     # Q ñ
 has correct magic numberš æexcept OSErrorp Apass! Y  «&is¬ silename² ò"""Quickly see if aƒ ‚is a ZIP 1by ó ying the• !.
v 1The,  ] € argumen¾ Dy beU !or# �-like objà 2too1"""I Presul¿Á  X€hasattr(- p ƒ, "read"Õ  3   J _½ $p=: ÓFelseM ? ¬Iopenh šb") as fp-  1 p g ºH fCó64(fpin, offset, endrecõ ?ARead¤PZIP64$ ð-of-archive records and use that to update. 1rec‡P 	| € b.seek(„ ÿ - sizeEndCentDir64Locator, 2õ A# If¨  O q fails,  ›1 is©@larg– @ough§ rcontain›!64©  z#º è ², so just rà ¼3endâ we were given† N - _Þqdata =   k(÷ ô !ifc 5 )ò$B
r  „ òsig, diskno, reloff  s B•§£ðEndArchive64Locatoñ"r, data)
    if sig != stringEndArchive64Locator:)  - áreturn endrec
 �if disknoC A0 or Ws > 18 óaise BadZipFile("zipfiles that span multipleA òare not supported")r p# Assum ð 'zip64 extensib= Aata'š õfpin.seek(offset - sizeEndCentDirá   2, 2  *1 = M \read(D ' pif len(. )
& 	D Vð
sig, sz, create_version, p   gQ_num,!q_dir, \ê  E €dircount 
 2  ‰ 	 =4 âstruct.unpack(  (Ý � ó# Update the originalCa usingŽQ from$ ÁZIP64 recordB oð[_ECD_SIGNATURE] =¹! °DISK_NUMBER# 5( USTART' =dir' ÐENTRIES_THIS_\ . b. HOTAL* 2+ 1SIZÄ 0dir£  SOFFSEœ r¼$ ƒð
def _EndRecData(©)‘B"""Rm —a€"End of ãral Directory"v,ÇRNone.r2The¤�is a list?  ÐÔnine items in¾ a @centa Cdir"½  Õñ followed by a tenthE ,B   ¸ ÷ l #is� B."""— €# Determ„ 5 1izeh  û0É "  jÍUtell(S€Check toy  Àthis is ZIP : ¢ with no aÂ comment (tht B# "eX÷ X\Âure should bAlastû ?¾ #r 4if †  kacase).! 2tryâ ùì -ß ßú Ïexcept OSErrÎ  éW &ëÛ(Ü=wF2 an§ �  C `[0:4] ( Q* 1-2:* `b"\000 "¼ M #`signat;`is cor¬ J   @re's•�", Ë Ë uc4 Ø  L D 4ô
ò7 =ó(C 2  P# Appôua blank3and­P star. �� !.a> B(b""i T e   z Õ¡	† 0Tryº . 2 "ZŽÀl directory"Ã structure
  ñ%return _EndRecData64(fpin, -sizeEndCentDir, endrec)
= ð# Either this is not a ZIP file, or it  ò  with an archiv† à# comment.  Se @ them 1 of  P 0 fok `e "end ócentral directory"— Àrecord signaë T. Thed  �  ^ Álast item ind ¸ ¤ and may bž òup to 64K long.  IÖ ±ssumed thatB ™ c magicŸ £number doe3Tppear‡ - BmaxCÀStart = max( šð  - (1 << 16) -  ­!0)D  Ëk.seek(N #, " qdata = ) Rread(9 ss   ò.rfind(stringEndA¿) 2if , Q>= 0:u  \`# foun e  ú �; attemptVaunpackt•interpretB r�0 = „ [e : +í ]3 sif len(: K) !=  ¤ 1Zip¯ ¥corrupted.P  % "2Non  
p = listBuct.Í  &$, � 0 @ ç`Size =ëðrec[_ECD_COMMENT_SIZE] #as claii!bygz² ¤ L 	'!6+9  … BÚ ƒ.append(# ¹ 
 S" +
" é P# Tryê ZÀ `"Zip64ô Æ¤‚ ! -Ö ',) �  Ñ ² €# Unable±  ò� a valid® ­ +ò	

class ZipInfo (object)‚A"""C ñ
ttributes describing eachÇ  ¤  rive."""ˆÕ__slots__ = (ì `'orig_+Vname'' zdate_ti) Écompress_typB _ Xlevel\ / Xextra 0cren osystem  xversion D ?ct_  ˆreserved/ ˜flag_bits Jvoluà qˆnal_attr+ _exter Øheader_offset2 8CRC  _€  | H_raw}Œñdef __init__(self, Ï ="NoName",ºÀ=(1980,1,1,0 )iÐ    self.origÅ_filename =  Á  # Original  " Óin archive

  ÷ # Terminate the. #at ôrst null byte.  N As in1 N  i ñs are used as tricks by viruse6 ˆ %s.;  b _b É Õ.find(chr(0))* !if� - U>= 0:  Õ 5[0:_ ]- ’# This is« áto ensure path¦ Ñgenerated ZIPê qs alway3 I ñ forward slashes÷ ðhe directory separator, €required7theI h öormat specification(ôif os.sep != "/" and � „’.replace(N ,L )_self.K  b  0# N§ QlizedcÊ ? qdate_tiœ  > ð	 # year, month, day, hou vin, sec‹ 5if > ›[0] < 198õðraise ValueError('Jðdoes not support � Ñstamps beforeK 'ø p# StandÍvN sIÔ Àcompress_typtàZIP_STORED # T 4of % sion forHléK _' Álevel = NoneA # L = * *orbÒcomment = b"";  3# C  E Aeach§
@ _extra>  B B! Edata9 öif sys.platform == 'win32'+ … ä 0cre system = 0  2# S bwhich * js Jelse] ð# Assume everything & ÎUnix-y=  n Œ 3  Œ K @versäð= DEFAULT_VERSION?V ß S j?ct_T $# S pneeded ² Á%ctØÏ !  S Šreservedx# å# Must be zero,7 žflag_bits8 #	@lag ! 
8 0vol’	åm  ‘number of�k headeÔÚinternal_attrƒ 3# I   jibutes… /ex> E } C m@_sizã
´  !ofÓ) 
‰  <B   7# SF /unH w# Otherì YÐset by class £ZipFile:
  ó # header_offset s  Byte  ³to the file. ? 5CRC5 	 ‘CRC-32 of: ÁuncompressedG 
A ödef __repr__(self)˜ áresult = ['<%s5 ±name=%r' % . Ð.__class__.__ @__, G .ª   !)]h  — "if ‰ ö_type != ZIP_STORED}  1 � ©.append(' 9 e=%s' %]  0 
 . !orš Rs.getµ  � ,C 
Q  ß 	C %))D Bhi =æ õexternal_attr >> 16& /lo& …& 0xFFFF) _if hi i4mod—Astat}  7(hiœ _if loM 	µ @=%#xê&loà Tisdir½ wis_dir( bf not % "or	 ¡ G_sizò JÝ' `g 	d .((f ‘ j U) andE n ù 
z9 or1 ¼  - ’ 
h . f Ô 	- Ø 	 Ü @ (>' Òturn ''.join(* )Å SHGë Ç, zip64=None¥ Q"""ReI  N@per-bRõ as a bytes object."""d–date_time  os ð = (dt[0] - 1980) << 9 | dt[1] 5 20dosK   =% 3% "11& 4  3  V v5] // 2P flag_bits @*08ãP# Setðse to zero because we write pm after ëU dataá  Þ g=… i! =, ßE = 00 ;elsð> @5CRC)  Y 	]	 	/  ³r P   S TextraK   ¹min_version´ "if5@ is 8
HP	ð >¹»64_LIMIT or	 Á e 
]  fm]u'<HHQQ', É Ä ÿ + struct.pack(fmt¾$1,< @calc½ @ F)-4,Ã,Ã 	ke Ù ø ç À       if no«t zip64:
  ðraise LargeZipFile(" ùsize would require ZIP64 extensions")N  # 8 P is lN ðr than what fits into a 4 byte [eger,C ý fall back to thu 	/ Qfile_© S= 0xf 	# �compress' pmin_ver× " =é •_VERSION
P …if self.T atype =0 j_BZIP2_
U Amax(% Y ', ! K/elh 
OLZMAg  $ f Í Ê wextractû  ¦ — ,ò ( ­ F ocreateE 
' D  ÆÀname, flag_b,=x p_encodeX " fFlags(: òheader = struct.pack(  3 H , 7ing  Ô ò ‡reserved« 
ÁB  M 	1p, dostið Ïdosdate, CRCH C  ï , 4Ó7 @len(,  >0),  Ú )Esreturn L+[  /   +ë"ra Odef Ž á )‘6try  _  ' .Š .×“('ascii')^ÿ  except UniE_Errord ^utf-8d ‡ | 0x800ß !def  (° × P# Try“$ šIw field.² 0tra’ )"   un   ®  Wwhile¢K >= °’tp, ln = ; r('<HH',§F[:4]Õ z—if ln+4 >U 
8 &  5BadþrCorruptW à p %04x (|’=%d)" % (� I N Pif tpn0x0001o 0dat0[4:¡ ] B   #‚ ‚ k! (Sœ‚s and/orfš archivesü  F ‹    ` �EÊ in (0xFFFF_ ',   G  1 = ; ("Ö 0  [| ,Ï@Q', ";[:8Í=    " " =) .8:? $ ðif self.compressð_size == 0xFFFF_ ?:
  ðfield = "Compress ? "0 cself.c, k ÿ, = unpack('<Q', data[:8])E  " " =) ?8:]( 1if l ßheader_offset× H?  ? × 	k × ÿexcept struct.errorqñraise BadZipFile(f"Corrupt zip64 extra ”/. ® 	Ì1f"{1 ù
} not found.") from None
_b =j r[ln+4:]" Á@classmethod3 1defF  _f« Pcls, 
 �name, arc	 =b @, *,þ öict_timestamps=True)	b"""Con%ð an appropriate ZipInfo for  ‘le on ther rsystem.§  ü ‡ ¡ should be, upath toB ¿r directoryO 
Ì 1 isG  Ø ò
 which it will have withi– ñarchive (by default,4 ž Bthis7 ˜ qsame asÌ  ] @, buY  thout a drL ¡letter andj O �leading Þ õseparators removed).* &""3äif isinstance(1È, os.PathLikœ · $   =%  fsp 9 Ì"st! Ostat  €isdir =  ö.S_ISDIR(st.st_modeH m*0 =  `.local
 +   , AdateZ1 = 8 F[0:67!ifû:str‚L< ¦[0] < 1980” ø ! @ = ( 1, 1 00,  ‡ /elj o> 2107j   ð, 12, 31, 23, 59 o X# CreÏ äBstorÅ information$if¢ Ö ¥
‹ ó=•;  0os.P.norm	 ( Qsplit¶(. 7)[1ðTwhile�  x0in = 1sep‚galtsep ˆJ % =9 1Ð+diY4 e+= '/'Ã zd = cls¡ —Eb( Ð.external_att»„Sode &Fð) << 16  # Unix + eibutesu ¢ c  \-E = 02  ö   
ƒ |¼ 10m gMS-DOSÈEflagA AelseØÀ         zinñfo.file_size = st.st 3

  Âreturn zinfo õdef is_dir(self):, B"""R/ ðTrue if this archive member  å directory."""A m  W ™ ð2name[-1] == '/'


# ZIP encryption uses the CRC32 one-byte primitw ó'for scrambling some
# internal keys. We noticed that a¢ ± implementao �is faster' €n
# relyW ðon binascii.crc32().

_crctabl^PNone
=@_gen C(crc> ¤ Ãj in range(8  „¦if crc & 1i     = D õ >> 1) ^ 0xEDB88320RNelse8 Q>>= 1$ r4crc\÷supports a password-based form of~ð. Even though know0pla^ðxt attacks have been found against it, itPstillÍÁful
# to be 9ð to get data out� psuch a »à.
#
# Usage:
#Á zd = _ZipDe&“er(mypwd)  Ÿ _%Òs = zd(cypher ")
£	?  = Eñkey0 = 305419896Dôkey1 = 591751049 Ò2 = 878082192<pglobal þ+ &if   )o  Ð , Ä = list(map(C,1a256)))N r; }  |›0ch,Uf§"""ComputeMD onZ 5±†8†� [ Ö^ ch) & 0xFF]ˆ pupdate_}( î bnonloc— 0,�1 2Ü  " ƒÉ  0ú   Œ(” +  0~ )‡ F Q 3 Ð* 134775813 +Vº 2 F3  Ý„ k Q>> 24� "2)æ  ÓpÓ6pwdÎø p*  ˜d¬ é
™È! a€‹s objectˆasult =" farray(Pappen re& . Í  © c©  z ª N  =ƒF2 | �  ðc ^= ((k * (k^1))„8a[  + ò c•   ‰ ( � h"s(¯ % (Ð


class LZMA»rressor:} SŒ__init__¦^€_comp = l3  2 0 @prop*ðlzma._encode_filter_ áerties({'id': & pFILTER_› &1}ô 	z ) L½ ( °FORMAT_RAW,ãiters=[S' ?_deŠ  ƒ  , ¨ s‰ À    ])
     ñ#   return struct.pack('<BBH', 9, 4, len(props)) + 
 ñ

    def compress(self, data):  " 0if   ._' † is None  #   elf._init(f 6 .; b \ [ 	8  $ ) *  £ Qflush  š <Y )i Ë “ " à

class LZMADe  Ò 6or:I_ý ,__© 
d5 ! =Aq  úunconsumed = b'' ¶eof = Falsem O  „ o ¸) º~ !+= €  !if@, j) <= 4
 / ÖÆ   „psize, =¦#un¨ ¦\ V[2:4]– @ † 
 Õ ` Ž 
	Õ r |= lzma.Û( ùFORMAT_RAW, filters=[L  Ÿ + _P 2de_' _hcertiesJ `ILTER_g -1,B  F  ± )D[4:4÷ +  u xŸA ? ):]� 3deló- x Ÿ eresultP  ò 2mp. Ž o »· Á #emp.eofu 2Z 6


]¡_names = {- ¢0: 'store'?1 Shrink ”2: 'reduc" 3 4 5 ¤6: 'implodE ´7: 'tokeniz ¤8: 'deflat 9 #64� 1± 
L 1£ Tbzip2$  ’  >  [  eY 1Z Clz77! 9� 0wav?  4  ppmd',
}

2a_checkµ –Dion(W3ionFiýöion == ZIP_STOREDKApass/el1 hDEFLAT3 ¶if not zlibH >ñaise RuntimeError([    #"C‘ ” ñrequires the (missing)Z ‚ module"m� VBZIP2… š 'bz  y r™ 4?bz2˜  —   ˜ À            ñ.  "Compression requires the (missing) lzma module")
    else:
   ÷raise NotImplementedError("That cc ômethod is not supported")


def _get_1 4or( e_type,K ²level=None)ˆ %if + ò == ZIP_DEFLATED&  ® * F Œ  M &  * Äreturn zlib.ˆ 5obj” ? ,  h R, -15%C 	T Zž ÿAULT_COMPRESSIONP 'el» 	å VBZIP2¼ ' £ â tbz2.BZ2w@ Ï 0 # #„8  x ±ignored for�ALZMA9Î  # Í …    p ‡¯ ÈM%de¼O;e_checku5ionâfl U aHSTOR_° †  è 3ì · 5bj(UO ˆ «DÑ J  l•   F 
udescr =Ïor_names.getU !1if 7 r   TÏ ² Ê %d (%s)" % e ,Z )ñ  W 
2  i d  )»óclass _SharedFilÒð_init__(self, file, pos, close, lock, writn 0  ._0 ! =7 8 ´  Ppos =J  W  … _   l ! =s  € $ =Š 
  ƒseekable‹ . 
& Dtell"   
   0 óoffset, whence=0‡ Ù Rwith Þ  ª   #if « (9      ÎSValue‚ÐCan't reposit3!inß1ZIPU� while "ª  C  `"thereÌtan open!ï handle on it.B 	CŠv » ; óbefore trying to read.e‰  v(@Ü 0 ,  8  Œ(* À       returðn self._pos

    def read( �, n=-1):   Cwith2 Flock   #if ‡writing(9      ñraise ValueError("Can'ts ð from the ZIP file wh uthere "†  I  Ã"is an open | ï handle on it.< 	QClosev ; ñbefore trying to¤ 9.")‡  & ._¬ Q.seek6N
' cdata =. dn& M :pos+ Ztell(* preturn W ·cÊ ‚ y• v Ê is not None¼  9objy é ! =@   � K ²)

# Provid_ Ç à method for un2ðable stream
class _Tell ¢  ‘�__init__Ý G, fpá 5ufp = fp”  ¦offset = 0$ äeG  >I ný 2fp.' ! T E+= n �nf  ë e _ & š 0 \flush1 * 2fp. ). g  _   B.fp. 3)

NóZipExtFile(io.BufferedIOBase? 0"""  Á-like object¡ £ ûôan archive member.û 2Is × �ed by ZipI .‰"()& 2"""º ò# Max size support5 ³decompressoY ôMAX_N = 1 << 31 - 1C BRead'5 !ed*�s in 4k b—s{ ôMIN_READ_SIZE = 4096I RChunkŽ Ú@ durî  •à  ‡ ASEEKD � "24B –ðileobj, mode, zipinfo, pwd=q,V ¸ ­>uobj=Fal” ' Ó  àa G   Ppwd =e  	\ * =l Å e Nt_type =½ . a ·@_leffñ 4  ì4 +  +_' ( ˆ = _get_ ,)._Ÿ "Õ aeof = V_  Úbk = b'' 9S pnewline  ÒF ø! =ÿ
Q 8namU ö   ? ³if hasattr(Fs, 'CRC'¢ �   òÇexpected_crc¬5CRCw - srunning, ðcrc32(b'')
      —  else:
  õself._expected_crc = None
' # õseekable = False :tryS ´if fileobj.5 *()#  � W õorig_compress_start =@ etell()k  7   ;  izœ †zipinfo.S &iz¬  =   A  « *_s=  z 	¬ 1P prunning 9 f = Tru˜ úexcept AttributeError3Lpass””decrypter´ Ü   jif pwdA 4if ú flag_bits & 0x8(  @  # @ñ are against the–ý type from extended local headersú �check_bytŸ(ƒ ñ _raw_time >> 8)‰ )ff= ­› ·CRC otherwi› 0   ƒ  4 _>> 24~ Bh = ×Uinit_k�†if h != c N�raise Runð Û`("Bad Ó‚word for]U%r" %§ Œbname)
þ[def _“  ¨ b  .² „ = _ZipD-(  6pwdZ1# Táprst 12 ®As in÷ñcypher stream is an enz3ionøº¡#  used to2 RngtheH ¨algorithm.m 1m &ar!# €ñletely random, while’ �12th contœ aMSB of HCRC,Ž !or "  S ŒÂ depending o¤ ÅåD 0andù Ù íV ´correctness€ Ö.A U P   vread(12…˜ z¥left -= 12J creturn˜“a W)[11]%q_repr__ïPresuleÁ['<%s.%s' % % ö.__class__.__module__L J µ 9 @qual±E__)]¹ bif not¹ [close�• 0.ap�0(' A ¶=%r mode=%r£   ,H   )> › "if R¯ß!= ZIP_STORED  } ‚ = =!É  f  2 0or_¡ Ss.getS _M MZ /  Ò ÷ &	LÀ(' [closed]'3)
  øresult.append('>' Òturn ''.join(* !)
; ñdef readline(self, limit=-1):"  ` á"""Read and reN  a 3 ò from the stream.V  4 "IfJ ó is specified, at most Ñbytes will be‰ .u N iN 6< 0˜  h ò# Shortcut common case - new£ æound in buffera  > @i = ÷  ._" ³find(b'\n', µoffset) + 1  ? \f i >“   { \ [m P I: i]O  9 ! M = i! r� a   Aio.Bæ �edIOBase.×  + ÝüCpeek -n=ó ês84ed ®ñ thout advancing Åposition."""³ ¡if n > lend e9) -\
ÕTchunk› Ã &(nÐ & 1en(( ?) >K  . T H â1 = : # +9  
¡Ÿ0ì  h JelseÉ   ~ ó1 -= ˆ $ 2# R×“up to 512nðto reduce allocad` overh‘ö for tight loopsÜ{ Þ ý š +v ]S2abl"if8 jclosedï óraise ValueError("I/O oper¹ "n 7 v file."Õ± JTrueƒ :?, n’:n8
!If €argument�Pomitt�ðNone, or negative, data$  4ðÃed until EOF Fchedg ÷yë "j H0 F0is ® ­  4buf.ÉÌ	¡ , i = b''Î# *= ë’while notJ_eofé  Ö — +1Îf.MAX_Nü +  2bufÿ  uend = n¦‹ ¤ 0if " <Q­  Lã± K  Š ‰ % 
!:endðT v   =m |  T ³ n( / -• @ � � ‰ Ý Àfer = b''
    ñself._offset = 0
 ò   while n > 0 and not - Eeof:'  / cdata = ‰read1(n)" °if n < len(- )@  D [  = �buffer = * 	F ( ° n! Rbuf += N[:n]  Ireak 2 	 Fn -=³  ±return buf
 ðdef _update_crc(Ê P, newÀ ê 1# U% á the CRC using Qgivenð .S  é #ifQ€expected] Š is None@ñ# No need to computeX  f õif we don't have a reference values  w Þ   Í ‘._running‚ ƒ= crc32(á ,¦ # ûz# CheckŒ a're at aend of 6fil‰ ü !of}‡ !p
ðraise BadZipFile("Badz€-32 for t b %r" %Å Vname)Õ �1ÏÉ """Read uppÀn bytes withØ �most one ? ò() system call."""_  jÐ1 or!0Â  šè  O [:â , e = b''Ï x # > 	ò  öì %  ÙðU VMAX_Nþ +   !ifÛ
Û      ã ¯	¦     b¯r€ &  IR= n +ÉÐQ 0if " �« _#Ú K  ‘ t?endwT5end|  T ³ 1n =• -c• @ � � H   ¨ î�+> €%þ a � ?u "     œ, Ì 
 %  >_$ c  ¶8ÿ2 å ^)# ] Ïoressedh,=‘# decryptFàdecompress theCm.
  õif self._eof or n <= 0:   ' µreturn b''
 ÿ# Read from fileR  úcompress_type == ZIP_DEFLATEDb ö
## Handle unconsumed dataW  ‰   # =± $dea 6or.7 U_tail§  6 °if n > len(A ){  "   $ +Y –read2(n -3 )Q JelseA = < ))a® 	LSTOR�V ; Aleft¡� a p¢n = max(n,MÖMIN_READ_SIZEí ‰ 	t X:, n: È ( 3 2or.rÊ  m 	 3 ü O and6 2notÔ _m !
ª C:eofÝ ‘ á	V fflush(M 	<  ?E  t ü  "{  #orè "~¼ =K"[:U  D]@ 6 -=ñ   7 {
!@  � e= True9  «update_crcå T   ® Rdef _{ ;  Nj † ì %  8W 	«í' %in_l Ò ´ † ü@obj.º ( Ä .C a ³ U Ë Òaise EOFError% ã Ðdecrypter is D ?Nonœ	0 ‹Qclose¶0:try¤ Œ / _
$  ´  .- 6kfinall[ usuper()- Y %}seekabl� Œ ^ d„ rLQValueNò("I/O operation on 7 Ì"�QÁ { �� &÷, offset, whence=08›  f ’  Ïä ,  ï ðio.UnsupportedOperation("uónderlying stream is not seekable")
  öcurr_pos = self.tell( õif whence == 0: # Seek from start of fileQ  X 3newT eoffset )elQ 1Q  Œ Åent position7 
T  ' _ /+ _ 2_ ?EOFR ú `_orig_Ì o_size ^  9se:B óraise ValueError("-ùmust be os.SEEK_SET (0), "@  Ø 	 "1 µCUR (1), orE ¥END (2)")
E 4if l>ÀÆ 
° , ì, W ?< 0D 01 Rread_�% =“ $- «± Fbuff) 7 +À 22 8if 5 ‰>= 0 and b< len(Æ T  1 :er)¹ 0# J–”move the ‡ �index if 5new 6!in _V ™  ¹s ù  x W 	'  >  E = 0  n3# P Ž Rbefor¾  Z,q. Reset® |ZipExtF–­  á@obj.3ù‘compress_×ç ´running_crc.B2   Ù 5 W Jleft7   o;  2  ¼ �.   G €�er = b''#  ¨‚© $de� oB X_get_ ,% __type&ªeof = Fals   Š	¥ #if�decrypterô ¸;Nonz¸ 1ini© 2 (hwhile x >Í ƒlen = miBAMAX_µXREAD,@ ï   A ( J_len   s"-=H 8len5Bturnô wAdef   ±Å jclosedÝŠ B B on . ¤.ø :@lf._ T ðio.UnsupportedOperaœ?("uf ¹e7  Î" -_ò-Í !   !reFÐfilepos


clað.ss _ZipWriteFile(io.BufferedIOBase):
    def __init__(self, z ³info, zip64*  .  ! 0._z 1 =  F  1p64 >p64 @file f öcompressor = _get_ (h . e_type,@  {  @ R elevel)A Ô  ™ @_sizž 0 z   qrc = 0
7 ‘@property _ \ 1obj_Mrreturn € 0zip' 2.fpG  9 �writable9 JTrue- * g, datai "ife bclosedø3ðraise ValueError('I/O Â ’ation on 7  Ÿ '8Ñnbytes = len(r ò  Y Ó  1 S2+= . " c9Qcrc32B ,¨ F_crch ¾ À*orÃ  | $ =; I1[ P ¡ 
Ø+Ê @obj.‘eO Æà á  ¼5¹Ë  ‰@  ¢ :tryæ �super().< (Ï ±# Flush anyü¤ from the ã ðor, and update header Èr  v ¡ l % ?bufofƒ ™  / ‰  6:bufÉ 0  =s) Ý
_ u 	é Jelse`{ R 	 — N ã 8 6CRC)rcv ( J .  Õ ‘   !# Æ»d¼ˆ þflag_bits & 0x08î Y  ²   €  ãqs afterA  b	É  ˜ åfmt = '<LLQQ' :3 ` =LL':  Z âôstruct.pack(fmt, _DD_SIGNATUREÛ ?CRC Y % 	
@  z Å)~Ž€start_di–]  <  ¶ Ktellí ô fcif notž$  OA b ž ï > ZIP64_LIMIT6  : ÃàRuntimeError(
  ÿ 'File size unexpectedly exceeded ZIP64 limit')
J ñif self._compress_O >; _LIMIT::  N ÿraise RuntimeError(,  0 #'Cf /ed· 'ð# Seek backwards and write fýheader (which will now include  Ñ# correct CRCL F  ?s)
/  ñPreserve current position in‚ 4 b0zipZ Ã.start_dir =|  žobj.tell(¨? % Rseek( bzinfo.ð _offset> (	?  DH3 Op64)I 	‡ Ù 7á# Successfully«�ten: Add0é to our caches>è a  µlist.append° :nfo¯ 
7 ´NameToInfo[  8 N Uname]ˆP€ zfinallyþA ‘ _Oð	ing = False



class ZipY= Q""" C Áwith methods÷ ¡pen, read, e, close, è A zip""s.‰4z =Z (¿ Ä, mode="r", Áõion=ZIP_STORED, allowZip64=True,à  ‘  9 £level=NoneÀ b ð: Either the path¶     a, or a¢ ×-like object.c ¡If it is a> ,H  < ™‘be openedyû Dd byå J  ä Q: Theî ’ can be e˜  <C 'r'@P 'w',@lusi¤˜reate 'x'ù  · CB 'a'e @ion:ý@H (no[!), ø	DEFLATED (requires zlib)e  \!  / WBZIP2, @bz2)< ¨GLZMA Rlzma)“ ºP: if ¾>cÝ  O!s [ñ÷ extensions when�” n0, oÚwÃ"itR Ñ anB!epÕ B ½ this wouldM Pbe neÞ2ary¸ KQ : RÂ (default foLXgivenZQ typeaJ]tegerm     specifyv ˆe  •pw!toa‚ "or’ ÷  pWhen usC  ‚*	�ð ûkeyword has no effÝQ !inÇ ÿs 0 through 9 are acceptedŸ Àhen using ZIò$P_BZIP2 integers 1 through 9 are accepted.

    """	 �fp = None  ñ# Set here since __del__ checks itL ó_windows_illegal_name_trans_tableb q ñ<def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=True,~ 	´ : `level=× ñ, *, strict_timestamps@ %):A ñ """Open the ZIP’ Q with– ð read 'r', write 'w', exclusive crea 5x',R àor append 'a'.o© "ifU �not in (X R @'x',/ ™  5 òraise ValueError("ZipFile requiresQ I  orL "")w I _¸_%Gion( )  —&._o' =|ã & údidModify = False  àdebug = 0  # L—õ  of printing: 0¨39 ð NameToInfo = {}À b# Find�i `given o
<  Q�list = []: }   aof ZipV °instances f­[rchiv½ ( =— P `MethodÎ ' 
ˆ  �B  
+  þ! =É
 4pwd@Ê "  y`commenä :b''4 _ñ. =0# CÒ€ if we wñ�passed an²-like objecó Š Tif isE(sÛ, os.PathLikeÅ     =! afspath1 )· M ;strE £# No, it's™ 	û •  m PÁ 5= 0e !     ; ! =ß 	!  ‰0DicX {'r' : 'rb˜qw': 'w+ x x a$   	I  n  @'r+b3 ?    M L  Ixb'}@  ¥  �  ” [ ]&  wh	FTrueÎv >try   &úqio.openŽ‰ c ˜ .    ex?1 OS‚V !ifN A  Ù   µ -  U â  
æ  .   co;u«   ,	!  Ubreak ;els-_{ 61/  A ! 1 %   3ileQsgetattrR' !',bVO p ARefCÄp  `lock =Øeading.RLock(D Àlf._seekable“ = True
  õself._writing = False
 Etry:  3 êif mode == 'r'    P ùRealGetContents()D $elF Þin ('w', 'x')M �# set thet ðified flag so central directory gets É 9teno  — ñ# even if no files are added tod farchiv 8   Ó œdidModifyB #   +    @ Ástart_dir =  {fp.tell 0 ñexcept (AttributeError, OS	 (  6 U Ó = _Tellable( 
~ -    — 06' P_seekS "   NelseÁ " a# Someuò-like objects can provide � but not o   O g  Ô 1fp.@  á l#k è .a. Í P# See¯ ¬‘ is a zipE¦w ¶    V ekö7 ofF€and overI ? Wd`ŸBadZipFil$è  þì ß, just appendù Ž V0, 2)½ ®   õ K3 R O) @ D_S+ ©>…¢raise ValuJ0("MÂmZ beÇ$, …–, or 'a'"/Ã
Ü&fpÇ	—Ù  :Non@ ¶_fpclose(fpb  ç ¥ »Ñdef __enter__ÄóareturnC	. 3xit- �, type, vñ ·, tracebackE ‹ ˆ /t ?reps ñsult = ['<%s.%s' % ˜ ù.__class__.__module__, Ü 
 } 9 Åqualname__)]< !ifä 0.fpþ  Q
†$ _=jPassed!  y ð result.append('÷ file=%r' % self.fp)
  Celif ùilename is not None:,  7 ñ result.append('`  6 	d J 
j : 9modš   2 ;els~ @ –[closed]'5 # > Òturn ''.join(* !)
à ðdef _RealGetContents(.) ó
"""Read in the table of c0 A for 1ZIPA."""^  6Cfp =fp 6try`  & øendrec = _EndRecData(±êexcept OSError= ðraise BadZipFile(" ÍQa zip˜ "/!iféw N 1 4ª.debug > 1R bprint(l ƒ ¢size_cd =  °[_ECD_SIZE] p# bytesõcentral directoryQnoffsetO fOFFSETQ "# * ÀN Í ‹_comment¡ bCOMMENS £# archive , U »  # "concat"ˆÁzero, unless�0was@ñcatenated to another«Ù E „ ÄLOCATION] - G-Ú 5_cd= +if\òGNATURE] == stringEndAÄ *64¶ð# If Zip64 extension5 ôuctures are present, accountmƒ  Ä @-= (® áEndCentDir64 +Á  sLocator¡ @ §_2© pinferreJj +  I ‰„"given, 8 ,. "	 8_cd U ¹#Ïðstart_dir:  Posit 1of  `(  @ # =�  ¿+Aqfp.seek•.4 6, 0‘ ádata = fp.readd6_cd  ƒ@io.BH0IO(0  •total = 0s bwhile  < :_cdt Š;dirv  ×fralDir_  xsif len(5 A) !=V / 
]  3 Ô0TruP0ed H 	Ù <    � âstruct.unpack( v ,J d®  B ![_’6 ¸ 6D º àBad magic numbâ!or{ Å 	õ è Ï¬ rÀ         fil÷ ename = fp.read(centdir[_CD_FILENAME_LENGTH])
  „flags = 2 )5] 2if " ‰& 0x800:  H Ð# UTF-8 file ‡ ½s extension-  %  $  « !il¶ ú .decode('utf-8'ž Oelses áHistorical ZIP| W �encodingy [cp437y ð# Create ZipInfo instance to | eu œ informatí 4x =; (õ 
Û px.extra
µ ¿EXTRA_FIELD¸Ÿx.commentA COMMENT= Àheader_offseC ÿ 1úLOCAL_HEADER_OFFSETA(x.c@_verè%,  `system ß (ct$ šreserved,  x.dP_bits9 þcompress_type, t, 1 9CRC+ @size  l_ )ÔJ1:12Â 3if €¡ q > MAX_z®CT_VERSION~àraise NotImpleƒÂedError("zipŠ %.1f" %ï  6 (˜ \/ 10)=Qvolumó Ðinternal_attr  J5:18ð# Convert date/time Ž æð(year, month, day, hou |in, sec“ Q_raw_C 9= tó  x._  á( (d>>9)+1980, ë5)&0xF, d&0x1F,±t>>11, (t>>7  3F 9 ‹) * 2 )
} _cEp(¶ 
*x. z+ concaÑ Pself.lÚlist.append(x[ $ `NameToB![x1  §Z] = x¥ @# up$Ð total bytes ËQ fromžÙral directoryâ 4 2= (	  + ÁCentralDir +@ 	K l
4 
�7 …	5 1if $ždebug > 2lqprint("Ø "",")
;1defp ƒ(I )@ À"""Return a   2 of™ õs in the archive."""™ r7 U[data±@ for"a:  k   Y ]Œ    Œ Tclass!\sh  W£ — «  À return selfð.filelist

    def printdir(self, ! q=None):#  ' @"""P& ñ a table of contents for the zip= E.""": ] °("%-46s %19 ñ2s" % ("File Name", "Modifiedo ¥, "Size"),I    ` =¢ )   �zinfo in Ã ã À  = âdate = "%d-%02  
 :  — K .- •_time[:6]k  G 
Ñ Ï d8 (9  œ `name, C &,  ]_sizeÑ  S  4 Õ k  •qtestzip”
‰�Read allt ; ±s and check 9CRCƒQchunk~ ¡ = 2 ** 20h | "or¤ >:tryO = !# � 1by d õs, to avoid an OverflowError or av  =   ‚# Memory# ñ	with very large embeddedö-s.> 0 òMopen�ž"r") as f¹  |  whqf.read(À $ ): A # CQmCRC-32{ $ y   pass Ðexcept BadZipá} breturnv¬ 0�0getÎú ,   ?  rqinstanc�@ZipIpgiven '8 ' U " =" u To0 P.get(- Q1if , 0is 
Á ‚raise Ke³(ü  ñ'There is no itemÂ @d %ra µ ¡archive' % )ú  <  }   	0seteCword:pwd0SetÉAault‘ , –uencryptB™Pif pw¨„d not isM·(pwd, bytesg   ü AType°À("pwd: expecd 3 q, got %â@typeN @).__c)__e > 	@Ë • =›  Jelse…)  ¢-‘@property9  ;qcomment7Ë s"""The  Ð text associaÇ V ©1ZIPz	F¤‚ _C €  .setter† ,v � ,if�I …. ‰( �#> KTvalid§ q lengthÌ   if (K ú > ZIP_MAX_COMMENT¨êimport warning) .	 2('Ay ðis too long; truncatinga"%dž'—  › 
 %™ ÀMENT, stackl—evel=2)
  £comment = 
 õ[:ZIP_MAX_COMMENT]0 cself._( 2   ñdidModify = True
  �def read(E ñ, name, pwd=None):$  — ñ	"""Return file bytes for2 E."""* Pwith N b.open(R 1"r"W v) as fpX  \ rY !p.Š )š B  L š Tmode=M ¤ @, *,‰ ßce_zip64=Falsº À-like object7   '¡ "'.t  Ž   Á is a string& 2theù   ã 0in  1ZIP å, or a ZipInfoi ^  Á ñ should be 'r' to‚! aI 0 al/y a  'w/ ^ Pwrite@ ; °newly added    warchive‚ 0pwdß   qpasswor- qdecrypt„ Ás (only usedÿ  ’ Ging)G PWhen � qing, if@sizeb �not knownË õadvance but may exceedÊ p2 GiB, ‘  q Í Æ 1use\ PZIP64 õmat, which can handle largeP  ‰ Rs.  I˜ “ � @, it« @bestl € ÆAinst¾ ñ , p zinfo.l _b Eset.ƒ 1if ù Ain {ÂK"w"}	ñaise ValueError('¢) requiresF 0"r"nF"w"'5 if·Q and f sµ R(pwd,±Ð êro 3Typn â"pwd: expected3 ð, got %s" % typeN @).__/__ (ë o== "w"r á  s  �o`suppor{  ht‘"j  á  .JÒ ` Ž ð   q"Attempî Z À$• that wasƒsclosed"‘ ? ð# Make sure we have aá#foUr Fif i… 0,#… 	þU  „ v! =zn $eldj== 'w'Y3 Ÿ•RU  .compress_ë" =Ç 5iono 3  x4 lÇ4  6 Jelse™ `# Get G? á
Ú k \ 0get1 Å ]  	b4_T@_to_½!e(
B4for�û"if8 :ingÉ Lzb"Can'tÚDfromÄÐà while there "/
   ÿ"is an open writing handle on it. "8 œClose the7  before tryL µto read.")
H 0# Oo 1for Eing: õself._fileRefCnt += 1 1zef ñ  = _SharedFile(5 õ	fp, zinfo.header_offset,= þ    = @_fpcÑ ",  Ólock, lambda: )Q 6try¹  K a# Skip Â  ‰ 
$ f 4 = Í .!P(sizeÍ H½ e  X sif len(; Z) != / 
c  3 Àraise BadZipW Ç("Truncated œ "i b ò = struct.unpack(  H Ÿ #, * 
? $if ñ [_FH_SIGNATURE]² VtringD ´ ðBad magic number 4
¿ Ž ö ]fname[¬ ” ÿFILENAME_LENGTH]Á 
´EXTRA_FIELD0 ¶ 
Çl ?   ° #if³þflag_bits & 0x20g ù# Zip 2.7: compressed patched data
 ^ ÿNotImplementedError("C   (‰ x bit 5)³ O ­ 4­ ÿstrong encryptionž = ˜ 6˜ vñGENERAL_PURPOSE_FLAG_BITS]\/80° QUTF-8 C­ Yq_str =  ë.decode("utf-8GNelseÂ8 D _cp437o 2 #!=)Aorig § d ó÷Ê  Ê'† B ó in directory %r and·  �differ.'F 2% (p	” , )êq# checkÁ ŠTlag &q‰passwordn 6is_0  ¦/  Ý 8if 4 $®if not pwd  A 0pwd ‰*pw�   ? ƒsRuntimeopT%r isDed, ð c m  p"requir:�or extrac]1" %Ï
Îð else:
           Âpwd = None

  õ$return ZipExtFile(zef_file, mode, zinfo, pwd, True)@ uexcept:  R > v.close(-   Crais€ õdef _open_to_write(selfo öforce_zip64=False)h 7if  � and not @ €._allowZ8 1 | É ValueError(·  " "U !isí f, but T Q was � ` when Â ^ing "N €the ZIP L.  #if·  ?ing´ p"Can't - Xe to d ` while _re is“   å  ƒ"anotherM ahandleÐ  on it.A Câ p s first C RbeforJ  g 6.")ya# Size¹PCRC a/ 0ver× ðten with correct data after processV  ù  Yw¦°.compress_s` ;= 0   n    ö flag_bits = 0x06 "ifÿY ptype ==ÚZ_LZMA±3# C‚ "edº õincludes an end-of-stream (EOS) marker�  ŸË ” |• 2$ 'ifïŠseekableˆ C 8‚D ( ßexternal_attrI 	!  $òo600 << 16  # permissions: ?rw- n 	s›ôcan be larger than un¾0ed % ñ # =*� ú\'  <  (È#orÂ .€* 1.05 >Ä‡64_LIMIT�“[f0fp. ³¦.start_dir×XÔheader_offsetÀ ‡fp.tell(r S acheck(? N   ±didModify =›_  0fp.@e= .ËH€ (?)p  KN  :  P_ZipW— I è ›P   Çsextract% Ðmember, path=p;
 ÃB"""E7 2 a 3 Q fromOearchiváÀcurrent work±  diHory,ûu Äáfull name. Its€ ÄPrmatiÜ#s ³ øed as accuratelyP âas possible. `£ P' may¸aV  d P or a?øInfo object. You canP @spec½qa diffeÒ Ê  ¾ `5%'.7 &""8!ifS Ú V
§ 8 ð = os.getcwd()
        welse:
  Àpath = os.fs ( %)
$ òreturn self._extract_member(  , 3 S, pwd8 Cdef + @all(< % r=None, 8 s 1pwd
 )™ B"""Ek D all0 ñ from the archive to õ current working¼ ð    directory. `§ ñ' specifies a diffe; (  T ¼ H to.L `¸ ñ' is optional and must be a subset of™ Rlist B(edK pby name  &()e 5"""& %ifø 0is 9  À� " =œO ¼!if› ¯ @  ù…getcwd(){ &äfor zipinfo in¹ 
±  C5 D²@classmetho: Uð_sanitize_windows_÷ P(cls,  J :sepOð Replace bad chaÆ1ers½@remoLÂrailing dotskhparts.•Åtable = cls.„ qillegalŒ q_trans_( Pqif not  
; Å = ':<>|"?*'6  å3  ãqtr.make^ (6 ´, '_' * len )Å ? § " =š y 0arcJ$ =T.w Qlate(‘ e /# >J  ð (x.rstrip('.') 0x*l a.split| »
a Rjoin,i   bempty œj   Ø@sep.6 -(xj V if x` �é ;jë ½¹€, targetj ³Õº ©@ZipI‚object 'µ'e¥a physicalÅ ¡   file on> ` k ' \¥isinstance–| )�  ‚  S Ò0get´4 ¿ ' q# buildˆ pdestinaðP  � Ro#mÀward slashesç „platformxÆc separatorsÒ # =;. h ".r¹P('/',¦ .$¬ ¬ %if jaltsepò \ 
 T 1os.O 6 _  Z   õ# interpret absoluteÀ as relativeJ drœ•letter orßQ# UNC;  + wdundantQ, "."“ï".." component(¼ 9r (ß E)[1]t ð invalid_path_paö
rts = ('', os.path.curdir  pa 3)
  •arcname =2 ósep.join(x for x in & t.split(\ 6sepI P  €if x notJ €invalid_� f_partsC (if… • == '\\':¬  \ ù# filter illegal characters on Windows3 ½ ò = self._sanitize_w- _(& *Þ I `target¶ +' ,(Ó  7 @normJ ( %)
j õ# Create all upper directories if necessary.5 ( 0dir Ÿ1dirÚ f  C  "if[ 3 1andŸ9 uexists(T )ƒpos.make; $ Á ûif member.is_dir(@  Â %otë is$ ¥ 
n  ®  r k& û  ! vreturn E Ž BwithùRopen(š ù, pwd=pwd) as source, \T  0 S a, "wb"1  
¨ ôshutil.copyfileobj(X / ã¯ ðdef _writecheck(¯w, zinfoC@"""C žàerrors before < Ping a%€e to the•…hive."""á "ifX .¬  & œ p º.NameToInfoà êimport warningb .	 €('DuplicÃ Z {: %r' %p æ, stacklevel=31"if­Amode•°in ('w', 'x 'a'û°aise ValueE ("Ñe() requires L D yor 'a'"t  žÿ *fp÷ r_ C }   €"Attempto{ D ZIPu@ tha5÷s already closed~ _íÑ_compression(ó. __type® »_allowZip64· ü  _z y = None» aif lend€list) >=¾ ú_FILECOUNT_LIMIT\  õ \` Æ"Files countg + )elmp_size >g /64_ ?ize\ ßheader_offset` 0Zip ž 
d %ifJî  %L#0Zip
(!+|   t" wouldo #` exten#s"C (jð(self, filename,ù arcname=None,
  Ãcompress_typ"   Qlevel6 %):7 ð"""Put the bytes from filed Q into Ñarchive under    G ” E.""" æif not self.fps  ± õraise ValueError(6     ð"Attempt to write	 0ZIPÿ Š õ
that was already closed")K "if} _@ ?ingƒ _Can't~ Ñwhile an open# öing handle exists
 Ð %)
˜ ðzinfo = ZipInfo.s_s(  X,æ 	 5  D  ñstrict_timestamps=s_ ƒ 1if † ‡.is_dir( e  9™_size = 0� $ 9CRC Jelseh%if‚–1 is ¿
* z   Ç* =A 	† p F Õ 6ion’ 4 ¨ *¨ _N 2 ©  © G 	ª L M »Cwith÷Nlockb{seekabl¯   ƒ 0fp.& ( Pstart.b )   ò header_offset =† àfp.tell()  # SC B of + sÚ  J   â ^8¾== ZIP_LZMAÖ 3# Cûðed data includes¥ýend-of-stream (EOS) marker}  � Ï úflag_bits |= 0x020 ) _qecheck(:  ( ÿdidModify = TrueP  ¿list.appendT 
`NameToF[{ .=  92] =âá Œ 0fp.e] a.FileH¾(False)Ã Þg ‘’ 'ßÒ"rb") as src,)" Å Q, 'w' Ndestì°shutil.copyï Aobj(G  . ƒ, 1024*8ì1def�AestrÆ,C_or_´,/I*  u8, ” :A"""WªaA=ð .  The contentsa'«…', whichDðmay be either a 'str' or a 'bóytes' instance; if it is a 'str',
   õencoded as UTF-8 first.& ð'zinfo_or_arcname'M õeither a ZipInfoq 5 or; @the 2 @ of  qfile in µarchive."""0  « sº Å(data, str):"  º   0 =  .½ •("utf-8")( Pif noö N Æ ,º ^ ( $ = (´  Ä = H •   date_time= `.local
 ( . v())[:6]´  C e õ.compress_type = self 5ionç 3 _4 \level4  	6 2if l à º[-1] == '/'od ðexternal_attr = 0o40775 << 16   # drwx )-xm C p|= 0x10  ù# MS-DOS directory flagN Oelse£ 5600¡  £ B?rw- U Q " =#ô
4 aš*fp� õraise ValueError(6 æ ð "Attempt to write	 CZIP ú	 that was already closedâ} _@ ?ingƒ _Can't~  wh©qan open# öing handle exists.¶ Õ )ŒÀ!isŒ;Non·fØ- )= = W Î … ãW X > X …  @_sizn1len|)Ù  D# UnB 0ed + ÖBwith¤Z_lockŠ  M(o °, mode='w')wJdest5  v   .ÝeŽ ³ Àdef __del__( ¾q"""Call^"0 ()" methodvAcase ¹user forgot P .9 n    l  ’P  =P, andU Û ‘ 'w', 'x' 1'a'E~ VendinÒyrecords‰ "ifO fpæâbreturn£  +0 "ûÙ Á  z Å  ù Úez 
ä j 	 ""on it. > CA æbabeforeó   :Wzip."e8try2À  if self.moàde in ('w', 'x û"a') and self._didModify: # write ending records
  Cwith= ]lock:!  0 #if# �seekable'  + ˆ 0fp.* ( ¯start_dir)\ $ _¬ R_end_© (- zfinallys Bfp =” )fpW O  NNone Ñ_fpclose(fp)
 Ndef €  H )t �for zinfo€   .filelist:ö  rñcentral directoryg # r   dt =K š.date_tim§ 0dos ð = (dt[0] - 1980) << 9 | dt[1] 5 *2]`  osS   =) 3) "11* 4  7  Z v5] // 2i ¢ šextra = [U #if³  ö ù_size > ZIP64_LIMIT \„ 4   0Ÿ.compress6  _ {    �.append(ph< 
© . 	n 2 ¿ S= 0xf ¼  F  + ?els
 d Ã i 0 	 ¥ ï   ‰Úheader_offset�W	@ )	 = Ö 	 
Ö ÷@_dat{.  	0°min_version‘ 	 1if 1 û 1# AN" a°Ò field to the5 'M ‘ q_strip_ (  n, (1,);"  £¹truct.pack(²  Í  ò '<HH' + 'Q'*len` /),, H1, 8% ! *l 2) +É — 
Z c 
9¶zVERSION- ]�ptype ==;n_BZIP2a
^ Amax() _b ', ! 
-/elq OLZMAp  ( o 	G-'ctE ® Ÿ ,å) 
¶ 0cre·ŠE 
( 
D  #õ name, flag_bits°_encodeFile# àFlags()
        òcentdir = struct.pack( ÁCentralDir,
-  
gstring4 ÿ  create_versionD czinfo.8 õ system, extractH  & �reservedX £flag_bits,= òcompress_type, dostim	 OdateT † UCRC, N ±size, file_ 7@len(1 pname),  ñ S_data k �comment)� 0é Ôinternal_attr (ex ¥ éheader_offset)1 ãself.fp.write(O# 	í G & 

* @pos2Ñš Vtell(’ 0# W« õ end-of-zip-archive recordH  Í ¡DirCount =›î gilelis	* qSize = € !- , œstart_dirV OL§ ' õrequires_zip64 = NoneE 3if t ž õ> ZIP_FILECOUNT_LIMIT:/  ¹Q €"Files cß "+ &el\ ¤ ] /64U ² directory 6b 2` , j^ :if ê 
¡# Need to ±@ the;$64
s Cbif notÙp_allowZ�
b  ) àraise LargeZiph(• ) +Y  4   t" wouldÑ © @xtenR&s"Ö > *zendrec Ðm áBEndAû064,9ing 8 b44, 45 Y0, 0,‡ > ³ õ+ d
É :T× )åñ ?locñ "oLocatoÛ É+  ð  Ý?, 1± — 
'  ³Q= min1d�, 0xFFFF5  5 4   3 7 _9 ÀentDirOffsetS, 0xF C)

  òendrec = struct.pack( °EndArchive, 7ing A H 
 û0, 0, centDirCount ? 9 ESize8 õOffset, len(self._comment))M  ’fp.write(Û  , D C 1if  Åmode == "a":  å  Îfp.truncate(a cflush(eÁdef _fpclose¹ V, fp)T bassertu õ _fileRefCnt > 0x t  E-= 1 _if noB  ;and Pm d|  Ð 2fp.œ ó)


class PyZipFile( ¯ A"""C! ò to create ZIP a%ðs with Python library Ò  s ‹  Z‚ages."""€t_init__Pile, }õ="r", compression=ZIP_STORED,ü  Â  óallowZip64=True, optimize=-1¿  ( Ñ /._w  | 
x „ y   V   �  _• % =  ¶#py
àpathname, base
 @="",PÇterfunc=NoneÛ  """Add all% ”es from "H y" to th³.}  ¿ 4If * c is a ¯à directory, seëE   ÛŽ | 8 4sub% ñies recursively for§ @*.py@ e enterF  ¥ £modules in¶  z nive.  ª Elain> u ºy, listdir h { ` ….  Else,ü G ”must be aÑE  Î² ¤ P will* 5put¯ G · PAddedÚØ £are always U.pyc.7 ²This method`  „1ile|¼  < Ec ifB –necessaryU  If>(î)ï�given, it Pcallex Ðth every argukL CWhen/ !FaB &or4 O vskipped<    s  †  @s.fs › Î i» � ò=filÎ 
ÝÎZdebug  ~ �label = 'w €' if os. f.isdir‰ p else 'à '•  B   Óprint('%s %r î ! bûŸ Q' % (m j· E YreturÆ , õ” Vsplit” ˆ · À:
          ð  initname = os.path.join(
   P, "__% —__.py")
  %if5 pisfile(*  7 )):)  4 ý# This is a package directory, add it6 pif baseT S  W  ä = "%s/%s" % (  , : 
¶  6 OelseP  ; ‘ ¯self.debugC Õprint("Addingì Win", WEas",Ü ¢ f~ P, arc	 1 = v �_get_codno[0:-3]N 	"if@ ¶ "z š ‰ jwrite(¥ + pdirlist¾ �orted(os. 5dirb)7 �.remove(‚ Ìð # Add all *.py ˆUs andz4subi=iesÒ1for5 h in• ¤ Ü?ath, |  G Ó  © €root, exmŸsplitext(; 	j>e  g   	0  [  z }ÞÚN  R ¿# :  8!pyþ±,•5  ¶filterfunc= ÿ)  # Recursive callR Belif�0= "Ðå u  ifk O7not Â 4v k  8'¯Ñ %r skipped bÔŠ 1' %EbJ �continue % 
¹   Ô
^ /ZH  L  Œ³ ($\¦	– v®
õ?NOT¸	sîes at top leve‚ç 	ß T @from•*EQËsv Àthname)):
     path = os.
 `.join(
  name, file
 -)
9 Ç   root, extA Ÿsplitext(; "if8 �= ".py":`  t  if… ÷ terfunc and not ­ )@ D ¯self.debug+  / pprint('Á ç %r skipped byw @' % ' F   �continueÞ f]P, arc	 1 = ¨ �_get_cod{á [0:-3],H  m  1basQ ³ "if€ ($…"Adding"Â \ Ù jwrite(õ 3 Jelsež!ife [-3:] !0ÿraise RuntimeError(.ñ'Files added with • Ãpy() must en ™'Ÿ  `
» °² ´ xl	` xeeYJdef Q 2 ,Y,¡ }¥"""Return Èä2hivD� for theG !.
j  !G!   a module # 2, rP  4 acorrecÆA  ØC 0arcg < ð, compiling if necessary.  For example, gw B õ/python/lib/string ( b.pyc, ( %).E 5""" DŠ eÛ, optimize=-1~£import py_2 G  !øCö "„
†6try« U   p .x ª !doW=True¸ Á 
[ Xexcep½ 2.Py� U as err  5zerr.msgT  ž þJFals  � F {a_py  ==F+*M$ c$ c¹ò pycache_opt0 = ›’lib.util. ¢from_sourcÜ5_py'wation='R 1R '1"Q 2Q '2Q b õ ðimize == -1:
     ô# legacy mode: use whatever file is present
4   àif (os.path.is* ( ™_pyc) and-  1 –  os.stat( Ì.st_mtime >= ) -):L ¡# Use .pyc¤ .! ´arcname = f 0ile� 	+ /elÇ  Ïpycache_opt0Ë 	, ² Ï #Pthe _£ ~ 5_/*à ð, but write it to , ¸9pycÔ  l# û !in. ~archive+!Ë Q PH!1H1úH­1H=2H2H·2H/se6@CompÔÿpy into PEP 3147 JRif _c7 ¹‘  uþif sys.flags.optimize == 0‹  0   } ) ª_ 1_ ”_ 1    ¦  “ ) ' # /elj f E þ< W# new»cgiven }µation levelC  ƒ  ©@elf.â¥	‘ +ï ã Ã¥ ë©  çàelif self._optßimize == 2:
   ýfname = pycache_opt2) Oelse? ñmsg = "invalid value for 'opt| ð': {!r}".format(self.g  )l  ¤ praise VM šError(msg* ñif not (os.path.isfile(Î _) andX sos.stat' Õ.st_mtime >=  uile_py) )ù } Q_compv 4 $, ô =å C  æ ­ c = arc… Ä 5_py¼ sarchive ì csplit(6 E)[1]0 aif bas0 
s 
I ´"%s/%s" % (/ ,† l krreturn 1$ ð 

def _parents(‡,1"""“ G¼ 0 a    with elem. Â separated bï Pposix)  .sep, gene  S all c � of thatP !.
c •>>> list(ˆ b'b/d')Ã B['b'(  V/b/d/* /+  * f,  c /, ] 	bY € " 5sòitertools.islice(_ancestryj³, 1, None)
‰
   U Š5À‹Š‰ ‹?/d'50 “3 › 4 œ !/fi = ×< „Ì ' & ÌU ® : €yrstrip(Æ„Qwhile³ —	 9!= * ­ Qyield% ß   g `, tailm '   `_dedupÉðdict.fromkeys
"""D  licate an Yðable in original orderØ Lûdifference(minuend, subtrahendçR%PitemsV 2 ¡'in8 ², retainingr ä ÁO(1) lookup.  �  þ ÷filterfalse(set(— `.__conb Ss__, ˆ  ûclass CompleteDirs(ZipFileÌ #A   · 6 srensures€ñimplied directories´ �are alway`cluded@the Ã ¨Ý 2 @�ricmetho³Ta  _d©  ; s§  =Ë$Qchainöð_iterable(map(_póarents, names))
  òas_dirs = (p + posixpath.sep for p in p? 7 óreturn _dedupe(_difference(R k l 1def| ±list(self):  ‡ ” ñ = super(CompleteDirs, + ." : ‚   As +   - ‘._impliedØ (  1))
m  … _ =_se† Ó  t > presolve\ Æ æ Ì 1"""k  Ø aIf the÷ p repres„ã a directory, v Athat) = (as) a (withO õtrailing slash).2 {  å  Õ  ó ?0dir ! =v e + '/'J ”dir_match 0not 2 Ps andÂ    ; Ð _  if+ M 2elsŽÁ@classmethod@  Ÿpmake(clú_ource[‘Given a s% a (file‘ `or zip )]!an_  “Èappropriate iA sub� O if isinstaâu ,A ¨  h * ï   1if KL hZipFilï  0 G Bcls(K ‹  Á# Only allowªÐFastPath whenMÕ is read-onlybif 'r'• nNV.modež l  clM1Ô  re °cls.__new__¿iñvars(res).update( Î ' ê ares


Š Ð iLookupjî9Á± to ensure 	1citî æQexistÁCare Í’d rapidlyüY  Ž SZy  �àcontextlib.supß÷s(AttributeError2  6 r5”ˆs›    	A � Á f û   � Â 1l�Ã  Ä ” ÿ ¥ 2.__C 	 Õ�œ A ¤ñ	lib-compatible interface@zip "s. Consider a  òthis structure::/  ” 
 ââ”œâ”€â”€ a.txQ ” b 0 c0  4 ö   $â” e8 U ò>>> data = io.BytesIO(<  Szf = () ð, 'w')
    >>> zf.wrôitestr('a.txt', 'content of a')
    >>> zf.wr- ?b/c/  c/ ?d/e1  e1 ñfilename = 'abcde.zip'
ƒ ðPath accepts the zip0 ð object itself or a   H :  ½ proot = E B(zf) @FromK Ðre, several pg ò
operations are available.8 ÃDirectory it) ° (includingR  � † — ")::  ‹ pa, b = ’ .@ Fdir(faí (#, Ÿ) b) 3b/'à  0 prÎ 'ty‚  b. @ #'b_ðjoin with divide 6 Gator8 ’c = b / 'üA  Ò c
 \
´ &¶ c{ F = ˜Read texto `.read_ !›c¹ ™existence:  s7 ATruef  ­ (Â qmissing“)).. RFalse¯÷Coercion to stringe  5cÚ ö /ó p 2"""I °__repr = "{¦Ð.__class__.__ŒB__}( ÀR!r},  cat!r})O Ðdef __init__(Q ,O‘, at=""):}  ¸  .S ð = FastLookup.make( ¿ * a$"at´  e Copena ðmode='r', *args, **kw
 o  ð  M   ñOpen this entry asà ¡Ôbinary follow2•semantics½ Ðof ``pathlib.^.� ‘)`` by paÂ� argumenUrough@ õto io.TextIOWrapper(). ­ bpwd = Ð ö.pop('pwd', None$@zip_0 =  5[0]M •stream = r­  0at,< –, pwd=pwdW ‘if 'b' inV ½ F ifá s6ž 
  # ñraise ValueError("encoŠ ŸÓ invalid for zÜFion"† K Peturnë5eamÜ r Lô ?@yH  M éM2\ PposixëA.bas) P.at.rycp("/")×Fdef  b„ 'Ô % ‘Â �Fstrm6 
mŠ(€ Qbytes© Ò p ?b')` ‘_is_child_ ,—e 71dir_D6# =— À"/")

    deóf _next(self, at):
  ±return Path Q.root$ 
$ ¡def is_dir : @not X d.at or é.endswith("/")K OfileL r 9 oexists8 € "in€  Ä ·._name_set(G OiterÌ  5if È | $ +ðraise ValueError("Can't listdir a Ø !")5 1 ¡subs = mapµ .‚,   Ÿ  > &()5 ŽRfilteqÀ._is_child, S Ì q__str___ ˜áposixpath.join% Ü.¨  | Œ )atS ?repT h __$ b.formaS= F  q  z u W, addŸ  ‰? = Ÿ ay-dd _ @R Ç qresolveš T )� ä__truediv__ = ‹ ‚‘@property¦ ÛRparenÆ ¤  9_at© 0dir8„ ×at.rstrip('/'Â5if > 
B q += '/'„  *õæ + @)


§ ãmain(args=Noneª ò import argparseã ð'description = 'A simple command-line interface for zip‚ module.™ S 5r =_  .ArgumentPm 'r(i = ½Pgroup=, ñ	.add_mutually_exclusive_& ç(required=True? 6 au  ('-l', '--3Ó', metavar='<¿ 5>',R V ¡help='Show¯„ing of aù 'u eu ±extract', n†2l ˜ (™ � '<output®?>')> ª En    ¯Ïo target dir° 	c° Pcreat¼ ¯ /'+±  Þ>A <¨ Cf § Ïfrom sources¤ 	 G`'--tes
 € 0ÉgTest iÁ“ is validv  £}Ê_ B' @ @rgs.†  @  ÿ \´2srcÿ% ”  ÖQ ZipFÈærc, 'r') as zf>  0badIQ = zfi Bzip(m  3if " 
7 �print("ThŸ@llow±�enclosedg ± ôcorrupted: {!r}"‘S Ð))
        prñ%int("Done testing")

    elif args.list is not None:   $ Vsrc =%  öwith ZipFile(src, 'r') as zf>  B Ízf.printdir(y oextrac| „, curdir„ 0 ‡ #= Ball(V � ocreate
„zip_name‹ , u.pop(0)‘ Zfiles# m ðdef addToZip(zf, path, zip	 )8`if os. 0.isW ( %  V �zf.write  N æ, ZIP_DEFLATED¡  2 ù]  š\ $ifž 
�  F   | 
n  ( òfor nm in sorted(ou{ Ø   8 .d   Ï Cjoin
Enm),D jZ, nm)¥ æ# else: ignore³	èO, 'wí è  K ê  ´s7„ % =› @baseZ· 
—  ç !if˜8 Q  $  U 6dire f E ain ('';(  pa‰¨; M= ''¨Åóq


if _Yò__ == "__main__"ê   ñ()
"""zipimport provides sup  w ð ing Python modu�@from«ó archives.

This! 0 exD ðs three objects:
-úU ñer: a class; its constructor takes aÙ X to al 0.
- I¸ øError: exception raised byk ‚ á. It's a
  sub} G of K ð, so it can be caughtƒ	$ 0too† _½@direµ py_cacheÖ  dict, mapp;#Í sÎ Ezip 6 €
  info 4  s,j uÀ (inÀ !._ùA.

IØqusuallyÄ`neededX vuse the9 ŽplicitlykA is
d !by/ ‚builtin ˜° mechanism "sy0P itemÐbat areÍ 0
toŠa"""

#O 4libY ÿ_bootstrap_external+ 1  #ˆ ò_verbose_message
_ ’ _frozen_ 5lib\  Ks � 7 J ð _unpack_uint16, _unpack_uint32ò
import _frozen_ õlib as _bootstrap  # for _verbose_message? %im$ öcheck_hash_based_pycs) oL Dopen tmarshal Eload3 4sys emodule Etime k ñ

__all__ = ['ZipIß ÂError', 'zipâ ÷er']


path_sep =í ¤_external. T
alt_ ,  arators[1:a jclass ‰ (• ö):
    pass

# _read_directory() cache
_zip _ ‚ = {}

_€_type =  ð(sys)

END_CENTRAL_DIR_SIZE = 22
STRING_! `ARCHIV ò b'PK\x05\x06'
MAX_COMMENT_LEN = (1 << 16) - 1

Ú QÊ 7""" €(archive<W) ->  � object
ÉCreate a new% ·instance. 'L €' must b2  \ 1 toG a< ñfile, or to a specific ( Pinsid6 0zip( °. For examp5 ‘it can beN ‚'/tmp/my3Q.zip'X  5/myµg', if  Q is aQ evalid *  Ž Cthe Ý .» B `raised[ 
	Òdoesn't pointó g 1Zipu 
Z 5TheJà' attribute of;ê #erœ°s contains ¤ 1nam) "th D¡ targeted.p 2"""Å q# Split; E"subø a" from 4Zipû ¡ñ, lookup a matchingU â# entry in sys™­ q, fetchV  Úgn r· #EQfoundÎPelse x6 it™ 6 Ÿñdef __init__(self,­ ½ " ”if not is°(oW, str& * ’1 osØ      . á = os.fsdecodeA )% a  ( i 6   b#§  >bempty'· =E 	Z ß
^  + ! =G ˜.replace(. R  C)õ “ `prefixƒ]À ªwhile Truea :try  A /ste…;tat 6 ¡except (OSðq, Value „ . ç# On Windows a,  /Udó�too longsã @  Ñ# Back up one% Ž element, 0dirD ,  
 ç  >è   z  ifàC ŸF ( É À('not a Zip Àfile', path= ;)
    ® = dirname ðrefix.append(base' 
G ]else:: ½# it exists ðif (st.st_mode & 0o170000) !=   ý0:  # stat.S_ISREGH  Ì  h �'s a not ð & ðraise ZipImportError('3 a 9 )ebreak
] :tryô  { ð
s = _zip_directory_cache[f]< ¡except Keyˆ H FreadI (C 
xj ! =Ñ ydself._£  Ž  ‘archive =, Q# a p "Ó ñ following the ZIPm 9 .: V ; ð= _bootstrap_external._Ò r_join(*) f[::-1]å 7if G 
' " +¶ R_sep
¢ñ# Check whether we can satisfy¸ i	1 of pmodule ÝAd byÇ p# 'full U', orN °it could be `ortionJ aA BspacJñ# package. ReturnÐ 4 if‘ àload it, a strSpcontain $thF  ‡ ` ; !itïcpossib´ s  Ú�ion, None+ wA ccan't n ¥�def find_ 0er(Q , j  ñ 4 I )y8"""3 - 1 ->å ,Ñ  5 C .– ¯ Sek‚ for a mv€specifiezt. P mustp L  € by qual> „(dotted)X  É a. It r}sê2zipû!eræ I °instance it ; ÛŸ Ÿwas found§ I  ’ © |  H ®¬y.(,“ "orÆoÀÀwise. The opl@al '>ð
' argument is ignored -- v K  B erñcompatibility with’ protocol" Ñ 5"""H  miß!ge¶‹ule_info8	½ mi—  e G Y @# Th´  ºh$or€  + ¾V&[]LV# NotG–or regulaH 1 Se	tl šU, andÜ #	refore ®×ð# We're only interested inY R last ƒ on²%ofn‡ …earlier ( Âs are recordQ  £.2)0modð  = _get_module_ópath(self, fullname)
  £if _is_dir# 0mod1 %):#  * ð# This is possibly a portion of a W [space8 ðpackage. Return the string represent @its y ,@ ð without a trail+ ©separator., ra  None, [f'{ô  .archive}{] c_sep}{ã E}']
A 
= "]
 ñ# Check whether we can satisfyÌ  im  Ú amoduleAd by_ 4# 'x' œ 3 ifR  , ¶  "'tÛ ¡def find_mX £N ,1=; ¯8"""3 - A -> � !ory .î  é Se1r for a v � specifieÒ 	Ì Ø € must beõ  L  { by qual> „(dotted)X  3R. It }s= B zipS%erI ±instance it· !if+ Ÿ ³was found, Ð  Itit wasnJ � `The op³@al ' ' argumentÛáignored -- it'� !reÂcompatibilitÕ P  ›‰ ± ’ protocol¾ $ 5"""Ç ç z.£ploader(( Ð4)[0 ÿ‹get_codeü
ñ% K )ã 7 w objectâˆ! ç  Âí_Á. Raise ZipIëGErro›	‹qcouldn'
“	 x 0, i/ , �@ = _Ë z ÷ M K ­.Cdata. U  Z.%   .•ÕPfile # 8  Á associated 4 Q m  å3!OS,5 if¶  b] œ¸%pif alt_¤  ·
�   l ! =  ˜.replace(6 S @ )ä7key8 œ &ifL `startsØ JF! +# P 
‘ 
T O[len9 w:tryH €toc_entr¢  ì ._/es[key]ª ¡except Keya
B r|¶(0, '', keyôˆk Ë	ª %, ƒ )Y#¼aºPmatch‹_Ÿ %__? ŠdÐ"ul
– Ç   m Š½ 0"""ý) 	Ì ‚ ˜% Ðfor the speciãfied module.
  5""" ð# Deciding the filename requires work ‘out where( GcodeD ñwould come from if& y õ was actually loaded<  I À, ispackage,­ Âpath = _get_C _' °(self, full£ )D dreturn: !

 @def A lsource< :$  7"""' ] B -> ; ‚ string.W  3 Rp  0#  Ÿ A forö Xspeciyõ Raise ZipImportError� 
,cJãn't be found, ß DNoneYÅarchive doesI qcontain„ 7Ä, but has noÎ  ¦ /it+miwLinfo;p �if mi is š Q "rñ  P(f"caÚ 4fin”$ {q`!r}", Ø= )r   › 
“  V  4  â ðbootstrap_external._ `_join(
 ö , '__init__.py'lOelseY 0f'{= }3 ½ :try2 Àtoc_entry = Ô ._w$s[£ ]c¡except Key4
G ‚# we hav’òîI •· ® \kAdataR._%, ª @).deå#()_## àa bool signify*bwhethe–  %#a ãc or no‚ ¦3is_ ~ âð 7"""'  ) +)¦  �5Tru.… ˜%byF	› ²}O ª> aT} 
  ú%miÑ„Load andq àì  mdd by '{'î  À Ò¨Á
( G Âe ÄŠ  	ºƒ � A mus5&th™ f by qual�€(dotted)+1uleoC. Itò s;i¤£m?,¸ØsÊ  itæÞ µ g Aì-0mod62ys.— `s.get(é  ¤¨À     if mod ÷ is None or not isinstance(mod, _module_type):
  Ymod =! ©(fullname)) Bsys.G $s[" u] = mod( õmod.__loader__ = self
 :try} Êif ispackage  ¢ ð# add __path__ to thep Áule *before* •code getsk  @   –# execute¥      W  û 4get   (´ $, ã 
 8    )  < òbootstrap_external.¯ AjoinJ  .archive, 4 N 3  1[  ]7 u !ifÙrhasattrÖë'__builtins__'Ø 5 \ $  ² 3 	-_Ë cfix_up u –.__dict__!,’ ² 
Ü  w(˜  8 % jexceptöOdel h	« VraiseVÓH ~ š KeyError‡ a q Import @(f'LÕdì  ~{ $1!r}™ˆfound in¿ 'í ^ñ._verbose_message('ii a {} # <ïd from Zip {}'k
`return— 
0def
À_resource_reŽŒJ -B"""RE  ^R7 R6 s for a ¢ ß ²a zip file.p  hDIf 'G' is3 awithin¥9 #, µ 5theØ'y �' object�  ˜ ƒ Ä.  OtherwiseG  ù.I 5""" F âC.is_U ñ
 Û r d W <7Zip#
; 7 } _8 
ó Ê._registeredM %‚lib.abc   B ¡  ¹ 
 .\ ( ¬ > & ¥ f = TruÃô ; ‚°�__repr__# ›R bf'<zipó $er!"{Ç_ }{ƒR_sep} ðprefix}">'


# _zip_se. òorder defines how we  oaN å¸`Zip
# : @ive:- Zfirst3 Ka __ini @thenP t
# non-! ð.pyc, and .py entries. The c r Ðe swapped by X ð() if we run in õFoptimized mode. Also,
# '/' is replaced by path_sep there.
_zip_searchorder = (
    (* ò+ '__init__.pyc', True /),- 
{', Fals- 'G ! H   5  À)

# Given aã ðule name, returnÍ ñ  potential fileé ! i ð!
# archive (without extension).
def _get_module_ú °(self, fullj !):è o   •.prefix +$ ð.rpartition('.')[2]¸ ’Does this“ òrepresent a directory?„ cis_dir{  † w ‚# See ifG eis a "< ð". If so, it's eligible to b!rt» a# of a7@spac àckage. We testbseeingj c 23 anE ‚appendedÍ ñseparator, exists.' 0dir¾ " =& +  v #° #  1in Y_À¨s, we have(_ †C 	8  sRÀsome informa–0 abûCù , ~ùÏ &à ðfor suffix, isbytecode !pas —x`1   Oo  +M \  ! &if$ 
4E  ( 'iï êA  PNone
+‘implement"  P_readˆ›(;A) ->Z÷	s dict (new reference)
#£¸ „to a Zip|q, buildÏ€ct, mappm î—�
# (local¼6the:  us* PSEP aýw)* ±oc entries.‡ `A toc_ yÿ�a tuple: !(__0__,#  a# valu0@use ¾$ `availaO  "al]s] < 
 @# enëd– "he/Rystem  ing
#  comsƒ  ±ion kind; 0Š $un  ed; ”data_size<  #   Ü)  & € on disk6  c6 +de8 0 boffseth  =   h  M ð header from start * B  tiž#¸   * D p(in dosè @mat)7 5datÚ = 7 Ð fP 7  2crc¨ 4 ð   # crc checksumr  O G A
# )	D|pies can,arecognH!byTPtrail{ Ò Á » K    S ZA and  _8c are 0cR¯2try	  ½ àfp = _io.open_M€¿ðexcept OSError:
      ð  raise ZipImportError(f"can't open ó file: {archive!r}", path= ñ )

    with fp:   6try   õfp.seek(-END_CENTRAL_DIR_SIZE, 2);  . úheader_position = fp.tell(( bbuffer _read(^ 3 ‘except OSî 
¡ 
 \  ¿   rif len(¢ _) != œ „ N€ @[:4]ƒ pSTRING_Š zARCHIVE� ù# Bad: End of Central Dir signature¨ù# Check if there's a comment.*  $0 ‚ile_sizeàÿ Ð	 B Ô&	»  J  
	# Cmax_Ð_start = max(OÓ ÿ- MAX_COMMENT_LEN -u  »?0ä ‡ m
œ 
<  @ Bdatau ùtu†`pos = ¼ ~.rfind(î
ë 0if 4 :< 0 ;o'not a
/',Á? l  ¬Ä Ÿ[pos:pos+ò]k k! t ä �"corruptæ "æ .Ü é-4 Ã0) +�_ ­ 7 ã_unpack_uint32fv[12:16]å4 Poffseƒ6 G6:206 3if 9 €<   
-Ec'bad c@¡directory ? O'O ë   … 	Ð ‡ Àdirectory ofó
fset: {archive!r}', path= 3)
  óheader_position -=  Esize' `arc_ofW  ! 4 3 " 5 7if 8 E< 0:  ~ ðraise ZipImportError(f'bad central directory Ž B or c Ü f ¥files = {} Ã# Start of Ce De % •count = 0 :try½ ƒfp.seek(-Y‘except OSØ 
= ú °"can't read ¾ 	é "Åªwhile Trueh Àbuffer = fp.W 6(46¡  ƒrif len(( Z) < 4A  $ ­ 1EOFÉ R('EOF¤ úwhere not expected'^ l Ì &T ] 2if } þ[:4] != b'PK\x01\x02'� Pbreak9  	h# Bad:à  F!Hì€ ^!= 46v '@flag‚ã_unpack_uint16qj[8:10]4compres4 [10:125 time = e [12:141 ?dat1 K4:161 ;crca $32Æ L16:2Ç Qdata_´
— 6 L20:2—  &6 K4:28œ Oname6 hL28:3¢ Oextr£ 7 L30:3kcommentp O32:3Ü ¾JL42:4zaLì '+ Â (+ ˜ âW{ >†Îì–Slocal@ ‰¥… '+=
¯ i D  ö Æ  �
;r	 F ÆÚ v' T A ’ )¿ 	 › Y +ð	# On Windows, calling fs÷eek to skip over the fields we don't use is
  a# slow0 ¡an reading= �data beca6  fsa ìflushes stdio'I ðinternal buffers.g  Ses ©sue #8745.} Itry:  2  if len(fp.Ž ñ(header_size - name o)) !=  U  Y ð
raise ZipImportError(f"ca l   ó file: {archive!r}", path= )± ‘except OSN x t 5	u þif flags & 0x800w q# UTF-8Í 4¹s extensionK   T! =' ‹.decode(å ?lsed áHistorical ZIPm L @encoGj ðƒ z'ascii'Š  , s0Uni« D± ~ / ’ 
Þ ù'latin1').translate(cp437_table)
¹ A ²replace('/'J_sep£  ,à = _bootstrap_z  ._ c_join(M,v
A Pt = (* À, compress, �ø,g Áoffset, time) je, crcU  Ö s[Ë Y] = tá ¡count += 1 º ñ._verbose_message('zipi>¡: found {}Ã  s in {!r}'¶ Sunt, ã ˆ areturn¼ €s

# Durh%,¥€may needÉAload‡Mõs
# package from auQ. But- Æ 3 ð is implemented
#¥ `Python
  "+ s\ ð.
#
# Break out of this dependency by us¾  A BAion >o for
#Ž  !.
ž d änò# ASCII part, 8 rows x 16 charcñ-'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'e ó2'\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1fG ó !"#$%&\'()*+,-./ ó0123456789:;<=>? ó@ABCDEFGHIJKLMNO óPQRSTUVWXYZ[\\]^_ ó`abcdefghijklmno ópqrstuvwxyz{|}~\x7Ö h# non-?$16@8?óc7\xfc\xe9\xe2\xe4\xe0\xe5\xe7i õ\xea\xeb\xe8\xef\xee\xec\xc4\xc5' cF À6\xc6\xf4\xf •2\xfb\xf9' õff\xd6\xdc\xa2\xa3\xa5\u20a7\u0192+ õe1\xed\xf3\xfa\xf1\xd1\xaa\xba' `bf\u23Ëðac\xbd\xbc\xa1\xañb\xbb'
    '\u2591 2 3 0  24 6 6 '567 !55 1 5%  57 !5d c b '107 1V 3 2% 1  00+ 3  5e '5f7 !5a 7  69 !66 7 5 6= '677 !68% 7 ± 5= 5 5Ö Ã 66n 1% 0V 8 8I 8 9t 8Ü à03b1\xdf\u0393  c0 a P3\xb5 %c4¡ @03a6  98  a9 bd 021e c  7 E22297 p2261\xbu 26Ö  265  32“ `321\xf‹42483  xb a219\xb 1â a07f\xbð"a0\xa0'
)

_importing_zlib = False

# Return the  ñ.decompress function object, or NULL if, ò  couldn't
# be d ved. The= ó"is cached when found, so subsequent calls
# don'tI c öagain.
def _get_Ÿ _Ÿ 1():ö{global è  ,if 3  -ñ # Someone has as ‘.py[co] i±ir Zip fileN 6 õlet's avoid a stack overflow.( ò_bootstrap._verbose_message('zip1:v å UNAVAILABLE')C Praise‚ IÁ�Error("ca'b data;H ñnot available")
K b = TruÑ 6tryBfromG œ  d H �except E 6ion: ì r �gfinallÔ ü ü . · W¡r;$ð
# Given a path to a¾@0 an.³toc_entry, A  |C(uncx1ed)ÑöÕata(archive, B ý þ o $, C ,A a_size,|  Áoffset, time) †e, crc =Y í&ifF F < 0í–‘'negative6  | 'ôwith _io.open_codeÍ v) as fp[ p# Check:‘make sure�QlocalÌ € header Yaorrect¯  Ï	Í  €fp.seek(À_ù ]Î!OSW„  9 ã fzEread×3: {šQ!r}",ù= l Àbuffer = fp.? 6(30 rif len($ g) != 3n� 1EOF« ð('EOF read where ónot expected')

  õif buffer[:4] != b'PK\x03\x04':(  / ù	# Bad: Local File Header% ñraise ZipImportError(f'bad l9 f9 h9 ó: {archive!r}', path= ¤ óname_size = _unpack_uint16(¼ u26:28])‰ _extra3 G8:303 ’ 4 V30 + x &+ R e  É ¸_offset += A À # Start of ' U data9 :tryY€fp.seek(+ R Ì qcept OSK
9 m°"can't read‰‚ 	k"k Þ  @raw_« ` = fp.A ( ’ tif len(- )7' ¡ ¼ a("zipi': ¤  < "ðöif compress == 0O #E@ is Ì% %edWtreturn — äD# De, ¡ with zlib4 	‡d& v= _get_ b_func( !exŽE 6ion  Œ‹L Å ;… È ¢available"` Å 1 gð, -15)


# LenientL ae/time4parison ­ ðtion. The precision‹Pthe m0 `
# in  n W’lower tha ) p stored. ða .pyc: we
# must allow a diA@encee ñat most one second.
def _eq_T ‚(t1, t2);P# dos” R onlyp cs even> €s, so bet ö ¼'€abs(t1 -O Q <= 1 Gi>  Þ �contents˜  À A[co]±, unmarshal „s
# and \ @ Âde object. R`NÙ Qif it9 ðmagic word doesn't±atch, or if& …recorded„ @metat 5 
m4 - ðsource,
# (we do this instÒ0of kring an � àðas we fall back
# too  ƒ fá U  "@want& Àmask other e°#s)³$¢_code(self; `, full´
   Õ Ûñ exc_details = {¹ f'* !':?   ,  N     }Ë	°@flagV ñ_bootstrap_external._classify_pycÁ¡ – sC °š «  ô…  hash_based$… P& 0b10È 6if % J bcheck_Û
; 0<  s ’if (_imp.2 L  Î s, p'never'Ìr  6  (6 h Àe or _imp.ch÷eck_hash_based_pycs == 'always')):
  ðsource_bytes = _get4 _ ù(self, fullpath); 2if & > ºis not Noned  o *  š  g Gimp. (Y  0   ÿ_bootstrap_external._RAW_MAGIC_NUMBER,; \ × " -)
5 >tryµ … ‚validatej?pycÁ  @ Tdata,) ÿ Oúname, exc_details\ : ÿexcept ImportError¢ areturnx× 7els�
0mtiq  �size = \0  l   ü( P_and_$ ?_of
; < 
¤ ÿ # We don't use ÒM £ Pstamp‚`  › õ# to allow for a more lenient 8 y check.; @if (—A_eq_¡ ð(_unpack_uint32(¡u[8:12])¨) I) orK  Š   A ¤12:16]) !=ì @m= Õÿ._verbose_messageE f'ÆÑcode is stale{– GN!r}'>Æ B ò = marshal.loadsý B16:]A !ifÃ°isinstance(6 0, _ W_typeÒ ¡raise Type�ð(f'compiled module {5£  ½  ˆ a L s object¸ ¬   &

l 0 = s  ±¶  !._ óŽ__)


# Replace any occurrences of '\r\n?' in the input string with '\n'.
# This converts DOS and Mac line endings to Unix line endings.
def _normalize_line_2 (p5  "".rº !(b¨ s', b'\n, 	
* =1  tGiven aé àbuffer containû cPython¨�#, »Q it
#ý W 	¯ì , å>î �n Z 7&, [ p'exec',Lð t_inherit=True)ó !Co»æ ˜/Ô values found±Zip archiveT% €
# that'‘mpatible " 8M ™a storeM £.pyc files�parse_dos/ S(d, t	Ü   0.mk (êð(d >> 9) + 1980,#ö# bits 9..15: yea‡/ �5) & 0xF. ð  # bits 5..8: mconth
  “d & 0x1F,   õ# bits 0..4: day- xt >> 11,  - Õ11..15: hours1 (2 !5)e 3e 1 Ù8..10: minute2 ‘ R) * 2j 2 õ0..7: seconds / 2g B-1,  ñ())

# Given a path to a .pyc file in the archive, retur ñ
# modification time of/ €matchingI H @and &ð(size,
# or (0, 0) if no source is available.
def _get_m] P_and_@ B_of_0 a(self,¹ !):à 2try	 š�strip 'c'q ñ'o' from *.py[co]2  ) aassertH P[-1:]÷ ¥('c', 'o')' !=' 6:-1@ Àtoc_entry = “  ._= s[1 & q# fetch" Ñ d stamp42.py+åfor comparison} ð# with an embedded ¦I *  %= • &[5„ Xdate  6  unw Rressei	) 3)  _parse_dosr ([ ,=), L ž óexcept (KeyError, Index AType Ì šk  +
¬*„contentso£,#INone’/
#”?pyc†/# yu @ qF	äæ{ut\ ô X Melse €Adatal.	x )˜!etØòcode object associated» Iømodule specified by
# 'fullname'õ+ _R | $, &  ¢ m-   - Ü  Uàsuffix, isbyteX   apackagêp_zip_seä Vorder z  \ �2 + M \  ¨ð_bootstrap._verbose_message('try {} "',# f S X B_sepà   ", C Vity=2	ø u „ü® ² G 6pasR
  0mod• 	0[  #   " =¬  ƒ, .  'if‹l  ¡ U ˜unmarshal• 4 ö  D , ƒ 7 P Ö   b  ÷4ileÏàmodpath, data)'
  ùif code is None:  ( ÿ# bad magic number or non-matching mtime9  qin bytea ­, try next) zcontinuB ùmodpath = toc_entry[0]< creturn^ ³ispackage, ; , 7elsÔ ðraise ZipImportError(f"can't find< ðule {fullname!r}", 
 = µ)


class _J âResourceReaderE€"""Priva/ °used to sup~ ˆ c.get_rC !_rD A().
Â RThis p ‚is allowG �reference ó the innards and p{ �parts ofL  % Azipiþ 1er. 1""" ò_registered = False‚ ÷def __init__(self, E %, ø  5 & .% ( =3 o ' ? % =J x Eopen} *)p D C_as_7ƒ  õ.replace('.', '/')„ / %f'ôE 4}/{k %}'0 ‚from io E… BytesIO 6try—  ä ¦( Ã üPdata(‰ )˜ ‘except OS¦T ÈÁFileNotFound% C =¾ z $,  =U# All @s arKRÀzip file, so   Ps no ­  Ì R ! K ð `# Rais  ` tellsH ð higher level APIL pextract  O�# binary #Ù0creS@a teÇ  
� å} ,isR à	pMaybe w»ñuld do better, but if Qan ge¯ ž ‡, it's a¼ m�.  Otherw†it isn't3¦y? = ¾2 × º›e ¦ŒÉ ‹
…/    ô7TruC çAents‰	nã Ýõ	 bit convoluted, because¤ will be aª ‰,ª # _sÓ‘a list ofÆÈ s relativet À0top" &th‚²# archive's5 àpace.  We want: @comp* l s E;allÅ Š †  t1€s inside% È årepresented byñ x.  So wš õ ¸ amodule|  À Fr into aò  ð relative to the#
  ð
# top of the archive, and ÷n we iterate through _files looking forM °names insid2 õ at "directory".) ö	from pathlib import Path! 0ullL _% ! = ’(self.zip1 aer.getŽ  *  f8 %))K „relativeK #  . "toB ` L p# Don'tõ ”get that P  † ñs a package, so itsè Õ will include› ð# __init__.py, whichsæwant to ignore7uassert ´  .w W == 'L 'c � í + =; eparent, ösubdirs_seen = set(û @for úo =in �Š%s:N  a:try   ¿ ×V )�¹ †  @ þexcept ValueErrorc vcontinuj 8 2# Iç 7ó } " (z%is  ~ 9zipÜ #ñmpace),9 ¿ ° given whenQŒ resourc™ òreader was created, haM £,= Pn it' ƒa� ÀmÃ usPvskip itI ý_M . V	_ rif len( 6 )v0}UyieldJ Welif H P not RV Ý �I.addŠ 	ª  Ý „ e ÿ
A. HISTORY OF THE SOFTWARE
= ˆ

Pythonš «  ðRearly 1990s by Guido van Rossum at Stichting
Mathematisch Centrum (CWI, see http://www.cwi.nl) inôÑ Netherlands
�successorÂóa language called ABC. � ‚remains Ä ñ
's
principal author, althÖiƒžps many C¡ributions ±o‹ `s.

Inø #5,h  +  nÓd his work onv   .pCorporaN  >!
N pal Reseha Initiªos (CNR ðnri.reston.va.us)
inA Ðton, VirginiamPre heƒñeased several versÏ ðp
softwab Ó „May 2000× É àcore developme¡ðeam moved to
BeOpen.com<AformÀ D ñLabs team.  In OctobeÉ #‘same
yearî3 j   Digital C* Ï :0becC WZope pm à2001, the PythðPon Software Foundation (PSF, see
https://www.python.org/psf/) was formed, a non-profit organizaM ñ
created specifically to own PS A-rel# òIntellectual Property.
Zope Corpor  ówas a sponsoring member of the PSF.

All`   releases è 0Opeö  urce (see ä ã `openso  ç  Ý 
Q 3 `DefiniÚ ¢).  HistorÕ ó, most, but not all,‚ 
‚ ñhave also been GPL-compatible;¿ ñtable below summarizes‰ uvariousÑ ‚.

    Rà    qDerived AYear	 t   Owne  z =   Dfrom  ³ R? (1)† ê0.9.0 thru 1.2; õ 1991-1995   CWI 1yes… 41.3: 5< A  7  < 9< %NR= < 6P  	 !1.C   Q 2000	 < !now %2. & &1.K ;  Be .c; Q1.6.15  ;  C² C (2){ # A D2.0+T 5200 1PSF    { 92.0{ ; -;2.1< $1+P w < ØL 5200 ³ < 3Ä   < 1 < à2 and above   <   ´ @-nowW x û
Footnotes:

(1)nð doesn't mean that we're distribut[£a under¹ gGPL.  bñlicenses, unlikeÉÆGPL, let youU eF ð a modified versv°without maky Ðyour changes ™ šB  ThE  Ä‹ …  B �e it possX oscombine‘ m ‰ tother sibdù Ï ¡3 ðs don't.

(2) Accord· òto Richard Stallman, Ù!is
¶ ,† `becausµ sÇ ! hæ`choiceÛ`law cl'  |q B  h¥, however,| ‘'s lawyerO Ptold *  ñ   G @is "½&inY".�.

ThanksV ñmany outside volunteers who ïTworkeJÐGuido's
direcG G "ma3%seÛ½ñ).


B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE U ‡PYTHON
= À============= ð

Python software and documentation  ôlicensed under the9 S9 RFound2 L. P VersB ó2.

Starting with v ð3.8.6, examples, recip	  ‡ ÿother code in
the™  ^dual ž ] PSF ‡ 
V  H ô Zero-Clause BSDA  § 6omeôincorporated into¹ #is
”differentD es.
The >sA ú Ï @fallNa? ð.


PYTHON SOFTWARE FOUNDATION LICENSE VERS ?2
- •

1. ThisH ðAGREEMENT is betweenÞè Þ ‘
("PSF"),+ NaIndiviŠ¢or Organiz
#("… e") accessø Aand
Þawise u t˜ ‡"("#@") ižðurce or binary form€ ±
its associ¤	ºñ.

2. Subject toÙ Pterms; ` condiâQs of  ­ ` Agree,IÔhereby
grantsWõe a nonexclusive, royalty-free, world-wid ƒ ôreproduce,
analyze, test, perÖ ð/or display publicly, prepŒ derivatived âks,
distribute•[eËAalonCwin any G v¨ð
,
provided, however, that'ù G PSF's noti¢ôf copyright,
i.e., "C   (c) 2001, 2 3 4 5 6 7 8 9 q10,
201< 1< 1< 1< 1< 1< 1< 1< 1<  20B $21× p;
All R¹ ±s Reserved"¿aretainA M
¯Ed by3r.

3. Ic ev7seß8s a›Bwork„ ¡aƒgon
or ›s– !orÚ@partìBreofw¹rto makeJ
E  available¥@ X   in5en
´   @by a/s: Qinclu°Š Asuch¥Ð a brief summÁ!of‡ ±changes madz õP.

4.u –0mak3 
¨ ˆ  ¦ñn "AS IS"
basis. A ñMAKES NO REPRESENTIðS OR WARRANTIES, EX   ò
IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMIK #h ûAND
DISCLAIMS ANYz y Z ð MERCHANTABILITY ±FITNESS
FORA ðPARTICULAR PURPOSE&  THAT THE U ðF PYTHON WILL NOñ>T
INFRINGE ANY THIRD PARTY RIGHTS.

5. PSF SHALL NOT BE LIABLE TO LICENSEE ORC óOTHER USERS OF PYTHON
F ðINCIDENTAL, SPECI	 ðOR CONSEQUENTIAL DAMAGES OR LOSS AS
A RESULTT ñMODIFYING, DISTRIBUT 1OR  £WISE USING€ #,
€ °DERIVATIVE ¨ ðEOF, EVEN IF ADVISEDb àTHE POSSIBILITðNEREOF.

6. This License Agreement will automatically terminate upon a material
breach of its ( ÿs and conditions.

7. Nothing in tw  shall be dˆ €d to cret �any
relaO 0hipn ñagency, partnership, or joint venture between÷Cand
í ?e. ý ðdoes not grant pù Pssion� 0useK °
trademarkss  P nameÞ !a    ! sZ to endorse. ñ promote
productB €servicesÙ £ Î 0any/!rdè ðy.

8. By copying, installZð or otherwise us tPython,ä0e
aåsË  be bound bb eâº � ­
$ä.


BEOPEN.COM;° AGREEMENT '2o 2.0
- Y ñ e ` SOURC­C£h ÄVERSION 1

1ÑÈ% %is	ÒBeOpen.com (" p"), hav0ñ)an
office at 160 Saratoga Avenue, Santa Clara, CA 95051,òàthe
IndividualëqOrganiz¸4 ("Ú�") acces£ ,·
tqsoftwarTQsourc>±binary formu  uð associated
docuÄs Sthe SI ð ").

2. Subject  ³ù" HG#, ! bhereby4Sóe a non-exclusive,
royalty-free, world-wide l†Rto reeWÀalyze, test,� ù ð
and/or display publicl0rep3 derivatived 0ks,, atributV (d
s e 'Q alonl0in €M 0ver,½ñvided, however, thatI 
4À is retained& -r ,s " pÛ °IT.

3.ƒ`is makÆ
Î €vailableð9  Äòn "AS IS"
basis.  Òð MAKES NO REPRESåATIONÆàWARRANTIES, EX   €
IMPLIEDD PY WAY{ÁEXAMPLE, BUTn`LIMITAK ,k ÑAND
DISCLAIMS
}  B| ] ðMERCHANTABILITY Oð#R FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE U F ñSOFTWARE WILL NOT
INFRINGEI QTHIRDO ò	Y RIGHTS.

4. BEOPEN SHA6 ñ BE LIABLE TO LICENSEu  � POTHERv ARS Ox 
x ³ ðINCIDENTAL, SPECI	 ð	OR CONSEQUENTIAL DAMAGESÎ ðLOSS
AS A RESULTZ ðUSING, MODIFYING( �DISTRIBUT  þ { , àANY
DERIVATIVEðREOF, EVEN IF ADVISED]  < ´POSSIBILITY, ñH.

5. This License Agreement will automatically terminate upon a material
breach of its( ÿs and conditions.

6l ñshall be governed by@ ðinterpreted in all
respects# °the law of   Stœ ð	of California, excluding� �flict of
6 aprovis� `  Noth% Oin t¥ d"€d to
crer �any relaé 0hip� ñ%agency, partnership, or joint venture
between BeOpenó Š?e. šðdoes not grant
p–sÈ t to useN  trademarksy  a namesK    !
sû to endorse/ Ðpromote produo°or servicesà § Õ ‘any
thirdï Py.  A  | ep, "ç ñPython" logos available at
http://www.p& ‘labs.com/- �.html may-¡used accorß toe s!@ed oÕðat web page.

7. By copying, installð or otherwise us  ]”software,,0e
a-svqbe boun¸ -  *  6[
l„.


CNRI~° AGREEMENT dïPYTHON 1.6.1
- 4

1nÒT 4is x ¬ aCorpor½a for N ðal
Research Initiatives, hav€an offic¶ð 1895 Preston White Drive,D ðton, VA 20191 ("ê 1"),í €  IndividualxqOrganiz„ 4
("g ")ê!es� Z£T% ¬‘ in
sourcÓ`binaryä m} °its associa`@docuú{ Ð.

2. Subjectâ ª ÖB , ê r
hereby‹hqe a nonœs)ó royalty-free, world-wide
lšRto reŽe=ñalyze, test, perfor× ñ/or display publicly,
prepare derivË d 0ks,, atributV dü(e WQ
alonJ ‹(nyM 0ver‚,0àvided, howeverû!atð's
License Agreemeônt and CNRI's notice of copyright, i.e., "C ñ (c)
1995-2001 Corporation for N ðal Research Initiatives; All RY  s
! ðrved" are retained in Python 1.6.1 alone or ‘any derivO P
versx ðprepared by Licensee.  Alternately,> @lieuÝ î * µ
Agreement,= ñ may substitute the following text (omitt Ùhe
quotes): "¼ ðis made availableU qject toU Ptermsƒ`
condiFs« 
£  £ v.  This ù  together with
~  Å Ñbe located ons  InSet us¾ Û  
unique, pZó#stent identifier (known as a handle): 1895.22/1013Ÿ SI£also be obãüfrom a proxy serverž 
ž  ò URL: http://hdl.„ X.net/† ‚".

3. Ið  evÆ í#e , Ã Jñ work that is bas/
ucá*es˜0or �@partXPreof,Ê` wantsáPmake
;i @to o¾sUðprovided herein,W %n
º   @by a¯` pinclude0 Š BsuchÉ ña brief summary of‡ cchange“)toÏ Q.

4. 0mak	N	µ • òon an "AS IS"
basis. H ðMAKES NO REPRESENTATIONS OR WARRANTIES, EX   ò
IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMIK ,i ûAND
DISCLAIMS ANY{ z [ ð MERCHANTABILITY ±FITNESS
FORA ðPARTICULAR PURPOSE&  THAT THE U ƒF PYTHON±@WILL© ‘
INFRINGEI `THIRD O ÃY RIGHTS.

5s2SHA4 ñ BE LIABLE TO LICENSEs  Î POTHERt  RSv 
'± PINCIDl°L, SPECIAL,³ ðCONSEQUENTIAL DAMAGEtð LOSS AS
A RESULTZ ñMODIFYING, DISTRIBUT 1OR … 0WISý 9INGü #,
7 DERIVATIVE'ðREOF, EVEN IF ADVISEDh  CSPOSSI� à ‚EOF.

6.éiñðwill automatically Fié0 up‘ð material
breachõi”n nO.

7l Pshall»Pgoverž by–ð federal
intellectualÐ�perty laws  û0Uni|`States† ³ \ ¯‘out
limit4Y � M X,S S !ex˜ ïT
U.S.�  * A doeÈ@ app÷° ’ ÐCommonwealth ôof
Virginia, excluding  ñ's conflict of law provisions.
Notwithstan7 ð the foregoing,  òJ regard to derivative works based
on Python 1.6.1 that incorporate non-separable material( ðwas
previously distributed under “ ðGNU General Public License (GPL),& 
Ý  of Ð Commonwealthø ô shall govern thisI ð
Agreement only asò °issues arisV’ $orðspect to
Paragraphs 4, 5, and 7z d  d p.  NothT iˆ 
Ñ $ ¬ @be d™ ‚0creQ�any relatÆñ*hip of
agency, partnership, or joint venture between CNRI¥ w �e.  This‡  ðdoes not grant permis@ !2useL ptradema1or
 ± name in a    ! s¶ to endorse£ ppromotešðducts or
servicesD¤ Ð  ü Qthirdê ð y.

8. By clickQoQðe "ACCEPT" button wherŽ qdicatedL pby copyì�
installB Ñr otherwise uúá,40e a5*±be
bound by‚QtermsbQcondiª Ì 3

  · ÿ(


CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
- ð

Copyright (c) 1991 - �5, StichtðMathematisch Centrum Amsterdam,
The Ne4Álands.  All W @s reÍled.

P=,�‚, modify8¢�softwareN€its
docuª  ° bpurpos&  ¹°out fee is û"byÁAed,
2dedƒ bQaboveŒ µ  ð¡ice appearÄ ll in9 R
bothC  F
9 $ (is/9notT q
suppora	Ó G œ G/of�
�0or 3 ªb·!ed¸ Rdvert¿Aor p>0ity™ @tainÞ5to
t2ion§%e xN ïöific, written prior
ðP.

STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
THIS SOFTWARE, INCLUDV  7 xIMPLIED? ðOF MERCHANTABILITY AND
FITNESSA ` NO EVD SHE ©  BE LIABLE
s°ANY SPECIALL ðDIRECT OR CONSEQUENTIAL DAMAGES  2  ñ
WHATSOEVER RESULðFROM LOSS OF USE, DATA; ðPROFITS, WHETHER IN AN
ACTION OF CONTRACT, Nð#EGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF) �IN CONNE! Á WITH THE USG �PERFORMAV ðF THIS SOFTWARE.

ZERO-CLA. ñBSD LICENSE FOR CODE INN ðPYTHON DOCUMENTA� /
- 2ðL

Permission to use, copy, modify, and/or distribute this software for any
purpose with or  ðout fee is hereby granted.

(ñ	 IS PROVIDED "AS IS" ANDÿ ñAUTHOR DISCLAIMS ALL WARRANTIESvª
REGARD TOfp INCLUDµ 6 xIMPLIED> ðOF MERCHANTABILITY
y €FITNESS.„°NO EVENT SHE  ¹ ” ‚BE LIABL´óANY SPECIAL, DIRECT,
IN
  /ðCONSEQUENTIAL DAMAGES  ;  ðWHATSOEVER RESULT¾ ÀFROM
LOSS OF_`, DATA; ÁPROFITS, WHE·SIN AN´ . ¸CONTRACT, Nå
å >  ORå
åð# system configuratk�generated_ v€d by the/ +  �ñ6ule
build_time_vars = {'ABIFLAGS': '',
 'AC_APPLE_UNIVERSAL_BUILD': 0  "IX HDATE ÐGENUINE_CPLUS  …LT_SOABI õNDROID_API_LEVEL R‡ ó/root/repo/emsdk €upstream Âcripten/emar¶ RÆ 1rcs UBASEC ð-Wno-unused-result -Wsign-comp~ö-Wunreachable-codeG %PPI  fMODLIB9B Á òcpython/installs/ ¢-3.9.5/binO ŸINLIBDEST? 3libP 23.9I L” @RARYI 2libo  n a! `SHARED  i"ccA   EXú0X T q + �_GNU_TYP1 òx86_64-pc-linux-gnu* ¡YTESTR_DEPP!\\  CCR ¦ !&CCæ K À	!ö -DNDEBUG -g '
  ð'-fwrapv -O3 -Wall -O2' W-fPIC| ?FOR” P_ALIA ì P-fno-·ct-aliasingD R_NODI% ‘ONFIGFILE7î5ure#re.ac ac T.h py :.inÊ Ô ã'Makefile.pre.žCf GURE_Oå À'CONFIGURE_Cÿ(FLAGS_NODIST': '-std=c99 -Wextra -Wno-unused-result '
  '2 Ÿparameter5 ÿmissing-field-initializers? ÿstrict-prototype3 ðerror=implicit-function-declara x ñfvisibility=hidden',
 'CONFIGURE_CPPd]ÿ"I/root/repo/cpython/build/sqlite-autoconf-3270200€ /'-M ¿bzip2-1.0.2A #»zlib-1.2.11Ï %LDÎ  L! ±_ARGS': "'C@ ý=-O2 -g -fPIC ' "S$"':=ê 7P 0'"€ )ÿ '--without-pymallocÚ ð--disable-shared';  Aipv6 !en# ßbig-digits=30P , qoptimiz»sE ÿhost=wasm32-unknown-emscriptenO ”ÿ=x86_64-pc-linux-gnu1 prefix=ß ’installs/ïo-3.9.5G v o_alias|  á 4 ç (CC° bemsdk/ €upstream *O/emcÎBPKG_ðo_PATH=Ý & oLIBDIR} ðsystem/local/lib/pkg'7ig:s½  Ã F @ %'"¯�NCLUDEDIR«W ©Ê†/includeìG /PYF !%33.9P €REPYTHONY Q  °VERAGE_INFO ­  L!/Pctê/coverage.infoI QREPOR K Plcov-Æ/rtI p_OPTIONñÔ'--no-branch-‚ ² --title "C¢  Q «n'p "q 	Vr. -I./IŠG ùÀhon/build/sqø
lite-autoconf-3270200 '
  ÿ'-I/root/repo/cpython/build/bzip2-1.0.27 ý+zlib-1.2.11',
 'CTYPES_FLAGS': '-DHAVE_FFI_PREP_CIF_VAR=1  ÌLOSURE_LOC=1ƒ  Æ L C- !AL/ {  XXr â bemsdk/ €upstream Ácripten/em++; qDESTDIR² @ "’installs/2l-3.9.5£ '9 O/lib= *‡ ?3.9G 4 ’ …-dynload;LIBO
 D ™ F @PATHG  `SHARED 0Z  h 
¬ ld ÀIRMODE': 755’@DISTo ðREADME.rst ChangeLog .Vigure
 b.ac ac T.h py 8.inpÐ'Makefile.pre óInclude Lib Misc Ext-dummy™ d+ AFILE�¸ $û* 'É ½ ¢ €LINCLDIR/. €LLIBRARY  ñOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754': 0z* ?BIG$ nLITTLE' 1K @TRACÕ'„  A_DEP#(\\ RHEADEÌ 1OBJ-  `YNLOADe Ù ü�_shlib.o# 1ENAè 4PV6Ñ  EN¢0PIP4 rupgrade, Xœ :EXE�°EXPORTSFROM8 1  &YM“ ËEXTRATESTOPT *_Cä‘EXT_SUFFIñ.˜R-39.s¼  Ø … 0644Aò FLOAT_WORDS_BIG±Ø ðFLOCK_NEEDS_LIBBS Ã�GETPGRP_Å4ARG2 †GITBRANCÜPGITTA  ¢¥GITVERSIONô @GNULY "'n¥ T PCCEPT3è  OSY  §DDRINFO':  0LARR ²IGNED_REQUIf [LOCA_Y PLTZON½ï  ;SIN& 2SM_Ø  * +TA* ðBIND_TEXTDOMAIN_CODESE€‰ ¦BLUETOOTH_
 
X  ðROKEN_MBSTOWCS': 0,
 'HAVEô	_BROKEN_NICE': 0,
 'HAVE �PIPE_BUF ?OLL ïSIX_SEMAPHORES$ ïTHREAD_SIGMASK# °SEM_GETVALU› 1› ŠUNSETENV< öUILTIN_ATOMIC': 7 jCHFLAGŽ [CHOWN& JROOT 0LOC¢ K    � Þ   :TIMµ C3 >SET ËOMPUTED_GOTOŸ jONFSTRŽ iONIO_Hö {COPYSIGÊ ÐOPY_FILE_RANGŽ ÞQCRYPTE ¼  m jTERMID�  _* R PURSESp /TE ² / zHAS_KEYÍ  `IMMEDOxe PIS_PA•   ž _RESIZE#   & v  _ OSYNC” TYPEAHE— LUSE_ªCç PWCHGApÌ ÀDECL_ISFINIT·£  IN� *NA. ÊRTLD_DEEPBIN PGLOBAËS < 0LAZ  /OC7 KMEMB	q oNODELEÝ s ANOLOIu 9NOW�V ATZNAqF‘VICE_MACRVL @V_PT	. Y_PTMXRDIREC'* €IRENT_D_ò
Š   ém 0IRFx KLFCN|[DLOPE¾:UP2_ :UP3 ð	YLD_SHARED_CACHE_CONTAINT‡ ¶ pYNAMIC_Y9INGH \ENDIA’ "EPÞ¸  Š_CREATE1A R�0ERF^; 2RRN´ 0XEC¼ ÉPLICIT_BZEROŠ#EX ZMEMSE/JEXPM� {FACCESSWPFCHDI›r ZFCHMOž ; 	( (F;( ;NTLÛPFDATA8	3 FDñ� JDWALó FE(
 F_
b  ORJ Å ðORKPTY': 1,
 'HAVE_FúPATHCONF': 1,
 'HAVE_FSEEK64': 0 O' ^TATAT ;VFS :YNC LTELLb   b KTIME9 kRUNCAT U) Nv    Æ  µ ÉGAI_STRERRORn YGAMMAÿGCC_ASM_FOR_MC68881  Xá < =X878 ŠUINT128_RªGETADDRINFÚGETC_UNLOCKED¶ œETENTROPY kGRGID_ä ETGRNAM `OUPLIS� CG0 0OUPY3±GETHOSTBYNA²	0  e  j_3_ARGX O_R_5" 6" 	œ I ø `LOADAVq 	- \LOGIN; Ø „zPAGESIZ�`GETPEEV -GI®LPGRPp P'  mRIORITÖ@PWEN¤	Å /PWÔ?PWUlRANDOMz �_SYSCALL /ESÌ  NRESU» S  P¶ 	*MSPNA‡ W1' ð LIBC_MEMMOVE_BUÀ IRP_HMHÛQHTOLE¡7JHYPOIRIEEEFQ c 2IF_9DEXŠINET_ATO= P CITGRH\ {NTTYPESÄ !IO ( ÝPA_PURE_CONST!KI°Û   P* @QUEU V @LANGåm * úLARGEFILE_SUPPOR$pLCHFLAGJ @CHMO¸F JCHOWLa& 0IBDk  K ^  IBš	}|LIBINTL» ›IBREADLINê   LSOLVD @SENDë  2UTI\ † )NKjKLINK[ÑLINUX_CAN_BCMœ 	@   ± _J19396 ËRAW_FD_FRAME~v  $ ^ ÀNUX_CAN_RAW_ÿJOIN_FILTERS': 0,
 'HAVE_LINUX_MEMFD_H  NETLINK OQRTR oRANDOM OTIPC ¡VM_SOCKETS 1¢ AWAIT » wOCKF': + LOG1P 2 šNG_DOUBLE JSTAT ZUTIME.jMADVIS: yMAKEDEV< zMBRTOWC dPCREATA È aMEMORYÝ Ë zMEMRCHRB KKDIR¦ kMKFIFO'   ( ;NOD' =NOD&  ô 
' *MAS<MRE bNCURSE¹Ø <NDIPNETPAå_  sõ kNET_IF
0NIC0& KOPEN¸   9PTY¹ zPATHCON";PAU¿JPIPE#YPLOCKJPOLL\ ;OLL§ POSIX_F!  BLLOCüÌ  [SPAWNa  N  
~JPREAÈ 
  Ö ŽjPRLIMIãlPROCES¸�PROTOTYPü«  TH| ã_CONDATTR_SETC+& �DESTRUCTOÃ† E aGETCPU? IÏ " 
P8 !INÃ / !KI£ `SIGMASÐ¥ oAPWRI—%  Y 
Z  $	Á ©  
S @REAL«> LNAME< ð L_APPEND_HISTORïð àRL_CATCH_SIGNA¯
 ”OMPLETIONE ŠCHARACTE¡ G + �DISPLAY_MZ  á OOJZ ' 	<
Q PSUPPRsÊ * ¿PRE_INPUT_Hj  ÍRESIZE_TERMIã 0OUNIÀ1RTP@	d ðSCHED_GET_PRIORITÜ X#  
7 !RR: kINTERVc" `SETAFF¥
� _PARAMo  1SET$ +UL�0SEMu @VALUz   ÷
M 0EM_ÂðDWAIT': 0,
 'HAVEû_SEM_UNLINK': 0,
 'HAVE_SENDFILE —TEGID': 1) >TEU '  lGROUPS= }HOSTNAMi lITIMER. ALOCA• 	� Pn  LPGRP> ŒPRIORITY RÖ ?RESW  ?RESî  RS;  JVBUF� {HADOW_H mM_OPEN »{IGACTIO- ›IGALTSTACéšIGFILLSET\ û IGINFO_T_SI_BANõ  mTERRUP7 <NAL½ œIGPENDINGc KRELSú IGù@DWAIZ ‘/IG  © 
¨kNPRINTX OCKADDR_ALˆ Z  ASA_Lc PTORAG¬ i‹OCKETPAI§LPAWNPSIZE_Ò ? [TATVFºTAT_TV_NSEC- 2í ü TDARG_PROTOTYPEQ LDINTŽ ^TDLIB l_ATOMIy ;RDUJ0TRF¥¡ ]RINGSU    ;LCP†_TROPT?  lSIGNALk üUCT_PASSWD_PW_GECO÷ R# - G SZƒST_BIRTH× TI %  LKÊH 
OLOCKŽ E @FLAG! f G†
… ORDEV‚ ›TM_TM_ZON§#YMß| A’+YNý[YSCONH^YSEXI«¡YS_AUDIOIOïÝ ŸYS_BSDTTY  bDEVPOL2
3 ?DIR0   HA^
/ EG æ SS_EVE 
0  Ý` 
/ BIOCTŽ 
 ²KERN_CONTRO 
N qLOADAVGQ  /CK  _MEMFD OKDEV Mö 
— _MODEM/  N>ðPARAM_H': 1,
 'HAVòE_SYS_POLL_H': 1,
 'HAV oRANDOM ESOURCE  oSELECT _NDFIL4 OOCKE4 oTATVFSN /TA1 OYSCAÌ �SYSMACROM ‘YS_DOMAINj 0oTERMIO ?IMEN ?TIMå ?TYP/ U] 
{U‹  OTSNA] ?WAIQXATTR» I ™TCGETPGRPï?TCS jEMPNAM* ù  &i =jTGAMMA< KIMEGO  F
%  MP( ˆ › W_R': t jM_ZONE< kRUNCAT ZJ	< ŠUCS4_TCL ' @aUNISTDì  iLINKATy ÐUSABLE_WCHAR_ ¨ 2UTIq	 LMENSD  NSW   € rUID_CREç U   PENC_Bÿ  ‘GENERATE_Q ?SAF$   7 UT   ÿ  3¥   4 -ID P ._ PCSCOL™s 0CSF¸ 	®jWCSXFRajWMEMCMîÊWORKING_TZSE™iWRITEV¦ úX509_VERIFY_PARAM_SET1_HOS; ™ZLIB_COPY“ _nT €OST_GNU_ð': 'wasm32-unknown-emscripten'†ÐINCLDIRSTOMAKŸò'/root/repo/cpython/installs/ þ-3.9.5/include '
  G e£ ?3.9˜ 4Q 0PUDEDIå C ÇB � 1STA¹…'/usr/bi®3 -co # @_DAT,( y -m 644/ QPROGRš2 	+ PSCRIP«* Àn/install -cõ"',
 'INSTALL_SHARED': '/usr/bin/install -c -m 7551 `SONAME- âlibpython3.9.a! 0O_H °Modules/_io m $.h$ @OBJS' !\\ WLDCXX… ó root/repo/emsdk €upstream Ãcripten/emccC AFLAGU  p_NODISTl  pLIBRARY À  #LD  0DIR# 5 œ -pVERSIONR 23.9U 0IBC  "DE§ /ý c^Œ"s/ -oS5/lib S · E � ³FFI_INCLUDEF  M¨ 4-lm 3OBJ" Pÿ/ ‚1IBPâ � ¤/pkgconfigT  PL~ D – B3.9/K  1O 2YTH‰ 	,_¯ ±_OMIT_FROZEßÒ!IB
g-ldl  <aSUBDIR ƒtkinter  Y/test  _  Z <NKCX'fINKFORÐ`PO_32BÊ 
FËIPO_INTEL64_a±LVM_PROF_ER+"noL  1FIL' QMERGE2  7"ln `OCALMO…#p-DHAVE_›ý PREP_CIF_VAR=1  üLOSURE_LOC=1 '
  '2 C- "AL/ , Ï -lsqlite3  L Albz2² pMACHDEP¤3ems— = PSTLIB3 ×#J öOSX_DEPLOYMENT_TARGEëOMAIN)'ðMAJOR_IN_MKDEV': 01 €SYSMACRO¦1 aKESETU
$./ “makesetup´ N9ù ‚share/ma aMKDIR_d ¦smkdir -^ €ODBUILT_  ™ ò	'array  audioop  math  c ÿ_contextvars  _structïð  '_random  _bise( ð_datetime  _heapq  _json  _csv _typesQ c _õð unicodedata  _pickle  parserœ Oockeœ 2sel’ ðposixsubprocess  binascii  zlib  pyexpat  _sŽha1  '
   '_sha256  	 2512	 ñ 3  _md5  _blake Pqlite _cryptP  bz. PqueueE ñultibytecodec  _ Fs_cn /hkM . `iso202X  &jp? &kr /twK ðlsprof  _decimal  mmap  posix  errno  pwdr¼ l Q `weakreR òfunctools  _operato” €llection ?abcK Citer@ `atexitƒ 0ign¥  _stat  tim“ Pthrea¢ olocaleQ ð_io  faulthandleŽ  tracemallo‡�peg_pars osymtabO ôxxsubtype',
 'MODDISABLED_NAMES': ' 1LIB ý-DHAVE_FFI_PREP_CIF_VAR=1  ËLOSURE_LOC=1¥'- C( "AL* ÌC-lsq£d -lbz2” 1OBJ” áModules/arraym E.o   hudioop Emath) 
@'7 _% 5 c 6 Ò 7 ¶contextvars-  `structW w orandom;  fbisect A @dateW* ~ Vheapq B @json£ 8 :csv  5?s.o€callback# E   eproc.ošocfieldG Rstgdi.F !_c{ A_tesF 0uni×@dataª Ú `pickle" 9 -Wsocke}?  se? _Ž0sub es€binascii– ¸ Fzlibd | 1xml¾ RQxmlroá J gxmltok2 ipyexpaLFsha1n I _' • fsha512 ? 3% = >md5 ª Q & gb_implß  s u@cachN BconnãL gcursor ÐmicroprotocolÔN ¼ è „prepare_< T ?row	àatement.o Moduðles/util.o  Modu q_cryptm   7'
  '' 6bz2%  Vqueue = àmultibytecodecf A  @s_cn ? _%  hk% ; piso2022 @  jp% @ /kr  tw Q …lsprof.oFÀrotatingtree9 e `decimarL —basearithN šconstants text.o I €convolut€   cr1  €difradix,E (fn1 pfourste7D 'io” `mpalloÑO &mp B ÇnumbertheoryL 3sixk L €transposà xFmmapc Vposix Q Verrno& = .wd 1_srx K ¢8  `weakre+¸¯_functools?  qoperato£| �llectionB  ab } Oiter| _atexiosignal»  0staL«?tim*o_threa�_localA iÓÒ ioelAfileÉS «s! C ‰buffered  � G astring" ¿faulthandleÕ
dtracem_? Ÿ_peg_pars> 
hsymtab.È òxxsubtype.o',
 'MODULE_OBJS': '\\ €ULTIARCH 
 �_CPPFLAG/  ð
VWDELCH_IS_EXPRESSION': 0a ÅNO_AS_NEEDEDN lOBJECTv ö OPENSSL_INCLUDEb  *LDz  (IB- Th ñ-DNDEBUG -g -fwrapv -O3 -Wall¸ ñOTHER_LIBTOOL_OP7  ðPACKAGE_BUGREPOR Í  DNAMEá  lSTRING ?TAR- <URL* 8VER8ÑPARSER_HEADERÞ œ ²Q \\ P0/my=0lin¬ Àparsetok.o '+
  ÷'Parser/tokenizer.o',
 'PEGEN_HEADERS': '\\ 9OBJ €GO_PROF_4 @FLAG1 /  JUSE_ �LATLIBDIR- 2lib0 Z ñOSIX_SEMAPHORES_NOT_ENABLED': 0« °ROFILE_TASKL Ã-m test --pgÍ ñTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT': 1N , ÷SYSTEM_SCHED_SUPPORTt PURIFYn · ˆY3LIBRAR ðLONG_BITS_IN_DIGId 3³ PYTHON? cpythonE   �FRAMEWORË  2Ïno-framework' sINSTALL. " `PREFIX…  KPATH �_FOR_BUILr1'_P¼  ðòJECT_BASE=/root/repo/cÒ �/build/Pyß �-3.9.5 '~�S ôHOST_PLATFORM=$(k 	 )G ™  Á ƒ=$(shellAf py� ÿ dir.txt && echoJ Ï _/`catC 
r �`:)./Lib/ ë ÿSYSCONFIGDATA_NAME=_sysconfigdata__emscripten_O „73.9ÚÍËtYî±TIN_HASHLIB Eò�"md5,sha1 0256 0512 “3,blake2"u F €MODULE_C E ÿ-Wno-unused-result -Wsign-compareÙ 0ÿ%   '-Wunreachable-code -DNDEBUG -g -fwrapv -O3 -WallQ "O29 ÿPIC -std=c99 -Wextra ±  Í¢ ä  paª?ter‡  ðmissing-field-initialœs@ ÿstrict-prototype4 ðerror=implicit-function-declara z ðfvisibility=hidden  -I./Include/internal N 9 , °°sqlite-autoC�-3270200S )¿bzip2-1.0.2G )¿zlib-1.2.11G 1DPyMaD_CORE 4TINgXÀign-compare ù-Wunreachable-code -DNDEBUG '
  ñ'-g -fwrapv -O3 -Wall -O2  ý0PIC',
 'PY_CFLAGS_NODIST': '-std=c99 -Wextra -Wno-unused-resulto | '+ ’parameterA ÿmissing-field-initializersN ÿstrict-prototype, 	ðerror=implicit-function-declara j õfvisibility=hidden  -I./Include/internal6ôOERCE_C_LOCALE': 1P3OREUN=ÿ -Wsign-compare × Î_'íÃÜ	 ÄJ ÚÂG ?no-Ø/-WÀ?'-W¾-¦› ¼  Ñ  Õÿ$'-I/root/repo/cpython/build/sqlite-autoconf-3270200I ¿bzip2-1.0.2= özlib-1.2.11 -DPy_BUILD_COREŸQRE_LDÛ † %PP ?-I.3F 	: 	Ý ÁFORMAT_SIZE_Ê4"z"   ú- ÷SSL_DEFAULT_CIPHERSá ³_STRING': 0�STDMODUL
C<O 2L 4O 	A 9ß ‘I W' C3à     '-I/root/ÿrepo/cpython/build/bzip2-1.0.2 '
  Ÿ'-I/root/B  ózlib-1.2.11',
 'Py_DEBUG': 0 ×ENABLE_SHARED çHASH_ALGORITHM ¤TRACE_REFS ÀQUICKTESTOPT ò'-x test_subprocess "io ¡lib2to3 \\– ó READELF': 'true pSSRCDIR óMac/Resources/framework) €TSIGTYPE* Bvoid %UNÓ ' cSCRIPTR 2 ’installs/„¢-3.9.5/lib> åETPGRP_HAVE_ARBpSGI_ABI| @ @1 @HELL s/bin/sh 2LIB#†ldl  -lm p_SUFFIX4 3.so ÔM_NEEDS_LIBRTqðSIGNED_RIGHT_SHIFT_ZERO_FILL^ Ü€SITEPATHP M °IZEOF_DOUBL-8S @FLOA_ 4 @POS_ '16  IN ( 0LON i 	@  . _ 8': ‚ 1OFFm  1PID [ 0PTH0O_KEY ¢ 1SHO=2È  ù A MTIME }UINTPTR ˜VOID_P': Ÿ NWCHA+ @_BOO1� O1î2-39 àQLITEMODULENAM£' _ Ã=\'"sqlite"\Ò! ñ‚'Parser  ñ/pegen Objects PT„ Modules Ò/_io Programs€ ±RC_GDB_HOOKU °./Tools/gdb2.py. PTDC_HºR- Ú ðTRICT_SYSV_CURSE ñ"/* Don't use ncurses extensions */"pTRIPFLAL#'-“ AUBDI` ò  0TOOÖòInclude Lib Misc˜ &YSdm À_SELECT_WITH  _ê1': · ÁTCLTK_INCLUD³ m  M J å 	e " `PYTHON¢ .M,  ( QRUNNEë2  }Àscripts/run_Us� j  Æ  OUï1120ö  54LIB1  ü HM_INF ZÕ ñ/usr/share/zoneinfo: ;lib & 
 5etc& î °UNICODE_DEP'ÀUNIVERSALSDK9, PPDATEÖ€=3.9´update_fileðUSE_COMPUTED_GOTOn Ü  h IŸ"3.z°WINDOW_HAS_�+ .ðDECIMAL_CONTEXTVA¨8 �OC_STRING7  (�+ %YLb ÀLIBINTL': 0,ô
 'WITH_NEXT_FRAMEWORK': 0, ‰PYMALLOC „VALGRIND õX87_DOUBLE_ROUNDING ñMLLIBSUBDIRS': 'xml xml/dom Qetree
 qparsers @sax'„ Àabs_builddir> ñ/root/repo/cpython/ !/P e-3.9.5: ?src8 @datae 9 ’installs/� t a/sharez ¿exec_prefix³ B < 7 $é ó-.'}
This directory exists so that 3rd party packages can be — ñed
here.  Read the source for site.py ò	more details.
"""A pure �ð implementation of óort."""
__all__ = ['__import__', ' amodule ðnvalidate_caches ÿreload']

# Bootstrap help # ! H tUntil bN  ping is coÉ £te, DO NOTÇ R any ¦ s[Äattempt
# to% Î Ulib._Y " (ž„ly or in ñ ). Since this
#§ðially initialise½·` would¸ó present in sys.“ •, those
#¤ 1 ˜get an unT @copy¡í�version,Pead
#! La fu‘ * � (either2 frozen oneã  W  onŒ u Œbelow if1 òis not available).
F (�  # Just6  ý1tin£aonent,¡ p  ¨ ŠF Ôsys

try:
   ¨_²  b ¦ortlib as ³‘
except I©RError? efrom .F ä\ @ Á._setup(sys,Ç b)
elseD #? &iW!e ä 3-in% P, ensfñ we don't createq ¸# a second Ó .# ” Q_name…v
‚ '1 44 ) S W	g 2filg "__ À.replace('__P__.py×7 Apy')� {GNamey e $# Q  ¨ 5 guaranteed„bŸ²fined, e.g.mÓqde getsa K ò
 by a tool like cx_Freeze> + 2pas8 n[A8] =Evš_external ˆ:  » à_bootstrap_extöernal._setup(_bootstrap)
     . A_ext6 ' =!  k
else:?  ÿ.__name__ = 'importlib^ 'C lpackagF 2 2try~ 
Á ‚ 2fil< "__ ÿ
.replace('__init__.py', 'ö    öexcept NameErrorw $# Z ñ) is not guaranteed to be defined, e.g. if this code getsý  Â õ# frozen by a tool like cx_Freeze.+ 2pas8 Ïsys.modules[e]Åò 
# To simplify ª‘s in test¨  
_‡_uint32G .# O
_un2 	% ¥

# Fully šbped at/cpoint,ž Ñ whatever you%ò<, circular
# dependencies and startup overhead minimisation permitting :)

s types
 �warnings
¦ ÏPublic API # %w

from Û "__t ò__


def invalidate_caches()¿"""Call the% ° method on & ñmeta path finders stored inWJAeta_$ `(where” Ñlemented)."""* 3forD  %	8 ™  Í²if hasattr(p =, 'Ê 'Ê  1   * .( #() ! €_loader(],Ò S=NoneK ‘"""Return+  ²  &¢specified 4!.
Ñ T�ñis a backward-compatible wrapper aroundú _I (()? AfuncN is€Qrecat]� favor ofMQutil.Ì 	I an.	 T('DepO òsince Python 3.4. 
 = 1'Us»n ± instead.',ÿ 9  
 n BionWö,@’cklevel=2	{f!= Ž Ÿ3]._®%__k 3if 1 0is º5 € ¢raise ValukG('{}G  f 5 �'.format)•  ? “    rt † Î;KeyÍW" ‚AttributŠ ¨ ¤  
;set§  âmõ z ÿ	P&._ Báß ð# We won't worry about mal0ed N ps (missÍðattributes).
   ó if spec is None:
  areturn  ) ~.loader0   þsubmodule_search_locations4  k ñraise ImportError('‘ ò for {} missing w ñ '.format(name),™  E   % = )) n   ! óspace packages do not havey /s'm 	 C i ; Ç /�


def iæ _ Ä ,u =~)2"""2 a , !.
Â SThe '¦  ' argumentXðrequired when per( 8£a relative~ A. ItM  Ÿ …ifies thü ’ to use a ðanchor point from which& presolve= O g  # ¥an absolut} È 1"""4 ‘level = 0 0if Ió .startswith('.' â ! $ot2,    €msg = ("Ì #$to! ’  K  "² �F!r}"J & NBTypeº9msg¡.  A pcharact=nê 
Â 6if " j!= '.'!  r Qbreak.    DA+= 1 |ò_bootstrap._gcd_È s[2 %:]{!,  ó)


_RELOADING = {}· re~(‹�A"""R  ¦S and � 'it´: C musUóbeen successfully�“ed before= )úH !orŸ£isinstance› ‘, types.M€ —­  (¬"Ö )H  %bevî6try‰ ¢# =ñ 0.__F0__. €ò except Attribut?  8 "__ B2ys.å Cs.geç à � L ó"  , % Fin sE Õÿ W­,”Ç uvame in  é [Í ] 2 	Qpparent_< ! =ƒ p.rparti4"[0U  Æ7if 1 �   	W     . ( =[ t [  . ¾1Key$
`  ! tA R {!r}‹v 3   ~
M Ž Ó M  +=5 š A_ $   7elsÐ    àpkgpath = pareÓnt.__path__
  Uelse:   0pkg$ u = None ætarget = modul Espec 0.__ ñ__ = _bootstrap._find s(name, d ", V )f 0if A 1 is~ 
š qraise M€ ñNotFoundError(f"6 Pnot f ƒ for the­   {w `!r}", 
 = u ª Pexec(M ,< ' 6# TR òmay have replaced itself in sys.&%s!Ú Yretur [† ]! vfinallyï 'tr  –çdel _RELOADING;   ¡except KeyG   ðpass
"""Core implementation of £ort.

Thisô óOT meant to be directly1 ðed! It has been designed such
that it can< 
p(Ñnto Python as¦– @ As
Q  L srequire2 DnjecÃ  ¯Cific¾ ðs and attributes“ñorder to
work. One should usdortlib‘ ópublic-facing vers.t% .
Vð
#
# IMPORTANT: Whenever mak< Pchangµ 'o < ,@sure]òrun a top-level
# `make regen-impœ Ò` followed by# `Û  Ÿ ôdfrozen¶  
#æ  “ð updated. Not do¥ àso will resultU  0 qMakefil¤ @failUð
# all others who don'ƒve a ./pÙr‡‘to freezeç� $
#a �early sta!‘of compilš—.
#

# Se��._setup()‰ ! wc Ý 
X ¸ aglobalé`space.J  ˜P editð Š@code‡0awaˆ O   0uteBìñ time CANNOT
# reference any iŠPed ob‰ 1s! I�includes ”Sonly — d €but alsoO@nyth• Æy  È aclass Ã BP@-relÃ L # "&

ö”_externalôò
def _wrap(new, old)UA"""S®± substitute�¢functools.`> rper."""ã$or,  B['__€__', '__ Hqual rdoc__']„  Õ if{ äT(old,Z ¦  "   1set# Å ©,( 	9 çÃnew.__dict__É  `  2)

3new¿ Òx rä’type(sys) 
€¶âA locº"!## A § P mapp>Lõ Uðweakrefs of _ModuleLð8ock instances
# Dictionary protected by the global import lock
_module_ ñs = {}
# A dict mapping thread ids to _M2 )Loy  _bB bing_onG Ð

class _Dead ÑError(Runtime Å):
    pass
/ _  á"""A recursive¶  Â plementaì à which is able¤  deù # dz sg T(e.g.Í Q1 tryÝ Ro takX 0s A(„n B, and, 2, I 0 B0 1A). A"""
	 ódef __init__(self, nameñ  õ   .B = _b‚.allocatŽ!()J , owakeup.  n ! =u 
G Êowner = None šcount = 0 `waiter0Ü Dhas_^à Ú $# ò` avoidšð	 for concurrent circularÊBorts? ì 'meã —get_identatid = ?Ì ® e{(se. ¢while TrueN c   z·†.get(tidx ) #ifss3
F  ! ¶return FalsQ  ©  i .©   1if   ;= mš   T  · ß   6 ~in seenŒ À# bpo 38091:š� chain om �'s we enèjer her±  b ò# eventually leaôùa fixpoint or a cycle, butŸ A ñdoes not reach 'me'.  This mean† Pwould% @  #ac a> ÿcan happen if other?  L�s are at`beginnîöof acquire() belowz ¾   }Ñ tB.add%{  èQ  “  O   At � m?Uõ.  If a potential² ÍÅ1ed,j  G aM & fraisedÆ OQwise,n   ' dalwaysý dß _  ñ E ¼ §£’üS[tid] ¸ :try¬– å Bwithß ¼ 
8      "if" ËP == 0˜ �k  ?tid=  A +  ‰«    ) g O+= 1( Di$ ² 	9.t   ×ï#('Àk detected bÿ y %r' % self)
   !if ÿ.wakeup.acquire(False):3  F  Q Ý.waiters += 1* ý# Wait for a release() call, N 	‚ ¯ & Q L zfinally³ ñdel _blocking_on[tid]
4 5def—  Z í ö	tid = _thread.get_ident(“ Bwith8 \ 
t RÊowner != tid"  Aôraise RuntimeError('cannot– C un-� d g '€  B bassert† ‘count > 0Û      × . -£¦  N== 0¤ @ Ç i= None^  b F 
C  % G "  ‰  "   & Þr  «�__repr__(( ¬ñreturn '_ModuleLock({!r}) at {}'.format7 ‘.name, id ö))


class _DummyB È Ç"""A simple _ ¢ equivalenÞàPython builds 1out¸ bmulti-Gö ing support."""„c__initÙ  , £ ß  î · ! = X /½& 0O 2â È / 	®?FTrueD  } Œ ív 3Ó+ m ­ê ú½ÿ ú†Manager: _µ¡_¸ =Ò OenteÍ 4 _ymÖ Ó.l 	2 »)¼ 'ex\°*args, **kw
 ÛG ý À# The followÁðtwo functions ar �r consump B by 1/imìAc.

ÆÎ  4‚ ò"""Get or create the ú ùETgiven  ? .ê A´/º   i]I rglobal � P ’to protec¨_l fsž5_im 'trf	  jò	T [® ]?  % ¡except Keyû¨  B q4  "if» !isŠ
2 $if®ð  is None:
       ölock = _DummyModuleLock(name)
( y  else:   @ ; 	* Àdef cb(ref, Z = )N Ð_imp.acquire_[ („  r >try9   ð$# bpo-31070: Check if another thread created a new c 	©  H   Q# aft6 ¡e previous. ï was destroyed< ðbut before the weakrqallbackD called.B Qif _mŒRs.get’ is ref ¹ :del< [k]g ofinallJ‡ereleas‡	B 	ž b  Eé P.ref([B, cbÁo c areturnl0


90_unR y B"""A2sn#n ¹   GO Ä for a given  !.
Ü @This_ôused to ensure a+ ðis completely initialized, inz F €event itJ °being impors+by�ý1""":  ß  E3getæ ù ë " 	ú / +&Àexcept _Dead RError% �# Concurr¢ ƒcircularŸ ¡, we'll acC Pa parà 
ê † K XbobjectÉ   Apass& 
. Ž .˜ð()

# Frame stripp&magic #  Jp_with_fU ós_removed(f, *args, **kwdsq2""""  „cortlib:  É¯P.c wi@lways R ’ sequenceã #of=Blib {   that end � 0 a œ  Mt]‚functionp1Use(0nst™ of”Rormal6 ðin places where includ, T§ 1libn~ pintrodu4 Punwanv0noii 0nto¤a trace…P(e.g.\ ±n executingM Û3cod¢›*f(V§óverbose_message( …  Vity=1ŠQPrintš /  .`stderr¾ð-v/PYTHONVERBOSEW  ded on.™ Òif sys.flags.g Re >=  'itçsif not m p.starts­‚(('#', 'Y3 ')¤  Ö  2 ” = '# ' +C 3 ! pÊ õ  .fÊt*€), file=¤ Û )4!reìÓs_builtin(fxny À"""Decoratoraverify+ ¶d˜= &-i7
\ Àin_wrapper(sóelf, fullname):
  %if ð not in sys.builtin_module_5 s5  < ñraise ImportError('{!r} isH !a C B-in D •'.format(… ,…  P   u =. - Êreturn fxn(sÖ # ñ_wrap(_requires_‡ !in @per,9 )* I + v


def   £frozen(fxnAð"""Decorator to verify the ½ dû  < A."""| Y £ × x!if\‚_imp.is_T Q)  M¡? ¤ Ÿe… û ž	
* ñ0


# Typically used by loader classes as a method replacement.
€ - âOshimyq"""LoadÖ†specifieÚ1nto1å@s anj ¢Ait.
íDThis† óis deprecated.  Useµ S.exec� ƒ insteadA 6  0 =   ý m_Â %er , ÞÙÕ¤ '  R 2ys. $s[r]¼  J_š (v ,.c   E 4A Felser / ¹ R )ÈMfØ Ïifications # #¶Ž b_repr( µ¡# The implm B of … aType._7 Q__().g” = getattQ A, '_Ê ²er__', Noneaif has+ < 2, '… Z '‹  A�# As soon­BwV ­Fs  _�Namespace—!er¢ J @drop¨+irà Ss for¼‚ è. we can add aC �òion warning here	 g 6tryÐ  Ôé Ge x_ �except E :ionH Apass+ 	b  w# =¼ 0.__ !__( O ‘Attribute‡T P 
ƒ!ifi • ñ µ4 Ð ‹Ê n { µ )  # We could€£ ~A__._8$__Î f'i1theÈ �# various¤�r permut˜sw	 Z  ÀeError:
    ð     name = '?'
 Atry:	   Cfile  �module.__ !__# öexcept AttributeError> öif loader is None  ] ’return '<[ ð  {!r}>'.format(w )f  , ?els>   (D )E ,… M 
I ƒ _ from�   , ú — ‘

class MBSpecÛ ò"""The specification for a å a, used  Qing.
å A! !'s>  2tJ Qource0 "in S `about ! W a.  ForI ÷data associated with* Ñ, including s] “ "  · !'sF  � #erœ `õ `“ ‚absolute9!of; ‡ `: .  T  toý Q when“ ƒ 	Ã u`parent<  w  a A wpackageq  ” Pin.  v>   Pderivg Ê c  J Í 3is_I è` determines iÉ  E Óconsidered a 2  eƒnot.  Onµ`s this5 `reflecx!by¨ Ä`__path__` a'Š eoriginï   63 lo:,I I��which to  k „,Ê 8at 1ðis available.  W„Ï" iôRset, ” ´ will match­ Dhas_™ P` indßeú Aat aµB's "@ #" 	5s aÏ .¯ { /tTrue, `U$øa [4setŒ ecached9— 4  ‘ bytecode¸�any.  It‰ ácorresponds toB2`__< ¯2subcu_searchsŠ €sequenceŠ  ÷` entri&¬9 `importY sž !f ‰§¡ should be¸  4ó--and False otherwiseP&Ãs are simplyF­¼(may) have z Èg  ha¼@non-ºµ value in `4 ,FÙ E bsystemNP�  ¹¥  4 aslsÐ òOnly finders (see a ñlib.abc.MetaPathF# A and{ 
%  ! REntry& )TgmodifyÈ” instance 2"""¢ñdef __init__(self,_4, *>=2 b_state ™  Ï æ" )G   b .¸! =h <  <1r =Ieú6 „# =Í: Àoader_state ó= loader_state
  õ.self.submodule_search_locations = [] if is_package else None
F t# file-7 µ attributes# i P_set_+  ! { = FalsŒ —_cached =c Ðdef __repr__(I %):X 1arg¦ ñ'name={!r}'.format* . %),/ ÷ " '1   %)]3 0if t á.origin is notž †  W  Š ’.append('- _   -))_ …s A E={}'p  «  	.D ² êreturn '{}({})oÀ__class__.__{à__, ', '.join(#"))8Õ#eqÓw, otherÚbsmsl =|˜ Ø :try�§ 2 ==e E and= í2  4 
Û4  4 à “ â © /H  u  ð5hasã¯  Ÿ„except AÒ_ErroriâNotImplementedå‘@propertyj ó  •ìdþ/isa % X #)	b
§  äðif _bootstrap_externalÔ Ñ0  4 1raiñÞ Ô  "  :Ã =j S._get" Vp¶K K:q.setter| P", # XG # =  P ›Rparen7C p"""The Í‚ of the -2's 2 A."""�  ¥ÐÝø  l p.rparti†v('.')[0’ ‚
¬> ã ä€é D 	GM < † X w, value_ ‹Rbool(* 0


Ð¢spec_from_s(,½R, *, ÿ=±,˜ p ð"""Return a module ò)spec based on various loader methods."""
    if hasattr(" ñ, 'get_filename'):( , ö_bootstrap_external is None(  , õ
raise NotImplementedErrorN  § Q_froml Ï_location = e  .. 
O ßif is_package” oeturn K (ï ,(=)_ °search = []4k !elé %ne, rh ,<  < ¢submodule_‘ 7"s= )öÓ ô Œ :tryÝ  / # =5. M> 1 Ñexcept ImportU  Uõ  # aka, undefined* x
B Õ# the default(  | ™ ‚ = False'ªMSASpec¸ ’, origin= ,a=R –)


def _X£( N =Ð S   [±# This funcñis meant for use in _setup().× 	‘ w 2 = m "._‡ _( s›AttributevBpass( 'ls¿!if# D?notÜàG :ƒ   _ƒ #if O  õ ³	Æ  ¦tI  K  # Ò  # #q ‘will stayÃ : !   û 	… „O 	� } >  é Z#ifDÿ ôC	›  µ   ‹sq_ORIGINm      ¨  #   K ®   W( á m 	ž hcachedº 9, ! =¨] ô 3isti’.__path__xV 
Š ^"y  3 .±Ù [u :E qB Tru@= 	 ‰ .µ Às = submodulð-e_search_locations
    return spec


def _init_module_attrs( ",  ñ, *, override=False):K ó # The passed-in0 ð may be not support V óibute assignment,D öin which case we simply don't set theB #s.8 �__name__ Dif (¤ p or gett (Ã '. ²', None) is	 Ë  6try   = .; ! =6.w u  $ ±except Attrá ZErrorG  !0 ¦# __loader¶ µ / · b " œ  n  ž 2if  ï 8   ò# A backward compatibility hackj )   "ifÿ 2sub` e  ö a
i @ ð_bootstrap_external4 0  4 àraise NotImple6!edbâ  &   ±_NamespaceLb? = n  .' 
I 0,= +  \ew__( )D d._pathš7?  ~.ˆ 	 % q# WhileÓdocs say that‡�.__file__b – J?forI  VbuiltÁas, andY ðcode below will avoid”¯ting it ifP  À 5hasz ƒ f9`, this àincorrect for S½N  µpackages.  ä  @ havk åA, bu2iê  __œ �__.origin‰  }ñ  usö ,irC–  °should alsoí F Ê Óconsistency. £¡a bit of aWù µ # ëðbest place to ensurç8is ] ”  ð  See # https://'ð	.python.org/3/library/im§–lib.html# Babc.Q‘&j   2�bpo-32305  1“=|' zýC__ =É4 y2z0 {· = þoparent½ &¶? 	u X! Ð = spec
    eóxcept AttributeError:
  Apass ¡# __path__ ôif override or getattr(module, '- ±', None) is	 Z ²if spec.sub6 ð_search_locations4 ;not8  ™ 6tryI     F .z / =` É  :   e #   	ö file__/__cachedÙ 5hasÌ ® 9V 9 ‡ B ooriginí &9 º ¼ ù. åè   íF $__î  µ  ,   ß + ãrreturn k c


def `_from_æ( )ß³"""Create a( ò based on the provided˜1"""¦ ð
# Typically loaders will û±implement cZ _� 1().<  ! =# aif hasŒ š .R 9, '@ '²  ï L# If^  û 0s `½`¾ ñn it means defaultp B ˆ d òion should be used¬  * ( šœ .6 eÚ  ¶ )[ /elÍ Cexec1 Ë Áraise ImportÈ"('d `s that¹ Gine > A() 'm  ž  ¤'must also< 
­ ")'« i Î 3 Q ó C_new´ 5R.name? S_init _¼s" ,F% “ Ž4 Orepr”RÇ ‚ ( 0 to–@ forØQ .�ðWe mostly replicÑi �() using>  ¯ ³ =së Ú t = '?' í R else  €( ­G  Ð   k"#'<tà{!r}>'.format(k J ,  ƒ ¥  >   (D )E ,» Š R 
N ¬ l  T p o o  C 
s   Á }¿  ®ð.name, spec.origðin)


# Used by importlib.reload() and _ ò_module_shim().
def _exec(spec,  ð):
    """Execute the " !'s Sified- ó  in an existing ñ's namespace."""Q   ! =B .  qwith _M˜ ÀLockManager(! ‰  � �if sys.m( Rs.get" s is notw ¹  0   rmsg = '4 Q {!r}+ (inK s'.formaO “  <   qraise IP¡Error(msg,Ù =Ÿ . :try{  ¯ @pec.u er¥ JNone$  c ( 2sub§ ÿ_search_locations<  @ £ P'miss‰{ '°  ¾u)µ  @   4# N«� package.% T_init?Yattrs3ú , override=Truee ?elsû  R ) · !ifÎ0has� Ž o0, 'Ô® 'F 8  ò# (issue19713) Once Builtinó!er9ýExtensionFileLoader T w# have z  ()�òlemented, we can add a depreäO @warnÉ?her‘  s Õèû ò V ‡H À “Íkfinallëc# Upda%àorder of inserÁX intoqC for¯	£ ú# clean-up at shutdownŠ‘  D2popþ
”Ù ' [- # 8] =€ dreturn 
 Uñ_backward_compatiblei QA-1,.# !	ˆñ  É )er  	Ùfexcept›“ "  Ýw%  ]�A X ÔS# Theš‹ must be“  ,³this point!7 ¡Move it to»0end”Ê WÂ 9 Gaif get‹W A, '_uper__', )Î	³ ÿ > .<  ïLâ À    except A÷ttributeError:
  Apass ñif getattr(module, '__package__', None) is	 F 6try  Z ‚# Since G .E ñ
th__ may not line up with{  5   ¢# spec.sub; û_search_paths, we can't necessarily relyE "onH Éparent here.# ^ ™ Þ & =® iname__1 !if¹ >has  Û *') Í e à  a õ.rpartition('.')[0]r �except A¶' g ³­ : ! =B’ "creturnOð

def _load_unlocked(d 1ò# A helper for direct use by the import systemÆ!if� .U  er� U �…€# Not a kcspace ÉC   Ô • S ‚, 'exec_Üà Ô òbackward_compatibleß 
<B ]`_from_j % ñ# This must be done before putting
L  in. ºð	# (otherwise an optimiza]Ã shortcut inM”.c become> bwrong) � °._initializ} a= TrueÐ 	ë4sys‡ [7  m]í 1  i	5   Á
½ $   ( 1locÝ sý<  @  raIBú`('missÔ <!',!=¾ )µ  @    ¡ Ø 	E` so doBhing9 -   Felseˆ    b u .\jw û
@ @ Q 8del�	Ã P A Key
Y  H ÿ    5D h# Move€!to hend ofƒ 1# WÇ€'t ensur@ !at7 Ïƒ-related% U sƒ} !se¸ 	n� replacemÞ³case.  SuchO ‡s are onH –their own¥ A éÇA.popš.ó–| iê _verbose_mŸBge('ð q {!r} # "',¾ b  o vfinally©:‘RFalsec�Ï  

°ðmethod used duringó testing of _load_unlocked() and by
# ómodule_shim().
de3 ò(spec):
    """Return a new 4 � object, b eU P the 8 "'s 1r.
A 4The5 óis not added to its parent, GIf a- ò already in sys.{ ²s, that exié mÆ Q getsq “clobberedU 1""" qwith _M. ±LockManagerí S.nameò  ö ró A ß ÿ )


# Loaders # 1ò	

class BuiltinImporter:@á"""Meta path i ` for b. 3-in0sî òAll methods are either b •or static# �to avoid¿!ne˜.±instantiate A d  R% ´_ORIGIN = "� "¶ @h Š ,  ^«b_repr( tj   ä  T( z  œQâ ð is deprecated.   #ámachinery doesÃ 0jobs7elfN  Ì  V   ö2f'<u " { 0.__ ‹__!r} ({¨.C})>'ý -ü Pfind_B (cls, fullU ,ÙÑ=None, target !if$  î  ? + œ ´   ¸   k  ±if _imp.is_›4in(s [  * >  › Q_fromõ%er/ !, ± ¤origin=clsñ )m Oelse“ ' @d® b"""Fin¬Õ ÿÒ@If '-'1Aever—0ifiÝ1hen`search" `consid0§ a failureN CThis. . 	oFUse × ) 4$eax \^ a  =M.5 ”R•.dAr ifÉ  †  y øescreate_gQself,I 
YC& , aXÂ ‚ -Ê™Œ#inc ,sRaise Ú€Error('{Mv ‡'.format�,â  U  M=dŸ J`_call_ñ_frames_removed('%Ê !ÎCexecð (S`
UOExecS— g • c — Àd
    @_requñires_builtin
    def get_code(cls, fullname):!  % ñ"""Return None as C ð	-in modules do not have L Å objects."""H rE 
 Â@classmethod __requ¦ _sourc¨ 6N ¯ § 7Ÿis_packag§ OFalsP£are never N J@ KRload_Ž7 = X'(_ ‘_shim)


! ò FrozenImporter:J á"""Meta path i a for f- ò.- BAll À s ´ beither€ ¥ or static# °to avoid thà Qed toù±instantiate   d  C% ²_ORIGIN = "� "… @f ˆ *  ×_repr(mÎ  Û  Ž / s  ö3The¸ ð is deprecated.   ámachinery does¼ §job itselfN  Å  V   "'<t ð	 {!r} ({})>'.format(m.__†;__,¦.)ü *û šfind_specÓ,Ô=Å�, target ²if _imp.is_c( Ä  e  * mf%er/ !, N¦origin=cls¸  ?   Felsee   ¡ Þ ;à Ó š"""Find aÂœOThisëFUse O ) ©7ead> Ú Ocls J ú Læ ccreateÓè  m
Ù  ž °default semB!csÓ  F 1ioná-Dexecl ; i  ‰# =ú!._Z0__. S  »!if= # I  ) braise tqError(' !isA ¦J ,o  J   % = )) �ñ= _call_with_frames_removed(²  ð_¹*, G   (L ,odict__ˆ	zÂM o"""LoaŸ) œ ¼¡ À """
       ò+ return _load_module_shim(cls, fullname)

    @classmethod ñ_requires_frozen Ëdef get_codeH :!  L B"""R| @the + À object for  R  • E."""< µ @imp.i * _@ (µ +_sourc· ‚None as } § âs do not have L Ý À  B YŸis_packag¤ ~True ifOc is a I œ _\i×s \ÿ
# Import itself # +!

^" _V ÂLockContext:%3""" … manager+i‰ AlockÍ * ‡ __enter__(£ )!Ac»A  ¢  a) __ (] 3xit\ ¢, exc_type
 Cvalu štraceback€ |Release€ ð
 regardless of any raiseda qeptionså      ¤ rM ¤ 
¡ €resolve_Ä( ,ôs, level’ �+ ³ a relativeÓ 8 õ to an absolute one„ dbits =Y ³.rsplit('.'d Q - 1)’pif len(1 2) <‚ “æ TöError('attempted• ª±beyond top-É  'j bY = j 1[0]} 5ð '{}.{}'.format() ,ã ))ì Pelse  "

Gðfind_spec_legacy( "er8  S#thIñ# This would be a good place®�a DeprecaÈ¡Warning if¢ ð# we ended up go ±that route.$  ¨Rer = ƒ . ¸á"th oPoaderî ml{  W ä Afrom#erS u ) Ðpath, target=S “"""Find aJ0's a 9Pmeta_= u = sys. “ 5if  Á B# Py) _Cleanup()& 1runSòor has been called@ 1i"  H  Ç €, Python vlikely „ I 
 `"shuttµSdown")!ifË „"_wÿ s.	 -('„  û3y',-W ¢# We check;ºRs herh A re¹À case.  Whil‘Ðpassed-in
   ð2 # target will usually indicate a reload there is no guarantee, w ñas
    # sys.modules provides one.  3is_M ˜= name in2 $  for finder ¡meta_path:  e ö
with _ImportLockContext()#  ' :try    Y s_spec =e . a  ) þexcept AttributeErrorP K _E €_legacy( 1er,æ  , Á )`  d 1if @ ~is None^  % ‰continue> ?els/  M Ø ä (c} ,ä… } ?not�  á# The parent inó may have already e2is ùë ¼   0if ` ú1and Þ.þ N ( ="[Ó ] e ì  _	D__ =�  D ò V €# We useb foundÉ@sinc  at'0theú] thatn G ‚we wouldUqused ifV x_hadn'E Âbeaten us to< Junch† o   areturn® “ U 6 4if 7 Ù ­ - c 	   g   > o 	¥ : 2  ý. 
&   ³ õ


def _sanity_check#Ãckage, levelIñ"""Verify arguments are "sane"."""p áƒinstanceT 3strI Ø ‚aise TypJ#('Ú Ð° must be st2òot {}'.format(typR "))½"if¦ F < 05r` DValua Ë [ [>= 0'A >A Ç #pa
Ê Î #__. !__ï0setŽaÓ 3ingz  ; #elj 1 Ã   Ç Üs°('attemptedˆSativev 	„no knownª'• L  'x “ � ‡ š6(==• \SEmptyRÍø')


_ERR_MSG_PREFIX = 'No& 5d '% < = 0 ƒ+ '{!r}'¨ CP_and_~“_unlocked^‘_b `! =Åÿ >eð.rpartition('.')[0]
    if pareSnt:
  öif parent not in sys.modules&  - ó_call_with_frames_removed(import_,J )] õ# Crazy side-effects! if nameu 
Yretur• [4 ]E ½ _² ( =¿ [ , :tryÓ cpath =· D 0.__ %__c úexcept AttributeErrorI ñmsg = (_ERR_MSG + '; {!r} isYða package').format(È 3 jqraise M…�NotFoundu Q(msg,5=> ±) from None­ Ðspec = _find_ d "th•0if   –  6 Å s Ô · )… { FelseN Žð _load_unlocked(| ‰ ž5 £# Set the ? tas an aws on its®.w  .H ¾qchild =Cÿ.rpartition('.')[2*0set‰ (m !, P ,± Ú  “ 2Pf"Cany=setí {m  F2forl k ! {z E!r}" y  _warnings.	 /IžW ¤ Vhó


_NEEDS_LOADING = object()


defR1andÐVö)ÂÀ"""Find and õÉ2.""¦  <" _Ø±LockManagerP G  Å — 
Ê4.ge2
­ Ñ  7 $if:is % £  %   þ 'Õ ¥ Z$, Þ 
`	\ 
:pmessageÿ'5 ñ of {} halted; 'B  y  'E ú'cÙ œ| 	Žn _qÓ f hãBgcd_À *  š±=ª “, level=0§2"""WðP »Tbased±Q   N1 is‘ ¡being madeÒ,V  1 v Â adjustment.��This func½± representsY ðgreatest common denominatorš7 Sality~ Ttweenóƒ _A__. t Ðincludes sett´  -'Q__ ifO ¸ �oader didþ¶ Ú_sanity_checkmhü"ifvF > 0Â N å€resolve_ E œÐ_find_and_loaô%d(name, _gcd_import)


def _handle_fromlist(module,  ", 1 ó!_, *, recursive=False):
    """Figure out what _h ñ__ should return.
2 4TheX ð parameter is a callable which takes the Ä B of ¢ 1 toJ ž @. It? ñrequired to decouple= �functionØ “ assuming„ Wlib'sN   qlementa4 `is desX ¿ 1"""/  # É `hell tö !is`  IC ...$ ðIf a package was_  orted, try« Å a stuffB   G D rfor x i¾   x |Pif noü ó instance(x, str› #   &if¼=     swhere =[0.__lñ __ + '.__all__'Í  -   OelseG 0"``? ª "''+ 6   ðraise TypeError(f"ItemÜ {† �} must beÅ *, =  A   f"ü …{type(x)¸ 5}")® Úelif x == '*'³ ;ÔÅ and hasattr' Q ‡ =£;C–  >  � [=TrueÇ  í   x˜  y¿ô = '{}.{}'.formaÛ&6, x`  � :try!  _�p_with_f¨¢s_removed(µ_+s 
O �except MQ�NotFoundõ~ as excm ý$# Backwards-compatibility dictates we ignore failedS#_€s trigge%byQ L  W�at don'tG  Rexist€ 	 €if (exc.# Wq.anŽ  6 Qsys.mes.get(2 ð, _NEEDS_LOADING)Ã å4Non\ A  �continue± Y jÍèscalc___‡£__(globals?°"""CalculatzÂ, Ã#be H ³ ‚guarante|ñ be defined or c Ó etï ß ª Ãto representBð ts proper value_ dunknow;|ž 3 = Ê \'› '�Nspec&   #__# %if !isP £  0if 0  � Ÿ-„ !!=  v.parent8  ¹ _warnings.	 '("¡ ` != __Z #__< ñCf"({t 0!r}? {> < a!r})",Yà                ôImportWarning, stacklevel=3)
% áreturn package ñelif spec is not None:  6 2  ! q.parent 7els% "_ww  s.	 ô ("can't resolven € from __K ƒ__ or __‰ Q__, "X  s  ñ"falling back on __name__ andD oth__",@ ‰ Ä = globals['g %']Z @if 'µ  q '-$in1 3 À P 
 ò.rpartition('.')[0W `& ¡


def __iÎ0__(ë ,d =œƒ, locals  V’list=(), ñ"0)� 2"""ý ± a module.
Ì SThe 'é  ' argumentò	used to infer where the �  " `occurr� z O ôto handle relativ0 1s. k ± 
j qignored" F 'P  Ê (  ,ðifies what should exist as attributes ¨ mç P  be¥ ¹ °ed (e.g. ``f Ö <  z r>``).  ´  <'J !¡representsµ� Ù9¹ìEin aJ Ž 
Œ T..pkg‹ qmod`` wç �have a 'Õs' of 2)Á"""/"ifóR == 0õ ~s = _gcdLJ

½_ü4 ifr ò 8 1 {}Ê  g  €= _calc_Y4__(V r  . • ,"À3 !ifa›Ý 2# RÆ upq öàfirst dot in '3'X is¿ ácomplicated by¹2facÇ ˜ 0# t\7 f may bÉ.í k B r� m 0
òÚ  3 v Y ­ Ü   N /  |
( Ä# Figure outªbo slic³A 0's c  - \  v #;	 Òcut_off = lenE% - ä 	W S‘ �end needs³qbe posi)Áto alleviate"  ! ÷bal-cas¥ K   #é en ``'.€ ß &``© ( DBsys."s[ .Ö [:Ï  #)-î ]�¦0hash(, ,gq __¶5  ,“
Úº m qbuiltinW ð _name(name):
  ð  spec = BuiltinImporter.find_ Ò(name)
    if. �is None:   braise < °Error('no bS °-in module I Qd ' +
 S ðreturn _load_unlocked(x ñ)


def _setup(sys_mH c, _imp )… @"""S' ! iÀ clib by ¬ing needed’ Às and inject& AthemÔ ñ into the global° qspace.
  ”As sys isY 0for .¢ rs acces_  ­ * 0to ì ‹ P 7 ³, those two4ðs must be explicitly passe¸ Ž 1"""F ­  q ,Ž    ( =3  ¿ =% HØ �# Set upü  … Ù Aexis Ñ„in/froze×!s.Q mœ€_type =   ³å E  ý,Ö 0 in{ .s.items(Ë Pâif isinstance([ = c , 0  ` X ¨ Û _ s( -   ‡.erûÏ % Aelif=B.is_ø P F+erO s7e ‰continue+ != „ z mÏ À bJ S_init) a_attrsL<)çPDirecL E ŒŸÖ0dur’bootstrapêCselfc  CÈ![_k1__]É  öŠ ƒ žò('_thread', '_warnings weakref'Û"if› !inY @ notE 4syss 
†n 1 ö AfromD (  ’ <,el˜( L v [  E í  �0sets(!,Á  V ãë ll2ZåI#llÚ1ers¡� Î¤ÊEâ ûeta_path.append(3* 
÷Ü �_external‘cò>"""Ø °that requirý< ³ filesystemcá ü¬p Œ H3zenƒ :lib& _>  ES5  '._Ø²%�)
"""CoreÎð lementation of ‚1-baçÒs.

ThisØ PÀNOT meant to!dÓì ðed! It has been designed such
that it cð(an be bootstrapped into Python as the implementation of óort. As
such it require2 Dnjec- ñ0specific modules and attributes in order to
work. One should us€ dortlib‘ ópublic-facing vers˜ Cthisg ð.

"""
# IMPORTANT: Whenever mak: Pchang³ 'o : ,òsure to run a top-level
# `make regen-impš Ò` followed by# `Ù A getLdfrozen´  
#N dð updated. Not do¥ àso will resultU  0 qMakefil¤ ófail for
# all others who don't have a ./p×ProundÞ afreeze™ � !in °early
# sta!‘of compil—.
#

# Se›�._setup()‰ p what iÛ V ¸ ðglobal namespace.J  ˜P editð Š@code‡0awaˆ O  �executed ` }ñ time CANNOT
# reference any iˆPed ob‰ @s! T"óincludes not only — d €but alsoO@nyth• Äy  È aclass Ã I� sbuiltin„"s
!V _imp o &sy" uwarning ÷&marshal


_MS_WINDOWS = (sys.platform == 'win32')
if + S:
   ©0 nt;8_os ¹winreg
else- Tposix0 
W ÷path_separators = ['\\', '/']R (  " �# Assump#@made×_. Àjoin()
asserˆ l(len(sep)í 1_0sep1 0 † $)
 4 =  ¢ 5[0] ‘_tuple =  (* F ; a = ''.— + ³ òseps_with_colon = {f':{s}'­ «   }
÷Bx@-rel÷ €# "ð
_CASE_INSENSITIVE_PLATFORMS_STR_KEYË _win',- 
TBYTES/ 1cyg2 P 'dar
 ; 	_ =  (ˆ 	[ ˆ ¡ /+ H 	Ð �)


def _“_Eƒx_case()Ñ(f .p.starts«¦ 	=  š iA "oI  M 0key�`PYTHON­5OK'† +   / *b'0 1 ø ó  :   °"""True if 'pð must be checked cö2ase-insensitively and ignore environment flags are not set."""
   breturn 1ys.1 .J _J  a ³key in _os. 
I Qelse:
   ödef _relax_case()   ð"""True if filenames must be checked 9 
á ¸ QFalse| É { 1


� Ópack_uint32(x� õ"""Convert a 32-bit integer to little-endian| c Ó(int(x) & 0xF ò ).to_bytes(4, '@ $')ƒ (un… Ndataˆ !4 @  b?   � $anž � 0ass¾ Alen(P X == 4
ƒint.from—  % 	š ™ "16I °!2™ /2™ ò 
if _MS_WINDOWS� ® ±path_join(* SpartsJ]rReplaceþ`or os.+ .6 )> . !if÷  _J j     î00if o1 )u17 % 1[0]þ T goot = T  ( F = [$ ðfor new_root, tail@map(y_1 b_split!  ¿ 	 l  ß G 0.st*Qwith(0 ·sep_tuple) n _.ends% 
â  ]  | % =¨ u.rstrip] qarators^  +  <    †  ÷   a_sep +ê  % (elÄ � ;':'ë  - 0if j .<‡fold() !¡  Í  ? €# Drive º T š `s have�b ñsolved by the OS, so w  et ç Z Äabut dorQadd aa û prefix.=  Ó h$  ª  L g 
A  
ž    8 €.append(< )^ 8 �  >  	:  ` \    ® p4 pô+ Fif pÖ ƒ}ú Ý - :[0]Þà# Avoid losing£%€'s trail 2sep®` when (    ­IhingÞ r1 ö % +Å#   £ 6)

ZÕÀacement for óos.path.join()."""
  preturn  B_sep# Ô[part.rstrip( …arators); B  @for ? # iV   As if ¢])


def _W Aplitb !):X ð """Replacement M ½ s, ¾ qi = max> ‘.rfind(p)2 p| 9sep· ‚if i < 0m  º  1'',…   ¢ B[:i] Š[i + 1:]À ,ta¿ �Stat theO !.
Q sMade a Ž ðe function to make it easier €overrideÆ `experisJ Ð(e.g. cache sj ƒresults)j ÛÃ @_os.' %
{Áis_mode_type  ,  ˆ Test wheth— Ñ 1 isÝ ‘specified5  E W6try` ~ t_info =ô4Ò æexcept OSError9 Â QFalse)  (R 1.stÃ ñ  & 0o170000) ==’ 	¦Risfilå ß g- Í v ¯4 00o1y 0]1dirVq 5dirp aif not= Š @¢os.getcwd(†�  04ž  � âif _MS_WINDOWS\ ‰Xisabs±  �0 µ  - ¹   ¥ É 3ootÒ [Þ3rooOR[0].r	¢('/', '\\'õ ? ¶@len(4 ¡) > 1 and   ó°rtswith('\\: @ or * E.end Ÿ'))

else?õ  ¹Ž    g•Áwrite_atomic†b, data“f=0o666I¹Best-effortJE 8  FaD T Qally.FPBe pr ed& Phandlœ¡FileExistsˆ °pconcurrˆ [ `ing ofþI  temporary ]  at 5ted`# id() "usp pgeneratr Ñpseudo-randomE Bname¦ (ótmp = '{}.{}'.formm,W  # )#fdKAopen?Q_tmp,§  .  ’O_EXCL |  UCREAT bWRONLYxX zI 	Ö€# We fir" »v ,–µthen use osÖA) toY  ž P# perâ 3 an³6 re $  ÏP _io.«ñ IO(fd, 'wb') as?Æ + ð    file.write(dcata)
  ð_os.replace(path_tmp, 
 $ õ except OSError:8 6try  L  I eunlinkH B   F   EpassW ðraise


_code_type =  ò(_write_atomic._! ð_)


# Finder/loader utility C / #  N ðdMagic word to reject .pyc files generated by other Python versions.
# It should change for each incompatible changei €the byte· ñ.
#
# The value of CR and LF isC 2rpo† ñso if you ever read or 0F
# a¼ à in text mode q mì ðnumber will be wrong; also,& ð
# Apple MPW compiler swaps "ir¦ ð s, botching str €constantÑ ðre were a varietyÜ Àold schemes '@sett? ¢ .D € current¤k( <   to0rem  ? ‚previous£ ‚ by
# 10`AStarh @withÊ � adoption• €PEP 31475àA3.2,e`y bump A3
# C 4 ‚ Ñludes a new "$ ñ tag", i.e. a human«a/`used
#drepresÅ A c ñin __pycache__ directories.  WhenX M 8he @ , AmustáC set¨ Tuniqu- qtag.  Gëàlly this
# can"±named after8 Tmajor D ‚} 7¡, but
# itO 0reaa pbe anyt>�, as long ¡it's diffeóEthan) Q elseä a& Ñcome before. >„tags are“d³ • `follow<t�3, s1
# Ò C3.2a.RKnownGTs:
# õÊ1.5:   20121 6.1:  1 /.2 6K P50428K 4 22.0 =823  h /50  14 \602024 14  ?2:  2N <717N ‘3a0: 6201¶   l11 (!)R 4R 4R 14a3l 5 !b1 6 5N 7 í81 (ast-branch� A @91 (! 22 ({ðd WITH_CLEANUP opØ8 bÎ ‚101 (fix{º:
 x,²?...:  @: ¤x += yield7 ÀPython 2.5c1ÿ : 62121 (fix wrong lnotab with for loops and
#  ó!storing constants that should have been removed)L ÁPython 2.5c2‹ 3‹ Qcode:… �x, in ... ý listcomp/genexpM 16a0M ñ
51 (peephole optimizationÏ Ð STORE_MAP opj H  1H ð 61 (WITH_CLEANU0 L 6 7~ C71 (u  e ³  ´ `rehens„ ÿ/change LIST_APPENDL 8L PcondiÇ Ãal branches:Q¡ðintroduce POP_JUMP_IF_FALSEØ	 OTRUE‡  )F91 (M `SETUP_1 )201 ŸBUILD_SET0 10 qMAP_ADD¤ 0SET : €3000:    c3010 (wÕ UNARY_CONVER† 4Í3020 (added ² , 3, ôkeyword-only parameters² : 4: Àsignature an} Ü8 ð	50 (print becomes a func6 m ÿ60 (PEP 3115 metaclass syntax6 Q1 (stÙƒliteralsu H uni4Þ  þq ’09 raise ðÙ  å3 ñ37 make __file__P__nam {  ¦ÿkill str8 interningæ 1¥ðmerge from 2.6a0, seeó/518 53 (¢ 1poiö�o source º ; ç`3.0a4:„Q
.Ê6  b16  Ðlexical excepò� stacking!@clud† ç{EXCEPT
™ E#302Ý l !1al 4q ½ tˆKdictË~	öæF Ðd, add é]#21835“  ÎP¶ 8	M4715¥ 28 h Ò U #610h€¡   tag: cp<-32ø02a2ø7)Ó DUP_TOP_TWO,I XTÕROT_FOUR #922£ s À: cpython-320
#  üPython 3.2a3  3180 (add DELETE_DEREF #4617)2 03a12 ÿ90 (__class__ super closure changed; ÿ200 (PEP 3155 __qualname__ added #13448> 1« ðed size modulo 2**32 to the pyc headerL ?645L  “2  3220 (­  ’ ÿ	80 implementation #14230A  4A £30 (revertõ s„  C Vicit !^#1485U4Uð250 (evaluate posiƒ ð al default argu› ƒs beforeœ Ò Äkeyword-only? s #1696~ 6Z± LOAD_CLASSñ; allow locals of ö é overridˆ €free var| M7853Iú ñ70 (various tweakI ÍD>237“J  ËaremoveËˆ± >„  Í Ó} 	šUcompuO9301F 3Þ%moK #arc2 33ëJlter&	Œ N2062à5P3à Øò465: Matrix multiplicàý operator #21176Ö  5bï3éJ t48: AddšñUnpacking GeneralizX s #2292O   yÁ340 (fix dicã³ry display   |"orÃ?120ã  bº33 ºþGET_YIELD_FROM_ITER opcode #24400!5.‹ "51‹ öBUILD_MAP_UNPACK_WITH_CALLH >728"t6a0  33>ÆFORMAT_VALUE: >548ü6¦ñ61 (lineno deltacðode.co_lnotab becomes sign"N2610È!6aÒ  Lp16 bit ?6642 1ÿ�CONST_KEYÃ >714Es ñ2 (MAKE_FUNCTION sfg#, “% CLOSURE¾n #2709ô6�(73¯ gSTRING¨ .07=: 5: ÀSETUP_ANNOTA¯ ·S and STORE T s© /98© 36 (	 y K Bs & nr
Î _#2721K Y7 (seyàell from type.ð__new__ #23722)
#  þ,Python 3.6b2  3378 (add BUILD_TUPLE_UNPACK_WITH_CALL #28257C 0rc1C ÿ9 (more thorough __class__ validationˆ 07a1ˆ "90ˆ ðLOAD_METHOD and €  íopcodes #26110� !7aÒ ÿ91 (update GET_AITER #317093  4} ð2 (PEP 552: Deterministic pycs> /65q  b» ò3 (remove STORE_ANNOTATION ³ _ #325A 5 4A ñstored docstring as the first stmt in Sbody;Ð Ô ñthis might affected8 J °line number˜ =9118”0400Ùðve frame block handlŸ �to compilH ?176H 1ÜÀEND_ASYNC_FO“?304| !10“C570 ³@PosiI al-Only Pa– 0ter >654 8ãò411 (Reverse evalu�Ðorder of key:© ueaOdict\ ó �rehensionz N5224Az q2 (Swap~pÀ  s  qal argsê  oú 3 ð in ast.argument‹ O7593‹   ãñ413 (Fix "break"r  "continue"ù þ "finally" #3783Oˆ9a0  342ªPASSERêA_ERRÕ?488; ð1 (simplified byteÒ’ for withc Ë >294®� 2/pð BEGIN_FINALLY, a : 4POP( x  i >338Ù9J2423¸àIS_OP, CONTAIN ?ùJUMP_IF_NOT_EXC_MATCH] M9156‘] 4y5  *¥¿e unpackingC 5C D ð
#
# MAGIC must change when¤’@emit7!by  öéðmay no
# longer b§ pderstooÑ0 olV äe—ksó Ë ~  loop (usum‘
# due tog 1addã 0 3new>1s).¼ Wª Å £_NUMBER isÊ !d,D rÖ sÑ r amagic_P�s array
# ÒPC/launcher.cAalsoÐ <Id.

h À= (3425).to_'ûs(2, 'little') + b'\r\n'
_RAW_; ƒint.from:  E ð # For import.c

_PYCACHE = '__pycache__'
_OPT ðopt-'

SOURCE_SUFFIXES = ['ð@.py']  # _setup() adds .pyw as needed.

BYTECODE_SUFFIXES = ['.pyc']
# Deprecat, oDEBUG_1 ŸOPTIMIZED 2 ð4

def cache_from_source(path, debug_override=None, *, optimization= ð):
    """Given the C P to aê Ê file, retur !itc" !.
H 5The5 ‘ does not) Q óexist; this simplyX sx 1theM 2.py] p calculB x!if/ 1.py{ À were importc<  ‰ 'î ó' parameter controlv yresumed‘ level ofM  �bytecodes [. If _ iì  U,  ñstring representuP oÁ ðargument is taken and verified1ñbe alphanumeric (else ValueErrorN §is raised)…
ü @is d’ cNÈ + È ` €a True vv « phe same‹@settå !tobempty K  while a FaÈ R pequival?to T 3'1'ã pIf sys.DeC\.0tag§  ‰ † ‘n NotImpl) !ed9 ! 5Q 1"""¢ +if< *  Ä O , 0 _warnings.	  ('"Ho	sq; use 'm  J  "J¤instead", FBionW} )E *if¾Ä´  j »message = '¯ *orC pmust beŽ Š ÿ 
µ ?B Typ‹([ • ~ q .' ]Ð1È v€= _os.fs ËO àhead, tail = _ g_split# �base, sep¬Ast =/ ò .rpartition('.'N  !=@
‘  gKHù U /('”… palmost_^nMÀ= ''.join([(Ì  - #Srest)ß Btag]É ÷  ¨« i'cflags.�fe == 0$   F«   ~ , 
 ó 
` < R Hstr( À !n !if>8 “.isalnum(¸ £   ”d('{!r}¼DŠ'.format� � ð    almost_filenó2ame = '{}.{}{}'.format(almost_filename, _OPT, optimization)
    f" ; = 4 ñ + BYTECODE_SUFFIXES[0]6 ñif sys.pycache_prefix is not None:'  a ñ# We need an absolute path to the py†   Ravoid ×ossibility ofN ÿcollisions withinŠ   , ¡ ÷	omeone has two differentM ð `foo/bar.py` onz  irQ atem an‹ ðy import both of% pm using N s�°. Let's say[ 6C à`C:\Bytecode`;`   idea here`@thatÝ ø
we get `Foo\Bar`, we firsÞ vmake itv(_ PSomewP \=  ),i $n 0 ×root-relative� /(`<  so} ³end up plac# bÉ ßWin anN Àunambiguous ˜ ÷ \e 5\`.8 !ifd_AÆ_isabs(head)q u  2 = & ðjoin(_os.getcwd(),   %)
U ñ# Strip initial drive from a Windows³.Í@knowò HhaveÕO  ž ´2, så³second partDñ	 check rules out a POSIXi  éQ phappens$PcontaM� colon at¾ a ™character3 ð ¡[1] == ':'Ú !0]N!inu ¿_separatorsO3 ?2:]9ø F B`7 `º amplete° ˜conversio@back* )a „ž € before Ï6ingà hreturní9 ‘,   Ÿ 0.ls(À )* N@ D�  T ±, _PYCACHE, ˆð )


def source_b_Cz Åq"""GiveŽú Pto a 8.J #, r >J0its# ! .¢0The c B doe �€to existd“is simplyX s¡ 1 toì  i .¨ calculated«pcorrespÝÐ © s R.  IfÂ  } J  !0con§ > ÐPEP 3147/488  òat, ValueError will be raised. I Ô ² QementÎ.G@_tag' ƒ Å `n NotIv ) "edU $isP (1"""œ  5?ys.Y – c /('¢ '?i = ¢ fs “ Ih�Àe = _path_spñlit(path)
    found_in_pycache_prefix = False$ {if sys." Áis not None:'  O �stripped_b / =8  !.r$ ƒ ²_separatorsŽ  C ñif head.startswith(2 V  + ]  < )y  :  7 ! => J[len7 5):]¦  - ù 5Truø  â * |  x #, 1 = ý 0_spj  	Ü ' ¶!= _PYCACHEJ  ™ ôraise ValueError(f'{* }sùbottom-level directory in 'ã  N 	 0f'{;B!r}'” ´dot_count =À ¡_filename. 3('., 6if /  –in {2, 3}À ¼  ðexpected only 2 or 3I s° {u › )elq F== 3h Ïoptimization» r}¦'.', 2)[-2ü!ifDB kK_OPTWÕ "= A por‡ 4of ;B doeÅ/ "—"æ  {| B!r}"œ ºBopt_ç(= u ß / ÖÚ 4 Ÿ.isalnum(Ð fÑ q {p C!r} ð/anÏ ð "alphanumeric vÉÓ Ebaseë¸PpartiNw"[0·creturnWPjoin(V*, O ð+ SOURCE_SUFFIXES[0])


def _get_source¤‘(bytecodeªÔ"""Convert a ! Ópb to a D  ñ (if possible).
ä�This funcÅ ñ exists purely for backwards-compatibilit @ @PyImQó_ExecCodeModuleWithF˜0s();“the C APIz """f0if üÁ â V == 0?Q »v ò rest, _, extensU	B *.r›7 q >  ×= ý.lower()[-3:-1] != 'py'€ 	b R 6try& lÁ  J¾a_from_ªÅ@ ñexcept (NotImplementedG,Sò b
e 	’ [½ W 0, #if�!isR e) elseCÁ ˆ¾  d(7  h� i?B.endùktuple(Ø)2  ¿ 	1  « d -ðsource(filename)#
  õexcept NotImplementedError:$  + Apass ö!elif filename.endswith(tuple(BYTECODE_SUFFIXES))G ereturn< N -se" óNone


def _calc_mode(pathN ð"""Calculate the ! ñ permissions for a bytecodet A."""t 6trys : 0= _^ R_stath 1.stv 1 $+OS< Q0o666) ð# We always ensure write access so we can upd¼ acachedŸ ^ # Ô ±r even whenß RsourcÆ ñs are read-only on Windows (#6074)Š › �|= 0o200 r~  \Pheck_Èv(method_ñ	Decorator to verify that� ñmodule being requested matches# !on™z aloader÷ �handle.
  ThÓ €rst arguzñ (self) must define   a whichZ fsecond3 i9ñcompared against. If0  ‘ison failŸ �n ImportÐ£ is raised˜ (€$�_wrapper¤  , 7=ªÐ, *args, **kw
 F 6!if(  c  + w   B 0 = ó .   c 1 !=E 
= ² Ç #('h û %soBnot re %s' %a  e  Û Œ à ) =ž X 6 J33 ' 	q 	oEá = _bootstrap. * hANamešò ¡# XXX yuck)  † ž “„(new, ol¾     àreplace in ['_Ò¡ule__', '_Y @qualæ  vdoc__']‚  R   óif hasattr(old, b ô &  1set+ £ + 3, g 	A ` = Ònew.__dict__.- p  . ;=(_c¤#, Ñ/±(  
DfindCshimÖ1fulÞ `"""Try 0 7 a r †pspecifi"�y delegat*!toŽ Ù A _? #()xCThis¸  1pdeprecaZi¼Pvor o{Qnder.A  q ? ·q# Call ! b  2it 
ps a str” c(indic  hL# au sp?€package 4@ion)Ã0nerÂ`a warnK 1andà #f  ò. ‡ ,@ sö¤ l2 $if]!isI “ and len(„ s” -Ámsg = 'Not iØ � ðdirectory {}: missing __init__3'
   _warnings.	 ð(msg.format(portions[0]), Im W- )? ñ,return loader


def _classify_pyc(data, name, exc_details):@ `"""Pern ð basic validity checking of a pyc hee S and w ñthe flags field,S ðwhich determines how *  D òshould be furtherq Áated against, �source.
R *Ä A* is €contents™ W ±file. (Only$ ñfirst 16 bytes areI órequired, though.)a  a   ] �module be
i€`ed. ItŽ ôused for logging¯ gU Pa dicÈpary pas7 #toÏð Error if it rai 1for¯ Øimproved debub 	: s7 Awhenþ Àmagic number¨ Õincorrect or & ¹h ½) ÿ_. EOF^  � - €found toÍPtruncÅ1"""Z Š  = 4 A[:4] 2if  ò != MAGIC_NUMBER’ ó message = f'bad/ Ñ 0n {£a!r}: {J 7!r}Nóbootstrap._verbose_Q s('{}',  B p x�(# G, **Î2 aif lenYo) < 16¹ preachedL° while readH 	M%ofÍ Â 0·¿ ° éñ = _unpack_uint32À R[4:8]& +# >3twoÝÄare defined.ÂU & ~0b11!inNE {2 V!r} iÁô ƒr÷S öm ×ate_timestamp P _m #,  Csize×   ë @"""V)3ate½ð  last-modified z Ð>ÈÙ ç { ! ˆ  ˆ ã4  C _ F @None< N   ;   Ömä  £=  5   5 mS‚(An  à’dš Â  Ü @code Dstalœê/if`ð8:12]) != (source_mtime & 0#xF C):
  õmessage = f'bytecode is stale for {name!r}'4 ó_bootstrap._verbose_H s('{}',  )3 óraise ImportError(# ò , **exc_details2 áif (source_siz� Ånot None andV ú_unpack_uint32(data[12:16]) !=D 6& 0 š 	´ ñ	

def _validate_hash_pyc’ #, Ë    , N(, ó �C"""V@ 0 a , ó-based pyc by checking the realW + � against  &!in% ,  @ �header.
 *(*å  ±contents of>  / ±file. (Only �first 16 "Qs areI £required.)Y é ` iô—lib.util.# $()t   w K  'D   , �module be] `ed. ItÑ u1 µtloggingò oU ða dictionary pas7 (to q if it dò Øimproved debub *An= s: iV 9	[š 2"""Y  f – [8½ ¼J  °Ž i (=      f'71 in¨o âdoesn\'t match,$of;Û,H 	’ #)
è„compile_Õ ç ¦=¤,€ S_path Ò  „B"""CP 6 � as foundË a.(Õ ñ = marshal.loads 9 is	Pance(- 0, _ S_typer  +Ã
 1 à object from {ÿÖ q  L iPî  ‡­º ( Ð_imp._fix_co_ì 1¥ Y preturn �  FelseS P'Non-. ½ "in» „.format(±© )Ú ž 
  › = !, ±
: 	ñ de_to_timestampõ ‚ 0, m %=0þ É#=0ƒ�"Produce^ ù b0 a 4 I ü.!% =#òarray(MAGIC_NUMBER3 # ˜.extend(_/0)! ¬ % £ È +  ’QdumpsÕ% Å � 7 ®2a   ,ïded=Tru¸5 1 0Àytearray(MAGñIC_NUMBER)
    flags = 0b1 | checked << 1 ñ
data.extend(_pack_uint32(8 )D ýassert len(source_hash) == 8F "  ómarshal.dumps(codec preturn � �


def de _O x qbytes):X A"""D$   â representing 7  C S and ` Áthe string.
E ðUniversal newline support is used in 6 � 8  V1"""? !im, ñtokenize  # To avoid bootstrap issues.2 ™ _³ Q_readu p= _io.BÞ *IOí .% ? Pencodá $= u „.detect_ 	? c Êå _Î 2er x ÂIncrementalNYÂr(None, True@ GG .O 	y  – ÿ[0]))


# Module specifications # #ð

_POPULATE = object(h  C c Ò_from_file_lom t(name,  =å * Bader n ë AsubmÆ u_search[ %s=� ¦RÜ"a 4 ú 0 ba]Pon a � Ž ˜`To indae that„@ Pis a ¬�age, set¬ ” ñ to a list of directory paths.  AnA Rempty' ðis sufficient, though its not otherwise!0ful` 1theE dsystemÌ Phe lo[Â must take a!asW ôonly __init__() ar¡jf# › ´  ñ# The caller may simply want,õrtially populatedM -· E  orð !ed› €.  So wea~0 ï Ða bogus valueaF @fill6 as much asF 2can k K Õ= '<unknown>'D ²if hasattr(8a, 'getÆ ¼'\ K   p# ExecuILhJ   6try*    ‚ c .a "ò -   �except Iñ^ErrorU Apass{ Felse l `_os.fsy( g !if__ f_isabs% N  � Ó C Pjoin(r €getcwd()âu  O Ü /OSØ 	Ù J# IfBis o" Çøñ, but doesn't actu}cexist,H uwe coulš Ñd here,ù æû. ü"noò#ðid.  However, we ó\don't have a good way of testing since an
    # indirect location (e.g. a zip file or URL) will look like aB Ânon-existent1 ñ relative to the �system.
5 ô#spec = _bootstrap.ModuleSpec(name, loader, origin=ž )@ ò._set_fileattr = True_ ƒ# Pick aE ° if one was‘provided.K %if& qs None:  3for ñ_class, suffixes in _get_supported‰ _µ 6s()E  I d ^ô.endswith(tuple(R )3  7 N ) =… P  .   \.; Ó % Ubreak 7els÷  $ areturnS�Set subm©õ_search_paths appropriatelyW- Äæs is _POPULATE+q# Check3Á L  ‘ `if hasê( ë, 'is_package'>6tryW  ?   / S. X
N�except Imã^ErrorU EpassH f L  6if k F  # ¸4A= []j 
b 7 T O ?if D  | ¶ Ï  Ã 0dir½ Ú t_split(÷2)[0Á  +   w ƒ.append(V )‰š < a


# L(?s # 1!

éò WindowsRegistryFinder:� €"""Meta â ! f  * s declared$ ýL # rM B."""J ñREGISTRY_KEY = (� ô'Software\\Python  Co æ{sys_version}'6 "\\F€s\\{fullŒ"}'Ôl o_DEBUGr Fs\\Debugy l à_BUILD = FalsewRChang% È3up(à@‚amethodÛ ¤def _open_B—(cls, keyöò(ó winreg.OpenKey( òHKEY_CURRENT_USERO p  �ú/OSö Y ÓLOCAL_MACHINEZ [ Ü K
Þ Àã wif cls.Q~À      registóry_key = cls.REGISTRY_KEY_DEBUG
  Uelse:   oregist@ , _ . ô.format(fullname=	 ,5  a  ósys_version='%d.%d' % sys. ¥_info[:2])N :try¼ Awithò d_open_� Ë(key) as hke2  � ðfilepath = winreg.QueryValue(3 F, ''v êexcept OSError� µreturn None¦  f 
 Á@classmethod õdef find_spec(cls, ? ž =U �, target )| ] ñv_searchK Æ io ø !is² O  ·  v ¡   q_š 0_stöFc )ðfor loader, suffixes in _get_supported_ì _( 's( ¡ Ö P.endst(tuple(R )3  7  tà = _bootstrap. S_fromj ÕÌ S 	 ® D  Ä  ;)O "uorigin=E  u ¼ Å oomoduleq-‚"""Find 2  âdŸDthe j.o  ˆ RThis áò is deprecated.  Use exec_L §() instead@ 5"""Ø  É Û$Ô,w1if 0 ois notÚ % .ši Ò!

¶1 _L¦rBasics:ó ‚"""Base " òof common code needed by both SourceE 2 an slessFil .�  ö is_package(self!
¥ðConcrete implementation of Inõ tz .P  š ±checking ifr  Ä Û §! rØÃ  Ž { a has aÏ ñof '__init__.py'Á  J   5 #= 8AplitÌ .U (U))[1]� ?  _bh=u 1.rsH –'.', 1)[03 Qtail_™ =Np.rpartiv('.')[20 ç Z j =Ô '¯ W ! 	 ªdcreateÞ­ z
© ðdefault semantics  G 1ionF ] 9[ / Ð):
        ""ó
"Execute the module."""
  ðcode = self.get_ (( •__name__). 0if ! • is None:  N óraise ImportError('cannot load} µ {!r} when o 9) 'I  M 
 r'returnv �'.format§ ¨ ñ_bootstrap._call_with_frames_removed(exec,Ð ,� p.__dictò ‘ 1def¼ _(&`, full)ÿ s"""ThisG  ©deprecatedoÈ     a \_shimf ò


class SourceLoader(_ •Basics):
° £path_mtimeI   
« òOptional method that š s(Pifica'  K Ð (an int) for# o  ¤ specified h ’ (a str).�  ! RAs OSú Œ/  µbe handled.Y ¥ZC [  › C o_statsë æ Ping aþ `adata ôÙ  Ñ Š  g Ù  ÖPossible keys1- '~Ð' (mandatory) õ qnumericTñ stamp of last sÝt  ˜ P‰; ³- 'size' (oÊa   � in bytes]  v \ R ™�Implementt¾Rallow	 œ¡er to readV  Vfiles¬ä2â# {>:“ |Î  &)}þp_cache_ê  ” ì _- ", "   ê�which wri; /   (]  s)  a ô åL6]  o-ofLÞ3Then �is neededØ2ord�õcorrectly transfer permissionsM Fð# For backwards compatibility, we delega-`o set_(V=™ d¢$ 8ˆ“ ´   :Ë  ¬[h¤Concrete i]DPof InZt·kP 	 #Ž t k(o Ú6tryu ± O ð_bytes = self.geãt_data(path)
  õexcept OSError as exc:  & Áraise Import& ó('source not available through gej 9)',I  M 
 �name=full	 `) from€ 6 âreturn decode_v ( �_bytes)
, Cdef  0to_- p(self, ò  , ó ö, *, _optimize=-1)æ B"""Rj @the ? ò object compiled› c .t  Ê PThe 'd ô' argument can be anyE 0typaO `() supP!s.À  L 5""" ø ó_bootstrap._call_with_frames_removed(£ 
ì _'exec w  õdont_inherit=True, +5m ä (gÃ	TàConcrete impleôation of InspectLoader.N ZpReading,  é l ‘ requiresÐ�_stats toma Åed. To writeNA 3, s›� must als> Ü�ù_H0 = [´ @fileº( t 2 ¶mtime = Non�   — s Lhash   Ö_based = FalsR Scheck 0 = ÁŠ 6try– î x  PÏ `cache_|B b ï *DNotIÏ!ed_ 	û Jelse/ Ÿ  £ $stg „ ë–  . 
Ä
_    Epass  †   —³�int(st[' &']	 ,   º    À  Û  (vM Ä  X È   Ì  �xc_detailf{    'Ã4': Åµ'Ž9': Ì / }o 3 Œ @flagª à_classify_pyc(=,œ  Ö F G    ¡ sïÑ = memoryviewM o)[16:]Ÿ  ; 	f“ ¯& 0b1 != 06 6if 9 ‚ Y  ¬c 0d  A ’if (_imp.F t  ,s@ ð'never' and
                ý(check_source or
"  R_imp.6 ÿhash_based_pycs == 'always')):K u ó_bytes = self.get_data( _path)J  � 1 = ¢ @   (@  ä ÿ_RAW_MAGIC_NUMBER,7 h Å 2 Ë  _validate_»  X(#, i   ¯, fullnamer  Û  ¿exc_details� OelseÃª ‘timestamp¯ 7Ð & ð m] ç ¯st['size'], =*W Hñ	except (ImportError, EOF
 !Opass •ð_bootstrap._verbose_message('{} matches {}', ±Pcode_bÝ ? ¢ A   * ñ return _compileî x (� sì , Ë=— X 	  L  U Í = Û  Ø = ä $ifŽ k ‹s is Non/: " ÞÂ dobjectE 0to_ T 
€
 E  b Bfrome 
H öif (not sys.dont_writ¿J andD  1  
  Ág Ñ- 	0if äX‚| &  H  q (   r )   NÝ 9    ¦ M 46_to� E„ c ", W 
Q ¹c  ëHh =ÓÀ  len(source§_bytes))
  Itry:   ±self._cache5 ðcode(source_path, K    JdataX þexcept NotImplementedErroro Epass„ qreturn ] ñobject


class FileLoader:
0 á"""Base file l  + twhich i{ Es th" ð protocol method !atP crequirP òsystem usage."""s Ðdef __init__((À, fullname, )à @"""CD} pmodule ) A and  0 1 to Ä €found by ’  Žafinderƒ      y .K = 0  [ =’ ¹ %eq· Wother® yÕ 1.__Ha__ == *  5andm  Ž   u j__dict5  )… Chash‡ €   „  à F) ^   Õ J €@_check_% �  ™ !_miC œh 0"""E2 a * q from aE.§  Ñ CThis"ô
 is deprecated.  Use execl —) instead@  2 H   ú# The only reason for tb  "Ý .Ù A òIssue #14857: AvoiC�zero-argub W Âm of super sZWationT rof that6  can be updå ð without breaking’ *3zen8I 9t (¤ , ().•+Å	@get_ ÚÆ
R* Ú I¨ÏH as S K ¾  ó G  N ‰  Ù…   
G�  (  mr x 1raw&s¹Pif is-CanceY !(SZ •Öer, ExtensionK)x   �  _io.open_+Q(str(¢ )}  @ˆ 3   ë   f.read(³Jelse1 d  ‡ !IO] _, 'r'a &B# Re— Re¿ƒ ABC API/Ì ~r6 _® #er0·!ifkÍ.is_package($   ——  FNoneúW} v  x  p1 = b_join( Qsplit7 .# e)[0], @ {  ÈdŒ 8 [ U L ³eif not6 À(resource):
  ô	raise FileNotFoundError
# €path = _ b_join( °split(self. õ )[0], resource)? preturn # 
 tdef is_* B �, name):!  y !if2 q_sep in   ! W UFalse6  e « r ; P Û pisfile(O )µ �contents² ¬ ; ÿiter(_os.listdir'Á))


class S. }vLoader( ,  "):‰ ù"""Concrete implementation of2 ° using the Î ² system."""J  ˆ â C_staÕ ,uÛ B"""RÀ G Ámetadata forX  ? Q  ’  %st V B    )ñ{'mtime': st.st_ f, 'siz   }© ñ _cache_bytecodeƒ", l´$,    © Ê ñ # Adapt between¿ …two APIs@modeÁ Pcalc_ (b Óû@set_k (  !, E =J H3  A s , D 4, *3 W0o666¿ �"""Writeæ s. Q to aÛ	ƒqparent,  ã Ð  ¨_°  Ê   µ_parts = []	ð# Figure out what directories are mis_.3 bwhile ~ ƒ and not5 is Ô    r;Z ¬ / "th° €.append(½ $ ø # Create needed¶ ª  ¾ 7  YpreverseH Z ¢ F› ¶ }  ¡ :try¨   'mk5  aexcept�aExistsF ñ# Probably another Python process already cdä6dirú  o    Ê6inu9  ˆ !OS€  as exc‡ áCould be a per	@on e5 qad-only�t`: just69getü  x A# abg4rit± · ñ_bootstrap._verbose_message('c–  uÿ a {!r}: -',u  y  Þ:excÝ 1 ÄP ð _w§q_atomic Ü
Q Ñ Æ È 'l&th> ­`# SameÈðabove: just don't ÷write the bytecode.
  ñ$_bootstrap._verbose_message('could not create {!r}: ‰', path,M X  öexc)


class SourcelessFileLoader( 2, _ ‘Basics):
g 2""" õ which handles sN ò file imports."""9 €def get_ÿ ñ(self, fullname):[  ¯  Ð 0 =   ..  L  # (, + Hdata+   (@ )# �# Call _ñ ð ify_pyc to do bÖ á validation of¢ " ‘but ignorµN óresult. There's noø  U Öcheck againstáõ exc_details = {N  î 'Û %':	
Ê'Í +':ä}B 	× (ÿ S', x ôreturn _compile_�(U  — ¡memoryviewV j)[16:]œ  ¹ =”
 T _¿ =   )5B"""R² pNone as£Hre i{ Qg »   å  3 õ$


# Filled in by _setup().
EXTENSION_SUFFIXES = [] –ExtensionTfor eC ’ modules. ð The constructorÐ €designedJ�work with» seFinder: 	Oƒ__init__A ”QJ  0 =  é  ž! =bš  ¦E__eqU WotherP ]s "._ƒa__ == *  5andm  —  u j__dict5  c__hash‡ €   „  Õ F) ^   Õ J 7_‚4 g, specU B"""C]ían unitializedÁ  È   Q 8 = ¿Pcall_»ú _frames_removedaS_imp.˜ sdynamic” 2U X  lÃad from 'x ° 	  .;,l4# åâ JexecH" 
JI@? anB
ä 9,z *v ,) Q ?ute.>elf.€  1pis_pack¯ á†Àlname):
    ð-    """Return True if the extension module is a package."""
<   ðfile_name = _path_split(self. E)[1]. rk Gany(9 õ= '__init__' + suffix4  f  3for ñ	 in EXTENSION_SUFFIXES)
6 Ádef get_code‰ `, full¦ !):"  P ú ®None as anù ðcannot create a T y objectÚ  K 
… _sourc‡ }¢s have no L „ } q@_check™ñ  v  	 Â1 to~  C  .�found by ofinder• 	ò


class _NamespacePath‘�ppresentk ¤ # u0's Œ ¡.  It usesw mž . ç 0to Š 0 it/ CrentÁ , and from8 àre it looks up 0 pa. !'sG _Êñ_.  When this changes,/ y a's own™  "±recomputed,G Qusing _– óer.  For top-level� T ƒ  ð H ais sysNb  Ò6Î ,p  v ô�0 = / K    c! =C  Rlast_¢ r = tuplÙ ._o ;())@  Z � a  . d © sÝ Ä + ² („ R of (~ -™-Ü   Õ-| Q-attr )¿6 q, dot, Å	 @ ö .rpartition('.'Ò  if0 b == ''¿ B  0# T+.æ.Å‚ containÄƒ t.5 M S€'sys', 'Æ '! }# Not aL.Ê	.Ë	t F /  { › ,Ÿ ~ 7__'®ó 9§< _�Ê �0th_‰ 0 = 4 .øq� 0get= (X .s[g ]h ²_recalculatº± 2# IýS �4 haû7d, ? îJ5 b # MakN%pyC #if�F !{
sEspecJ¦l7.i  	ð_path)
         ö6   # Note that no changes are made if a loader is returned, but we
   ö#  do remember the new parent path
-  [ @specW Ðnot None and  .s   :9  E "if( þsubmodule_search_locations4  8 `self._Œ / =B 	u 9 Rlast_Ñ E   b P# SavRee copyE ; H  � 
 Ðdef __iter__( )¹ 3    ø._recalculate())B sgetitemE ~, indexL  b G [+ ]M sM ,ÃS L  Ë C ! =# J 3len“ 9 Ø ?len× ?repó'_NamespacePath({!r})'.format[  Ÿ 	)ƒcontains—  , 7�   3 in°	xà aappendj H .'  S °)


# We us$àis exclusivelyp ÎPfrom_
ö() for backward-compatibility.
class L«C[5nitì BnameÈ  _fýrÿ · ' =X `> @Œ emethodÛÏ  Çb(cls,  q A"""RV % í  :( .[  XBThe ]  20dep”`ted.   ñimport machinery does„ajob itØ N 1"""¤  Z �"'<t  G  (í [%)>S! 0.__ '__X£is_package@full& ê h BTrue‰  ¡Ÿget_sourc9 *''7 ?cod5  0ðile('', '<string> ðexec', dont_inherit=› Õ rcreate_ö Ø  ”Ô ñ	"""Use default semanticsÈ9  G @ion.uv ù  € 
[ / ] Fpassó  
1 d 0"""0 a }Às	K/isL Î › —) instead@  È  9  #~ðsystem never call‚l .ü  5 ð	_bootstrap._verbose_mess?'¹ ad with`¡%',N  R  ÷«)0 À   return _bÿ)ootstrap._load_module_shim(self, fullname)


# Finders # 1Â

class PathY ñ:

    """Meta path fs ‘ for sys. àand package __ ò__ attributes."""J @b amethod[ ñdef invalidate_caches(cls):   �Call the,  ") O @ on &  ~ c entry« sI •stored inº “_importerz ñ (where implemented)¾  ˆ    ÷  ,]  M Tlist(R ‡.items()Ï  G %if@ fs Noneî     ?del§ [‚ ]×  . €elif hasu(£=, 'Z'ˆ  ; . ., /()´åAhook®,] –"""SearchÄ - 8aý  N'±'e,if6 ais not* m  rY 
A _warnings.	 *(', Ñ is empty', IW/ )T š  X  à
= 
i :try  Rpreturn @ (Þ W   cexcepty ^ErrorB …continue� ;els$e  =¨
æ _±1Getdª s Â Q6rom›
V .†  â !IfH 9 À!in æB ³appropriateø  í/ £ it. If no#  Å±available, Ü!‰  x ‘   !if¤j == ''rÅ¾ ß= _os.getcwd(ÇÏFileNotFoundÍ‚# Don't È  S¡failure as õ	cwd can easily change to À   A# a ,ý directory later on.. " >   ë í=×[l½?Keyí  L Hcls." D 
>T
En # =äÓ Ë a iKò_legacy_get_specë4s'er¨ñ# This would be a good placeÓa Deprecation'5 ifš ö# we ended up going that route•Ÿ Ï ð _loader'):
      ðloader, portions = finder. _ ³(fullname)
7 e else:   + @ omodule@   2 t %[]L 3if K «is not Nonk üreturn _bootstrap.spec_from² ,M º  + ( == M¥ ESpec© ,v 
5 B.subÐ Ä_search_loca6Í È ¥  o 
 Á@classmethod �def _get_$ d(cls, ið , path, target=)o³"""Find theß @ or ¡`space_< ¢ for this ´ �/package' A."""ƒ  ‡B# If* ñ ends up being a+ R  = , e 'isG � aist ofÀ ñ	s that will become its _< %__; º '=  Ç �entry inU  ½ !if$±isinstance(- ç, (str, bytes); 4   …continue„    ó’er = cls.¥  imÙser_cach]  5 #if2 °' ‚hasattr(g 0, '	 ý'¢   5  R  §!
’  :       A ã flegacy„ › .erX 1if A !is"
� _   ]  > .á ,   D    ˜² ’ ž	ä C &ifðÉ 
qraise IpError('l P miss#È ''0# T{ñ is possibly parW .¢  #  RemembeÅ1eseû ÜÁies (if any)åjwhen wÊ æ Ÿ#  createÊDand ©¯ iteratingŠ oy¦ 
¸„.extend(™�F… Õ  9 ë+ =¢	Ð O “ û–“‹˜aTry to" a+ Â'Z‘' on sys.¤@or '	 "'.# â BThe ` QXbased4 p_hooks ¾G _¥¨æð if path is None7:
  °path = sys.  ðspec = cls._get_ °(fullname, , •, target)5 0if ( Š is Nonej areturn 1 #el3 .loader:  s `space_w  ® õpec.submodule_search_locations_  è :if @ 
–  # ö# We found at least one8 ï B.  RÃ aæ Ywhichl M Úcan create thF mckage.4  5š.origin =" S   # ó � = _Name'GPath¬
ÿ ,Ô½ f   ¨ q 	© ;elsÒ.  ï. * T ' Á@classmethod ’def find_Ôj(cls, p=e )¿0"""2 e6 5 onÊP or '0x' based ’_hooks an|  È ñ_importer_cache.
ž  " RThis ²  §òdeprecated.  Use¾  6§() instead> 5"""J  % \ Á \—! s   ÿ  ” X  ^   e VÄ s�distribu=z°*args, **kw
 
vk YFind > ò -÷n iterable of all Dp +“ances cap& a  2ingãáetadata for paKps match#  ``context.ð%``D 1(orv   ps if ``0q`` indiÂS) alog  3As int ElistI ö of directories q  3 &``×ìRfrom TTlib.mÅ  # M  ³ N%ero È" .5	w(°1


bR FileY :0""" - K #er¶ In©cQ with@fileV�tem are d†`erform¿q, being¾ Òrefreshed wheI9yS níPhandl¿ôhas been modifie< LU  !Ô__init__(self…*%ªer_details«¦InitializeÑ  ¯B to 7 aúQ vari�‘number ofy  h`2-tupl¤`ontain²  Ü{  IØ  +quffixes ! H °recognizes.Ù  [   & es = [],  ç 4, sT 2in  ï 
 ¢s.extend((8 à, loader) for ¢suffix in 
 Ses)
  óself._loaders = 
   õ# Base (directory) path  @   ! = u or '.'  €if not _# u_isabs(3 %):'  Ž  # =0 õjoin(_os.getcwd(), % Ã a ¥mtime = -1Z 1  @cach Lset(? relaxed) K ñ def invalidate_K Ë Æ E"""I$ U the 7 › A."""O ð q  ¸   find_modul° _ a_shim
%  “  ´Xª, fullname— pTry to / # aåA for¥ ±specified ms ,Å ¾  H Qspacep  ´ òpackage portions. Returns († ¤, list-of-# ").¯  ? ñThis method is deprecated.  Use  _� §() instead> 	=Rpec = Ö 6 ý ± 0if P  n JNonerr¼   E, []5   9 .×  2sub#Á_search_loca	 3"[]ê  ™B_get”  �,sf_class¥,4ç, smsl, target¹| –> (å = É¶ ¥_from_file¢ 7 ’ =d ,ü  § =Å )–· è =wí :"""¦ r¤‚ ²�matchingõÈ f  †efound.ë P5is_îv = FalsöFtail�É p.rpartiÿv('.')[2B:trykâðAstat°.· <æQ).st_1 « ïexcept OSError[ õ"ifp# !#w T 
=  œ.*lÔ   ¥ ‘ " =Y ™ (# QkeepsTñoriginal casing,É_i õ e__ and friendsJ Aif _†g_case( ‰ qñ( 	®G - ±¢ g.lowerå ;els
j û  b ' p# Check|š[ ˆ   lW of a"(sthus a h)­1if ‡ × "in 
ÏAbaseìÀ = _path_joi÷n(self.path, tail_module)
  ñfor suffix, loader_class in @ _ )s:7  B ñinit_filename = '__ C_' +T 4 Pfull_“ 1 =  ¡_join(base !, C V 
¬ u f8  is% (Q )¡  0 TreturË ’get_spec(Ô ê  , D  Ä 
 ˆ [” ]?JrgetŽ Nelset p# If a O ó space package, Š  th íth if we don't'¢#  find a ´ Ž 9 Ýnext section.6 6is_x `VisdiraÄ €# Check  a M´ w/ a propev existsl  . 0 >try, xn
w $ x·TÂ  àþexcept ValueErrorg yINone3ù_bootstrap._verbose_message('trying {}'( Zity=2ˆ ƒif cachee®  º ˜ iËT	õ  4  $ v
î8if [
Ê F
‡possible AV`
I   �M·S¸ 2 ã , ª 9 Q.subm/ À_search_loca.Gs = Ó	! z    g 
 @def î!l_Ï]t€"""Fill ¦! Ó of potentialÇTs andszñthis directory."""n  £ " =†   M0coni  ä €_os.listõ 5 @ or  †getcwd()4:Ñ(FileNotFoundBÃ, Permission TNotAD¥  û  ¬ %#  ð has either been removed, Š‚ed into r,Ÿ :mad™Æ# unreadablez g é %[]â# We store twoˆPd verÂ ðs, to handle runtime changes¤&th} ú# PYTHONCASEOK environment vari� ûif not sys.platform.startswith('win'&ÚòEÞ$t(Ö œ\õ# Windows users can import\ð with case-insen×sitive file
  ó# suffixes (for legacy reasons). Make the( í lowercase herL ðo it's done once instead of _ ûevery import. This is safe as™ u ƒpecified ð es to check aga^ Õ are always s/ Kin aP  µ C-senymanner.% Ý _ù_contents = set()*  Í „item in ) :"  e£name, dot,À 0 = 6 ê.partition('.'Z  8  if5 P   @new_X ð = '{}.{}'.format( i .Ë .()\ OelseZ  K Î S T.add(” 
n òself._path_cache =>C i °if sys.platÓ ú.startswith(_CASE_INSENSITIVE_PLATFORMS)Î v zrelaxed~ 4{fnŽ(fn¿!}
‰ Á@classmethod Adef Å ÷
hook(cls, *loader_details‚ Q"""A B  C ð	 which returns a closureÈ us&ô  & a s  è8 Cwill=   a¯ 0staXRusing˜ô• Qs and  µ O ‘called on … .ó  o !If  4  ,  ©ñnot a directory, IÊvError iÁgraised^ 5"""Š 	Pð_for_FileFinder(€ O š €"""Path ·?ælib.machinery.C .l  @ 0if ¸ Oisdif  * · Ô e('onlyñ 1iesn0supÁAed',=¶ á K ðA clsÓ 3zI _ä )  5�__repr__(ã%A 'e({!r}) 0 .¤ 3

#á  ÕOup # +!

š ðfix_up_module(ns, B
 c€   S=None¾ #@func c¢used by Py\¡_ExecCodeM\ ‚Object()¸òÒ = ns.get('__ #__V 	     4 G ˆ6pec  Ò%  Bpec. ó2eli% â E == ï E  Sourceless¶LOÁ)M³ 2 = H D Àame)
    if ³not spec:
    ! = ò_from_file_location(name, path
 rloader= )F 6tryO `ns['__U C__']Y '  p  =    " „ @ { " ccachedD c% �except E 6ion� ð# Not important enough to re .e ðpass


def _get_sup! $ed 2s()\ ð"""Returns a list of Ä â-based module ë 1s.
g °Each item i7 rtuple ($ ², suffixes)” 1"""5 äextensions = E QFileL™u, _imp.' _H (¬¡source = S	 9 ñ SOURCE_SUFFIXESo vbytecod1 Hless5 {BYTECOD7 r% [‡ 2s, z $, S ]_ñsetup(_bootstrap_m.[S! A the‡SÅsers forÓclib by ¢ing neededÊ suilt-inŒÀs and inject*  thˆ1ntoh pglobal òSspace²ðOther components are extracted >? Ucore Ð r D Éc 2sys³&, ±  ' = #  sy) A.sys  	6 . wCselfE  ž2ys.p@s[__ñ 2__]) ¡# Directly¹Ú #osÎ " (\@ dur@î °�os_detail¢ ñ('posix', ['/']), ('nt Q\\',  ¹  ÌbªRin_osxö _separators in Z | W€# Assump²P made) _S_joinü * ñ	assert all(len(sep) == 1F0sep9 8 u 9 =  ! =Š™ 1[0]À  & 6if Ã  P sd³  * /os‰? V  0 Ubreakh JelseP 	‰ 1   e +_e  ¶ù( &osó  B   
{   fIMZError�  $ �continue´ 
° graise > "('Ó Å‘requires 8‚ or nt')—‡setattr(È€, '_os',ÍÁ + Æ'_/ ƒ ¯!'.VI  )F 	�òseps_with_colon', {f':{s}' -U }ö �¬Ï�ð.
    builtin_nað	mes = ['_io', '_warnings ñmarshal']
    if builtin_os == 'nt':    ñnames.append('winreg')' 5forC  ' 9 in sN m * 0not. §sys.module, ~  ô  = _bootstrap._› Pfrom_O (   œ  E Felseƒ   ( W � [  E # 3 Òsetattr(self_8 ,æ   !)
±# Constants H ÷'_relax_case', _make "()Í ðEXTENSION_SUFFIXES.ext‘B_imp Ôsion_suffixes9 wäfSOURCEU æC.pywä °if '_d.pyd'µŽ 
eð"WindowsRegistryFinder.DEBUG_BUILD = True


def _i'6ll(ãh)X B"""I# ñ the path-based import components."""no_setupS   0sup9 �ed_loader3V_get_ Dfile († , } b_hooksvsd([Fileä  &(*J c &)]F Pmeta_- XBPathD #)
Õ $os
  ) 4lib 0zip�  9tem …functool? pcontextB q7ƒpackage( k!ðReturn a Traversable object ö ˆcgiven @ .õr@ ôfallback_resourcesp £.__spec__)+   ! ˜ f Á_directory =@lib.<(, ñ .origin).parentÉ 2tryE Èqarchivez1 = 4 ž. 4  + 4rel' | .´tI 3to(9 - á? @«£ * d, str(e c) + '/q�except E 6ion¿ 2pasK^™ F


@î. rmanagerl.0(reù", 23=''jÄ# Not using - €.NamedTenaÑñle as it leads to deeper 'try'EÀ# blocks due!  2@need QcloseÌ b `orary Ó  ƒwork on EL ‘properly. qfd, rawt& =§ 0mksQ (Ô  •	‘os.write(I 	1 ½1os.¢ 2(fd=   Zyieldtƒ % gfinalln	s  C ªos.remove(:   ö LÖNotFoundErrorþ & 5

@ä.¨Ðledispatch
@c²ontextlib.c ñmanager
def as_file(path):
    """ óGiven a Traversable object, return that Q as a8  K   o €e local b � system iS ‰  Š .8 x  with _temp8 š ð.read_bytes, suffix=g `.name){ i À  Ä Ryield~ C


@æ ‘.registerU  P÷ #
@�    š $_/ ð	Degenerate behavior for —  H  Z sà œ  ( ð
"""Abstract base classes related to import.cfrom . ` _boot= /p
 ›_external" Òmachinery
try6g ’ _frozen_ Álib
except I‡ PErrorp3exc8 Qf exc‰] != 'A '(  –Qraiseì&  = None� Ó ™ j \ 3 ' =5 
ì D abc ‚warnings7dtypingwðProtocol, runtime_check"

0gaÝs_cls, *ÞJ .0cls À  *9 ¶Acls)? # .if­q is notKM  . è   ì … ­= getattr(?€, cls.__l&__�  F „‘Attribute 
z  ' i ’r 	a A)


OÁ Finder(meta ñ =abc.ABCMeta):
I¤"""Legacy X ˆÐfM "s.7 ÑIt may be sub] !ed. ácompatibility Êl` ±third partyz ô	reimplementations of theg/â.  Otherwise, … ? = áshould derive  M àmore specific ú  ˜H 0or  REntry D ABCè pDeprecaŠñsince Python 3.3>  •	 @\Camethod  c ¶ ð_module(self, fullN,.=ù - n�N kæ  R 2 a T ] 9 5The[  
‘a str andX opg!alt  !or.F RÛ£s a LoaderÅ ) ý l
Z(Jeæ 0
^ 6@sys.³_!öIñ# We don't define_ÛP() heç¢“Ðwould break
 ò\   # hasattr checks we do to support backward compatibility.

    def find_module(self, fullname, path):
   ò"""Return a loader for the A W  . SIf no Â is found, r@ ¥None.  Then  % ‘a str andž  G  \ Bpath plist of& �ings or J Î  0 °This method3 õdeprecated since Python 3.4 in favor ofo pfinder. ²_spec(). If$ p existsõ n]$s-^&leL €unctionaq � ’provided 5© 65"""@ @warnæ .	 ·("MetaPathF£ !mo·)^ ë Q    " a ô D £(available`e3.4)",Ä o  
 DŽBionWÝ * Õstacklevel=2)N iTtó®'­&')« o lC ‡w = selfçfó/ C 6 .ó"ifÍ u1not‚Q else
 ‹ñdef invalidate_caches± ¤ ‚"""An op%¶ €clearingf}Qer's F •, if any.¤ ó used by im Nlib.‰ )>  rº
_register(ñ, machinery.BuiltinIW (er VFroze š  ? »: �WindowsR "ryÜ )


class 5 4Ent (  :e @`bstracç2se 5  A3e: ?$s  T H .ü  *0# W80n't1ine6 D herßñthat would breakë …5`&,
0(+ À, namespace íCion)]e¼ `q‰L  ápa seque;'_Ñies contribut±Qo par¥až package.ò4 vZ àmay be empty. qà  � b,æ U willH «be ignoredê .  a `discar‚DWother(õ%erX  lo:ëÉ´as a normal oC Þ — Û ”œƒz  Ó‡Àd_spec() is óprovided than backwards-compatible
  ôfunctionality is < .# 5""" �warnings.	 ð("PathEntryFinder.find_loader()N ö	deprecated since Python R ˆ  ÿ"3.4 in favor of b ospec()E £(availablev e3.4)",Æ m  D¤ BionWß * Õstacklevel=2)N ñif not hasattr(self, ' © 5'):+  r õ return None, [] €found = @ I > ™(fullnamep , !isy  J 
c ’ & ð.submodule_search_locaós5  œ 1por ( =š   Oelse0 
m è  N 4 0$, } * t 8  ò <+ jã ÷	 = _bootstrap_external._# a_shim
9 ñdef invalidate_cachesÀ³€"""An opðal method for clearing the b Qer's F †, if anyEDThis= ¡is used byß<Š )?  „»
_register(ò, machinery.FileR ²)


class L’Ameta â=abc.ABCMeta): è b8�ct base * é  im› ¨!s.Œ  Æ @0cre<< , ¸
BRô"a ( ð to initialize and into which  k .˜  i =áshould raise Iš SErrorr th’±prevents itê E Qfrom ¯  " Sa new� §.  It may ` ‡ @indi½D Athatï ã  ‹ T e T 4  / €   Ð# By default,	  erh  ¡ semanticsw WQ ¥ # # We don'tS ’ine exec_ld() her	Á wBQbreak¦ #¼� checks wO  ™ 1supûC Bi/¢  ±q  Á%, ¸63"""	 Û  3 $edƒÊ  $3The ± must be adÍbo sys.× s6Rhave Ÿ@-relhÒ  H  � ibutes setØ€perly.  b Ÿ  ¥Sa strÍ  : 	Vsk0d o–Wilure+ š7is ïi/ Åë )r.–E. If¬ 	 p existsQ@n it¢ / toÅ  Ù. aÕÀble
        ófunctionality for this method.

  5""" õif not hasattr(self, 'exec_module'):-  @ õraise ImportError óreturn _bootstrap._loadH S_shim` ’fullname)” Bdef m D_rep…  ~ B"""Rc a/ 0's 1 Û ³Used by the$ ¢ type when Q doesù Ï Ã áNotImplementedß ] TNß is deprecate\°# The excep—Ñ will cause M\aType._õ Ê__ to ignore· u  ª  ¢  ò	


class ResourceLoader( "):eP"""Ab—‚ct base 4  & ¦ãers which can Ë�data from;iêóback-end storage 1ABC‘Ðesents one of< ! oòal protocols specifi°sPEP 302M  ¡”c@abc.a· È  2@get_¡ TJpath-ï 9 ß 
iåt shouldó  9Pbytes@l  |  °  k 0.  Ý  ð  must be a str.½  4   ´!OSJ¨ InL t §%0supƒ" iM �ion abouto¸ @s yÕ ça®C –£is_package˜ìGD"""Oœ`whetheÖeâ  bæ  �#a y ›y   š"  @ƒs a bool G RÖs×" iºa 0can(•be found.� ï'   ®?codM�ˆ„À : p object˜ ÔßÄ  �õ  `s.Codez â Öpossible, elsV| NÃIif a‚ =‡make sen: ã(e.g. built-in¥ ?). a3 ”iè0 = °.\ ( )F 2if    Ð ˆ e ê   3  \ < @_to_„( ¸ž- 
¤“K † ³#th­À   module.  ôThe fullname is a str.  Return 3

  õ"Raises ImportError if the module cannot be found.: 5""" rF E a Ñ@staticmethod- ñdef source_to_code(data, path='<string>'):/  ¥ À"""Compile ', �' into a > ‚ object.p  /  ( €argumentÄ  Á ò anything that cU !() Àhandle. The'Œ '€ F `shouldI Qwhere% ‘ ù was retrieved (when applicable).*ˆ}  @ ý ò, 'exec', dont_inherit=True)Þ   "_m–÷= _bootstrap_external._LoaderBasics.0 Í Oload@ 0 ò

_register(Inspectk ò, machinery.BuiltinK(er UFroze ò)


class ExecutionN 
\ "):ø P"""Abê ‚ct base < @for £ 2ersÑ°wish to supÍ  a 1 of@Ãs as scripts<ò
This ABC represents one o op§ Ðal protocols óified in PEP 302M  òo c@abc.a¾ €get_file«e(self,º
ÿþ A s which �rQ ²@valu—Aat _Z  __Qto beŽ   cset to¨   J ð è  ¬ä 
M$ ¿Ñ  6 â ïÙ¾ S•5 N²0if ²‚€ (e.g. b 3-inÚ)Ë¿!×0 = Ë.õ  (¶ )„i Ÿ ´ î ’Í 3 :try%  ¥m Jo hexceptà 
K p ¸ ´ � º Oelse= ß)C÷*ÒExtensionFile/ (ÿ B, Re» C ,j\ð partially impleE8eY 2 anÙÓ  Jsù:  7S ô ( Fless, Àass SourceLoðader(_bootstrap_external.SourceLo! Y, Res ’Execution! Ð):

    """AbI òct base class for loading H Ð code (and opH �ally anyG ‘correspon2 @byte/ ").e ¥To supportU HfromZ s, the a‹ ðmethods inherited 0 j 
Ø  � Û õ need to be implemented. To alsŒ O å  `  ¸ � ç  Ž ñspecified directly by this ABCO ³is requiredü IÃ Ý 8not  5 inL � ¡*Ê‘.get_datap " # ‚filename‚2"""	 ñdef path_mtime(self, %):Q €"""Retur� ðe (int) modificaú ; # ´ N p (str).f  ’   0if ] . ø_stats.__func__ is ­$ …  D Õraise OSErrorŸ rœ 1int¿ > (m 1)['Ü ;'])ó † 4 ó aïaaU dictç 0poiM_ üe= £ ÖPossible keysÔ #- › À (mandatory) Hqnumeric]Óstamp of last']  ‹’; ¤- 'size' (¿a    e æs]  v ×  ®.E ÈYÈ$ ô È{:0D Î}ÅsúÃ , ª
¼W2Oê !to  c (if p�ž ¢ ÒAccepts a strÓ Z ] 1 assÑ/ !nyf0ed ƒrmediary‘ories are&ae crea�!IfOEsomelRreasoj ³@ canðbe written because²õpermissions, failG sï:tlyÅ¸
_register(q³, machinery63Fil:B)


j ReRQ(meta Ï=abc.ABCMetaGÃto provide r�3-reWV–es that-4  4  TPexpec&to? Ð `` 9 _9 per(full0)``ß1hod9òhave it either rY2NonŸñor an object compatÕEwith«q 2„ @
ê  xTopen_› Å 
Ã ~ ðpened, file-like óobject for binary reading.

  ðThe 'resource' argument is expected to repres õonly a file nameJ ÷!and thus not contain any subdirectory components… tIf the ‡ @ canE ðbe found, FileNotF PError  uraised.� 5"""  7 ø ñ@abc.abstractmethod9 5def„ µ_path(self, !):'  :‘"""Return¹ psystem 8  2 Ñ •specifiedC õ z‚2doeÁ}exist oà !, [	š�<4is_Ž uŠbTrue iK % 0d ' ',¦consider a‹02 é Î� — ñan iterable of strings over=B    5‰package.Ÿ ló[]


_register(R·ñReader, machinery.SÏ œ Lo ð)


@runtime_check� à
class Travers “(ProtocolÊ „ 3An M`with aÔ0set³  ð’lib.Path M`s suitP  |+td Ding @ies 4@open  Es> w 7 ª	 U?diry ;  ¦XYieldà Æ Ps in Ü* r  >o_bytesu 	 Ž   " i A as : r  Atextq `, encoÁS=None¤ é  ¿     € 9?is_c|ì @is açì 0is_ê Û sm  9 n @join»o , childv '/ E#¿__truediv__| AÀ @abc.abstrað"ctmethod
    def open(self, mode='r', *args, **kw
 !):/  3 5"""  0 ñ may be 'r' or 'rb' toV € as text õbinary. Return a handleK ðsuitable for reading (sameF Ðpathlib.Path.± 5).
; AWhenp  3 s á, accepts encoM ð parameters suchW Fthosƒ 2 õed by io.TextIOWrapper.n    ñ@abc.abstractproperty  VAnameV;ñ# type: () -> str. U�The base C û of this object without any parent references¥ à
class Travers]¤Resources(
 cReader¤ 	Ò &\filesÑ 5"""Ðg ­  Ëõthe loaded package.B ( Í#_r˜ ` $,  —  !r7 §.‹ `).join(0 (ƒ) b  _,  B b öaise FileNotFoundError] R ,is²  [ ® , 0.isÇ (¨ }contenteû a(item. X  @ in Ð àiterdir())
"""I�machineryIòimportlib: finders,œ 	 ¢hooks, etc¡- ð _imp

from ._bootð#p  ¯ModuleSpec# �BuiltinI| /er( _Froze' ”_external{ ÷(SOURCE_SUFFIXES, DEBUG_BYTECOD f I ŸOPTIMIZED2   E •EXTENSION‡ )á º ñWindowsRegistryF‹7  ü,  Ç, S 2 L¨¢Á 2 Oless6 —Extension5  

¢Óall_suffixes(G[€s a listÁàall recognized¯Dule ; ;-pprocessi ðB1. +ç> + Ó
í$io
 $os
 $re
 4abc 4csv %sy+ Temail  4lib 0zip  LDator …functoolL  é	 PposixU 3 ð
collections

from configpñarser import ConfigP ô
from contextlib$ ‚suppress  9   {_module$ D.abcG ãMetaPathFinder) „tertools% þstarmap


__all__ = [
    'Distribution', X  ôPackageNotFoundError dJ   s) µentry_point Efile „metadata1 frequir  Fvers¯ ¯]


class ž !(MB	² !):è ‚"""The pÔ   was not fÚ E."""X E± P° (9  9`collec6æs.namedtuple(', €Base', ' æ value group')€ 1An  ó as defined by Python  0ingE2vent 
Š eSee `tÅ  % idocs oX s, ’<https://ñ Qing.pb á.org/specifica_ /– -– Qs/>`_B ñ for more inform+ . . öpattern = re.compile5br'(?P<ÔÁ>[\w.]+)\s*'D  ? pr'(:\s*& Dattr$ ,)?& ñ?P<extras>\[.*\]" $I )S  —  W ÁA regular exu°ion describ4 Bpsyntax ä a>òwhich might look like:† c "- × x  h/e. :ê  ‚e< �:object.*  # ! [11,  "2]§ ÁOther combin¼às are possible~Rwell..  .ðis lenient about whitespace ar3 F#':µdfollow] – f, and  2any  sDÓdef load(self, Rq"""Loadh  6a#it<iÁ¼. If only a˜`is indéf ¶ žÓ, return that6 !. 5Bwise ˆ '  e Ü#d ž¿w - €match = Ì .. ß .{ ®/ ®# =º (1 .?"('P&')6  _ús = filter(None, 5  # ø') or '').split('.E × Afunc=°.reduce(get=  ,  #s,)&‘@propertyý  ºž Ý ¼Á Œ 6 ÷ y  Ÿ w @ W 'î Àef extras(seclf):
  ñmatch = self.pattern. ( evalue)/ ñreturn list(re.finditer(r'\w+', : ñ
.group('extras') or ''))
G Á@classmethod òdef _from_config(cls,  ª { [4 ¾ ± cls(name, © !, { °  ( 2for 3 inW ®.sections(+ O 1 oitems(^  ]Ö BtextÔ  
 Ò ã A = Cø ÀParser(delimUVs='='  õ-# case sensitive: https://stackoverflow.com/q/1611799/8121834s 0.opþ Pxformü%tr! 6try >2 Áread_string(Ç 2 ðexcept AttributeError:  # pragma: nocž 2  W ÷# Python 2 has no b 	* � qfp(io.S† "IOˆ !!ºEntryPoint.Ve…t_f!__é—5"""� pSupply ) ° so one mayFöstruct dicts of w •s easily.F R ¦  R (z .q n#ž nreduce  B (_  P ? 1.__\9__, g .,4 Ó
1 A)


J ð PackagePath(pathlib.PurePosix 8ð"""A reference to a 0  B 
 F  ™  à ï Jž ó, encoding='utf-8'Y  Ü Bwith¡ålocate().open(3 	 º) as streamÅ3 .{ (	  q_binary� { O'rb'n $Ä  }i B"""R\ /ð th-like object ÂAthisS F   Ø  ½Rdist.] R_fileË Ê‚FileHash ‚c__init`g, spec‘    ’.mode, _,~7 0�pec.partiF(¦Øc__reprV P « $'<‰  ] B: {}» 
 0>'.“!at¼ ~ ‰ { — Di‹ bu€ Ñ �S 
ŒRion pÂ.7¥ Û@abc.abstract‡
• H ŸÈ  i `ttemptæàload metadata / à given by the = ." °a:param(   3: T$  B 0 B !in< 	Ç FinfoQ:N@  ° ó
 if found, otherwise None4 À   """

    ñ%@abc.abstractmethod
    def locate_file(self, path):!  % 5""" qGiven a# ` to a 8 ô in this distribution, retur. C eto it.  ^  k@class� ð from_name(cls, 
 
š Rd Wthe D} P for  g± qpackage@ !.
o  Ú a:param B: Th  1 of: Ì  A �to searcha Å :ë E 	ˆ ñinstance (or subå  ` Preof)F   ƒ “ ˜   r ¨, if foundn raises PÖ @NotF!  Error: WheŽÍ dº '� k ümetadata cannot ber  ¥ *    Z€resolverùäcls._discover_ 's(¨ 7  ODs = ! ('ð Finder.Context(ç= )))©  D @ = n$ Piter( Šs), None+ !if�@ is Ó  ! Ò �   ¶) h Jelse* rnm© )P¿¾‡**kwargs3"""Â0an Ó @able‚� objects.4allÔsË¢Pass a ``cDp`` or p ó keyword argumenH Åconstructingý #a ? Z : h: A ``˜ 
¶ r ¨ ©žo: IterÚ     {Š 2 = Ic.pop(' '$ifÎ C and3 ÛQValue>#("oaccept@  "gx % =' )or…
 (ÿo€ øÁtools.chain.õ   3(.  >} Ž   ›	T Ákstatic�>at(³	î ž s@indiS%d Y C ' § w  @: a 3"ng¯sth-likeò§ `¡Kcretïg  …  ] ? DtHPathÌæ @lib.  )
òB"""S( �  _’ $Ä(s.˜ ºdeclared = ó‘getattr(f$0, '	   jsûð    for finder i÷n sys.meta_path
  ) ñreturn filter(None, declared)
' Á@classmethod ñdef _local(cls, root='.'):  h ðfrom pep517 import build, ‘ ' ‚system = ‚.compat_ (W © ? õer = functools.partial(P  {  a .. , °source_dir=Z  ‰ =z 
 ƒ ,ð
PathDistribution(zipfile. ( �_as_zip(Œ Der))P�propertyŸ  M 4 —data(selfFB"""R ¡the parsedA - ¨ for this � .´ 	QThe r? ðed object will have keys that name a ñ various bits ofŸ  I Ÿ á.  See PEP 566€ …details., 5""" ztext = Ÿ ã `.read_ ¶('METADATA'h t <or * ‹PKG-INFO* 0# Tñlast clause is here to sup~Àold egg-infoî…es.  Its­  u P# eff' is< ñjust end up using& ær"'sª fá# (which pointS  g	‡ B) atJ¶e unchangedO –  ;ðð  email.message_�_°0ng(uˆ@versÑ z‡"'V& 'Š7e d˜ package.Ÿ  ` š È[Q ]¼@ bentry_F$S E# Ph.ð  é , mI _.txt'” ÒsA 

‚Files in{ò {:– ²: List of P <8¸= @ or ~ ÷`ResultÌ` A` if€ŽÆÂ¡enumerates ÕÁ(i.e. RECORDx  s  or SOURCES	 ™6) iC 0misû“˜ Ímay be empty› ‘exists buÀ $ A  fƒ_lines =G   s_®  ± ()6_ 2egg 5N@ake_A (Úp, hash=C`, size
 Ø prp=¬B ^' .U 0 = PHash( ) 	 R elseÏ 3  b .… p = int(  � :  >  ,	¼rÀn result

    ðreturn file_lines and list(starmap(make_! Ð, csv.reader( 2 P)))

M Pdef _ . ñs_distinfo(self):$  ( 5""" ’Read the } •of RECORD! - ptext = O ‡ _ "('2 %')4 Õ   Ï  	 a.splitf (° ?egg¯ ñ'SOURCES.txt might contain literal commas, so wrap eachÝ ž ¥in quotes. å z ê  °ý '"{}"'.format, ý þ ‘@property†  ¼�requires° £Generated % øments specified for this Distribution× Dreqs¼% _q_ R() orÛ 8egg ¦  >Ý 4 Ý¬  Ø  Ê B a  7†H   ó.metadata.get_all('R-Ð '[ 
�  D Z dsourceí  …#('<s?Å7  € Q °._deps_from!šñ) ” Á@classmethod$ ; !cl›   ±  ec¯P_pair¥Bcls.Cs "s(t 	Ep& A = {„  ¨   :Q � sðator.itemgetter('–Æ'), results)Z  E  [I # 9 ini  }ãtools.groupby(2 Ô /, x $ 'q }[ $‰convert_û _to_simple¤ :Js�lstaticž}  s(þ sŽu = NoneŒ   + ! i¯ 9   ,]@  4] Á_match = re. Ò(r'\[(.*)\]$'; 
m9if < ¶ W    ßí e y*(1O  1  "6inuÊ   Äyield locals�@.y± ~ñHistorically, setup/á would solicitP ) •e 'extra'~»÷ð, including those with environ# • markers,@ pin sepaDaò s. More modern � aexpect6< õ	dependency to be definedR  Ô ƒ Åany relevant? Ê ØÀenvironment ómarkers attached directly to that
  òrequirement. This method converts the former= e< ólatter. See _test_deps_from_X `s_text@ Å an example.B 5""" õ
def make_condition(name):"  ³ preturn  ð and 'extra == "{ @}"'.® !at> = %)
C  e Hparsf 0secn i  4 = 
 Uor ''J  � | t, sep, s0 R.partÈ I':')9 1if < Ã : 
è  _  c = '({ %})à  = 
b Eós = list(filter(None, [5  ¸ 	s— :)])N v�'; ' + '· v'.join(i @) if7½`s else2ú 4forM , +4 in ‹s.items(† 3 0dep)  1 $PyieldM ? + Ùð


class Distribuïò Finder(MetaPath ~ —*A  ñ capable of discovering installhb sè M „ 0ConÊ     î  ÀKeyword argu“ás presented by‹ci  ‹T  5 7``dØ ¸s()`` or ``ï .°   ; ‘to narrow[ AscopÜ �a search¸	] : oin allR &s.nOEach#  ð  may expect any¸uameters_  Û`shouldÄ@empt}Qhonor« •canonical2 3parE ` defin2ûelow when appropriat~@  )0 =  ›‚Specific{ ˜pwhich a
V! fW ¼ Rmatch ªA= Pof ``i 1`` " !esM	j6  † “  Áó__init__(self, **kwargs½ i   Avars" “).update('  @Ierty_ Bpath9 ¥ Q  ˆ    @The , QO D 0TypÂ`ly ref®òto Python packag_ snvdefault" B �to ``sys.‡ &``3  ¯ ÄPget('; 4', F ,Ò@abc.abstract$  ã_¬.,ü Û=ã'()’Ž  l	64Rátan iternlsEnces”Àof
        lôoading the metadata for packages match# ã``context``,
  òa DistributionFinder.C( ¥ instance./ ñ"""


class FastPath:    T òMicro-optimized ,  – BsearŽ `a path« ; ‚childreng  I  ò	def __init__(self, root)p  l   . ! = 7   base = os.n . AnameK 6 ¡).lower()
9  p @join. % !, š q areturn¾ @lib.þ * O / N ? 1ren$ G ðwith suppress(Excep~"  Å m ¡os.listdirG k q or '')·  + Q 6Ezip_Ÿ I t &[]Å 	*  < §    /« = zipfileZ  {s( _3 È .  Þ ()  c .ˆ1  ›  ÷ ® ådict.fromkeys( " ã Á.split(posix{ ©sep, 1)[0]-  ¥1 @ in š s 'ais_egg�", Ø j1 = É   F ° 
£  "   =/  ±.versionlesd _ˆ A  Ó 0or 3 p.startsú(‚ v.prefixJ . 2and/ 2end- w'.egg')Î ? Î  p Ì 	Ò " Õ&  j rn_low =4Z   Bif (& `q.exact_¦em4 1or 3 ï  £ í 5  õ 6 ö 4 Šsuffixes#6 Ö# legacy casee   "orÖ  U %) n  Æ«'egg-info' ? RyieldB Í(O)U‚Prepared€   9 3A p n <ôàon a possibly-– dT H anormal˜A= ''X6  %  R.distÏ !, 9 9 	½“ = [''][:TÇ R '¾ lÜ · 4l  ! =Œs  Ä !if { is Non©b, E õ  R �÷.replace('-', '_Q9  <B+ '-= ‘  „ # 	A fÇ "in &esœa QÀess_egg_nameò4 = self.normalized + '.egg'


class MetadataPathFinder(Distribution �):
    @3 amethod §def find_d3 þ s(cls, context=N ".C #()X  \ 1"""S    u  S %.
 øReturn an iterable of all j ã instances cap& D Óloading the mð for packages match# #``É u.name``D 1(orv   ós if ``None`` indicated) alog �paths int ElistI ö of directories q  3 5``.) #ðfound = cls._search_0 (s(¯ †. )J rD@map(ø9!, [ )qòp  í  , e sÔËcè "in0 ø  heuristically.å §  èðtools.chain.from_  ×(Õ  : ‚ . (Prepared(� )ý  ( ì th‘ @Fast
Ä 	U )- # -	+ù  �__init__(T   } é"""Construct aé Ü ! a1 to->ya:param0 1: A @lib.© ù or similar object supportingá  •  P.joinDà(), __div__, .Gànt, and .read_Ú/()› ô .�! =‘ K <  % a, filež` „ Awith¨ Ðress(FileNotFî³Error, IsAD/y #Ke
 Ö M Not4 ¡PermissionE Ÿ † z ¦ Ë ´ 
@encoQ‚='utf-8'mî ©.__doc__ =¤A ! * loB_m E¢ ¦# /t
qE( _wa"""Getl(``ßÌG / 8 d(‰…` `: The 2  £ > # E ` as a s"ngR:Ý  Ñ‘  €1sub“ ¼ Creof’DG 
t aý  -

5”s(**kwargØ- pœ èôcurrent environment3œ :: AÈT Û 	ðdiscover(**kwargsõ$)


def metadata(distribution_name):
    """Get the, A for  ' ±d package.
0 }:param O `: The 2 1 of> # E ¢ to query.M ñreturn: An email.Message containingL eparsed¢ > 1"""F E ' Dâ Q.fromç ù  .$version*  #+  L/ng)` e… ¨ã as defined in>Â!'s/öVô "S3 ke•WÇ# .Ž LÖentry_points(cRè  E P � objectsCÅall installepsqß:= ç "òeps = itertools.chain$  Uable( ñ .È ¤    P  HAs())7 ñby_group = operator.attrgetter(' ', ðordered = sorted(eps,~=F ( 4 (  £ ¸  3by(D *, 3 *! {”   0 p: tupleh Z    ã  , 1in  %ed< }Ò_filesù Ü`a listý2 5 V ÕÔEBL€ dcomposA·>! î  .Õ orequirH: 3menû"Ì   S \A `, suit½ mq Ging.) ".R°  v ü "L Ðs
import os

a3 .  0abcxÛresources_abc# s_common  @  s_a  üdextlib  pmanagerø bppress0 „ /  {_module$ .« ! # R¯ cLoader) ou ôBytesIO, TextIOWrapp& Gpathq BPath? TtypesB M� 3Typ… 0typ�~ „ContextMÕ @IterÍ@, Op¦tal, Uni3
= Ecastr  ðð io import BinaròyIO, TextIO


__all__ = [
    'Package', uResourc eas_fil „contents/    Kis_r? ´open_binary3  Dtext Dpath Kread0  0 C]


µ ô = Union[str, ModuleType]
Ç 
" °os.PathLikeF Adef ² Çlve(name) ->G :`"""If  à is a string, ë ¡lve to a m| A."""4 ¡if hasattrX Ò, '__spec__')V  |areturn[ 6  rimport_S @ A)


­ Rget_p±( ´ sTake a & e 3 or© Ã object and v 3the !.
Ž AIf a7 &,     qed.  If dA ? b fis not‰ ñ, raise an exception.1 <ø & =›Ä )' #iff .SB.sub5 À_search_locaY s¯ GNonet~ ð TypeError('{!r}' 	¦ …'.formate| +m ”n* Plize_É( ”2strw D"""N$ 	 th by ensuJ0 it€ Y~ v“resultingw �Pains h É separators,R Q hd\€parent, ·_ÓP= os.L P.spliñ "thí 2if / Æ ±=IValu>ámust be only a] 9F2th)V C� F Ú G |_ó1er(ð x :œcO?4al[: ds_abc.ýrReader]À 2# Ro WQ P's lo$ p if it'ß
= ñ .  We can't use’ ð# a issubclass() check here becaußp< „bc.'s __2 / 2__(À# hook wantsLPcreatºÑweak referencg º WS, but� 2zip’.
 ber doez0supO O sÀ[Cin aM ò.  That seems terribleN Ê$ =[ˆC ú ' .`?, 'á  _cast(Î	§  k .i  (   ð
† �–:ù=(î p.originj G  \ CZ' 5has�M  ¹ �Ò FileNotFound�f� @D no ‘ # {Z D!r}'K^± ð: Package, resourcñ8e: Resource) -> BinaryIO:
    """Return a file-like object opened for b6 ó reading of the rY A."""O  ô = _normalize_path( )) ppackage( Cget_ ( $  m $er# @ _ 
+ !if› âer is not Noneâ  æ rã : .× _O ˜ pabsolut´ ¡ ¼ ` = os.Æ @.abs (Å  [ ² ñ.__spec__.origin or 'non-existent^'Ù 4 \ �dirname(„ : Lfull7 Djoin ,˜5 =try (N £, mode='rb¢ æexcept OSError> Ñ# Just assumeBloadwaw   Q; all% …relevant6ó# importlib.machinery7 ñs are and an Attribute‰  ‹D  :ñdata() will make it clear what0eedÆ1rom� � .H  „ = cast(,LØ #, ¬à/ Z  � ! =qS ¤if hasattr™@ 4, '¾ &')` Q ãwith suppress(ƒ$  ( y � .N Õ£ 1if - !is§ 
o á _{. =ð   Ù  x Bmess»V'{!r}ö x�found in  0'.ft. @   ~` ² $ Ðaise FileNotFX (€ - Þ€BytesIO(ë q)


defÂT_textˆ2: Pz,Ô  Æ ." @encoý@: st–}'utf-8''  2s% qstrict'{OTexty ½ ÜwÃ` vWrapperu ì!_bÁ#$, Ù =	 1, eÅ = M ?H OA ô b–rl <‘ @ consSÃ b as fpe :ï0fp.³ (À  P¾ `#stX
@deco¯ 8i 
ª AThe ) ðing-related arguments have the sameñ semantics as those of
    bytes.decode(). 1""" ð$with open_text(package, resource, encoding, errors)` 1fp:?  _ ôreturn fp.read()


def filesQ 2: PZ E) ->] òs_abc.TraversableU œ gGet a  9 ƒ from a ¯ ‹ 6 � €_common.* _( U(_get  )± Qpath(K  Ö  ¹ 4: R. × @'ConFåManager[Path]'Ô 2A c  " m! ` provi\! a/ ƒ å object to theó !.
m )If À does not al~ðy exist on its own  H  �� system,J ²a temporary} ówill be created. l : 4was ,‚   H 7 Àdeleted upon† Ating* ö °(no excepti§ sF ‚raised iß  ]  s U TpriorQ @ 0exiq Þ Qer = ùÔ_  þrÔ_›_M>  )ˆ  = 2if  U else ’0as_à ( !`).joine ±(_normalizeu (· &))c  ´@Nu2 § � d _Z  !  u ¿ &ðsuppress(FileNotFoundE)T  ü `yield ú(.e › (g x Ñ qm  Ž#er¥# =L. : H 8 ¥ e_Ý b(8 O £š, suffix=�  Ø<resÌ 3resÒ&is€ ‘name: strBboolJ p"""TrueÛ'$ e' is aØ“ inside 'R 'éõDirectories are *not*6 sÆ<  ÈâW Œ Q©= ° Â+ Ûiw3Non¶ þÆ²0n ¬ _¾¤nts = set( p q  ; ã$inñ= c{ $FasŒ (¼} e 0 / _ 3).i• Y ¾� Þ@Iter°R[str]„ B"""R5a|  q of entÅ-inä‘Note thatß 5all-  ò‰ós.  Specifically, dÀies are
    ônot considered resources.  Use `is_ õ(()` on each entry returned here
    to check if it is aT � or not.) 1""" ó package = _get_ ( )$ dreader# � _ 
+ 2if   {  Ü QNone:F  Ÿ ± # ¢.contents(g “# Is the } µ a namespac þ?  By definition,# sn P# can� Ehavesý W 1= (/  � w ð.__spec__.originÊ  Æ ? or+ E== '] '/ à 'if­ Œë t €has_locaÝ 8)r÷° list(item.s P for  ý in _common.fromÔñ.iterdir())
"""Utility codeE  �ð	tructing importers, etc.7 U # . R abc
 ¤_bootstrap pmodule_ T) ä@lve_Ê & —M  lo’) __findr ”_external¤ ÍMAGIC_NUMBERQ . __RAW_3 DcachÜf  de�_/ ( gn 3  âKEfiler
: ™Txtlib& ‚manager
T _imp ”functools %sy Etype ó warnings


def ½ Shash( bbytes)þ""Rí  $ X of *( �* as usedø " 0-ba @pyc Ü "s.é5 ³ .@  . (Ò,“ ‡ §  ö¡(¦,¼© ‘""Resolvesrlative ø œñ an absolute oneO { !ot' ó .startswith('.'^  % Â  } Z#el7 ¹1* aaise I»¤Error(f'no±  HQifiedïQ{reprÓ 6)} ´ H 
 p'(requi§ l.reä 2s)'ì‘level = 0ª  / �character¨ Ä ¯ 6if  f!= '.'  „ QbreakJ   \ A+= 1 	CÏ [) %:]ª!,  )Ó&;Apath9  1 sth=None"Ý l  @; •  Mì!.
– ²First, sys. sHœÐed to see if ñ'the module was already imported. If
    so, then sys.m1 òs[name].__spec__ is return8 ò that happens to beK  et CNoneT ¡ValueErrorD 5aisB ž ’is not inD † D ˜ €eta_pathG ð	searched for a suitable ­ P withÐ M v P of '< p' given£  �finders. °  X ã b if noO QcouldL ¡be found.
 pDotted )As doÃ @have| ðir parent packageswhlicitl‚�You willQ ðmost likely need§ :exp6 N all\ nu q properL UorderbÖ Q g¢¡he correctä Ñ 1"""<  ý 1ameÑ i:   4*  _C$( , f)& Felse0 � =d-  S $if®!is’>   r  «3 :try% =H ¾0 ò except Attribut˜
B r¢ ¶E('{}I  $ ª±set'.formatø q)) from¶ m 	 Ã !ifo F  Ç 
y  ! }  7 z p A ¤f ~


def ¡�=J )‚ B"""R8  C X TifiedSûhFirst,Ì Ô Rcheck·0seeD C ú‚ÿB!If÷ z € µ$suìñ(contains a dot)L:•!is>¸automaticalžì1TheäD andÎñ  arguments work† s3aèrortlib.i_l 1().l €In other9 µds, relativ Í 1s (Åpleading¿  s)1 kª@full1 ° = resolve_ ” Œë)Š  p.starts[ `('.') £Ü š 5if P  åûÙi % =3 ±.rpartition] 1[0]V  –#ifx5 u    N S = __0"_( - ,Y�list=['_B__']c @   À          paàrent_path = pa !._ G__
  ùexcept AttributeError as e:(  3 ñraise ModuleNotFound0 (+  / $f"r $ a_ ` not f9 R on {š ¯_name!r} "H ówhile trying to find {full: 0", 
 = …) from eP ;elsÑ { #6Non- €return _g d_spec(X ,LJ)^ 
Z mr = sys. $s[> ]1  2if  @ is | 
m�   3 :try%  ™ # =H !._© ÝÙ
B ÐBValu÷E('{}I  š  ­Àset'.format(d)\	� 
â ¡ à  ! }  a z A ¦ f ò	


@contextmanager
def _d‚_to_load¿ Pis_re ! =:8 in³
j ? 
Í3.ge# !ifÒO ^  Ÿ ð# This must be done before open()a`calledoƒthe 'io'Ð] G ðimplicitly imports 'locale' and would otherw ¨trigger anE Õnfinite loop. â ’type(sys)%! Æ Aputt�#heµ E À   6# (Ÿ ð	an optimization shortcut= à ò.c becomes wrongh I ¯ 0.__Ì öializing__ = TruÀ| ³]'Ø 	JSyieldÀ  8E6ionÒì œ 	V     8delW[Ž g     o 1KeyJn     Apass2 gfinallqFalse

 se¢ckage(fxn)b p"""Set ¡  __� …|e.ÌAfunc´Óis deprecated" """¾@& ¡ools.wrapsu Á  “Ž _ ð per(*args, **kw
 ¢  ü �warnings.	 S('The Uðtem now takes caY0f tu€automati_Ay.',  Q 
 DÄ BionWj ì, stacklevel=2ym = fxn° ^ `if getì(œ7, 'b!',ëù ÝŠ“ 2 ¥’Ý 9Ý 5 �4hasr Àule, '__path{__'):
  þmodule.__package__ =  õ.rpartition('.')[0]K creturn5   5setW àwrapper


def  £loader(fxn— ’"""Set __ ±__ on the ra #edc !.
e �This func• ã is deprecated" 1"""* @& Pools.‡ st  
Œ _ ðper(self, *args, **kw
 ¦  @�warnings.	 ð('The import system now takes care of t® ñautomatically.',„  Q 
 DÉ BionWj õ , stacklevel=2)8 ©o = fxn¶ , ²if getattr(7 6, 'l€', None)I 	 
*1 ./ 0 = %] £¡  ê^S C_forð–w ð"""Decorator to handler aectingcpropers R for 8sþ –dF )ed)apassedE †  d ²use instead°e[ Î `name. S 2 D  in<  ¥d0ionA°either from.4 As ifM ðit already exists or7 Sa newv 0. I5…   @new,µ @n __� "__N sO  ô  first argumentš xmethod,Yi4 oTaf, andL $ àaccordingly (i»Tlf.isÙ(2ð defined) will b«tQ �before itÁ 4!to­ œ ` AdoesM �not workí tm½ ^ x ` post-)
´If an excep,0rai"anŒ `or creB¢ _ i� ðsubsequently removZæu  ,W Áassumes that\   @ Ã1Ø  å" a{   esecondài æ Œ•D‘gMð¸@fullñ x
Sith _J !to9(9 C) as=FU0 ½ ) :try6   çðùx œ /   f1 (IñError, Attribute I 2    
G ?lse�  &f “   J í ÐÀge__ = fulln[ame
  ]else:  % ù!module.__package__ = fullname.rpartition('.')[0]E X# If ; ù"was not set above, __import__() will do it later.O òreturn fxn(self, � Ð, *args, **kw
 !)
7 / % ñ_for_loader_wrapper


class _LazyMé r(types. bType):M ‚"""A sub2 cof the€  4 ð which triggers k òing upon attribute access."""W  de!5get# #__Ý   )•B"""T] {  `  ‡ Cand ô  �  @ u n  Ì  T# All¹ ñ*metadata must be garnered from __spec__ in order to avoid`O  usç æmutated values·d# Stop * ¶this method'  Ï1.__]b S‡q 1Get�original Š š ðmake sure no object²Pstitu£ˆ occurre¾ rin sys.$¸ ] _] #= ¡ . ’ 0Figv öout exactly what÷ts were %qbetweenÆ @crea� O Ö6now, Ø|s_then ˜  @er_sŒ¶['__dict__'•×  `? �@ | 6now< d ¿ " 1updE= {} ‚for key,% U-  Þ gitems(ï]`Code tL 2	Öð may have kept a reference*thå£# assignedP, mak�âidentity more Œ anc¶an equality~ ˜  ifÈ ÉiÝ�­ &   á ur[key] =ÿ  ' ‚elif id(/ 1now+ F) !=  ñ g "
Á)b.exec_üu)– º  ) ¼‘used direå thÖiÓ� guarante¯N � D �put intoy5if ¥ g '¢
ü 6 Û ,+ [H ]\ wpraise V³‚Error(f"$ ²{G U!r} "Ø  E  B"suby+edÃ @ duryoa lazyN  °"žUSe afterl!siþRhat's‚ðwould happen in an ecager
  õ# loading situation. òself.__dict__.update(attrs_ %d),  return get! (;  ,  !)
$ �def __del (__! :!  ‘ á"""Trigger the› @ and �n perform Q dele¬ 5"""> o# To t@ àraise an excep9 1 ifI  Ž WibuteF Ýdoesn't existâ 5 !__à Þ ò	


class LazyLoader(abc. "):A"""Að û ñat creates a module which defers*  µQuntilg� € access.Ñ Ñ@staticmethod ˆpcheck_e_2er( )� if not has%  ‘, 'exec_m• '/  Àh²TypeError('U P must» Gine ? 3()'@#§ Áfactory(cls,ò 'erp õ"""Construct a callab(�säç A ¡ made lazy% µ   ocls.__; ) X ð lambda *args, **kw
 S: cls)( )ê €Einit%Û  =� * @ # =ã Q h D¬”Gspeck Ð H .6  0 S ¾ 5 ,ŸS q"""Make{'™  u*ilw 0.__– 5__.Ê  [  {- & ___ = ( @# Do¿ðneed to worry abou„pep-copy=Qas tr
 `to set! ëKw @# on ôobject would havek f ­,6 ue.g. ``¶ ã cNone``P ¶a+GfromK ¦ àt8,  öoe = {} $['ÕF'] =N é  (ÔT  : «*__;  o ÷ _™ T 4 M @ = _5Ml
ð
he asyncio package, trackÐ�PEP 3156Úð
# flake8: noqa

import sys

# This reliesàbeach o2sub¾ sç Y ð an __all__ varig .
¤ã .base_events b * �coroutine 0 œ0 ^futurG Mlock, Šprotocol Àm .runners iúmport *
from .queues i nstream �ubproces Ntask ^hread @rans…  ð
# Exposed for _asynciomodule.c to£ ñlement now deprecated
# Task.all_‡ ó"() method.  This function will be removed in 3.9.=  g   _O ñ_compat  # NoQA

_ ô_ = (base_events. 6+
  Ÿcoroutine  < 	Pexcep¸ < _futurY Olock8 �protocol orunner /ì 5 ;  } G M  ð)

if sys.platform == 'win32':Çñpragma: no cover±swindowsÔ*" á*= ' z a
else:, N LunixK � _ 8 \ ¢East
 $ Fcode “ncurrent.& einspecD 4sys tg5ing 5ype “warnings
-_ �

class A¹ðIOInteractiveConsole(  . 1):
2ð
def __init__(self, locals 2op)X Z…super().. ( )G ! @elf.¶i<ò ompiler.flags |= ast.PyCF_ALLOW_TOP_LEVEL_AWAITŽ G ploop =    ¨ 0runÎ §   Ÿ \ = co…!.F³"()K  e  O —callback(F   Âglobal repl_V ã   _iw0rup	, D  = None D † = False¯  x  O@ = t#.F\2Typã , ½.” 9 6tryÆ     "! =¤(Ã   ¾ SystemExit= JraisÊ 5 �Keyboardp o as exB  ]ú :Tru[  ” ‡R.set_j jion(ex¹  ) ireturne1 d BaseEÛ— h 	i sif not ëð.iscoroutine(cor[o):
  ýfuture.set_result(coro)( yreturn
 >tryQ Rrepl_V ÿ	 = self.loop.create_taskc 5 ƒs._chainD (P ", # 
ž Áexcept BaseE ®ion as excž A ï 8 †ion(exc)Ú ® ÷all_soon_threadsafe(callback- (© .S± u º SystemExit£ Uraised- 	Ú 
0 7if  Ê_interrupted(  õ‹ôwrite("\nKeyboardI3 6\n"§  0 OelseF �showtraceñ()


class REPLT0(7Bing. "):b€def run(Ž �H¥banner = ( •   ‘f'asynciop ò {sys.version} on Ïplatform}\n'B  óUse "await" directly instead of "c .¬ ?)".F ñType "help", "copyright ÿredits" or "license" ‹ °for more in± _ationp ð{getattr(sys, "ps1k ã>>> ")}import ¹ 
j ² B�console.0>actd= ,A�exitmsg='	 4ingv ’F...'Kkfinall)ô warnings.filter ˆ Ž'ignore'ƒ °message=r'^²ñutine .* was never ß?ed$=  òcategory=RuntimeW� '
 @stopüðif __name__ == '__mÀ"_'> , $ ="°.new_event_ ()µ˜  " ” ç¤locals = {$':Y }¥ M keË4 {'–  ',• Ÿpackage__ �'__loader  - @spec U  3 °'__builtins   , 0filV }ï  ) ­ ‚[key] = » !() †@ = AÐ!IOŒractiveC¢þ< ,, Íb = Non6y  ‚ = Falsex 	l6 älBq # NoQAø €IYVErrorã BpassO t ï! =òÛ ×.daemon = Tru± = `.startN CQwhile( t 	¹  %   ¢@_forós   ¼ ÐKeyboardInterwrupt:
  øif repl_future and not z.done()7  B 8 ™.cancel()\ % `_interƒ ™ed = True/ gcontin Jelsew ÷!break
"""Base implementation of event loop.

The ð< can be broken up into a multiplexer (the part
responsible for notifying usj 2I/O] !s)5 9 ~ û proper,
which wrapsk �with func¼ Qalityh pscheduli ðcallbacks,
immediately or at a given time in € Äð.

Whenever a public API take† X �, subsequ4BposiŠ P
arguV`s will4‘passed tog @ ð  if/when it is  ñed.  This
avoids0 …prolifer¦ö trivial lambdasÈö ölosures.
Keyword �  ‰ é  k  A are¯ð supported; this� ða
conscious design decision, leavm  M ‘door open€ku ¡
to modifyÍ @mean: !of  X Ž € itself.œ@

imŽ a colleàs  F.abc ’ncurrent.Å1 "5ool Theapq8 Xitert o( dsocket) 6sta …ubproces, ”threading/  V @racen %sy9 0war ²eakref

tryºÁssl
except IñError:  # pragma: no coverðssl = None

from .&@ort Ö]tants |routine – Œ <ion 
u `protoc†
 1ssl Œ ›staggered Ltaskq Ptrans/  ÃB 4log lo\ à


__all__ = 'Eüð
Loop',


# Minimum number´_] Ëðimer handles before cleanup of
#/ecelled& ÷"is performed.
_MIN_SCHEDULED_TIMER_HANDLES = 100
… 1fra	‡ 
 thÙ ‰ N^led
#œ š mCANCELš ð _FRACTION = 0.5FðHAS_IPv6 = hasattr(yñ et, 'AF_INET6')Í !axR Fout  seé !ø‚ OS limi™ñs
MAXIMUM_SELECT,ÒOUT = 24 * 36,Ud ãbdeprec/ ‘premoval<`Üð*create_datagram_endpoint()`'s
# *reuse_address* parameterò
_unset = object()


def _format_handle( Â):
    cb =  ¡._callback ó(if isinstance(getattr(cb, '__self__', None), tasks.TaskX  \ "# y A the" X    return repR .P )! Belse� + 4str¹ Ö spipe(fdx ý	if fd == subprocess.PIPEQ  '<9 #>'s 8 oSTDOUT:  estdout< ¯  Ú %fd‚ôset_reuseport(soc(¡if not has_  óet, 'SO_REUSEPORT'Ü ñaise ValueError('W _X J 0sup bed by O � module'_6tryá  a  3 @.set "op¬ ãet.SOL_SOCKET,V .£ 2, 1^  C ‘except OS¢ 
_ rÀ '", ­ c  	5` defin!utÕimplemented.'™ðipaddr_info(host, >ð, family, type, proto, flow* Ó=0, scopeid=0�à# Try to skip /0ddr- P if "[ ð" is already an IP. Users migh!veŽ#‘ðd name resolution inLðir own code and pass ) �ved IPs.J ^™inet_pton[•
9 ô :0n {ò õocket.IPPROTO_TCP ‘UDP} or \E ¥ ý  ü  ,ro At  n½k  qv_STREAM8 ˜ =†{ 1TCPu Aelif¶H ?DGRG $UDG Ö  Á ¬  (Ö  6= 0Œ E  ‚, bytes)º0ort¨ 7b''á  C 
:strA @ È A# IfáÂ's a servicefýlike "http", don'tÊT Ö6 Ú p = int( B(Typ±,½; R   ˆ $ ‘Æet.AF_UNSPEC1vafs = [! QINET]‚ W Æif _HAS_IPv65   ¡afs.append“^  = 6Á 
Šg ’ ]à éàj    e`ost.de¶c('idna�`if '%'À ) 7 €# Linux'Û®P doesš!acbàan IPv6 zone ióndex after host,
  õ# like '::1%lo0'. Áreturn None
 áfor af in afs:  E 6try   ñsocket.inet_pton(af,v )4  ' Q# The ö has already been resolvedŽ  2 ðif _HAS_IPv6 andŽ 3== p ŠAF_INET6�  8 Ê  ‡ ñtype, proto, '', (ú	 port, flowinfo, scopeid² Oelse^ &K êexcept OSErrorQ Bpassn0# "› ò" is not an IP addressØ ¢ð
def _interleave_+  Í %s(
 q, first òess_family_count=1)‹ E"""IF � list ofy  N ² tuples by > A."""Øq# Group* 8ess$   † 3_byz ò = collections.OrderedDict(/s1ddru0ddr‚ {‚ ! =t 1[0]h  ò#ifž ; ²= } î  .   ž  [_ V] = [[ ) q.appendpÀ -  H1s =P! Ë Ž ¢.values())ÿ2reo~  Õ ¿F > 1Ò > D.ext“ r ‰ _[0][:R - 1]Â  1delbA ŽŠ   V !a Þ Ûðitertools.chain.from_ Uable(2  6   + Ûzip_longest(*i¼ d) if aE + <Ÿ "

Aó
run_until_complete_cb(fut!ifSãfut.cancelled(    `exc =  ç3ionÌ  �if isinst; ñ(exc, (SystemExit, Keyboard�Wrupt)[  A ð# Issue #22429: ¯ •forever()Dùfinished, no need toF’# stop itI Z   * ñfutures._get_loop.7 p()


if¶Rattr(€ó , 'TCP_NODELAY'¸ •±set_nodelay-   r 1if  .l {P .Ð,à}û¤  A   5 .Þ ¿SOCK_STREAM4 5 ·IPPROTO_TCP¨  g c 0set 1opt¸ 7et.1 ¬ 
V, 1)
:ð

class _SendfileFallbackP¹Acol(¶ c2 ­ ` ð_init__(self, trancsp):
  òif not isinstance(transp,  ÷orts._FlowControlMixinA  H õraise TypeError("< ½ should be E  s %")� fself._? =‡ ! dproto  Q.get_ Lcol(M ‚ ö _resume_reading< $is : Iwrit: s u_paused¤ ¿ . ]   sµ  ø ¹ 0if  *._¼ ‚ ½ |)   Ý sy_fut =A l ðort._loop.create# 7ureñ OelseX QNone
ë ðasync def drain(Š Å „ ·is_closing()  Æ B£ConnectionH  9 §ed by peer3ï §  _ 0if ' 0is ¿ 
é ereturn+ Pawait. å  ß c— Q_madeé  Ë Ç dRuntimõInvalid state: "j  ™  "k :ð	have been established alÉOy.")§ Clost§ 7exc¡ •*1 isñ# Never happens if�C dis­ ±s after sen[ùthe whole contentò g# Thus? 0ion~ ð always an excepð from user persp)veN  if/  @ º  \ ”+._í .{f (Q  5   z‹-isŽ¼ = N  Œ  ®� 1 Ù.lAion_Ý) *  ¢k ç  \ 8 ô* P Ec¥ ‚¦  Ü¢ ç u †lt(False¥Ò  i QÓdata_receivedO  \ñ © 8Ì 
®d»:eofi c ;àasync def restÃore(self):
    ñ	._transport.set_protocol, . )2 2if 5 öshould_resume_readingZ  a ) ^ 
, (U  BwritM úy_fut is not None[ õ# Cancel the future.¤  | ð# Basically it haJ ô effect because ë  h ëswitched back,L ‚no code õ � wait forZ \anymo~ ú Î !.c³ ø X M 8 M² .I( ò()


class Server(events.Abstract 1):
Ö Ádef __init__äõ, loop, sockets,ñ_factory, ssl_context,!:log$ t' ýhandshake_timeouto n ! =u ‘  ; 1‚ $ =Œ   ûactive_count = 0  —‹ers = [] 84colÓ - =æ 2  Tlog =ð    ° !(  2  < Pervin„ _False �_forever1=,éCrepréŠ²return f'<{{_AÄ__.__name__}„=" œW!r}>'` aattachH_ dassert*X eÍÊ 	ØG+= 1a /dea 	? >	 -^  r  Í	# Ž== 0 and¿ ˆ=`wakeupˆ V a    ¢  #._   Í T    q 1 in„:ers!if0& g.done(~  E     í J2lt( )wrstart_s�ß8  
… \Ô * f = TruÊ Ô  Z Ò   +etØ   q.listenŒ #._ŸD Ù B  `*._Á Ž  '   + ,úÕí A ) �   Û]@get_¥ Ë  9}  ! �/isŒ	5 f8 ð@property
    deóf sockets(self):
  0if  #._  † is None"  ) •return ()8  €tuple(tr> ±.TransportSl Ê(s) for s ine !)
H œdef close•  N Zets =7 5  �  µ c s¯ 	/ 
á =à ‚  M £ 1ock¦ V 
ý ? ðloop._stop_serving(§ Ë  I (  † = Falseh 1if è .@ À_forever_futÈ 1not› E and¼  Y     	a > w.done()× 3 / gcancelÎ/ 
 2 ÿelf._active_count == 09swakeup()`async úTstartÀ ¼ 	# }°# Skip one —ð	 iteration so that all ' Å.add_reader'U0# g( erough. ñawait tasks.sleep(0,` =Ž  O Æ DerveŒÆ )( ò
7õraise RuntimeError(¤  ©   f'S @er {œ 0!r}A alé �y being Ï 0ed 	¥ &)'J¢ ú G ÿ ’ � Í#d'% ¨  ž  6ë~  O	ú tp.create54ureI ^ :try;ô 5W Grexcept  aions.C1ledq
V g  | ¼ ñ H  ˆ  U_( d) kfinallÂ  > ¬ ' ~ =: Àwm†  < k »ç = /erl, ºÀ ä    ‰ "._2 ’s.append( $K ð	


class BaseEventLoop(e
 ¥s.Abstract "): nŒ__init__£„  j"r_4ledÒ% 0†( ÈÜ Å     pzû     œ€= collec®`s.dequÒ &   * ëscheduled = []ƒ ôdefault_executorž ?   C ðinternal_fds = 0#
  ñ# Identifier of the thread running ñevent loop, or None i. J % t is notC $ bself._` Q_id =J  òclock_resolution = time.get_ öinfo('monotonic').. M PexcepF �_handlert ò	set_debug(coroutines._is …_mode())[ Q# In 0   ,R exec³ Ðof a callback2`a stepbga taskL  £ Àed this dura® Á in seconds,�EslowQ /B  dulogged.M ` + _| _R Z= 0.1* ’_current__l �_factory" 4ð_origin_tracking_enableè\False~ l8 ´saved_depths < Á# A weak setPöll asynchronous generators that ary @# beÔ it# Qed by_ ÚG_U agens =q Èref.WeakSet(ñSet to True when `N †shutdownH `³ ™³$ _7 ) : = ;/# p ‚default_Ž/orw # v vÐdef __repr__(c!):  C…return (   @f'<{( ô.__class__.__name__}=" 3is_h[()} 'G fclosed+   * ~   F()}>C !)
N  ¾ Ücreate_futureÃ A"""C  A a F" à object attachœo&1"""X  é þ X "s.> (ÿ= ‚  M€  , 6P, *, =RW@"""Sz 0uleI)™ .Ú  ‚ R€U     ¬  ‘ p._checkG7sedÆ2if    ¡ î!is î T  "  “‘asks.Task4,ö Ò  × ' :  1±ask._source'e!
a  + 1del', E[-1]€Jelse= ž Í v
–  2 0s._  ¨(
 È Ä • î  � [8 #h  Ó3et ª  ¢¢will be us’ A.´ n '()ò4If =  œö6! Y ðset.

        If ó-factory is a callable, it should have a signature matching
  ð'(loop, coro)', where ' €' will bB õreference to the activeG `event 6 0, 'L =   õutine object.  The± E ðmust return a Fu² . 5""" 7if ü Ðnot None and  (% %)::  ÷ õraise TypeError('taskQ † õ G 1 or` %')G `self._8 _d $ =B 
& ydef get$ (7 � D"""Rï  L B ,r 1 ifn€default å ¨is in use.7 a 
˜ Ž  _make_sock— �ransport”  ,  ð, protocol, waiter=WA, *,Ó  < Sextra. Cserv; 
ì aCreatek Det t‚ 
È œáNotImplemented¦È 5sl_C (   \, rawÕ ªsslcontextá 	> 2*, Â µ_side=False ‚hostnameë 	8 
; ssl_handshŒtimeoutM   {ÿ_connection_made=TrueR?SSLO-‡datagramTGD	ó raddressÕ 
H#Ç „ Ì -�read_pipeÍ   æÚ  À  x  c Á -_writeÂ BÃ z Ä (`async ünžubprocessŒlºargs, shell.` Ñstdin, stdout Ïerr, bufsizeI Ö`, **kw�  sÍ á(b@_to__}
l Wüa a bytm ' -U,{àwake up the evÃent loop.

  ðThis may be called from a differ3 ithread5 õ*e subclass is responsible for implementing the self-pipe.y 5""" ¤raise NotI9 redError¨ ðdef _process_events(R !,  u_list):N B"""P-  x Rector) /s.u Ácheck_closeds g  if_ #f. €  ZÒ qRuntimeË 0('Eº € 4U '')ã n ÿdefault_executorx ! ¢_shutdown_ÁŠ [  : “ has been	— ñasyncgen_finalizer_hook˜ g, agen ˜$._3 ¡s.discard(' £bif not@#isB(G  DK  Ó b_soon_†Asafez Â.create_task† !.aT(()TŠ �_firstit½ 
Ó6 s\�warnings.	 (Þ  ½   !f"H àhronous generaŽ{à!r} was scheduyfafter  D   !f"µ­^!()°-",{ ’ResourceW¢ ",  =T Z   ®$adªR ¿ E def)|  < ²C"""SˆÁ all active C 
Š J † tr = True) ¶ >2len
• �  ) ð# If Python version{ð<3.6 or we don't haª )ny®  F   #¾gs alivÊ   freturn£  Š@ing_é@s = £­ b w.clear(¨`resultI `await õŠs.gatherxE*[ag	�iag in ‘ ]1½ À_exceptions=p
$  ‚> ëš � h Bzip( *s,u œÓif isinstance3 4, E„ .  d&ª ¥_handler({L *  ð'message': f'an eTÐ occurred dur¡_ of 'G O    G  Ñ Ó'7; '³  ':/?ult) 1Qgen':[‘ }( 
œ:À):
        "ñ""Schedule the shutdown of ódefault executor."""
  dself._ _< å_called = True. 2if 1 T 9 • is None:+  ` ereturn ‚future =D rcreate_ %()& Pthreaz 	 Qing.T ƒ(target=‚ o­ ‚, args=(K ,,)L h.startc *ry© bawait @ ‰ kfinall* • �.join()
, fdef _d� (¡ ,N )i tv  ( ,._K.„(• =€Ñ  V7   b_soon_’ CsafeÁ.set_result,•? �except E –ion as ex£ _ I xion, exÑcheck_running
?%is"   } ðraise RuntimeError('This event loopk al$#y h 'â "if+ @s._g‰ _9  (); 1not
õ x  Ü ”  @'Can> 1runX“ Õwhile another¦ ž L  (¼run_foreverp"""Run û bl stop°  é/ed´ jgclosedÜ_ �   !ôcoroutine_origin_trackµ —6bugXW l*_iŸ i@idencê  2àold_agen_hooksõ0ys.* Uasync œ !ys»! “firstiterù  c ,z  ~   Ï/izH 0nal H ó °ñ0s._?[Y 8  |  ¼
h   . .W_once    '_NpingD  ' Ubreakö ß ®k G v = FalsÏ F # Ù ÈW  # ø  * 
ø N  !`„ 7 û*Eh H*‘_completeOv 	W F†‚is done.Ä ç I/PargummUis a Ç @, it@÷wrapped in a TaskB ðWARNING: It would be disastrous to Ï ·_¾ Awith`Fsame€ � twice --ˆ àwould wrap it ƒin two
  õdifferent Tasks and that can't be good.
1 õ$Return the Future's result, or raise its exception.< 5""" ÿself._check_closed() –running()„ ñnew_task = not fˆ Bs.is
 ( O  0 = 5 ’s.ensure_ - p, loop=– 8 4if k :œ  9F# Aná 2 isø Ad if[ @ didEÀcomplete, so +reM ðis no need to log& ñ "destroy pending¾ Š" messagC p c._log_6 _6 v= False>- ôadd_done_callback(_run_until_³ 6_cb:try ..5 wforeverÂþ
/ Oh‰  … !() Î€.cancell
F €ÔThe coroutine~ua BaseEy� ConsumeO’ 9ion}N !toI zPa warq,6  per doesË°have access«*thˆN Qlocal®û    ô � 3  ?¡ kfinalluB oremoveÂ ‚1.y
^�   R°meError('Ev   ° stopped beó .7d.'¦r*°  $Æ1defL (C)ƒ ƒ"""Stop õƒe ‡`Every ž »ð already scheduled will st õ
run.  This simply informsiÄ × æ  vuafter aå o iteraÙ C p? S= Tru~ ö ì÷  Cð ¾ aclears% Rqueue¯’shuts dow–•executor,Þ 1butÁä�wait forF ,  õ gfinishc c|Q mustB $beŸßÚ0if Ö0.isQ K(âæ
e@"Canþ$ ab  � "‰b 9?] wý , Zdebug+ qlogger. "("‚A%r",À o Î l  Ð j    }.ŸÑ “  „_È Æ‘,edj ( ! =Ÿ ¤._default_ ó   ›ànot None:
      óself._default_executor = None
%   ñ.shutdown(wait=False)
+ àdef is_closed([ !):  A ò"""Returns True if the event loop was < E."""9 r6  O .\ o q__del__m €, _warn= Pings.	 ‚ bif notI § !  § C R(f"un‹ ¡ {„ ò!r}", ResourceWarning,  =" )»  Q v 0run1 (w  *  < .v (Q4  ! 8 R3is < R5á._thread_id is! û� Atime+ { Ä " Ñ according to Ú'Ø2ck.¸ ì @Thisp ð!a float expressed in seconds since an epoch, butZ _  precision,… ñuracy and drift are unspecified 5mayE §differ perë. Š  ï ¨.monotonic¬¡call_later1�, delay,  ñback, *args, context=k	$ÕArrange for a9  T!be  Ã ¡t a given Œ Wb  a Handle:=ñopaque object withY õncel() method thatô €can be u�Pto ca,  z� 	Æeã  $  3 ’an int or×,Ø….  It isp ð always relativeí  @currä AEach‰  RP willz  cð ed exactly onceh @f twÂ  ll. s Áre scheduledm:  z Asame[õ, it undefined which· { WfirstõAny positional arguments afterO ˜ Æ !pa%toe  �  Ü ' 0hen’ !is/ed¨ 1 Ä 0.= 1_at‘. B() +¶™w  ¤ ¶ è Ìbimer._`_trace³ Ü N 1delW)  E[-1]~ ó ® rÝ [Ê n, whenÁ Z2LikB¢)Q@uses'rabsolutøÇ � correspŸè ³ Vž–c_checkÏ(J  Zdebug> 9 µ9  _!  - �(	 à, 'call_at')
   ðtimer = events.T òHandle(when, callback, args, self, context)
F Q  if K à._source_trace9 :$  , ?del) E[-1], `heapq. Ppush(v Â._scheduled,D  | ! u = TrueO breturn6 
 1defÜ Q_soon` ì *í ç f=None)É ñ"""Arrange for aI  ì a to be `ed as ]   ’possible.}  
ÐThis operates$ Ña FIFO queue:D  S Es arR Vin thÖ àorder in which y. õregistered.  EachN v will bC  ßèed exactly onc¤ àAny positional um(` afterq Z ¡ passed tog ê "thÁ  Ï  Va it is; 5ed.( 5""" ñÖcheck_closed(î!if‡v._debug˜ m 9 Xthrea9 !  þ  – (	 0, ' 'q h# =w # 8 	1: 2if = * 	Ë, O Ì_,¯ÒgmethodÅõif (coroutines.is Ö E) or’ <  ' 	4 @func&< k  7 ýraise TypeError(X &f"Z p cannotLuMbwith {Ã I}()"` )  ’Fable 
~ 'Æ E ÷ object was expected by� >, 'À `'got {Š  SX!r}')Ÿ1allWš
:¸ âœ—a ‘A y6Z R’y.append(b Žœt� H @"""CçR thatSPurren  m  * B> � running) µW loopXBNon-, b-safe 6`s of ts¢class make `assump¼A and!Üñlikely behave incorre)Ç — ? �is violatÕD ‘Should onI õÆ" =³S).  T1 ÝsI aresponGwñ M1ond¨ ðperformance reasons.
        """
   òif self._thread_id is None:
"  ereturn . "=  õ ing.get_ident()* #if!  [ ,!=n f õaise RuntimeError(I ˆ r  "Non-t þ!-safe operation invoked on an event loop other "L Ðthan the curr/ aone")
) Ódef call_soon  q (1, ðback, *args, context==)Ø q"""Like0 K s(), butÄ 6.""�  _ ê._check_closedO  Vdebugf   9 0allž (Â  	 0, ' ‚ Í 'ªthandle £. C 	é : 2if = à._source_tracew 
¢ ?del* A[-1]xË �write_to_Ú �J ­ó run_in_executor¨ c, func®  \ o7d '‹ f4if ’ j ‰udefaultØ % )q# Only õB wheÎ3 	j ©being usedA ÿ 7 j s l »  % ¿ 3conW¡.futures.TfTPoolE¦	Ž  B   àý_name_prefix='asyncio'1 ‰ ;   Õ Ï % =D K  Rwrap_ 
z× ‚.submit(èú!),e=u ;Lset_‚ “†ôif not isinstance(r YHL  �warnings.	 
Ë   0'Us ú¤ @ tha‰ � aU‘ N of |'Ò ×ðdeprecated and will be prohibi K  õ in Python 3.9',¤ ±   DU BionWß 6, 2ý €.sõR  ×Ñ_getaddrinfo_Jšð
host, port, family, type,» ¦to, flags)Ö msg = [f"{; 0}:{< F!r}"Ì#ifK 6  Î Òmsg.append(f'l "={ :!r}2 ƒ >    ={ : Tproto; À      msg.apápend(f'proto={ s!r}')
  •if flags:   cmsg.ap=   !={ 
= ömsg = ', '.join(msgZ ñlogger.debug('Get address info %s', 1 z ö t0 = self.time(K  9 5 Ä= socket.get ñ(host, port, family, type, ð ,á N *dtg e - t0
† Õ f² Jting¶ ô{msg} took {dt * 1e3:.3f}ms: {“  &P sif dt >Ú úslow_callback_duration~: ò 
SOelse+ eN ¿  areturn¾  I à ¨async def A s(, G%*,¿  L 
 d"=0f  h 	 $6=0)¥ "ifÒ_£   S „ T_func“_  ´ 4 Š þ , A ö  l Bwait’ õrun_in_executor(h  / TNone,%` 
!hI 	j@nameÑ (j Ä +š	0¨ " Q j ,)e )—  4 —_sendfile™  ,  €, offsetÕacount=Û    *Ù_=TrueA and   Ç ëªout() != 0!ñraise ValueError("the: ö	et must be non-blocking"æ ku._checkç €_params(ü 
è !, æ ? ;tryŒ PA_G \ hnative\ .
B  x� rexcept  cions.S¼²NotAvailabl&0 as( 
¿ ƒif not fz
  x l² ‡î I ð ,î € ¤t b2elfàÄÜ d# NB: å@ sysz1 is0sup5£ed for SSLZs Š  #aAmmapqs even ×< O K Uby OS= U � epçµ
$f"¬ ½ µ aëµ  ‚@et { ð!r} "
            "an€d file { ð!r} combination")

    async def _sock_send/ ð_fallback(self,  ,O ñ, offset, count):H  L #if     O b.seek(9 )1 Õblocksize = (  4 Amin(_  f önstants.SENDFILE_FALLBACK_READBUFFER_SIZEZ  D "if¢ � else coG Š P õbuf = bytearray(º # Ptotal@Ut = 0D :try wh”JTrue ³    u 5 = !6 - z %, $ ™  ;  &if" _ <= 0j  / UbreakÇ     @view Pemory u(buf)[:x ]3 Ðread = await Nò.run_in_executor(None].- `into, ] Å pif not ' » · }  # EOF‹ „  Ñ ®Pdall( r  [:[ ]y e1 +=€ 	^ greturn‹ kfinall'if+ ð > 0 and hasattr(20, '4'` €    Q' +M ØÒ8cheÓoparamsÑ1'b'qhin getž œmode', 'b£ ðraise ValueError("± ð should be opened in Ž0ry K "sä •�.type ==€êet.SOCK_STREAMÿu Wonly 0  K  U úets are supported| x1 isø  ›
j ž 1isiQ$ce©i ©  ™ 3Typ   "t @must!òa positive integer (got {!r})".formatw )7 M ôÜ� ›Ž G'þ,Ó Õ— $"<  !�non-nega%á N ;º, <œ 3	� E»  qconnect¨ÅPexcepÏðs, addr_info, local_adódr_infos=None):
  õ"""Create, bind and connect one socket."""3 õmy_exceptions = []  ‰.append(- )) ðfamily, type_, proto, _, addresW  
 ´ 5  Œ 0 = Â  6tryÍ  Ô %   2et. (o = v ={ =� Ÿ I ú.setblocking(False$ •if local_­ �s is not¦ 
š  U 0foræ _ì @_, l9 = inG ;  ? î     ì .Å(V 
ª %   UbreakB   Àÿ  OSError as exc‹  3 msg = (K      1f'eL òwhile attempting torOon 'B  % {Ù O!r}:3 �{exc.str} Ÿ.lower()}i .Texc =(W ¯errno, msg6 	ø>exc2 Âelse:  # all%�s failedjraise f Jpop(` ¡await self
_Ú(+l
3 areturnøy 
Š ýð !ifY $ � k.closeÎ ô • 
�` 1a ±async def c::ionï \Àñcol_factory, hostlS, por [    c*, ssl$ š9=0,# –�=0, flags	  3 	) … € server_† Bname 	3 ÿssl_handshake_timeou§ òhappy_eyeballs_delayO ¢ interleav` VEƒto a TCP“ %.
† x0 a §!am@rans0„0ion)�a given Ir 1net_ ¬M  5 :]2et N³ AF_INET or . @6 dež s "onM 5(orM @  N£pecified),D ³Ò SOCK_STREAM.¾þ… must beP Áa callable r_ y a8 — instance°This method.ða coroutine which will tryÖestablish the;Àn
        inñ the background.  When successful," ócoroutine returns a
  õ(transport, protocol) pair.$ 5""" ñif server_hostname is not None and Essl:4  k ÿraise ValueError('G  õonly meaningful with ssl')
M � } y `# Use ­ ü  as default forÈ P.  ItÍ @an e£ s  À B# ifF ²is empty orë  et, e.g. w}+an8 ðalready-connected socket was passedK =  a �F ðis given.  To avoid thŒ  « ‘, you canQ ; ib='' --= pwill by† * ' ÔB  check.  (Tr Aalso¦hs that›a numericA ñIP/IPv6 address, we | 0attM¢ to verifyS [exactD < ;º ñprobably fail, but iÃ»possible toF ðcreate a certific  `a spec 6 IP© [so weD °don't judgep ihere.)$ !if O
 K°You must se 
_'Z  A  '=Pusing/8Qout a²'œ ! =% 
aðsl_handshake_timeN è#¾ /'s^ þÿðhappy_eyeballs_delay¸	…‘interleav  
‰R# If 2P  P ,$7to F @es bpImilyÛ + 9= 1O 	¡ !orã 
ž  å?ock!  H	�  "   '~ /R� |) .$beõQed atsÓ óu I Àinfos = awai¦ýlf._ensure_resolved(‚ (~ ,î P), fa7= ,- Ptype=¡ ãet.SOCK_STREAM™=Ÿ�, flags= º, loop=selfä€³ 
Z Ê 9#OS‰0getÝ - #()##edåMlist
€f local_7 ¤l# _[ ; ª g =Àfamily,
      ñtype=socket.SOCK_STREAM, proto= +,
5  aflags= Í, loop=self), ýif not laddr_infos:$  Q ðraise OSError('get2  1 ú() returned empty list'k NelseY v ‰ = None
} Ïif interleav?   ~ Vs = _% _– !s( ,A )] �exceptionC ,[]y ñhappy_eyeballs_delay is¦ Ê #Fausing :  : 	X  JDfor ¦ A in ¨ R  + ?try    � = await Ý ._connect_ (y  5  ý ,� ,
¿7   _break] U %º ‰continueE "O  # E â f, _, _¤taggered.s
 __race	þ(functools.partial(D[  ú  LO)w W‘	Û	O0if $²³ € = [exc � 0sub”     jin sub' vif len(2 o) == 1þF, .[0Q 		Ì  g   ð# If they all have Ò same str(), a Oone.B qmodel =. 	† ï ifj (\ 1excÙ B G )ô  º — + ø  ( 1# Rhqa combiS§1 soï Àuser can seeŸ é #+ �various eµŸ messages£ á–Multiple µ Ï: {}'.formatU Ã –', '.join7.)�ôÀ° RValue”ñ'host and port was©‘specified "no, ½Œ .Ž1 !=- 
‘ú1# Wž´ow AF_INET,	 6
 ðUNIX as long as they
  û# are SOCK_STREAM.
" ÿ* # We support passing AF_UNIX sockets even though we haveI  ÿ!a dedicated API for that: create_unix_connection� ˆDisallow† i| ÿis method, breaks backwards‹  Þcompatibilityh ýraise ValueError(C  'Áf'A Stream S	ð was expected, got {#e!r}')
D PtransPó
, protocol = await self.__4 
‹  ^ F õ_factory, ssl, server_hostname,�  ½ ÿssl_handshake_timeout= )9 #if¡ edebug:  Q “# Get theQ from ¼ Ö because SSL  Zclose¦#9 4oldM 3and&qs a newD  ÿ )et‡   & =^ ð.get_extra_info('! 6et'Õ  ½ qlogger.× S("%r {úed to %s:%r: (%r, %r)"J @   ^  , s", ãè ¨| freturn® $ /¯async def Aelf,8N 

1&7Ÿside=Fals9bNone):µ   Ñ.setblocking(J ú ¥ (  Ber =wgfuture&  —*sl�Ðsslcontext = ž ñ  if isinstance(" bool) else2	·}  _m) ! 
Œ÷ vˆ† ", Ì <§p À=  ]Ð~ Ô! þ 
;à û äŠ äí á ä:tryZ ä( njexcept) ƒ .ì è ŸlE�sendfile(g,w  ð, offset=0, count=8± ƒ     *, fallg@=Truÿ ° """Send a X  CÑ ¸ Rýðhe total number of bytes whicQ†re sent.; 3Theïð uses high-performßC os.í Àe if availabcle.

  ñfile must be a regular  øobject opened in binary modC ñoffset tells from where to start reading theY õ . If specified,Œ �count is) ðtotal number of bytesT õtransmit as opposed toE 9senm   until EOFZ  reached. Fø €position ¥updated onK àreturn or also@case� Perror awhich   3.%()B 0canXu¤ ± figure outã Ý 6 U wDHsent®�allback qðo True makes asyncio"�manuallyyP and _ ‡ §n‰ ò	platform does not suppor§  =  Ý … syscallI Ð(e.g. Windows'÷SSL socket on Unix)½  Raise SendN ÒNotAvailableEOf� msystem‹ v � á f•is False.0 5""" 1if ? Ü å.is_closing():#  rª R:m� 0("Tw 8  -8 "ê µ = getattr(f D, '_² Æ_compatible'ö q  ´constants._+Mp¶UNSUPPORTEDv !if�“ 8 å 	 ” $f"¼  c fed forM% {ò 7!r}¢ ªTRY_NATIVE¡ :try  ’ ”¶await self._hnative| ij O  Ô!, “p / rexcept  Tions.¨Ó as( Æ 0if M¶!  i †ª4 
,  ²Í p  Í0dis{d?:' 3      9 �   #f" ²	‘ ´,®{ ] def ! 7,¼,’*, C ‘Yí(w  %  96T@"")Ü© « #ifÆ ¾  Š  ÑÐ.seek(offset)#
  ñblocksize = min(count, 16384) if  R else : õ uf = bytearray(J )# åtotal_sent = 0 ðproto = _SendfileFallbackP §col(transpI 5ry:?  º ªwhile True   µ    § ñ 6 - ¬ %, $ ‚  ;  &if" _ <= 0j  / greturn] 	Æ  " @view‹ Pemory u(buf)[:„ ]3 ðread = await self.run_in_executor(None, [.- `into, ] Ñ pif not ' Ç Ã }  # EOF— � Ý~.drain(n Ùp.write(‘  [:z ]*  <!+=Ÿ q kfinall'iffð > 0 and hasattr(ž, 'seek')è   . —(offset +M 
œ æ ¡restore()
œ ðasync def start_tls(Ÿ", ÷ Qort,  ñcol, sslcontext, *,B   ÿserver_side=False+ ‘hostname=Y ñsl_handshake_timeout4 "¦"""UpgradeÅ ‚ to TLS.ö  ° RçXa new( That *ò ‚* shoulde using� Åimmediately. 5"""  if1@ is Ö 
Ã�raise RunÅ ÑError('Python4 `module;  ê£available'· Á ¸isinstance(ž‚ssl.SSLC® ; } BTypez ²     &f'L  … €expectedGdbe an u ! oå l ?, 'P  Vgot {U ?!r}Ì  1getû|%'_™€_compati!, XØ [ % { 0!r}å  j`supporê "byõ)­  ÄBer =È±create_futuW ?  Dssl_G , !sl  )4	(w% ls 
Fe#,  G* 6 ¡ L
9 ôcall_connection_maÑˆð# Pause early so tC"_ Í õ
.data_received()" doesn't°# have a chË hðget called beforóe "ssl_protocol.connection_made()".
  ÿtransport.pause_reading()
#  5setV (c )- 0cond ù_cb = self.call_soon2 • %, Š M oresumeL . .% ¹ 	¸ %y:˜  ï `await  %er Áexcept BaseE :ion7 k fclose(   U ñ {.cancel  Ÿ /cb Faiselxreturn \e._app_… , ðasync def create_datagram_endpoint(}$, •_factory,ù  ½  ølocal_addr=None, remote *M ƒfamily=0�  	 flags=0C  reŸ �  ess=_unset•    À¦ Þ ò allow_broadcast= Q sock )A"""Cc c PE."""s !ifA € is not 6G  j! �.type !=. Úet.SOCK_DGRAM/  3 rÅ ValueError(n    Ðf'A UDP Sockeâðs expected, got {Ú J!r}'¼Fif (è8 orå& o%i   Ì - \ 	 Ì0 ¹ £ + yi \    # show the½òblematic kwargs in ²}ion msg·opts = dictÜ =ç  5ÊÖ‹÷ = È!,  = E Å	  — Ì  4P N= 
î ]0proR "ð', '.join(f'{k}={v}' for k, vh JÞ.items() if vO Ÿ ñet modifier keyword arguments can6�be used 'Ù ¿ af'when9 g@specQ Td. ({Û +})æ } �.setblockÜZFalseÍ rØ! =¶{ Jelse”!if¦ Z ÕEÑ 2if 6Z == 0P  Õ   I4'unÃ 0F Þ  > ð addr_pairs_infoð = (((family, proto), (None,  g)),)
  òelif hasattr(socket, 'AF_UNIX') and P B == ! . :J  U ðfor addr in (local_ �, remote )7  ; #if: Qs not­ }   ²isinstance(O ?strG  K ýraise TypeError('string is expected')
½ 6if ³ |  1[0]—  Ø Ÿ0, '\x00'ƒ ?tryã  œ ðif stat.S_ISSOCK(os. .Ÿ).st_mode`  G   0os.W(ve< Ö  * ñexcept FileNotFound§ OpassK 	!OSA  as errH ô # Directory may have permissions only to createa{  Ê ‚logger.eØaUnable? qheck ori ved0le Ä/ 'M  Q  'ÜŸ %r: %r',6 ",	V  ±¿_pairs_info¢l æ
P<), Ô.se“a# joinezess by ):colG  ¾  ¸ Às = {}  # UsLÐorder preserv MdictÈ  Aidx,v 7(0,f �1Î º  ‰  )  - }assert 7RtupleÔ1lenL)×M2, (¼  I  1'2-< C0 2ÿawait self._ensure_resolvedq  x,y=€r, type=§.<o_DGRAMª= �, flags=  †0op=› öÇ fõ?fosn . sP('getÂ  ÿ() returned empty list€ H    5afam, _Ã  N  ¶0in U Ž 0keyhE ?proá  o 0if 0 h©c  :  • , �[key] = [dj]Q
; @[idx@   >essœb# eachG0hasóKð info for each (ûfamily, proto) pair
  Paddr_ ­s_info = [$  3 e(key, . j) for  2 in!  I Ÿs.items()N ð if not ((local_W B and?  Ž î[0] is None) o·  “  (remoteF 1F =)]
‹ ‡   :(  j ñraise ValueError('canÆ 1get¹ @ess û šrmation')q Pexcep seŽ ¹# bpo-37228~ rif reusÝ a st n_unsetª 0 " Ì ©"Passing `n `=True`‰Ino "™  G  ÿ"longer supported, as the usage ofJ ÀSO_REUSEPORT]ÿUDP poses a significantP þsecurity concern."žOelse5�warnings.	 y("The *.ÿ* parameter has beenœ °"deprecated,‘of 3.5.10Ïis scheduledN  š 0val6“3.11.", De BionWË ,ÒËstacklevel=2Ñ h *((eS  äPess, › ®Pess))¤ ‚asock =µ rú ?tryÐS   2et. (] äç = r, type=4 ³.SOCK_DGRAMk=qL ¡ ™  s Q_set_^ ( (j ¬ ) ÿif allow_broadcas  (    F @.set ?optí - pet.SOL_á @ET, 8  ß_BROADCAST, 1˜  ,  l ëblocking(FalseB h   6if 	T JbindS� iU E ° ¡await self8�_connect§á F ¸
0 91 OSx "?excÑ àif sock is not� None:
  Ïsock.close()% þexceptions.append(exc+ ' h 0if g  is not‘ -]raise« ?elsæ Ybreak0 , X  È  ï E[0]
7 ´protocol =  ‡_factory8øwaiter = self.create_futur^”transport) õ _make_datagram_  (  ½ C,~ ¢, r_addr, u ’ n  j_debug’�if local; 
  c ãlogger.info("D� — endpoint; ¡=%r remoteJ   "­  N  "ßd: (%r, %r)",1 
§ ,j %, ü  s ÞÛ Ü Î ¯ × / "Ï Ä :try›aãè& ©
) ÒáÓoreturnP$ ðasync def _ensure_resolved(ß , oess, *Ëð   family=0, type=Ëïet.SOCK_STREAMB v A Pflags	 Vloop) chost, W› E[:2]1 Ö` = _ip _ (5 ,¤ ¢ \0, *, vess[2:]g0if ? Ñ0# "[ "" ¤already a @E IP.—  ³‹[U ± É(   @.get¢  9 Í  =xÔ ={h �  s ", w ) .ˆ_server_” * œgK À Ã Bs = Ý  8 .xã )J ä 	QÂ   †!	Q Â =  , Ž=¶ 	& ïÙ è  C Š¸ OSError(f'2{-R!r}) îæed empty list'^  ˆs‘Àcreate_serveGr(
  óself, protocol_factory, host=None, por 	: )*, ûfamily=socket.AF_UNSPEC% Elags$ šI_PASSIVE%  C { 	a »backlog=1000 /sl/  ßreuse_address  Ü ÿssl_handshake_timeouõstart_serving=True):µ ð"""Create a TCP ' Eer.
! 1Thehð parameter can b1 ÷	string, in that case theJ 5 isK ‚bound toP 1and¶l Calsoq ²equence of }  s H � o ‰  � 1all… sI  ( sY a. If a H ðappears multiple kñs (possibly indirectly e.g. whenC Fnameÿ presolves same IP þ!),:€ƒ is only² oó !toe—  ý<ôReturn a Server object which²1use€Estopn 7iceG °This method… Åa coroutine.z 5""" ÷if isinstance(ssl, boolb Èñraise TypeError('ssl argument mustàðn SSLContext or Û&')Œ?if õ ª 1not0  _ !is ë‰ CValuŠ É      › _W b ‘ð meaningful with� ¢  ˜ / ‘ !orè 
•  × ?ock!  ˜ Cº 	 & '~ /1 W  ¯ � ò be specified at … ÐÅ  I 9if � �  �
º  * 
' P= os.ø² == 'posix'‹ ùys.platform != 'cygwin'� V‰ets = [] !ifQU '„  ö 6  £ 
: gelif (¤ , ,>I) ore  Î    +/ û
collections.abc.Iterable)é C  a �  	 � /se¾  0 í K fH  ÿ1._c§È`er_get9Pinfo(8 #, â 
ƒ Q  fþ ) 2forŠiãsá  �  ´ ðawait tasks.gather(*fs, loop=Ð 
\ ðinfos = set(iter÷tools.chain.from_iterable(infos))

  ùcompleted = False Itry:  : ±for res in S "  & ðaf, socktype, proto, canonname, sa =G _  = x      V ! =] 0et. ?et(o  )[ dexcept> _errorÁ  k ð# Assume it's a bad family/Ø /× ÿcol combination.w  N ïif self._debugv  , òlogger.warning('create_server() failed to  / 'w  O  '6=B%r,  ?)',H v `, exc__=True… � zcontinuq      �s.append( J ÿif reuse_addressV D @.set Oopt(è 
 % Òet.SOL_SOCKETÍ Ï_REUSEADDR, ã ™ Oport– Q_set_Â  ( é P# DisÈð
 IPv4/IPv6 dual stack supA @ (en% Od byá ð# default on Linux) which makeäcsingle!D `listenC Sboth |?ies‘if (_HAS_¼ ?and]  þ  Eaf =åŸAF_INET6 6 qhasattrHÿet, 'IPPROTO_IPV6'))‰ ò  8et.@ = ŸV6_V6ONLY< S0.bi-a+ú0OSEõo as erücraise . Ñ(err.errno, '5 6ßle attempting‚@'to ©  ?:o%r: %sÄ`% (sa,¿ A.str� @.low0)) öN NonZí g	�ofinallð `if notã*D  ÷   /etŒfclose(¬Jelse\  1aock isÐ 
  %¤ÐValueError('N÷either host/port nor sock were specified')
  !if% �.type != ù et.SOCK_STREAM:0  ; ð'raise ValueError(f'A Stream Socket was expected, got {Œ ;!r}€   pets = [ %]
n fÀ #in– s‹  0 ö.setblocking(False)B ¡server = S	 d(self,L õ, protocol_factory,{  å  össl, backlog, ssl_handshake_timeoutV RPtart_ ;ingµ ‹ 8._s# (>  w ð	# Skip one loop iteratio° that all ' É.add_reader'¿ Ù# go through. ñawait tasks.sleep(0,h = ? É ›elf._debuÇ ólogger.info("%r is ï !",
 &erÔ creturn Ÿðasync def connect_accepted_×9et(´  š ± Ì
·* Z=None ¶( )¢Ô"""Handle an ’ £ Bion.¾  ¥@This÷ sused byÞ s Í 9 Ås outside ofÚ bio but7 Duse  0to e(leF € `method‡ ñ
a coroutine.  When comple� thG   € ˜ s a (trans7ff) pair<5""":  ?ock62-	y  @not øP and  6sslÛ ´‡ X     '' ^ ðonly meaningful with'2F 2 = q Ã“._create_õEion_4 ò6ockŒ£ r D, ''e_TO=TruîÝ ¨ Öñ@# Ge¦et€et from XÁ P becaÃFSSL  iclosesj#9 4oldM  ² Ž@new D 
	:   & =^ ±.get_extra_Œ'! +ete®È¯Z°d: (%r, %r)¶r¸ }!1~ $ ¼	Ö ›S_pipe}t  ‚! - = & Ãð er = self.creatÃe_future()
  õtransport = self._make_read_pipe_! ( ÷, protocol, waiter)
L %y:  ` a# (  jexcept) e X.clos   G Vraiseg #ifª ZdebugI qlogger. p('Read · õ
 %r connected: (%r, %r)',–  h 	  7 µ.fileno(), ¢ Eoreturn$ ¶ ”async def… a_writea(vU ‘_factory,¸ )Þ x% =ƒ, Ï q$erÌ_creatõ• öªW\?÷l ñó _log_subprocessî¡msg, stdin 1out 7erròÅinfo = [msg]¨ ý 8 Æ is not None% Â 7 ¡.append(f'e “={_formatr A 6)}'ÁV 8outW @ and¥ verr == Å .STDOUTw ®out=stderr 9out€ <elsÆ f{ ’ 
r í  v î o : a  Ü J' 9nfoNÐ  ¹P
‡€ '.join(š)0Xc_shell#ðå�, cmd, *³ °  76in=V _.PIPE6  ;7   7 ÿ	universal_newlines=False§  "ÿ=True, bufsize=06 �encoding=.ƒ, errors Btext dH ˆ**kwargs£f…±isinstance(¥`(bytesÓ'r).  R Ìp ValueE‡ ù("cmd must be a string"›.
	T 2 Àewlines mustÓ be False")
  Õif not shell:   ñraise ValueError("% P mustJ ;TruI Ïbufsize != 0L , N 0” OtextC  $ Ž Ø  ±encoding isä ONoneT 4 ˜  5 
› esU 2 S m´protocol =  –_factory(©Àdebug_log = • ? ‘if self._" 
á €# don't 7 õ#parameters: they may contain sensitive informationc  ñ# (password) and? ¹be too long- ‹ ­ B'run`P comm; ™%r' % cmd5 Æ õ log_subprocess(J q, stdin 1out 6err!ótransport = awaitGmakeR _( (~ {,˜  , Þd s #, ½¦, **kwargs† 
Ž)Ã 4plogger.|µ('%s: %r', 9 %, µ j freturn ,>
Ù ¦async def O`_exec(i. l pgram, *Ô ,F  û �=\ Q.PIPE3=out M =err6 ñ universal_newlines=ê�  Ð+ ¯/=06 þ=a", ê  n Ë ‹/ifÉ    `nû í	œS % F 	ÙÂÿPopen_5q = (proG@) +  0céYÀhey may cont÷ain sensitive information
  ù# (password) and may be too long- ódebug_log = f'execute program {	 I!r}'7 Pself.7 Å_subprocess(L q, stdin 1out Eerr)C òtransport = await Q GmakeR _( (;  é ñprotocol, popen_args, Falsel { ,@ Ðbufsize, **kw= š #if‹ Í ?
  ì Ù is not None:Q plogger.’µ('%s: %r', 9 %, É j freturn ,v× 
\ Ðdef get_excepå�_handler(,)� B"""RL 5an .  . A, or² ð if the default oneÑ qin use.s  \5""" £  p .ˆ § s§ ,‡ 
° 4Set 1 as— înew event loopÈ .o  £ %If= !isÜ ,C Ú U willÖ obe setP ða callable object,  Åhould have aK ðsignature matching '(À ð, context)', where ' F “  – a referenc¢È !acà3, 'O @ Cdict« p (see `Á °5()`¹ �document>õ for details about¾ i�-     @(ƒü ¿üraise TypeError(f'As´Æs expected, ý  G  sf'got {t  ²lÂ$ =I] sE?  E Ø	€DTzf@Thisq  ed)n ±coccursF´Ú  D Aset,) 0canET ¿by a custom@ Ðthat wants to er	 Œbehavior¿ 6B log¾eÊ� messageš Uother¼ ¿p-dependæ ,¾R.  In.õ mode, a truncatedC Pstack/c¸qalso apO `d show~k Ë SgivenD s(e.g. aÀ  f!fu¿ðor task) was crez ,29anyeÃ parameter hÃ�same meanŠ Fas i˜“bJà= context.get(Ã'message')
  sif not  :    õ = 'Unhandled exception in event loop'
; " õ = context.get(' 
€  1 is� JNoneŠ õexc_info = (type(4 &),’  æ.__traceback__ï ?els[ VFalseÈ ¶if ('sourceM '¢ $inÚ E andú  5  âself._current_:Ý 5 ,._€ )`"['e ¨ _] = \š e Ólog_lines = []V pfor key
ssorted(� ¦ $if' {ƒ', }Ö  D J Einuem   evalue WF[keyŽ  ! j >== ºd  tbÜu'.join(0Ñ.format_list(r )A e     > ðObject created at (most recécall last):\n'Í G Ú+= tb.rstrip(l 'elÓ åÓ CHëÓ H„
c= reprv	.Šñ.append(f'{key}: {Œ9}')·Óger.error('\nãD 6S=\? @def µ_cÁ r(×,ùã@"""CçCthe õs¢ Â&r.« T5 &` argum6pis a diX ontaining _ `follow Vkeys:G %- Z0: Eø Ô;G-s1 (oÇeal): EÕoÏ	4 yfuture'1 F ™ instance0 Jtask. OTask, 
. \ Šprotocol2 P d štransport5 T 6 [socke3 S 0 Šasyncgene A þhronous generator that cause= 	  ø�:0NewWðs maybe introduced� 5 ¹Àe.

        ò0Note: do not overload this method in an event loop subclass.
   õFor custom exception handling, use the/ U`set_) _) Ser()`s Y 5"""6 Žif self.: • is None:,  — :try   B odefaulƒ ‰context)I ª þ (SystemExit, KeyboardInterrupt)l Fraisõ  ~ J TBaseE(8 ñ # Second protecMùlayer for unexpected errors¬  f #³Cthe è ° implementaL �, as well  R Ð/edK  øes with$Ced "a ’"Ã ’   qlogger.´ %('ÿ  ¬ G <Mer',’  K  Öexc_info=Trueµ?els¼ ($/, ` ‘?exc	0 Ü�user setx.er‚ Lµ# Let's try4•F  1  ".¶A {¶â'message': 'Und È 	 =
'-  '::+'Ë$':Õ, }B å   d û < ÿ  R  * Ÿ# Guard 'i'4žcase it i	F Õ/edÍ™!/ 'ã u  e'while E¼G /inä  ˆ $¸ ódef _add_callbackô‘Ë """Add a HÍòe to _scheduled (Timer È) or _ready.¶Passerž’instance(e ,R#s.? D, 'Af öis required herem"ifP@e._cM Jlled/areturnæ  þ   Ý$isƒ À(handle, eveónts.TimerHandle)
  óself._ready.append(h# $ ðdef _add_callback_signalsafe(= #, 0 :0  W z"""Like8 p() but G ¢ed from a L B Ur."""E  \ .z ™  d   # �write_to_ 1()
B · tñ _Ÿ ¯_cancelled¶ ÷Notification that a 6¥ has been M 	³ #ifÊ ¶._scheduled² ˜ D ·_count += 1½ rrun_once)G ò"""Run one full iter± òof the event loop.O  y AThis|ñs all currently ú  Ýñs, polls for I/O,M A Ñ sd ˜resulting: Åand finally / A 'úv_later'6 .   ü ? Q= lenµWÁHif (/ õ> _MIN_SCHEDULED_TIMER_HANDLES andf Ø  ’/Ç ˆ >8  < i mCANCELi —_FRACTION» 4 ñ# Remove delayed Uvat were[! iÐ™ir number Ù# is too high 6new~Y = []  Ù@ in 3Vf «   Ó°&  * U M ‰ = False  * OelseD 	¼ � @   `heapq. Iify(8  ) â 9 = - 	� , 5= 0, Á ÖúÖhead of queue ± \while™ · F[0].ÖQÎ 	-l n  Â0 = W]?popz< 8 ú2 T–out = Non#ifÕ †#or ŠstoppingÕ E ‹D s‘# Compute¹ƒdesired L {Den =„ ÂhEwhenÎ  ù A à = min(max(0, & " -A  ! ñ()), MAXIMUM_SELECT�3OUT¨ K ±@_lis ¶’selector.	 (M 6outÛ' �process_B !s( I ^ À      # Handóle 'later' callbacks that are ready.
  ðend_time = self. B() + õ_clock_resolution8 Swhile% ¥scheduled:  ^ UhandlY _& 9[0]( 2if + ¤._when >= – 
Q  U Ybreak? < � = heapq. Apop(Î u )4  . ‰ = False& C 1rappend(m %)
( €# This ib÷e only place where� | actually *™6ed*ˆ²# All otherA üs just add them to»õ# Note: We run all currently nƒ ×, but not anyÁ  Œ %5 &by8 ^ tæ  § around --C ²they will b� ‘the next 3 ’(after anà ˜I/O poll)ÿ ÂUse an idiom®T ~ð-safe without using ˜s@ ³ntodo = lenú 9 yöñ for i in range(0 )_Ü	_A –.popleft(J  †³mcancelý & zcontinuU#if6Zdebug‚  5 >try   Žâ_­ 	 Œ *  $t0Í  †Ã % @ _._run" *dtG _ - t0q Pif dtÀ¬ Tslow_]P_duraBÝ  Ž ðlogger.warning('Executí°%s took %.3>conds',ƒ  I  ‚_format_ê ÃJ, dtÕ 7 0fin¡¥ Ö _‚:NonãNelseB  i 0 = F    # Neededïëp cyclesOn PexcepH‚ occurs.‹ðdef _set_coroutine_origin_trackP ¾ —, enabledû„if bool( 2 ==  1 .Q _1 
ë breturn–  R$ift 
( ^ ý saved_depth = (í_sys.gñ 	< *()å 7 (
7 p öconstants.DEBUG_STACK_DEPTHb úp & ð )

        selfó._coroutine_origin_tracking_enabled = 
 ñ

    def get_debug(self):   preturn  ." 5 s5 ,V > 7 v  ] "ifY ·is_running(=  " A ñcall_soon_threadsafe¨  ._ƒ ñ ’ 0
__D ó_ = ()

import reprlib
from \    bident
 . ó"format_helpers

# States for Future.
_PENDING = ' À'
_CANCELLED  ’'
_FINISH  @'


š1isfU C(obj�"""Checks au ´RThis µôs True when obj is - Á instance or ¡dvertisingF  ityò as duck-type compatible by setting _asyncio_¦ A_blom.H !Se8 sment inª · Âmore details, 1"""4 ½ � (hasattrø ß.__class__, 'r a') andC  :  Oobj./  ÷ “not None)l_Ý q†backs(cbtó‘ functionÇ ñ __L$__Ä  size = lenB ” 0if o   ^ cb'S� $b(„ €  Ï $ � ,s.µ u_sourceA R, ())b  pš ;= 1… U Ácb(cb[0][0])· 'el5 25 ’'{}, {}'.> ( _E ,' 1 1Z [ /> Z @<{} (>e «  #  _ - 2,2 	Ô -À � 'cb=[{cb}]´Ò# bpo-42183: ÜrPeeded~a proteO"
#ª£ó	or Task result contains œ�directlyÂn Ð.
# The logicq `borrows  å@§Ñlib.recursive¢   decorator@ òUnfortunately, the _ ' ` usage`  /"ssöecause of
# AttributeError:·.Õ '‘°ect has no é. ð  '__module__' e< 0.
#P €fter fixutå th cwe canò2 to¯ Ï ñ based approach.
ï m  =Ç jÃ $b_info(Ô‚2# (î�) -> strC2"""‰ V B = [Y 0._s;‘.lower()]Q 9if  E == !€' Ðexception is ·not None:
  õinfo.append(f'exception={future._ U!r}')< ;elsJ ’key = id(: Ö), get_ident(8  { 0if - úin _repr_running™  ) åresult = '...'|   €   	P Š.add(key}  ' >trym   `# use • ñlib to limit the length of ùoutput, especiallyž  L   ÿ# for very long strings, í  . M"._ Ë 0fin~ Ï 
odiscar 
j "={ ô2if Ø¶._callbacksu B v_format' Ä 9 )È T Àsource_trace\ [ uframe =~ * E[-1]Pˆ áf'created at {G S[0]}: $1]Û preturn < à
import collec	s •subproces 0war·£s

from . = ›protocols Ptrans_  4log4 õlogger


class BaseSq T9 (C .  1):

ô
def __init__(self, loop, š á, args, shell,4  ® °stdin, stdoåÿ stderr, bufsize1  pwaiter=_s, extra @**kwl )Ñ…super().¢ 0  ‚  ± õ._closed = False£  È % =Ó "  ð ! =÷   Å! =
 ip  Ä  !0codˆ   Rexit_Vs = [�¯ aending ! ^g.deque 2 0ipe* +{}‹ gfinish   if°fin == ¬V.PIPE|`pb <[0]G ?outH 1H ?errH 2H Ø 1# CÇwPchildô ˆQ: set _Õ†attribut.è^`start(—= =F=   
•  H " ' )=1 B Wš ù g RraiseÜ  Æ p¯ uroc.pid_  Ðextra['subproócess'] = self._proc

  #if õloop.get_debug():#  * ûif isinstance(args, (bytes, str)/  3  program = / 	N Jelse` 1 9[0]4 rlogger.ž 'Å ù	ess %r created: pid %s',7  Y  “ ,ó Fpid)
S b_task( óconnect_pipes(waiter)= Ádef __repr__/ ‚info = [F ö_class__.__name__ã ˆjclosed F ’.append('! %')ç ;  «is not NonbD rf'pid={• Opid}N ¿returncode U 2 \  c /el³ ‡'runningª Fä 'ƒstarted'ª 	Vstdin Ð ÷*(0Q& ø S !={ ." í Ÿostdoutr  1r ostderr$  2$  4K — S and >  is
 ?out="f'Ž =3 ´ 5outµ  !  [ f]  9 ‚m  f 1 X  ý Ö 
Á ' 4nfoX 1err¾ 5err¾ swð	 '<{}>'.format(' '.join(¤ 	¼&º,¬p, shellÚ1din 1out ðerr, bufsize, **kwÝñò
raise NotImplementedErrori ,0set…Stocolv 1pro I � 4 = $ I  ® I ? 
F ; 0is_H?ing9 
 $ &ed7  2  ™Z »ˆ š� ) r = True^  å2foræ 5 in£¯pes.values” þ  ’ð Q …continue   4 4.ˆ (1if Þ & Y  F ]  i	G  K ð # has the child½  m­ finished?2  [_ [  q _  Št g Ð# transport hûasn't been notified yet?
  ùself._proc.poll() is None):
- 2if , ùloop.get_debug():'  _ ð
logger.warning('Close run p child r áess: kill %r',_ )u >try_ ‡  A .= )()� þ
except ProcessLookupErrorI Jpassp @# Do9¡clear the   referenceEð: _post_init() may stÆ 2runO Àdef __del__(® 0, _= Aings9 if¦0._c.d® ? R(f"un À transport {a ò !r}", ResourceWy",  =" 
%  .K (r ³  Õ1pid³ ž creturnž 6pidä  1  Ocode8 
' 
? Upipe_Î C G, fd vif fd i� :pes\ ¡ €pes[fd].[ Oelse6  ì“ a_checkõŒ 
ˆ 7 &S Oaise{ e±send_signalb ",  j g Š ½ ü	I P Ë�terminat•A \ ? T m @ « : J `async o�_connect_©sgwaiterb  ý $ =î5rocä|%op  «Ü    !ifz`.stdinÅ1notï
É + 0_, ™ @ = a•  M .³ Qwrite¹ (  9   �lambda: W( 0Subµ ÃessPipeProtoî ?0),?  / ¤ û W    ‚.{ as[0] =¦ æ ?outç (Areadk æ OReadå 1å ?outæ 1æ ?erræ m2æ ?erræ 2æ dassertïÈending_callsò ð

            loðop.call_soon(self._protocol.connection_made,   7)
  @for @ Ñback, data in(  ._pending_  )s:7  B )lo|  & F *G 
g  y Q u = NoneW úexcept (SystemExit, KeyboardInterrupt)‡ MraisB QBaseEM ªion as exc7 ñif waiter is not‰ A and  ».cancelled(u  ü $ Bset_¸ vion(excö Oelsev Hpresult(B!)
DAdef «b, cb, Š‡ /ifÛ,  ç · 0.ap ((` éô 	A *š º Wpipe_±ClostÊ 0fd,Ä‡W  r# óG $, B )Ù ¸try_finish(ED  Û ‘_receivedf G   Š  . F A ù µrocess_exitj §returncodel vassert  ¹, ç 2 /
8  :&._ : *¼œget_debugòlogger.info('%r Å S with�  Å B %r'm § 9¡ =>  = ” Vproc.µ   Ï 
¼ñ%# asyncio uses a child watcher: copy the status into UPopenu  .ð# object. On Python 3.6, it| ùrequired to avoid a ResourceWarning.P ï Æ ô + ê	8LÛÉ ñ wake up futures@ing  Õ(I   ' à_( +er/if=!ÇÌ ú q 2LÝ õ � ¢,Ñ"""Wait until× o es!itìu 	   v.£ 6°This methodïñ a coroutine."""Ž  ' 3F  E  / `
ž$ Ž  1 u  Õ Cer =# ‡ðcreate_future()
    ò    self._exit_waiters.append(  )
&   €return a   1er
 ðdef _try_finish(S !):  8 £assert notm ' %ed" #if c Æcode is NoneG  K   8 Pall(p-  _  1 ÷ and p.disconnecth  C ³   for p inu çpipes.values()¹  /  Ì .Ù •ed = True� " c‰ -   _} ‘ion_lost,Í )0& :W, exc† :tryf ›protocol.j (> ¡ ofinallA aloop =˜ / Ð Oproc 
} " ð

class WriteSub> €essPipeP¨ (® Rs.Bas Wcol):s_init__ B G, fd	ø   0 =  ¶  f�fT  Û¤  Ü    † = FalseŒ SCmade“ �transport” eipe =   I c__reprÕ 7 ÈQ f'<{� !__@ò__.__name__} fd= @fd} É    V!r}>'g °  m°  	:h ÷ 	Ì!  X ._c ÂU 2.fdŸ
| 6 g  Ñpause_writing> m  ! É
1 ,_resumK 2 $)
¡ORead ¹,Ï  7 ØèÔÑdata_received ,  	@ipe_ 
3 t  @)
im¤ linecache ótraceback

from . * Ëbase_futures Ðcoroutines


°R_task°Pinfo( ©   8 = N .W 1 •0if ? Ö._must_cancel‹õ# replace statusd h r[0] = '4 Clingè  0.inKP(1, ''b=%r' %k 1get;#(): á 0 =  è •._format_ ä . çe P2, f'+ 0=<{ 3}>'Z Þ $fu5‚é O 3O  6 † "={A B!r}'„  < 	š á Qstack¶ d, limi‹±frames = []M¡if hasattr- ã ð, 'cr_frame'):
     ð# case 1: 'async def' coroutines
%    f = task._ ‘.cr_frame  Öelif hasattr(% R, 'gi' 1'):*  J s Ÿ2: legacyn G D n /agn 23: à ŸgeneratorÛ F m -se» ú4: unknown objectL 2NonÀif f is not  I _while  %�if limit?  "   & F<= 0^    QbreakË    \ I-= 1 Óºs.append(f) ¦ = f.f_bacQ 2 ‚reverse(2 ¢ŸexceptionÉ %tbW* €.__traceh %__ƒ 3/tbI  Õ s "   & 4BRtb.tb† s   ê  Anext× rreturn D€


def _8Á_print_stackQ,c, fileL ex'Ñted_list = []V Óchecked = set’0fornnÃ$ge\ = V  ¬ clinenoï Z   c 2codæ   — Ôname = co.co_ 8 	     &0ile *3in Ã 
Ò T.add(_ 
d « acache.,  +   ' 0 =  # @.get +  n ,ðvglobalsk 
y.>   Ó L 1))
ð >excñ !ifý 
\ a(f'No  Ò{,B!r}'=§ ‚ m M Tg	N ÿ
 (most recent call last):g W S·S !	 Õü.P Ý(ï ?if í  ) ÞF in \ uformat_uð_only(exc.__class__,T  è“ (O „ ô, end='')
import enum

# After the connecólost, log warnings a+ ð(is many write()s.
LOG_THRESHOLD_FOR_CONNLOST_WRITES = 5n ð!Seconds to wait before retrying accept().
ACCEPTðJ_RETRY_DELAY = 1

# Number of stack entries to capture in debug mode.
# The larger the nuC  ,  Rslowe šoperationA ñ
# (see extract_w  ()% ðformat_helpers.py).
DEBUG_STACK_DEPTH¹ 0º Qecond´ ñwait for SSL handshakeÎ sompleteÀ ðdefault timeout matchø 0hatñNginx.
SSL_HANDSHAKE_TIMEOUT = 60.… @Used» àsendfile fallbIc-w  We us  œ @platì Ps
# tp ädon't support L A, orÌ  TLS connecOðs.
SENDFILE_FALLBñ READBUFFER_SIZE%€24 * 256-ñThe enum should be herð	break circular dependencóbetween
# base_events and sslproto
class _SPMode(j ñ
.Enum):
    UNSUPPORTED =ˆ q.auto()  ”PNATIV· ;  â 8 õ__all__ = 'coroutine', 'is 1fun0 Q'

imhDcollS4abc 8 Dools tinspect o %sy  Ìeø& Etype ówarnings

from . ‚ U fufs Œconstant  8$5 4logS ñlogger


def _is_» _m—Žá# If you set _a !utrue, @@¡ will wrapÚ‘resulting´P# genà or objectsñ a CoroWrapper iÃ  ce (definew³low).  ThatI & p  Ë áa message when~ n `is nev^ t€ #edG ðover, which may h„ nB  í `forgeté  � "a*"bp"yield š"L vwith a Scall. BNote· ñPvalue1  MÓflag is taken6 Ê �decorator" €used, so— bG 1any1pit must©$se+abefore¼R  r¨ Ñs.  A downsidO àusing this feai�  Ÿ  {¹sw  ¨ Ó Ðô .__next__ methoyÚ ú  V 2rue+°return sys.Qs.dev‰ vG(not ðignore_environmentf¬  A ƒbool(os.: ñ.get('PYTHONASYNCIOás')))


§ =#

ÉCÀ¼$# Ï ö õU  c!.
³ |Ð_init__(self,/ , [S=NoneŠ × `assert, e5.isëP(gen),�.Ý V q  I  h `.gen =m  À self.func =ó func  # Used to unwrap @coroutine decorator
  ðself._source_traceback = format_helpers.ex û
t_stack(sys._getframe(1))P ó
_name__ = getattr(gen, '_ }', None7 Oqual;  ? w Ðdef __repr__(Ð !):  â  û  C = _Ó   - , 0if > O  S ô / =, E[-1]R  /  n ‚ ñ+= f', created at {L S[0]}: U1]}'
@ ²return f'<{š ”_class__.I5} {a #}>; ?ite S  O h - Nnext>- ¢.gen.send(¹¤  <   O w, value}? % | QthrowŠc, typeG =g  , u’ \ G A < )n Qclosen L % 6 •@propertyò 1gi_¸G ( ~ H runningJ * L ?codÚ 0gi_' F  ¾o__awaiû. À ŸyieldfromÂ , P ~ >delwò# Be careful accessingq ‡~5 -- ñ might not exist.¬ ~7gen…§E'genB %   T °Ã/ 2if 2 !isw  ®B and ê.f_lasti == -1?0msg^'Òá!r} was never "eD 5om'Ã  ž .tbÆ µG', (Š 8 Zif tb€   O …''.join(c. {list(tbK  8  ¼ •+= (f'\nCUhobjectØ
½  :  ðf'(most recent call + ®1unc?to A 	ñ{constants.DEBUG_STACK_DEPTH}M ¶ lines):\n'b‚ Ä ªtb.rstrip(# ðlogger.error(msg)


« f5 f=D"""DR qUmark * "s.êfIf the  4ï  before it ¡destroyed,1an � € message# ¨ àd.
    """
     warnings.	 üF('"@coroutine" decorator is deprecated since Python 3.8, use "async def" instead',
   DI BionW} & àstacklevel=2)
D Õif inspect.is¦ �function(	 !):*  . F# In£ õ5 that's all we need to do for N s@ Èdefined withÝ .$ preturn z 
 	£ Agene>   £  v " =?  ³ FelseÁ @7 ¢ools.wrapsá g  - 1def· Ç(*args, **kwÿ  # 3res_ 	% C  $ òif (base_futures.is
 `(res) ûtÑ  	J  N    isý@ance' ë, CoroWrapper)¡  / ¥ Öyield from re… ! 
     # If 'res'œöan awaitable, run it§ 0   6try_   < p_meth =€ 2.__ _â ÿexcept AttributeErrorV :pasÊ  o Î    <;QcolleÞts.abc.Aä H  C   PÊ  Ý (H &   ¾ pç �`types. (
 9 Öif not _DEBUGô  žQper =�K 
æ ÊD ¨+dsæ 8w =M™ 1 ,M=:³  è   öif w._source_tracebackÄ  $   ?del) A[-1]Ù  $   #[¡< 3.5 doesúimplement __qualname_FU# on KÀ objects, so™ú set it manuallyÅA# Wekðgetattr as some callüšs (such ay#tLùpartial may lack© )p Bw.__Â 3 = t ‡4, ' z', Noneo 9 ÿ =  A œwWP._is_�™: =  @ # F° Ø V ŽÑ


# A markerW *.
e =±P()


„4  #½B"""R&qTrue if‹´_!ed9Õ  » ,A."""r´ (û1 or1  Ÿ  °<Àne', None) iõs _is_coroutine)


# Prioritize native ! õ check to speed-up
# asyncio.is( ô.
_COROUTINE_TYPES = (types.Cn bType,  ‘Generator /
   ö collections.abcH  , S §Wrapper)
_ˆ _^ Àcache = set(â Gdef $ a(obj):s ÷"""Return True if obj is a¡object."""4 !ifÃ F 0 inQ `  Ö ra 
A  isinstanceG ,, =Ÿ  ? `# Justi ðcase we don't want˜í Ñmore than 100f < AposiÒ ð s.  That shouldF `ever hI—n, unless> õsomeone stressing the system on purpose.3 if len(’0) <ž  £ + A.add> %))` L > FelseP  €False


÷v_formatò(¬_iassert §(wg7 = µ ' †¤  s ˆget_namej  ¬ #¶wðs compiled with Cython oStimesãAhaveW ? Ðproper __qualb @__ o  q.  Whil Õ g a bug@ #ini ,Â	RcrashŽ úan AttributeErrorD óits __repr__ fun¢% imq;¡ È ¥˜…helpers.¨qallback=.^ ’, (), {})– C ¡if hasattr' 8, 'a') andÀ. 
‡  Â§. =+ Ì /ell p
h  d ' ` À Ü °# Stop maskp€bugs, exn „mæa friendly way… G ß @f'<{ÿ-1)._÷ 1__}îDout  %>'™ ¦%'{J B}()'„ æ¢is_runningW ú 6try  Œ L  I 4.cr7 k kexcepts
B S W -giW  # [  ' ¡ 8   ¬ @_codF2Non†!cr% 
 À K     Z  `-giU  U "   g åð = get_name(coro)
ñ
    if not coro_code:   ñ# Built-in types might. òhave __qualname__ or __ .B àif is_running(c )_  c  return f'{ @ #} 0 'G 7els— 8 5 
,  Áframe = None ¡if hasattr‚ a, 'gi_& a') andû .   	N   $ W .elY .crY  Y 	$ Ç Ñ# If Cython'sž PutineÆ € a fake ©ñ object without properœ �# co_file‘ò  -- expose thatž =a ú.5 ¨or '<emptyL ">'£ ¡lineno = 0p pif (is_%pwrapperY  ®    �.func isC  &  Šðinspect.isgenerator8 AtionÁF )IPsourcóôformat_helpers._get_; _& B Ÿ 2if  › ¯ ¾ /%, ú 3 E  ã   I  à 
E   krepr =òôdone, defined at {q 2}:{r }	Z L] É ÔM   Ç  ’
Ë �  9) 2.f_ F  1E ì ’ æ C 
ò\ r  ü«2rst 4 w cI •Ã à
"""Event loop´& e ñpolicy."""

__all__ = (J ‘'Abstract? QLoopP. /', 5', 4 dServer+ `Handle  TTimer H  é“ _¢ _“  , Oset_  6 /   7newA �  p °child_watch¦   'l  h _ ÷¡  Y  C 
 -   €)

impor¦”ntextvars o
 dsocket –subproces  y óthreading

from . a 
C’


class oÏB"""Oz)ðed by callback regiõ °‚ methods ¡r__slots$$'_6  Q_args	 ‘cancelled  Óy B  'Ó_be| /  u	 ¨_weakref__> À        '_coñ)ntext')

    def __init__(self, callback, args, loop, co8 q=None):<  @ $if @ is      7 $ =' £vars.copy_ %()M  € . 3    � ! =—  º  ; Å "  Ò ! =Ù  ûcancelled = False  arepr =â  2if ³  “ ·.get_debug(  $ Àsource_trace_ð = format_helpers.ex …t_stack(f  C   ösys._getframe(1)8Jelsews  ¢ú Ö Q_infoü¸   B = [I õ_class__.__name__]ž A
Š  I •.append('$ '½ A x I1notkL <_ _oF Telf._' ,Á Q” F µ
� Š# =D , 6[-1' Ááf'created at {I S[0]}: 71]}#preturn @ ¼_½¶º•  LT à + Ò5nfoÕ   !²; r'<{}>'.y (' '.join(¦ )^ô` f ä # :led_ f = Tru˜Sí ‚ + �# Keep a Ó �esentatioV ¶  mode to k' !E and G   @# pa…t¶Ð For example,@ ÿ log the warning>  ý"Executing <Handle...> took 2.5 second":  À ! =Ç V	( $ ¿ ² ¾ "  òÐA  
‰Y �ó; & �<run4 6tryA y ÷.2 �*a  œ o÷except (SystemExit, KeyboardInterrupt k 7raiÂB QBaseEM  øjas exc¢ .cb–Z1a ˜   0msgf '‹ %inui {cb}'0 1I = {  L þ 'message': msg,  û Ðion': exc,
    ø'handle': self,
 } !if# ù._source_traceback:'  A œcontext['+ O'] =F 	E  Œ ò._loop.call_exception_¯ #r(c )7  3 õ = None  # Needed to break cycles when an Q ñ occurs.


class TimerH( )á ð"""Object returned by timed ¥  � registra¬ Ñ methods."""
¨ ð__slots__ = ['_scheduled', '_› "']) Ðdef __init__(Ú ,º ,i €, args, ##, =ý ®  ‡aassert: q is not‹    …super().j Ç ^ k
?delìF[-1]† Aelf.þ ! =¬  &‡ = False#‘repr_info%û    kâ ) Ç …pos = 2 Ï õcancelled else 1‰  N 0.inN€(pos, f'® ={›¼ &}'Y   6 ¬ S_hashÏª -   Å O )9 lWother> �if isinst» ( ,Ã+  òm · 1 < 5 v ñ ( éNotImplemented“ eÊ ,@ h “ ;3 orER_eq__ã k© g<H>ü <g<H	“ <-q ,å5á8 ==>E and~ ª   $._™6  :  '6  2 £  z2 ñ 
 †Õ o`
ò  Ù ._^rô_S 2ledV /Ç  (; ¥- À):
        "ó""Return a scheduled callback time.

  1The â is an absolut òstamp, using the sam ? ðreference as loop.` 5()." 5""" r˜ ñself._when


class AbstractServer:2 4""" ! s  A Òed by create_ 0().i 8  def close(i )M  ï q"""StopM ðing.  This leaves existê ñconnections openZ  @   ò
raise NotImplementedErrorS | @get_  1GetIQevent0 ö q objectŠ0tta»? to~ !is?ing€  qTrue if| @u Lccep `async _startˆ S  / aq I lž`method  ñ	idempotent, so it can beÜ1ed Q 8   ¯5 Ú�lready beá ó   . -  ;    áä  ^ �_foreverl ä a until�coroutineâ ›cancelled¡ ± !er"  Øë ? 
 Ê   Ú "Qwait_BdØ  C² 0to + Î  ¥ "icÈ ¦ ;#0__aU<r__| ý Õ$Œ 5 3xit4 g, *excù 3 .Ñ %()õa¼   
 ñ )”E­BLoopJ—Èí \ `# Runnh�and stopp  ‘/ Â  ,?runF1Runé; oQtop()a3ëw ‡0_coËt/‡, future>?"""† 1a F/  ˆ 8donZl ø $ â's result, or h ityx/on5r e.í € =pas soon¯˜reasonabl¶ ²Exactly how) 1tha“Âmay depend o“i7 a,Q, but x±no more I/OŸ {€s should³™ô &Bis_rhð(self):
        ó,"""Return whether the event loop is currently running."""
  ñraise NotImplementedError
# ñdef is_closed(self):  ? ~ œs True if Bwas < u 6 q  CŠ g  à .¦  � 2Theó Õshould not beô )  ispidempot+÷and irreversibleW ANo oYƒmethods _ Ñbe called aftxxis one. f`async l‘shutdown_ Ogens S% Á all active 0 ÿhronous generatorswC 
† ÿdefault_executor� qchedule”¿ " o@  @ � 4# Msc 1ingt°backs.  Allu Bse rsHandles¾ O�_timer_h `_cance´Ç ",  
ÑðNotification that a TE ] ¥ has been M Ô  ”  7S_soon†    Ó w, *args� ×  v.& •_later(0,4 Þ^ (  8 ~, delay2 ÆœU #at± OwhenQ , —N î Šßcreate_future@ O& sNòa coroutine object: d w a taskK _ z ,< ï, *, name=NoneÎ Ž °s for interÉèng with threadÊ  6_ "afŠ,jrun_iná,°d, funcf4Cset_ÿ^ /ÄNetwork I/O ‹  F0É³getaddrinfoµ host, port»¡ B
 àfamily=0, type Pproto	 flags=0¿ 	‘  .‘ @sock¤ /, W Àrror

    as÷ync def create_connection(
  óself, protocol_factory, host=None, por 	: c*, ssl$ ƒfamily=0K 9=0,, Pflags Csock3 ¢local_addr 	1 pserver_† Oname" ÿsl_handshake_timeou§ òhappy_eyeballs_delayO ¢ interleav` %):ƒ ñraise NotImplementedError
# +as^¯ Z8P /Ïet.AF_UNSPECV$ °I_PASSIVE,  ä «backlog=10“¼Qreuse‰3ess7  ús{`start_‡ing=Truecó"""A coroutine which­€s a TCP : ±er bound to”A and’.‹ ËðThe return value iB SCt object` ‘an be useQ AstopÑ F 1ther 7ice\ "Ifw  S ðn empty string or !B allKõfaces are assumed\  µ ña list of multiple¨€ets will˜ Å õ ed (most likelyE Áone for IPv4‡another  @6).  9õ parameter can also beO ña sequence (e.g.Ÿ )   = sq!biy˜P b/t' !ei‡ pAF_INET 6 †force thz  Ÿe: 2useÏ × õ6. If not set itdÆ 7minSBfrom›�(default³ +)¶  qbitmaskI0getXinfo(/    ã  op1@allyžðspecified in orderß  Ã Õa preexistinga G #et�Ž “ �  tÀmaximum numbÍ–f queued ³Rs pas´^  MYen() ÿ 9100Ê !slÉ ¬Áan SSLContexƒ`enable 0 ovÓ ©jaccept‹ É % C�ess tellsèp kernel" 1 a ìï5 inÅ ðTIME_WAIT state, without waiL§Ãits natural è5 toD fexpire:¦V•automaticÆz Ž& oŠ MUNIXÛ   Ø ñallow this endpoinL%be­Ÿ  ãAsameµB as ´.@ 9ì Äˆ long asK yn }  X@ wheÖð ing created. Thóis option is not
  ösupported on Windows.
 ðsl_handshake_timeoutD @the  õ in seconds that an SSL serverH ñwill wait for comple� 0of K  3 h ð before aborting" J `connec< �. Defaul� )60· Ptart_„  ? âset to True (d4 p) causeµ `e crea 1 µ @to sI a accepŠ ~ ðs immediately.  Whe
j eFalse,³  á Ñuser should a	S".b « d() or   ! _
Vver()O `o makeg Þ H ª .; 5"""  raise NotI�²mentedErrorþðasync def sendfile(self, trans4 ,  ÷, offset=0, count=Noný h À*, fallback=‘%):‘ ‘"""Send aX ¦ through ar ™`Returnn amv ! o© t bytesò - öN_tlsó öprotocol, sslcontext, *íé  Tk_side=#  + �hostnameI € ›4 
TxUpgradeH 0?TLSO F newpÒ*ô *ÁlUusing¾ p"Žf_unix_p(U  /‹™ á_factory, path”3ssl Bsock S  ²_~sJ rWç úã .Ù  `qlog=100ª¦ 
¥Î (  ¢ ?ing´ óA coroutine whichOós a UNIX Domain Socket²{RThe rÎPvalue^a„ object,Y  an be usedÃEstopÃ e¥ 'ce]  Q Ñstr, represenÌhasystem: U @bind[Y  U  ¼¿ 'to^  JC can\@ally  �specifiedPorderY  us„ppreexis� b [ ì _ Å À  Þ àmaximum numberñvqueued %Rs pasà
        listeó
n() (defaults to 100).

  àssl can be set! Áan SSLContex `enable • over the? úaccepted connections^ ð_handshake_timeout isD     in second 2at ~ u serverg Áwill wait fo� Ž Z  · Šcompleteî 960sî Ptart_] 4ingñ 6Tru6 p) causeŽ `e creaÝ  1 Ž @to sI  þ  K ÿ ð immediately.  Wheã JeFalse,Ö ñthe user should aâ Sû .b « d() or   ! ¦_forever()O ao make\²  H ª .; 5"""  raise NotIQ²mentedError5“async defö_datagram_endpoint(self, protocol_factoryø { ølocal_addr=None, remote *M ƒfamily=0�  	 flags=0C Breus~ 5ess“   Bport >Õ  ãallow_broadcas= Q sockH %):I ó"""A coroutine whichsDs a v vvÁThis method :0try‘establish#9  ƒ Š¦background½¡uccessful,9 • `return� `(transi—col) pair˜ P mustzaa callfS  SaB— instanceL  32et ß‘ AF_INET,J3et. 66*   °UNIX dependa %onm„host (orP Ôif specified)V ÷ type SOCK_DGRAMŽ 	#R tellA`kernel|" 1 a Ý§ & i‚ �TIME_WAIT[€te, with-  ®  ù±its natural>   %toÆ æexpire. If notÂ 2 it€automatinyyó )Þ  ÝÛ Ô  tuT to_ bN ¢  hQsame M àas other existå @ ds are ?  �… long así ‚they allÆ }  Ø  wo beM ¾!.  op� |5notF 0sup‹ ðed on Windows and some !'sQõ@:py:€3:`~]ÐSO_REUSEPORT` °é ‰pdefined=n(  capability™ %un� ~_3ƒÀpoint to sen3d
  õmessages to the broadcast address.
, ðsock can optionally be specified in orderM ùuse a preexistingG ¥et object. 5""" ò
raise NotImplementedError� ô# Pipes and subprocesse¬ ð%async def connect_read_pipe(self, protocol_factory,  %):� À"""Register =    à ñ event loop. Set4 <  ó ÷non-blocking mode<r ` shoul3“stantiates with P¢ ¦ interface*p Ôis a file-lik< $ öReturn pair (transportú •), where  @ sup$ sÔ 	TReadT? � ®P# The'0sonmaccept� ò  instead of jus! µ descriptort Ð# is: we needQ 2own� ñ·close it at½ hfinishgð# Can got complicated eFÀs if pass f.CWno(), c fžx %Sthen   €vªVversa}¿ _write¡&> © 7in ¢. êOBaseƒ	 €> isä al/‚y switch¿4non$¡'©W6�ÿHZo_shell<fcmd, *A q  fstdin=V _.PIPE6 ?out7 !?err7 ‡**kwargsÍÚ __exec/*a ø -"?std,À              ø	stderr=subprocess.PIPE,
$  ¥**kwargs):) ñraise NotImplementedError
# ó# Ready-based callback registration methods.1 ´The add_*() È return None' oremove*  True if so^ ‚ing was 0 dç a# Fals& Qthere" @noth. ¢to delete.È 1def• õreader(self, fd,Ó ?, * R � _U ^ D  +Owrit– >U – @# CoÝù;I/OÌ esFuturesc`async Ó “sock_recvh  , nbyte{P  Y_intoU ?bufÙ R ysendallP OdataQ &yconnectQ oaddres÷ 'XaccepS ž & ï IfileŸ   ð, offset=0, count=¨eD C*, f. – ó# Signal handling? 9 s _ ?sig«3^ À ÇTask factory½ “set_task_ h a  	gL C !# Ãc$er¢Z  exT9ionf_  H  î H ,w Q �default_U contextU  ±R 7ñ# Debug flag manag1 ¸d$ ý¬  R< ð, enabled):
      ó6  raise NotImplementedError


class AbstractEventLoopPolicy:
    """A  ! p ð for accessing the e: ¡ loop."""
9 �def get_ _ b(self)W [ ;GetA ^  T òcurrent context.V  8 §Returns any ” object iæ œ EBaseÚ ± interface,¥  O "or$Q øxception in case nof Ähas been set« J ³ A andÞ  @÷does not specify to create oneé ñIt should never rù   N&  h ¾   ã   ŠsŠ,±
�S� µ  Õñ f   ‰ ?newC
 <ð Xa new…ëaaccordèeo this‰iÀ's rules. Ifˆ�re's need¼  À 4 0 as! d 5forO � ,É ÿ must be called explicitly!°# Child pro_€es handlã ³(Unix only)" × ac3 �_watcherdb  ´2 e %."ê Á JA 	s #, a P ~ "€ ­ ÏlDefaul°(È’ 3"""8 È+añ×
~!InhA à, each thread hits ow—`.  How¾A, weh Ä� automati/yþ
ÑBby dé 7 …AmainD t s; other‚ 's 2 ;hav»6O2 !�ies may , Qdiffeq4� (e.g. a ä‘le global| Ñ7 , 
Ê  °
Ì p¦  4 G uZ S someÆ !no‡$ofó §[whichêéÁassociated).R  	 n¡_factory =1Áñr_Local(EPing.l ( ÈA 9     P_set_°¢ed = FalseU  ‰Œ__init__€ ó!._` 2 =  ~ )=  ÆVx C 4"""Å% {\'À       Returñns an instance of EventLoop or raise# Ãexception.
  5""" ð if (self._local åop is None and* = Y not 2 ¯set_called0 òthreading.current_  ()g    Emain )):x p  h eå R_loop¶ Gnew_ 5))
8 *if§  5  r  Ù 
^ -ð RuntimeError('There/ 3no ¸  i  H "n º U %r.'t $ %-  ç M ê W.name· nreturn» Ù  deÖ tô  ,– 5§"""Set the¶ .ù 7  îõ [Ãe= TrueÒ aassert_   = `$is{(¥, Abstract†)C 	j  . ! =P Ò Æ 1 
Ì ÈCreate a newÑ C  n�You must Ç  Ð ®+á) to make this‡M «  ž (—òop_factory()


#~× Ó policy.  The 0 itÕ  Báalways global,€ 0 if” #
#. ñ's rules say thaÈŽ!an2 ‘3perZÀ (or other
#¢0ionƒcontext)� sdefaultg  Ž Æ»bk ’e first
#GXto gem_Ü G().
ƒ ! =5 ðLock for protectingâ Ð on-the-fly cÓ§ 
§Ÿ  .
“3k =ã  = X qQA TLSd  > @runne õ‡°, used by _Ä ! ¢.
class _R6  5(Ï e 	€ €_pid = (ü,ã  ó_R * =M  !  «z (W B"""Rè½ @.  RÂ) a—)Rnone.TÖ@funcè ×Í ’-specificÓþr# NOTE:6 ðimplemented in Còe _asynciomodule.cÙ  ö â M!if… Œ  7pl3no MÝ'h x o 0


TÏU ¸ � 5ö is a low-level pntended9%beK_sTzZÀ)
    runninòg_loop, pid = _runnin . È_pid
    if  ò is not None andA á= os.getpid():8  < ireturn@ ¹


def _setu (u ; ¤"""Set the; p event $ !.
_ @ThisŒ ÷a low-level function intended to be used byE &s.E 6 òs thread-specific& 1""". �# NOTE: t{ 6 ñimplemented in C (see _asynciomodule.c)E 	õ j1 = ,H),Qinit_µt_policyi~global ! p ¦with _lock—/if.   M Õñ:  # pragma: no branchL  Ó  ðfrom . import DefaultE¢QLoopPž 	1 œ / =8 (ö /geô C"""G"@curr "  .¸ï © _g" ËÊ ¥ Ðƒ 	£Š ×µ Þ#IfÅ –,dk …restoredí gassert@  òò  or isinstance(´ œ, AbstracÙÇì # =W 
À­B"""R3an !˜ÝÁWhen called m°a coroutine® a ð back (e.g. schef!d ð ; Q_soon»ð or similar API)K&is-Ãwill always æz
 IfŒ re›/no¢ @ sete ed ] “ a ªesult of `,à Rq1()`ø –@�¼  ‘ ö(ö9if * ^ç 	) ô   [ =-()ì G
X%OpEquivalÿ!toOing b K 8o.5 › 9newž?"""— G “ 18 –  þ Öchild_watcher{À"Equivalent ðto calling get_event_loop_policy(). ÿchild_watcher()."""
    return; º


def set_U ] !):Y æ"""Equivalent ¦   ’ ª U ± B ð 


# Alias pure-Python implementations for testQð purposes.
_py__¶ qrunningb= =  *  † *  * S   ( 1+ =±b


tryy# ñ() is one of the most frequently?!ed˜b# func	ÿin asyncio.  Pure 23 is; ñabout 4 times slower than C-accelerated./ cfrom _a  …]ort (O<, _8,@  ¼ <,ò)
except ImportError6’pass
else *C›   ‹ /_c#- Ú  P í -_ce+ ,	4"""x ø`ñ

__all__ = ('Cancelled'õ', 'InvalidState bTimeouL'�P'Inco_VteReaG ÃLimitOverrunG ¼  ó   'SendfileNotAvailablo ª)


class � a(BaseEÛ6ion‚pThe Fut½Ôor Task was cÚ ö S É (M  opÅ@ion ;AededSégiven deadlineV 4[ �is not alC°d in this sw	\ )@(Run‡^0 @ sys5 j f!.
‰òRaised if OS doe� 0sup5# sŸF  3‘socket orG  ÄR typeó s¿ K(EOF° F + p read eµÒ. Attributes:µ ¢- partial:( 0byt‡ trÊabefore¬0end
astreamSreachð	- expected: total number3   [ P(or NX±if unknown)²  é  Ì 'ä__init__(self,£ ,f � / %r_a Ð= 'undefined'ˆ ðis None else reprÃ(expected)
  õ-super().__init__(f'{len(partial)} bytes read on a total of 'E L  Tf'{r_m $} 
 L '~ Celf.k 3 = 
 X s = =H 
" ð def __reduce__(- !):  ‰ ²return type !,  o  , 1 .^ ó)


class LimitOverrunError(Exception_ ð"""Reached the buffer l8 ò while looking for a separator.¹ ¢Attributes¯ ³- consumed:^`numbereUto be  A.å 1""" ¾ Ô ¥, message,8 ¹  ñ- •’ % =E ½ o vsargs[0]v^ ô)
import functools 0ins« treprlib %sy) ótraceback

from . S  d �tants


µ Aget_h °ion_source(   3 = y r.unwrap! h%if  is-    Ç ^acode =Ï 0.__ !__>   “( ±.co_filenam¨"de ’rstlineno� u ssinstan® ,] ,ËÁ c _ì .¹ [ omethoda #ï DNoneƒ°format_call³† , #j  ¦ _ôK = _5 s.  , ] Ï Ñ 0 ü ( 2if + µn ¢+= f' at {$ T[0]}: 21]}óÙ 7 Þ  È p_and_kw ( ",  à A"""FÍiYðrguments and keyword ;ÄSpecial case^Pingle<ðameter: ('hello',) is& •matted as )D`# use qclib toÍ Þalength‹‘he outputÒ¢items = [] f­ Ò ‹  ƒ.extend([ .  )—  1 0 in s�(�	G pf'{k}={F 2libN Av)}'N @k, vO B .9 "()Y rr'({})'.R±(', '.join(, )*  §	r^ ³, suffix=''Óª@  °n  '7# +q l _Ò æ)Ð.args, func.kð,eywords, suffix)

    if hasattr(func, '__qualname__') and  . :<  @   ~_repr =' & /eld `  \ 
# X /se,  � Î ä ¤ ð+= _format_args_and_kw ( ",  )a #if+f #+= + areturnñ


def extract_stack(f=None, limit )Z ð"""Replacement for 8 jeback.D ñ) that only does the‚ ánecessary workD ñasyncio debug mode.+ 1""" €if f is – ‰ Ñð = sys._getframe().f_‹ 5 À 9 0# LÙ  ’ ¢ amount ofŽ ó to a reasonable K, as#y ‡ ñ # can be calledÑ ãeach coroutineš}ture inæ  E ª ñ= constants.DEBUG_STACK_DEPTHÕ  ' =vS²tSummaryƒ(•DwalkÖ!),D  p  “ = 8 òookup_lines=False,» ’.reverse( Ž �
"""A Fu'ñclass similar to¬!on@�PEP 3148.Á
__all__ = (Þ 'B ¡', 'wrap_fQ   $is  
)

importq‚current. s utextvar tlogging" Ãsys

from . O Cbases s ]event Œxception ü¤helpers


¾ 8 = e . ¼


_PENDING#  ½
_CANCELLED#  �
_FINISH$   4


˜ BUn ´ò - 1  # heavy-dutyò:"

Ú¥Ì‚"""This  ðis *almost* compati‰0witRn­.I .#ÂDifferences: *- [ ó not thread-safe8 ’- result(Ee•a() do 4 ñake a timeout argu1andv`  raisê > Q when¹Z€ isn't dÇ5yet| @Call¶Ñs registered ð @add_/ _[ #  ¡ “re alwaysq€ 1vial gb loop'" u_soon()o gtthe wai0as_" Sleted¸�  methodsÐ / ,cošt packagcð(In Python 3.4 or later we may be able to unñify the implementations.)
    """
	 ö## Class variables serving as defaults for instance+ .B ò_state = _PENDING Òresult = None Pexcep† 	 Iloop ùsource_traceback cƒ €l_messagv _ ±# A saved C$ �ledError½ ³later chainÜ 6an � scontextÑ d tled_exc~ Ã ñ# This field is used` ó a dual purpose:- °- Its prese9ñis a marker to declare that a cˆ¯sD  ÆðFuture protocol (i.e.‚ €intendedQ ò	be duck-type compatible)× `#   Th¿ðlue must also be not-H,F  enb a sub” ¬ ” Pat it‚ 7notm € by settft,!to„   6 0set+ ò__iter__() below so÷Task._step() can tell �e differYubetween r`await 5�()` or`y´Gfrom Ä(correct) vs¢ #  , ? 4(in) & ¡_asyncio_f˜`_blockó r= False\Y__logÈ ðdef __init__(self, *, =‹)D¬�Initializ."e v .f  #  Øo[�al event_J P arguüø allows explicitl¥e2 > M : bobjectábJv € If it's6 ‘avided,¦"  5 ¾ N  „Hh ä G    Š    !if       $.× =J fs.get_ï (Ü - $el†    	?  ã ð  @callnes = [] 2if    3 p gdebug( ^ º ðformat_helpers.ex×t45ck(f  C   òsys._getframe(1))ãó_repr_info = basex#s.	 ! 1 ]6 ]¯ òreturn '<{} {}>'.£ „1.__óÍ__.__name__,¥  ©  ƒ' '.joinB v  ¬ $()À � 3delëŽ !ifHd
0
ÿ#W ‘CR() wa„ º ‚2or uV() orÞ · À# has consum8&he+ 	ì ) © : BE = {  n 'ª'Î   2f'{N t}’ æ 0eveÝ Štrieved'”'Ž À': exc,
      ó'future': self,
 % }
 !if õ._source_traceback:#  5 œcontext['' O'] =B A  | ó._loop.call_exception_handler(_ !)
4 ödef __class_getitem__(cls, type)› ¢return cls: –@propertyH 6logÕ (‹ @   9.__+ Q 
 .setter^ 	W, valc Šif bool(  Túraise ValueError('m ñ can only be set to False')�  D º " =' Â  M1getÿ B"""RB the event §  F;õ is bound to."""z ( û   "ifE vis None® ± õ cRuntim÷ "j `objectq önot initialized."ñ òq r  à ñ_make_cancelled_eO ‰‘"""CreateÞ C- { [š !if “  is…V .P Å µThis should¡ Úe �ce when ÜTing aD aôa since»  K ‘it erasesw csaved  ( S5ue.5 ˆÁÿ €_messageG~Vexc =X *s.(h;elsº<  o.…† P Sxc.__Ú %__5¶ µ%xcá r# Remov«’reference;ð we don't need tŒganymor"� ] ! =�d J2excÙ IŽ '`, msg=CD9®]à and schedule  ?s/IT/  is alreadyÇ De or Ced, – èÆ.  Otherwise¼RchangR Q's stØoJ “  Í—  ® /Tr]G—_ ¿  ‚† »!= _PENDINGûkÛ ƒ b : Ë= _CANCELLED! ™W  =�# _ñ _í ÐX ë ï_4  ’ 
óÑInternal: Askú+ uoll allý'ThE are, S Û ¯  ed as soon åpossible. Alsoè Rclear) 4  gR listÀ    """
    õ    callbacks = self._ @[:]
#   fif not. :   ureturn
 I F = [N 5forK …, ctx in s\ L Ploop.š `_soon(
  ¶ ,´ â, context=ctx)‡ àdef cancelled(E )X A"""R³ ö True if the future was: E."""× ç s ò._state == _CANCELLEDz ñ4# Don't implement running(); see http://bugs.python.org/issue18699
r  Â Odone½ 0is 4 .‹  œó-Done means either that a result / exception are available, o, 1the’  O % .²!= _PENDING¡  ä ˆ æ  ›$ T this§§representsí IÊphas bee[	¤, raises C‚Error.  : É ç $'s& isÓ8yet L €InvalidSO K  À O  žP and � 'an}Bset,â ‘"is± %d.O c/if�î ·5excáUmake_ _e%()a  / Ú  œ  k  ÊŠFINISHEDj ; T-s.2('R{!isUvready.'‚  ®À.__log_traceêv = Fals‰‘ 	. ¥ONone” W / Û 	×jž/ ¡' ^ Dbset onÒ ©0The_$P (or ¶  Š'no H ):§ ¥ed only ifÀ aÐ- m
F B  \  y©çs> å±»E#´?set²Á²1k@add_a‚sv, fn, *ä )
ÌUAdd a@` to beu@ whe�Ûð becomes done.

  ñ The callback is ó#ed with a single argument - the future object. If
M  ö
is already done when thisf ,0 ~ H tschedul‰  # e_soon." 5""" õif self._state != _PENDING:$  ¢ % Uloop.R A(fn,> £, context= )< JelseJ $if.  Î ;Non   n G $ =+ £vars.copy_ (c  1 Ÿ  š  �‘s.append(¢ 2 1))
– ò# New method not in PEP 3148.# °def remove_€_X (g V, fn)Ó A"""R+ ñ all instances of a ‘ Q from²"L Ñ [ c" listw  É qReturns, `numberJ  5  H s— dÍ…filtered± Ês = [(f, ctx1 l 
 Dfor +   ì .J <
2  @if f>5fn]* CÑd_count = lenBV 1) - º ¯ i�J | � § n[:] = O •  aHœ öP# So-j³ed internal(ðs (note: no set_running_or_notify_cöCl())Ì C* Qesult÷ 1, r 
=AMarkî @ andh 0 itò B W  ò (If0 ,ã™…, raises€InvalidSú_ErrorV#^ Í exceptions.` B(f'{°n1}:  F!r}'ï! +# =4´  ? Ë = _FINISHED  _À(ÿ™¨ œ Ÿ&anï ¡×Tif isé(8g, type> ¬ & =+¼!if6 F )�StopIteraH
ïeAType²)(", ¸¢acts badlyŒ0genL Fors ù ž  "x0can"be/ào a Future")
   õself._exception =  
" "  $ ûstate = _FINISHED  ü_schedule_callbacks()$ �log_trace  � = True
% àdef __await__(s !):  † bif not‰ Wdone(     / ô
._asyncio_future_blockingg  )  QyieldP ð  # This tells Task to ˆ ° for comple.� ñraise RuntimeError("Ú ò wasn't used with ¬ ")areturn› �.result()¤ BMay X Btoo.4€__iter__–; , Amake¹ batiblej 'ô ñfrom'.


# Neededæ @test+ápurposes.
_PyFH2 = 	 1


¥Ãget_loop(futˆp# Tries9 ý1 .* ò) if it's availableN€# Otherw0f7 G  us� ‘the old 'q ¢' property= 6try#l   =T{ ´Ó’ Attribut“; Bpass( 6lse ŠY Í Afut.• Bset_°ð_unless_cancelled)",  1Ñ"""Helper setz ë # P only1    8T A."""´ !ifð  ¬ '  ° £ (j )½ tconvert:sexc(exc¬ ñexc_class = type U  if. âis concurrent.¸ 4s.C]š<ion* ¢(*exc.args/elm Timeoutk ( i "€InvalidSn - s w 4excž ¸[¥�( ƒ, source¶�"""Copy '  ö  a*0ure`a­è[cassertW .xøl .w”   ;Æ  Ú órunning_or_notify9É2$ =š  h  1 is97NonÛƒ . /(_
)‹
¯ ¤� ZŠ  ol    �*pyÙaT, desfÒ"""Internal h>Lto cæ noS„*TIÐther Future mñay be a concurrent.futures.F ‘.
    """ ñassert source.done() ñif dest.cancelled():  > areturn A 2not0 
C X E _ t Felsee ´exception =   1  Œ 5if  @ is Š 7NonI  & m Eset_, ¢(_convert_   ( ) ; 
–   fresult—  ”  % r   ã)


def _chain{ (',B0inaõ n@"""C* R two © ðs so that when one completes, ñdoes the other.
¨BThe ƒ F (or3C) of_P will>˜copied to‘ 8I¥  pÜ |  Fe gets  B too< óCompatible with both asyncio�O and»!ifì"isE)C  `isinst¿ ,	 œ D� G óraise TypeError('A§ Ärequired fore’argument'bÆ  7^Ë   Ð  ° ^Õ "�  Ú ÕÁ_loop = _get �]) if ¼ l ¾« ] 4 	@   "E 	 J K 0f _ bstate(3,"ù O $   ?S_copy·_L f,öÕ *  � Í  € T
F n ’ ´)¢all_check_T(è b ±¸ † iïZ!isp ¡  g  d  @   Ûd øø 2 O  .cÒ ó soon_threadsafeS ) º{ –8if B ± þ ‚  ×  ¡ ( o * í¢ pis_closõj  B rú  u6  P L &orK   ³ $ 
KE – »HK	 / Q MÀ_soon_threadøsafe(_set_state, destination, source)

    ñ.add_done_callback(
 á_check_cancel)6 C 1 z ò)


def wrap_future( ñ, *, loop=None):W ò"""Wrap concurrent.. 1s.F= ± object."""1 Rif is# X J  Û rreturn  / Ðassert isinstÏ 5 ,r A), \<  R /f'š òis expected, got {y A!r}'A !ifð @ is ó ò  V  á = events.get_ _ (p3new?! =F s.create & d_chain  &, < L  b


try� ñ	import _asyncio
except I RError( ’pass
else C# _C¢ñis needed for tests.   =+ =h ßá
"""Synchroniz¯± primitivesöð
__all__ = ('Lock', 'E; 	 PCondiæ  �Semaphore vBounded 3)

í `collec6 s ówarnings

from . + ™s $òions


class _ContextManagerMixin*Y ÷ __aenter__(self¹`await  ƒ.acquireá .ò# We have no usegðhe "as ..."  cla ±in the with�> Ament9 Clock     
¯ 3xit® ¡, exc_type
 G, tbÁ » `releas»  ¯(; D"""Pî š ï"s.� A Pis a ª1@ thaí¡ not ownedñby a particular coroutine whenY _ed.  n ain oneG qof two O@s, '° £ed' or 'un ¹ I‡ ³#d ˜% C ‘.  It hasV ábasic methods,p 
U and ]@.  W·  êŒ  `[ %, 6 D qchanges- #toñ V  2×s immediately` C 7 #is7 b   bõ  s until a E6 to« 1 inC hanothey˜  it1 ¾ tÚ Ç V F rresets 3  z (edÄ g.  The} MÁ should onlyG !beS e—K è ;_ � b4to ¤ D ‘;ÁIf an attemp@madeä À" aO VP, a RF!meró  will be raisedTö@moreçð n one coroutineð+ is blocked in acquire() waiting for
    the state to turn "un; ñ, only one coroutine proceeds when aF `releas` ºcall resets\ T w; firstQ QwhichG µ   e¶ | assed.
1 Ø Gis aT àand should be •  ed with 'a'A ñLocks also support¶ ðasynchronous context managementatocol.† '/ _  9'R* … u· bUsage:Ã  … 5 0 = � !()S   ".._   µ  ( .ô ) Etry:  . : kfinall! I µ‰ Cç ?r u¥  6
”  • ¦  ç À objects can¢`tested–å  ì–%aif not .À Ied()c $
Ielse. #J  (Qd�  ?&  ­ 2"""÷def __init__(self, *, loop=None‹    ._f`ers =  \  À … = False !ifQ  •  5 	°  : ñop = events.get_ _‰ <ï 
?  . v  ó �warnings.	 R("TheŠ AarguÈ is depreca¨ùsince Python 3.8, "O  S  "ŽcchedulåpremovalœF _10.",G D€ BionW¯ ,i¨cklevel=2)©Crepr©› re‘£super().__& t’extra = '¢E' if:M Y$ 'Í'¯ ( ø
¼W 1f'{ !},‰�ers:{lenP3&)}W !re”óf'<{res[1:-1]} [F 6]>'ô ² K ò B"""RD @TrueÏ  (  b÷.ã­p l ó b ã 8 i  Af0 a d b Z ²This method–qs untill ,  � T, !n BUit tod * 0ed N¨  s Õ &Ê @if (0Ë ; ¹ m z  l  ¯  Ðall(w.cancello wµV ì'))q =  ¯ =¥ Å    ¾   Bš 
J[ y ð = collections.deque()
     ðfut = self._loop.create_future()
%   # õwaiters.append(fut)
# ð# Finally block should be calle
 àfore the Cance WErrorC û
handling as we don't want3 1 toW ; ð_wake_up_first() and attempt/   a up itÍ : Etry:  ì    aü I fut+ fò 
@  / c _4  0bremove0    rexcept  Zions.
T eif notªJcked!  S u 		° Vraise³1  ®•ed = True/ breturn  Àdef release(9 )� B"""R 0 a O .d AWhenô  1 is  ±ed, reset iœ un    µ{ .v  Ø òIf any other coroutines arel0ed k 86forn †to becomÖ i ðllow exactly one of: m,|proceedÇ äinvoked on an L Ò ±, a RuntimeÔ ê nE PThere 2no å f valueë 5"""÷ /ifð ‚ ´ 
v = Falsæ  5!  õ\ FelseÀ 0 ­ 	Ã 0('LÈ!is{£acquired.'ô t t 
@Wakeu õ˜©Per ifû isà[done.ú î Ú;ers® žÏ ³ÙPnext(³±.�)Øï StopIterationj k 0# .° ô() necessarily means that aã Pwill � Rlater9dL !eiÕt' $ S, or,!Twas c-Ò " 0 wa9H  A ±n already, { h\€his agai² &�Sa new¨ }e3futã 

  °set_result(.ò )


class Event0 ñ
"""Asynchronous equivalenë th¤ Aing.3 cCE �implementÊeR Ò objects. An  PmanagþR flagt0cani"seŸÀto true withÔ0 seamethodF}@to f9) ‚clear() + 1The+ u s ïl` Š !isv  . 1  Piniti­n V  ð H_( !__¨P, *, ŽW=NoneP _Å� = collec³ns.dequ±^À       if lo×op is None:
  ñ	self._loop = events.get_  %()1 ?els? 	 F ,  d �warnings.	 `("The $ � argument“ ùdeprecated since Python 3.8, "O  S  ö"and scheduled for removal inF _10.",G D€ BionW¯ ñ, stacklevel=2)
= Ðdef __repr__(5)Håres = super().& 8ðxtra = 'set' if A €._value U@ 'un k  ã $ vwaitersm   eP 1f'{ 4}, ( A{len  #._ 5)}'W óreturn f'<{res[1:-1]} [F 6]>'í ais_setK ë B"""RD @TrueË  †@only ðthe internal flagávtrue.""Ë… v s NSet \ 1to \ ñ  All coroutines1ingUit toÿ abecome6 ô are awakened. C? ¡ that callH @() o• ~ Ñ N  } õ will not block at all.$ ø !if) ø 
Ö 0 = ` ò   â0futÞ+ á
F  * j —fut.done(Á      °set_result(r î_clear s�øfalse. Subsequently,š W5ing Á "()D@`until )< 1 Ped to I i againm*j0= F¡ V`async ×†  ( 'A"""BÑ‘  ÿÙM  R.If¡  Ä '£on entry, þ m¿ ó	immediately.  Otherwise,U„ 0ano P¦sE 5+°,œ n} ¤ 
œ
Zº v  ‘=Ð Üç.create_future<W  læers.append(fut&:tryq a. E futn  h‡     kfinall? 
r er ó

class Condition(_ContextManagerMixin@"""A,ð hronous equival¿ ]•hreading.M .RThis h Pimpleñ4s cs ÿ variable objects. A  û öallows one or mores)'AtheyÝànotified by anñother
    coroutine.
 ðA new Lock object is created and us	 ñs the underlying lock.B 2"""K ñdef __init__(self,& €=None, * !op !)::  � pif loopv  (     E !._  Ñ= events.get_  %()J Oelse?  F ,  ] �warnings.	 R("TheŠ qargumen	adeprecùsince Python 3.8, "O  S  ";ö	scheduled for removal inF _10.",G D€ BionW¯ ò , stacklevel=2)z x I/ckI ®! =ç(	= ;> mvis not 
Xðraise ValueError("O  9ñ must agree with"« X Ack = �# Exportn µ !'s! ñ ed(), acquire()™`releas rmethods� a  ? #edb . i " P #  
$ f $  wI ó_waiters = collections.deque(ù Crepr re; £super().__& ¡‚xtra = 'Ç B' ifž 0() þB 'un 'Å ) £ 
ÊeX 1f'{ 3}, Ë Q:{lenÆ.; &)}W óreturn f'<{res[1:-1]} [F 2]>'"`async û  W O ÷ Ð"""Wait untilrSified™ È!If	@callt¼2 ha¢³d'  û ¥ when this  H ped, a Rs m¾  Òz SThis : ô,‹tu b€ w  b 1l iGÒawakened by aé cy() or p_all()    +»  t same condiU� variableG!anØÔe  Once@ x ,ˆ 3re-/Ê  ¯ ¾ Ìfs TrueD × „   if© 
r
IA	WP('canF úd on un€  d | ' a FhÓ:tryg Rfut =ˆ ÿ.ªP_futuú U ½¶.append(futW & d   aµ 9futQ   -,	 kfinall¯  1 Û † e† @ < 0# MG#reµ4 ý   ª…ancelledM  t ðcancelled = False'
  ¹while True:  # >try   ýawait self.acquire()>  ) ]break rexcept  ÿions.CancelledErroru c$ ! =° 
X 5if ! @ _raiseq K  async def ß P_for(ã Æ, predicate)Z @"""Wvuntil a$ â becomes true.Z  7The% õshould be a callable which result will beå ðinterpreted as a boolean value.  a Wfinalg  5 isF ”the retur8  5""" ƒ =J à23notª  ç  F8   Y 
˜ $ 9 �cnotify‹:n=1… By²ñault, wake up one coroutineÍõing on this condition, if any.ø 0If ! ‘ 2 D @has ò îd' ƒlock wheX emethodL  j aÓP, a R'!meÞA is �d2is B Ç sÈ ³at most n o™ Õ sÖ 0for� w Þ P variW@; itt pa no-opõ &no Es ar%’  Note: an aW6ned3 D doedtuallyTvfrom itpã l� ccan reL ¾  Kp. Sinceh ð)f Ø  ~urelease2 ,k \ 2er RÌÐ ifV ± k 7ed(F™!§P('canv € ?3un-µ d² "')¦ A uidx = 0°  ˜bfut inw _
:ers.0if 9 J>= n  S =R   É Œfut.doneÆ # ydx += 18    5 Bset_`c(FalseÁ gA_allk ëZ¦all thread‚X0. ThÎ'ac6likáW, butî%llÖd pinstead Rone. ¡Û ©/  ¦  = 5ed,M ¦ >  S .A(len4.åó))


class Semaphore(_ContextManagerMixinfF"""A* ° implementa§”4A sK ! mC sž õ0cou"Eqis decrF ðed by each
    aôcquire() call and incremented by each releas' õ". The counter
    can never go below zero; when ae ñfinds that it is& , qblocks,N ñwaiting until some other thread« s” !.
6 ñ
Semaphores also support t¬ ±ntext managÝ “ protocol>  Ò Ðoptional arguP give° ðe initial value fo�   aternal� ;Ï ñdefaults to 1. If‡ =  U ný 0les] Ban 0ù V] PError qraised.\ 2"""æ `def __Ž ‚__(self,“ ñ=1, *, loop=None):8  �"if# F < 0   b  v %("Eñ åmust be >= 0")[  � "._× =f   ÌÀers = collecb†s.deque(H !ifº  ö  ½ 
¦ e  Ú á = events.get_ _ J Oelse?  . ¢  �warnings.	  (" $  is deprecaùsince Python 3.8, "O  S  "P‘scheduled6¦removal inF B10."; 
 D€ BionW¯ ø , stacklevel=2)Crepr =ser().__& ‚�extra = 'ˆqed' if y 0() ZR f'un x!:{& %}'? _
”n 1f'{ 4}, ( A{lenÙ.; )W óreturn f'<{res[1:-1]} [F 7]>'Áwake_up_nextR Rwhileá g 
¢ � * =$ ‡.popleftq ©cif notÃ g.done(l  "   S À.set_result(ìƒ $   ä É pÂ A"""Rbs True°�o²}àd immediately.O k   o è Ë2= 0€ `async uH ‡  !AcDD a sƒU _ ûi, \& ëAlargÖ!an	– on entry#de� Uaby one¥µ ú Ù  k[Š ‰Z  iodÕcoroutine hasE  &edt Ø@make— Ç !0,Ÿ t÷¤ C  ¬ Í ‚��,<=«5fut� ¡À.create_futuÀg  ] “pÃs.append(futlÀ       try:
  ¨await fut
 yexcept:    ý# See the similar code in Queue.get.5 Ífut.cancel() ñ
if self._value > 0 and no• 8 ^led()Ž  ’ = Ïwake_up_nexte  Uraise{ 3 p E-= 1 Áreturn True
 Àdef release(6 „ B"""R ñ a semaphore, incrementing)Àinternal cou v by one'ñ
When it was zero on entry	`anotheh°routine is ´ ` 0for: !to®  òbecome larger thanT pagain, (0 up Ct coS Œ 5"""K  ñ —+'  K sô

class BoundedS(
 =b"""A b& 9Q impl8bation.€QThis ½0s V 0Erró n–@) ifRwould}"as¢áÎ Babov �initial  ÷  ó &  í __" !__î,' ó=1, *, loop=NoneÈ  n!if 
š�warnings.	 Q("The% P argu Áödeprecated since Python 3.8, ƒ d 
 " scheduled premoval…F Q10.",Ö 
?  D€ BionW¯ ò , stacklevel=2)€ / î±¤=_ …super().=^2 7N  aN=w 
e,('y#öd too many times'„¹ • �)
"""Logg\‚configur�&‚import l" ‚


# NamZ  aer aftx³e package.
 =8  % e Ser(__& !__| @Even` Pop us… ¡a proactor1rel4kfes.

A! ðis a "notify-on-coS Nõ" multiplexer.  Currently a
` vis only‰ edŠðWindows with IOCP.%ó

__all__ = 'BaseP§ Â ƒLoop',

0$io
 $os
 dsocket  *6ing Tignal ”threading `collecÚ �s

from .·  œ`base_eGs Œconstant lfuture <ion Œprotocol 1ssl v Ptrans60  tr. 4logÁ .0


.P_set_( •et_extra(P  ,  Œ .'  [' ðet'] = trsock.Transpoñ	rtSocket(sock)

    try:	  ðansport._extra['* �name'] =  @.get   !(): aexcept †et.errorS Uif trV @loopB †_debug()(   ñ logger.warning(]    "| ñ  failed on %r",€ ó , exc_info=Trueä €if 'peer´ ˆ' not in– ì ‹ 	 | Á + [N c  : 
 ! Q# UDP» qets mayŸ phave a Q  µ 	
Ž ôNone


class _ProactorBasePipeTŒ(G ùs._FlowControlMixin,q  ¨  ?  \ X Ó0"""  ‡ Ãfor pipe andí €Rs."""�ðdef __init__(self, 2Üðprotocol, waiter=ì ¬  ¥ S serv* ›  Ë …super().m 3 n Õ& ‚elf._set7        ._5  7 ± (	 \  ž  @ § 
B  _buffer = è 2  # Ûor bytearray.2 ƒread_fut4  _write �pending_' K = 0? €conn_los^  àlosing = False­ üSet when close() called³ 1eofr 4ten> x 1if L_Æ1 is ¯ŒE‡._attach‡E  K.… Q_soon`$._š.Þ Áection_made,z °#ifu… ô# only wake up the3 7onna �() has be"÷ Ò ³ rfutures”ðresult_unless_cance`  P  >,O#zCreprz- OB = [F_ÓP__.__›5__]¸ ¯0ock(© L 0.apk!('&d'e%elC   :ingç> 7ing? = •-F bf'fd={Ú  6 ¯.fileno()}X _\  0 ^    |/!r[ u    8 £<!f'1 ]   > ^ Àself._buffer7:
  ðinfo.append(f'write_bufsize={len(self. ufer)}')> 2if  @eof_9 ?ten\ S'EOF & E ðreturn '<{}>'.format(' '.join(� 1))
s ádef _set_extra— v, sock)u �  ! ¡['pipe'] =% D  C ƒprotocolF  J  4 =  I Dget_ I ? × � % ; ¯is_closing9 
$ 8   e3 ˆ  6ing çŠ B  ’ * | = True Õonn_lost += 1 cif notó£buffer and  ÚÚe_fut is None† w Ôloop.call_sooZ ’connectioz ,C k Dreadf  Ž j ( †.cancel(K $ ! =n fq__del__h€, _warn= Pings.	 é} Š ü – E P(f"un{àed transport {ð!r}", ResourceWarningß  =" Â  K (³fatal_error¾ ð exc, message='F     @ on "Š '× :tryÁ�if isinstP(V 0OSEi 6  \  ñ (odebug(+   / rlogger.$ ‘"%r: %s",Y¼ `, exc_=³
;elsp W  6!._ƒ dQexcepc•handler({Ý 0  '/$':9,( Q  ':ž & ê"':Ó M %& .[W }þ kfinall¬ù Qforcege°	'  - ]�ÀÈempty_waiterÝù ê > (._' \.doneê if! B ± wG   §presult(4 ó  0 ñ		�  F § @   å  G7JÞ "
Y ±	B ² Ç   Ë Óc Àf._read_fut.§cancel()
  õself._read_fut = None"  ûpending_write = 0  obuffer< ò loop.call_soon(Q  ñconnection_lost, exc)
[ _def _% @ * :*  Ê 6try   e ›protocol.i (h  (   kfinallA ó# XXX If there is a À overlapped 60 on&   o+ “  Z P# end ön it may fail with ERROR_NETNAME_DELETED if w|D àjust close ourS `.  Fir ûalling shutdown() seems to‰  cuÆ Qt, buŠ Pbe us; 3DisùEx() would be better.G ¡if hasattr†”._sock, ' *')† À Š ) .' ( Ïet.SHUT_RDWR� $ .ö ¯  oo !rv‰x e Å s  Õ1notï¸  : ‹._detach„ j  7K 5i  »2get,_Q_size5#  2 = ª ]6 H  e #if G ³ L T+= leb2 [preturn ) õ


class _ProactorReadPipeTransport( IBase ,ž  ¢  tG  s.Z V ý 5""" B forG—pipes."""q_init__: , J , û$, Ü�, waiter=¶›  Rextra  ­ Š  ¾ 
€LdataY" ¶aused = Tru¤”super()._« ¥ 	 ¸Ctra,Š ì…  < +  Ÿ6ingÏ” VFalse9$is2 ;î  ù	C Fand   y6ingQ pý T ¦7 3 or·7 d^‚ E	† ] ò# bpo-33694: Don't Ä`  €¶0bec¢  'anG ´ñ	WSASend() loss silently úœ°the currenth"L  implementa»##$ AIf Cm!IoX ùsú‘OT_FOUND,¥eans that Ÿ N  cos �ted (even'EHasOˆ4IoC" 2() aðs 0), but
        # òOverlapped.cancel() currently sil	 óignores the ERROR_NOT_FOUND
  Ñ# error. Once* o] B is D !d, ãIOCP loop will ` P ñcompletion I/O event and so not readN ‘result of w L µWSARecv().
 �if self._‰ Õ.get_debug():#  Ü rlogger. ¡"%r pauses Qing",F )X @def � 0me_Ÿ @ing(d S v ¡closing orÎ  ' !._\ d� breturn`  ‘ * … = False² _   @_fut|JNoneT D ù ‘call_soonª ½  , ; Ü  | adata =ò  ._pending_ � Z  ! =F " 0if 2  ™  Ç b 
� a# CallÍðprotocol methode after ´  <»­ 5(),d  ¬ D# siŒH Òcan decide toËÊy again.D Î ( Ä ¡_received,Ó )ˆ< ]=^E_eofw ³]v Ç J EOFÑ I:try¡–keep_open¨.ž )L÷except (SystemExit, KeyboardInterruptÉ  w 7raiÙB QBaseEM  jas exc� ³afatal_“(†  V   pexc, 'F# ¶$: !Á j– failed.'Ð  F ˜!ifÉ—   ô#e(' ,<
ÏK> Kr# Don't¨ 5anyÉ 2e whileã"isôdçV# The; •!beU \ed onÔ)? oassert  ä à	‚¡" N	& rö^ (  ‡O x ! J  `isinstòB$._ÿ,³s.BufferedPÜŸ l H rs._feedßCto_bL i u  Ö 
]ï1 � 
5  J 9Àtion as exc:+
  ýself._fatal_error(exc,' 6 P   'F4  4 ÿ: protocol.buffer_updated() 'L ícall failed.')2 ereturn Uelse:  › Æ … àdata_received( !)
0 ðdef _loop_reading(: ¶, fut=None)W  6 0 =  ;  g 6try!    if; q is not, 
   $ passert i .w @_fut3   1or ƒ 
  u E andy  H  f ~closingI  ü … ß b Ö g.done(   ¡# deliver (ÿ
later in "finally" clauseÂ 3 =:Ž.result(ª ä w   P# the= ðure will be replaced by next‘°actor.recv `‹ ³fut.cancel(# c   #if³MÙ€# since ! Áe() has beenn ðed we ignore any u-ˆ  õ rú	 !ifH  == b''˜ ñ"we got end-of-file so no need to reschedule a newž 	e  } Ý# bpo-33694: í �currentlyq Ðfast path bec9 ofh 2# aÎ ±loss issue ) Ëðoverlapped WSASenR°rlation.Ø ®   !if‰çpp d ÿ F  ¸-  ?V._pro`Ã¶sock, 32768ÑÐexcept Connec³ €AbortedEmz as exc¤ 	Å  ]:ing"  ë � ¹— ¶ œû on pipe transporta%elëÛ Ÿget_debugürlogger.  _"Readf 0 whxÀ "Sßexc_info=True=_Reset;Porce_z eÎO /OSB  ÜWô aions.Cdl÷
Îð7raiO	F 	ûÀ           sñelf._read_fut.add_done_callback(s! Aloop& cing)
  …finally:   úif data is not None!  % V  (  _received( ù)


class _ProactorBaseWritePipeTransport(  	 ,�  n  tL !s.` \ )° 5""" ` for w† ± pipes."""
h ò_start_tls_compatible = True" Ádef __init__OÓ, *args, **kwm  £ …super().- ' m & ‘áempty_waiter =fn © k VÑ  > !if–¡isinstancew , (bytes,  ÷array, memoryview)¥  E õraise TypeError(œ      f"w ñ argument must be a` ÿs-like object, "?   :B{typŸ  †name__}"~2if G@eof_ó 6tené  ‡ ¨ cRuntim« ')  e_eof() alù y í?ed'[ gÒh 0una	"to7 ; sendfileÒin progress')¸ ° � <É Yeturn) û šconn_lost0   a >= coôúts.LOG_THRESHOLD_FOR_CONNLOST_WRITESO  œ ðlogger.warning('socket.Ö 1() Çd exception.M > ® Y += 1÷râ �# ObservEfstates” ±# 1. IDLE: ùe¼ò and _buffer both ~   P# 2. Ý 9ING7 Eset;8  ®˜ ï# 3. BACKED UP5 Ö6< ñWe always copy theA, so u÷r can't modify itA  wh.Àwe're still ï1ing� P åI/O to happen.; þì0futt Û A:  #94 ->7  &cassertXL*isJ ( 0# P¥aÜ ,ø… if it'sXPimmutÂœ  = S ¢  O ó=|s�)‹#el6 ” È Í Ë ¥	Í P# Maku† ­ � which wez extendŸ i ! =²Üš 	b ” ømaybe_pause_protocol(Â !se± ¦ A¿dÊu P(also® Oies)� .¾ ˜ à
    def _loopñ_writing(self, f=None, data C):
  6try   Àif f is not 7 P and H .V Pe_fut   zclosingL  P ó# XXX most likelyM `force_7 ðe() has been called,v ¤  G   A# it* 3setF  é “ !to¯ .6 ireturn bassertè Û 	(  ! =c #  rpending"I = 0$  S¬f.result()-  ¨c8  = ibufferA  *¹  ¶ !ifà K a #if]  �Ôc Ploop.´Q_soonp!._ ñconnection_lost,;
ë  G m 1eof?>ten“  * Ô àsock.shutdown( ®et.SHUT_WR^ ó# Now that we've reduced the  size, tell Kà# protocol to ³0me w`ing if“ñwas paused.  Noter J  ðwe do this last sinc- e÷@back÷ ?ïed immediatelyK   –ñ it may add moreà ¥ Ý 1(evUu�à #beÊ ~ again)O‡bmaybe__!ÊNelseË@  A¸ÊJ K £actor.sendO å½áÉU g.done(æ @ ý3 ¹º4 - P len(C—  8 4 é P.add_˜  ìß  ù ú?ingJ 	sh '“r w v  ‘ /­°mpty_waiter³-eL A.setV0lt(a…except CVúResetError as exc` í e=excO /OSB `atal_eh €(exc, 'F !e  ñ on pipe transport')
³qdef canÞQe_eofó˜rœV True2 3.  Ô  •'e(a ðabort(self):
      ð'  self._force_close(None)

    def _make_empty_waiter(4 !):"  & #ifF % € is not N +  / ðraise RuntimeError("E_  _  : Õalready set")i  x .‹ # ={ öloop.create_future(8 ¡ 2wri   d š ` ³.set_result Â   creturn~ ù : re?  ;r ! =3ð


class _ProactorW¼ åPipeTransport( NBase  £Åq_init__€ Ó, *args, **kw%  Ó ”super()._- ' … Ÿ i
�#_p­ Q.recvm ¦._sock, 16�ö C ó.add_done_callback9 3pip”d� ) W, futÇ  if ·.cancelled(  ç t# the tF¡ has been ÿdé  , æ aassert_ …) == b''# l N :ingüA 
�D z 
 . 
@ s, (fut,ŒWoa e   ± 	»x -`Broken—Ê)w Jelseþ ?   �á�Datagramà d  Óñmax_size = 256 * 1024Gõ  #", Žðprotocol, address=,;   “ a extra €  ' Õ _G $ =Q K   ‚ð# We don't need to 
 N¦ õ.connection_made() since our basem �# constru2õ does it for us.& éü  ,þ � ÿ Q# The… 	{ Ãsets _bufferð  |0 weÔ • 6her¸ %/ Bcollð `s.dequ0 m   +  ² .&Q_soon ._ _ 3ing£ † ¼(  ˆ 'ckÂ_   1et_ß ' ÏBget_$¨ z+ L 1á sum(len(data)€ 
 T, _ i4E §  abÔ ß P   Ÿ
asendto‡ ", e  Œ¦!ifŽðisinstance(data,� (bytes,  ÷array, memoryview)):
  ñraise TypeError('data argument must beL ùs-like object (%r)',L W  Ptype(P 5))
) pif not  Š Yeturn) ñself._address is: �None and   @in ( ), 1 ê CValuë “ ­ ²   f'Invali[ Eess:  _ Y or {b *}'Ù  ‘conn_lost¦   ¬  Q 	t #if± 2 ú>= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITESA Ç ñlogger.warning('socket.sendto() ïéd exception.')“ ® � I+= 1! r¦ñ # Ensure that w €e buffer²¥immutable.G d # ‚.append(´-,Ú45 �write_fut[  ”
�# No curr», ` operaê ðs are active, kick I5off™  Ah Ploop_A  E" # else: A  e]  � qalready[ 0ed Y Z V ómaybe_pause_protocol(BYdef _w  4 `, fut=é Í:try÷ H
   Ø ¸  `assertc  À  p .õ b¼  *  0 = ” 	#  ifI y A# We{Kin aã 0) d„ù	callback, get the result`  ‡ Bfut. 7    V¨ [ ¯( Ð 8 ’X H   P# The‡0nec:ý has been closed— €nlosing W w  ã.ñ T_soon  @all_¥ q =,c| C   r�   M6# =Sš.popleft(H ±  ÿ • Õ½ ¹ ò{c Ë  ÉQactordÐ  v ¶  	 Ò 
´ z{œ /tož 6 ¿â + æ=‚é ˜1 OS�0 asª
’ò ? .e¶Ð_received(exc3)
  �except E µion as exc:!  ( ð
self._fatal_error(exc, 'F q write  ÷ on datagram transport'o ?lse\ D ò_fut.add_done_callback(~ Ploop_' 6ingP ž ñ	maybe_resume_protocol()
É Qdef _B qreadingU ¶, fut=None)”  ¿ 0 =  ;  b 6try!   2if – šconn_lost   $ breturn€     cassert<  ‹  ó 0 is‰ A or — (._  ‰ E and�  H  ž 1los/	=  d ì  [ !if‘ ais notß 0s =' .t$ltk @  '‰ F  * ð
# since close() has been ðed we ignore any ¸ d	Ô  H   ¾   •  ª paddress”ü  2  j  , / s = res,Ö  =essž eú F   J 
3š k M  7 � Ñ   2.M£actor.recv¢]sock,ä }  a Šmax_sizeÐ*1 =o£  Ofrom§ 5 Ê z « :0OSE8�.#�_receivedDù N  áions.Cancelled` 
;!ifšš _8:ing"  ¹ Uraise¥W$ TŠön , © & z ˆ   nfinallG ýº k 9 %  S<  ~á)


class _Pro©´DuplexPipeTƒ( IRead Ç? PBaseWñD %s.˜ y5""" a for dÃ ¢ pipes.""" Ç1canQe_eofçD  fßf False3  6àe_eof(self):
   õ,raise NotImplementedError


class _ProactorSocketTransport( …ReadPipe ",
]  ; ŸBaseWrite@ t… %s.u !):v 5""" ñ for connected sÁ as."""
, ð_sendfile_compatible =2 “stants._S! ò Mode.TRY_NATIVE? ñ	def __init__(self, loop,i ÿ, protocol, waiter=None Rextra S serv* Ð  D…super().m g 	!, Q ,L )ê  F �base_eveÙ Àset_nodelay()Ó   D Õ   ^ H _    =et_' G Pcan_wÛA_eofJ Ò ¶return True2 . 0if _Ã._closing or 1eofe 6ten¡  ¥ a ü ? . " =}  ,   c … pfut is ²
X I  þ ‘.shutdown@µet.SHUT_WR): Ý=ExXLoop(‡ "  &):ê p KƒBéñ logger.debug('U2pÅV: %s'Q 1.__æ¶__.__name__H  | $._:   =Ò‡ W@sele!" @   #HÞvenient alias7 ð f_reading_futur} s) caccept# as = {}`  †0et Áñ descriptor => FN G Ã .º <�  é Pmake_ f_pipe(Sif th© ’.current_  ()' …ing.main 
:ý# wakeup fd can only be installed to aÎ �from the [ ˆ ¹  ºasignalÛ a 1_fdà 0._c". Hno()ãì _M6 ¾ ƒ  Ì
™V �„ = { 	
 ˆ 1¯ù 'slö  >  0raw;(Ä¯sslcontextÐ*s µ_side=False @hostc	v ¯  · 	%  ssl_handsh©qtimeout( )j % ya = ssl ð.SSLProtocol(
      ÷self, protocol, sslcontext, waiter,
/  Óserver_side,  �hostname.  ÿsl_handshake_timeout=s )k ò
_ProactorSocketTransport(° qrawsock¯ _½ > ¦  aextra= º =Á { `return	Z t._app_t… 
i `def _mÔ †datagram" § ¤   Äaddress=None€ µ  !):€  à ¬ .DŠ 0‰  h ­ U   ˆ )¯uplex_pipeWË � s 0 û 	‚ KPipeý -Ø 
 )ö Oreadô Bò OReadð   Ä _writeÅ B+¸ô0# We want connection_lost() to be called when other end closes
¯úWÇ  þ9‹ ã�0if œÇ.is_running(  · �raise RunÒError("CannotÝ 3 a : Æ event loop"™b ‚ da º› q Pif th¤Âing.current_ W() is Emain ` F ösignal.set_wakeup_fd(-1˜ ñ# Call these methods beforeÙ 0ing Õ $ ( ealling¥p# BaseEþ QLoop.è  ), becauseG Òy can schedul-§backs withI  Fà_soon(), whichò ’forbidden_8the— !is± 5ed.I Ôö_stop_accept_futures($ ¬ _ N  pÒÕ  0 = þ� 0ele  0# C Ê  ðsuper().close()

    ñ
async def sock_recv(self, s, n):
  Ðreturn await % ²._proactor.9 0ock3 
3 [  Y_into` ?bufb @ g  : i ysendallg Odatah  ? (!, 6 d yconnectd addressg B Í < m Xaccepl c 8 Lock)Y _â _ì ¹file_nativeÏ   ÷ , offset, countx 6try   / Pno = 	 . Ano()	   exÄ ú" (AttributeError, io.UnsupportedOperation) as errd braise K �ions.Sendk ²NotAvailablY ñ ("not a regular• "Ž ¾ ðsize = os.fstat(V pno).st_ È !OSÀ Ÿ DPblockw " =y3 if	 `else f “ 0if í 5 • µ¡0  # empty ™7 u = min( �, 0xffff_ ;send_pos. " +ž ,š )¯ 
3 n  8 Ó PtotalžVt = 0 uªwhile Trueõ Ù ¹ -Ôë Þ  9   5if  ^ <= 0`  ' ¯ «     -wg ljx – .6 +=� q Œ ( kfinall½7if 8 >ï  ¥ b.seek(† R �
Mqtransp,vå Oòresume_reading = 7 4.is L Epaus3  s% a_make_ù_¸'er* ÐB â	'(U   Ó ,�  æfallback=Falseð¤| _resetÒ  j :if O¼À  transp.resðume_reading()

    def _close_self_pipe(
 !):   $ 0if  ." A ö_future is not None2  6 3 •.cancel()a / 
! =] - X Qsock.¹ I  7 c7  7 ÷internal_fds -= 1=?mak<1# A=-y æet, really. :- · ,. $._� 7 . Opairî �.setblockÛ\False^ Q ' 	ê +ê Iloop)@, f=þ1:tryOif f* ÿõf.result()  # may raiseö $ ˆfy  7 ñ# When we scheduled this FÂ, éassigned it tov C 	ø ü‚. If it'ÿ	there now, something hasM  0tri„ "o 
P the ]b while� ðcallback was still in* P  ðqueue (see windows_events.ProactorE ÿLoop.run_forever). InO  ñ that case stop Ø ðinstead of continuß %toTo a newN  ­iteration. Zretur‚ 3f =p» Q.recvj0._sf, 4096àrexcept  aions.CaŠledError#ï)§` been v2ed,ù @waitæ ‰for dataÀ ¼ ~ ð (SystemExit, KeyboardI>Grupt# V
âB QBaseEÒ `ion asØ 
Â . © _3 Ùion_handler({¤  e Á'message': '0 on… P fromT /„ _  .',M r  ':™ "   È!':Ä
 }²/ls-I = f‡ °f.add_done_ # z 	§ã�write_to! 1 �0# T v#beàa different thûõ, possibly after� Y1 orkéFit i ð# running.  Guard y � be� m I ý1d. ß‡  a &e\ ð  closed, send()ó raises OSError (with errno set to
  ð# EBADF, but let's not rely on the exact> •or code).> ácsock = self._  1if  • is None:  { ureturn
 :try! < Å.send(b'\0')+ dexceptÝ 
6 #ifŒ Zdebug  w qlogger. ñ("Fail to write a null byte intoý "w  ?  "ú `-pipe Oet",1 âexc_info=True) ðdef _start_serving(W ñ, protocol_factory,e b °sslcontext=q , N #er ¿backlog=100B 	ò_handshake_timeouM "):¬   ° aloop(f[ )gÊ 3 @if f	 \ œ 
3  "   öconn, addr = f.result(ú $  ê( 
ò`%r gotë0ew o ÿection from %r: %rÂY ]¯ ,L © Å- =ÐÛ Ë6 ‘  00._m¶ïssl_transport(Ž
 f&, A<Q_side¬4  ñ extra={'peername':Ç}H =.� 
 º ~ k;elsg�  $_ocket'$Ä 
	À Ð«is_closed(XÆ  :  f‡1pro/0.ac)(™
p 
B~ as exc“ “ þock.fileno() != -1(  ƒ ]Rcall_] 1ionJ_ler({2p'messag/!'A® p failed|aî?et'{'m  ':Ä *  pet': tr $.T#S&@ }> ï   G ¬È  el>m6
� b /et”À sock, exc_i·nfo=True)
  rexcept  ùions.CancelledError:.  9 »sock.close(K ?lse/  pelf._acg ‘_futures[D Ýfileno()] = fg õf.add_done_callback(loop)
+ s[   X_soon ðdef _process_events(. !,  f_list)¬ 1# E$ S are 7 õed in the IocpProactor._poll() method‹ Bpass™ { Kstopô € t Bfor  h  � &‡.values(5  €5 !.c§ƒC cclear(4› qserving”  , Že a ? = R @pop(1 .¿W, NonV#ifØ `· p`;  6ockew zñ#"""Abstract Protocol base classes."""

__all__ = (­T'Base0 H', ' †Datagram 4 3Sub ¦ 'Buffered Q
)


  g 	—"""Common¦  p¾ ²interfaces.LðUsually user implemË £ð ùs that derived fromy ¾ Flike" or  · l  The only cDIwhenK ¦ should be‰ áed directly ism awrite-H ¡transport ‚  Q pipe) � r__slots£©ó connection_made«U ° Ya± ¶ &a ; @ is > ä  p  è @arguJ   âV Ñ representingý ± Q .½ H ño receive data, waitÐ  _ @d() ¢s9 W[ v 
§ Ø'd,l p_lost()¥  C &edD > ÓH 2  ·,Ò$  l B or ‡ 0 an[  epšp object8    (X elatter(@meanMÐa regular EOFÔ " >  8 Ç 2 waN hpaborted& œ )`pause_gÚ õA's bË¡ goes overû÷ high-water markPk ² and resumeã>šaired -- � ÇBonce´  „ AstriW� D (Ñð  if subsequent ðes increases the bóuffer size even
  ¡more), and õ tually resume_writing() is called once when theG b` preaches  õ low-water mark.
1 ÁNote that if* B RequalA GhighB ,A Kpaus¢ 4not¦ õ-- it must go strictly over.C ¿Conversely,ò 	í  £ %isG ® 0 orí  erÕ   º ö.  These end conditionF óare important to ensur$`thingsË ²as expected†eeither�  g ®Hzeroo�OTE: This ñthe only Protocol7@back¾ t# L[ ðthrough EventLoop.€_soon() rfuQwere,	 Åould have noF beffect¼ õit's most needed (l£app keeps …A ÿwithout yielding until   Ÿ 6ed)ñ2"""‚<defòeself):f B"""Cñ“ Ptrans¡$'sÁdrains belowÆð=See£ »for details¤ e
classŸT(Base¬¥ Ð"""Interface J ƒstream pÓý`The usûh�pimplemecC Ÿñy can inherit fromt+ “ ‚but don'³2 to9  »X a×r here d÷!noÀc (they> 0raiAxcep1 )° WZµ Pwantsµrequests a ‡,r0y p*aø ± pfactory: àa utility funcl x (e.g.,È±reate_conne# -()�   ð made successfulB! _ 5� ‡ ¸¶ a suitableÈ r objectIñn data_received()C qwill be§@ed 0n ºb times[  8 ” (bytes) @ Ä (G ;P; finê,‹õ ‹_lost() m 2exa<"ncðÉ wT an eÄÈ  œ pNone as @argupàñState machine ofÓ "s:—ñ  start -> CM [-> DR*]	 AER?] L 2end2 X* CM:Ä {î _* DR:Oœ* ER: eofhI* CLO O =â__slots__ = ()ˆ  Q �Q  P,~ ± qVAsome#  S³) /  ½@ # !a ßi4 1  ‡ × Àed(self):
    ñ0"""Called when the other end calls write_eof() or equivalent.

D ñ#   If this returns a false value (including None),h ¤transport
F ñwill close itself.Z 'itX 3truW ,+  U 5theD V ‘ is up tom •protocol.) ó"""


class BufferedP& T(Base !):4 ô	"""Interface for stream Z á with manual bQ ` contru B  Imî Bant:-àhas been addedª ñasyncio in Python 3.7< P*on al `visionc òasis*!  Consider it as an experimental API thafðmight be changedÑyremovedu 8ÜðEvent methods, suchd ô`create_server` and  Áconnection`,» ñaccept factoriesŽ Ò Ò ˜ Pimple¹ "iq� ½The idea of´ ð è PllowsR�¢ly allocat) ° œsreceive·2.  ø �loops caQn use. ÝÜ Pprovi½!by  to avoid uñ
essary data copies.  ThisE  a `result„ð
noticeable performance iml  ~j 9H Æ  ig amounts) v °.  Sophistidx ~ 	 ã p only o 1at ôƒion time‘ÐState machinem 3:ñstart -> CM [-> GB aBU?]]* AER?]! L 2end; P* CM:?Kq_made()ç ¢* GB: get_¦  3BU:Â…_updated ƒER: eof_# )CLg Clost5   šâ__slots__ = ()  8def‚  ¬£, sizehint1 < _ ƒs a new Œ ³ Q 5 *I *Ôa) Pommenhqminimall † ®v!ed B @.  WÕ0set"-1x B  ýÇbe arbitrary† 4Musx Tbobject¼¦ }R v c:ref:`_  " < @ 6s>`‚!Ità pn error£ É € a zero-d b   ˜ „\ ïˆonbytes†å9 0 wa%,ÀOd°*Y – (  to``numberüw "Awere9tUo™ 7 { 	Ñ 	¥ Ï Ç ¬À     If thisó) returns a false value (including None), the transport
  ÷
will close itself.  If itX 3truW ,+  U 5theD V ‘ is up tom •protocol.) ó"""


class DatagramP& T(Base !):4 ó"""Interface for d5  \ S  Ì ñ __slots__ = ()
@ 5def3  _received(æ , c, addrm  E ñ"""Called when some)  ©  Ý D .w  c \error` ?excY £a send or R ð	 operation raises an OSEZ .Í    ñ(Other than BlockingIO&  M -arupted !.) : ± {¤Subprocessp}tŠsD f calls‰Ppipe_Á*"fdŽ/ »q awrites™ð into stdout/stderr i 4 fdºöint file descriptor˜ –  %  byX fobject ; D ì ] p_connec®S_lostR È ö‚ � associatq1ith7Pchildá ¡5 isÃ¦dÚ  Þ   %Qt was³/edÐ 	S_exitˆ„Bhas 4 ú
R_feedäÁto_buffered_9( 	ê w°_len = len( ±!whª0ata  �Pbuf =cto.getb 9  ) = )   Y 6buf  if not buf" \  7 {� RuntimeB'('h ) edžPemptyH Cfer'q E  if  ] 1 >=¥  
i Pbuf[:ð   "] ' é F ..C@_upd$é   + > Oelsen  ñ m $[: 9  L w * D *  ¾ ¹ [! ):]L  "  à †  r)
__all¥õ'Queue', 'Priority ELifo 	 @Full+  E{ t imÍR coll�#s
 Theapq ówarnings

from . % kevents  Ws§p `(Excepõ!@"""R¬-* —€nowait()S Ved on3)  V H;pasn  ë m Àn the Queue.ñ4put_nowait() method is called on a full Queue."""
    pass


class  : `"""A q+ ð, useful for coordinating producer and consume# ¡routines.
K  If maxsize� òless than or equal to zero, thet  . ñ infinite. If itP òis an integer greaterS 0D @n "að put()" will block wheng I ß „ reaches¤ q, untilc 0tem³ óremoved by get()Ø `UnlikeN ò standard libraryeó, you can reliably know thil!'sê Ž `with qù �(), since@ r ñgle-threaded asyncio application won't beJ  Prrupt´ aetween ´a ³ do  Š2perH o¿ .M  )	 `def __Ž„__(self,3ò=0, *, loop=None)C _!if  F      E  ._7 á = events.get_  !(){  - Oelse?  F ,  0 �warnings.	 R("TheŠ €argument“ pdepreca(pÂPython 3.8,   K  "ò`schedu] %eal in F Y10.",– 
K D€ BionW¯ ,K–cklevel=2þ +G=za U p# Futuru    4 ðgetters = collec/ws.deque^? /pu? k u­�shed_taskt 0þ #  Î ! 0 = �0s.E÷(¾= ò 0  .syM  Œ()`# Thes•ðree are overridableœ1subì )O ×J  ¢ ÔÄ  "._-FI    0 ? preturn  F “.popleft(µ ƒ  ¬ $ g, item@   9 qappend(" ñ aEnd of‡ì s¬c ³wakeup_nextÁ &7ersn ‘# Wake upQ  +  % � (if any)j > qPcance`, vSwhile4 s±I =  :  cif not% g.done(¡ & M  €_result(a@( Rbreak,b_repr_ÂW ¦�f'<{type ò).__name__} at {id b:#x} {˜¸format()}>'e /std  S ·@_getþð__(cls, type):
    ð    return cls

 ñdef _format(self):   ðresult = f'maxsize={# #._ E!r}'. ¡if getattrH ÷, '_queue', NoneX \ +]  ) R={lis… . )a ~ vgetters© Q # Q[{len� #._ 9)}]´ S /puS # S  S ÿ unfinished_task¯ 	  \8 c¼˜¿q›æ eñ"""Number of items in the –E."""»X ,# )b ‘@property/  /þr allowedz …X w  i _emptyg  RÄvTrue ifÕ A is 4 ÿ, False otherwiseï Bnot y ï w Ofullv sre are ¸ fU   TNote:® Q0 wa”äitialized withM @=0 (­‘default),~ I Qthen £ )ð `never .# Ü#ifå ¦ L<= 0;3D Oelse' 3sJ) >=^ ð `async Â"puÑ,
ŸaPut an V intoÈ.G  î % + Iû õ, wait until a freeÓ @slot3àavailable befoÅQddingŠ ERwhileê  e (É  ¥  õloop.create_future()…  0 C_6 ’s.append( 
) :try„ > aâ / 	W nexcept1 + ð.cancel()  # Just–Rcase     †done yet
 u   Ž   r# Clean!Ø b from u #ede sV  A 
oremove - ç ¾ ValueErrorò  ' E# ThÜ ’could be \ d� 	w Y by aP F    # previousâ1_no�OcallÎ MpassI 0if ^s DA and € <led_ „   ð# We were woken up´ 3get“ p(), buttð't take
                ñ# the call.  Wake up ánext in line.
,  Ðself._wakeup_/ ( �putters)5 Uraise qreturn 4 ñput_nowait(item)
& Gdef   * !,   :   � ‘"""Put an Q into¿ òqueue without blocking.Y  9 ñIf no free slot is immediately available, ·   QQ FFull5"""ˆ "ifÊ ffull()   k A 4  Ñ D._puõ  ,    ûunfinished_tasks += 1< " v.clear(sC œ#geœI `async g1get¾º ã"""Remove and ®hFfromh
W{ is empty, ×f until§saPRwhileSG TÉ " =# ÷_loop.create_futureT6 ’s.append( 6 ) :try¾  aÄ / :    nexcept1 + ñ.cancel()  # JusQRcase    uÆnot done yet \   Ž   c# Clea?_O !s —u #ede sV  A "9 !.rê - ç ¾ ValueErrorò  ' E# ThÜ ’could be \ d� 	w Y by aP F   §# previous§0 Mpass iãt"EÌ sù ¡<led` …   ð # We were woken'by” ö(), but can't taká ?  g@Â g%gegc  ž.RÙ+0if ß`HelseeE7µfÎ
†gC  3* êò ñ ÄrÕ  K D 6 ˜_½< ñIndicate that a formerly en! d >  ‡completeF@Used* ð consumers. For eachÜ@() u( ¡to fetch aS ,ø °a subsequen¡ð ll to task_doneñ() tells the queue that Ãprocessing
  !on õtask is complete.
" ±If a join()" õ&urrently blocking, it will resume when all items haveN Sbeen ˆ ²ed (meaning¤  a ˆ �_done() cC õwas received for everyO  b < Bhad ]  utª 1ntoÚ )Ð ñRaises ValueError ifl Àed more time?asre wereÌ •placed in‚ g. 5""" ðif self._unfinished_å us <= 0:(  �rš ™  ('* ²ed too many§ %')B g E-= 1$ Ž =Ž P µ b.set()’async def ) )Ê @"""Bg untiliP” °@gott0&nd¯ÖThe count of E*‘s goes ups 1 anª ª1add0 &. V B GdownD @ conÊrsl ‡%toL windicata�³@trie´1and`work ož  œ h ù  W5 Mí âdrops to zero,}A) un‰s€>Sawait®÷   øð
class PriorityQY( û‚"""A sub( 1of  B; re
@s en
 0s iG ô order (lowest first¬E/ a“0ypi€y tuples ,ƒform: (p– â number, data) �² °`_init(±“, maxsize¿  ƒ  !._"R = []î8 $pu7  ã°, heappush=	  q.   M  n V  *#emFX $geX 0 (opQ 'opP breturny (opV 3)

žALifowš6žAmostjÜ<²˜.JAá ~€.append(l.6 = û!pop()
__all__ = 'run',

from . import coroutines \event  ‰@s


µôrun(main, *, debug=NonI�"""Execu »g  	®  » ,#ltéðThis function run€†e passed« @, tar  c!ofØð managing the asñ.yncio event loop and finalizing asynchronous
    generators.
 òThis function cannot be called when anotherN 
p iW @runnp óin the same threadg ñIf debug is True,( ¹ @willx crun in- CmodeA 
¨ üalways creates a newÂcloses it atn 1nd.ô �It shouldq `used aD ömain entry point foô ‘programs,c? M Àideally onlyP 94onc» ‚Example:q †—P def t 1():J     0awaµ  »¹io.sleep(1)# ëprint('hello')Y rio.run([ 8 1"""@ "if&ss._get_·_; ()œ þFNone’ ñraise RuntimeError(K  ª   "Í t )Bsfrom a k  ¬"¸ 0if v Õcoroutines.is Æ  Ž CValuŒ 5"a - ò was expected, got {!r}".formatL v  ó " =� as.new_�â 6try Xs.set)  F b iå Ó 
I "  0 D ( @ areturn Â_t@l_co>"te¿ š âlž 	«  i ð_cancel_all_tasks({ k  $   h  ‘shutdown_ßogens()? !ødefault_executorF Ç  – i K  äP()


Mõ Å#to 1 = .�- <  ˜ �k  D  ª+    .� œ  > T<runÔÏ !  4 @s.gai%(*U ,=? ", ƒ `_excep¯ s=K)Ò• !if÷ ˜ <ledw…continue“ 2 p # À  ¢ .üŸ ¥_handler({S  *   â'message': 'un( %d i @ durO|[“.',P ; "':ç  /()/   n* 
 v})
"""EQ!us‰ p selectðnd related classeKA! iL€"notify-@-ðy" multiplexer.  FL A subE ò which
also includes supporˆðsignal handling, see tð)he unix_events sub-module.
"""

__all__ = 'BaseSelectorE/ ðLoop',

import col Dions Terrno …functool sM  Tocket0 uwarning óweakref
try:
    x Ássl
except IŠ ñError:  # pragma: no cover7 ôssl = None

from .J Cbase
 ›constants 7 lfuture+ `protocÿ 
u 1ssl E PtransXH ctrsock. 4log½ ôlogger


def _test_aÔ ( a, fd, » )Jä# Test if the ( ñ is monitoring '2 '9 sKQ# for4 ñfile descriptor 'fd'.$ ¯ ³Ukey =a Á.get_key(fd), Ç2KeyÄ  8 Áreturn False Belse¼  ‘bool(key.ª 2s &¬ ) check_ssl_C0et( 0if ais not� and isiú!ce- ,% Q.SSLS«< ƒ ‘aise Type» "("" @ canQ µbe of type > "™ oclass \(�." vx 4"""‘ê q loop.
"2See %s.8 ¯òAPI specification¨ï Ê @p_init__4%f,±=6}  + ”super()._/ )|    Qá I : ± ! g”s.Default× ( / à .debug('Us“C V: %s'§ 1.__W¶__.__name__H Uself.Ž6 j " @make' gf_pipe‰   3 = ›Ð.WeakValueDicZCary(VT ;_A dQock, ±col, waiterrE, *,ž  ¢   Sextra. Cserv; )tD_\¡Th‡ 
 ’ ˆ  ‹ ƒ ü 'slù 	Ô  WP, raw•	ªsslcontext	> *s a_side=) @host	8 ¯   7
ð  2`handsh…timeout= ÷_HANDSHAKE_TIMEOUTz @ Ù qò 8 P(–  N7 y
¥ 4  vý . À        ssl_ýhandshake_timeout=ssl_ 3)
  ð_SelectorSocketTransport(self, rawsock, G •protocol,> E  aextra= ’, server= { ireturnZ t._app_t… 
i `def _mÔ †datagram" § ¤   óaddress=None, waiter µ  !):€  Þ ¬ .DŠ 0‰  ]  ’ � !, ˆ )Qcloseð ˜ 0if ©Ç.is_running(  Y �raise RunáError("Cannot R 3 a : Æ event loop"¦b 0 da Ç*� _+ _ f_pipe(P �super()."  h  5 ‘@ is ¦  £‰ Ó  W .( J # 0 = F L   S 9  ñ ._remove_readerz0._sâ—.fileno()× 4elf Û N : Š  ¤    cU 7  7 ÷internal_fds -= 1á 0 ^ € 
 à 1# A8-y ïet, really. :-Ó  Ä à � 7 . GpairÉ k 
€setblock˜\False^ Q .' 	ê +ê  =  n ?add§	¿  ÊP_from=f\�_process _gï ,  8Gpasse
P 3 - ªwhile True¿:try  È  i ! =•=–recv(40965 *   !if 5 K  ! Ubreak”    -ì  H 
e €except Ibarupted;m ‰continuel > Bû/IO= ¦ ; å�write_to‡Oð# This may be called Í� a differ¾ th•ñ, possibly afterc  -# û¤) has beenU !or ÁWit isA .Ã.  Guard for·Ía beingp2 ord‡d.  WhenF "a = æùd¥Qnd() ²As OS6÷ (with errno set toG ðEBADF, but let'só not rely on the exact error code).
  ácsock = self._  1if  • is None:  = ureturn
 :try! < Å.send(b'\0')+  except OSE“ 
6 #ifŒ Zdebug  w qlogger. ñ("Fail to write a null byte intoý "w  ?  "ú `-pipe Oet",1 âexc_info=True) ðdef _start_serving(W ñ, protocol_factory,e b °sslcontext=q , N #er ¿backlog=100B 	ö$_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT)g · Ð._add_reader(�.fileno()‘  ( acÁ¿_connection�   ì  V crver, â N >sslà †› (Ï à —  Œ¡ �Ð# This methodzð only called once for each event loop tick whereôò ±# listeningy et has triEñed an EVENT_READ. TB ÷ may be multipleN ñ`s waitX  � Ban .y€() so itº µ Ain a¦ vñ# See https://bugs.python.org/issue27906ì Æmore detailsC  w ³_ in range(:Ê ê”   Å `, addrø5ock» ê  '   � $ 
‘`%r gotŠ0ew j  Ï from %r: %ra U l¦ ,H >      ^ �.setblocksZFalse( j#(B$ !IOsÓ, Interrupted CÍDAbor Q x ñ# Early exit becausvb	p bufferVemptyº D   AZ	y´ v as exc¢ ;    )ƒere's noú o n í n@ jus%Ng it„  if] `.errnoM(
 €.EMFILE,F Qno.EN 	¥  ‚  = fNOBUFS> OOMEMH  ? ñ# Some platforms (e.g. Linux keep repori Ê_FD as‰ À # ready, soÐ we remove th ÿ
ad handler temporarily.
   ÿ# We'll try again in a while2 óself.call_exception_o /({d  w ð'message': 'socket.ac? ÿ() out of system resource',M z o': exc* l P': tr ±.TransportS… ( )@ /})�  _qq_readerF Ÿ.fileno()7 7ÿlater(constants.ACCEPT_RETRY_DELAY�  G ‰ ßstart_serving9 ðprotocol_factory, à, sslcontext, Q /erP qbacklogA Þshake_timeout_else:\ú&raise  # The event loop will catch, log and ignore it§] ðextra = {'peernam‰]addr}ˆ —2 = ` p_connecí-2(3  –U 3 !, z \?sslCœ Âcreate_task(§ !)
œ ²async def _ ¿  I /, ½ T  ä   %T=None* * Ë =øöSSL_HANDSHAKE_TIMEOUT)• 0 = j \ tÃ y>  ¬ B  ô(—dwaiterõYkfuture* 'if(
o  s �  \0._m × A/¨ 
2Ÿ = •±£_side=Truez=€berver=& B {=º  ßÔsï V
x_ ú UÛ   è ï  +tr'  ab   )erR kd BaseEð÷\.clos4 a Û	Z   ñ# It's now up toÂ   {lÙ !ƒà.

        exc÷ept (SystemExit, KeyboardInterrupt):
  Uraise 0excB QBaseE ªion as exc7 êif self._debug  ^ µcontext = {]    ž'message'; # ð	Error on transport creat” ðfor incoming connec /',n Ø Pion':Ì & }8 ÿif protocol is not None° ï $['3 E'] =@ \ Ô ] 4 ^  _ šUcall_ø “_handler(ª !)
6 õdef _ensure_fd_no_V (F G, fd1±fileno = fd?  «!if²isinstance(& L, inm>try@/   =0 < . 5())g  k Î ± (Attribute"T, Typ BValu ·  <   ð# This code matchesÆ€ectors._u Ñobj_to_fd funS.ƒ  G 3 j °(f"Invalid C ñ object: {fd!r}") from=K 	w  =“ &f.‰ s[V 5no]> 1Key
SFpass* +ls²¯p Ï.is_closing(3 ì bRuntimX(]   óf'File descriptorþ  ;wused byÇ'D {— H!r}'¤¥add_reader˜ , ã·back, *args¿  ¼q._checkÞ 6ed(K± = events.H(N  M ,‡,·; ¸5key²1selK¶.get_key(fd: ´
¯ @ ±register(fd‡ V Îs.EVENT_READÀˆ (é Ä ‹ rmask, (aò, writer) = key.&, Idata¼º Pmodifù  , T   |F¿ "½ � ¿  ã 2if ­  `›$  .c—lrreturn  
lremoveiX÷5 W
~Z 7FalV6Dl Àalse
       ‡ else:
  ñmask, (reader, writer) = key.events, Mdata: ù
 &= ~selectors.EVENT_READ* pif not k 
}  ˆ dself._D ù .unregister(fd)G ½ @  ¡modify(fd,p u, (NoneÙ ))
S 2if ú 1 is¤  - ¤ $ Š.cancel(–  „ ¹return True_ ² . RFalse� ’def _add_( , Ä öcallback, *args)œ  $ ç._check_closed™ ’handle = Â!.H (N  M  , D  , ô Ô 6trye  Ý Qkey =+ §`get_keh: ú except KeyErrorF  k @ å‡ 	AiWRITE,J ‰  Þð )Œ é8» b  |À #wÀ  ì #if��4�g[ hlremovekZA"""R$ $ a� 9E."""˜ ifú Ef.is�
ô‚ é Ò   `Dl € „ï### Dboth�and connÿ. è  j Þ	+  kÝ _ƒ#   � * « „"""Add aàÂÚùensure_fd_no_transport) ƒ œdc¯ c&  ¡ +b¨ 	 À(fd)

    deóf add_writer(self, fd, callback, *args):
  ’"""Add a 4 * U.."""&  J û._ensure_fd_no_transport(fd)) „ ~ 
/ ¬def remove° 
Ÿ R$ ¢  ¡ "rreturn Ñ 
  È š `async   “sock_recvL  <, n¡ ðceive data from the + 2et.ì  mRThe r~ ñvalue is a bytes object representingE S !re` !d.� K òmaximum amount of€ dto be 3 q at oncl Åspecified byJ n€ Z T²_check_ssl_Í ( ì#ifG‘debug andõ ö.gettimeout() != 0n ½ praise VvError("/P mustÁ Önon-blocking"s ;tryM Q ™ .¨n- “except (BH !IOp Ñ, Interrupted Ï ¡ Epass!Rfut =è æcreate_future(h  fd" §ock.fileno g8`handleH Pelf._Apreader(AG  å �a, fut,m �¬ .: Tdone_ó(  Ü ñfunctools.partialÙ.á_r _= 5” = )ð rtPawaitŠ ã /G \ L ± J W=Nones2if     s or not ·.cancelled(5  Ì Ã » -)Ž ¾…  F 6H$# ¸ €cv() canE0 ita ¥ as an I/O1 if��operation3 %'th#Á Gò immediately. Don't use it directly›ËÛ&()Œ if^.J û ƒr 8=W 6t ð  # try again next í‹ uõSystemExit, KeyboardxÉB QBaseEÂ bfas exc´  ‚fut.set_s vion(exc§Oelse1 presult(%/ò S_intoÂ47buf¹ B"""R™yùÄ, !iso@ten f ‚ *buf* (…·able buffer> 8ð number of bytes³ written.
  5""" ð_check_ssl_socket( )  ðif self._debug and ! õ.gettimeout() != 0:3  f ñraise ValueError("the: ö	et must be non-blocking"s ;tryM Qeturn> æ.recv_into(buf4 “except (BO !IOw Ñ, Interrupted )[ Epass¹ Rfut =ï æcreate_future(h  fd" §ock.fileno 'ö
ensure_fd_no_transport(fdD `handleH Yâadd_reader(fd, Œ_ì a, fut,), ø @fut.A ådone_callback(Ò  ‹òfunctools.partial(ª  Çy _=  , } › = )³ r‚PawaitŒ 
b Kdef ª \ ¯ t#1 À) can add it™ ´ as an I/O Ð @ if ?‘operation~  Ü #= 'M Å ñ immediately. Don't use it directly,V A V)' ifë .Y (7F ²`nbytesã +È´3} ð  # try again next ‘” õSystemExit, Keyboard×  ¶B QBaseE_0ionž6excÑ † …Bset_s vion(exc=Oelse1 rresult(.)U`async [šbsendal´Gdataº €"""Send  1 to+ < 2et.S  ¤ T�connected5 ta remot¤ö. This method continue+0to š t Bfrom
 òuntil either all €has been3 ft or aÂeò occurs. None is ãñed on success. On . , l& i– vd  drL `no wayä ñdetermine how much  ,`vany, waL w �fully pro„ Ped byZ ° receiving zo Q/iol¨nµ ß(SÉe T 0‹²if n == lena 
#9Esent� ÆK ²À()
        fód = sock.fileno()
  öself._ensure_fd_no_transport(fd) ð# use a trick with a list in cloA € to stor( Õmutable stateo `handleŽ x ò add_writer(fd, �  © á_sendall, fut,¼ ,E »   ömemoryview(data), [n]Ä @fut.s édone_callback(X ÷functools.partial(• « _>  , ° Î = )h Àreturn awaitÁ 
c Xdef _Ý [ â  º q, pos):3  ã  ifC .v (   ð# Future cancellation ð be scheduled on previous loop q, e  N ¶  pstart =Ž 5[0] 6tryœ  7 nÎ \ ³(Â [; :yñexcept (BlockingIOError, Interrupted á “ G õSystemExit, KeyboardJ C 6ais€B QBaseE”  1jas excÖ  +Bset_1 vion(excâ ù � ö R += nð $  if HQ= len¡ j ¶result(Noneh Jelse™ `pos[0]t  j `async `_sconnect_  ˆ, addresXB"""C)  ·�a remotekTet at3 .d  Î õThis method is a coroutine.5""" ¡_check_sslø0et(� Þ  ‘debug and ú.gettimeout() != 0rÓa Value5E("th¹ @mustÿSnon-bo&")Ä áif not hasattr‘ òet, 'AF_UNIX') or† `family€  ¶ 3et.# � `esolvebð0Rr 
e L‘", g =d . r, proto  ,¸=[ > F 5_,  R 4 = v  ¸� fuÎ C ‘.create_f= Š _D� çD  t 	çª 	f@ y ¢q' \ K ç ±kð# Issue #23618: When X!C  )u r) fails`EINTR,+ „  š## .  9 @runs( pð ground. We have}(PuntilG ~+etN €becomes „Y"toç„tified w° w Àon succeed o7r
  ‰# fails. ùself._ensure_fd_no_transport(fd)- ’handle = 6 ¹add_writer('  t 3fd,& ðsock_connect_cb, fut,  š, addressf @fut.[ ßdone_callbackb  òunctools.partial(–  Z — _B  , ‹ º = )p ùexcept (SystemExit, KeyboardInterrupt):ß Uraise B QBaseEM ªion as exc7  × Bset_1 wion(excŠ ?lse1 Ñresult(None)
x [def _è þ í aë =6 X 2if  @ is  s or not ».cancelled(õ \bremove]r� ç� ì	�   ¦o breturnî  O6try8   0errˆpock.get@opt( Òet.SOL_SOCKETi f_ERRORq F 0if I J!= 0_   Ð# Jump to anyÐ *Êclause belowJ 3 ò OSError(err, f'Cü ËƒCed {ú&}'‘ Á (BlockingIOG %, ‰!ed ›#M etÓñstill registered, thez  E  w ú be retried late%ApassÕ Ï ’ ›`async $ 0_acã�  ?A"""A 3 a ¼Fion.x4The^Òmust be boundÀ` and ls‡ning forN q N rÚ` value²€a pair ( a whereF % 3new‰ žÐobject usable‘ Asend‹ ò receive data on†Aion,$ �N !is'  æ  @ 6$etJ `other l !of4  » 1ect: 7  5"""[ ¡_check_sslµe¨ù#if+Qdebugž  r  Ù®timeout() ¤mVI'("¬ ®Snon-bQ"s 0fut? ýæcreate_future(# ò± CX š % ÎPawaitÙ: |	:  L ù‚ fdˆ  Çgfileno� ô h#7 ß“ À     conn.seótblocking(False)
  “except (B  ñIOError, Interrupted %):4  ; öself._ensure_fd_no_transport(fda  - ’handle = 6 ãadd_reader(fd, psock_acŽ p, fut,  
H @fut.= édone_callback(˜  o òfunctools.partial(x  Q y _A  , } › = )o õSystemExit, KeyboardUraiseŽ B QBaseEeªion as excK Ö Bset_1 wion(excŠ ?lse1 ñ	result((conn, address))
ƒ ñasync def _sendfile_native", ¯ ,  ÷ , offset, countØ 3del¡0 Rorts[ !._Q1fd]q  z ’ !medSing =e 4.is (Ù F Epaus3  TawaitA À_make_empty_ 'er* :try!rreturn B üª (z À ,Ò  Ö  fŠ=\kfinallœ | !reôÒ  r :if O
ä  # L 
'  $ ÿ œ½¦82ãprocess_events1 H_lis öfor key, mask in & 
°  gbobj, (û°, writer) =A .  ‰key.dataƒ"ifa &�òectors.EVENT_READ and W » is not Non6 T yº._cancelled§  &   7Rremov� ­fileobjÂ )   e£    G  ´¯¨ 
E ß QWRITEà /à ' à 4 (ƒ
›  Æ à M †N�stop_serv€ Üz  *._n ³7no(™ ñclose()


class _SelT„ ¯ÿ._FlowControlMixinß7 L "):pmax_sizÉñ256 * 1024  # Buffer  òpassed to recv().< !_b$ 0_fa½Ðy = bytearrayB àConstructs ini´p value `A O Ð# Attribute up ’in the deG ðor: it must be sð*et even if the constructor
    # is not called (see _Sele# óSslTransport which may start by raising anM ¡exception) Ñ_sock = None
 ð
def __init__(self, loop, * ð, protocol, extra=9 �, server !):G  » …super().O 3 P  & Qelf._  ['e �et'] = tr .ß pSocket( = 6tryp N AnameP  9 @.get   (F � OSErrorQ  û ì €if 'peerZ '°0in ?Û 
U · » L   ³  »  »  9 ¿  & Net.eÄ  % Œ [ª  ^ 	È '  K ! =óâ  3_fd ’.fileno()<h '�_connecte2 ZFalseP Dset_, (	 N _ t h
C q_buffer  J 0_fa y+Á  ‘ �_lost = 0_ Se:!ena0 to‚ ³ 2ion( «scheduled.y 1clo]!= Ú 
M alose()U : #ifÔ Ý „
#® & ‡._attachÍ  ”4._tü#s[0 `ock_fd×  —ÓCreprÓ¤sinfo = ? °_class__.__É5__]ó ¹  2!is3
³  L �.append('7ed'elC   ?ing> 7ing? ] `f'fd={á .ÁG_fd}+ d# testQ$P was { .edÖ  Pj �A andÇf   B.is_? (A ô@pollf0= _z #_sž_ÙtF!._C  ,ƒ  A  „  •0_fdnýÆs.EVENT_READh L 3if ” 
d 5nfo¦Sread=+ B ( Oelse> Widle'³ < R  SK9<_WRITE=“state = 'â '| 34 *“À         bufðsize = self.get_write_buffer_ G()
  áinfo.append(f'. à=<{state}, buf4 #={	 6}>'? ðreturn '<{}>'.format(' '.join(Y 1))
m  def abort(˜ !):  …   ÷._force_close(None6 Áset_protocol= $,  G  % =$ i " ö_connected = True§  4' q g ñ µ % ; !isÄ ?ing9 
 è 6ing8   e3 "ifÄS 4 8Š Þ  H 4ingÓ  (   ¯ ñloop._remove_readers –._sock_fdØcif not :
~ R  D¥_lost += 1Œ s Zs 5 “call_soon£   p aectionv +, +q__del__3 €, _warn= Pings.	 Ê^ ý 1 isñ  P 
é E P(f"un\àed transport {ò!r}", ResourceWarning,  =" Vã  t .Q (ê²_fatal_erro'ð, exc, message='F     6 on‹ 'Ø À# Should be 5ped fromJ  ep;å handler only.µáif isinstance(x 0OSE‹ ]  Â 9P -kdebug('  + rlogger.  ‘"%r: %s",WÖ ä _+=‡.JelseŒ N!._w  Ú B_excÓ _Ó %({Ï     '=$':G,$ I  ':("  ö"':¿ E " .µ
O }â Ð û9exc - ,h‹ 
1$/ Ò k.clear' � ~EÒ	E í:ing  S  µ ¾! òt ¹1 
˜ N @_�5  \ „l * Ü 6try  È z%
)  - § * .q  k ~ðfinally:
           ÷ self._sock.close()
    = None  �protocol" Oloop drver =† e 	b Aif s q is not„ :#  ® $ ‹._detachÄ ! ç K Ê F ðdef get_write_buffer_size(û )k ¡return len ., %)
G ±_add_reader# ÷, fd, callback, *argsR Ü  —  y6ingl  ² p ^    �  ._J.i c õ


class _SelectorSocketTransport(  "):k ò_start_tls_compatible = Truüš_sendfile  Ãconstants._S! ò Mode.TRY_NATIVE`  pƒ__init__& Ô  , ƒ$, L�, waiter=t,c  Rextra ! Æ  ( 1 �•Ly_cb„…super().‘ ‹ m ,h  a ¢eof = Fals { opaused bempty_å — ç `# Disayñthe Nagle algorithm -- small ´†s will b~ á# sent withoutI€ing for O ÷	TCP ACK.  This generally~ ‘decreases1 ñlatency (in some c æsignificantly.�base_eve±set_nodelayîk5+ x.*D_sooað.connection_madeŠ&lfq q# only ¹ ð î [when 9 �() has be Ualledô Ì‡ Öˆ  Ã  D  È_–  � €± !if•/erÕÔ qwake up‡,Ù  � Š Ý �futures._£ðresult_unless_canceñ  \ – ,˜× ã U ÀùÛ
1isi94ce(0 + 1s.B‘3edPd=  ~ Ú dä _âÜòJelser7 1 â_data_receivedÖŒ M	û Ô !is1ingÒ óçv B7and .y  l& T eð  or self._pauseGd:
  ereturn ûself._paused = True òloop._remove_reader(6 …sock_fd)1 2if  4 ºget_debug()ƒ rlogger. A"%r   s ] Qing",F !)
X ’def resum} 1ing~ S v áclosing or notE Û 
� LFals?addü «  a! y/î Š  y I  G_cb(I  0y__ CbuffÐR�onn_lost@  [:try! Tbuf =�‡rotocol.p &-1' A !if²wlen(bufŠ     ÷raise RuntimeError('P ") ÓÂed an empty Û 'i ûexcept (SystemExit, KeyboardInterrupt| x è B QBaseEM ªion as exc ‡qfatal_e® D  Î   pexc, 'F#  # ?: p* ç) call failed.Î  D õ (  ˆenbytes‹ ±¡.recv_intok˜ Ü ±(BlockingIOg%, !ed "
PG ebT Y@ on ú Ïet transportI�?Û ^ Hvon_eof(i ‹›#ó®’_updated(z S Wj$ Ù   h¼É ÀM  Õ? üy__data_receivedÕá�
 š    ] f ž.max_sizek	©Àexc, 'Fatal ÷read error on socket transport')
  ureturn
 Åif not data:  0 `self._\  ¯y__on_eof(P ?tryH �protocol.i  _received( P úexcept (SystemExit, KeyboardInterrupt)_ Uraise¹ B QBaseEM ªion as exc7 Þ afatal_;(D  ý   pexc, 'F# ^/: Æ ò) call failed.')^Adef ; @ { Å 0if  ÷._loop.get_debug(#  Ž rlogger. D"%r Da EOF",D y  / ‡±keep_open =, %._Í 6eof’Ž¡
Á �  þ 
!€# We're  ð ing the connectTJ so 	9#$ð can write more, but we still +'t: Ò/ �so removed  ˆ!erÛ Yback.; @_4 s2er(  7_fdÛ:lseï ) cclose(F ¿¿ E ,"”8¡isinstanceÌ , (bytes,  ÷array, memoryview)A  “½` TypeE¿0(f'ñ argument must be aO ùs-like object, ' O   f'×B{typš ×).__name__!r}:eof� cRuntim  @'CanW ïr) afterê ^ €mpty_wai, !ist;Non†s ’unable toc ð; sendfile is inpZgressv  ¦  LÓ ýù_ÚZ_lost0   0 >= óúts.LOG_THRESHOLD_FOR_CONNLOST_WRITESO   È�warning('œ0et.Õ 1() d¯ eph M 6  ® Y += 1á  8 jbuffer”  # Optimizap P: tryl � J nowiV ˜ R Ì Ê  {o & š±(BlockingIOó%, Ù!ed # < Ipassæ àexcept (SystemûExit, KeyboardInterrupt):
  Yraise Áexcept BaseE ®ion as exc? ð
self._fatal_error(exc, 'F q write  ù on socket transport')y  š ireturn Nelsey pdata =  I[n:]2  I aif not  =  ! j  Ñ# Not all was½ Ñten; register ©e handler.s ¡loop._add_ú "r(  ø R_fd,   …_ready)
F ø# Add it to the bufff <  pextend(þ D" ómaybe_pause_protocol(h Bdef ›    cassert§ k @, 'DkashouldT–be empty'½ #if5 šconn_lostum:try  3n =A  , .sÝ Ï † å žÀ(BlockingIOEw%, å!ed ×  ïEpasslE oSystem-
)B %Æ bremove�á  ­ 5 û .clear(! w3¼Õ@_waiì!isì?Non}   0 R.set_0ion± Á �
 ö 3delú :[:nØw áXresumâà  # May appendFF 
¨ z oâ‰ h ´ Â K  7 p O ã 0lt(ƒM 0   k ~closingÆ  & Z Pcall_šRectio W %elY ?eofU 	©€hutdown( §et.SHUT_WRoí<eoflh Á 3 orþy >Õ –eof = Tru¾Ý:  ¬ /.sº 2can«_¾  “  W[i u ,>’Ÿsuper()._2 6excñ(  Ÿ À      self._ûempty_waiter.set_exception(
  `Connec vError(" ñ is closed by peer"))
B ¨def _make_l q(self):"  g 0if  .%  V †not None+  / Óraise RuntimeŽ EË  Ë  : Õalready set")i f  ={ öloop.create_future(8 0if ‹ ? jbuffer“  ä Ppresult(Ã M creturnw 3 3!re� Õ  4r ! =,õ


class _SelectorDatagramTransport(  "):~ _Þ 0_fa: py = colG ¢ions.deque) Úq_init__œ  , Cð, sock, protocol, address=,Š È ³ a extra ”super()._n h < f } $ =‡ �    K ¡.call_soonÈ $._¼ %.côa_made,´c Ð# only start o›ing when 9 �() has be _alled‡ @add_V /er7 < Ë  x2_fd¥ .:  y± 'if" Ñ ”
ÉÔ ´wake up the3 Ù  œ ™ d]0s._â!Ð_unless_canceñ  \ 8,óm”get_writeÉAsizeØR‚ðum(len(data) for 
 T, _ iŸ` S yV Æ þZ_lost[v ú:try  }  ² • Ô‘.recvfromp P.max_Ô ÖµÁ (BlockingIOÑ, Interrupted  BEpassŽ E !OS* z as exc  ÎeÞ_received(exc“ õSystemExit, Keyboard– � Ö� TBaseE•– afatal_“  Š @, 'F –  1 onß 	$ t
'´ +lshñ    > ô   á"asendto­,r " ÖS`isinstø‡ , (bytes,  ÿarray, memoryview)4C Typ f'“ ñ argument must be aO ðs-like object, '
  ôf'not {type(data).__name__!r}')
; 0if )  # :   ureturn
 úif self._address. 0if  L šin (None,1 )2 d õaise ValueError(n    ‘f'Invalidc  { � must be g Y or {› à  E š =Ž Ù  Úconn_lost and. 
» 2 ú>= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITESO  £ ðlogger.warning('socket.send() r(Çd exception.Á > þ Ž I+= 1KÍ  ö8 jbuffer” Ð# Attempt to † ù it right away first.d :tryD  š +°extra['peer‡.'],  0 ’  þ ü  ˜­ "   Oelse@ !toý,:H  S  dÁ (BlockingIOšÑ, Interrupted Ï ½ Aloop&‚_writer(  Ô 4_fd TŠto_ready™ ‚ !OSg 0 asøî V  protocol.e@Ú_received(excV  à ï õSystemExit, Keyboardò ë  ’	ÿ· TBaseE¨½ afatal_º úpexc, 'F'  M - @ on ëgram transportñ ¨ ñ # Ensure that w "e  Ö is immutableÚg# @.app‘a(bytesZ)[m1 Ämaybe_pause_¤"()uXdef _ "eSwhile�z 
ÿ ü x  Ö' –.popleft(�  šœJƒ(¯­4ö))  # Try again laterñ 1  Ubreak:  ˜ ™kÀoardInterrup[t):
  Yraise Áexcept BaseE ®ion as exc? ùself._fatal_error(L m pexc, 'F' q write - ý	 on datagram transport')D ureturn
 w õ!maybe_resume_protocol()  # May append to buffer.? rif not F  
Û  Ñloop._remove_· "r( zsock_fd© #ifR zclosingS  = ðcall_connection_lost(None)
imR coll s Âwarnings
tryY , Cssl
³I> E‡:ñpragma: no cover `ssl = o “

from . J ›constants Z ± 4logL õlogger


def _create_1  þ ótext(server_side,  ƒhostname­V& û  L¹a Valueò 1('SM  M ð SSL needs a valid 0Conv "')I‚# Client2 ðmay pass ssl=True9Ñuse a default?2# cF ð; in that case the:  J Qed isjzT# TheM   Âsecure for cŠ s4 ÐPython 3.4+: � ðup-to-date strong sett3 4ssl† =“ .~Æ |½c|gN t.check_# c = Fal<  n { õ


# States of an _SSLPipe.
_UNWRAPPED = " ð "
_DO_HANDSHAKE  7"
_6  °"
_SHUTDOWN0  `"


clÍv d(objecP"""An  "“ "". ð pipe allows you€communicu@withÑ „SSL/TLS ! i?cNãthrough memory‚@s. I0@n beÌ�`implemˆ!a ‘ity layer!anx@exiså 9a where£ ðdon't have accessµ  “Qb's fil� Òdescriptor, og ·some reasonR @wantK  x/it' !caÌ `in "wrq¥d" and "un •mode. In    ,Ø  ÿ  {4ed 7!un-aformed= O ;  Ül� œYlevelM pencryptP oçqrecord * r¥ ±vice versa.› 5* N . !isÜclowestB úeZ þ su× ü @is wqtravelsL `as-is …N GwireN sl‡  initially S1"÷  . To start{  , I^ âdo_handshake()' ðhutdown SSL again, ñcall unwrap().
    """
	 ñmax_size = 256 * 1024   # Buffer  òpassed to read()< õdef __init__(self, context, server_side ñ hostname=None):€ �     SThe *F ò* argument specifies the ssl.SSLCm  — Buse.• E ‚ I óindicates whether this is a´  ´ 5 orŸ 1cliƒ Ûide transportn £optional *w ì { ƒcan be uJÓ yÑ k 6 € you arePó	necting to. You may only A õ is parameter ifO  ,ð _ssl module sup¼ 1s Sžr Name Iƒion (SNI! G %     ß#._™  =™  ék   ý B=P( ï ,  0 0tat£«_UNWRAPPED! Pincom&=»MemoryBIO()) _outgo) �sslobj = ­E @needXËdata = False# Ïhandshake_cbE ‡shutdown! D ‘@property  dvc
7 .4SSLŽ ¨ ûÈconstructor.Ìrreturn ³] =| ¯ssl_object Pinterú•O- ˆ instanc–Rw  P0 iføP pipe|@not Ÿ2ped  s³ ›² �´  W÷ñmore record level Î0is A íµcomplete a Ð– Ÿ @that¼ ÿcurrently in progressp ^ <Ã ¾  ~ Ç  ¶ curity layÿ)s ’ Xeffec¯‡µ@ durÞ ~Œ4= _‹•  ©5do_J ½  , |Obackô QStart Ã9 Z« �a list ofÜ ¦4. A A ele"Â( b¼s` ­ )¤• �¿Ell aÁ  ðê  P @willÍ J  edLnÊ Æ ? .   +  
 < L    D 1ithm ñ	successful, else an exceg] Œ   ,ðif self._state !=ç _UNWRAPPED:
  õ)raise RuntimeError('handshake in progress or completed')E ò self._sslobj =  õcontext.wrap_bio(/  { $ “incoming,4 Poutgo , ¢rver_side=8 %se ,+ {hostnam/  ¹ õtate = _DO_HANDSHAKEW r æ_cb = callback& °sldata, app	 @feed  µ(b'', only_O V=True‘ ³assert len(I e) == 0h ‚return so 
 Ðdef shutdown(¯ ,  f=None)ïõ"""Start the SSL8 ¢ sequence.T  ¤Rl ”a list ofv 4. A Æ element is ( vbuffersJ äThe optional *=a* argu? õ	can be used to install aÉ Q thatî  š @will0  J qed whenÒ  � © . ~  *  ± ; K    C eithout’ %s." 5""" #ifªs4=U÷
no security layer presentLb  †SHUTDOWNÇ ¶ µ\ ^ #"._Â Sin (_,–1 4= _�   ƒ",w ¯ 	  []ƒ Eb'']ˆ …1eof÷end a potentially "ragged" EOF²This methodE� anHñ _ERROR_EOF exceë1 if•  %is¥ ¯unexpectedcMp.write_½ þm2 K§  Q4i 8 , ÄÀKFalsb@FeedÑ record level> Q into8pipk2The! @mustÚra bytes
 —! Ie OK s¶rn empty* ¹  <2 ²Z5get¼efor a ‹Õ initiated byO t÷‡endpoint(%Žr) tuplex (d 0 3aaining? pø` needsù 0be 0   ÂQremotÉš  L#Àelement is aó" list of buffers containing plaintext data that
  ðneeds to be forwarded òthe application. T C m 4mayf O ƒan empty‡ A indA ðng an SSL "close_notify" alert] "is F musŸ ðbe acknowledged by callÖ µshutdown(). 5""" õif self._state == _UNWRAPPED:&  ü# If unwrapped, pass5östraight throught  B !if[
W   1app10= [ ]x Oelse3 

/ °return ([],š P %)
Q ì  Ï@_ssl … = False# ¦ 8 ð incoming.write(? \ Q [“ Û  :tryÒ † ÊDO_HANDSHAKE-  2ú%# Call do_handshake() until it doesn't raise anymore� F Ö zsslobj.L  (   , &# _#' Ê ˜ >_cbÀ R ( o(None)T Fonlyë P úÙÿ n  4# H6ð  done: execute Ðâf block; A Þ .	“ q# Main * a: readþQ fromä®éú Ÿwhile Tru  � tchunk =ÃÉ k (¯max_sizS  = ›.Ð1nd(L } * qif not " _:  # µ 
 2   Kbrea@/elB �SHUTDOWNCæÄâ+½(ä - `obj = †‹$  %) â {Þ G_cb(N B/z 0 DrtŒpossibleŸYafter½÷ ù\)Bðexcept (ssl.SSLError,  `Certif×e Š) as exc¶ ñexc_errno = getattr(exc, ' !',�p   ifH 7  ˜Min (‡ *  ˆ ÐSSL_ERROR_WANÿT_READ, ssl.SSL_ERROR_WANT_WRITE,
   
. �SYSCALL):, óif self._state == _DO_HANDSHAKE and! Îhandshake_cbH  ƒ I ( ](exc)t Yraise : ð need_ssldata = = `_errno— 
Ñ ÿ  %)
I ñ
# Check for record level P Pthat b ÷s to be sent back.B qHappensD Åthe initial Õ ærenegotiations@ Múoutgoing.pending0ã .l "d(ý 3 fread()6ƒreturn (6 P, appÒ ú Pdef f9 O ,ô §, offset=0ùñ"""Feed plaintext+ ` into ò Vpipe.UR~ a� V À) tuple. The� ” P elemXÅis a list of_ÿbuffers containing¨� J óremote SSL instancˆ › 1 isÌ —number ofî @byte %atN ð
were processed, which may'1les/ nR `lengthR  ï (ÐNOTE: In case  ðshort writes, this call MUSTX Áretried with[ ESAME“ +0 pa’ �*v a* argugQ(i.e.> �id() must\ &th_Psame)¥ ispan Open:arequir°ð
. A further particularity3  :™ 'a Ù ð will always havù  q °¡0, because   Øf modul› ò does not enablez #al5�. And evez2oug&áFzeroü » e�  st– Äbe encryptedã§²6"""Û £ssert 0 <=9 
 @len(v‘æ3šUNWRAPPEDé#ÁA thrÀ  G € in unwrüd C%if{  z 
U  ' @ = [U [5:]]Í  & Oelse< 

/ i� k T z > Ðview = memory 2›while Tru� ú •  Ê k = Fal>tryÇ * w ç ¬  3 +=Êqsslobj.œ(8 @å < `except5 yÎError as exc� @# It- Ïpallowedhói s) afterþ€() until	µ y Ð# close_notifðy is acknowledged. We return the condition to +
  ý# caller as a short write.+ ñexc_errno = getattr(exc, ' �', None)8 ýif exc.reason == 'PROTOCOL_IS_SHUTDOWN':9  « u  F k ý = ssl.SSL_ERROR_WANT_READD } ¸ �not in (= ,>  ‚  >  _WRITE? "�SYSCALL)þ ]raise– ðself._need_ssldata = ‹ç =))
M €# See ifñre's any record level ] ºback for us2if Œ þoutgoing.pendingÎ © 0.ap# (7 jread();�if offset3Ãlen(view) ort  p Ubreakí  ù Ò ,Z ô)


class _SSLProtocolTransport(t
 ÿs._FlowControlMixinî: O "):~ð_sendfile_compatible =«“stants._S! ÒMode.FALLBACK= Ádef __init__Fp, loop,#_pÂ Ni # ! =* '# ô 0 in} cm9 5sslV v I * æclosed = False­ ãget_extra_info³ áname, default=7Ã�"""Get op¸5al L B 0rma E."""‚ ß‰ ³ +._ 	y  S5setÙ ¤ M
a  : 6app> 8 
 ^ ¡¼ W M 0is_l?ingK 
 $ &ed7  2 @"""C¸ h.6  ù‚Buffered	ñwill be flushed asynchronously.  No more. ž6 `receiv¤@ Afts N 	a $is\ ,“ C = 's'0necñ _lost() method g Â(eventually)ÚdE Awith£ ìÆits argumentÕUN7 ×?Tru	÷._start_shutdown(]U__del¯`_warn= Pings.	 0if ¦}  ’Ð_warn(f"uncloòsed transport {self!r}", ResourceWarning,  =" 7)
    ‘.close()
 ð def is_reading(! !):  7 Ptr =  õ._ssl_protocol._ˆ + Öif tr is NoneB  F ÷raise RuntimeError('SSLÍ öhas not been initialized yet'Ã §return tr.³ É _pauseÌ @"""P  ò the receiving end. « ñNo data will be paswo6  !'s& _F 6ed(£ pmethod ì vl resum‘ )ucalled.85""" j
.Þ ÷ g  F ÄA"""Rˆ Ã ³ ù Dö  "edÿ ¯once again
	½  8 
é !Ð ê ñset_write_buffer_limits·p, high=Q, low
 
1Set ) P- and( r-water J Q for b × flow control"ôThese two values# � when to áf .$Ã `  m)ƒ î  9õs.  If specified,E  À8low¸ @ mus>ð less than or equal“ 5the> ü ó ¢.  NeitherÑ 1 caðŠnegativeû ó defaults are implementation-¬ cº @onlyz  `given,' ‹j Uto anF t ½  "@Sett  /@zero	0ces–  %as† Qwell,¿cT,s Ú to5  Opheneverè C Âp becomeÿ¤n-empty.  ‘  ‚1to � h > 6	q |À -j 2is a E bUse of`  ùžõenerally sub-optimal as itD @redu) op—u¼ es>0 doU2I/O(Bompu)< Ïconcurrently)! É;g;Asize9
$Rd3he œ  *  ( L §"e R.¼r8  }-.… ¦ ‘@property  ™à_protocol_paus³ed(self):
  õ%# Required for sendfile fallback pause_writing/resum e logicL preturn b õ._ssl_protocol._transport. _Z !d
? @def d e  g, data¦ Ñ"""Write some æ bytes to the _ O  Ý ñThis does not block; it buffers8  g Ñ and arranges!it”  E Pto beõt out asynchronously.' 5""" !ifq °isinstance(f 1, (² ,¹  o çy, memoryview)í  x ðraise TypeError(f"E p: expecŠ! aI ts-like k &, ˆ  G  ¢f"got {typ– Ü).__name__}")Â r   K á éÅ@_app> ú )“ â1canJQe_eofê÷ B"""RA�True if tÂÛ@ supBs)C q), Fals. Hnot.ˆ­   ƒ _abort{  QCloseq �immediateëö B@"ed‡@will#Ólost.  No mor£ †received0DThe p's conn×0on_H ¡() method B õ (eventually) be‰ Pcalle$ öth None as its argumento µ$ c@d = �Ó


class SSLP×(Ã $s. Ðe"""SSLã .€PImpleš €ation ofM p on top ða socket using incom	  ¡�outgoingþ Ãñ which are ssl.MN²BIO objects ý 6  ‚�__init__µ, loop, app–,K ñcontext, waiter,?   Áserver_side=‚#,  @hostS=“:   ¶_ñPmade=b,   Dñhandshake_timeoutY h �  if³ 1 isÚ  G0Run< Jq'stdlib4 amodule¯£available'° ? [ _ƒ m ®   =Þ 	õ	ts.SSL_HANDSHAKE_TIMEOUT]/elp O<= 0Ú CValu"G  ¹   /f"‘ `should´ÿa positive number?3L  5x ø3ssl?
±  ¦ = _create  s(O  Ã   W jd«³- # =’À_side
      ô  if server_hostname and not wside:
  lself._7 =1 I 4 ?elsB ENone7 g Õslcontext = s & ñ# SSL-specific extra info. More ö are set when the handshakn Å# completes.] ƒ T v= dict(ƒ = %)
3 õ# App data write buffering# V  ÿ_backlog = collections.deque()2 P –_size = 0z W ‘aiter = w	 C ploop =   øset_app_protocol( Š   €transpor˜S_SSLP9 T (‘  l  ,  F !# 2  ip €stance (ýa until£Bconn† is made@  N `._sslpC  = ; Ð ö	ssion_established = FalsôG 5in_# �shutdown" %# 
€, ex: SeÈ…orSocket  5  ¿ Vcall__  %  Y 6sslÐ p_timeou¤ >]def _  , ë)  .1) =, – G B_is_E = \)  bBisin	€$, ƒ 1s.B $edp|Ä rwakeup_û€ “ c= ½ õ Ä)  ` " Þ  ‹ ereturnž #if8  .c¹Wlled(]  < `if excX  I\  $ B‚ .}Pexcep F(excì , B  B aresultI@ & lÖ  2b3œ× P"""Caì E¦low-level G  ô  ¬.Z § QStartÓ6SSLzf1"""‘  - ® � & =^$ þL¾ 2,3  [  p Ì ë4 îqsö ‰(§.Q_lost· ¨o# D § or closedyÀThe argument˜ðan exception objecót or None (the latter
  ðmeaning a regular EOF is received>  8 åconnection was@ Rabort& …closed). 5""" õif self._session_established:&  • ' � = False.  ò loop.call_soon(C Öapp_protocol.¿ µ_lost, exc)J Jelse† ð# Most likely an0 !epÿ öoccurred while in SSL handshake  Î À# Just mark Gòapp transport as 6õ so that its __del__ž H údoesn't complainh ` ö a ais notÿ
à  T '1 #._� V= Truk+ ' ! =S ¢  
{ # ¡if getattrŸE, '_3�_timeout Ale',^ )² d 4 †.cancel(Ô0 éwakeup_waiter(õ!  µ &× tsslpipe õ ñdef pause_writingÕ ² q"""Call&!enû–low-level÷'s buffer goes ovš .¡high-waterBó[È .› %)
´ _resumµ 6Ádrains belowc  V ¸  ë ·  ž ¸ Tdata_“l ,  rAsome™ ' Ñ. « ÀThe argument# Pa bytˆ_bjectni!is®
­#äâWing, 2 •destroyed7 � freturn  :tryW 0sslÏ P, app	 $ =V¤c.feed_& (" ÷except (SystemExit, KeyboardInterruptP‘ 'aipB QBaseEM  ;as ;�ðfatal_error(e, '$  1 š b'¤ t �for chunk9 Û Y�.“!e(4 C X 	H @
H "ifi 
  < ‰    GB_is_×J  5   s1s._´ 3_to8 "edº( 8  iz ,Á Ð)
             delse:
  ýself._app_protocol.data_received(chunk)@ ÿexcept (SystemExit, KeyboardInterrupt)x _raiseR QBaseE] Ÿion as exF º Ífatal_error(S í Ðex, 'applicatW ì ³ failed to ñ P SSL 'ô  O ireturnj aŸ þ start_shutdown(T abreak
P vdef eof{ C C`"""Cal¯ ñwhen the other end of ñlow-level streamY  ¸ ò is half-closed.r   I9 2is Ù ñs a false value (including None),f •transport_ Qwill \ 0 it¸ ‡.  If itX 3truW ,+  U &th	V ` is up• ä ¬.m 5""" :try1if € ÷_loop.get_debug(I ÷   rlogger.  4"%rqd EOF",H )* 3 [ ðwakeup_waiter(ConnecX`ResetEŒ7 aif notQ ß._in_handshak™ ³keep_open =0 	�	!O5if A 
 ¾   õ ’warning('øŒ  Jfrom†5) 'n A  ñ 'has no effect £ usX 7sslMkfinallµW.J(E _É°extra_info(1 ñ, name, default=¡õ  tcame inH?    È ý   [T ]ñ %elPž  Ÿ Î p O 0 …} ¼  b ¶ ÃGž à ‰V ß² %inz¨ å 1 š c w._abortÅ³ ( y f = Truå v% Pwritez nH(b''ï
  1 ,–ç   "._) ðbacklog.append((S F, 0)^	. ñuffer_size += len1 - zprocessc 	•ˆ3–¢ X‹’‡W sŠ\ � A Õ $ Ð_start_time =ó self._loop.time()
  Uelse:   , ðhandshake_start_7 u = None. * 5in_- f = Tru" õ0# (b'', 1) is a special value in _process_write_backlog() to doj ¥# the SSL k  † 	@ „.append(} ï - E × 1outÂ ele = \X 8²call_later(E 1ssl7 &  Iout,?  C  ? ^checkA «  
h _def _I ¦ )Û#if	°!is±'  ¯ qmsg = (c    )f"‚ Óÿtaking longer than "8  {ô 3¯} seconds:; Pabortd  ªconnectionf 6 ¬ m Õfatal_error(C8 AO 1edE Wmsg))KoË‘_completeI,yG_excXm 	Uf= Fals# uƒ.cancel(‰ Á sslobj =²€sslpipe.?eobjectc:try¼*ifª  ¥1not¹
*  i Zraise1     €peercertŒ • D.get G÷xcept (SystemExit, KeyboardInterrupt6 \ } Ê eB QBaseE ªion as exc¸ �if isinst7ñ(exc, ssl.CertificateÝm  q Ø'Åõfailed on verifykP '¥  F 2  \ 
? �Ã  ‹	g freturnŽÀŽ«get_debug(è d«ï# -K…×	w rlogger.\ J"%r:vñ  took %.1f ms",V §, dt * 1e3Ãð# Add extra infoö
t becomes available after‚.� (A „.update(x=	 n
‚cipher=s· /()3 ¥ompression8  = ž< k 
²ÙbâO_mad›0app7ktocol.0 ­ð._app_transport)
  óself._wakeup_waiter()
   õsession_established = True) ñ&# In case transport.write() was already called. Don't C ñimmediately _process_F ÷_backlog(), but schedule it:A ñ_on_handshake_compleƒ acan bep øed indirectly fromA v ?and” w is notH @reen	%t. KPloop.b_soon( u !)
; ?defx  = )ÿ ñTry to make progress on the G G– #ifä ® · Í sNone or tsslpipe r  &breturn¬   :try! ôfor i in range(leö ’ Ù)É  G   ãdata, offset =� 	6 1[0]% .  0if 9 
…  0ssl V ã �.feed_app% ( * K Celif� l 
º d &do¤(¿ _  Ý.ÐŒ  5 (1T Oelse¤ tshutdow«�finalizez {  þPchunk~‹ ‰‡><  æ  |0 < S ¬C  / J8? = á < “# A short@Ãmeans that a  is blockedk a èL pWe need¤aenable- �ing if itapaused!A cassertN Q _Y6 â"._f ˆ « 3Œpresume_Û 7ing  -  Vbreak	 Á# An entire Ît”Ž! W©nÍ @# deÏ * ŽareduceI €outstandK¶buffer sizeç� 3del@o ' T _T 6 -=q5 ûexcept (SystemExit, KeyboardInterrupt FraisAB QBaseEM ªion as exc¨Ð&inH
#  î %# G ðs will be re-raised iûn _on_handshake_complete.
  _self.- Y(exc)1 Yelse:  N C °fatal_error9 @, 'F   ñ on SSL transport')
H Xdef _;  M ü , exc, message=I E � Òif isinstance� 0OSEŽ )%  ® 0if d û._loop.get_debug('  + rlogger.  ‘"%r: %s",? ž ¬ ¦_info=True0,w Ãcall_excepti©Qler({ {  '$':,$ I !'::" 3:¿ %._ P  ’protocol'- 
" }ã KM 
kñ  Á._force_clos£	€inalize(5 Œ  ò._sslpipe = None; #‚ q is not( Ž ‡ „ \abort� :tryH t  ¤ Â f Ffú le 5   €)
"""Sup;ð for running coroutines in parallel with staÀ ed
 ðrt times."""

__�U_ = '& ±_race',

img ¤contextlib ó typing

from . ( levents Ü@s as•ê[s_mod+ Llock? àtasks


async %
§ (ã b_fns: ž £.Iterable[ ACall 4[],$ PAwait &]]ÝUdelayG Oš‡al[float' *2  B":   .AbstractECLoop­d,
) ->z aTuple[¾   2AnyR  y $inw  DListÖ & EiB]]
]©h"""Runò and take the first to finish.i¢This metho+ cs an ig6 ofj P funcÒEs. TP aone isô ðstarted immediately. FOñthen on, whenever‘ ( p precedõ  ZÁfails (raise• 	Q), orK ! *Øñ* seconds has passed,c Anextœ  JK C©  Ç 0is Àinues until Ò !of? 6  & eN Ðsuccessfully,œðwhich case all others are c³ ll‘ #orb 1allG _  î ’euðs provided should beÿR well-behaved in the following way:

    * They should only ``return`` if completed successfully.> ðalways raise an exception if� •y did notU ƒ  Z õ  In particular,< ð handle cancellaX ,V ½ L ±probably re‰ Ã, like this:ô  ø Ctry:2   µ  # do work ¿ ¢ asyncio.Cy |edError= Bundo· Eallyá dS  k – ?FArgsI �coro_fns:<Àiterable of   utine funcù Às, i.e. call& es thatº g Ä' a> ±object when: ¡ed. Use ``X Qools.zyal`` orP �lambdas tç Òss arguments.Ì  t Ðdelay: amountº Ptime,ðseconds, between stã&ngŸ Ys. Ifs �``None``ç) ð will run sequentitˆ Ploop:p event   ¹ 3use& R}ótuple *(winner_result,  findex,Ñ0s)*G&reü 3- *- < *�  !heO  €ÒT, or è ý Yif noó #on»  im š l  k 7 ina  ``„  o `…  p{ ! IÂÁ I  G � mauPturn ¸4 onÙ,£ *Å‡ be usedK ðto definitively determø whether an["roq w²¡ions*: lis„ ! röQed by¼ 's.‡ f``len(7 À)`` is equalF K`numberlD P actuŠL çqed, ands PorderO  F psame as!�.”k	€'s entryH =1""" p# TODO:¦Pn we 	  aV!()�  anext(), aæ   P!in~ !D=K"orYàs.get_running_" !()~ Penum_ @ 0 =  derate( ( 	2! =8A  / –Q = [], € Rtasks  ¹ R +A_one’ (  E  ñ
previous_failed: typing.O¸ al[locks.EGQ]) ->£ ´¡# Wait forÞO  Œ  , Î!shæ $ ! ‰ 4if 9 ˆ  Ù ( Hm  ± ðwith contextlib.suppress(exceptions_modû.TimeoutError):
  ù# Use asyncio.wait_for() instead of ¿() here, soL  ñthat if we get cancelled at this point, Eventn  j Os alO @ À, otherwise 	 ÿe will be a "Task destroyed but it is   ý pending" later." aa tasksž ñ previous_failed ¥(), delay)D @# Geæ õe next coroutine to run( :try‡ q_index,6 Q_fn =E `(enum_J F_fnsk úexcept StopIterationT Vreturt q# StartÚ  ¥@0runOl { ± ª $hiõ ‘ = locks.º(‹  ì _1" ‘op.create �(run_oneÂ (ç C)@ qrunning0 @s.ap¢(U (  assert lenV 3 A) ==[BE + 2À á# Prepare plac‰ pu£&isî 2's O@ions¼fnot wo< Ÿ ONoneš + — %1
˜ ’result = €ñfY û (SystemExit, KeyboardInterruptÞUraiset B QBaseE>Šion as e8'  [°—F] = J  A Ìò .set()  # Kicksghˆ +lss  œ orÒrnner's 
¿°nonlocal wi& í, 2 d  ¢ 0/ @ is »	( 	! J& h # =£ 	# 1# CîB all®nÀs. We take cŠ0to aÚ}{currentM S¡as well. IS`do so,5 Pn sinÒ Œ Ø Ano `={` afterN ' 3and¤ 1led ’ àusually thrownª@one,Ã $I Pencouq` a cur K¡ner case wj 0the  × ®;endN  upƒQdone(1VTrue,6 fFalse,¥ I Àƒß 0. Tt€behavior(¶specified iâ 0ù# https://bugs.python.org/issue30048u fQ p, t in § ‡eœ
\ g hif i !h$  ( "t.""()7Qfirst%hàNone))
    runñning_tasks.append(first ¡)
    try:	   ñ# Wait for a growing list of G ÷ to all finish: poor man's version ofP òcurio's TaskGroup or t unursery. ådone_count = 0 gwhile  ¦!= len(runß )Å  É  . €, _ = awÒ ¼ . 7 f 6 �  c  G '    ’# If run_¬ ù"ro raises an unhandled exception, it's probably ap # Pgrammhðerror, and I wantlysee it.7 Êif __debug__÷  ¢  ½Ad in2  # Pif d.Ü !()o ó not d.cancelled %d.Ç (_ E    - ® ôreturn winner_result, findex,,s7 ifinall”ÃMake sure no†€are left‹ P if w Ðave this func‚U  ¬  t	8
!t�()
__all_B(C ó'StreamReader',  HWrit   ¢Protocol',< ¡open_conne”  ? õstart_server')

import socket $ys 0waré  òeakref

if hasattr(= ³, 'AF_UNIX'·Ì Q+= ('Œ Ounix‘  – sfrom . � ºcoroutines
 ]event  Üformat_helper p; 4log clogger{ Ò ñ(sleep


_DEFAULT_LIMIT = 2 ** 16  # 64 KiB


async def —À(host=None, � *Å D Cloop( jlimit=ƒ ƒ, **kwds‰p"""A wr‹rfPcreatõ2() 5 Aa (rp1, wh�) pair.
VBThe  3 ˆed is a ªP instÙS; theG ' D + Å+ ` PargumÜ r ù F fusual  ?to É  a C èñ_factory; most common\ @posi°0al ‡˜ …}áwith various o[§al keywordŠ Afoll¶Ä 4AddV 6  Ü  É� (to set+Ô  É H •2use9ó	6 rbuffer  `passed2 1theF p%)¤ u(If youó€customizÉeÍmand/orJ oð classes, just copÐy the code -- ð re's
    really nothing special here except som< ±nvenience.): 1""" ñif loop is None:  [  Ñ= events.get_ _ (D 7els1 �warnings.	 R("TheZ €argumentc òdeprecated since Python 3.8, ‘  | 
 ö"and scheduled for removal inB U10.",¿ 
C Dx BionW§ â, stacklevel=2Ð ñreader = StreamR q(limit= ,Ò =2 ‹protocol4 P (R 7 ñtransport, _ = await[ õ.create_connection(Ò „lambda: t ‚, host, H b**kwds– GwritÈ W (u C ¡ = `returnZRder, L À


async def9ôrt_server(client± Red_cb™ =Ož  *žû % hó=_DEFAULT_LIMIT, Þ žò"""Start a socket Œ ±, call back%Reach    QAed.
Q žÐfirst parametì `- 	Í Æ`, takes two, sŠ 0 E 3#. | _  ÿaZ‰ Ôobject, while2 B 2 Ä . b.  Thi¿ ñ can either be a plain!unQñ or a coroutine;† Aif i¡ ,  wiR e automatibyN0verÆainto aD GTask^prest of¯ `s are ¥ ÑWusual !toH  ^Ù$()Í¹ð_factory; most common] B @posi< 
   @&ó with various op% vkeyword‹ F ‘followingo2e rPvalue› Ã qsame asÁ´ 4Add� q  » E � (to set7q ‘ Pinsta5€to use) Ø 0	6 rbuffer  �passed toQ F Ü)¤  ß c, i.e.üSŸ Ì z an‰u€ @stop… ­Aice.Ž ‡ýðdef factory():
   ñreader = StreamR q(limit= p, loop= ")
4 «  protocol8 P (V õ, client_connected_cb,E M   s x ereturn 
L  Qawait­ ð>.create_server(factory, host, port, **kwds)


if hasattr(socket, 'AF_UNIX'):
ž  #  ‘ Domain S& �s are supP òed on this platformœ ôasync def open_unixÿion(path=None, *1 žõ =_DEFAULT_LIMITØ ¸  ¼ ñ """Similar to `‡ �ÿion` but works withé A."""i O !ifc@ is ‡ h    ž á = events.get_ _ (>Jelse9 �warnings.	 R("Thef €argumento ödeprecated since Python 3.8, ¡  ˆ 
 ö"and scheduled for removal inF O10."„	D€ BionW¯ æ, stacklevel=2à þT6 MPtransˆn, _ = 
xÏ *ulambda:V , —K, Gwrit+W (| ", ;¾ P (Rstart)ÀE£ :4 °/, 7#– ‘ 4ÿ;^ $ª*()1P Û’< ¨; i a  î  ›‡ ì ªh¹
�ô


class FlowControlMixin(g $s.á Ið"""Reusable flow conñPtrol logic for StreamWriter.drain().

    This implements the protocol methods pause_writing(),: Wresum ñ and connection_lost().  IfV ñsubclass overridesG óthese it must call. Cper � ¬ Ç 7 Awaitê _Þ ñ_helper() coroutine.m 2"""÷ ñdef __init__(self, loop=None):,  !if @ is      7  ._7 P = ev?Q.get_  %()J Oelse?  F , Y u›d = False ç  ÷ Aer =� " ŠH '  ÿ ` _Õ t ù °assert not  !._. d= ü  f = Tru¢ #if4  Õ gdebug(_  C @logg� A"%r N #s ’ !",F )°q ˜ S ²   ® 
Q¯ %� °  á ž” ³H3if ' !isng> ñ m !if? M \.donep &  @set_¿ 0lt(p d67excjÏ * ‘# Wake upÎ Ôò er if currentlyïd˜ œ Â ^ d1ereturn;Ì ! ='.ù $ 	_ ë R 
{ j	P b¡ oif exc<¨ .‰ 	  /2 Pexcepd(™!`async Ø
 Ô ¼í¿eaise CÌÆResetError('  â'ãÁAÖý K3 or6§.cancelledk- †×create_future,  
<# =\ EaQ   g ë`close_  #er,slsrMDNotIf!edL2


ØsReaderP|€(FlowConÊeMixin,—$s.% f ð"""Helper class toøJ adapt between Protocol and StreamReader.

    (This is a helper class instead of making = ‘ itself aD d 1sub> Ù, because thev ñ has other potentialD Quses,¥ ¡to prevent> quser of 	ƒ ñ to accidentallyF ôcall inappropriate methodsC p!.)1 2"""ò	_source_traceback = None Ðdef __init__(ú 1, sL!_rMð, client_connected_cb=@ a, loop !):s  v…super().T %   —  $ *ifd  ¥1not– J  *  ‘ )._‘ ù_wr = weakref.ref( f @ 	4 .#Ï Oelse“  8 /if8é &# ®œ ± created by"` P_servbµ` function.v  ó €# Keep acñong reference toI Ø“ until a Ø;ionG êis establishede ˜3ong)  =r 3eam N , UrejecF»ion = False( ý `_writeé	VK ”transportÉ ÷    ° / =Žz �over_ssl™ `closedæ Pelf._Ò.“‚future()R@¢2ert¸`Õ zf2 S 	&  ç/is areturn Á   G ˜  Š íQ_made‹ %, Q– ¹
`contex‹{�  Œ  ó'message': ('An open%ñ was garbage coll[` prior©'M  Q  '™ ¿wnetworkÊ/; @ N"*.Úú()" explicitly.'H}� ²Y
 ® ,['…%']K 	l Ôn�all_excepö“_handler(c 
± Óz.abort( 0h d 3 & =$ ¼´ $% 3if ( ?is Ò  @.set‘È({ § ” Ðover_ssl = tró#ansport.get_extra_info('sslcontext') is not None
  øif self._client_connected_cb1 :2  9 3 ñstream_writer = S W 3(tr” ,a ,@  D  oreader7 š Yloop)r Qres =Š ë (o !l 	
u õif coroutines.is Z(res)S Q  ½ Á.create_task- 	Í ( rstrong_º " =Ø(  dey É�ion_lost(4 W, excx ;   #._Ê  I  • 2if   ifY     \Ø @ ª.feed_eof(&Oelse4 sÑ€ception(¿ ™  Ï¼ Çclosed.done(â Á ?excž 	A  p presult(Ì ª @ /ex° ƒsuper().cš	Õ M 	Š _w] Ž û 	& €#  † Ódata_received  =·7	• ‹ H ÿ c ( !)
C  «:eofŠ „ L
ƒŠover_sslŒø# Prevent a warning in SSLProtocol.À = R"retu6 ¨true from 1 @# ha§ð  effect when usv Assl"4 Õ  [ V FalsÑ FTrueb_#0_wa®ñÓ	o ® ( TF a_del__< 4 " re…ðs about unhandledÁ%s.Á P# Bet8Ithanq ò._log_traceback =â U hack? Í dœ   yA andü( ¬.cancelled,  Â™)


classÞæÄ"""Wraps a Tî./ÑThis exposes ¡2(),	 l  a[can_] í «Ã)¼ ˜ ð().  It adds drain() which ñ@returns an
    optional Future on which you can wait for flow control.  It alsoE ó
adds a transport propertyL ôreferences the T( = ‘directly. A"""
	 ödef __init__(self,` ,a ñtocol, reader, loop):;  Ø  2 &._’ => $ 1proK % =V " ð# drain() expectÀ !atÅ x 0 haKQ exceJ•() methodD cassert¨ ò is None or isinstance(M ‘, StreamRÓ )B Ì $ # =J   ÿ ! = ò complete_fut = M  / R.crea Lure(p 8 À.set_result(¿ )¤Crepr¤�‚info = [p õ_class__.__name__, f'ž"={&  U!r}']È #if¶ ais notHñ õ t ¢.append(f'. \   Y é ð	 '<{}>'.format(' '.join(N )ê @Ò•  œ¬ �ù U Ò 1Qwrite5 g, data; 4 .+ % @ _linesE 0 J A_eofI ˆ Ã � 0  Acan_¨   Â I 
4 M 2losE , = ¯is_closingÐ 1 G `async ×  ÷O ,edN a ’=R._get0 _ "er6 ·   `extra_X  , ,p Qault=ZÒ†I 	C Ç ¿–�"""FlushÈ¼‚ buffer.¯  KðThe intended use¹1to . & 2  w([ :  %"w.� s à" /  Ø5excºÈ.q“T  . # ( Praise³: Š Ö.” ? 4# Wÿ`connecKÅ_lost() call` 7 Rx +  ¯@ errkf any,5 CZ aResetE+ ›otherwise- �Yield toÚQeventÀ so connecti÷on_lost() may be
  û&# called.  Without this, _drain_helper() would returnB ñimmediately, and code that] s/  ~ ñwrite(...); await o +(), “in a loop€ QneverV • connectiß {, so itB ¸ ùnot see an error when the socket is closed.@ œ vsleep(0�  ëelf._protocol.2ñ


class StreamReader:
_ ò	_source_traceback = None ñdef __init__(self, limit=_DEFAULT_LIMIT,=8 !):W  Zò# The line length<  á ÷ a security feature;8 ñit also doubles as half&bbufferK .¦  m "if V <= 0„   Àraise ValueEr0('LÄ @ can�!be4 &')M  ê !._ê " =X ž  i  !is(
k 9    Ñ= events.get_ _>XOelse?  . v Y ü ·= bytearrayO # °eof = Falseü ö# Whether we're doneX3  õ#erø€  # A fu“  used by _# ž_for_datat @xcepÿD ¶ Ÿtransport !pag µ < 2if Ÿ  Egdebug(a á $ Å cformat6@s.exâ…t_stack(f  C   ósys._getframe(1) Crepr ~ ˜info = ['V%'][ Á ¶
ê = á.append(f'{len_"._- !)}ã&s'éO ?eofL O'eof5 Ì:!= ¹I !f'3 "={a }Z   N F 
Þ " J  /!rM eJ™ 	% S  V �V 	% V  V ¸S '! 4³‚ '<{}>'.¡ (' '.join(5xÖ yG ™& ¾ ±sqI= W, excB ;   =  A  Ã£# =� Ø  É A ÷
` & À = None
      óif not waiter.cancelled():
"  $ ñset_exception(exc)
+ Âdef _wakeup_+ W(selfI A"""W  Ð read*() funcG s� ñing for data or EOF."""^  † V 0 = X .e  !ifE Qer isÔ JNoneÆ 8 0 = ! ?  a #presult(N  '‘transport
%,  cassertÓ !  Ä  Q D, 'TE 0 al8ey set'¸ Ô 9 =f ˜`maybe_ª 5me_- — Œ #ifˆ ápaused and len' ´._buffer) <�_limitb? u= False«  c¯ .“  Ù Ging(A�feed_eof~ ¥ B –eof = Tru_  
‚P /atN ‘"""ReturnL ‚ if the ë  …Qempty	'‘ €' was ca(	 rI ˆ  ¡  @ ^ U •P  ìâ ,÷è @ Reof, †  6 q after F Beof'Y  dÇ % 
ž¡ ) ˜ €.extend(6 )³" Tj ½ .T 5 ´  ¾ 8K  0     W '=and% vS> 2 *Ÿy+ W :tryí   h ð.r _m $  Ôþ NotImplementedErrorX V# Thei¡ can't be a -d.Ð ô# We'll just have tof1allü6 aForget”Æ � so we dot ¾keep trying@ ÿ ó;els% 9 Í gÔ casync ëpit_for_2,ÐW_name�ö‚it until¯2 )ã¾ ()8T¡‘If streams�  , automati/ "y B6 it 51# SB ñReader uses a futur…Alink`zprotoco£ VmethoŸ#·a¿ð coroutine. Runn½;two 2s a¾†same tim¯r# wouldóan unexpected behaviour. It'  7qpossibl¸ Aknow“ °v# which” 5 <ðnext data.
       ÷ if self._waiter is not None:
  ùraise RuntimeError(   + ðf'{func_name}() called while another coroutinel 'D  €already ’ Ðing for incom udata')
7 aassert´ È aeof, 'Ï P_for_1 0 afÜ FEOF': `# WaitT  a ' © @paus¶ õill make deadlock, so prevent it.… `# ThisÐ ‘essential¶  È ¡exactly(n) Ócase when n >{8limN “‰ 
‡å  … = Falseˆ  „! ðtransport.resume_‹ Ging(;*  fDer =Œ õoop.create_future()` :tryŽ a> :   %er, kfinall0 s  f‘ async def © Pline(, )o ñ"""Read chunk of ²ðfrom the stream ŸPl newC € (b'\n')™bfound.m  'óOn success, returnZ äthat ends withK Ð. If only paràè i acan be¼ µ due to EOFZ ¾aplete /  Z 5outD qtermina�¼ 0. W%pEOF wasZ  ch•Kqno byte …d, emptyM  `objectú rÞ eý 1If t aZ b, ValuÙ  wû Ð  ôad. In  ½E, ifl ­ £ bW, comê `include+ \ eemovedK Êûinternal buffer. Else,     cleared. LB5 isN  †   � against· 6 ,„á$IfN zk0, tâ ÞBtion‚ €automatiç"y i: it! ed{ s  5"""¤ asep = £ ßlen = len(sep|Æ '= ƒ ;
: rexcept  `ions.IN¦ SÍL as ò9< e.óJ Q €OverrunO ×Ü`starts ¯ p, e.con¬dö 4  3delg> &[:/ ¥ + seplen]G 3 ;elsÑ    V"._E .@à! @mayb5 � _M+ 8¦(e.args[0]·~÷b
ê¯0lf,Å qarator=üóR``sep?  ``Ø�ñÀ, the data aónd separator will be removed from the
  òinternal buffer (consumed). Returned dataK yincludeC n  at e end.
b ñ#Configured stream limit is used to check result. L @setsN H òmaximal length of— ‚that canæ ± é, not countingF ­ ¢ ðIf an EOF occurs and5 — completeQPis stU b efound,¢ Tan In4 òReadError exceptionC Žeaised,h …J �¾Ÿset.  Theb ö.partial attributß±may containÒ ÿ  4 *ly	2theX0canã  ® °ead becausewBoverÄ5, a³ ¶|Overrunø ù  YB î Sleft ° Ÿg, so ið•ad again.F 5""" €seplen =4(û )   ifÚ# E= 0:  r¤a ValueÏ 5('SVPshoulð at least one-by+vtring')f Flf._	!is¢ONonev )se/ K 2# CŸc wholeb  l‰  … €s, whichø  ,%isÛ #ª @ les]#an s. Let's‰÷corner cases with> FÆ='SEPARATOR'Ä  # * we havt0ceiuPalmos�N(^ 1out» f    Ç T). i.å ´='some texty @'. I×!is¬ & wø1#  Qsafel Õ A - 1i s? Á H î‹�is first0   	,¥ A  —ð='abcdefghijklmnopqrS'. We —
› 	ý peveryth¼4 æ˜ @, bukÙis require toB qanalyze® s¯ Ç H Tmatch -
Ä @This¤@slow©5/orm  FSM. For t%  (I our� iìQmentaúñ0optÄ`, sinc"½ 0reso9ingD 	ã€is known0™ loÜoÁ 9 InA ¶real world,& �C  OG ZnoticB€performa¬ ð	problems. Even when read¥ÉMIME-encoded� §messages : # `offset`` qanumber§Eytes¦p beginnc !ofÀÇd ðwhere there is no óoccurrence of `separator`.
  µoffset = 0
 ø# Loop until we find> ÷ in the buffer, exceed g size,P öor an EOF has happened† µwhile True:6  ¡ òbuflen = len(self._u )®  (  # Check if° únow have enough data´ I forÒ )tox V# fitŸ  c  ifð  Ž #- 5š>= seplenµ . @sep  ³ .G(„,F Ê = 0f i@ ^!= -1\  # #¾ *isß 0. `A ù` will be used laterç  J   Ñ# to retrieveÈ 3
  (   Zbreak~  ñ# see upper commente¾explanationP H=ZS+ 1 -T© #if22 > _limit Qraise™p{ 0s.L, ÝOverrunError(a  Ç   $'S(` is noÉ áund, and chunkY ò… 'í B  ä æð# Complete message (with full¨P) mayÀ@presR in+fÇ¢# even whed@flag» ‘set. ThisG v&  ¾BlastÏ 	
b# adds4¶which makes•  � Pfound\ €at's whywcƒ*fod#÷*|Á* inspectingfÌ
#ifÞ>eofÜ{= bytesv  %d yclear()ë  % )3Inc›BRead+v m, NoneÉ _wait_for_4"()t°resume readí  Õ Àtream was pa�
÷ aG ú   R 'E Œ'} i$Û 
üçC, bu) UÃlonger than ü®œ /þ [:’  +HElen]‰ deñ') Ïbmaybe__§_transportÙcreturn!Š š ‘async def–<v, n=-1)g0"""ö0 up2`n`H Q from²sÆ. @If n 'Ðprovided, or Vato -1,p N  G¦ 1all ØA. Ifn  .  1�received‚ ¼ƒinternal � ðempty, return
      ó  an empty bytes object.

  ÿIf n is zero, retur2 Ï immediately>  òpositive, this function try to read `n`… “, and mayo Œ Òless or equal, ñ than requested, but at least one' Å. If EOF wasN òreceived before an î  ‘ ¬ ü s/K 6R(€ed valueR ònot limited with À, configured· estreamX @crea(
R%  Ì P pausö 
Vðwill automaticallJ¥sume it if_ uneeded. 6"""ùàif self._excep† Ç UNone:5  (\raise/ 	K kn == 06 %K b''+ <* 0# T7 ì  /¢just loop !ù
ng a new waiter hoping to¥ ð# collect everyth$ #in· bbuffer@«that wouldA ðdeadlock if the subproc—psends mI“<ñD ha.  So È   „  u(8 _9 p) until¹¤ ob„ is = []] ›while TruŸ4 @ = a$p 	M  5 0if ¸p 
¼    ]break8 1 ‘s.append( )% L ûR.join# *s)"ot¨ _œ � #:eof“ Ú _å °_for_data('Z'^ P(‘work righnÛp 1is rÐnI> Y " = µ7 F[:n]í 9delÅ   æ Ê €maybe_re¢¶_transport(E . s < ‘async def:qexactly† F, n)@"""R[" cQR¼Ðan Incomplete4 PError 7 isi &ch-­u can beÞ k_. TheP ò.partial attribute oJe •N qcontainm<  b xÆ  ª  §2 £§ x  ô ,ŒVxÄþð size can not beó less than zero')

  õif self._exception is not None:(  / \raise/ 	K kn == 06 –eturn b''+ ¢while len(} ºbuffer) < n= Ÿ *of  ‘ úincomplete = bytesP 	¾  1 n �.clear()% ç 5s.Ig ¦ReadError({ 7, nP f Sawait(  û_for_data('readexactly†,== D ê æ 
;els×V J[:n]3delØ ² " @w ÷maybe_resume_transportgr v Ñdef __aiter__Á)ë.  \ . casync 4 Nnext4 gval = † vGline† 1if ' =™o  ¿ PStopAl PIteraé ” ÿval
__all__ = 'create_subprocess_exec',  shell'

im 4  ówarnings

from . * kevents Œprotocol lstream Dtask 4logZ ÷ logger


PIPE =” . z
STDOUT  Š
DEVNULL  ¥


class SS— Pµ (¦ õ.FlowControlMixin,p •  ÷ .\ V B‚"""Like s  ¾$er# ¸, but for aí 2"""ic4inibÓ, limit, loopa  — £super().__-    = = À!._@ " =H ß  PstdinB �gstdout Qerr =’
6 a ŠËited = FalseD Ûpipe_fds = [] — Q_clos? « _Û .ïPfuturY9 4?repÊ @infoc D _¶__.__name__z ô| Ž P ¡.append(f'- !={]  F!r}'€T  ZãU 6outV ?outW  £W 6errW :errW að'<{}>'.format(' '.join(¤ )s q`connec¢Q_madeBà, transport):
  õself._transport =  #

$  stdout& –.get_pipe 5(1); .if> Åis not None:)  l � m Á = streams.S ÑReader(limit=) _ ,B  F  DloopA 6oop«  8 Y ‚ 7.seó ( å 8   fds.appendž fstderr@ jD2a D
> D?errDl>errD	Æ ã |D)2)ˆ/inC0` C	= B-inA`WriterK ƒ�protocol†= r==; ú�Adef Ààdata_received(
`, fd,  )©¦if fd == 1  ¿™  3 S/a   %el7 27 7err7 s#f  ( 3if  Ö  `.feed_Ò ( \÷ connection_lost?exc0Í  H%in¢  ii ¤  %  C v.close(¿   ‘.¡  — d 0excc  !
ž F q_stdin_f d¤presult(4 
v ,el‚F Pexcep>(˜ VreturE›?if ^
e;eofÂL4  n@Ù.1in #
Þ
 ¦.remove(fdÐÀself._maybe_ñ!close_transport()

    def process_exited(self):  "   *._$ { = True$ omaybe_i _"  b q aif len‡ ð._pipe_fds) == 0 and / ‘ ¯ ³ ì .“ %()¯ $  v = NoneC_getÌ awaiter‘ Š, stream¯  2 isœ Zstdin’ breturn _  \ ²d


class P…7  –ƒ__init__x Î ,°·tocol, loop‹ * 5 =  ü $ 1proC % =N "  [ ! =b 
 ¾ 8 . $ ;out% =out& ;err& :err& 8pidÉ .˜8pidÁc__repr+vBf'<{÷ _lÒ__.__name__}  bpid}>'þ‘@propertyˆ  ‹H Acode�b ^ m¤ 5 lQasyncr RK ð"""Wait until theš ˜ ˜úS 	   œ A."""³  ß aj wŸ _ A±send_signal— ",  ê ã 	3 : æ  1�terminat0F ) > 2kil‡  $ 4 XR_feed`È WinputH sdebug = å­ "¨ Ùr.write(H _1if 3 ¯ q  qlogger. (,     ð'%r communicate: ­  e Ñ (%s bytes)',œ ,v ¹:tryr àI g.drainÉ ñexcept (BrokenPipeError, ConnectionReset Š) as excd #¶ »() ignores S ¢V 		9 	=,Þ u got %r#3exc A [ W „V m' 1oAnoopibzN0 0reaŸ B7 G, fd; ¢¡ ¦ 6(fd­ Pif fd$2½À   stream = Óself.stderr
  Uelse:   éassert fd == 1 ”stream = J 5out! "if ú_loop.get_debug()_ ôname = 'stdout' ifk  Œ  Eerr'X  ” rlogger.Q ñ'%r communicate: read %s',�  , c )@ ò output = await Ä .4 (% ½ g_close¾ ¡transport.) ³ rreturn ß 
ï ˜async def (­Ç, input=None‘"if € is not  
¯Tstdinòa_feed_ (P A ¼: 	Gnoop½ p 
o½ Å  ._¶_Â/(1} 8 ~ ?err~ 
   ð	~ 2~ 8 ~ @", û  -  ßtasks.gather(+ ,ì   •=E  ¾ v    ¤a … 4out© G)


hñreate_subprocess_shell(cmd1 !ins o€ 2err Í  ± - r limit=ÿs._DEFAULT_LIMITc**kwds0if [   
ù �= eventsË Ú!
ð�warnings.	 R("TheZ €argumentc Pdepre±ÿd since Python 3.8 "ö"and scheduled for removal inA O10."þ Dw BionW¦ * Åstacklevel=2� )Zõprotocol_factory = lambda: SüSP+ (¬ s Á ‹= ²$, “ Ú & .ŠÊ 0 Ã ” ­	q=£C <  Serr, M -P(¨  ,?ñexec(program, *args0Iz D
Ðstderr=None, Ïloop=None,
  ñlimit=streams._DEFAULT_LIMIT, **kwds):H 0if Z @ is ]   `  Ñ= events.get_ _ !()< Felse1 �warnings.	 R("TheZ €argumentc ñdeprecated since Python 3.8 "T  { 
 ö"and scheduled for removal inA O10."Dw BionW¦ * Åstacklevel=2� î ñprotocol_factory = lambda: SubprocessStP+ (‰ r 
í   r= ˆ ´transport, “ � = awaitq%.sŽ e_exec(È / Â “ æprogram, *args astdin= p, stdouW  	$ 0err% 5err^u ‚return P(º  ,³ €)
"""SupÖ áðtasks, coroutines 5the	òr."""

__all__ = ç ð'Task', 'create_I '¬ ð'FIRST_COMPLETED&  �EXCEPTION 8ALL$ È ']    @_for Àas_completed Tsleepl Qgathe' Qshiel! Ðensure_future2 Erun_ã ´_threadsafeE scurrentÅ   'ë  Ñ s! •_register# >_un )en# EleavQ)

imx3conq .£ s utextvar …functool tinspect3 Iiter  Etype-  " +. óweakref

from . ’ 2bas¨ s 5 £ Œxception ç v U €  _iãƒð

# Helper to generate new ”õ names
# This uses ð.count() instead of a "+= 1" opI Àion because ç€latter
#5Bnot  ñ . See bpo-118660ða longer explanaî !.
_™ _‚ Mer =– ó1).__next__


def > (xw0B"""RÖa) 0ly huÖ š É\0run=^=_� ‰” )­  ª 1setu!ll­s5h?oop° 4ñ# Looping over a WeakSet (¤ �s) isn'tÈ  a#0 caúP updaAŒ0ano?Ð
    # threadñ
 while we do so. Therefor ðcast it to list prior ‘filtering1  s
    # 3 ðself requires iteration, som Qrepea[ °several tim) 0gnoW M 0Run ðErrors (which are not very likely“ óoccur). See issues 34970 and 36607 forY �details. Qi = 0
 QTrue:  Ó 6try  aasks =õ p(_all_t )2 xexcept ½ 
B ei += 10  U Êif i >= 1000-   Uraise0 7els     Qbreak  �return {tí a t in ž   +   ðif futures._get_loop(t) is  2 böt.done()}


def í €_compat(/ b=None)µ ô# Different from " r()" by   °ing *all* T;±, including¨ `# the c ðleted ones.  Usedê`implemc pdepreca$ "J .o K cmethodêfá 0is µ ´   È   = events. Ú`# Loopº ø over a WeakSet Ð isn't safe aø± can be upd§ danotheŒothread‰ÿÖ }l1setY`_name(Å ,  j!if  ´ «
Ï´ M  = ! =. $ ´‘Attributes  # Fpass0 „S (h ‘)


classá(n1PyFy ):,áInherit Python+  Ý0p  �  #gaD _ F !.
H ð"""A coroutine wrapped#"a 8 B.""", @# AnF PortanG@vari
 ”maintaine²a¸  … .4#q `# - Eië€ _fut_wa	 ³ ¯,ha_step(|¥scheduled;> ,or: Csome® A e*not* G ô‹ ðThe only transition frñom the latter to ð"former is through
    # _wakeup().  When _fut_wai< óis not None, one of its callbacksE wmust beM 
 ñIf False, don't log a message ifœ @taskš ðdestroyed whereasm I `status& Ñstill pending S_log_= _ r = Trueˆ òdef __init__(self, coro, *, loop=â Aname !):X  "…super().? 0   )$ 0if U à._source_trace G  K ?del( H[-1]N  u ¡ •utines.is (
 Ÿ  X  # raise af´fFuture° õ), attrs are required for __del__y L aprevenªAging* T©n: Š	h ² ÑTypeError(f"a“ò ð was expected, got {ø R!r}")Ò ¬ 0if ²  À
m�   °= f'Task-{_Á _ `_countÚ%}'™ OelseF @str(< ƒ f  ÿ’_cancel =ðT " T=O   Þ ! = Qntext 
 Ávars.copy_co (�  ž.¤Q_soonñp.__stepø5 =˜ C Ë‘_register+; _ D2 * ‘tate == f…ãs._PENDING andü" J  ×” E = {    'Á!':K , X1': ñH�ed but it/Ð*!'D }R Ö Ö
 — ³ ,['A'] =­ 	l Ž¸óexception_handler(c ª™”	§÷
class_getitem__(cls, type;¢return clsSáœrepr_infoä. Abase!s. _1 K @get_×I ò  ! 
3  a3 
 ! 3 1setÐ3 h, valuä f  3  ˆ2tr(! 
@ cresultB  '\cRuntim­]2doe€support Œ ? ` operaÀ'—   Ùo  r &B Àion operatioñn')

    def get_stack(self, *, limit=None):(  , ñ"""Return the list of : ò frames for this task's coroutine.o  G !If@  Ò is not done,> rg s( ` µwhere it is� Ísuspended.  U  ha~ ömpleted successfully or waG ›cancelled} �an emptyê c E pterminal 0by ; ‹xceptionV ;•tracebackÓ G-4The\ûare always ordered from oldest to newest> o† "alÔR giveYàmaximum numberË~ 5 to� ‰@; by*ùault all availablœ , Žt_ðmeaning differs deµ  Ãon whether aGo í^ :ê %ofA  %+ P, but/ Ï +è 7 m ; P.  (TÈRmatch1F qbehavio3 ÏC smodule.\ íðFor reasons beyond our control, on‘#ne š ÷ Z%a óZ h   5"""¤ ` base_Œ!s. _ìé°  Oprino, file P8  lÉ  Þ¼ nðproduces output similarÜ1thaoq,÷ €—�retrievedÁû @).  Yý • argumentE �is passedx 6  5  ½Õan I/O streamF �to whichÐ ©is writtenS E µsys.stderr. êÊï Âòÿû?msgÝ ARequc „É : 0 it7	v“is arrang4a Ce0Errðo be thrown into&ß vwrappedä" ot’next cycl< "ug^¦event loop# àcPthen @a ch‹  Û€clean up C U deny…  irù  us°Qtry/e×‡/finallyõ âUnlike Future.û2doeâ€guarante¾ aš ¤P will> 2ledít ’ion might" u
 5and°  ac} uprPdelay³ J ðation of the taskó or preventing
  õ.cancellation completely.  The task may also return a value orF ðraise a different excepU %.
& pImmedia` ó after this method is called, Task.š •ed() willG 4not‹ äTrue (unless t± Åwas already F U).  AD Ù  V À be marked a� qed whenR öwrapped coroutineD òerminates with a CMvedError  (x3 if� %()E  ¬  Ñ û %). 5""" öself._log_traceback = FalsŽ 1if ' udone():<  è¹1 €_fut_wai�0is � JNoneB ^ - ¡‹(msg=msgs  w r# Leave˜ : A; itVb4 íY that³ @ òcatches and ignoreçÖ¶@so wÅVy hav B   C# tox x ¶again laterm (   ) WŽ �# It must+ dAcase± Ù P_step¿t–scheduleda ›_F _¼ 9 = f !  Ö_message = ms«� ž Qdef _~ (? ,q=¼Œ¹¶ªás.InvalidStateÃ(h   "f'q %):c [ 0: {ƒ Ö!r}, {exc!r}'å… ` y`isinstFA(excÑ F*s.\â š Sexc =“CmakeiPled_e�u 3  ¯ .‘ R òR   < 8 = wêp_enter_f› ½1op,ž Ñ# Call eithera`.throwü )° u `.send(_ =try@  !is‰ 
  î a# We u¸0e `S `xàdirectly, beca$  w ësò  D   q# don'tj@ `__61__`¡p`__next Ós  <   ‚result =î  ˆ Û 	i ;els; ); É’ StopIter as
� p #‡ Ø–€led righAforeÃ _ stopè  "
ð
 c   xsuper()N= v 6 5 "K Aset_iÀt(exc.value)#
  rexcept  ðions.CancelledError as :1  8 ð# Save the original% ùeption so we can chain it later.D tself._cm `_exc =F 
& ruper().( ô()  # I.e., Future  N )a Ï ÿ (KeyboardInterrupt, SystemExit)Ü sr 0set” Ô Y(exc)™ Uraise p QBaseEQ :^ Jelseoñblocking = getattr(result, '_asyncio_f_, z', Noneµ 4if   q is not% 
n ásYieldedgó  must come from §.__iter__({ ?   2if “ ³s._get_loop· )}  ¶. ƒ  D 0new„¡ = Runtime“(w $  €f'Task {X s!r} got« / '5 {N 2 ð	attached to a different ¾ 'My  m Å ¯.call_soon£ . s_step, à ¢, context=  o 'elÂ32if Î  d O '  ½ ~  ^ 4 b0can=pawait oãk z+ B  ) /2 3$ A R   /.Ig = Falì8  @ �add_done_Oback : _wakeup :   > @fut_‚Cer =öæ2if 5  Êw d 2 g nf  8  4msgÐåŸ_message)w  ? ª …ÛÞ0f'yóò was used instead of  úH	Iin t€Vwith ^î  bA>	©Àelif result «is None:
  ý0# Bare yield relinquishes control for one event loop iteration.P `self._& ².call_soon( a_step,X Bext=  f Iext)I ðelif inspect.isgenp ¯or(result)Ç YÂ eing a 0 ù  is just wrong.d  ýnew_exc = RuntimeError((  , "f'$€was used  stead of>Afrom.'A ˜ €n task {¢!r} with {ß J!r}' €  * Yi * nã ws"[`somethe@else^@an e4\0f'Tù rgot bad::ú jzfinallyTp_leave_¥¾ Ó , \
œ  ! =^ð  # Needed to break cycles when -@xcep:‘ occurs.
ÃÁdef __wakeupp ‡, futureë+tr¤ " .5(– ed a BaseE ªion as excå ÿ# This may also be a cancellß  ê !._XG(excq l8ð# Don't pass the value+`¶ Ñ` explicitly, í  #´ !`F0.__t†__` and  Pawait dp  ne™tŽ€# If we �" `À � ,¶()`Ë  ,)`� ²Python evalPwould� `.send(T 0)` $!odo E 4ins4ð`__next__()`, whichQaslowerG*s÷that return non-U–Aors Šutheir `:
ÍÊ  Í*A
_Pyá =  5


·óimport _asyncio
§I yž 4
` @# _CK   ß!edRtestsÓ  =' =b . 0


]ScreatÐàcoro, *, name=f±"""ScheduleµRexecu­fò
oroutine object in a spawÎÌRœa+ © 1"""Í K" =QÑs.get_running8Ê {! =k.¾ ±A_set¢_É (1 Ô  Ðreturn task

ûR
# wait() and as_completed() similar to those in PEP 3148.

FIRST_COMPLETED = concurrent.futures.% 5 ŸEXCEPTION5 	% O
ALLh 	# Â


async defà ó
fs, *, loop=None, timeout Éreturn_when=K ñ
):
    """Wait for the Fuß 6ðcoroutines given by fs6M!.
E 0The óiterable must not be empty( CQ @will pwrapped‚STasks* R· Ós two sets of› A: (dè ƒpending)2 bUsage:�  Ù 	% @ = a >0io. B(fs)0 ñ Note: This does» rraise TMcError!‚ às that aren't h  cC�p occurs(  †ç  f`secondÚ .< 1""" 4if `"is
  ¦ F or �5.is   É ô ´ 1ype± ð(f"expect a listEU !s,ä P{typeC Ä.__name__}")‰  À,fs] CValu^ 1'SeS � $s/>#isø'O ‰| Kin (D",   /, ³ê � “f'Invalidli v® 7: {} #}'õ!if6@ is 9é  Lð = events.get_running_ (Ò Felse3 0war!  s.	  (" , � argumente òdeprecated since Python 3.8, ÿ Ú 
 "¾‘scheduled¦premoval2B Q10.",¹
?   Dx BionW§ ã, stacklevel=2@fs =‘ vif any(ß
y)Ž fˆ #fsN p  8ingðexplicit passing‰W q objectX ö¸)O 6L O1O3‚{ensure_u#(f¨ 	>}q¦ª_£Ñ,ÚJ @)



�_release4 0er(; „er, *arg›!ifw .¶(µ ½ .sí`esult( ` 2p‡_for(fut– ~R U ôl\	ÍMd, withÀ×3 2( ðReturns result oñ2f the Future or coroutine.  When a timeout occurs,
    it cancels@ òtask and raises T3 õError.  To avoid, D A Àlation, wrapW Ñin shield().
( I¤ swait isx Eled,O   Falso ; �This funcd & á ] 1""" pif loop$ QNone:  ê  ð= events.get_running_ !()) 7els3 0war!  s.	 R("The\ qargumenÆ òdeprecated since Python 3.8, “  ~ 
 "cö	scheduled for removal inB B10."§
?   Dx BionW§ ò , stacklevel=2)t%if÷:is �return a‘=fut2 F<= 0Aáfut = ensure_fiQ(fut,=Et  Ÿ Öif fut.done()D   w   wresult(8 � _SP_and_ž h  H   :try] 	V  "   rexcept  aions.Cô1ledÚ0 as 
J    epu(s.p() from 8f 	<  C p à Aer =Ge.creat_•¸u_handle* £all_later(! ¡, _release5Ber, ] G Bcb =Dßools.partial(4 Ù õ ë  x@add_ñÃ_callback(cbÛ	¨#— a untilûM  completesÀ ÎØ ‰  e 	F   .å & ç ›º
î
ç© b ­   
1  Ñe %  “# We must\Q thatŽsis not ­æ > QafterSr_for() ´ /s.,  ñSee https://bugs.p®ý .org/issue327519 h–œ  æ  k³ 3 3   c_['/# W/# S O ¡# In case  Àlation faile×d with some
  û# exception, we should re-raise it/ ùSee https://bugs.python.org/issue406075 Itry:  € Éfut.result() � — ðs.CancelledError as R ± ? Áions.Timeout6 p() from: 
n ?lseK B gfinallÚ to ‘_handle.c¶ ó
()


async def _wait(fs, . ò, return_when, loop)� ñ"""Internal helper for A 1).
„ ðThe fs argument must be a collec×Á of Futures.5 1""" passert � G'Set( ± is empty.'*  t Aer =Ÿ ‘.create_fT ½Î ü b = Noni$ifë  V 1not ã  :  Ã.call_later(! ¡, _releaseD1er,"er>0cou- ¤ ben(fs)!t�on_comple#(f` } “nonlocal ? î    U -= 1 Dif ( u<= 0 or  5 Êÿ == FIRST_COMPLETED. ð EXCEPTION and (/fJPled() 	t  x  %f.(()†) E ¬É0is „  Î³ +   š, §      !ifA Bk.done(u  &  Cset_ r Ä övf in fs„ `f.add_P _,iback(_é> 	}ai 8GÅÿ ¸  î �f.remove¿  â ò, pending = set(), Â =or Oif fm O  :"(f7 � eo ) Ü @ � 
ÚðA_and¡L(futÐÉ² the *fut* D€ or taskÝ�£ until it ¸0es.¶ñ  Ã�ÿcb = functools.partial(@
 �R/cbF , î í€# We can/ £ 3 onå ò directly to mak y‚# sure _L :p itself©€reliablyY  BableÅ @ ÎÀ  fut.removeð'_done_callback(cb)


# This is *not* a @coroutine!  It ñ@just an iterator (yielding Futures).
def as_completed(fs, *, loop=None, timeout ù):
    """Return` õwhose values are ” 1s.
8 �When wait… �for the – 'ed. ± you'll get" ±results (orG ñ exceptions!) of$ „originalÜ  - S S), in) "deG ðin which and as soon Tthey º pñdiffers from PEP 3148;V òproper way to use t¢:ú  6 ñ f‡ qU #   î @ = a*@ f  ï1e ' Á' may raise. 3   b# Use = µ DIf a¿ ¡specified,´ Q BwillR Q TðpError w² ¦t ö occurs before alq ò ­} ²Note: The fnA 'f'ðnot necessarily membWRof fsÕ 1"""Œ $if> 2.isH w(fs) orÜ5.isj  ¤ 'Q TypeÎ †(f"expec0bleAZ 0s, › P{typeH Â.__name__}")Æù@.queâ€import Q  ¤I @hereó avoid circular . rproblemæ  ." =B (r  l !if… ¸FNoneÕ  $ á = events.get_ _ !()77els1 �warnings.	  ("“ , � argumen-òdeprecated since Python 3.8, Œ Q
 "9 scheduled àpremovalæB Q10.",˜ 
?   Dx BionW§ â, stacklevel=2Ð ò todo = {ensure_¯#(f§ Í )~ ^0set¾}r · _handle = LÍ ûC_on_# (‡ Ê L  y z ± !f.ã e˜ I 32ion¶  /    çp.put_noÒ(ƒ )2;ra dummy9Ç _' ¢_for_one()- J  � q.clear(A ‘Can't do  ™ 0(f)~ ´ Ží ¤ '(fñ !ifû G 
ï rç0 # â +Q was ê[first¢ ‰ ƒ ¹ f"{ ‰d ²!isš  4
š 
( ƒ.cancel(=aasync õ 
LD fb� 3get= °  xz  8# D® 
	 . �°.]e [ éÐ()  # May raiñse f.exception().

    for f in todo:  ð.add_done_callback(_on_compleB ), !if9 ö	 and timeout is not NoneQ  ð _handle = loop.\ s_later(!  , g  d  £ _£  range(len(­ &))^ ó'yield _wait_for_one()


@types.coroutine
def __sleep0(A ñ"""Skip one eventœ £ run cycle*@ThisÜ ña private helperC‘'asyncio.[ ‘()', used$ðwhen the 'delay'E Ðset to 0.  It+ ¡s a bare 'Ì ': ðexpression (which Task.__step knows howJ X1ñinstead of creating a Future object.` 1""" s 1


Å  $Ç ° �, result=ÑA, *, ACbc that 'àes after a givôime (in seconds).ƒ 1if n V <= 0ÙaÓ²¯  ¡creturn› Ë!ifš  _ « E  k" =Üàs.get_running_ (57els¯0war!  s.	 R("The\ Pargum#òis deprecated since Python 3.8, Y ª 
 "*‘scheduled<premovalâB U10.",í 
C Dx BionW§ ò , stacklevel=2)fðj 	"e_ ó h‡ …z "  @ @s._sFÿ_unless_cancelled> Qx6tryªÖöl gfinall) "h.o æ ±Uensurà  ñ3_orï µpWrap a - q or an ~ @able’aó !IfÊZ1, iüÄ ºed directlyl&ifq Es.is~ (
 µ \ ûÙ   Ã
ÝÄÛ ' Etaskï  u n 0  ÙlÀsource_trace­ ' @del H ,._( E[-1]N *  CelifY êŒ j Zrü oD 0s._à  O  ¹ ðraise ValueError('äE € belongsX€a differô V  à"n Ÿ H  'î OÁspecified as9C >' C !
+ inJ Et.is�ß L ð ensure_future(_ðwrap_awaitable(coro_or_future), loop= ±)
    else:
   ñraise TypeError('An asyncio.FB @, a T Åutine or an n U is 'M  Q  õ'required')


@types.L k
def _¾ Z )¤ °"""Helper f{ š censureã A().
ƒ WWrapsœ ò(an object with _&ˆ__) intoØ @ 0tha* Àll later be ž ýped in a Task by ~  ô 1"""E öreturn (yield from’ .‚ [())

ü U._is_9 =  ò


class _Gathering (és¯8g3 )óThis overrides cancel() to ñ all the children and act moreè Alike.? ñ, which doesn't immediately mark itself asA 7 Aled.  @	 €_init__(1 ,† 3, *ÏCNoneê  }”super()._8  ïô$ Uelf._Ñ =V v " _»Òested = Falsed ž º œ Kmsg=Ž 0if ¸ g.done(¦  d R     5retf      ï­  |O ¼  %   "ifÊ ˆ ‘ ;msgx  * g 2TruÂ  jif retQ ‚# If anyW ° tasks wereSually&åled, we shouldG X ²# propagateHUslation [ë regardless of? *)`_excep6 òs* argument.  See issue 32684C y   .s 	È	û a  ÿ !

‹%*ƒsBss,/ 7urn— =ËnB"""R "a —@ aggè Âting results _Vgiven^"s/5 sÑACorowms will‘. œrschedul« [ QeventU b. TheyF ð not necessarilyV > 0samì4der¯Apass^ œ 3Allã ²s must sharí= € |!. QROaF #@ sucŽ afully,/œ#edb #'s; o Ý Dlist4U1(in<  or¶ #of ûiginal sequence, ÿ # T 8 Q ‚arrival)À ‘0is S,D ª ² R ë P treaK  'asö ? v ,Î‹oÇ   ÷ ð; otherwise, the fð:irst
    raised exception will be immediately propagated to the returned
D �future.
Q €CancellaM A: if/ qouter F( R is c% òed, all children (tha˜ ð have not comple{ Öyet) are alsoC ’.  If anyG 1 isˆ c @thisv 1treÄ  as˜ $itý ³ ¡edError --A  ç ¸ V*not*{ A in ] ”case.  (Tj oC qprevent� s of one± tÍ ’use other  tE &beq ".)eQIf *rƒ_º s*ä dFalse,2 `ing gaW P() af…i`ð s been marked d� Swon't< R`submit}±awaitables.Û €For instÉ,d  :  ;S u A � !anA ¸ Spcaller,-QreforÆ  ll3 "``Å .EA()``D ] Pcatch' 'anÈ(Ú!byko‰Ç a) fromG ]  þ �3 ú 1"""6 #if rros_or_!s:  pif loop–FNone    !=  as.get_ _ %()D ;els9 �warnings.	 R("Thef Pargumm‘is deprecìòsince Python 3.8, ¾  „  ð"and scheduled for removalëF U10.",¤ G D€ BionW¯ æ, stacklevel=2à a=Ã !.c I% æ.set_result([]B  $ Pdef _Ð_S–back(fut)€ònonlocal nfinisheÇ È  R += 1P   "ifb .X (L   ª3fut¡<led$  ( g# Mark¤’retrievedZ $   M #   ó 	�  €  ò  6 0if U C¢ PCheckP'fut'¼1   f62, aa T   # / .± 'I*†J* a e=#N0eadÊ  Ó.itQexc =Ì e_make_¡  _eÀ- £ A¢ 6excE %   y 	� ‚ ) „ R O  ifí E   J      - ¤ ¥  ˆÈ‡ == nfut† 3 ð# All futures are ÷done; create a list of results
  ù# and set it to the 'outer' future.0 D i = []
 0for2 Ù in children:!  v  if$ Î.cancelled()$  ( õ# Check if 'fut' is 5 ¡ first, as Ý.exception()'r N ôwill *raise* a C€ ÒError instead$ªturning itú  I   ð# Also, since we're add3  =� 0 reK o value— Cto 'R'† 0aisQ ÿit, don't botherG @sett/ ÿ__context__.  This also lets us preservŽ @callG u'_make_p _e&�()' at moM+nc   eres = *s.k(Â  9  ''íCfut.y €_messageû�None elsº  ? 9  )l  B p·  E » (@  i iH• N  ( R áO   Ús.append(res)S1if ‹žrequestedx p# If ga& �  beÊÃð  we must propag.thN#eaO° regardless*Ñ_"¯s* argumen+ @# Se¼žsue 32684NQexc =qÁ6set… J(excªæ; w o sñ arg_to_fut = {}z Çí Õ@nfutà0  Ânfinished =   1argporos_orS Fures² if7@ not( y "  k Š censureD °(arg, loop= 
ö !if  ü .
M  Q  3 o � `._get_ M(futK  ~ !is¤ >argM £# 'arg' wa% ! F-,Aqrefore,�ºQa new3 ‰  #4 ©�d specifi‡ y Kd A.  Sk ^   ¸0't ÿArol 8`isable‘   "destroy i _task"’  !waý¬ S_log_J _J @= Fa™	M (I+= 1 ìR[arg]Ž	"  g @add_Â_í Zback( ² GëÀ       # Theñre's a duplicate Future object in coros_or_f Gs.
  Àfut = arg_to" e[arg]
# òchildren.append(fut) òouter = _Gatheringz (3 p, loop= )P qreturn 9 ó


def shield(arg, *1 aNone):2 â"""Wait for a À ,5 @ing  òrom cancellation.Ÿ ÒThe statement  ö 0resï wV } ³something()Û ÿis exactly equivalent to tU N v ñ*except* that ifE  ”Óutine containÎ $isÌ 0ed,* ‚task run& 'n ² v is not6 @.  F « aPOV ofC 3 X 1 3A didF hæ�.  But it� rller isE Dtill:  ¡ syÅ -fw Áexpression s. Rraise? C¦üedError.  Note: IfÑ Ïped by o^R meanF `this w‰ a - #()ÿ’If you wa¹ôcompletely ignoreÆ  (C²recommended° A  caA mb«0Ò) with a try/Ýò clause, as follows:þ t2tryÏ    … $   ] 
8K  3¢1""" !if}   8 0warJ s.	  ("* ¥ u. 6 PdeprePòd since Python 3.8, d  ¢ 
 á"and scheduled¶premovalˆB Q10.",§ 
?   Dx BionW§ ,Ç’cklevel=2š1inn|`ensure·2ureF Ê t1if - c.done(W i ¦# Shortcut¡1    M # =yps._get_ (# Œ Ï! =pe.creat‘ O é_2 _† “_callbackF ™"if.Ô8led²  ¶ !if¨M &  * b# Marký �'s result –retrievedø  0   W vBion(á     ×[® § M Felseõ  [ Rexc =¬ . 0if ' ð
Ò D   q Fset_F :excÈ  
; +�.  Ìg Ì `	ª ÷Ë Ä. eL -L£À.add_done_caòllback(_inner_done_ca ú )
    outer.add !(_ 
 2 breturn9 ð


def run_coroutine_threadsafe( �, loop):o À"""Submit a  2 ñ	 object to a given event9 !.
9 Rv  6 ñncurrent.futures.F ? ñccess the result.= 1""" fif noty Es.is† ­ §  öraise TypeError('A9 ² Âis required'” _ = co¨ "()Ò  9Œ(x 2try, …   S ’s._chain_ t(ensure  Æ i=n", ' •  F ÷except (SystemExit, KeyboardInterrupt‡  4 :  B QBaseEM ªion as exc± #if~ ø.set_running_or_notify_cancelô  _   µ 7 n vion(excÇ  & — ˜  í .FY_soon{	çr?` °


# WeakSe@ntai¢ ñ all alive tasks.
_all_ ³ = weakref.9  ÇÀ# DictionaryñI 3 “that are °`ly act_ Ain
#n ï`s.  {EþÓLoop: Task}
_C � #{}{‘_register (z ÅC"""R a a newÖ   i´Ryncio¼’ecuted byn+û  X s e/p  €,Y v © : = ¹ P.get(3 Ð$ifM 1 isŸFNoneQís RuntimŠPf"CanÉ‰ Q intoƒ   {ÿ ò!r} while another ý :   f"5 ( {¹  C ²is being ex#"."¶ 
Ó [Ï 1] =� !QleaveÔ î != ± !@Leav½  + 2doec_matchh»Þ $;delé/un¥	U ! ah .„ udiscardˆ:_pyú l	f 
# z  %  ' H° "   Í   5


«‚from _asXŠimport (¢ ;, _| ,Ã” F   _† 6, _v 4 
¯Àsks, _currenòt_tasks)
except ImportError:
    pass
else ±_c_register: : =  5 ]_c_un(  * (enM    Uleavem  ð
"""High-level sup» ñ for working with threads in asyncio"""

iê ¤ functools ócontextvars

from . , òevents


__all__ = "to_a Q",


a U def  (b ð, /, *args, **kw
 )R@"""A— Òhronously run— Pion *? *½ “ separateÓ !.
#2Any[ E and^ AliedFthisT Áare directlyá!edJ #too ÷. Also, the current :class:` ".C,ñ` is propogated,M Pallow…1 ± variables V \ CmainÍ ð  to be accessedñ 1theJ ÷ ðReturn a coroutinaat canI `waitedW 1getÊ ¿Ôual result ofï g   òqloop = . às.get_running_ !()- cctx = Û  ,c.copy_ %  »r_call =} hñ.partial(ctx.run, g rå  Í    2 ò_in_executor(NoneC j )áAbstract Trans½.ã ½(d U'Base* ‰', 'Read HWrit# 8 	# ‰Datagram `SubproÒ Q
)


�  z    !  ÍtÅ sÀ  ¤q__slotsƒ²('_extra',) ñ __init__(self, ! =,v E "if  ¾  �     3 Q = {}î    L .m  ! u r  )4 S_infox Pname,Lault€ õ"""Get optional é  B 0rma ô  }   ˆ   (f ¡is_closing� û 3"""@qTrue if!� #s : 1 or *edŠ àaise NotImplem¶d6 A ey  @Clos¬eñ Ê ã ðBuffered data willÎrflushedÁ*¡.  No more. ¨6 ðreceived.  After ‹ba  \ îC  protocol'så0necŒâ_lost() method� ((‚ually) b± È  ÷e$ 0th ]À as its argu/.k  • 2   rWDset_ž ^,{­ 
á•Set a new  ÂÀ      raise ñ!NotImplementedError

    def get_protocol(self):    ô"""Return the current . E."""+ oraise j õ

class ReadTransport(Base s ô"""Interface for read-only t9 sv w æ__slots__ = ()Ò 0is_9 ?ingÐ qTrue ifØ \ Ñ is receivingh    Þ    H_pausey P  p c R end.¸  F ñ
No data will be passed to6 v!'s& _F Aed() A ömethod until resum‘ )Ý ucalled.1 Á \  ã S - t ¯ Ÿ ;ingå Dâ  "edë ¯once againö 	µ  $þ  ö Õ –FWrit‰—w4 ˜Aset_; á_buffer_limits¥ñ, high=None, low
  a"""SetZ ) P- and( r-water J 4b × flow controlcôThese two values# P whenj "f oyâ `  [)ƒ  Žõs.  If specified,E  I8low¸ P mustûðless than or equal“ 5the> ü ó ¢.  NeitherÑ 1 caEŠnegativeû  ð´aults are ication-¬ cº uz  Oagiven,/Ó 2defj Uto anÀ t ½  "@Settg  /@zero	0ces! %as† Qwell,¿c•,s Ú to�  ¤pheneverè C Âô becomes non-empty.  ‘  ‚1to � h > 6	q | -j 2is a E bUse of`  -žõenerally sub-optimal as itD @redu) op•punities>0 doU2I/O(Qomput)< 3con/ly~ Ô S ~ =eAsize
ý‡  *   %C  +¹À       raiseñ! NotImplementedError

    def write(self, data):   @"""W Q some ò	 bytes to the transport.O  4 ñThis does not block; it buffers8  g õ and arranges for ity õto be sent out asynchronously.' 5""" _raiseê Slinesï €list_of_� ÷  a " ÿ (or any iterable) ofeedault iƒñ ation concatenaQphe argu¢sØ Scalls¥A) onAoresult	 Í À = b''.join(Ã å W  ð.û 1 )ÁA_eof%
QClose‚ ;   eÄÓfter flushingè!ed!(°is like typ- ð^D into a UNIX program read ³from stdin.¡  bàData may still)�receivedAcan_Ò ø ðReturn True if täý@ sup¦C q), Fals. Onot.ª_abort€
~ �immediateàBo‡# w)Ólost.  No morÒ E0The“ptocol's±0nec¼_H ’() method^ õ (eventually) be‰  Àe$ ô th None as its î´„
class T|U(Read !, ² Àð"""Interface repre] dra bidirÙ -alÔQThereo’[veralËas, butÔ î !y,"Auser	 F newi ’s; rather8 €platform{Qvides~E Wusefu£  Nfat are’ Ped usÙ  ¡L b's bes`“practices� æ¬ Ðnever instantQ6s a¦  %0ly;Þ  y ê " a— ¡tility funQ, pas„ @it aÈ C€ factoryß  oñ >  inî �necessarybRcreatnî 61proQ r.  (E.gBERLoop.8 C_con¯m() or ! „server()\	Ë Ü
€ a 	 — � æ @hook/bm up b5œÆ !'s¯ U_made^	M ÔÀZGð here raises Notò2Implemented for every method
    except writelines(), which calls Ñ() in a loop.8 A"""
	 õ__slots__ = ()


class DatagramTransport(Base !):= Á"""Interface  d7 „ (UDP) t> /s.q  Æ ðdef sendto(self, H ³, addr=Noneo  + q"""Send" v to theg .Ô  ( ñThis does not block; it buffers8  f Ñ and arrangesÄ !itÜ  E Pto beš òt out asynchronouslyI '  ¨ ñ is target socket¾ 6ess' !If  *  Õ D use3  B qess poiì&onÕ – creationJ  M y   —raise Not,RError [ abÁ Z
I0Cloƒ B  immediateá 	B6ew@willâlost.  No more“ †receivedµ ðThe protocol's connecØ _H #()× B õ (eventually) be‰  Õ�ed with E°as its argu(o $ð¥Subprocessäò… 0 ƒ dqget_pidÀ
fG_ 1 id 8   ¿ [ ¯returncodeb , �See alsoÅ  y õhttp://docs.python.org/3/library/s´ # v.Popen.c P p { 05pe_$Ù N, fd?$ ¡Bpipe�number fS ms_signalw  
{ i  k\ Ì X  R#’ S%�terminat#AStopôÅ BAliaýcŒ@²On Posix OS=…  ds SIGTERM& ‘e    ’On Window? ÑWin32 API fun$ TÀ PŠ%()
 4ûOto sÍ 
’ë*V� ê2kile
]KE-ð
        On Posiñx OSs the function sends SIGKILL to Ósubprocess.
  õ On Windows kill() is an alias for terminate().
8 •See also: öhttp://docs.python.org/3/library/ # p.Popen.| J 5""" ñ0raise NotImplementedError


class _FlowControlMixin(Transport):H a"""AllQlogic× â(write) flow c? ñ in a mix-in base c ÷ qThe sub t must i” Q get_Q °_buffer_siz1B  It, AcallŽ ð_maybe_pause_protocox�whenever¨ L  L  L ± increases,F Cand J _resumK Sit de8 .Œ !ay¸E ¬override s¿ àlimits() (e.g.A specify dià 1entB „defaults	$¶constructorñ super().__init__(extra).  ThisV Pwill 1™ ”�user may2 A and^ ¬,!  }4ir —2's ¨ �Ping()% F v  ‚ !be… "eda É- õ__slots__ = ('_loop', 'ÿd ¡high_water 3low )~Edef <aself, Bp=None, \  ý ès›    aassert;  ÿ@not M    f .¶ ! =&  /Ç ‹ = False& eØ   Î `ize =  .Ìz "if><0 _^º hreturn8  d ¦
9 # f = Tru b :try:   
> .m�  + ôexcept (SystemExit, KeyboardInterrupò 0  BJ QBaseEU  2oas exc¢  V.’_‡ Ùion_handler({] w Ä'message': ' à ‚ failed'Ó:  'k  ':œ & tî!':' „ & .Ö0 }j’îE (¸“1if  V uÕ    = º ªùh > Ð_protocol_pau×sed = False
  Itry:   ùself._protocol.resume_writing()0 þexcept (SystemExit, KeyboardInterrupt)d ;rai‹ J QBaseEU ®ion as exc? £ ¢loop.call_= Ùion_handler({§  ×   Ï'message': 'á Ÿ failed',C l  ':� & Àtransport': ® ' … & w0 1})
‘ qdef get‘ðe_buffer_limits(j nqreturn  Á._low_water,’ b._high [ /_s\  , 4 ¡=None, low
 q !if! @ is $ 
¹ if3   � [ Á = 64 * 1024î     JelseO   3  2 5low1 j 	Rlow =¦ B// 4T L bif not !>=« J>= 0u ¸Å ValueError(t  C   !f'•  ({ Ó!r}) must be U \({low #0'ƒ C  Æž° k   Ï ­ É  Á)[ B  Ó = ý6low: µmaybe_pauseB(Û  œ ¹Asize FeáNotImplementedn0
imSt socket ôwarnings


class T|S( :C"""A: õ-like wrapper for exposing real ½0 "s.C ðThese objects can×rsafely l°ed by APIs d ³`O .ÿ Âextra_info('É ð
')`.  All potentially dis="iv³Àoperations ([ " "= ñ.close()") are banned.y 2"""¸ ð __slots__ = ('_9 '',–�__init__‰,õ : 0et.- eÃé  ! =% d  Þ3_naC 8wha4 £.	 
41f"Uy{3 A} onT 6etsRAfromó;! "ì  8  `f"will˜Àprohibited iJñyncio 3.9. Please reN your use c O úto bugs.python.org."�aDeprecœW‹ CPurce=,h0@prÃ!ty¯  .afamily1ý´ : .ª.( fF >typAðeturn self._sockñ.type

    @property ñdef proto(self):  ' preturn  q._sock.' D  6 Œ__repr__9 Us = (G  K ñf"<asyncio.TransportSocket fd={c Ëfileno()}, "= dfamily(  P!s}, Ó     < ´ %  }" )Ì  ¢ "ifé † f != -1 $ :try   rladdr => 0get)iname()Å  + 1if . E    60f"{Ø & !={ ¯  & pexcept f Žet.errorO Ipass~ º rº Opeerº . k  ” º & !={ º &» ‚">"­y iNtate}°raise TypeEÿ("Cannot serialize Šsobject" h  Ÿ
( : <dupÍ  M O % 4 ÿ get_inheritable@ 1 L �shutdownE W, howÁ #ð doesn't currently
ôvide a high-level t´E APIžT# to i õ the connection.& ð , (� Î Ìcockopt® °*args, **kw
 º D= 7 b s—b ¯ 6 [ 5get8 < ­ - ­Ä |D  ý- D !by F / H  ac`‰Ë  P c._na('  –) method'æœ, ‰!_ ,, V^p 2 q - Y � ?_ex„  5 ‡  0 Š Obind„ / ~ * x À **kwargs)

ð    def ioctl(self, *args, **kw
 0):
&      b._na('0 ¥) method')# rreturn * Rsock.+ U 
2  { olisten| 1 } , ~ �makefile€ ë " q . â Esendd `3 u . è Ocloså  m + ß odetachA  ] , ^  Ü ‘msg_afalge B8 } 
k L( � (‡ (� /to€ /to /to~ | z x /al¦ © 2 w - w	³t_inheritab3�
: ‘ 
5 ™ 2harÝÏ, process_idÎs+ € + P •recv_in„4 ~ / ø  $ Ofrom‹ !8 � 3 “  w 7 ‘ 2 � °À, **kwargs):#
  õself._na('recvmsg() method')% rreturn , Tsock.- °*args, **kw
 !)
4 @def " Pfrom(6 ,, ) :)  …    ‚ 3 ƒ . [ 
„ € ÿ (x £settimeout~ fvalue)ô 1if  V == 0  lpraise V@ eError(  - 'j £): only 0 | ð
 is allowed on transport ÂGets'®g² « � & 0V³setblockingß Gflag3 pif not  Ü ,h .):À @ canh 4be ( Ó ‘__enter__¥ Ÿ qÿ	context manager protocolû
X @c__exitl o, *errr :] W ñ.
"""Selector event loop for Unix with signal handling."""

im Terrno i
 „tertools o
 sp  _ ) Q 5tat †ubproces: y ”threading.  warnings

Ù3 . ± Qbase_ë s se 
8 Œconstant6 œcoroutine d œexception. ]futurD ,± LtaskH š 4logû òlogger


__all__ = 'EaLoop',ú'AbstractChildWatcher', 'Safe 0 =Fas, _Pidfd- PMultin 
 1 'TÍe5 uDefaultª ðPolicy',
)


if sys.platformñ'win32':  # pragma: no cover´ IÏ!'S’Qs are~ really supôaWindowù
¤A_sig"€er_noop(6„um, fram°‰"""DummyS!erR „àpass


class _‚š ‚°].Base& 10"""E Û.|IAdds… ôing and UNIX Domain Socket÷ E to h ÀventLoop.
  ñ  """

    def __init__(self, selector=None):'  + ˆsuper()./ ) )# ö
elf._signal_handlers = {}n Qclosek \   Q ÷
if not sys.is_finalizing(<  œ ñ for sig in list_ ‰ 4  8  ò {.remove· F(sigˆ Felse
 :  if)î 
&  * �warnings.	 ð(f"Closing the loop {† U!r} "I 8  ÿ
f"on interpreter shutdown: Àstage, skipp~ ¥ ¥Oal",„ ’ResourceWÖ / - =â NÚ   ¦†.clear()2�_process_0 Q_dataà ,  Õ0num  
�MZignum  ’ ð# ignore null bytes written by _ Ae_to‡ (Î ‰continueA ³ .b Z7numá 3add * rá ÷sig, callback, *argsñ „"""Add aÆ a	ònal.  UNIX only.M æ ñRaise ValueError ifŠõnumber is invalid or uncatchable.Þ I iRuntimK  re? àa problem settr!upi rI  Œ š   Ðif (coroutineô (E) or…  4   ' 	4 †function< = 7 r2TypÁ &("H @ can{be usedbo"with È &)")Scheckï   	df:try³#YÑ_wakeup_fd() Î sÜ ÌsG*th�ñ# main thread.  Bym ­ùit early we ensure that an|r# eventÈ0runé }sanother[ La­jG  Ÿ* G.setè FÖsock.fileno()D†except (áA, OSêŠ) as excG5 Ç“(str(exc)¢ Š Ÿ " =ï 1s.HÜX , š;1f, 8à ° Ë _H “rs[sig] =¹žæ PRegisísa dummyß; ð r to ask Python ¨ku Š À       # numö0ber in the wakeup file descriptor. _process_self_data() will
   ü# read signal numbers from thisW £ to handle3 )s.O H . ¢(sig, _sig3 ‰r_noop)
2 ð# Set SA_RESTARTb ÿlimit EINTR occurrencek ’interruptq eFalse)e õexcept OSError as exc:  @del &.¬ Cnal_° is[sig]+ oif not. 
U  Y >try   !R.set_Àf_fd(-1¶  %   ¾ a(ValueÂ ,Ë )Ì nÍ  6   Ýlogger.info('i à failed: %s', F ˜ if(¡.errno == 	 ~.EINVALÔ Âraise Runtim§ ð(f'sig {sig} can6ªbe caught'é OelseT -Cdef •£(°,…): @"""I Ëáhelper that is*`actual4 ! ÇUr."""âø/ =à1.gec½ $ifkis NonÆ öreturn  # Assume it's some race conditionER €._cancel¥   Ø ù s.removerÿ)n R Æ it properlya lQ Ó_add_callbackX Rsafe( ˆ{ ?elf� Š a'0r fƒƒ .  UNIX on¡ å R6“True if a. C Bwas … 1d, í ' 6notå Ôß 5cheØ (o ¤š1Key—† ¥úž Ã   ifÌ  N jSIGINT; qr…•Ä.default_intê½ Î? vSIG_DFL† ñ �   ,lêî F	2zo vÞ Ast ? 2 ¤ Ÿ›3exc}À    return Tñrue

    def _check_signal(self, sig):"  & ð"""Internal helper to validate a/ Bnal.T  2 óRaise ValueError if the) Ñ number is inG õ or uncatchable.{ I iRuntimK  re? ña problem setting upi vhandlerI 5"""U ÷if not isinstance(sig, intõ  Ç rÇ 2Typ{ ð(f'sig must be an3 ,L –{sig!r}') ifï   in  #î l/s(o 64(f' ž9 n l Äó	make_read_pipe_transportÐ  ,,õtocol, waiter=None, ò  Qextra. ² ÿreturn _UnixReadPipeTx !, Q ,À _writeÁ Bq Â 	W| Ã %RasyncM‰®subprocessŠ#ro„¿args, shell„šÑstdin, stdout ¿err, bufsizÍI ƒ`, **kw� Þðwith events.get_child_w¢ƒer() as  ( Z \ ¬.is_activeì , 0# C{f early«     # þ Õðexception beforeÊ ^P crea ÄB# pr¾  �` execu0 �§ ?  !isº SyîQ> it¨ &¤!("/io;[ fated, › ø  "É 0supÞ Ê Èylled.")Ì è0 = ×..še_future(* 2" =ÐSÁÒÀ,Ý Å6N å = \=ßXJ Æ  &C.add"r(6æ_pid()q �L ^ ²_callback, V  yi ™ aô Í	ø1ð
 (SystemExit, KeyboardInt«errupt):
  Yraise Áexcept BaseE >ion8 étransp.close()A  b cawait % _ %  | < creturn5 
 òdef _child_watcher_callback(self, pid, : Scode,? ê  ( .6 ô_soon_threadsafe(Ÿ Ùprocess_exiteO )‡ `async � ñcreate_unix_connection(­  ø    q ú, protocol_factory, path=None, *,2 #sl Bsock 
! ïerver_hostname" ñsl_handshake_timeout( Šassert sN @ is — û  or isinstance(& V, stréjif ssl  [ 
(  %üº ValueErrorC "   ý'you have to pass¼  when using� '¡ Jelsew Ÿ 1notþ 
,  } £ ' 9ûonly meaningful withŠ  L  | ¢ C ‚ 	 X   /'sZ � J !if™‰  » ?ock!  „ ,`    'P and èP can ý ð
be specified at the same Ç'„D C p= os.fs ( ÷ ' ] =d 0et. 2et( ”.AF_UNIX, êSOCK_STREAM, 0H >try H ú.setblocking(False9  …  ‚ .ˆ 
4 wp gw¤ t ô½ ã_ B ˆ 'nj&th§7wer¡c s 1if Ó •.family !xj? orHGtype3 �¶ g   « X @f'A âñ Domain Stream Socket was expecéPgot {‰ ;!r}Ø   çt =6ortë7 = ö_,'_4 
î l F 1Lssl,ñ9ö Àdshake_timeoSut)
  ñreturn transport, protocol
$ ñasync def create_unix_server(" I V self> ú_factory, path=None, *,2 3ock òbacklog=100, ssl 
. ÿsl_handshake_timeout( Atart¢ ¥ing=True):I ÷if isinstance(ssl, bool"  Ï ð(raise TypeError('ssl argument must be an SSLContext or å "')8 G  ifË µ q is not0 A and 6ssl§  > … CValu† Å      — ^ ðonly meaningful withŒ ž  ›� 
�  ¿ ?ock!  „ ¦  & 'j  ë sR 1canô ð
be specified at the same Þ¬  D C p= os.fs ( É # ]  =  2et. ( ”.AF_UNIX, ·SOCK_STREAM³ F ô# Check for abstract6 a `str`µq`bytes`à�s are supC9ed.«!if$ 1[0]õ Ûin (0, '\x00'y  :tryˆ     �€tat.S_IS¾ ‚(os.stat	x.st_modí 5  ’os.remove2 	¥  ( ñexcept FileNotFound � OpassC !OS9  as err@ a# Dire%ñ may have permissions Å#toy‚s  º ‚logger.e®pUnable ; É2or ø p stale O / 'P  T  ‚'%r: %r'Ë,Ò 2³ x_.bindn j'.xc'C jclose(é œ `if excô Pno ==— Þno.EADDRINUSEO  6 ñ # Let's improves7ÿ message by adding#Lpwhat exúaddress it occursþ u   “msg = f'A/ {¿0!r}_ïalready in use“i2I(errí ±, msg) fromW¼ OelseY 	0 ž. �

G o  ¾ ü!is¡ ^ A  ð	 GJ"waB>,“!no×UDÀ      if (soÿck.family != socket.AF_UNIX or
    & W.type3 ÝSOCK_STREAM):6 ýraise ValueError("  g Af'A x ñ Domain Stream S• ð was expected, got {‰ e!r}')
P   ö.setblocking(False)  ñerver = base_events.S €(self, [C õ], protocol_factory,D  ¬  össl, backlog, ssl_handshake_timeout� úif start_serving9  Ier._# (>  ƒ ð# Skip one loop iteration so that all ' É.add_reader'Ë 0# g, irough. ñawait tasks.sleep(0,h =+vrreturn ² �°async def _Qó_sendfile_nativem   ,  ÷ , offset, countE:try4os.N ¯ ò except Attributg
7 …) 0ion÷“ ²NotAvailabl8 Ÿ"t ´() is not a6 "–®  Ý Ano =æ . Æ� * (º ó, io.UnsupportedOpØ ) /rrÛ &"¹ � regular• ¾ 
òsize = os.fstat(Á P).st_ �!OSáŸ DÖ w " ='3 if	 `else f “ !if¦5 • ´¡0  # empty½ [`fut = éç.create_future¼ ßñ_impl(fut, None,Zé/noJ „ 	%, Ê 6, 0r}­2futÃ z›  » !, ¡ ßregistered_fdª  ¥ PtotalúÏ fdWoxWilenoP if˜� h C
½ð# Remove the callsð
 early.  It should be rar'  at,  ^#ÞeÝP says  0 fdu  'Ay bu4 ` r still lsG òEAGAIN, and I am willing to take a hit in“{case inE Porder2 s<1ify� pcommon 3 
œ Á!.r0_wrø(É  ifèð	.cancelled():
          ð  self._sock_sendfile_update_ @pos( ðno, offset, total. Gt)
  ereturn •if count:  , ²blocksize = ' -Q 	+ 6if . J<= 0J  N ¾ 8 O ÿ fut.set_result(é  + í ± :tryŸ ¤sent = os.X\(fd, Mâ L�except (B+ñingIOError, Interrupted )r ú	if registered_fd is None&  ½ 7ðadd_cancellation_callback(fut, š <  6 awriterÕ P í à_native_impl, L + F    l !. 
Š`,&œP!OS5z as excMif (<1not@O and� Ñexc.errno == 	 Ÿ.ENOTCONN4 �type(exc)ž b `Connec{Ÿ Ô (ø# If we have an d ð this isn't a first Â= to³ $# �å(), i.e. the c� á was closed in omiddleK  !of  Aoper8€, normalÚ V e³K to à K   to make itŒ sÁýnt across all Posix systems.B œnew_exc =l (+  O"h$et€ÿ Ked",Ä
ø ; j À.__cause__ =Lg Ž . 	 'ifî 7Õ ð# We can get here for differU�reasons,�6mais ¤   Ð# one being 'r'î a#ÿular mmap(2)-likà 6 ,ðwhich case we'll f“ "™ on usingâ € Qplainp.()²2err: epù3s.S{ÁNotAvailableÃVï~failed"³›à$ Ú "Tzion(errv ?elss†h%ˆ &xcˆ Ÿ 1 (S4ðExit, KeyboardInterrupt):
  draise
 Áexcept BaseE µion as exc:%  - ðself._sock_sendfile_update_ @pos( ðno, offset, total. )t)K ‚fut.set_| vion(exc# Jelse| Êif sent == 0  š Y# EOFa   ° 8 O ´ result(Û ¼  = 1 +=Ç « M # ûif registered_fd is Non( l   ü ðadd_cancellation_callback(fut, Ðz <   @  : ±writer(fd,   Ðnative_impl, P Û  N  J Sock, -2 <ú, count, blocksize_G Kdef ¢ ¢ Å { ¨^'ifÀ, >y�os.lseekõÛos.SEEK_SET)
—  S�™ “ˆ  Õ  cb®)  S ifs.P ;ed(   $ Afd =ä.o(ì G zd != -1`  @    › ….remove_H   Ø Fdone]ôcb)


class _UnixReadPipeTransport(t
  s.  "):7@max_éð = 256 * 1024  # max bytes we read in one ev%Ploop ·ðL  E�__init__(Ñ  , ' ð, pipe, protocol, wa: =[q, extra […super().O &  ^ !._  ['_ A'] =h R_� ! =ˆ   6 4 Æ Ô| Î  ' Ù a ×closing = Fal@ @ause9 < ñ mode = os.fstatH.ýpno).st_! . €if not (+  .S_ISFIFO(# E) or'    ' OSOCK' 2CHR& ›H §B Ç	j á F  A" >Ð ValueError("Ö Í ™1forñ s/_£ets only." § !osÎ9ingL,–. ·  1.¿S_soon3 ¬ q.connecãðmade, self)
      ð%  # only start reading when connection_made() has be salled
  ÷self._loop.call_soon( P_add_\ 5er,5 < 
 5 ‚fileno,   9 > %y)= õif waiter is not None:  U Ù ´wake up the3 Þ  M Š â ðfutures._set_result_unless_cance$ð  \ É ,Ã !)
Ä Ádef __repr__I)Ü ‚info = [“ ñ_class__.__name__]A  X #ifA@pipe($ L ö.append('closed'e%elC   6ing† a 9nfo> 7ing? ] bf'fd={³ Þ}* ñselector = getattrõ SD, '_! '&    ¡ ä @ andÿ X %@pollñ=, Õ_events._testy  (\ |   ™ ¬Ü  z Æs.EVENT_READY : 3if } 
U Y& / # ;elsð  sW'idle6 Î-
‚ 	E IopenE w 	.  '	Cðreturn '<{}>'.format(' '.join(< )óëö:try¦  data = os.5 / '._¦f.max_sizexñexcept (BlockingIOError, Interrupted y  WEpassûE !OS* z as excœ è`atal_eb €(exc, 'F e  A on ŒŸtransportk f ö 
l    p �protocol.%  _received(  / </æ«get_debug( A   plogger.Ã’("%r was ÿ‘ by peer"f|  ; ¯  - {ETrue_ !   % Œ q_removeeë] 8 Œ!5eof B R Dlost“Â  ¹Bpaus­ 1ing™C±ÿ  or{1f._7 dÝ?Z ) 9 = 80À      if sel÷f._loop.get_debug():
  rlogger. ñ"%r pauses reading", self)
5 ³def resume_  ( S !if0 ó._closing or not \ d.  ˆ areturn_    P "._) ‹ = False Ñ A_add… !er„ ‚._fileno° .  %y)? � B ó Áset_protocolŽ $,  oÛ ( % =$ ] ” : I ? )JF ; $ist9 
˜8   e3 'if¶ " :ing·Í   ge(None"q__del__T €, _warn= Pings.	 Õ “qpipe isw  P 
n E Q(f"unr Ðd transport {Š ò!r}", ResourceWarning,  =" fAipe.Q (¿ ¢fatal_erro[ð, exc, message='F     A on º � 'Ý ð# should be called byM øeption handler only¥Á(isinstance({ 0OSEŽ P) and@ �.errno ==† gno.EIOw  á Xë + C: %s÷õ ¦_info=TrueMJelse« mu ô B_excï _ï %({ì     '\$':f,$ I  ':"  …:'#  ]'" .·
, }â Ð &8exc)  !  ƒ   = 5Ò  ™b_removNÉ‚ 0 RAsoon]!._ `connecRR_lostŒ á% @ * ¿6try  ˜ª 4.i  œ¦ ofinallA h X  `  û = ö$ "  ê "   ô

class _UnixWritePipeT.(#ús._FlowControlMixin ‚ 
 < Z V '):nU_initþ œ ,#�, waiter=ò  „1tra A„uper()._O pextra, P t"  ['ˆð'] = pipe
       à self._pipe =  #
   cfileno . +()% €protocol'  " ýbuffer = bytearrayE Ûconn_lost = 0? ðclosing = False  # Set when  õe() or write_eof() called.
J 0modä ˜os.fstat(à P).st_! . `is_cha²  - �.S_ISCHR($ þ `is_fif% NFIFO& PsockeÙ ( LSOCK( tf not ({ 4or a  F %):¥  ªÇ  º = None  ·  ÀB ðraise ValueError("P-ùtransport is only for "}  Ÿ 	 "§ 2s, É `s and fö acter devices")´ù os.set_blocking´,Ž
Ploop.ýS_soon2 á .eÁection_made, q ð# On AIX, the reader trick (to be£Rified}& p end of6 #è  "¥"d)*Qworks0	.v ÷other platforms itJ 3 C:= `(ExcepÕ ö: OS X 10.4?  Issue #19294.( ifX>  6 qÇ � ‚Dsys.ˆ û.startswith("aix")€#Ô ' 1 ¨™7onnl�() has be´�à  %¾ÓR_add_‘,9  =  N øå.=  yñ`if wai isÜC
bâ pwake upã3 ç 5�futures._íðresult_unless_canceÊõ É ,Ã ã Ádef __repr__¾!in»[,õ_class__.__name__]f!if''!isa 
$ L ’.append('í'r%elC   ?ing> 7ing? ] bf'fd={³ ß}* pselecto·qgetattrõ  ._CD, '_! '&:¡  ` ² 	 kX %@pollú=+„ Õ_events._testy  (\€ ™ ­Ü  N Ös.EVENT_WRITEZ ? 3if ~ 
V 5nfo˜& À')
         «   else:
  ùinfo.append('idle')
% ðbufsize = self.get_write_buffer_ )()3 T #f'A #={	 &}'. BelifX û_pipe is not Non« S Y'openE Ù 	. gclosed0 ðreturn '<{}>'.format(' '.join(< )Odef ñ  )NS @len( .G Q_read y# = 0# Pü Bwas ¬ • by peer.V&Aloop„gdebug(F  Øplogger.Ã ^("%r S !",o‚Z ÏÓ  P Ì • p(Brokenª vError()D Z9 9ÿ g, data¿ ðassert isinstance(!  , (bytes,  ñ
array, memoryview)), repr, � .ifH @ t  ã  f ' =T L  ’ ' 
ó,IÁconn_lost orm ._B:ingA 1  Q>= co úts.LOG_THRESHOLD_FOR_CONNLOST_WRITESO  Í  ‘warning('T } $edT • 'X 5   B'os.¬ B ¬÷ raised exception.T E õÿ I+= 1j 3  \8 €ö# Attempt to send it right away first& … >tryEn = Ó o cfilenoÛ 	¦ à Á (BlockingIOñÑ, Interrupted J ~  i 0N õSystemExit, KeyboardQ J  mJ TBaseEƒ0 as�ò å ‹Œ ® % qfatal_eÕpexc, 'F    @ on 
« transportû N Þ   €if n ==  Bè �
é  ^n > 0Ø  F ¯ I[n:]D Û .B_add³r{$._ü% è š« ¿  •1 +=¯b  ómaybe_pause_protocol(C  :u Z z ÿ ïI f á, 'Data should0be þ&y'gà sÜÀ self._buffeCr)
  ñexcept (BlockingIOError, Interrupted %):4  ; Epass E õSystemExit, KeyboardH A \raiseB QBaseE’ ªion as excx öself._buffer.clear(Í  ™ ! åconn_lost += 1g  ! ð# Remove writer here, _fatal_eý Û() doesn't it< ƒbecause ƒ © is empty.( … qloop._rn _n ( ofileno¹ ‡ pexc, 'F™ ­  Ÿ ö on pipe transport'J Jelse2³if n == len~ >� �  ]% Ü 8 ómaybe_resume_protocol()  # May append to † 	W G 2if § zclosingí  "   # 	¥ creader� 8   < Pcall_GRectioMV(Nonel -   ireturnª !elw>> 0  3delÃ ä Q[:n]
> rdef can,A_eof® ©j V True2 Z. +L x  Å cassert™  _ o" =~  3    ç o7 Ð 
ò > Š4 ‡4soo¼ —", ˜²  D6set\ M $, kM  .( % =$ [gI ? @1Ê; 3is_¢Å $ 8   e3 Ê ™ t1notõ P and  	N 
‚#= " ; ñall what we needeow 3 thaP å  a k)² q__del__´ €, _warn= Pings.	 5É 
³ E Q(f"un˜ dë  {‰ ò!r}", ResourceWarning,  =" 
¦   ._=.Q (¿ Qabort½ ¨ 1 , ]	* ( ,¦£, message=±«ê À# should be ØPed byM  epsÕ handler onlyŒáif isinstance(#/OS¢k|Ðget_debug():
  ô&logger.debug("%r: %s", self, message, exc_info=True)
D Uelse:    8 ù._loop.call_exception_handler({0  4 'g %':q $ I  ':Ž ," ²transport':¿ # ƒprotocol" $._ 
O }â Ð ±close(exc)
U Rdef _  !  f=None)  .% `ing = :=  ó !if£ †._buffer6   : Dò _remove_writer( lfileno¤ J |.clear( 	M OreadM 0 ÁCsoonx  aconnecÒAlostû 	 ö% @ * ê 6try ÷ ’.D ~ (   ofinallA Bipe.œ 4 =ppipe = ­Ž !"   ô	

class _UnixSubprocessT‰u(base_s _.Base(  '):WSstart2ñargs, shell, stdin 1out ðerr, bufsize, **kw1 „ 3 $_w°  è    ~  G == ž JPIPE“õ# Use a socket pair for‹ ùince not all platformsXP# sup– ñ 90ng �ñ  events on the áœ end of aB  ð(which we use in order to detect ö m ofT E Potherb ð).  Notably this is needed� ÜAIX, and workË �just fine* Q ö .p ­!in�C.  I¤*c ¢Yopen(i  Ð ö'=-=† 0out :   AN õ	universal_newlines=Falsek=s	E _!_w[!otn
Z · ž « 1elf¡!c.) 1 = þ  ñ_w.detach(), 'wb'� dferingŸ 
þS  õŽ	ÿMÅ 4r å 2ôAbstractChildWatch4"""  ? c v`monitoã   c8  p2es.@ðObjects derived from this class moniò.tor a collection of subprocesses and
    report their termina1 ¡r interrup Ñby a signal.
; ð8New callbacks are registered with .add_child_handler(). Starting a new
† ˜ Ñ must be doneC `in a 'M ð' block to allow³ € watcher SsuspeÕ ñits activity until. Dnew j ˆif fully´ ñ(this is needed toè ñprevent a race condiñin some implement:#s) 0Exa :E  æ  Ç ³     – ' =¢õ.Popen("sleep 1")E  / ÷ _  I U.pid,š)­Fotesu Iš ³  ý Uclass‡³thread-safeÔ  ~ 0Sin ×Î à objects may c•qsSIGCHLD7 t— Ì Àwaitpid(-1),1 �re shouldPonly Êec D perÅ.I 2"""ã Ndef qiself, †, *args)C"""R¼ – ¶ ¶ý ±Arrange forÌ  ý(^ ¤returncode`  —!be'  1hen±  D ¨•ess 'pid'x±es. Specify 0notÞeu �the sameK €replacesI ´OiousÂ  QNote:• ¼ )î ¥    ^    •raise Not>ƒedError(e ‚kremoveö…t , ² kä 	}rThe funÒp‘s True if÷ E pwas sucìæ j %d,6DFals7 0re 1  n w2to Å .ý 2 þ Âattach_loop(õ   
ö A$ ° É )2an g 1 ô IÚ *  © Ý2ly p ¬ B Pun it isÃ €first de¤ eeCforeD ú  _ († 5  ãb"ne�  *    )Qclose#
C TŸ# ø ðmake sure that anôAderlE€resourceØ_freedµ (2is_�¹  Rÿ0 ``�$``’¸i’ePis us‚yë ùQ  O M  ‘installedP  §Ðy to handle pÓrocess exit
  õ notifications.
 5""" òraise NotImplementedError()1 `def __ ¥r__(self):> ò("""Enter the watcher's context and allow starting new p­ "esb  ® �This func¬ Ð must return r ± !3xit° ›, a, b, c¹ ?xit¸ o ò
class PidfdChildW˜(Abstract ~ 1""" /$ iy¨0 us'ôLinux's pid file descriptorÊ3cv K Tpolls_8 0 (p© Ás) to await ? Î”q termin‹ þ. In some respects,ë ò is a "Goldilocks[Y ˜ 
ã °. It doesn'æð quire signals oLdreads,$   igÔfere with anyè ñes launched outside×±event loop,‰ascalesM ‚linearlyL  ¼Ónumber of subY +byT Q. TheM ðmain disadvantage@that½Pfds aß 0pecŒ {Ü”  on… aork onM 0rec¶ ñ (5.3+) kernels.  –	 ’%ináZ H . ._õ b = Non£  âcallbacks = {}€P âr†	. _ exc_type, 
 Cvalu  eo ¢ 3pasø x œis_activeZx Ð ais notÕ Ð2elf ¸.is_running¶MclosX !aattach'(%ë  , ,BÀ !if“z  ë	• z,is¦ w; ”0warµ  s.	 (Ý   !'A}  e  be de¸ Ned ', bfrom aÒy,@pend> ­handlers',> ‚RuntimeW� )  2forÆ‚, _, _ i�%._Ñ .ï's(" ¿  ;#�._remove_Õ"er„b  - 2os.¬  E k @clea˜ 4     s=*¢Aadd_„_ö `,Í $, R w, *args» Aexis§=å+ Ps.get¼ ž  ifn/ œ
â£ F u[pid] =9 8[0]�  Ž |JelseM a = os. À_open(pid)
   òself._loop._add_reader(pidfd,  ædo_wait, pid)
<    ðcallbacks[pid] =(  >  q, args
: Sdef _Q (_ V :  [ z 
< , =k @.pop¦ �  M Ê iremoveÍ ) 6tryo  s ð _, status = os.ì 0pid^ 6, 08 ú	except ChildProcessErrorM p# The c% " p& ` is alZ…y reapedî   ô# (may happen if � )9  	éed elsewhere).= ùreturncode = 255 ù logger.warning(  z "§ ´pid %d exit· Nd: "B × will report � ]255",/ 	A Ó 
<@ �= _computÆã (§)K Â €os.close­f� 6 “  ,˜ 0, *ŒB  �+
�_handler™7ªO_, _ ??Key6 ú e False6ÒV pTrue


î U‹ if´WIFSIGNALEDt  tâö	died because of a signal­Œ Ä-os.WTERMSIG[ ñ %el{ OEXITy ðexited (e.g sys. '()%x @os.WX kSTATUSz /seÞ e] ó, but we don't understand its)è  �is should0 ØE ñif it does, let's just Z® 4thaƒ¡; perhaps  æhelps debug itw 9 !Ñ


class Base°øWatcher(Abstract "):P q_init__)‹l = Non¥p C&{}P � > M aattachz(Q “œis_active† å ´ !1not’  ’ j ais_runù\ | á - °, expected_�ò ñraise NotImplemented¹(N M_all° D 	’  Ž/passert   ð  -€ or isin‡0ce( ”, events.ãE BLoop° À     if selfô._loop is not None and   ÷self._callbacks:
  �warnings.	 (  & %'AP þbeing detached ', ðfrom a child watcher with pend> ­handlers',> ‚RuntimeW� %)
! 2if Â Ù î 
É $ ó .remove_signal_t ( ‡.SIGCHLDa : ! =î { u   O.addl ,Á ‡sig_chld|  dõ# Prevent a race condition in caseU¥terminated¤ B 0dur`¹the switch.! ã ó do_waitpid_all(‡ @def À › (* )Z6try  k    -._J     ÷except (SystemExit, KeyboardInterrupt`  4 Uraise¯ B QBaseEM  jas excŠ #V „ö should always be available her^  p e# as 'ó 'BPadded "a ( 7˜ : `in 'at}
 � .n_Ë 5ion„{O  S ð'message': 'Unknownë $ep °� : 'h  ':< 
\ð})


class SafeC�Wœ(e ™@"""', 'Ë implementa� .£ZThis  ° avoids disï ™ ot�code spawsÑ processes by@poll- ô explicitly each)   áÀ instead of w1ingN oÔîI(-1)® Ðs a safe soluÌ ¡ but it ha ðignificant overh^ Bwhen… £ ac ¡big number}  [’ren (O(n)»  Ó ± 1is ì!d)> 2"""C ‚\close~Q Õ ºr.clear(>  =‚super().= Ð _em,__R areturn:| c__exit- “, a, b, c h Fpass/  ðä× ¨ a, pid,‚ ­ w, *argsE  % ‡”[pid] = (ß !, 1 h  v  ‹ Ävlready %} ·4(pi‡ ~2K Ö Å 1delNÚ â Æ   v6TruŠµ ZErrorÜ1 RFalse ¦ ð _do_waitpid_all£(self):

  ñ for pid in list  Õ._callbacks):*  1  > ò._do_waitpid(pid)M Hdef   + °, expected_) L iassert B > 0J  i 6try.   ôpid, status = os.‚ b , …WNOHANG)¹ ú	except ChildProcessErrora p# The c% " p& õ is already reapedT  “ ô# (may happen if “ )9  Céed elsewhere).=  t=	 ùreturncode = 255 ù logger.warning(  ™ ‹"UnknownÎ  s ÷%d, will report h ]255",L  ¸  Í 
6!if>J== 0  ˆ S st� Zalive 4 ‘ 	 ’_compute_*   (ò 5 0if ƒû._loop.get_debug(Ò + P  'ýè%s exited with*>%s') I  
•ª , ( â 1 tP, argå¿  Rs.popp ?   Ù2KeyÐõ  # pragma: no cover¼ 1 9# M±�.remove_ö—_handler(¿> PafterdêÜ sÉ|Ì"¦ô watcher got an unQ nO: %rª  á  1Öexc_info=True Èf a,ì0, *Žá)


class Fast¤ W£ X(Base `@"""', '…Ò ò implementation.éZThis  qð s every terminaŒž`es by ¶ 1ing¦ð-1) directly, possibly breaking ot\ :P spawEó!esM 1andÎ .  "Utheir‡ ¹ 0ereîàno noticeable y¡head when X J  a big numbFf1rens ò(O(1) each time a u #esB1"""1 qq_init__·z 0supÉ$._  üV�lock = thÞœing.Lock(& `zombieŒ!{}t \ �elf._fork ´ � ]closeŠ .  © Üs.cleari  È [ > l ~__enterú ¬ä ð:
            se÷lf._forks += 1

  ²return self Ðdef __exit__( µ, a, b, c):: Awith4 f._lock  Z  5 q -q #if9 ’ cor not zzombiesO  S ¦ ¡     ñ	collateral_victims = strµ #._L )´  4 ›  †.clear()W ù logger.warning(; ù)"Caught subprocesses termination from unknown pids: %s",E ´ ~  vòadd_child_handleÊ ,L ÷, callback, *argsŒTasserBUö, "Must use the context manager"ñ È
?tryŠ@codene[Ozpop(pidrþ except KeyErrorQ 0# T£  ø p is run|.7»‡s[pid] = 6 9n ó	dead already. We can fir8t�   è ", ]  –Z ÍoremoveÐ¿f3deln í 	Ü { U True k
1 VFalse¦ ñ _do_waitpid_all;œ `# BecaGðof signal coalescing, we miAkeepŠCing P U() asœ ñ# long as we're able to reap a ÷gQwhileÝ 
0,  pid, statu4os.� ï-1, os.WNOHANG—CwPÏ rNo more¥  ýVexistµ  Œ   jú   JelseÊ    ifÛ^ == 0  ! :# Au  !¾still alive|  6 € 	�   ®Â = _compute_.   (D‘ 2   "
 ! ”  ¾ , š. /s.0 : É
 !   #l=ï  $ 
le ( 0# Iy‹ÿbe registered yeã  4   	O’rR R”  8 ˜ ÷ loop.get_debug({ '  Ÿ, 'k¿ð %s exited '
                ÿ'with returncode %s',
0  Gpid,> ): �continue! îcallback = Non$ _else:: ÿ
if self._loop.get_debug()/  ¾ rlogger.( ÿ'process %s exited '	³ 5if è !isé ¥ � ‰warning(A  ½   ´"Caught sub¾ ÿtermination from unknown pid: "G  %d -> %d",' Ç~Ì (ö ø , *args)


class MultiLoopChildWatcher(Abstract µb"""A w( ð
 that doesn't require run õ¡ in the ma	 aread.
ñ âThis implementñregisters a SIGCHLD signal handler on> ‚instanti8 ò(which may conflict)aother : « ; 0ll �V Pfor t‘ n )¤ ae soluºðis safe but it ha¦  0 òificant overhead whe¦ _ àing a big numbÃ #f ñes (*O(n)* each time a¦ ÿ Ñis received). 2"""B:# I?3not‰b# The âòkeeps compatibilityåA ABCf Â# To achieveô Áempty attachØ“() method8 5andò accept explicit@arguô0  |Padd_c�_3¼er()/remove 5  …@retrŸ sbccurrenc 0by nŠ§ 6Ðdef __init__(žØ ¼  $._<as = {}q  “saved_sig© '  \ œis_active] ÆG ais notx¨ MclosH ¥ v.clear(Üud  Á
Ø— t  ç Ø  Ü al·
 ( .›	r 6 $!=á zig_chldm A"K Þñwas changed by outsideÁ"p óš  ¨ ,’ ºP R/ïÚ~__enter7Cg H  __²- ¢, exc_type
 Ðval, exc_tb):#
  Qpass
 ñ#def add_child_handler(self, pid, callback, *args):7  H ðloop = events.get_running_ %())  N $._I  s[pid] = (' a ` —  ` A# Pr] ñ a race condition in case the º û is already terminated.ƒ ò do_waitpid(pid)k  oremoveô 6try ¥ Odel à z  % µreturn True ú except KeyErrorV 1 VFalse¦ battach^ t  , Bž ²# Don't sav   ð but initialize it< 1 ifÛÆed first tim� ð# The reason to do it hereiXthat � )  à N 5romå ñ# unix policy only for·pmain th³§6# M  U `requirW ±or subscripõon SIGCHLD signalu #if’ Sd_sig× Q �not Nonepj ± "-._@ =k .r ( .ˆ ,w vig_chld’ 
Ž  logger.warN ("Eiousñ Ð õwas set by non-Python code, " Ñ  �"restoreÜtefault U öon watcher close."É  G vSIG_DFLMð# Set SA_RESTARTu ölimit EINTR occurrences
[ÍsiginterruptoÆ_àA_allÆ z0pid=Alist —* ç R 2l I °, expected_[_iassert F > 0SwÄstatus = os.´b , vWNOHANG UCÍProcess^ Þ8p&  @ireaped?Ð# (may happen;“ úPelsew$)Ç J t=	\ r µi = 255 	  \ ƒ"UnknownÎ  s ÷%d, will report h ]255",L  ¸	 @debuÍAg = l  ë ã ‰  if/Z == 0   q stŸ Zalive2 4 ¯ ' +’_compute_*   (6ð     debug_log =s True
  Etry:   ôloop, callback, args = self._ ¥s.pop(pid)< õexcept KeyError:  # pragma: no cover-  i ñ# May happen if .remove_child_handler() isŽ +ed> ùafter os.waitpid() returns.* ðlogger.warning("C` ù watcher got an unexpected pid: %r",F  ²  àpid, exc_info=R
:lseT0if WÊ.is_closed()!  Z ¨ ÒLoop %r that s�    I !",Z , ‚  O e†   ñif debug_log and> Q.get_ ˜  7 œ $ ð 'process %s exi4Cwith~�code %s'?
 T $  s_N½ ? 
É  , > }ð_soon_threadsafe( ©E 0, *»!)
Çàdef _sig_chld(Í÷ , signum, frame‘ / S._do_jV_all(¥ úÀ(SystemExit,çboardInterrupt`  Ñ Frais…B QBaseEG:ion!�Å€'Unknownƒóeption in SIGCHLD--r'¢‘

class T@!edW
˜(Abstract ¶ 4"""3  Ÿ? implementa… .m5The! ruses a ²S per >—@for U@ing  4the  s finishS òIt doesn't require subscriþ �on POSIXÕ!al] 6butz 1cre£  Oƒnot free\ ¯ °has O(1) coÚ �xity, itsº …formanceŠ Rdepen—ôon amount of spawnÈ e�2"""‹q_init__Še jPpid_cM ñ er = itertools. &(0z/ \ ¥&{}c œis_actived h( ‘ —* _ 5joir(O	  , É 1"""ûó	nal: Join all non-daemons ù   È [  ì ßAlist£ .–.values() I  #iff  x al)ô  b .Ž ] 7 …r % s‹ .þ 	 _eìÔp !ž __:- ¨Btype
 2val	 'tbSHpassA 5del@ _= 0ing'rn: àthreads = [thr°ead for thr âin list(self._ Þs.values())
  #if= Å.is_alive()])  %s:  D ’_warn(f"{j ù,_class__} has registered but not finished child processes",W  [ ÿ  ResourceWarning# ! =~ !)
C �def add_a �_handler	ö, pid, callback, *args)Ñ ðloop = events.get_runz _ (7Q# =2Qing.Tyq(target� �._do_waitv › Ö  sname=f"2 T-{nexÁßpid_counter)}+U  Ú  =(· ö   )LD ¶daemon=Trueû  jRU[pid]ä w.start(—oremoveš‰ñ # asyncio never³ O?  U) !!!z ñ# The method is no-op}Àis implement�gecause9 áabstract base ÈÕe requires it+ preturn rRttach( # , |Ó Fpass/ › / °, expected_4÷ ª´©iassert. B > 0`  Ç6try.   P Ãstatus = os.g(r 0é€except C¨P§ZErrorX qlÍ x al‡…y reaped; Š ô# (may happen if Š )9  �éed elsewhere).= 0pid¡&	 ›©code = 255 plogger.±Iing(  ™ Š"Unknown› 4÷ %d, will report h ?255‘ 7pidJ:lse6@ ¶= _compute_ (ªC    !ifT˜gdebug(_ !   å   '_p %s exiøHwith¿ ?%s'
!¤ Ø u š œis_closedš – { "Li%®2at £sirE "DÀ
 
M :.8T_sooní@afe( @ÿ¼ û1 ´×I.popA)


à _UnixDefaultE( Ë sPolicy(8OBase" °r"""UNIXhÔ! pB  ž‘a watcherÑ	[aes."""ºð _loop_factory =ñ! _UnixSelectorEventLoop

    def __init__(self):   …super().  ) ÷elf._watcher = NoneQ P  V `with e† vs._lockq  u 0if ‡ ] !is^ õ:  # pragma: no branch‘  ;   
< ò= ThreadedChildW° (È  3   Aif t* Âing.current_ W() is Emain 
¼  J   	… Á.attach_loopö  al 6op)6Aset_+  , 6 “¢"""Set theC  .D  z ð	As a side effect, if a cþ  ‘ð was set before,N •n callingQ.� `) from,  Q will<  è · 5 onO  ² 	† . 6"""Á t~ P & 3if KÔ ais not*E and]    ÌÞy D ×Ÿ  QAget_í "­ N C"""GÇÁ 3for§—processesØ!Ifß 0yetº?, aÙp object°€automati×šy createdt Ó   r	Eý 	Ù¼ D jreturnº¯  Í,‘
à		3dassertM  ý  Žó  or isinstance(N ¨, AbstractÉ Y
íX w.close(I 	 $ =Ÿ =


Š/ =£uDefault´dPolicy0  
$í P proaú2 s o�Windows.Nôimport _overlapped
 dwinapi Terrno Emath Tsvcrt Vsocke Etruc Dtime( ‘weakref

_#. u 	s ƒbase_sub" lfuture4 œexception t s/ Ltask2 wNT_util 4logÑ ñlogger


__all__ = (a'S', 'Pµû  DIocp "',> À', 'WindowsSÿelectorEventLoopPolicy',
    'WindowsProa& ð)


NULL = 0
INFINITE #xf þ
ERROR_CONNECTION_REFUSED = 1225  SABORT  ó636

# Initial delay in seconds for connect_pipe() before retrying to " 
„ `_PIPE_ª `_DELAY¯ ÿ .001

# Maximumj :7MAXi ñ100


class _OverlappedFuture(f "s. !):‡b"""Sub3 2of  õ which represents an oP Á operation.
E ñCancelling it will immediately c O theE  2"""M ódef __init__(self, ov, *, loop=None¼  7 …super().2 %   )›  $ 0if H ò._source_traceback #   ?del( E[-1]N K wov = ov³  .Q_infoµ £   5 = ª ) £   ov is not é 
¡ õstate = 'pending' Ú 3ov. õ else 'completed'¹  ä  Œ Ö.insert(1, f'Ö1=<{a D}, {ä æ.address:#x}>'¯ preturn N è_S 
‰æ â X ² ;try‚elf._ov.k (’ úexcept OSError as exc= µcontext = {b    Ç'message': 'Î
÷As failedÇ =  '… Pion': é   'C !':i
  }• Ú´ U Ø ,['+  ']w3 	l î 4e.call_Ç “_handler(c o3  Æ™   ], msg°� & *[ /+ (K Fmsg)j 6setª j,u ep™x
0 ä y  ´ "._p 
› . ˜ D cresultq  n  ( h <²‘BaseWaitHv‹¶+b wait Æ.b' ,4 úwÀp)
        i÷f self._source_traceback:
  ?del( E[-1]+ ð# Keep a reference to the Overlapped object k- àit alive until- O õwait is unregistered ¹ {ov = ov ’handle = 	   W _ 7 =  
) õ# Should we call Uƒ °WaitEx() if¯ @ § completesB  or¼ ¥cancelled? º Ó r = True~  def _poll(' )‰á# non-blockingw ö: use a timeout of 0 millisecon,ðreturn (_winapi.Ä ¡ForSingleO’o .u, 0) ==² @ ×AIT_OBJECT_0)¹ ‘repr_infoO ¾   Æ = super()._) )f  $ .&Rnd(f'¡ ={˜ W:#x}'1 ¿,  o†not None8 ¼ @stat 'signaled'¾Z l€) else 'Eing'”  > ˜ J ‚   9 =‡ I fl 3 æ F ë Â B o_; !cbxW, fut}Q# The2: waOp: it's 71saf±qdestroyÝ¹#Ã G‰ zŸ œ — "ifx ‚
»ù m - s = Fals= ®	=· J  ! =:! :try‹ 4_ovÇ.(G úexcept OSError as excS  if Q.wine$ 8!= f úERROR_IO_PENDING=  î µcontext = {¹    ð'message': 'Failed{8æ ¾ +/',G Ì Pion':² & Pfuturl  $ }\ iÂ�Î î ,['/  ']]I t  œ p._loop.Û_Û �#r(g Ê€ �  ,# ¥± means that^m¢is pending& A � % Ê M\IDa, msg=  H (Ä ¼ ð  super().cancelõ(msg=msg)

    def set_exception(self,  !):(  ,   ö._unregister_wait()  zuper().P J 
r cresulto  l $= ( ð)


class _WaitCancelFuture(_Base bHandle u b"""Sub: 2of  ð which represents a õ ¡ for the c_  la:Q of az d ñ using an event.& 6"""ƒ__init__2ov,+ ,p !_h± ã, *, loop=None¹ šzF @ =   ÿ= ðelf._done_callback = b Ÿ è � w ñraise RuntimeError("ü vµ must not b03ed"� €½a ",  i sà  Z î Â   iÈÉ !is{  Î É 0 Í	ö ~ ˜ ¾ ž 0 
 !¤ 8äjä
 m#  , )] Új�proactortK  p= 
 } $._d 4 =   m" { = True) Xð = _overlapped.CreateEr(,9 �, False,â’ G M_futø3_cb7fut«äK  €Ò_winapi.CloseÂP !._9 ™  ™    N ¼  $ A# If¯ âD was¸6ed, �may never©psignall! %solö# it's required to ¢À it. Otherwi`SIocpPF .cç w() willO ‘ 1forw  U#z / • Bcome9Ó E Ý p ð  already receiv« $heRÄ @safeÀ  óL çñ() because we kept a referenc<  Opw objectM >�is used a>PuniquN yÌ ¿àb&ov
- u *È à_wait_cb(fut)
ñ
    def _unregister_wait(self):   $ pif not  $._* &ed!  % ereturn4 - • = False
"  j “_handle =]  ( J  u = None! :try‹ Õ_overlapped.UÛ wWaitEx(I ,v eevent)P úexcept OSError as excb  if Q.wine$ 8!= u úERROR_IO_PENDING=  .µcontext = {x    ö'message': 'Failed to ¨P the Ë  B/',G Ì Pion':² & Pfuturl  l$ }\ #if;þsource_tracebackê  Ò î ,['/ %']û t  œ Å._loop.call_Û E#r(g Ê |   œ  ,# ¥1 isç1an Õ,d7was|&edÅ• A0_fuÐ ‘proactor.Qq_cancelX!._. f –  _ 	` ób)


class PipeServer(objectÊA"""C! ñrepresenting a pipe s1 .Ù @Thisðmuch like a bound, l&n9 qsocket.§1""" Mq_init__í “, address„  à Â  $ =" A   �free_inst:ös = weakref.WeakSet(æ # r aialize´Ò ðattribute before 5 ¹ _ì _& ;	M `becausJ ðis function can raise  "  1ands `destruòh sÎ # åclose() method  ‰ Ô  acŠª ¤( B 5 ß  RTrue)Ü£ñ get_unconnecteda °§Ô# Create new ‰ ð Nñ previous one.  5jensureþ ‘at (until
ž  ^ d)  re õ always at least&#b §í  f—Yz "erãøif a client attempF 3to ó � it willððfail with FileNotFëüÞ •4tmp.	m   Û MXóª:7tmp�7   Éd, firs½ „ 1# RdP a wrÞr	¢ ‰ ¶ §kð():
            Óreturn None
  õflags = _winapi.PIPE_ACCESS_DUPLEX | õFILE_FLAG_OVERLAPPEDJ •if first:  c ` |a D aFIRST_q …INSTANCE; h“ õCreateNamedPipe(%  ` ñ self._address, o ," 	Ú ÇTYPE_MESSAGEÙ … wREADMOD  H OWAITg ¤UNLIMITED_Ú S. ÿwindows_utils.BUFSIZE,  ‡ 0NMP… _ …FOREVER,ªUNULL)8 kpipe =^  L†Handle(h+ Pðfree_instances.add(D ' K  
g °def closed(C )+  ª1 isˆ)> & = 0if O �._accept_q p_futureC 1notG n 2  .cÏ &l(Ç . 	! =[ Þ  ( 0# Cà U all À which have � õbeen connected to by a client.L × ¹Ì @for õ 3 in

œ
ú  ¨  . .‹é   Û  7 g� ü ! 
~ s.clear(Æ’__del__ =
²


class _WîðSelectorEventLoopî  _e ms.Base& 3"""H ¡ version oB  B • loop."""| JProat p t & t 
B t ² using IOCP  2 €__init__ë 4f, ; =…e  + %if    
Ú9 t = Iocp± ã…super().r 3 ž Ž ±run_forever‘ ‚ :tryr cassertu ‡_reading€ ¨ Õ È  ( ¡.call_soond  ._•_ B �¹ � " kfinallœ @V ˜  ‹ œ 
Ò  ¡ Oov =Ô I._ovÐ  3  d .À j P 3 #c ï / ¢ was just ˆðled so if it hasn't @� ð # finished yet,/ nÃð will be (it's possible that% ðhas
            ð2    # already finished and its callback is waiting in the queue,
A  ñ# where it could still happen if<  event loopY Èrestarted).
K   À# UnregisterT ðotherwise IocpProactor.close wj  § 0 fo. N  }forever Pif ov� �not None:#  � tself._pw %_u� M(ov)3 /   _aÁing_future =e 
2 ðasync def create_pipe_connection(A Á, protocol_fô ¶y, address)¬ @f = . ¤ H U (2 x  Ñ  k B = a6 l - =w (ç Utransr ±make_duplexm _ Pport(f Á 5 Š  
€extra={'À $':ù }‹ qreturn s j `hP_serv‹ – \ 7 ö er = PipeServerP: Ç Ùq_accept
0(f=S¨ í      6tryÑ Nif f   G ‡f.resultŸ   ½ ñ	._free_instances.discard¡).2  3if = e+d(Ç (   p# A cliÝwPed beuøI R was M Ó K Adrop6 R (3   ô )¥Eexit| 8   '  - :ü s F  }­ 
º/, óB  ç † “…._get_un€‚*ª 1if 9 !is‹Šh ð Y 
r  exþ  OSError as exct •  € E þ .fileno() != -11  Î t ª_f Ýion_handler({. 2   À'message': 'Ò Á � failed'¥'f  ':Æ *  Ã !':h& Â ”   8 ¹!el“ ‰_debugñlogger.warning("A�‹ À failed on p¯ipe %r",
  ùpipe, exc_info=True)8 `except" ùeptions.CancelledError:.  q 0if V      {.close(h >lse3  server._ac† _> ½_future = f{ ø	f.add_done_callback(loop@ %)
7 Pself.) __soon*   ²   ‚return [� ]B ðasync def _make_subprocess_transport(c ÿ, protocol, args, shell  ~ €  stdin, 1out Ïerr, bufsizeI ðextra=None, **kw� )w�waiter = · s.createp¯Þ Å = _WindowsSú Tù < ÿ ý 6 M â =  ù F I >N6tryJ # af   %er& P÷(SystemExit, KeyboardInterrupt“ I \raiseB QBaseE�:iony ¡g” ! _œ Ùl m ú1 ô


class IocpProact4""" ° implementa1ò  using IOCP."""<6s_init__$ó concurrency=0xf 
”_Ï0 = Ã¥  Ëresults = [] @iocp°Áoverlapped.CÝ@IoCo®  © P°9  _0 ÷INVALID_HANDLE_VALUE, NULL, 0, ¾ Ø˜ @cach¯%{}]  ÷registered = weakref.WeakSet–- )un/ ã 0stoØ _£ pR € {acheck_ˆd€h"ifÿ_6!isl
a‘� Runtime(('B is ] 'ov S_reprñq 0nfo¶'o±#=%s' % lenŸ !._F)¥'÷1  &s)Ù  .!End('Â    €'<%s %s>¡ ž _ð__.__name__, " ".join(T )1setÆ;  , Ñî  ! = 1TselecS z1outÌð ):
        if n÷ot self._results:
   Õpoll(timeout)  Ztmp ==  8 S U = [] ±return tmp
 Cdef } (7 †, value)‰ 5futi öloop.create_future(’ tfut.setN H e  Ó y 6futy Crecvv ÷conn, nbytes, flags=0†  œ  &ðgister_with_iocp(9 „ õov = _overlapped.O V(NULL* 6tryä  ¡ Ñif isinstanceW ’, socket. Ž  0   pov.WSARÇ  ˆ ›.fileno()Ê v  5 Jelse{   ¢ov.ReadFil} L E úexcept BrokenPipeErrorS o7 ]R(b'')} q  úqfinish_ˆëtrans, key, oví . B d bov.getn " ª !OS¢ z as exc©  '  if P.wineÊ X in (ÅõERROR_NETNAME_DELETED,[ C  G ûOPERATION_ABORTEDë J ñraise ConnectionResetÈ ¦(*exc.args”6 Ý  P =¡ØP(ov, J', ›µ ± ªY_into7?buf4¡IÈ  î ìË 
\X5M F Œ60 Ä ƒ™(4ÿ—Ifrom3jhÀ ov.WSARecvFórom(conn.fileno(), nbytes, flags)
  õexcept BrokenPipeError:   ' õreturn self._result((b'', None))
. údef finish_recv(trans, key, ov)W :try l cov.getl ®  " ² !OSª ~ as excI  if P.wineÒ õ in (_overlapped.ERROR_NETNAME_DELETED,Ê  j  G ûOPERATION_ABORTEDë J ñraise ConnectionResetÈ ˆ(*exc.arœ6 Nelseá   P ©°gister(ov, ,›µ ±psendto(ß) 3buf*‘=0, addr=ë†  .  d ¡_with_iocpw±Xov = 0O‚S(NULL‡  Ì Áov.WSASendToF ½� Ž 7  Â s É sÿ… ›µ ±  q<f6 a  Ñif isinstancef’, socket. }  0 •- “î© @ rriteFilo 
B  j  ÈÿŸ ac>Êlo7nerCÀ, q ¢# =eBget_\ _—(1 v.familytbÀrlapped.Overãlapped(NULL)
  õov.AcceptEx(listener.fileno(), conn %)
7 Ádef finish_a? õ(trans, key, ov):+  i Öov.getresult(}   ù*# Use SO_UPDATE_ACCEPT_CONTEXT so getsockname() etc work.a ý	buf = struct.pack('@P', Ó 
} ß s` @opt(h éet.SOL_SOCKET,f  °  R_overW.Â _, bufv vtimeoutx4get )3 areturn�•rgetpeer™`async Ÿ˜Â_coro(future: ›ò	# Coroutine closing the ?  1 if H Ù is cancelled!:tryù .bawait ; 	.  exy  dions.CV ^ErrorK ° ¦ eF h Vraise
q  €elf._regßFr(ov,Åt 6# =D È Òtasks.ensure_s (= �, loop=s|   \ Ì- °  ° Ü @ect(3 ª—, address³!ifƒ.type == .®j_DGRAM5ó# WSAConnect will complete immediately for UDPN sv…we don'tê  c¤# need to Où any IOCP operation2 #‹ (í Xè 	; 5fut¾ Be.creatfQ š ƒfut.set_dJNone! vs 5  k¡_with_iocpŸ ? S# Thesðbe locally bound before we   vFEx()¬! PBindLS € .Vamily– 71 OS,Z as eü�if e.wineLú != errno.WSAEINVAL.  B 
  ú# Probably alreadyõ ‘; check u8	ªõ  M ¸	# 0[1]Ä0Š Xov = *OxÏx7ÌM  wÆ ,  ~Ç5oCONNECÈ ‡  È w‘1ÀDATE_CONNECTç_CONTEXT, 0)
  Åreturn conn
  ñself._register(ov,( �, finish_5 Bect)9 Ðdef sendfile(; `, sock.  le, offsetB Uunt):l  * e °_with_iocp(= ¬ õov = _overlapped.O W(NULL* i c_low =v   & 0xffff_ { “ ’_high = (  >> 32)3 ±v.TransmitFè @ock.ò Uno(),Z a ðmsvcrt.get_osfhandle(7 < = ˜  Ñ F³ n �count, 0í”   ¹§tÌ —, key, ov– ¶ 6try§     ovÍ vresult(| " þexcept OSError as excI  if Q.wine( Hin (àÿERROR_NETNAME_DELETEDô  z  G ûOPERATION_ABORTEDë : ñraise ConnectionResetÈ ª(*exc.argsî  : Nelseá   P ‚<
òW ì )WžX acTD_pip[  Å 
T F( ‚ FÜ edE#v.`NamedP†  X ½ ò !if$Zected#X E D �) failed õ ñ@PIPE­õNECTED which meansÅ  g °# that the Š 6 isw p. There ðno need to wait for4 K `compleð0 of  L Iion., Âþ € « š g¶j
Nr  e e 
õI ( I€ ¡ `async £ àSwaddressV°delay = CON�_�@INIT�%AY›while Truð # Unfortunately[˜0way—fdo an Ø{5 to_  W1# aêá.  Call Create„ñ) in a loop until it doesn'tb`N nJBUSYçú¶†Ï@	j  ¼ Ybreak $$!Ä 
oà        raise
'
  ù)# ConnectPipe() failed with ERROR_PIPE_BUSY: retry laterE Âdelay = min( Â* 2, CONNECTB ©MAX_DELAY); òawait tasks.sleepA %)
& ðreturn windows_utils.® �Handle(h 1 @def R R_for_ r(self,  õ, timeout=None):f @"""WŠ Sfor a- .… R… òa Future object. The result of the f! ’is True i  ” l ùcompleted, or Fals( ” did not ( D (on¸ %).G 5""" r   ë  ._m û ,s 22 ccancel/÷event, done_callback/ofut = o ;  a,òi# add_U `() canï ñ be used becauseN Ë • may only÷ ò# in IocpProactor.close(), whilD � � loop isYvrunningKJfut.— * =ü s j2fut r@sb, _is_fKEacheck_¾ #d(› § @² ½  T´   õms = _winapi.INFINITE­ Jelse0  # Registerï¡ForSingleOÐ€() has aÓpolution×å1 millisecond,]   ñ
# round away from zero to†´ *at least*À F s| G Æ £math.ceil(¤g * 1e3C# We
àreate ov so weC =Á ov.address É @key Ó šVcachex  ov:Åoverlapped.O V(NULL¶ …M3 L©WithQueue("}çWiocp,¦ F, msi 'if#
¸fz  ³C¦‡6(ovÙ¦ ,î=s  ùc Z PZ  U 
 Á  w ‚ ðif f._source_trace\
î ?del% B[-1]v p  zmfinish€ trans, keymm 8 P# Notsat this“² means thatWbshoulds9useÙ#= *åòs types where a successful\  \+noE 1effJA So ªs0pro; @es aK ûll right, but locksG ³or semaphor5 ð
not.  Also note if the ha—ndle is
  ò# signalled and then quickly reset, Pwe ma KturnC ùFalse even though we have not timed out.7  reJ µ f._poll()
 ð(self._cache[ov.address] = (f, ov, 0, finish_wait_for_haß )E _ W ð	def _register_with_iocp(k u, obj):: €# To get½ Óifications oft  Í @ps oí  is= Àects sent to.K `compleB ô port, were must �  2  ¿ " ifY  ƒ @ in § .À &ed­  Ë  2(Ô ˆ  & õ_overlapped.CreateIoCž @Port4 £.fileno(),u  'q0\ O ö# XXX We could also use SetFileZ 5NotFlModes(I €to avoidC@dingö 3 sTF Œ,opÉÿ
that succeed immediately. ùvý§, callbackVÈcheck_closed¤2# RÀða future which will be set gÝ`result¶ 5the•a# oper^  ww3it é ƒes.  The\ p's valu½— actuallyG 3the  õUed byÓ &()Vef = _OFº (RRloop=ó   £ if£Àsource_trace(
�?del% E[-1]§  if×p ov.penæ
C #ï 5has d, so no nÚ°to postpone]a •awork. ˜!an~ ak( ð is short cut if¡N ‘B ö NumberOfBytes, É2Keyg's h€ ¦PostQueued9 hStatusˆ j :try  ç=½bNone,  &ov— - þexcept OSError as eR bf.set_+ [ion(eD /ls5 ·(” 
6 0# Eífif GetPRè@() w¾U ñ0to ­O for¸ n&) 0ion/GeY ›é h  ÷pðto keep a referencehŸ bÀ# OVERLAPPED�Ðect, otherwisWàe memory is frŸ EpWindows1óread uninitializedA ¥u R©À  E°later.  Not‹ %atl #ßðonly store obj to óprevent it from being garbage
  õ# collected too early. õ!self._cache[ov.address] = (f, ov, obj, callback)9 ‘return f
 ðdef _unregister(W  ? !):  Œ E"""U! à an overlappedd Bect.L  - ò*Call this method when its future has been cancelled. The 5canx ðalready be signa, ` (pend/ó in the proactor@ õqueue). It is alsoO qsafe if6 m ˆis never_ pbecauseœ6was¥ )z6"""U †Æheck_closed(j L.]0ed.6bnd(ov)3óget_accept_socket†gfamilyŠBs = " . (# � Ö.settimeout(0‹ õsv Cpolli 1 W=Noneo  -K  M   ìm� …INFINITEƒ 'el8 :< 04 óraise ValueError("negative † "¶ Jelse? `# GetQåñdCompletionStatus()\€a resolu õ of 1 millisecond,¦  À Â# round awayŠôzero to wait *at least*›  F s G £math.ceil(Ç f * 1e3Ì  * ”if ms >= 5
Ý  #  P  Cbig": - ›while Tru&sF = _«.9¨�iocp, ms³ N >is  † YbreakY0l "   óerr, transferred, key, ¸ Ùµ 	H >try"Þ ? Š S.pop(Y 
Î  exfA Key}] 2if Ploop.™gdebug( Í  ,  i_` Ùion_handler({Ñ 8   ß'message': ('�") ¼ ed{'O  S  b'unexp;ë*')ú)   'à‡ herr=%s§  tkey=%#x¬  ˆ ?% (ö)— }ä £   #0 ˆpeither «@, orªQis us'-f a pipL A   "# ˜Ð which shoulda¼ ûpavoid aúkè A !if‡ ©not in (0,cóINVALID_HANDLE_VALUE:À            ð    _winapi.CloseHandle(key)
  ™continue
 ùif obj in self._stopped_serving:-  O šf.cancel(b ñ# Don't call the	 ðback if _register() already  ) ™result ork #8  H `overla” ¢ has been ‚ 9led3 þelif not f.done()½ >try  Ö uvalue =¶ ú(transferred, key, ovò  7 ÿexcept OSError as e` bf.set_/ ^ion(eL  P „ s.ö Nnd(f, ?elsi 
B (Ö > j 	R´# Remove un¾¥ed futures& ffor ov?- 

Û ÷
cache.pop(ov.address, Non* J ‚.clear()»Adef ¨¥(2 ,Èó# ° is a sockebq pipe h%ð .  It will be c>Ed inÚ ò# BaseProactorEventLoop"z r) whichH ‡make anyD õpending operations fail quickly.+  Ã \ ~ "G(objù © ñ ì #if¾@iocpô  Q
#yB 
:breturn^ 1# Cäp remainÁ Ì ¿  Ï@(fut0“,T)'Alist¿ "._witems()Î  ‚  ifkk?ledÍ`# Noth� ¦to do with @ 	« W   6pasÀ  8`isinstö ¾ R_WaitFô¡  9 -# & Q must… U O l§ : „  Ñ¯3fut‡ ] f	•*xc '   91loo9 ?= +   Guext = {½  Â'message': 'Hl«a˜Oed',E Ì Ÿion': exc. ž ':d + }s vÐ_source_traceÄ=î ,['7 @'] =‹ .Q ‚  Ž.J2_¶àr(context)

    ñ:# Wait until all cancelled overlapped complete: don't exit with running
 N 8  #7 ÷)to prevent a crash. Display progress every second if theN Ôloop is stilln .! õmsg_update = 1.0 �start_tim   Å.monotonic()& ·next_msg = 1 &+ W + õwhile self._cache:  û 5if M <<= r 
-  1 ðlogger.debug('%rå rMó after closing for %.1f$9s',z  M 	  ¤ ,‚ ' -ã : ½ ¼  	| à# handle a fewËqnts, or 9out.  ™ v._poll(a%)
$   Æresults = [] á_winapi.CloseHu (0 FiocpÐ  r = NoneC ±def __del__7 )‘2  lõe()


class _WindowsSubprocessTransport(base_s _.Base(  '):{ ^z ñ, args, shell, stdin 1out ðerr, bufsize, **kw1 ± _— B = w¨ Õ_utils.Popen(Q Ý = n =t =z   �    ˆ 	J ” = œ é  n  h§callback(fµ   �returncod”wÆ .Ã +  @ess_o6ed(@ 5f¼– +.R ò actor.wait_for_£A(int�# #c. )x µf.add_done_Ã 	  @SeleZ EÑL˜=( JI! qPolicy(sDuDefault_ " D_Þ !_fÛ My = � q 1Pro- O q &P ?


² 3 = õ 4 Ó ´
"""Various* ð specific bits and pieces."""

imz€ sys

if ð.platform != 'win32':Àpragma: no cÂÃqraise IF bError(3 u only')a fp ”itertools dmsvcrt o  „tempfile 0war(ñs


__all__ = 'pipe', '¸	 1IPE #ipæð'


# Constants/globalH ðBUFSIZE = 8192
PIP ‹ . p
STDOUT%ð ubprocess.STDOUñT
_mmap_counter = itertools. ð6()


# Replacement for os.pipe() using handles instead of fds


def p* ð*, duplex=False, overlapped=(True,  ÷), bufsize=BUFSIZE):
    """Likez ‡but withJ Ë support andš 0not“ A."""P ðaddress = tempfile.mk (  s Ðprefix=r'\\.\ï €\python- R-{:d} †'.format:  > ùos.getpid(), next(kA)))
j #ifè ; ñpenmode = _winapi.PIPE_ACCESS_DUPLEX=  . 2accÉ , åGENERIC_READ |C  UWRITE>  obm1, i $ =ˆ* Oelse  qINBOUND9 ¡ 
Š 0„ L o|ñFILE_FLAG_FIRST_(…INSTANCEal?[0]È  Q ¯OVERLAPPEDH 1H ðflags_and_attribV�¡ P  
SC 0x áh1 = h2 = None
6tryÆ   o ÀCreateNamedPw/  o   ô$, J,8YWAIT,2 :1, !2 0NMP0 _ wFOREVER 3ULLá z ¿ 
¤ JFile2Ÿ Ò:, 0P  ÚOPEN_EXISTING² I6 N” 'ov`vConnect9hû £œuov.GetO aResultÇ)% preturn I !h2 fexceptº�if h1 is � Ý  50QloseHb6(h1a  ? 2? 2? QraiseÞ WrˆrÚa¯Ñ�


class L‚ £ 9"""5 n… A ` which¤ €vaguely jÒ-object like.å°The IOCP evdøloop can use these[rsocket F !s.\Øódef __init__(self,‹ H Y  "._´ \[ˆ ? Crepr? 7 9if : ¹Z "f' (={9 A!r}'´  Œ 
  3 P = 'cùd, R3f'<P _žâ__.__name__} {? 2}>'Ñ ‘@propertyr ðdef handle(self)3:
  ñreturn self._handle
 °def fileno( )3 )if/ † is None!  [ ñ!raise ValueError("I/O operation on closed pipe")t 9 ‘ 	3 � `, *, CB Hµ —=_winapi. ´ ?not¸  ? h ¡  ¥   ! =G 6q__del__? €, _warn= Pings.	 ˜ !G Q(f"un0d {„ ò!r}", ResourceWarning,  =" ¸  A (()± Senter³ ž 	. 3xit- §, t, v, tb7  x .f ó#
# Replacement for subprocess.Popen using overlapp �¡s


class , (= y ?"""g +.ã  The stdin, 1out qerr areêò or instances of Pipe†.Ç1"""  CG__in.AargsQ 0in=5 6out 3err c**kwdsß  vpassert ¹  ö
.get('universal_newlines'ô2 . ñbufsize', 0) == 0©  ] ô c_rfd =ù $_w 3err  ´ 3 &wh2 r  1  	0  9 Z y JPIPE2� h1in_X  (ñ=(False, True), duplex= — Î pmsvcrt.iB_osfV(o ¶os.O_RDONLY:;elsÒ1 %inq Ø ?outÙ Rout_rÚ   Û  Æ !, á )‰ Î 7 | Ï # hÚš Æ ( K estdout. È  ë?== ¡Ø¢  È  7 } È # È 	œ mSTDOUT?9 \ Ù  ´Ý 	2 5err. ;try_ uuper().ÐÊ Ï� ,T  Ê 0stdò  ± #, ø8 jexcept�  FSh in Èw]h Û 'rh>À        if hÿ  is not None:
   ù_winapi.CloseHandle(h)+ Uraise ;elsK ¿if stdin_whp Qself.+ d = Pipp  +_ww W _out_rX =outY @ 
Ñ Z ?errZ =errZ @ Z zfinallygk ªin == PIPE  �@os.c|(6rfdS    B Û C  ð wD Å D  Ú D öf'''This module implements specialized container datatypes providing
alternatives to Python's general purpose built-inP ñs, dict,
list, set, and tuple.

* named ò   factory function for creating5 ò subclasses withA ð  fields
* dequev   v V-like’ 5 Áfast appends‘ ðpops on either end
* ChainMapK È L   
› ða single view of multiple mapping› qCounterN O Ì M   ðing hashable object; ËOrderedDict ; ðthat remembers the o. ` entri&€ere addeÓ pdefault•I ~calls aŠÐto supply misí ` value� BUserš P   wrW�r around¬ dionaryÎ ì @easin Ð Ñ`ing
* M AList&M  ÏG  G 0StrO” s ^�  K ñ
'''

__all__ = [G'#',  ½$er °  Ù  &  é  ²  ¬ 4que ;ñ',
]

import _colle@Ts_abc ¡heapq as _
  1sys ðsys

from itertools/ R c% 
 & arepeat'  ( qstarmap)  * tkeywordv $is  ´  , „operator- eÚ /eq pitemget~M  / treprlibM  recursive_ © 
 6 „_weakref7 Qproxy. 
 C

trLW˜3 ®‘
except IÀð Error:
    passð'
else:
    _collections_abc.MutableSequence.register(d b)

try; Ifrom@ ñ import defaultdict
except I RError= òpass


def __getattr__(name)" ÷%# For backwards compatibility, continue to make the Í Q ABCsã ð# through Python 3.6 availé  @ smodule.C ÍNote, no newg æ were added ing 7= 0if ×   nr__all__ò  �cobj = (0 ,J )W  . qrwarningï    .	 £("Using or¡   î  " Æ'9µ' instead "h  T  >"of7 ö
.abc' is deprecated since/3,S !an;ÿ3.10 it will stop working",� Do BionWæ, stacklevel=2- globals()[�u] = objV ereturn ñ raise Attributeº2(f'@ {__D �__!r} has Â,   { Ÿ!r}')


# < Q � OrderedDb` <§#

class _e �KeysView‘. 1):
KÑó reversed__(selfÒ BRyield>% # ¯._mapping)€ OItem�  ‚ pfor key�‚ Ž² `(key, Í ª _[key]¯ _Value°  ± K« Y³Link(objectšð
__slots__ = 'prev', 'next 0key Ä__weakref__'K #(ïO '™ðionary that remembers\ ern  oÄ'5°# An inheri7 J P maps¨sávQŒ<The. ‚providesMÒitem__, __len	  /@ains  l8getO PremaiDÂ methods are£ U-awar‘Big-O run- `times R9all;  `ðsame as regular Ø Bies./"# Í cternal` - 
@linkA  a doubly  ied lisÍ Bcircq ' Àd list startýs and ends with a sentinel element.
    # The ÿ$ never gets deleted (this simplifies the algorithm)O ôis in self.__hardroot‘ ×weakref proxy(  $ N ø prev links are 7  ‡ @(to # õent circular references™ §IndividualM Ñkept alive byÒ  ¦ ? — 6map– Jose * ö	s disappear when a key iAñfrom an OrderedDict.
…Ðdef __init__(.ñ, other=(), /, **kwds):-  ¶Ð'''InitializeT oT Ò dictionary. Ú€ignatureŠ  ²usame asK 1reg2: ðies.  Keyword argu. b  E ’preserved� P 6try¨    Ð 0.__Ö% 0excyïAttributeError7  e ; ¥ = _Link()E ] 4 = ) RIw
9  + .77 S.next b …map = {} × qupdate(¯©ÖusetitemÙµkey, value,L  Ê   ˆ_5 = $._ 2__,-!=_â  , =(od4 õ(i, y) <==> od[i]=y'z ð# Setting a new « ƒ creates  z1 ataend of   ved listÉ #v g`inheri8 Ä “ >0d )  v Akey/V pairX!ifD4notˆ$¡map[key] =Ú! =* ñ$ =Œ   {4lasÿ
 1ink ,a ,  ä = > ,,² 
= 1ast2 Ÿ 	  ˆ Z " =Û(X« =ÿÑ` A)h0del½
h?  M -__3 (00del4(y]2D3an exis? | T usesb 1uto find0a whichW�# removed� [   
@  ±predecessord3suc Vnodes4ó 2R V  Õzpop(key# _ / ¡±   _.  Ü
  <  ó/ 
#  A X #  4 	#  JNone  < 1 =   @Àter__(self):#
  ð'od.__iter__() <==>  U(od)'& õ# Traverse the linked list in order.- àroot = self.__  pcurr =  U.next awhile  ais not$ :   ® Qyield$ I.key 9 = X  �def __re¹ @d__(“ )U ü     4 $Aprev³  è 8X Y  _clear ð) -> None.  Remove all¶ms from od. Åç  .| ì Ž  ç  �s.__map.€  Cdict  & !)
  Ã qpopitemÅ ¸, last=TrueÕ$''½ ònd return a (key, value) pairÒ  Î n rionary.i  ž “Pairs areC  edêBLIFOã1 if Ù is true or F Vfalse&'';!ifã Ü Ž v öraise KeyError('›  h qempty'). iž 
^  · ~ žI  M   _ ! =àÀ" »I 	" øP " Oelse‘ · ‰  A   ‘   M  & o   " _ 	" D Î ³ 3key: 	Q4del½…map[key]U A0 = ™C.pop‰7key—tqV ¿ Uv_to_end: ÈMƒñn existing element to‡àend (or beginn! ÷ -)ÒR\ À ýS 2doexm · Nò  B  ¡s  XPsoft_#  Ëµ#   _  	F  : K  ÕF  4Ä    =£ asÍ ) U .  � p   k &asÏ  Ÿ w  P  Œ ü 
\ 8astê  G6fir¥  r ,  k ¥ À = root
      ólink.next = first
   Ð.prev = soft_0 	# DrootA   ñdef __sizeof__(self):  X  ² = _sys.get   rn = len7 @ + 15   À# number of | Às including ˜ Q  `  Â � W ¨.__dict__)X °# instance  jionaryF 0+= N $ofG †map) * 2H  F aternalF á and inherited S @hardÀ  X nX #à � objects? 
;  @ }# proxy@ areturnÑ 
U `updateš_ òcollections_abc.MutableMapping.) @  øAkeysò1"D. ó ) -> a set-like‘  ž !vi·àa view on D's 4 "™  Æ ® ò_OrderedDictKeysViewp „ Oitem…  † 5 ‡ 
Io ˆ _value‰  Š n. ƒ 
Vj „ `__ne__ÐÅ) A£__marker =˜ "()  Þ1popm,�¤, default=4 ô`'''od.0 Qk[,d]ë ðv, remove specifiedH #ßÐthe correspon Q.  If4 òis not found, d is C õed if given, otherwise KeyErrorP  1 baised.ß  d6'''  h  n À¿ ( Presul5  U[key]7   1del5  £  @ 4 $ifJ Ç  T .Rx  ± Ë U(key)E [ “Ô  ³3set ºJNone¶aInsertdqwith a z fH  `0key¬  ƒ0in ¶3QRc   F 1for[ i^ µ? d, else.á �×:elf� Y $ =^ ] >ò@_recursive_repr(m U_ Ü ô q) <==> ; 9od)[ 9 � à/‘'%s()' % ²ò.__class__.__name__,Š  l¹  3 /%r5 	À_, list(selfñ.items()))

    def __reduce__(self):   õ'Return state information for pickling'0 òinst_dict = varsP u.copy()&  < Bk in# ×OrderedDict()|  € P Æ.pop(k, NoneI rž õelf.__class__, (), : 1 or6 < a, iter— 
	¨ #odÀ à -> a shallow , f of odÿ � m n@¤ amethod Âfromkeys(cls  Áable, value=ò ’P''CreŽra new o> uÀionary with Q  Z ñ  Q B andT ‚s set to .‰  n&''Ë  l = cls¹ ey» G V š  B  6 Q[key] 5lue\ pC__equw, other c'''od.# ðy) <==> od==y.  ComparisonÈ !an= b OD is–-sensitivƒ zwhile c: ö regular mappingA %inC .³  â $Pif isiQance(ƒ ', ÏÍ  ;  ª×  0ú  Øall(map(_eq,  õG «  X___ior_ ] c.updat» b  " N M oif not  ¦ ÒNotImplemente % Ô=ú ÒB    ?new¹ 8new¸ r¹ gYº  ] ¹ B
tryV¿p_collecuˆs importd‘
except I RError= ð# Leave the pure Python versÁ‚in placeÿ�pass


# < Q ° namedtuple b :
-_{ ogetter.% ð = lambda index, doc: property(_BO (! )" p=doc)

yñ P(type €, field_ qs, *, r p=False,‡Qaultsïy, modulü2"""Œ"s ù1subM „â ø a dm s·Ð>>> Point = nñamedtuple('Point', ['x', 'y'])
    >>>  €.__doc__  ñ# docstring for the new classF _ q(x, y)'  X 2p =\ ©(11, y=22)Z ò# instantiate with positional args or keywordi W ©[0] + p[1]O   W ñdexable like a plain ž !33  N  ´ D = p>  „# unpackK wregularM F S ë &22]0p.x­ ,.yY  ð# fields also accessi» qby nameV ° d­ š._asdict(Q S ð # convert to a &  P!ryI  ¬ d] !11   N(**dS  W  X NfromZ @ %x=ëZ üp._replace(x=100a %#   B) isiDstr.6 Ñ) but targetsd5d z #00f
 2"""	 p# Valide »pG as.  AtÐ�user's op~à, either gener8 �an errorY �# messageŸãautomatically ³ S h Ü0a v‡ z .I Rif is1ce(0 _ô�s, str):%  ~ " =ü ) $ ',×¢ ').split(�
8 Ølist(map(str,F ). @type à = _sys.intern. ( "))SAif r, ¤ ”seen = se} ¹ ‘or index,÷ � in enumUñ ì  7 qif (not4 Ó.isidentifierØ  $  cor _is&(À Î     "orK `startsjO('_'(  §  Ï –  J R[Ù ]‘1'_{ }ý )    D C.add– Ï A ¥  d [W ÐZ U0if $ A   6str"  h °raise TypeE¥ (' ò Cs an- pmust beaGings0if ^  � tn OValuo û
 » 	 &f'ê@s: {‹ :!r}¤ í� (0canò b#› b	— Ò æ	ùãÖ Û .�¬ ‘ [ %ävF8ÖÊ ð start with an uïnderscore: '
  	Åf'{name!r}')* 0if  • in seen:  J ñraise ValueError(f'Encountered duplicate fieldI /: e   Z P.add(k !)
d 3 á_defaults = {} 5if  ¶is not None™  „= tuple( 	Õ 6len 0 >  s  „ &s)P é 3Typè ”'Got moreŒ   vgs thanî sJ^ � ö
 = dict(reversed(list(zip 1 � ,ü  ‹  Y r ) \ð# Variables usedÞñthe methods and docstrings{ �  Y map(_sys.iñ"n,ù _² nAnum_;  ÂdY @arg_ü Ñ = ', '.join(3 I &  ‡K 6= 1¡B +C å€repr_fmtV H(' +\ ç‘}=%r' for— u  2 )K ED_newø  ._ !__™ _Æ1, _& ó, _len, _map, _zipç,‹,g!,  4zip�0Cre%@all †Rnamed1 ’�to be add o' Qclass½ RspaceM  <   1¡  0'Ÿ  · "':Z   Uù'__builtins__': {}  V   f' dí `_{type "}'. ¡ôcode = f'lambda _cls, {¦#}:- ‚ ( ( )vd€ = eval(U ,í ]$  �Pame__í » a.__doc  #f'm ÐÆinstance of Í � G sh °m z›@±cš0def*1ke("@iter“{PresulÄq;new+ H  â!if{(2 V) != {+ + µÌÆf'Expected {4 ð} arguments, got {¾_ !rreturn  ê ç_make.__func__~ (f'Make a sð object from a seque˜ µ  D'or 7'8Vøreplace(self, /, **kwdÖ° 0 = # .² (·(( I.popÎ,' )w Œ 0if ) Z	 (4uneacÇ0: {÷p )tSÒ 
MR|OÀobject replaÿcing specified '
  ñ'fields with new values')
3 ñdef __repr__(self):  N ð'Return a nicely formatted 1 öesentation string… r9  P ñ.__class__.__name__ +@ p_fmt % % Œ oasdict‹ 0ew " Á which maps ã  ] £s to theirè .• _> Q(_zipe !._> !s,‰ )¯getnewargs ¿ ÿ as a plain tuple.  Used by copy and pickle�  2 Œ } Ñ# Modify func`€metadataÞ BhelpÎPintro$  d ‘debuggingÄñ for method in (  Ø†__new__, pmake.__p 	 wreplace* + ± _7 U‘ p.__qual³À__ = f'{type 5}.{$   B__}'  # Build-upã WöApaceaionaryÙ #v@use Z  ()<b@ = bresultD / N ¡sN 1= {  1©'__doc__':© Ò({arg_list})'é . Qslots0 (() k G  •n   •_defaults(  + Ä=': Î '_Ï    4 Ï    Û    ç  
  	ò # 	 * }N “aindex,¹ ˜¡enumerate(1ð
doc = _sys.intern(f'Alias�ûqumber {[ 1}')l  ŒÖ[Q]O uqgetter(6 S, doc�r=: ? 8 1, (6 2,),8«  .8 R# Foré Ÿ�to work,qp__modulÿÑvariable need²`be set¢‘the frameÃ q# whereA  ƒ d_ò is created.  Bypass this stepU¢vironmentsD P  G žd  H ñnot defined (JythonYÏexample) or 5 P ;  ÙBargur g� ñ r than 0 (IronP\  ),Q Ö ƒuser hasO  ÎÒÒa particular ;.% #if  ¾ FNone±6try  ÿ8  ð	Ã ô(1).f_globals.get('œÇ', '__main__Hð
except (AttributeError, VM ² z  “¯  m
³ k.=ß ôJ' Àt


######### ,Ð
###  Counter P ,? €

def _cW ô_elements(mapping, iterable):
    'Tally ( • from the( !.'( @ s_get =  A.get 1forC 5 in9 `  d . [e ]>  L ( à, 0) + 1

try:2  ð# Load C helper function if availâ š  Ð a_colle" Œs import!‘
except I RErrorÁ ´pass

class«T(dict@¢''Dict sub$  |€ing hash‹  ñms.  Sometimes called a bagª ó or multiset.  E¹� are stor,  s z ð ionary keys and®1ir t sJ 3 �values.
& u>>> c =Õ `'abcde ²abcaba')  #W Ü G‡a stringH ü .most_common(3)À€# three &  & T � ñ[('a', 5), ('b', 4
 qc', 3)]#  ° �sorted(ca q û# list all uniquef e ` '[ †'d', 'e'a „''.join(i .  ú 0())u a  À with repeti€€ 'a ¢bbbbcccddeBÀ Rum(c.‡(Q ¹  ¡# total ofÄ Ô'15nS['a']3   ¶Âof letter 'a„ 5J § Æ  ²ˆ'shazam'{‚# updatesùÞI 1... cÛA+= 1  €# by add”1 to each—"'s` N  !cÛ 0nowò"reEevenß 7H �del c['b'�# removeg"'b� 5  Ö *# � Tzero A 0¤dZ simsalabimU G ã # make anothe¾%erÀ "c. (dv2 	 #S ¼ «bsecondJD LEnineK9Ë �c.clear(Š  %Pempty–„ Ò ã"()U ²Note:  If a1 p is setP¤or reduced  ¸P will¸1ainW (int a until PentryU ¡deleted or P er Ó 2ed:’ ú²�aaabbc')h  MÐ-= 2           ð# reduce the count of 'b' by two
, ð>>> c.most_common() 	 #5 óis still in, but itsW bis zerQ ñ[('a', 3), ('c', 1
 �b', 0)]
u 1''' Ó# References: ð  http://en.wikipedia.org/ œ/Multiset. qwww.gnu) ðsoftware/smalltalk/manual-base/html_node/Bag. M ódemo2s.com/Tutorial/Cpp/0380__set-m‹ Ž/Catalog  ] \ ñcode.activestateb õ recipes/259174/4 òKnuth, TAOCP Vol. II section 4.6.3Qòdef __init__(self, iterable=None, /, **kwds)i áð	'''Create a new, empty C+ó
er object.  And if given,ó�elements«  M ±from an inp~ p.  Or, š Xializ�2 Õother mappingO 4of c 0 toÃ"ir{ "s.ô  u ¾$ =³ ¼  &  #æ %erq K ¯'gallahad'1� 3er Ê tU €{'a': 4,QH: 2}[   U ¨ ˆa=4, b=2K ñ /  S Ækeyword argsJ“ ; …super().R)Ñ  \„.update(bZN Œumissing�8keyzT“é`not iníÒ [.1 ž  # Needed s0at ” [p °item] does N Öraise KeyErroí†return 0²  Q 1, n:µ a''ListŸ  n 1  3ª0and « € / F7 ØP leasg@If nð ±`then lp 4allb ±�('abracad )')Õ3Ã¡5—2
 Tr', 2¡ h`# Emul* 3�sortedByx ã Sjä iÎ s Y }F ®.¶ s(), key=_ pgetter(=Æreverse=TrueÇ F ñ_heapq.nlargest(n,R 	)öz† 
ëI@„tor over€ðs repeating each as many times ¦†'ABCABC'Í  Õ%c.• )! b['A',  B
  C
 ÐC']

        ñ6# Knuth's example for prime factors of 1836:  2**2 * 3**3 * 17**1
    2>>>8 _8 û= Counter({2: 2, 3: 3, 17: 1})9 ™oduct = 1  � O : in_ Á.elements():� ´# loop over» L 1...$ "prh #*=#   õ# and multiply themL é H    
 ÃNote, if an ¦ @'s cõ has been set to zero or is a negativeJ tnumber,F ös() will ignore it.v 5'''8 ñ# Emulate Bag.do from SmalltalkÞ MÞ ’set.begin" EC++.E àreturn _chain.B ò_iterable(_starmap(_repeat, self.items()))— ò# Override dict methods where necessary- b@class# „ 1def– ¤keys(cls,  ¡, v=None):)  À1# TU ô is no equivalent  J‚ er�PcauseØ§ semanticsK ðwould be ambiguousÔcases such asÜ¢ €'aaabbc'� &2)Gâ# Initializing … ýÆvalues isn't2 be¤  !›  (Qlread–‘ default E å  ikups.  J `to oneyô	easily accomplished withä T(set(|‡)).  ForJ mŒqexotic %P, cre~aøð ionary first us J  � �rehension 7cV raise NotI¶ 	…edError(O  'ƒD  ò õ undefined.  Useé å £ instead.'Ë �pupdate(êŒ‰·, /, **kwds”b'''Likü.= ’) but add	 Yi  f`replac qÛ¡Source can•n	I,2tanotherÓ É GanceO  Â&c Ÿz'which'“c² @'wit  O #Á Ûs¥ x C‡ n dn aP 	! n #d)d  n 	Ó
L V['h']@ 
  # four 'h'Òø ,ì1ch,wœ N 4š A 
^±The regularâ,€) operat¾Amake�asense žÕ&thä"# øðe behavior result£0ome ð original untouc§ » be@€mixed-inÛ Ph all? ðthe other counts foró a mismash that
  ÷2# doesn't have a straight-forward interpretation in most countingJ öcontexts.  Instead, we implement\ @addiN `.  Bot“ ‡e inputsO pand out ð are allowed to j �ain zero ( ‚negative— 5s.
H õ	if iterable is not None:!  	 % ¤sinstance(0 �, _collec« ês_abc.Mapping)? C Nself     p_get =  6.ge‚    ’for elem,È  m� .items(z  =  Z [> 3] =@ +o  z ( I, 0)ø  ; ;els    ò# fast path whenU  erH]emptyL  6 Ösuper().updatM
y u _U_« Pents(Ò ,¿B zif kwdsl - u   )Ëdef subtractQ =	q, /, **2 Q Ä'''Like dictU U) butL s s 7õead of replacing them.C,ñs can be reduced belowÃÕýK #dSource� %anT1, aä ñionary, or another µ  íTt>>> c =# †('which'¡! .w@'wit    #Kó ñU from� úü V ¡ A('wa^ )[ V c*erU P['h']?  0# 2‹æ ‘, minus 1  Ø 
  Œ ] 0
 ¼ ?['wg U  M
U g "-1ì ¾ 5'''u  ×ü 8 "œ E ,×& œ Ó   © Ë" -„ð   Z‚  µXî 8   f s 
1o ‡úW� ‰Acopy…Çp'Return{hÞ & .Ær   ™ ¢.__class__F Z "__W ð:
        returnð self.__class__, (dict( ñ	),)

    def __delitem__ �, elem):!  % `'Like = ., õ#) but does not raise KeyError for missing values.'R !ifd 1 in¥ k  o ysuper()l ’ ³ Crepr° ª !if‹  ã 
T  return f'{ Æ.__name__}()Ÿ :try? #þ ð() preserves the orderá _ õed by most_common()ò  Ù 2d =H „ 	( ) ±except TypeI‰ óhandle case where^A areý • Oable| n ¹ 
r{d!r})'}ò&# Multiset-style mathematical operations discussed inÃ #ð   Knuth TAOCP Volume II sec9 À 4.6.3 exercO!19Æ < ðand at http://en.wikipedia.org/ /¡ 9  ò% Outputs guaranteed to only include positive counts.:  á To strip nega&  ‹ Czero/ ò, add-in an empty *erý `c += Ca  ã]  ó Rich comparisonM2orsKw€ subset  )  StestsG   Ðb‹ð ely omitted dueô ðsemantic conflicts withÐB PexistÖainheri< þict equality method.  SŒ D f —s ignore +¼ ðrequire that pâ‰¤q âˆ§
 ³¥q â†’ p=q;M ‚however,- Qwouldêb?  o$p=Z‚a=1, b=0é#r q )< Æ Ù…ionariesFí .õ%3addqw, otherxb'''Addó“s from tw3ersH  5>>> –'abbb') + Bbcc'µ  - Ï ó	{'b': 4, 'c': 2, 'a': 1}Å + &''¿±isinstance(° ,g ¹  ; áNotImplemented{ \sult ¶   t ™,ù Î.L+s(f 1newY# =. +F[B ]o  X  À . 2> 0B    re” : 4 = [ E ™  š � Å‘1¯ � * ~ P¥ B?subB	 ORtract!,_Bkeep¨P ®­~ À  >>> Counteór('abbbc') - Counter('bccd')
   õ{'b': 2, 'a': 1})
# 5''' ô	if not isinstance(other,` %):+  a õreturn NotImplemented" „result == (— °for elem, c¹ û  in self.items(f 2new& =. !- – [B ]o  ‘  À . :> 0®  ! ” : 4 = [ E ™  l š !ifÆ 4Ã C and§ <� 20 -. ‚ T© ¦°def __or__(&,ÿ &ð'''Union is the maximum of value` eiÊ   " Rinputz Bers.h  !5>>>°`F') | ?bcc^_3, 'cf¦ç_i 'š 1" =…1 "ifL) < Belse 	E ¦z'Ã ¢?and£	  I£Hsect«$in«Òcorresponding7š&šð›|YgŠŸ „	S Ç ÏŠ.3pos¨ÒAdds an emptyã ^0eff°vely stripp�negativeSBzero1 s¯%b/;8?neg ý''Subtracts from@.  Sls posiÿ Àunts,
      ó  and flips the sign on negative counts.

  5'''  result = C& Eer() ’for elem,B õ in self.items():)  W #if& :< 0   f [N r] = 0 -. C rreturn ( ª àdef _keep_posiÊ ( x ñ'''Internal method to strip¹ ¶ents with aror zero€ 
4noni 1 = ¬  r if notL U > 0]Ñ :  6Z 
1delSm <  î q_iadd__|, otherñplace add from an& Ÿ @er, N•ing only í  W>>> cf'abbb'  +4L'bcc  
Yò
{'b': 4, 'c': 2, 'a': 1})ä  '�A~Î  ,F2 +=ñ � O.Q| k__isub`ssubtrac÷ X1but\YÅzfG* -gdh`G-`&/or_runion iÍòmaximum of valueÙ eiþç'erÚš2º|! º3º±_`  À$ = "ifñL >û 
M ( =2 /anli€Hsect´$in´ correspondwå ‰¯&¯"Y 7˜³vRgR wŸ<ŸD$
# À############# à
###  ChainMap D 2  u

classY õ(_collections_abc.MutableMapping):
    ''' A5 ò groups multiple dicts (or other m= ps) toge F ðto create a single, updater q view.
* åThe underlyingP ñ are stored in a list.  That ñ is public and canO ãbe accessed ort 0d u… ñ the *maps* attributeT 0ereP "noÖ J Sstate¥ @LookasearchH ´ !su{ ðively until a key\ afound.Z ôIn contrast, writes!s,Î Adele¨  only operL!on{ QfirstJ ~¦ 2'''Tòdef __init__(self,÷ ãç�Initializ¥€ by settŒ+!tov Ugiven Ê  J UIf no ¸•provided,þa empty>QionarCused»  I  ¿      µ .ª! =î( )Ò@[{}]"  �# always €east one� 	0misÿ7key
ð raise KeyError( = getitem= %fo §· L¤ Z  try   UreturQG[keyØ @   #Ô�'t use 'E- à' with default“ V   eexceptÓ { Epass2 ˆ » &__, 	 N  Ñ# support sub[@es t�wdefine = A3get‚Dkey,³ X=None„ „ 	"if8 n  T else< \ S__len™M ðlen(set().union(*J T!))Ô „# reusesgøhash values if possiblep Niterq ed = {}Q�reversed€ 
’"d.(É�.fromkeysò—­ ¬ Ù 3   Õ ° 8(d)Ã  zCainsÇ ,h=0any
 Ô!m Ñ   BR CboolN I 7 ñ@_recursive_repr()<¶  N 1f'{M !__�ð__.__name__}({", ".join;(H ,>t3)})@< emethody wPcls, 8 ©w, *args× $'C×2Ðwith a singleó dict created from the iterable.'
  °return cls(4 ., Tkeys(, ¡, *args))
4 ñ def copy(self):  K ñ'New ChainMap or subclass with a new9 ò of maps[0] and refs to =1:]›  i 1.__M !__x .A .Š A), *%  31:]«  __ A__ =y À ‘new_childM  , m=None):È  ö# like Django's Context.push()û 'ý ñ ñmap followed by all previousò .F AIf nò is provided, an emptyÒvis used6 &''0@if m=  Í ™ Ñ em = {}k ô4YmGC‘@property<  üqparents:2 m  <(op;	6 |N[1:]¤° ô £ “__setitem.Ç, key, value²O 3’0][key] =$ )\__delJ C :tryiMdel X < ú except KeyError; Uraise ñ(f'Key not found inÂPfirst$ãping: {key!r}'¯ þ 0pop² ¡| s'Removesô anbm pair$9. R�  U   �Ÿ`8 .— 70'NoÅs.ûÂpY*key*û  2its"f ;    in� Ð (›  ¬(&Qclear%Ñ 'C Ð ’, leaving §1:] intacté î.T �U__ior‡Wothern 	< rupdate($ K—U iH³t isinstancS ð, _collections_abc.MapF‘  ¥r åNotImplemented�  J·  [Ém“È 
mÅ rÆ ;À
           ó	 return NotImplemented
  õ m = dict(other) õfor child in reversed(self.maps):*  I ‘m.update(3 F | 7 ÿ__class__(m)


# < Q � UserDict ` :!

½ a ñ(_collections_abc.MutableMapping):
!ñ# Start by filling-out the abstract methods0 Ádef __init__n,žø=None, /, **kwarg�^‘data = {}G  ”!if; € is not B 
µ8 ¸ ·2if f 1   )æ ¶ 3lenµ 1lenÏ .¨ 	6 sgetitem: W, key?  Š  ey„®  > 
” `  X[key]rhasattr~ „÷ , "__missing__"r  ;U 3 .1 N ¬ l ð raise KeyError(È sè  , ú | 
Æ ! =  E 0del3 -Jdel C < Citer9 s ë   Õ ¡÷# Modify __contains__ to work correctly when  sqpresentC i >Í‰ kîÂ ¡# Now, add;2  ¹Qs butå:in ˆ€ ?rep   —  ¸ o6 ", $´ Òif isinstanceB,#eTs " |^ €  2   b  ô ^ #ão/ø JJì & |´Ÿ ø +^ Y ø iø 4‰7 |=Ûb ÚFelseJ  2 - ¶  " ›NcopyÓàinst = self.__óclass__.__new__(self.__ 3)
  ôinst.__dict__.update-  , ÿ!# Create a copy and avoid triggering descriptorse ³["data"] = • h  .\ (v preturn © 
R 1def€ § !):  Î $ifQ æ Æ is UserDict'  + T  J .— } ~ aimportp i  ) ¾    :tryh á  # U = {}(  ƒ 1c =V r  ) u ofinallL  S N c·E ä c5@amethod:  F÷fromkeys(cls, iterable, value=None_d± 'lsš¥for key in< 
ÿ Pd[keyéQ w  û š _d


# < Q ô@List ` :!

Fa ð(_collections_abc.MutCtSequenc?ò8"""A more or less complete user-defined wrapper around list objects."""Ê ¹c__init× ,   - ³ V×U = []€%if2  #@not ì
¼ó# XXX should this accept an arbitrary sé ?]  á„if type(˜ B) == ’ Y 2     [:4= 	Z  el½ s6ancb ,”Y &[: … Jelse	  › ! =–Ú ”Crepr”† î  h)8 lÊ^other= € <äBast(/ 	L e‚ ",  Í ‰ L ‚cM /eqM =M gæ >æ gæ >™ ý  3J/  | ?y•…containsNNitemæ   M Œ n D 3len? 9 ðlen(self.data)

   ó def __getitem__(self, i):
  ÷if isinstance(i, slice!  ( preturn > ƒ.__classM •.data[i])Q Felse_ > / 
/ ž sž  , ® ƒ x : ! = A 0del1 ’ 
ß 2del· ? 8 5add4 Wothers 
 §, UserList( à  1 + @ +(d Atype§/ k #f º� + list(¡ ())rKr ä & +¢¹ /el6k f 
7 ¶i5Ý7 +=)k  ^	"U P  	- ü 3 &"5mul@n©/ .C * nj1__rE Q = __
 ` i (, a ± O*= n§ Ccopy¨ ¥  ó" =zµc.__new- ¼ – 6 ó .__dict__.updat® , °# Create a ƒ õ and avoid triggering descriptorsÈ 	e  ["º&"]¬ }  5[:]9 y @ HcappendF (I.&   < dinsert< ˜.) i# B 4pop? 7=-1{ ¬ ‚  * i Rremov]V V6 & ¸ Qclearx r 5  l   / ¡ !% ß Ecoun 7temo @  Ã., ª QindexV å , *argsH 	3  H - � ð reverse(self):
  ðself.data.reverse()

 �def sort(" ñ, /, *args, **kwds):&  *  ! C 0 
' M cextendO WotherD áif isinstance( §, UserList( 
p S / ‚ )• Felse£ 7 _)


# < Q ½ `String b :w

classc ö(_collections_abc.Sequence):‚ƒ__init__„7seqZ
‚xseq, st£	Dg = seqn?   ¿g F  º7[:]N ¼ x 0tr(» Ø 3str× k `returnÆ ñ g Ý___rep7   8 $inEn "in2n Ofloa8  p complexâ   > Ohash;   8 `getnewô> : I[:],\#eq6 G7ing+,%î/Èª0 ==Õ1inge7( +l„™ @<˜ ' 	— e0G<0( ™ g0H>0' 	— 0H>0( ™ …containsÏ8chaG
ý  û  0 =  ì  E in ƒŠ 3len… |À    return lñen(self.data)

    def __getitem__  ‘, index):"  & qreturn = s__class, L [0 ]S 3add# w, otherO áif isinstance( Ç, UserString* } " +` Š )³ /elf (st‰ _ Z b + strÖ )r® C y Þ Û   ® ¢ 
6 ?5mulÁn“Q z C * nö 1__rE Q = __
 t&mo!Oargsc !% 1 N rO �templateS 5tr(- ! %á½ ð# the following methods are5òined in alphabetical order6 D¡capitalizeWŽ D.: C�casefoldO 8 	M QenterK ¡, width, *XÂ =¨ D 	> @Countb øsub, start=0, end=_sys.maxsizª
·7 ‘sub = subý½·  ì".c‰ ƒ � © Ãremoveprefix°  7, /·
› " ž ! 2 = 	 ¤ S .“ A ¾ 6suf²  ² 	" ² ! S Y ² !C ( ² Rencod
 ÷coding='utf-8', errors='strict'v9  ƒ#= . E if  Åis None else W 4 = Y < l  :  8 æCp !e( 4ing± EƒendswithAôn  L âF  8dr “xpandtabst   Vize=8?À return selfð.__class__(self.data.expandtabs( ñize))

    def find- ð, sub, start=0, end=_sys.maxs5 :4  8 áif isinstance(7 ¶UserString)(  , Psub =[ � C vreturn ¦ ˆ ‚ € § Sormat© ÷/, *args, **kwdss X 9 
0 ÿ  C_map\ JmappÆ S 4 . Q SindexL Qc F qisalphah þ 	( J  ?num;  ( 
; Oscii; ( 	; decimal= * 
? 2igi ð d( 	; ¯identifier} - 	E ?low@ ( 	; numeric} * 	? ŸprintableA , 	C 0spa©?elf=( 	; ?titz ( 	; ?upp3( ; Ajoiní _, seq³ 	* q= Bljus)s, width-G 2C 	= a 
S 5 yTlstriv¯chars=None§ B < Z �maketransu5tr. ¢†partitiocpu ?/ pDreplVÀ, old, new, /wplit=-1W 
3. 3Pold =R 
3
C l C Pnew =� 
C h¦Ô   b Î ` 3r¬?elf4l‰ À(sub, start,ð end)

    def rindex(self, sub, start=0,) ñ =_sys.maxsize):6  : preturn 6 d.data.G A ? h Cjustg Ïwidth, *argsU ‘__class__3 d C 	= a ‘partition3 _, sep] ² 0 pI SstripE Ÿchars=Nonþ © B < )Z Dspli1sepW  , ^  ?=-1° 	= p2 [ r Ç\ > ] \ Slinesßkeepends=Falsf; 5 ¶ kSswithY oprefix„$N 	H ‹ž ¼!, ¤‰|àA ; 	ßqwapcaseÌ O 8 M OtitlJ 5 	G rranslatK tt@ ®½_upperì 5 ¢ QzfillG !, Ü:< 6 à)
from _collecïs_abc import * __all__% ôíCallableGenericAlias
# This directory is a Python package.
# Copyright 2009 Brian Quinlan. All Rights Reserved.
# Licensed to PSF under a Contributor Agreement.

"""Execute computations asynchronously using threads or processes."""

__author__ = 'Brian« 0 (bº ò@sweetapp.com)'
:ô	concurrent.futures._base†õ(FIRST_COMPLETED,R V 7 ŸEXCEPTION7 ?ALLl ïCancelledErrork Timeout4 ÏInvalidState9 bBrokené£ À      Future?,
  �Executor0 Owait, ñas_completed)

__all__ = (� ò'FIRST_COMPLETED'X  ”EXCEPTION >ALL, äCancelledError+ yTimeout dBrokenï * dFuture   í  Í  ¼ProcessPool; kThread ñ)


def __dir__():	treturn  ö+ ('__author__', '__doc__'@ `getattD CnameH global –  ., � 
| 0if B _ == '9  '¢  Krfrom .pó  importl a as pe]  7 U  ( =! þ .pe‘ µ � th� 1  Ž tŽ !  '=   � t� ñ raise AttributeQÐ(f"module {__<°__} has no ”*   { ð}")
# Copyright 2009 Brian Quinlan. All R òs Reserved.
# Licensed to PSF under a Con� Ñor Agreement.]1I = 'd 0 (bs ó@sweetapp.com)'

Ã´collections tlogging d 5ime kypes

Ì …  '$ Ù$  )'
æ " 	 V'
_AS   	 ñ '

# Possible fÝô states (for internal use by th' ðs package).
PENDING_  c'
RUNN  U'
# T@ d was c�\ ðuser...
CANCELLEDT   B õ...and _Waiter.add_F #()V  â S ‡a workerQ »_AND_NOTIFI^ 	  ~BNISH$ "FI ñ'

_FUTURE_STATES = [»ø “ñ  ¾  	o  g B
]

a ¡_TO_DESCRIÜˆ_MAP = {s ²: "pending"F ~ v: "runn ‰ 5: "34  	– )  £ à: "finished"
}GLogger 6³.
LOGGER = >B.getD �("concurr«•²s")

class UPExcep…Ì‚"""Base $  … 3allÒ¤-related e5 ðs."""
    pass

clñass CancelledError( ô):
    """The Future was c- A."""$ €pass

clK qTimeoutC I ÿoperation exceeded the given deadlineZ ÏInvalidState_ ð	is not allowed in this s? ` æ_Waiter(objectÿ �Provides¨ õevent that wait() and as_completed() block ong ódef __init__(self^  a  .W Ð= threading.Ei !()`' ¡finished_f�qs = []
$  c ¡add_resulte ", ' m F ƒ.append(. 
P  ¦p°S 7AS +pD_AsC{ÁÉ÷ «"""Used by§ž<Ÿ^uper(f  , ¹%).8 «ÑjLock()]­Awithf .M �   s— × 7   ¼ uL.set— ôš -a � >� -a � ˆ_First‹=úreturn_when=FIRST_COMPLETED)žÏ »Ú').* ¿  : õ(sb Áe \ ( Ç - Ê …?Allƒ-‘EXCEPTIONÚ?ALL•ûÌ @num_Hõing_calls, stop_on_/” ‡ 5 .4 = =  ¤3 T . =h 
3  ? ŒÀLock()
     ð0   super().__init__()

    def _decrement_pending_calls(self):
(   Pwith  V.lock    :numB Q -= 1h  $   bif notF / 
S  / W ˜event.setµ ¡add_result§ ‡, future¯ ó * $ ’ _ ÿ # D Ÿexceptionq - t "ifþ …stop_on_* 
þ › ú    Oelse+  Æ ŸcancelledÆ - Æ Ÿ t 	ñ class _AcquireF�ƒs(object¥ò"""A context manager that does an ordered aF B of J  7  di�Ws."""Ìà ¡ sq  ?  .Î ³s = sorted( ‡, key=idú‘__enter__0I 3fort2 inÓF 
ž R._con² .Î ÎA__ex— Ÿ h, *argµ l 'preleasel ëócreate_and_install_waiters(fs, return_whenë (if ö == _AS_COMPLETEDì G    ±sCompletedW\ !()r.elM _FIRSTO _FirstR ½@ountÜ1um(y  ø �f._state‡ñin [CANCELLED_AND_NOTIFIED, FINISHED] ~ å#fs M Ì –EXCEPTION / ,llÎ 	º -, R=TrueE L I?ALLG / { +IFals| s _ ó
raise ValueError("Invalid9¬s: %r" % f»c7$f.œ0.ap#(Ê …¬  1


àò yield_finished_}Ü)  äif_coll‰(@Iterñon the list *fs*, W Ding Z û�s one by !inF rreverse½. fBeforeF a? 2, *– ó* is removed from itsÛ sC 1and• Ò / 0eacœt§ ¼ Ðcollection ofñ
 sets
    *ref_collect*.
 ñ4The aim of this function is to avoid keeping stale references afterH  the future: ðyielded and before ! ñiterator resumes.; 1""" ‘while fs:  ± ¦f = fs[-1] #orh €s_set in� Ö ; ? � ( ¥.remove(f)J Ðwith f._condió = @._wa± s<  A Udel fO Ð# Careful not; 5  až .   Åpopped value> 1ò fs.pop()


def as_completed(fs, timeout=None)¯ `"""An ¨ YAoverkTgiven*a that d Ôs each as it ^ s8Arg~0s: @sequï $FSñ
 (possibly created by difõ t Executors) toå  ”ª  e © ÿ  Ù p àmaximum numberv  se¥‘ …P. If ,ë n rK P Ñis no limit o!  9 Aì gReturnï G0 ´Ný  ass y?Õ (finished orî ¡cancelled)° Kany G �re duplicAÌ €y will be Ÿ %edO Donce» Gaiseº T`Error: ³ PentirH Fsult!Qcould£`be gen‘f  =±± ž¯®!ifN0outñ ô ’• F @end_9 % =( +
  .monotonicé + @fs =¦2(fs^btotal_O  5len ·ƒ_Acquire’  z �U B k   0f fE ;f    ifPstate" ò[CANCELLED_AND_NOTIFIED, FINISHED]³  ? @pend't= fs - ˆ �  ƒber = _5p_and_inVlmèÒ_AS_COMPLETED` M u = listr 6try èq from _ _= S> ,5er,¤  È  F=¯ "))K 7 Ä	“   
1
-      "6 W=ä	š JelseV 6  z-p /  !ift >< 0`  1 rt j(š  $  µ'%d (of %d)†$un‰O' % @  óG9), p s  5�er.event. à(wait_timeout)7

  ùwith waiter.lock:  ) ¤finished =(  �_futures3 P ( _ = []- Úevent.clear()¤ ò# reverse to keep Z ™ing orderT  3ed.5 )() Áyield from _ _1 Ï ( ,ñ ,A   ó
ref_collect=(fs, pending)Ù vfinallylƒ# Removeq Ÿ $un‰  i¶for f in fsE  • ÏÊf._condition  # 2f._ 1s.ru ( Ð)

DoneAndNot
 FÞ3 = Ì õions.namedtuple('/ 9 Ð', 'done not_	 a')
defä òtimeout=None, return_when=ALL_COMPLETED)Ä €"""Wait ü 4the   Ñgiven sequenc*’complete.N7Arg-vfs: The1 4of ñ õ(possibly created by different Executors) to [ Ie upon. ä m ðmaximum number of seªsÙ = R. If ¥then thereL  c Ñis no limit o! P h v LÀ: Indicates \  this funcs should}. op 
ÖBare:G …   VFIRST¥A - RÁe 3any¡¬zes or iV  H 
 –cancelledÌ  ! m ŸEXCEPTIONm pby rais#)anB P 
 Aexceô $noº  A ees an " J µÐit is equival19to Ñ
Ü 	 J -  I#ll� sJ HGare +– ã!A ¬1 2-¯o"tså£first set,& «°', contains|X  ,€d that X0d (J&or“ €) beforeE  J = ‡  	ˆ .Œ %un8 J ” M1"""  ƒ_AcquireÐ3(fsC Ë  ‰  =r !(fLH?  !  °if f._stategö[CANCELLED_AND_NOTIFIED, FINISHED]kÆ k Ps) - | FGif (©B == èúA and6 › 6  v(e ,t’ À    elif (re÷turn_when == FIRST_EXCEPTION) and done:
  ñif any(f for f in$ 	# . òif not f.cancelled(U ñf.exception() is' ZNone)k  H  re¥ ° DoneAndNot
 €Futures(ž ,> _
 %)
† aif len  )Ü   +fs_ [ #òwaiter = _create_and_install_ bs(fs, _ _š  p.event. ‘(timeout)¹ Q&fsÐwith f._condi2  $f.t €.remove(X #err  d.updat ².finished_fE| ­ g
‘set(fs) -ñ’)

class Œs(objectbð"""Represents the result o=ð asynchronous computaÛ B."""Äódef __init__(selfY  ó Ò"""Initialize^ Ë €. Should` be catp by cliŠ `  C    V Wä = threading.Cm(0 ñ state = PENDING¸ æ  = Í ó  ·ks = []:  Å_Í Cback" # &finvoke  / V=  ®ø 
T 
T:try  á C _      Ú $ EÔ= gLOGGERö'4 1ion¦1ing  á XP%r', ª ÈNrepr" , Î
ƒ !ifL #._¾ ìjNISHED(  Í , ¢ $  ( r˜Á'<%s at %#x ^ ù=%s raised %s>' % (- <  µ _HÏ__.__name__,1 "id" ñ_STATE_TO_DESCRIËR_MAP[m ¤ ]@ & ü -._ž Ç ;els$ %
A'ªï$!Š»

ÀRIPTION_MAP[ðself._state])

    def cancel( !):   A"""C ò	 the future if possible.A  + ±Returns Tru# 1 3was` óled, False otherwise. AZ w –cannot be7  v õit is running or has already completed.G 5""" Pwith Þ ¶._conditionè  Á #if  ú in [RUNNING, FINISHED]3  7 rø Õ   Q  µCANCELLED,  ¿_AND_NOTIFIa 	 X
` Î ® =P ó  „ $ ò Ã.notify_all(ý& õinvoke_callbacks()K å „ 3?led6 .£‡ Õ ù  §KV9 µ >³ ÿis currently executing¼ /3== b  Odone� (ofŽ	] �finishedª 9f'Ð Ì__get_resultØ !^excep’?tryp Caiseª8 © Îofinall;  ñ# Break a reference cycle  ²R   h 	e  i    u = None Jelseµ 	µ	@add_óv$J, fn†°Attaches a  âable that will)˜lled whens©JArgs¢ _fn: AX  ?Cthis«Å as its onlyü    �argumentŽ ¤s¨ V\pled. Thí llÚ Q å galwaysì pby a thÿ ® ¿Àsame process ]whichO 0it 60addz IOS ¯ MbeenJ 6 ytyŸµ Ãš±immediatelyî s4 4  ; Bs ar edÆ  Ú Rorderó¢they were Â – MÀndition:
     õif self._state not in [CANCELLED,  °_AND_NOTIFI ´FINISHED]:
M  R ý
done_callbacks.append(fn)0 ereturn :tryT 0fn(S 9 �except E :ion/ rLOGGER.% Uion('  � 1ing  ˜ ‘ for %r',!)
… ¡def resultx ö , timeout=None)m A"""R» C the2 1 of  i Q that Pfutur# ’presents.j  2FArgsT   o À: The numberW ñ seconds to wait» y iy k È  L  `isn't ”P. If Ê ,› n ñre is no limit o e  Œ ­ ð °  § 0 §  “ þ [RaiseP ð CancelledError:°  U Ú d was c" .é T¨7 0didÐfinish execut
`beforeV give‡: :outj {ž ó rÎ dM  C6at z‚will be # N 5"""Ä úAwithš ._ü-ití ¦ ÅÁ·  K ž  �(y #   +elt 4== 
Ì .   r) Èr.__get_2(t $  % ñ .î(‡/  ‹ ÿ �ö  OelseD ^ å›kfinall:ñ# Break a reference cycle Z V¢#ink ™ œ  –! =:½ '+ *5 0 by3•4Tƒ 7	ê  î m7$O  ¾G˜ Šd2 or™ »  Ú Vð completed withoãut raising.

  uRaises:   ôCancelledError: If the future was c" .9 Timeout7 ñdidn't finish executing beforea YgivenQ  Ž tU j 6"""À úwith self._conditionÎ #if  õstate in [CANCELLED,  ê_AND_NOTIFIED]C  ‡  ;*e )()® +ell ¿== FINISHEDQ  Seturnœ Pexcep¼ Ú  u Ù c.wait()+ { ç � Þ  Oelse   š S(ó 0# T�PollowCñmethods should only be used by Elpors and RtestsP deòt_running_or_notify_ã(‚)� q"""Mark¯3as >   or procesk y& Q 0icaßs{S¯ ¢ implement: ¾ Sunit À |
 ƒhas been Sled (Í )½ ÜO r„%edK PTrue)Þ àn any threads x j on 
 co¢ ÆÕ(though callsN cto as_' @ed()" L s()) are!ed� ”False is – ,
ã  ƒ7notâ pthen it> 1putå%he˜ú– (¹¬ 4 to' s() will   3 
  Z ˜  RThis €!be
|Í÷”  jñwork associated åtk » .“{ š yKP  8#be�'eddRJ iF ,)¨ otherwiseQ  ÂP 0RunÀ#X Ç  Ø als =¦1or Ú‹t_results Cuor set_C È¤ A ç '  7    Q Û6&==* K   J f ) 	Së 1   1forX er¯C  +er3 -    C.add�2led \ #WÐcondition.notûify_all() is not necessary because
  À# self.cance9  triggers aA ­ification.9 «return FalV BelifU ý_state == PENDING:F } ( � RUNNING& l :TruÁ NelseT ñLOGGER.critical('Future %s in unexpected Ÿ m: %s',s '@ id(¬ )*  ' .Ó )W õraise RuntimeErrorŸ œ  1')
B  deR�t_result‰ ",  ) Ò"""Sets the ržðvalue of work associaû Awith) f.h  õ  Should onl5ñ used by Executor implementös and unit tests(1"""¼  T n PcondiR¸  " 3õ in {CANCELLED,  °_AND_NOTIFI šFINISHED}M  Q i€InvalidSˆnò {}: {!r}'.formaN°,¸)·¸ n# =wÛ  l " N4 = • 	#  for waiter„1  s¼  H.addò– NE.notþz h ûinvoke_callbacks(VPexcep“Y \ † V jA‘ as beingUegiven H ^ÿ+& =7ÇdL}  g>ñ__class_getitem__ =  ñmethod(types.GenericAlias)

! us(object�p"""Thisäòan abstract baseY  nóconcrete asynchronous eÇ s. b]Bubmið, fn, /, *args, **kw
 }  Œ i1  & W£able to bea 1ed ô !@argu6srchedule³I las fn(Ž xðreturns
        ñ a Future instance representing the execution of Ãcallable.

  …Returns:   A\ S `given H .2 5""" òraise NotImplementedError()t ðdef map(self, fn, *iter– ös, timeout=None, chunksize=1)¡ 3"""µ A an = ñtor equivalent toc  ]   )ï ;Argì Qfn: AÒ  „ ð that will take as many arguÎ s •there are÷  5  bpassed• Fbles%  Þ ð: The maximum number¢pseconds¿ ’wait. If 	@thenÁr  Ñis no limit o%  = J
~ N€  X v  )  b » íbe broken intoï �before berü õ	to a child process. ThisC� is onlyN u;Bby P7 QPoolEÂ`or; it8 žignored b> hThread5 ÷1E �A>:?8uncžQ) but$ ÿ 
… ø
be evaluated out-of-orderˆ  �Tô&:ô ’ ÆrÓBsult• åðcould not be genern J˜ I ±z.* PExcepv ¡fn(*args) Ä`s for û Ô Êï!ifi!ouž ˜  ±
g@end_€ % =, +
 ¤.monotonic –`fs = [€.submit(È› ” ¶rgs in zip(<")]` C ±# Yield mus)AhiddÃP clos4"soé "fG  "e r 5ted)'# MGfirsŽ —r}6red` ç re½_ƒ at
:try » preverse°keep finishaM™  .   3fs.3 -() {while fr 7   ‘# CarefulR1to q €a refereSt(’e popped *e  K 
	 $  y�’fs.pop().'½   0 Nelse&    J q-g
"ofinall†  gí  i?"  .c}lÀ rS Ø ÿ¡ ƒshutdown ±¢=True, *, P _^ ss=FalseÿÀ    """Cleanñ-up the resources associated with ÃExecutor.

  ð.It is safe to call this method several times. Otherwise, no o J 2 �s can beK ‚ed afterS 7oney UArgs:=  Ž Ðwait: If True° ðn shutdown will not return until ® yrunningJ  N ñfutures have finished eping andd 2pused by N 8 "orO ù been reclaimed.. scancel_ Ð 
+ Æ OpendÆ 3. FÏ ð that are compleß3or ')be•  n l° 5"""' Bpassödef __enter__(self)©€  	. 3xit- ¢, exc_type
 2val	 'tbH  A .ß(û=÷)� i ôFalse


class BrokenÇ (RsmeError\ Ó 0RaiÏcwhen a÷¿ós become non-functional©aò’e failureÜ U ð# Copyright 2009 Brian Quinlan. All R €s Reservip# LicenŠ ðto PSF under a ContribŽð Agreement.

"""IÙ  Ôs ProcessPoolõ Ð.

The followÉrdiagramÑ±ext describCò data-flow throug	¿system:

|= R In-p}  " §|== Out-of( U|

+- +v    " - 3 1+
|E  ô|  => | Work Ids    0| CQ5  |H+ |P  � -} #  G 	 � # 0|  ’ ! P P| ...{ H …   	 " k a ð  c   6;   ?    !5,oB() |   ð 5| 7 	 X   	    ! 
L¼  . ( t| Localß @Ø  LP . ç  ó#er"  ‰ 	 ‘|  #1..n P ).  — oThread" È P k    "- ¢  ©  - " !      #  1| <Í Ý P ItemÒ    ©  <= €Result Q $<=· À   |
|      P    | 7 +- +  " !   6 |
 P ´| 6: call()c $ 	 Q| ...i !    P “   future/ i   ²| 4, result P ~ /  P �3, excepP  /@$ "    ñ-+

Executor.submit()=ð6ed:
- creates a uniquely numbered _WorkItem and adds it to the "Work  ’s" dict
-#   Qid of' D 
8 ñds" queue

Local worker threaš   s ‘ ids fromR y A � �looks up" õcorresponding
  Ç D 3tem½ 2: i°  ‡   iô ðhas been cancelled] 0n
 öis simply removed   ³, otherwise. ðrepackaged as a
  _Call@Á `put inb   " † Q". New' os are (  …
  until9 ñ  is full. NOTE:U Dsize”a  ( kƒñ small because
 Œs placed–  Ð no longer be  awith FI.6b().
- Ë!_RA ó Ï" � Q", upd‰ ?Œ0sto‡3
  ú¶:@deleÂ 9  |ð entry

Process #1..në†  ^„   ‚ e'!es0 _!s,a 2put T	Í 6in Ë ð
"""

__author__ = 'Brian Quinlan (b ñ@sweetapp.com)'

import os
¨²concurrent.#s " T_base/ E bmultipù 0ingk$mp*  ².connectionq   Z u Q­h ¦ 
 rweakrefI …functool< tpartial‰ Aiter   4sys Òtraceback


_g Ãs_wakeups = h ¡.WeakKeyDiÀ ñary()
_global_shutdown = False


class _T]WN  :
òdef __init__(self)     …._closedL       SBer,   wrÚ ñ = mp.Pipe(duplex=† %)
q S n cif notJ " d‹ r  ` = Tru«   „ .' !()s   [ ³ ! "  d– $ú à.send_bytes(b"ñ	")

    def clear(self):   pif not  †._closed  ! Swhile  Çreader.poll(D  '   E % ð recv_bytes()


� Ä_python_exit@ ‚global _ ‘_shutdown   q = True ðitems = list(_thv ¡s_wakeups. 1())+ rfor _, $ # A in % í a# callõprotected by ProcessPoolExecutor.¨ Q_lockf  	c .� (… Ot, _y  `t.join&°# Register µ `1q` to be§ ð ed just before A óing all
# non-daemonõ ðs. This is used instead of `at�#.ry 0()`| û0
# compatibility with subinterpreters, which no longer support ~ ð
# See bpo-39812b ¢ context.
6Ting._† _– (ð	)

# Controls how many m  º‚s than p¯pes will0Aqueuõ 2 th>  ò.
# A smaller number5 0mea;'atN Rspendn àtime idle waitx for
# work€le a lar	W ò ake Future.cancel() succeed less frequently
# (+ s3
º @ can¶ H ðled).
EXTRA_QUEUED_CALLS = 1
8öOn Windows, WaitForMultipleObject!to× ¤M�to finish6 It‚ ' òon, at most, 63 oO  r0eresƒan overhr4two% Q:
# -–bresult˜ ÌeQ   O ð_MAX_WINDOWS_WORKERî `63 - 2ò @Hack1ðembed stringificationúÐremote traceb- †in local ¡

class _R, T+ `(ExcepI Þq_init__bC, tb  qtb = tb.1 3str0 , breturnr%tbƒ s EWithŠ ¿N 	 ;exc„  Ã ”.format_eÊ Ä(type(exc), = «  À < "''©"tbÓ  Ù Pexc =5 0  5 ú \n"""\n%s"""' %oreduce€_rebuild¦ !, Y.œ ` )X'  Â ù þ exc.__cause__ =ÊÍ v5excr’WorkItem(Ó£l fÓ0, f³rgs, kwargs2 (( 2 = 	 
. fn ù2  F 0 =  
. a # =j ´ ðResultItem(objecñ+t):
    def __init__(self, work_id, exception=None, result >  B  5 .4 $ => ]  J & =V 
# ] # =f ÿ

class _CallItem(objec· Àfn, args, kw ¬ zfn = fnž  H ! =W 
 c # =l 
¸ ¡SafeQueue( … 0"""   F setò  to the future ï p linked �a job"""€ · òmax_size=0, *, ctx, pending_Ÿñtems, shutdown_lock,N  ¨ Óthread_wakeup·   èQ / =f  V 5 	r * =‚ 
+ 	} 9 =  + uuper().¹ü ÷ a=ctx)
- '@on_q‰Ó_feeder_errorì e,iæ Ðif isinstancet,ƒ'   tb¡ õraceback.format_ëô(type(e), e, e.__t+ 1__)ž  E     ôcause__ = _RemoteT. ó ('\n"""\n{}"""'h Ú(''.join(tb))O í kNelf.µ@.popÝ ¸ , âG Nith À7 ·  $ 	©.=(Q #¡tem can bev ù if another process terminated. In this2q# case,0òexecutor_manager_‹ ¦ fails allw E wã rBrokenPz IPoolj &if? q is not¶ w.Â8.seeJelse@ sÑ¬¦1


Ñòget_chunks(*iterables,  3ize¨P""" I õtes over zip()ed 5 3 in7 $. [Ait =* \ » —while Tru½ t  Puple(X °tools.islic — G  7!ifI> 

Vretur}Ryield£ þ $(íG õ ÌBes a;   oc÷ R passUBmap.+ARunsP@funcõ
& X() onP 1the) ô  �
/ U UThis Q `is runt¤a separateó1 …` [fn(*|Q) for ? ñ ]@send‚_C( ôÎàresult=None, eô.xception=None):
    """Safely send back the given result or e= 1"""9 2tryB  F ( Ñ_queue.put(_R: ÓItem(work_id,N =- ,F  =  
x =
 !));  d BaseE� V as e— uexc = _ �WithTraceç ”(e, e.__t "__Y  � ¤ Ñ ƒ  Rðexc))


def _process_ù rer(callJ  Ðinitializer,  Fargs™ Evaluates C as from @ ± and places³´ 4s i¸' !.
/RThis ’ p is run) ³a separate ¶ / FArgsI € N �: A ctx.Që� of _Callè … ð at will be read¢ }  S  eÒ Ad by´ ‘ .% Ä k Um uwrittenD  i /tob  gtÌ qallable ,ñ $S  5  œ 2 Ptupleú   A forÉ  " ? 6 '(ifZ  z@not ] ^	K ¾ M  (*  k �w
úN  A õ_base.LOGGER.critical('	 û X ² 0:',á¦_info=Truel  N ³# The parenà±notice thatþ <~ stoppeøR# marY›pool brok²RreturÅ`while ˆ Ö ‚gitem =«.get(block· "if& 2 +isqÕ �Wake up ¶€ managemã  th½Ç *   ˜á os| Cpid(� &   È   ÜrÁ  › U.fn(*Û .ç7, *  kw �ûõ v ù' > _ #_÷ ( –,Y.¾Ú— 	:7elsŽ[ #| &=r H Rdel rÙ  a# LibeÇ ½€resource@soon õpossible, to avoid holding onto´ À# open filesÀshared memor´$atÅAneedìUymoreA  › Ó€


class…qecutorMh!rTd(kBing. ý(  è°e communica¾  between tÒz  û  “$erÍàes.

    The mñanager is run in a local thread.

    Args:
   óexecutor: A reference to the ProcessPoolE( ¥ that ownsC  G Dthisg ð A weakref will be0 1 byT m¦ šas well aI „ s… óinternal objects used qrospectU ‹state of” $e ß . 2"""õdef __init__(self,* )v# Store”  neDary ž As of‡ n o  a# A _T€`Wakeup¾ Ðallow waking  “he queue__²P fromZ O Rmain Q ñ and avoid deadlocks ca$àby permanently2kede s ž  û .l "_wŸ =
$._Ð — + • F �shutdown_‡  F 	 € |  (.,t hEUsed… #Y²determine i’Âù	has been garbage collectM  [ë –– can exitA`# When£ -^ gets\ ,% ñ — callback¿ , …	 | 0menê Ç  s�Qat it‘ ò 7ateL þ  repno pendk–work itemÁ  
• e_cb(_,F  ¤ 	&=ó	 9 	ÿ9 	 q o õ mp.util.debug('x¥�: triggerÒ H_ for'» `   ' Q`M} gIup')2 Ywith ›  š   	ó .G &()Õ
_Í$ = ë(! , 7_cbE  DlistWCctx.É“ instance F\orkerÕp»)es‹ ²  m  a  ÞŠ¡be filled ñ_CallItems derived�Ar# _Work" Cfor k  ¥ú  †±  Ê_	²  ³ bSimple¹ ¢of _Resultƒ ”generatedx~ r; €   
‚ ¬ .~  Ö ’ ids e.g.nÖ([5, 6, ...])s$ / O_idss   
o �dict mappR # m Ðto _WorkItemss e.g.
  # þ{5: <_WorkItem...>, 6 E...}: þself.pending_work_items = executor._ 
@ òuper().__init__() €def run(` %):/ õ# Main loop for thei p manage Rread.I  Ú ¦while TrueJ    ] ‘.add_call¹ ”_to_queueˆ  '   aresult$ ñ, is_broken, cause = K Swait_* ! ¬_or_wakeupQ &ifG 
–  o O “terminaten (m ) )   ireturn 3if ˆ  �» is not Non ? l tprocess¾  6 (B u ù# Delete reference tou öto avoid keeping* s¬  „ "# ¤ B + con newO s© ,   3del “ë    �# attempt– ó increment idle ì m count‹ ¸Õ _é (&if‡m
 œ R  ._� 6ðer_semaphore.releasƒ .   ÷ > 
ô "ifƒ€is_shutt�Wdown(=J ñTflag_L 4 
\  8 @# Siä0no ™ ê %ðs can be added, itm1saf ‹  † e�# this thª0 ifÉ£re are no 1 f !ifÓÌ 0 JsR Å - Fjoinù ŸinternalsÕ  3 r\Á  ”. Z j`# Fill"llPe with ]ds fromé ¹ é 0# T#afuncti—ver block7ÛÚÒ_.fullã  î  >tryB Ž4_id sà Q.get(� j=False#rexcept ˆ OEmpt_  ‡  ?els° y 4temŠ ÿ[$ .d]É!ifW'ð.future.set_runn5ÿ or_notify_cance2 ' ò.^�put(_Call<(€ ,8 /  ;  �/fn@ +HargsB À              ÿwork_item.kwargs),
. 	 ½block=True)4 ]else:  ? õdel self.pending_‚ "s[ /d]9 ‘continue
 ðdef wait_result_broken_or_wakeup(d )ƒ Ò# Wait for a 4 ð to be ready in th N ñqueue while checkingw  Â °# that all ± óer processes are still running, orv  ™ 7 upH Psignaƒnd. The #   ús come either from new tasks be” ¢submitted,*  Î ‚executor- Ð shutdown/gc-(  š  U 8the• & 1 ofõpython interpreter.. I_CBer =Ù D. 2 ¢assert not-  th= µ…._closed.  #upD ` 3  @ %er3  Ss = [‰  ,]M dÄ0_se_!el: $p. ¼p Q.ê–.values()I  h ðy = mp.connection.¥( Sers +2n )Ï X¶cause = Non�#isÛ0 = kè ª »4 fâ9"inæ p :try   4W  ¿ n.recv(ì£ FFals½  Q Áexcept BaseE ion as  òtraceback.format_D õion(type(e), e, e.__+ '__J0eli » `Bwith£7_ð
2
�gclear(� Pretur�°%, x !, õ  Ôa× ˆË,Ó  	ØP}¬…receivedäÛ� This canðO  0PIDæaõ # â€exited g�PfullyÌAa _RsBItem¸  çãif isinstance(8 ¬ ,:±  - u# Clean‘… { Õusing its PIDš 7 °(avoids mar“ô å
 o¨0is_Ëtu Ëp`ƒhes.popË 
[ kp.joinE &ifÛH 
4 Ê �  ? _¾ _`KnalsR  / C]6# Rú ÀltItem so ma÷rk the future as completed.
  õ
work_item = self.pending_ Ás.pop(result* . ‰d, None)O "#   Q acan be% û if another process terminated (see abovN 'ifO ais notO :t  Î 8if ¢ žexception*  . ¤ . U.set_4 	ì  
è  F Oelse`   	]  !)
Ï Àdef is_shutt�Pdown(“)e ±# Check wheLôwe should start =  = †executorö ñ ¶_reference(ì ‘# No more‰ )#s Ùˆadded ifŸ û  - The interpreter is˜ !ORñ  D$# 2 ‡ ñ  that owns thisx ðer has been collec6G * * %ñ return (_global‰ " E or � !is�À  Ä   $ .: w_threadàôb_brokeày, causeçT	Å1 be+ 0 itVRin a I   1te.|# ¢ ¤# argument¸ò used to displayßpinforma42 onv Arror�M Blead Y ëo™ Soming� .Ó C# Ma�úCpool) 1 sob ö submits fail right nowž‚§ ¶)if²7B .ŒÏ = ('A child¥' ×  ¡'abruptly,"	ï ¾E  usable anyx'Œ s µ Áey = True¤ - " =µ c# All ê  tasks are‘be markedŠqed withÏ —followingG BÆPÒP×e5" mbpe = & 5("Abim	-Uwas "E  ø  "N$d zb while° ûL @runnÀ$or&."{"if¤ vNabpe.__{ý__ = _RemoteTraceback(Ï ñf"\n'''\n{''.join(> c)}'''"4 ÷ A®*Îàfor work_id, wôork_item in self.pending_w  s.  gs():
    ù.future.set_exception(bpe)0 ù# Delete references to object. See issue16284: Edel n  ­ …clear()
) ‘# Termina| qmainingQ ðers forcibly: the queues or 'irD Àlocks may be, a dirty stX Pand b#  P Uever.; Pfor p2 ± írocesses.valueV4p.t­ 
Ä  × ån up resourcesb Y ôjoin_executor_internalsE †def flag# PshuttéPdown(D á`# Flag T D as 4  4  õ ”cancel reX…tasks ifž °# requestedC Pearly	 öpossible if it is not gc-ed yetA� =¡ _I(j4if   S JNone»"  ._Ñ  Ì å_thread = True¼  ï2# Cä :  » Ý ±  6 ˆ "._%_A _0s”  5 k Call .  . n0updn £	² K  \…nly haveE ðthat are currently run
¿  C 5new³ ms = {}o  å$ !d,!T# w   !ifR 4temcIŠ 2  µ [J Fd] =ž Å  ÿ ? = V A s# Drainc 1ds_Oÿ since we no longer need toB  3add]!to€cI £Qwhile³M ?try   ï « ·.get_nowaitT -  á(_.Empta _breakã  �Make surdæ @is o¬o)"toýÿaste time loopingK  $onÀ$ pZQ over/ 	 5þOåjr= FalseB 9& .<ers.ón_children_to_stop ¬P WaliveZ±n_sentinels
 E = 0æ a# Sendõright number of 6 ,CmP +‹  çL Pprope{ð terminated.
     ñwhile (n_sentinels
 ð < n_children_to_stop
1  ×and self.get_0 Ùalive() > 0):6 ÷ for i in range(4 d < - Œ C  � :tryX     Ž ùcall_queue.put_nowait(None)�  1   q ] += 1* rexcept X OFull‚ abreak
> ðdef join_executor_internals(© Ù   ö.shutdown_workers(¯ Ò# Release the„ ð's resources as soon ‘possible.„  à ] Wclose]   ´ gthread& Bwithî¨ JlockK ; Œ_wakeup.n `# If .d  () is not � Qed onß ðcreated processes nÏ À# some ctx.Qåð methods may dead—  L †Mac OS X
 p¨ ` ‡.values(‘ 8p¦ Îè L : `# ThisÚ Õan upper bounÞ ¤number of ` 0¦ ñreturn sum(p.is_ ?() ¾ ú)


_system_limits_checked = False   0


¬. 
B zglobal  1 :ed, !ed¬*if Ž 3# &ed  ‚ùraise NotImplementedError(‰ "ed*	 o q = True” 	9ònsems_max = os.sysconf("SC_SEM_NSEMS_MAX"^ ¡(AttributeŠ 0, V= 	O àúavailable or setting ž ó ý 7if £ F= -1ñ # indetermined ïp, assum$"at  ‡' V  e V# by • µmemory only# … 	ˆ h>= 256‰ †minimum Ù€semaphor™ú J | `accord…to POSIX v 	Í«"("Ý 0vidwoo few q E(%d"O  p  "ô ,Æ 0 neavary)" %mð}@Ðain_from_iterñ¤_of_lists( %"""§ ÔSpecialized iæPation# 5 Étools.chain.\ 2�Each itemØ*1  x à* should be a ‚ ð.  This function ðis
    careful not to keep references ñyielded objects.7 1""" ñ	for element in iterable:  `  ¥.reverse() Twhile= 1  5 s  ò.pop()


class BrokenProcessPool(_base. ’Executor)Q § ò Raised when a p=  ± 'a J = ñ terminated abruptly· ³ Àa future wasD ñthe running state.-  | µ e  · t ± ò def __init__(self, max_workers=None, mp_context o  8  A rializer#   sargs=()k  - r"""Init+ s a new¥instance.
m BArgsf J   ª P: The» äimum number of{ ZÀhat can be u�%to[  M   eÎ e bðgiven calls. If 1 or¹ tÞRs man¯ C  B€ @will| 2creésg ´machine has- #orõL €“: A multiS › ;alaunchX € Ss. ThzN   \p shouldx ñvide SimpleQueue,  D and f >    àÇr•  ( ‰[    ‹  f  CeÝ  I  ) F Ptuple·@arguäp‡!to×  . W r�  ú ”   ð_check_system_limitsÎ     if&á1 isÙ
X '._^ð = os.cpu_count()	1?úif sys.platform == 'win32'\  „ ` ù
min(_MAX_WINDOWS_WORKERS,f  >  V û7els# A N<= 0¨ rÆØ ValueError("@mustÑgÑ–r than 0"v  h oelif ( ^ß c /> P c   ª W  & fÀ O<= {g 6}")} ? a( =L-  ]3cÓ E Tp.getd³r L =Œ	p  q  ^± À   () HD4Typí+  ía êé§ / = Àalizer
     ô   self._initargs =  3

  õ# Management thread ? ¡executor_m) "r_& z = NoneJ ûp of pids to processesQ  X = {}A ôShutdown is a two-stepI .H s. ‘ _False& clock =ä «ing.Lock()/ ùidle_worker_semaphore7 S ,(0= Ÿbroken = ‰ û queue_count = 0x qpending{ P_item¯+{}& tcancel_- `future* q . A# _TÌbWakeupPðcommunication channel used®€interrupge waitN ñ of the main looçÃfrom anothernV (e.g¿ô # when calling I §.submit or äÀ). We do not³  �   �_result_d Î bsend wý asignal“ Å o ÐN Âas it could Y ¡ in a deadFRif a %�¯ dies with› 
awrite E çstill acquiredŠ #_s _3 bmust b@ ¶ acc
îK Á
_=> (()’Create ;@s foâe¯º @Make
æ ˜Ñslightly larg!an$ anumber<47 toN Bprev¡ex1es q idLÐ. But don't m‚ §it too bigN „because ?i†  �ª 0cani2be rl¡Í @_sizc1maxºõ	ers + EXTRA_QUEUED_CALLS} /  j ¬€= _SafeQ('  � T  e =p b, ctx=D ¹mp_context,7  ŸI1  
9 	k4 	 
/ E/ [% .Ž# KilledÌ0canRó duce spurious "XUpipe"í À# tracebacks  Ü+0's D e Ô±we detect k€ L •òanyway, so silencÈm `Î ._ignore_e« l = Tru�QþÇc.Simpl
,î Í _X=¢.1¬ðdef _start_executor_móanager_thread(self):
  0if  É._executor_m0 † is None2  9 ñ# Start the processes so tha õir sentinels are known.w  E x C= _E“ M’ TÁ I  .sª )()2 ¯s_wakeups[Œ 
Y] = \@ ¿ Y 
6 Ãdef _adjust_.l_count�@# ifTµre's an idl`ö, we don't need to spawn a new one^Õ A ÷_worker_semaphore.acquire(blocking=False ß breturnÁ   	¹ a = len¿ .Ó &esd$ifé # <f3max� sR4p =# ²p_context.P[(F …  ttarget={ S ,( Sargs=§ ®call_queue( X oresult* ¿initializerS  )  ‹ )" r /p.œ† o€es[p.pidƒp� NRsubmi? , fn, /, *b `, **kw
 ÏCwith]�shutdown_û
‚5jbroken  ¯ qraise B šCPool_6 
á S w …\ ñRuntimeError('cannot scheduleçäfutures after W 'w „_global_" r 5'c  ›'interpre¤ 	< ±f = _base.FÔ ¢w ¢WorkItem(fæ Ø#, à{ 6aendingT_itemÚøŒ Kw‹ <  'r_ids.puZ.6 
b2 U Y += 1U ¡# Wake up '  W0men  Š	. Q „M.­/()ú _µ sî…! f« t€.__doc__Ÿ¾¥.  ¤  ¬1map#ÃÀ*iterables, ì@out=`×, chunksize=1¼A"""RŠ = ±tor equivalN o c   \ ð).

        Args:
  ð fn: A callable that will take as many arguments §there are
H  °passed iterN )s." ð.timeout: The maximum number of seconds to wait. If None, then r  Ñis no limit o% =  l 
~  chunksize:Y pgreaterð $n e ¹ €be choppÓ 9ntoÍ  ð S ¼  iz, b à and submittedÑ úthe process pool›  L It, Ž Bms iÖ 3lis™`be senï ce at aì ž …Returns:  _ "AnÝ °tor equivalD õ to: map(func, *¹P) buts yO �be evaluaà åout-of-order.
( [Raise‡ TQErrorˆ Öentire result§ ðcould not be genern _  Ö   Pbefor¹Pe giv)d 
c‘Exceptionv ±fn(*args) r¥ P for è Ô e·5"""q 2if ñ ì:< 1aI a ValueÞ &("- 1musÅ v>= 1.")#ó Às = super().�“partial(_2_J e, fn),Ž  û  B_get/ &s(Î,¹ =L  L  CCout= ){ raÔ _chain_from_9@_of_ª#s(Û í ñdef shutdown(self,§ö=True, *, cancel_futures=False)bPwith 8 $._G V_lock"  ! K tpendingS + =d Ï : [ �thread =   	) i§òlf._executor_manager_4 �_wakeup ˜tÀ
¤  n 0# W]pup queu C  ` F 	s  2 Ú t .{ (s 7 ® § µ y
° z 
f.join(¢# To reduc‘@risk²opening tooPðfiles, remove referenceýü �# objects¥`t use 7 · descriptor©§ 
! =‰Z -  ô_�  7Å% Ó,
5 g.close"{ # � ûe ¼ 
S 5 ÕÀn.__doc__ = ð6_base.Executor.shutdown.__doc__
# Copyright 2009 Brian Quinlan. All R ðs Reserved.
# Licensed to PSF under a Contribl ñ Agreement.

"""Impl Ås ThreadPool™ ù"""

__author__ = 'Š 0 (b™ ð@sweetapp.com)'

from concurrk ñ futures import ÿ 
 ”itertools Tqueue t• 5ing 5ype+ tweakref bos


_3 !s_H Cs = & ô.WeakKeyDictionary()
_|€ = FalseGÁock that ens¸  ð(new workers are not created while the interpreter is
# a Qting âÄ Must be hel7 Amuta" » Eand ¡ •.
_global  _l© "= ñ òing.Lock()

def _python_exit():
    A T  _with \ 5  9 t q = True9 @item`[list(¼ . 1())* Áfor t, q in  Z ¯q.put(None+ `t.joinà p# Regisd [ `ì ` ²be called jrPfore A  Œóall
# non-daemonDÀs. This is uHàinstead of `atJ#.ry ñ	()` for
# compatibility N7sub s, ñch no longer sup
~ ð
# See bpo-39812b  Hftext.
è_† _– (ó)


class _WorkItem(objectâ_init__(self, ¡à, fn, args, kw 2   ) .( # =1 Ý n n  F ! =U 
 a # =j 
  › 1run– | !ifnƒ ô.set_running_or_notify_cancelï š   breturnb   6try�  ’result = b 1n(*	  ¼ 2, * ° ¥ 4 Áexcept BaseE ªion as exc] K 9¶ 9 vion(excP  T ò
# Break a reference cycleW `> a 'exc'6 ;    j 0 = M Oelse� ý ( )&!__B@_get°û €method(t†Ð.GenericAliasv ¾_##(eÝ_Ê ,>— , rializer  mó(if  Ž l × Ê ÄQ  (* Q ¤
¯N  >–ö.LOGGER.critical('Ý ½3nit¶ 0:',ì`_info=
Ë 2 =  Àor_referenceG()
  ù	if executor is not None:%  0 & û._initializer_failedT areturnB 6tryK ›while Tru_ Áwork_item =  ðqueue.get(block=3 · * 6 ¸ 
' K.run©  Ø ñ# Delete references to object. See issue16284Ô  6  2del³  ‰ 
 �# attemptS ýincrement idle count2 g% =˜_š ¿  À ² ]  ._‚ ÿ_semaphore.release`   á 7 ­ Šcontinueù / Ã –# Exit if& © ñ#   - The interprete ùshutting down OR“ 6 ƒ Ñthat owns theªÿer has been collectedJ . ˜  “ .‘ Dif _ 5 orÒ j f .* 
AFlagÃ Ú 0as [ þ
as early as possible if ie#�  ëšgc-ed yet¸  t Y$ ”  	! =é	 W ã# Notice other’s' ¶@put(-
 L rh    ¯Áexcept BaseE 6ionaõ_base.LOGGER.critical('* 3 in£ ³', exc_info�ò


class BrokenThreadPool(U  E\)t 1"""ë ÓRaised when ab ! tC  s &a O B  k ~Aing.M  U � 8 � G "):­0# U‚ ôto assign unique… Rnames  — _ t_prefix>‚supplied‡ _Ññ er = itertools. ²().__next__} Qdef _HÐ__(self, max_õ@ers=î,Š x A='',ò  ê #er:   sargs=()x - E"""Iºs a newh’instance.¬  ; BArgsÁ    ¯ :¨ómaximum number ofÀ  y²at can be utÅ Ö ~Pe giv›BallsY p   ‰à: An optional ¢ ¢!toH ð our threads.
       öinitializer: A callable used to   ò worker threads.
A   ' @argsD ðtuple of argumentsI 1pas 7theU rG 5"""S rif max_r ¥s is None:   u 1# TŠ ÀPoolExecutor* ToftenÀ 3 û* CPU bound task which releases GILe X* I/O2 (3 ,î zcourse)? 
 ! WYð cpu_count + 4 for both typesK  š að# But we limit itT 32 ûavoid consuming surprisingly large resource� ùon many core machine.$ †å= min(32, (os.Ä €() or 1)Ì þ ÂJ<= 0Œøraise ValueError("l Ñmust be greatuuan 0")
ž (ifG ù1not'P and  Í(žå)† 4Typ… +  … a� hself._µ =µ© (  Ë‘_queue =  €.SimpleQ (9/ °idle_semaphœ=vTing.S ,(06 ›m = setT Öbroken = Falsq shutdow h_lock � MLockk ‰ ÿ_name_prefix = (  %or( Ô .("ìr-%d" % ¿ N\er())Ñ=3y B  (  Â %   m°def submit(*  , fn, /, *# `, **kw
 YCwith˜ W8©, _global_ 
’#if; ¯
   9BÍœ "._5 ' 2 S w U cRuntim@'canFðschedule new futures af–P 'up â k 5'¯ b  ›'interpre� 	< ±f = _base.FÍ ½ W w ¢WorkItem(fï á#, é ,    .ªßj.put(w$ sadjust_²| �return f° t€.__doc__– µ ë.  •  ¬_h  ‚ à):
        # iôf idle threads are available, don't spin new& #
  �if self._D õ_semaphore.acquire(timeout=0):4  ; ureturn
 ñ# When the executor gets lost, ÷weakref callback will wake upI  D dworker® . Cdef H ’_cb(_, q=À  2 k_queueª ¶q.put(None)¯ Dnum_1b= len(F  )q 8if , <.@max_r :ersA ù_name = '%s_%d' % `  ¡_prefix orT ,s  _ � ¥  . 3t =/Qing.T(‡ =“ “, target=½ u cargs=(tA.refÊ ,†)F  ¢  è .{ ª9 ¿initializer:   É )4z.start( 	
j.add(t! :Å ms[t] =Ü l °_¸ q_failedD¨CwithB Úshutdown_lock\™ Ãbroken = ('Aò b  b sû pool 'a
 'is not us7š anymore'ù €# Drain ú ló
 and mark pending futures‡ 	t ªwhile TrueØ  >try    l __itemd ¬.get_nowaiÄ : bexcept¨ _.Emptb Ybreak©  > !ifç {  E¦ . R.set_� Qion(B´•APool "._Ë)˜ ,sþ!  , Ú =1Â, *, cancel_b hs=FalsíEh ! =�	þ i£j ó 	aÁ@ork ¡as fromë,tº   )irl  jÄ# associated?.& =	 F A  E' > ÈI , M  Q 2 ¶ UGð()

            ÷# Send a wake-up to prevent threads calling
  ñ # _work_queue.get(block=True) from permanently  Iing.E Xself.H •put(None)' …if wait:  „ ’for t in A ¨ 
$  ( rt.join(N üshutdown.__doc__ = _base.Executor." ñ
""" Standard "encodings" Package
– " tPython ( ð modules are stored´ cthis pA  ¦ ¢directory.P UCodec= ð
must have names correspon‹  ®¥normalizedz — / „as defin| %e 0 _© ó() function below, e.«�'utf-8' ‡ óbe implemented by theª  * c_8.py'È gEach cÍ E Pexpor]òe following interface:ò* getregentry() ->J !s.±Info objectì ;The1 2APIo œreturn a 9 R with3`er, de« !r,P Aincræ !al% !  , ó streamwriter and  7!erJ ðattributes which adhere¹ <3œ $ IuJpIn addi¡4, aq`may op “ally alsoì—]ˆ 5API‚   fhen usÅ‘'a esearch—raliases–²sequence ofL Î {  - ê suse as 9 âAF Ô¤� 3get( "()Âb´ä/byà .

Writtenµò
Marc-Andre Lemburg (mal@l ð.com).

(c) Copyright CNRI, All R ð
s Reserved. NO WARRANTY.
5a#"

imç U$cs Asys
.I ì ó

_cache = {}
_unknown = '-- R--'
_V ó _tail = ['*']
_D $ =b. r

classûñRegistryError(Lookup �, System )FŸpass

defOCing) 'N†' a 	Ä ê% aµ @sªñs: all non-alphanumeric¾ = òcharacters excepC2dotÈ NÌ]6areD Pollap÷ ­‚replaced
òa single underscore… '  -;#'F @beco‹�'_'. LeaŠ Q @trai*C þ@remo+û Î šNote that6ôs should be ASCII onl1"""„ äif isinstance(Žs, bytesÁ d    =�) À "ascii")

 ñ   chars = []
    punct = False ñfor c in encoding:  - ñ if c.isalnum() ) f== '.'$ ( X 2andq 
   $ ˆ Å.append('_')f  c [ ³  2 Jelsef ( 2TruÚ ñ return ''.join(‚ ð )

def search_fDion(ü 1):
˜ á# Cache lookup  entry = _c E.get6 ¢, _unknownº 2if . eis not ° › & r óImport the modulß #~ €# First „ ðto find an alias Ã 7 ¥normalizedÍ= Pname žÑ e a using M 0ed - , no E < 	¢standard iÆ àscheme, i.e. f» E  Á  in^ ¤ “s packageu Òat top-level.7   ß _ª0 =  ï  ’ˆÑ   ¾ sÀ A  à\i  ` _8 à.replace('.', Ú} "ifž%edc  3NonÝ f 0modr¥f 2 ,� 	¸ Ø
S -   0#  ù sŸ!if¸  ù7'.'+ *  Á ccontinu  :try" ## Ýòis absolute to prevenô�possibly ÃTciousLIof a#!ô with side-effects thatgg'3$s'iV «   0mod_»6__(2 @.' +m  ¡´, fromlist=+ Otail£ X  Æ"=0  cexcept_Error, ÷ may occur because � (¡b)' doelZexist” #Á? #itW1s aê3
@ ¡ (see mbcs56oemÀ  Ä Epass’
{  Qbreak  
 i þô	(agetreg  =t £ M :‘Attribute"=Ð# Not a codecA "ul “ {  if"  * � E ùVmisseä õ[J@] = 8 —  _ Ð   � Qw askêmÐ¨Pregis	î 0 
 7 = (tŒ@isine1ce(, ,è 0s.Cï RInfo)Æ À    if not 4à <= len(entry) G7:
  ñ'raise CodecRegistryError('module "%s" (%s) failed to r* 9er'K V 
 ò% (mod.__name__,  …file__))E ò if not callableµ [0]) or 1 \A 3   5 Q2] is4 �None and [ 12])\ B 3B 3B r1> 4~ �/[4U 4U 5U 5U O5]))ûàincompatible c@s in·	ÿ?9 <7õ66á  É
Á  P += ( f,)*(6-B :) +xö.split(".", 1)[1],{K =í .aInfo(* !)
d£# Cache th
1ry ' %  _c$ Ã[encoding] =  "# góer its aliases (without overwriting previouslyh CeredF 9 Â 6try°   =µC.get (1 ñexcept AttributeóC Apassh Felse 2for±  g #  ù#if&  ÍCin _| 
&  *  ["  *0mod%oaReturnpt	jr {
Z  ð search_function³   bPythonèV1ry
Í "s.d ;er(= ò)

if sys.platform == 'win32'× 3defé d_mbcs(ÿt	¦ ÿ áimport _winapiq    Pansi_– °_page = "cp‰%. s.GetACPÐ 3   4if y  ¢ 
F ©  '  � 3  s.» 	ˆ  * gÑ&  T1reg|… YIÚ V L "#  Qs mayRñ while we are shutüIdownŠ ”  c­Fws)
""" E{# A^0SupjV@This Ë¡is used byd	P packy	 F!toƒ 5mapi s ²sm3 .n 0Not0!ata O ¡normalizes € R abeforeq  do Á¡lookup, so3 @mapp ðwill have to map normalòized
    encoding names to module !.
% ’Contents:  8  The follow= ñ!aliases dictionary contains mappings of all IANAV  G Òcharacter sett ð for which the Python core libr\ †providesG àodecs. In addi„  Ë Äthese, a fewI  specific c4 B Â Ñhave also beeN ”ed.

"""
# 2= {ô)# Please keep this list sorted alphabetically by value !> Wasciiˆ P'646' 1: '( !',¬ ò 'ansi_x3.4_1968/ $ _$ ò
 # some email headers useÃ Ánon-standard’x 8§ x Rcp367“ Ã $ sÏ ! <   $ =ibmI $ ‡so646_usp $  Ð_646.irv_1991+ $ 3ir_Ò – $ 	e # ´ =us_Ù H E‘# base64_|ú    _  /   9_64, 0: ' Z $',cIbig5h mig5_tw= 4ig5`  cs5 	"  í  	X ]hkscs]  >  š 2ig5 Ã é  
 ( /"z2ý 	g &z2`  < ,, þ Xcp037; ,03Ÿ}(  ;ibm) 9: '$ Äebcdic_cp_caŒ $ /nl$ cH /wtH ² Ø $ 9B 8l rhcp10264  
6 \  ÓQcsibm Y   ]  % # 
J ƒ )12¶L1125ƒ  ”!cp _ ) …   & kcp866uN &  ruœ& ¬ )40/;1408 « $40d 
( „ % ^ *25^ /25^   ã �windows_1  Š!Àcp1250',

  ð  # cp1251 codec
    ' '
  2: ') "',% ˆwindows_- % & ^ 2^ 2^ 2^  - ^  % ^ 3^ 3^ 3^  - ^  % ^ 4^ 4^ 4^  - ^  % ^ 5^ 5^ 5^  - ^  % ^ 6^ 6^ 6^  - ^  % ^ 7^ 7^ 7^  - ^  % ^ 8^ 8^ 8^  - ^  % ^ )273%27ñ8   î0ibm    	 $ .cs& $  )42T%42& V  7    [     $ Äebcdic_cp_he,$ ;ibmF '  $ £ 3Ý%43¯|  7 3·  `'cspc8ECpage1 [ $   K $  8500þ4500Ñ  k  7   "    $ "b" 8 H $ $chu H 0ibm2 e  $ Ç )77ß%77±5 F    F“775baltic€ [ $ 0ibm D  	 $  )85F/85F   ò850multilingual'!% 0ibm  w  €   ',
€ 	ø%85Ê7  Ò  Ep) [ $  K $  	~/85~  ÿ ] 	) [  [£ " ÆH  	C/85C  
 	)  g 	"   $  	A%85À         : 'ðcp858',
    'csibm    9: '$ " '  $ I Ñ# cp860 codec S'860'R  7 *60 
) $   
"  H m  1 1 1 Kp_is&  $ "6M $ £ 	" £  H £ 2£ 2} 7 2£ óspc862latinhebrew'}6$  K £  $  3 3 3 ] 	) [ $ " Ç  $  4 4 4 	)  $  	"   $  5 5 5 	)  $  	"   $  6 6 6 	)  $  	"   $  9 9 9 Kp_gr&  $ 	M $ £ 	" £  H £ )93+93Ó 7   ¿ ms _	    $ YkanjiÉ $ _% $ £ 4F+94× £ 4Ú  � >'ms& [ $ 9uhcŸ  9 $  5b/95b  þ    Q  [ 5†[ ¹euc_jis_200¤|jisx021ÿ/ .`eucjisA Ë ?: '+  n 	, + 
› ‡ Âp  q E  (,
E p? p9 ? pÔ -uj }Ô %  Ì J ƒ +krƒ k`  ^ $krƒ jkorean_ ¨ % Zsc560�	% À   'ks_c_56051'  À: 'euc_kr',
 ò 'ks_c_5601_1987* %  Hx100H /  %  ;_x_' % p ñ # gb18030 codec ' R_2000‚ _  1',
'  ; H2312: tchinese5  Ò  ™  gb) ã rcsiso58 8b 2: ' %  )cnI J <euc$ % [ _, o " #19�  º % # Þ —iso_ir_58¼ J <k979360  ~ [ k.cp$ X " /ms" w Ahex_ê} ?hex} , ò˜hp_roman8?  
B 5: ', Â rã  ®( QcsHPRf T P Zcp105P =ibm) P zØ Fhzgb‚ ±  8 zÑ =hz_" ! _?  ÖhB s ¨iso2022_jp{ #  %jp‚ 6: '- ƒ  ' b  7_jp) _Q   Œ R “ (_1• U 6jp_u	C /_1n  - + p 	Mp 2/_2p - 
p  + p  ;004ã & þ4x H 7004v  S%jp, } 0Ñ [_jp_3v H 3q Ÿ
v 3s ¡ - + é ?extr 3extt 
G   “ Ò    ¸      - v (krr Ò#krp 	,%' ) + — R “ i8859_1ç“ Vlatin|A - u  ý   ) A_199Š) À8859_10',
  ô   'iso_ir_157'  :  8859_10',
 6'l6!     ) Katin- ) S R# isof q1 codec \'thail A 1“  ¼ @ 0 ) P_2001. ) | “ 3“ j 3<  ü  A 3“ lG& /  )  &- R “ 4“ 4“ 4“ ¼ `4_1998. j 	) `celtic# ¾ )  4/99) lm J  R l- ) 55” A 5l´ “ )  “ - R “ 6“ A 6“ ¡6ž	) Vir_22Q 	]) 5l10å )  å - ¤ å 2ä Qcsiso½2q @ 2ã ' º (  B_198P  ‚Ëã ( lp & 	�x Ã + P 	ê' (   � 	( ¨( lp Ü 
–P , P 	““	i8^' (  	(  1ö· ( lp  (  , P 	Œ`cyrillP? b � 	�( 6Û/(  /( À 'iso_ir_144$'  ð: 'iso8859_5',

 $#  q6 codec v'arabic;  + ? 36',( xsmo_708* ( ¦csisolatinZ ( �ecma_114P Aiso_É 6* P ( Q_1987- ( Rir_12#  ï  ( ñ /7/ß \greekg 7/ß /( olot_92( n ²  · P ( 	N  ß ( /(  W	( W§ ( W8W`hebrewXß 8W  ( ß (  ß - (  ß 3# x ß 9ß 5Ú ? 9ß · 9' ¾(   · - · 	(  · 4· ( l— œ   P Ø, ( YjohabVp1361× c ( ÿ /ms$ 
[ ikoi8_r\ s r] 0: ' &_r Ykz104w0kz_ 9  8 ( • ,rk#  “L $ "st& R_2002N H ¹ >'_1º # éNote that the ( ó is implemented internally in C and aG  lot fasterM nM rcharmapu Á1 which uses' CsameF Àencoding. Th} ðs why we discourag¬ e< 1 of> Z1C `› ¥lias it toØ ‚instead.-  'ã9  3: 'hBcp81î"   &  ƒp& =ibmM &  G	› & _p v¾ Þ' L ñ1ÜŸ& ðir_100'         ð: 'latin_1',
    'l1' 	 &   5 ) & P 	& s ñ# mac_cyrillic codec D'mac l  :  / 1',
, E [greekB  ? 3   B  	? {icelandA  C A  	C N2B ÐcentraleuropeH B - z0ent'  %  ƒ) :  #  ) [roman’ dintoshf , ‘  c  h  	ú {turkishi  j A  C 8bcs< Fansi6 | º4bcs  d    _   X xptcp154[ #cs ` 4: ' 	Wpt154"  c & ] & Ýb_asian/ 	L ¯qquopri_²  8  ˆ   2: ' / ô quoted_printablo+ 	*  c+ › hrot_13• Zrot13”  ? ) ˜‰shift_jiÞ!cs 6jisA 1: '  , Î  	& À 	( $ !( 5    x ð ; I_200? 0jis ¾ D 1 Á 2jis q  ssž  . Z £ :x02›£  ¤ I  v 2jis u  ÈD  ‘  -  . Z £ xtis_6207ctis620• D 3: '* 8 _) & D2529+ & �& ¦iso_ir_166œ 	& Ó hutf_16Ò 'u13 Ò ) Ñ =utf' 5: '% 	^ 9_bea  niÀbigunmarked'¢< 7_bed A_16bôˆ ( ð 
    # utf_16_lðe codec
    'uni ólittleunmarked' : 'utf_16_le',+  0le'9  ( )  # ; )32g (327 > < '32a ' % 	^ *_bÈ otf_32b� @32_bÅ 
? l?  Ü "32? 7Û 7Ú ?7Ú & Ú $ ŠP_1_1_A 1 $  8 8 8 % [ $ J $ H_ucsÌ$ 4r $ wcp65001"  3 � ë  u_›cî u5 H+ 3',
= Nzlib? =zip@ 6: '- 2  * ) j ò&temporary mac CJK aliases, will be replaced by properÔ �s in 3.1J ä'x_mac_japanesÉÄ: 'shift_jis� ) ekorean¥ š: 'euc_kr& ƒsimp_chiS …: 'gb231tL Jtrad& ñbig5',
}
""" Python 'ascii' C?�

WrittenÖ ò
Marc-Andre Lemburg (mal@l ð.com).

(c) Copyright CNRI, All R ð
s Reserved. NO WARRANTY.
„  
ift8R

###ˆ Â APIs

class (6!s.§ $):òNote: Binding these as C functions°`resultšBthe X 1not¤“# convertC ðm to methods. This  �ntended.4  en� # =» .E_ ! /de!  Ù ÁIncrementalEP ræ  #):W "f f ó
(self, input, final=False*  Foreturn¤ (8  E ¿.errors)[0]š  DÉ š  p Bdef ß š %> š `Stream¥1er(,i8cs. ” 5pasF ORead9  9 C#2er(I ‚ , < ¤ Þ !  ! 7  °ings module 

cð	getregentry():
    retur n codecs.C sInfo(
  Õname='ascii',  en2 =0 .  'de   ²incremental8 6r=I EX r/ J 	/ Dj / ástreamwriter=S W R # Eread# R # ð)
"""Python 'base64_Ï 1c' î 2 -  ñ content transfer Ð ¢ing.

ThisUA de/ òes from bytes to	 0.

¡ òten by Marc-Andre Lemburg (mal@l `.com).¡ ‚

importd s š S

###® “APIs

def¶ _Œ ñ
(input, errors='strict'):âcassert D ==    ‚return (m þÖ V c), len )} Ã } 2Q } Rclass(Çåê  oself, 
 þ ý N)& Z ž (Z "< 	� 2)

Ð 2Ý  ê ³final=False*  æ  º .$ ' 	
 °  ³°   † @° 8c=° :(÷,j. « òcharbuffertype =Ú
L cL  L  Ò©ò ings module API_Ãgetregentry(I ›ôÙÈÚ à ñ3=   Ü� Â ‚_is_textÛ 2ingüÅ ó )
#
# big5.py: 0UniGF‘ for BIG5+ ¼õHye-Shik Chang <perky@FreeBSD.org>
#·SDs_twYÃ`_multi• t ¢c as mbc

 &= : A.get  ('² '±a A ¡ð codec.encode
  °  decode =  "c. ð

class IncrementalEn! þ r(mbc.Multibyte  ?,
   @ >cs.4 !):5   ‰ ‚  Dª ‚   ‚ 4 ‚ 	ùStreamReader(Codec, ! ,G(s. ^ OWrit^ 
! ^  ^ ódef getregentry(& dreturn¥ Î QInfo(� ¹¶name='big5'Ieü=/ 2().  4   iE: .r=/ J 	/ ±/ sŸrŸ=v# wd# ;# `)
#
# ó ðhkscs.py: Python Uni– ú á for BIG5HKSCS5  G ð&ten by Hye-Shik Chang <perky@FreeBSD.org>
#

import _V Tcs_hkÓ m\# 0 asm"

 =: A.get (¯¼ $')8² (  !s. ƒgÌÿn  P ²
ÿØ[- $Cð  9   �3""" B'bz2¬'ñ- bz2 compression ÿ ¢ing.

This\A de/ €es from .Cs to	 ñand is therefore usable with
, Ð.transform() /  'un  .

Adapted‚òRaymond Hettingerz BzlibÄ ð.py which was writtòen
by Marc-Andre Lemburg (mal@l ô
.com).
"""

import codecs ¢bz2 # this ð needs the optional $ ð module !

### CD   APIs

def" 0_enZ ó(input, errors='strict'):
    assert D ==    °return (bz2¸ RpressP c), len )t /det 9 N mv Rclassü (x 1cs.	Ý  	oself, 
 ñ ?bz2>) W  š ?de(W 9 	Š 2)

Ê ÁIncrementalE½r×  ä ƒ__init__� ê ß î "  Ñ .A # =õ  "co’Pobj =hT.BZ2C Ar()
0  %|³final=FalseÂ  Z 1if  •    Ac = ‘ t ˆm  -   ¿>c +8 bflush(Â , Jelseo > r s  à QresetuË ? %òD;ò e  z òZ ³ô  –  	ö / Ýö?try‚ G _ 6bj. t…È xcept EOFEâQ &''•µd 	Üè ¹ÑStreamWriter(u,°(s. ´àcharbuffertypeDytes÷1 OReadL  L  rbings m2API�Ãgetregentry(I ð9UInfo([µname="bz2", b &e="  @d   iÙA .r=Ò/ J 	/  ‘6der/ sŒwŒ=M™# rc# U# ‚_is_textú2ing°! )²ð Generic Python Character Mappið
ng Codec.

    Use this c ñ directly rather than through the automatic> ðconversion mechanisms supplied by uniZ ¢() and .en °.


Written& ò
Marc-Andre Lemburg (mal@l ð.com).

(c) Copyright CNRI, All R òs Reserved. NO WARRANTY.

"""#"

importé bs

###
Â APIs

class (¥ 1cs.)"):*ð # Note: Bindingðse as C functions will result i:"e X 1not2"# 4tC ð m to methods. TŠÁis intended.4 5# =» ’.charmap_ #  de³ #  Ý ÁIncrementalE‰rê  #):Y óf __init__(self, errors='strict', mapping=None7  [ ’ >cs.[ .Q )p  9  g .U $ =_ †Bdef ø Ž øinput, final=Falsƒ oreturn8(: n Ô !,  { O)[0]: Dk:  ª é :![ :-:'@ :`Streamì1er(Q, e5s@ ,¡;¤t[ 4	P t#ÿ ’ ö Àví ò4 ,fc´ ORead) )B[ )3# ã ,õ »)9 4 ) ³ý°ings module¾ 

8Ãgetregentry(e Šq‘UInfo(kcname='Q%', f !e=2 Ã ª    idE .r=/ J 	/ ÷/ ¾rwriter=2[# rH# ÀReader,
    ðZ)
""" Python Character Mapping Codec cp037 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP037.TXT' with? cN P.py.
v ±#"

import  cs

###s ²APIs

class ($ .’ à):

    def en ñ(self,input,errors='strict'):,  0 creturno “.charmap_B = , ¦ing_table)o /deo -B 	o  o ú ÁIncrementalEç r ç  h Ã final=False*  Y.S4[0]¤� D"ª  €  ª ø e½ª !@ ä ª  Qª ÑStreamWriter(N,Ò8cs. ¤ 5pas‡ ORead9  	9  ÐJàs module API

ý Ãgetregentry(7 
¡ž UInfo(Âaname='‘%', d !e=0 2().     if: 'r=Ïy/ J 	/ ä/ spr7=D# w“#  # ")
[  –T” D5codä2 = '`'\x00'Þñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ & (9c& 4& dCONTRO› t   º 5" ôHORIZONTAL TABULATIONx "862 ê 60 
R 8x7f" 7" dDELETEC (97! 8! C (8d" 9" e" A"  (0b" B" oVERTIC× 0)C. “FORM FEED¸ rP +D$ åCARRIAGE RETUR%0ž E* †SHIFT OUÁ	'F$ IG 1V1Võ DATA LINK ESCAPT1b1bsDEVICE [6 ON- d1d- 3TWOö (x1i1i- 5HRE\ 9»1rÀONTROL
    '`\x85'  ð#  0x15 -> CONTROL
 X'\x08" 6" ”BACKSPACE$ (87$ 7$ F 1F 8" EANCEg (19C 9! ÔEND OF MEDIUMk (92( A( k (8f" B"  (1c" C" äFILE SEPARATORm (1d) D) _GROUP*  e* E* oRECORD+  	  F+ NUNIT) '80T  20) ë 1" 1" //22" 3D 3" 4" 4" n  !  F2F•LINE FEEDL$2HáõTRANSMISSION BLOCK4 bZ X XVESCAPyW2W
¿8X2XEae R	‡ R8R2Rf 0i2KtENQUIRYí (06ˆ C¥ACKNOWLEDGò 0G>5BELG943494341‰ 34õ SYNCHRONOUS IDLŽ 9=3=9=3= (x93=<9‘ ;" 0f )>]j96369636963696361¶ 6dDEVICE„F FOU�	(BŸNEGATIVE ) 9’3O51Ã K“SUBSTITUTâ “ Û4Q	ûaq4O™NO-BREAK ) eŠ4VôLATIN SMALL LETTER A WITH CIRCUMFLEX´e,4j? •DIAERESIS> 	¦ †> CGRAV 8\xe/4ž: %AC:8\xe4¶: FTILDt ê4Î: ‡RING ABO³ #4ß? À LETTER C WIðTH CEDILLA
    '\xf1'
 ô #  0x49 -> LATIN SMALL LETTER N WITH TILDE: (a2: A: ’CENT SIGN$ .! #  ^ B$ ’FULL STOP$ <$ C$ —LESS-THANM () D) âFT PARENTHESIST ++ E+ GPLUSO |$ F$ ÃVERTICAL LINè &(  50( ’AMPERSANDp B\xe9' F 51$ F EFCACUT^ H\xea: 2: ¥CIRCUMFLEXy b? 3? VDIAER'H\xe8> 4> FGRAV· d: 5: Iñ e: 6: ñ  f? 7? ñ c> 8> 	ñ dx (òSHARP S (GERMAN)§!u 5,òEXCLAMATION MARK+ $+ 3gDOLLAR½*& 5sASTERISI )# /ORIGH0 ;, 0ƒSEMICOLOÌ9\xa<0(NOï-G 6+³HYPHEN-MINUž/' .TSOLID" 8\xc\6PCAPIT¡˜Aa'"c4f ‘6A )(c0@ @ 	+cS6< 	(c3x < 	‘(c5< < †RING ABOÕ(c7A A Cv
Jd÷ "> L6z  ¢BROKEN BAR," E6CCOMMË%  ;PER”_' 7LOWó># |GREATER–?, KQUESØ8\xfl7# O[ STþ ù 8\xc^70; Z`àca'     #  0x7ð'2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
    '\xcb'
 � #  0x73A •DIAERESIS@ 8@ 4@ UGRAVE< d< 5< I½ FACUT< e< 6< ù  fA 7A ù c@ 8@ ù `9 #  u9<   r ACCENT :' A' RCOLON  #  B  £NUMBER SIG& @& C& ÂCOMMERCIAL An 1"'"• D( “APOSTROPHw=M E% gEQUALSs "& F& âQUOTATION MARKÂ 8\xd> 80) ¿O � KŒ af &81= ESMALúAl çà 8+	/ B/ Ý/ 	/ C/ É/ 	/ D/ ¼/ û	/ ë ª/ î	/ F^ gÜ	/ G/ h/ Ë	/ H/ i/ ¾µ	/ I/ 3\xa{b8ÆÿLEFT-POINTING DOUBLE ANGLE (bD êORIGHE "f0» ‰ 	¸  ô ETH (ICELANDIC)Æ fã= =  Y¨	ªfî: 3:  _THORNy (b1¶ L˜PLUS-MINUv8\xbà 9MgDEGREEœjM K96Jø k/ 6Ñl/ 6L^ m/ 6M/ n/ 6úo/ 6O^ p/ 6P/ q/ 6Q/ r/ 6R/ 3\xaà696ðFEMININE ORDINAL INDICATOR
    '\x@ba'  ð#  0x9B -> MASCULINE ORDINAL INDICATOR
+ X'\xe66 C6 ôLATIN SMALL LIGATURE AE2 (b82 D2 tCEDILLA" cT E" T oCAPITAV (a4V F4 ÔCURRENCY SIGN\ 'b5(  A0( WMICRO% ~" 1    A1% CTILDÃ s  2  ¡ õ rETTER St t/ 3/ T/ u/ 4/ U/ v/ 5/ V/ w/ 6/ W/ x/ 7/ X/ y/ 8/ Y/ z/ 9/ Z/ B\xa12 ˜A/ ô
INVERTED EXCLAMATION MARK4 (bf4 ×4 MQUES1 (d01 Ò~ß ETH (ICELA)p (dd? ß? ³Y WITH ACUTXH\xde< ù{ _THORN} aA §REGISTEREDã^h ãBóCIRCUMFLEX ACCEN‘B\xa3/ wBHPOUNQ 8\xaYB7YENt H\xb7H –MIDDLE DOm 9% þ™COPYRIGHTN aN ø1SECÏ	ñMBðyPILCROWN (bcw è¢VULGAR FRAV ¥ONE QUARTEþbíBï6 DHALF b£Bó3 ETHREk F[Ÿ ²ý`LEFT S” ƒE BRACKEG]. ÷C/  8\xa&BõUMACRO8a¶B×ƒDIAERESI¢ 8\xb„B¿ßOd¹¥pMULTIPL[ ÀÀ{É C©÷ ZCURLYö A- ª}kB1 ¶1 B¿C1 Ä1 C1 D1 Ð1 D1 E1 Ø1 6F1 â1 ƒG1 À 0xC7 -> LATðIN CAPITAL LETTER G
    'H'   î#  0xC8 -> LAT1 H1 I1 91 I1 B\xad4 b A1 ´SOFT HYPHEN& (f4& B& ˆ ESMAL· õO WITH CIRCUMFLEX? 6? C? •DIAERESIS> 2> D> UGRAVE: 3: E: FACUT: 5: F: CTILD: }7 1   Q D0: òRIGHT CURLY BRACKET¢ J. 1. YJ1 K1 21 K1 L1 31 L1 M1 41 M1 N1 51 NO1 61 Ob P1 71 P1 Q1 8Q1 R1 8R1 B\xb94 ç8ÓUPERSCRIPT ONH\xfb* <U<c? <? <	§ <> 
<ax <: 
<f: <Yñ ² \< @E@ÖEVERSE SOLIDU7, ƒE<ÃDIVISION SIGoS% ’E3Y T1 3ÆU1 3U>V1 3V1 W1 3W1 X1 3¤Y1 3Yb Z1 3Z1 8\xbÈE3#TWð8\xdoE3qdqE5A …)xd« 7@ 	9duE9< ÀER O WITH ACàUTE
    '\xd5'
 ó #  0xEF -> LATIN CAPITAL LETTER O WITH TILD< 09 "  <  F0< ¢DIGIT ZEROa 1% 1% #ONI 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOUR“ ñ ¸ 5% #IVJ 6J 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& $NI)3\xb® FA% ÖSUPERSCRIPT TB\xdbT , B, ÚUÚ“CIRCUMFLEÞ H\xdcA CA ’DIAERESISÒ 3\xdÕ � D@ 4GRA~H\xda| E< 'ACÓ(9f< ÓóCONTROL
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð! cp1006 generated from 'MAPPINGS/VENDORS/MISC/CP-  .TXT' with7 ‰ P.py.
o ±#"

import  sÌ l ÁAPIs

class  ($ . 1):
•Adef í ñe(self,input,errors='strict'):,  creturno B = , 4ingC  o 8o *B 	o  o ú ±Incrementalã$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DZª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  œ�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±bname='Š%', e !e=1 2().     ig: 'r=Ðz/ J 	/ å/ sqr8=E# w”# ¡# ")
[  �ðTable

decoding_ðtable = (
    '\x00'
 õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þP3[“DIGIT ZER¡ø% `% òï$ Y$ éæ$ À33 -> DIGIT ÐTHREE
    '4'   ò#  0x34 -> DIGIT FOUR% 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& 3NIN• :% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, F, ÒQUESTION MARK@(  40( ÃCOMMERCIAL A4A( 1( òLATIN CAPITAL LETTER AY B1 21 B1 C1 31 C1 D1 �“ D1 E1 �1 F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 Ob P1 51 P1 Q1 Q1 R1 ;S1 Sb T1 ÔU1 Ub V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ 5ãREVERSE SOLIDU¯])  * R¦Y ^/ óCIRCUMFLEX ACCEN… _, ÿEOW Lß`# 6ñYGRAVEJ ða'        #  0x6ð1 -> LATIN SMALL LETTER A
    'b'   #  0x62/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ E/ f/ 6/ F/ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ ðQ/ r/ ðR/ s/ ðS/ t/ ðT/ u/ ðU/ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðóEFT CURLY BRACKEG|- îÃVERTICAL LIN0}( çORIGHV ~. æCTILDN 3\x7�:7×UDELET! "80D ! 8É’<control>è H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ a$ [$ êŒP$ ß$ G$ Ô$ C$ É$ 9$ =8=$ 9@9@9@9@Àcontrol>
   € '\x92'  ð#  0x92 -> <control>
  $ 3$ 3$ 4$ 4$ 5$ 5$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ A$ b$ B$ c$ C$ d$ D$ e$ E$ f$ F$ 'a0$  A0$ ãNO-BREAK SPACEýAu06f+ ! A1) ÷EXTENDED ARABIC-INDIC DIGIT ZERO; 1f ; \; 	(ONu ˜: r: 	(TWt ®: ˆ: 
8HREv Æ<  < 	GFOURë Ý; ·; 
(IVv ô; Î; 	7SIXu 
: ä: 
GEVEN< "< ü< 	WEIGHT< :< < 	(NIÙ0	; +Ef COMMAb 1T' .' „SEMICOLOÉ (xa5A5˜SOFT HYPHï 1Q 7Q ÔQUESTION MARK€ 7fe8ºB/ ÷LETTER ALEF WITH MADDA ABOVE ISOLATED FORML £ { BjL  ; ï; |;  \FINALs 8 y8 &Bw
8 ?BEHå 91Bw:  LNITI« &b5þBt
9 Ps &b5ÂBs:  s &e9#Bq
9  TE×_RBUTAî îByB Ò9³Bw:  µ 'b6(t9  ¶ t &b6)ÀBB -> ARABICõ+ LETTER TTEH INITIAL FORM
    '\ufe99'   #  0xBC -> ARABIC: H: |SOLATED; b; D; u d: E: oJEEM Iu f; F; u 5b7a: .C0: /TCë 6b7c< 1< w 6ea1; 2; ?HAHë &a3: 3: s 59 49 Kt 	7; 5; u I.C6: ?DALè 6b84t 7: H< NÀa….C8= T< ; †.C9; Rú'b8A:  ; &eaÀ.CB; OZAIN(Á« J° 'eb„ª ?SEEu 'eb…« ; b†ª /SHv 	‡D¬ < w ˆD« ?SAD`&ebKDª : s ID© Ds Dª : s cÒD¨ TVc—D¨ Z: Z¨ º&ecºD¥  : =FINœc‘¡  7 Õc D   9 >MEDcÉ�  GH: ™%ceÆDž < æ � 9 è &d0t �ÀBIC LETTER Gü6HAIN MEDIAL FORM
    '\ufed1'   #  0xDF -> ARABIC LETTER FEH ISOLATED: 3: /E0: ?NITs  59 19 ?QAFs 7: 2: s 99 39 Ks b: 4: s 6b929 59 Gs 6b94: 6: s 6edd9 79 ?LAMYf: 8: s &e09 99 wew.EA8 ?MEE¬ exB; ­ 6b9e­ C: ¿NOON GHUNNA(e»DB /e¼E; · 'e8u £ ÿWAW WITH HAMZA ABOVEÀ "F´  K ¿ 5ba6<Fµ �HEH GOALy 6ba8? º ? &ba¿F¿ > k6baa{ Â  = ¯DOACHASHME:8éFÏ |<'e8¿ Ñ ?YEHÁ8Í ã K =FIN÷8×Fñ H Iœ&efÊF  J f"F  : » f F   7 ª 'bbÃÿ  9 oBARREEŽ&baQF R &7cœ_SHADD†7Æ6 ÀFORM
)

### óEncoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð* cp1026 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP6  .TXT' with@ ’ P.py.
x ±#"

import  rs

### u ²APIs

class ($ . Á):

    def ö ñe(self,input,errors='strict'):,  0 creturno B = , 4ing(C  o Ao *B 	o  o ú ±Incrementalì$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� Dcª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  Ð�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±bname='“%', e !e=1 2().     ig: 'r=Ðz/ J 	/ å/ sqr8=E# w”# ¡# ")
[  ™Tð
~ å2 = (`'\x00'.ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ & (9c& 4& dCONTRO› t   º 5" ôHORIZONTAL TABULATIONx "862 ê 60 
R 8x7f" 7" dDELETEC (97! 8! C (8d" 9" e" A"  (0b" B" oVERTIC× 0)C. “FORM FEED¸ rP +D$ åCARRIAGE RETUR%0ž E* †SHIFT OUÁ	'F$ IG 1V1Võ DATA LINK ESCAPT1b1bsDEVICE [6 ON- d1d- 3TWOö Àx13'     #  ð0x13 -> DEVICE CONTROL THREE
    '\x9d'
 € #  0x14/ ( " (85" 5"  (08" 6" …BACKSPACh (87$ 7$ h 1F 8" TANCEL‰ (19C 9! ÔEND OF MEDIUM( (92( A( k (8f" B"  (1c" C" äFILE SEPARATORm 1@D) _GROUP*  eS E* oRECORD+  	  F+ NUNIT) '80T  20) ë 1" 1" //22" 3D Sf 4" F n   h2F•LINE FEEDL$2HáõTRANSMISSION BLOCK4 bZ À2XVESCAPyW2W	C 8X2Xß ae R	‡ R8R2Rf 0i2KtENQUIRYª (06ˆ C¥ACKNOWLEDGò 0G>5BELG943494341‰ 34õ SYNCHRONOUS IDLŽ 9=3=9=3= (x93=<9‘ ;" 0f )>]j96369636963696361¶ 6Î6FOU�	(BŸNEGATIVE ) 9’3O51Ã K“SUBSTITUTâ “ Û4Q	ûaq4O™NO-BREAK ) eŠ4VôLATIN SMALL LETTER A WITH CIRCUMFLEX´e,4j? •DIAERESIS> 	¦ †> CGRAV 8\xe/4ž: %AC:8\xe4¶: FTILDt ê4Î: ÀSMALL LETTERð A WITH RING ABOVE
    '{'   ò#  0x48 -> LEFT CURLY BRACKET- B\xf10 - 9- òATIN SMALL LETTER Nl CTILDg H\xc7: A: eCAPITA< C< rCEDILLAx .; 2   x B> ’FULL STOP$ <$ C$ âLESS-THAN SIGN) () D) âFT PARENTHESIS+ ++ E+ GPLUSO !$ F$ òEXCLAMATION MARKO &+  50+ ’AMPERSAND$ B\xe9' ë  51$ LcE'EACUTc(ea: 2: ¥CIRCUMFLEXy b? 3? VDIAER*H\xe8> 4> 4GRA�H\xed: 5: Iñ e: 6: ñ  f? 7? ñ c> 8¨· 	ñ dx EóSHARP S (GERMAN)§Au011÷  IG15BREkPu0130¶ < G\…¶ 8DOT,*;  +‡5csASTERISã)# ]ORIGH^ ;, ^ƒSEMICOLO­^$ ^Êc ACCENž-, 6_³HYPHEN-MINUÕ/' bTSOLID" B\xc2% (6J(U‘ ¥8xc4A LA ]c§ð6N@ 	_c¤6P< 	C(c3¸ R< 
â5< O< Š[> å6R ŠlSQUARE‹dç Fo � Au015„àD	ÇSB	‹,¦ DCCOMM«%  $0PER§6_' (sLOW LINÐ># |GREATERÔ?, 'ÐQUESTION MARK°
    '\xf8'
 ô #  0x70 -> LATIN SMALL LETTER O WITH STROKE; (c9; 1; eCAPITA= E= FACUT< a< 2< ¥CIRCUMFLEX} bA 3A •DIAERESIS@ 	ø 4@ FGRAV½ d| 5< Iù e< 6< ù  fA 7A ù c@ 8@ ù Pu0131> -9< 	-’DOTLESS Il:2 dA7 RCOLON  B\xd6# W B  „I†Ó Au015V@ C@ S�qCEDILLA~ 1"'"› #  D> 0APOë#PHó=  % E% ¦EQUALS SIGÉ 	\F& É U‰ É (xd•8�	 ¤ �P£ 8�	�÷ '>/ ‚	/ B&'Ø / p	/ C/  / _	/ D/ ½‡Â8R	/ Ž^ E	/ F^ g½83	/ G/ h/ "	/ H/ i/ 3\xa{ë òLEFT-POINTING DOUBLE ANGLE QUOTATION MARKs 9\xbD 1ORIGHE }¸ 6E â CURLY BRACKETs `. &c ACCEN' 8\xaË8(B4RN BARL 1\xbEr8'šPLUS-MINUQ"b0y -9gDEGREEwj# 9úJ k/ úml/ úL^ m/ úM/ n/ úbo/ úO^ p/ À7 -> LATIN SðMALL LETTER P
    'q'   ø#  0x98 -> LATIN S/ Q/ r/ 9/ R/ B\xaa2 ^ A/ õ
FEMININE ORDINAL INDICATO5 b5 B5 oMASCUL6 
(e6k C6 	É ¤IGATURE AE� (b82 D2 tCEDILLA" cT E" T žCAPITAL LV (a4V F4 ÔCURRENCY SIGN\ 'b5(  A0( YMICRO% f�  A1% � 	žòO WITH DIAERESISc s` 1   ~/A2> / t/ 3/ T^ u/ 4/ U/ v/ 5/ V/ w/ 6/ W/ x/ 7/ X/ y/ öY/ z/ öZ/ B\xa12 xöô
INVERTED EXCLAMATION MARK4 (bf4 õ4 KQUES1 ]. ÝðóRIGHT SQUARE BRACKE®$/ ígDOLLARp@& ñÃCOMMERCIAL AN B\xae+ â å§REGISTEREDR G\xa2* BçJCENT$ 3$ æKPOUNI 0BÍ9YENH (b7H Á–MIDDLE DO» 9% ·CCOPY<¡aN ±1SECˆ	È£B©zPILCROWœ cw ¡¢VULGAR FRAV @ONE ¼&TEd6 ¨6 EHALFI›B¬3 ETHREk ÿ9\xa¢ ¶(NO©|Œ tB¥ ×!ICNZaÍBœUMACROýa{BŽ
¾8\xbIBŒ€ACUTE ACBð d§‹pMULTIPLV g®e. C�Q CQ	Aþ C§< \?B1 ³1 BÌ C1 Á1 C1 D1 Í
1 ÀLETTER D
   S 'E'  ð#  0xC5 -> LATIN CAPITAL LETTER E
) +'F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 B\xad4 õ A1 ´SOFT HYPHEN& (f4& B& ESMALòO WITH CIRCUMFLEX? ~< 2   e C? CTILDIB\xf2#   D  _ FGRAV: 3: E: FACUT: 5: F: ® Pu011f< ® /D0: G4BRE® J5  ;&D1: bJ9K1 21 K1 L1 31 L1 M1 41 M1 N1 &<O1 &Ob P1 &P1 Q1 &Q1 R1 &R1 B\xb94 ó&ÖUPERSCRIPT ONWb* *U*"\\= *D* A´RSE SOLIDUS“ f“ 4i 
4af Í 4: 
4øž 4YÝ †DIAERESI² cx E8x > 7> <ÃDIVISION SIGoS% lE3— T1 3TzU1 3U1 V1 3V1 W1 3W1 X1 3’Y1 3Yb Z1 3Z1 8\xbÔE3#TWð8\xd]E3_#œ 5gNUMBER9\xd‘ ð D -> LATIN CAPIðTAL LETTER O WITH GRAVE
    '\xd3'
 þ #  0xEE -> LATIN CAPI< FACUT< 5< F< CTILD< 09 "  x  F0< ¢DIGIT ZERO� 1% 1% #ONI 2$ 2$ #TWH â m 3$ 3HREJ 4J 4& BFOUR“ ñ K 5% IU6J 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& $NI)3\xbê FA% ÖSUPERSCRIPT TB\xdbT , B, UR“CIRCUMFLEÞ "> 'CA âQUOTATION MARK» 3\xd¾ j D) j 	
¼ah < ¼¦ 	¼(9f< ¼óCONTROL
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB À for CP1125
/ ²#"

import b Œ , ÁAPIs

class  ($ . 1):
UAdef ­ ñe(self,input,errors='strict'):,  ûcreturno Ñ B = , †ing_map)m ö m *B 	m   m p)ø ±Incremental¡$er å  h Ã final=False*  W.Q
?[0]¨  D¨  ~  ¨ ö L¨ !@ â ¨  Oª ÑStreamWriter(J,W ¤ 5pasƒ ORead9  	9  XFàs module API

ý Ãgetregentry(7 
�ž UInfo(¾€name='cpB%', e !e=1 2().     ie: .r=^/ J 	/ å/ sqr8=E# w”# ¡# ¢Z  K0MapB}àmap = codecs.mð0ake_identity_dict(range(256))
decoding_map.update({
    0x0080: @410, ö #  CYRILLIC CAPITAL LETTER A5 "1:5 15 &BE6 26 26 V6 36 36 'GH7 47 47 D6 56 56 I6 66 66 Z£ 77 77 m 86 86 I{95 95 gSHORT ; a; a; K"b6 b6 &EL§ c6 c6 M6 d6 d6 N6 e6 e6 O5 f5 f5 P³9d2d%ERl 9e2e&ES6 e2eT¢ e2eUk c2c&EF6 c2cHP9c2c'TSØ c2cCš9d2dS¥ f2fC9 d2d†HARD SIGÉ9k2k7YER¿m2mKSOFTu t2tûs2sY¨ t2tY1at3t OSMALÖ aq3q 	3 Ôao3o 	4 Òam3m 	4 Ðam3mÀ#  CYRILLIC ðSMALL LETTER DE
    0x00a5: @435, Ù #  CYRILLIC 4 I4 64 64 'ZH5 75 75 4 84 84 IÐ 93 93 gSHORT 9 a9 a9 &KAm b4 b4 &EL4 c4 c4 M4 d4 d4 N4 e4 e4 O3 f3 f3 P£ b04 E25914 —LIGHT SHAg#b1' 2' lMEDIUM( 2( 3( LDARK& 3& 0N ÒBOX DRAWINGS ‚ vVERTICA{"b47 %24] 7 • AND LEFT b,6256ì 	@ q u SINGLEA g DOUBL4@?256¿ H 8 H X � S6255ˆ	� CDOWN| D c6255 D x D ˜ ˆ t6256µD  ÿ  × Y|?255Yp A y €6255Ty u ‰6255U= %UPø x �6255Ä	; /UPwž6255:B u­O2510Í	û cµ1	
ú RÏû cÉ3; ‡HORIZONT„cá2;»· B ý1B 
	mÃ 0:
z  3z F þ5™	ûº Á T‹ÿ¯
I ÀERTICAL DOUBðLE AND RIGHT SINGLE
    0x00c8: 0x255a, ö #  BOX DRAWINGS DOUBLE UPC < 9< 4< 
ODOWN> a> /69> 
z ¦HORIZONTAL bA 6A 
 C cC 0C 
�VERTICALÆ dB 5B | e: /6c| G fG 7G #UPó½ A ÚN#d0H 8H  LH Q#d1H /WN’ 2J 5’ Ù” 3J 5k#UP$(#d4C 	C œ b5C 2Ð E 6E 3E y Š V Š 7E /6bE ðI òC6CN † — N d œ U1iLÆFLEFT: Q0Q: 6 Ãç= M8w ¦FULL BLOCK& 08Ý¬LOWER HALF, 8�  ¯ + 9Ež , ð8, ?UPPƒ eÔ6044, õ	CYRILLIC SMALL LETTER ERã eÀE04414 S4 ª6044Ú4 Tye”6044É4 Ug „6044~3 &EF4 u6044E4 &HA4 d6044Y4 'TSÐ T6044ˆ5 'CH5 ;6044v5 SŸ "6044Î5 ÀTER SHCHA
  �  0x00ea: P44a,  ð#  CYRILLIC SMALL LETTER HARD SIGN
' ; b; b; FYERU6 c6 c6 KSOFTq d; d; En e3 e3 Y¢ f4 f4 Ah "f04 .014 eCAPITAI&IO6 16 56  	}4 24 /90j æGHE WITH UPTUR¹#f3C w A 4A /04„ ¶UKRAINIAN I–"f5@ 5@  	ø > 6> /06~ ×BYELORUSSIAN-M ‚7L 5L  	Š J 8J /07– &YI€ 96 56  	€ 4 ³&0b4 ¦MIDDLE DOTZ ž6221Ù˜SQUARE RO' �6211jNUMERO{f{'0a²{URRENCY) q625aŸbBLACK } Ÿ e0( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (U `'\x00'œ" #Û¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- 2TEXl x 3* 3* 0ENDU 	( 4( 4( ¢RANSMISSIO© X 50 50 UQUIRY¦ 6$ 6$ ¢ACKNOWLEDGt L 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  c9& pHORIZONävTABULATÅ n2 a2 •LINE FEEDÇ b( »b& �VERTICAL V :x0c0 c0 HFORMV r$ ® d& µCARRIAGE RE !e. ‚ e, †SHIFT OUëf& f& I¸1ˆ1ˆõ DATA LINK ESCAP™1”1”öDEVICE CONTROL ON/ 
–1–/ "TWcJ'\x1›À13 -> DEVICEð
 CONTROL THREE
    '\x14'
 õ #  0x0014 -> DEVICE1 EFOUR0 50 50 öNEGATIVE ACKNOWLEDGa 61 ö6 -> SYNCHRONOUS IDL- 7- 7- õ
END OF TRANSMISSION BLOCK” 86 86 eCANCEL# 9# 9# Y eMEDIUM* a* a* –SUBSTITUTª b' b' VESCAP# c# c# ÖFILE SEPARATOVd+ d+ _GROUP,  e, e, oRECORD-  f- f- LUNIT+  ( $  
 20+ CSPACÑ !" 1" €EXCLAMAT–3MAR•"- 2- LQUOT+ #+ 3+ ²NUMBER SIGN›$( ¬HOLLA( %( ¤wPERCENTQ &) œ‘AMPERSANDw 1"'" •“APOSTROPH(M †ñLEFT PARENTHESIST -')- �ORIGH.  *. ”sASTERISq+% ’GPLUSó ,& •RCOMMA› -" Œ³HYPHEN-MINUÄ .) ‰’FULL STOPO /& ‚TSOLIDJ 0$ 3{¢DIGIT ZEROK 1' €' #ONˆ2& y& #TWL 3& t&  ý3t› ' sO 3FIVœ 
' q' 2SIXè & q& 3EVEõ( r( EKP ú( m( $NI9:fCCOLOq ;" cGSEMI& <& c—LESS-THANŽ=+ lXEQUAL¶>( k|GREATERV ?. sKQUES¥@* 4y ’ERCIAL ATDA* |óLATIN CAPITAL LETTER IB3 ‰3 Bf C3 –3 C3 D3 ¡3 ÀPITAL LETTER  D
    'E'   ò#  0x0045 -> LATIN CAPITAL LETTER E3 F3 63 F3 G3 73 G3 H3 83 H3 I3 93 I3 J3 a3 J3 K3 b3 K3 L3 c3 L3 M3 d3 M3 N3 e3 N3 O3 f3 O3 P3 /503 P3 Q3 13 Q3 R3 23 R3 S3 33 S3 T3 43 T3 U3 0U3 V3 0V3 W3 0W3 X3 0X3 Y3 0Y3 Z3 0Z3 [3 0óEFT SQUARE BRACKEb$\\1 ’5-ãREVERSE SOLIDUÁ]+  , &ORIGH] ^1 $óCIRCUMFLEX ACCEN‹ _. cOW LIN`% 6YGRAVEN a) ESMALiA:b1 	1 B1 c1 	1 C1 d1 	1 /e1 ÿ	1 f1 ý	1 +g1 û	1 )h1 ù	1 'i1 ÷	1 %j1 õ	1 #k1 óU	1 !l1 ô†	1 m1 ù1  ðn'        #  0x0ð06e -> LATIN SMALL LETTER N
    'o'   Ÿ#  0x006f1 O1 p1 /701 P1 q1 11 Q1 r1 21 R1 s1 31 S1 t1 41 T1 u1 51 U1 v1 61 V1 w1 71 W1 x1 81 X1 y1 91 Y1 z1 a1 Z1 {1 b1 óEFT CURLY BRACKEU|/ c/ ÒVERTICAL LINEY }* d* ORIGHZ ~0 CTILDR B\x7f% ÷7÷TDELET# Pu0410% # 8éàCYRILLIC CAPIT§ PA« \6 16 î6 Bm 27 ô7 V7 37 ú7 (GH8 48 8 6 Ý 57 7 In 67 7 Z¦ 78 8 o 87 7 I¹96 6 hSHORT < a< *< K,b7 07 'ELª c7 87 M7 d7 E7 !Ñe7 L7 &6 b=`6 P»2t9t
E n 2u9u
E7 u9u
2u9u
m s9s
&EF¶2s9s
ðHA
    '\u0426' ö)  #  0x0096 -> CYRILLIC CAPITAL LETTER TSE
    '\u0427' 8 78 	(CH8 88 88 	7SHAp 98 98 C: a: a: 	—HARD SIGNx b> b> 	GYERU9 c9 c9 	LSOFTw d> d> 	]e6 e6 	Y« f7 f7 
“'307 )a07 ESMAL9A(314 14 B× (325 25 V5 35 35 GŸ(346 46 Dk 55 55 I5 65 
y	>Z  waw
6 k tat	5 I©pap	4 hSHORT : pap	: Kgag	5 'EL¤ cac
5 M5 ZaZ
5 3YaY	5 Oi VaV	4 P«8259 bT–LIGHT SHAs8259bHmMEDIUM) b<LDARK' 0P .ÒBOX DRAWINGS … uVERTICAƒ82520b08 ” AND LEFT&9256ñ <	A s u SINGLEB g DOUBL:6Â PI 9 I Y ’ 5™bc	I CDOWN~ E bsE z E š Š 6¼„E   #^5^ŒB ÀWINGS DOUBLE÷8 VERTICAL
    '\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT> d> c> ?UP <  c< d< $UP} < w SINGLE bC eC 3  S C (10C fC _LIGHTÿ '14= /c0= þ RJ y 3< 1< ˆHORIZONTº2@/c2A ¹C 1C 3C 5EÆ 0?/c4B | 3| 5: 	| G (5eƒ6G A 	Ä 
(5fJ 7J  –J [ Û(5aJ 8J A 59= Øƒ | (69| a? | R(66B D 	�LÉ 5C E~ 	[; 	~ H c#UP’B ['68Sd(
ëI Z6d55 ” 5” ?K * Ÿ– 5tdG
ß ±9ï	#I
lD ž D 2Ó SÓ F 3F RF { dF W Œ 6›dNc6SdSÌˆ ™ O ÀNTAL DOUBLE
õ,    '\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
; (0c; a; ADOWN= RJ > 8y b> §FULL BLOCK' 4e c' ­LOWER HALF- 	’ d- ?EFT, (90Y e, ¢ - 8- f- ?UPP† 8044-  e0- ô	CYRILLIC SMALL LETTER ERè G0441� /e15 S5 25 25 'TE5 35 35 U4 †/e44 'EF5 5i 55 'HA5 65 65 (TSÔ 76 76 (CH6 ƒ/e86 S¢ 9l 2ß9SHC8 a8 /8 —HARD SIGNb< -< 8YER·e=7 LSOFTs ds L< Qe4 T4 Y¥ f5 \5 '0/fdeCAPITAf&IOH57 f5 	*ffl çGHE WITH UPTURÁ9y uB 0ƒfƒ† ·UKRAINIAN I�5A �? 0™f™€ ×BYELORUSSIAN-N ˆ	M °K 0ûfÅ˜ 'YI‚ 	7 Æ5 !xb3 -fÃ–MIDDLE DO(21êf®—SQUARE RO( )11ŸhNUMERO‹!xa¸w ‹xURRENCY* Hu25a{f�ðBLACK SQUARE
    '\xa0 '  ó##  0x00ff -> NO-BREAK SPACE
)

### Encoding Map

e �_map = {
F  C 100:K 000, † #  NULL  1  1  öSTART OF HEADING, 2, 2, FTEXT) 3) 3) 0ENDS 
' 4' 4' ¶RANSMISSIONV 5/ 5/ VQUIRY# 6# 6# ¶ACKNOWLEDGE' 7' 7' (BE8  8  2ACK€ GZ9% 9% ùHORIZONTAL TABULATÀ a1 a1 –LINE FEED› b% b% oVERTICT c/ c/ KFORMT d% d% çCARRIAGE RETURde+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAP�1„1„÷DEVICE CONTROL ON. †1†. 5TWOP1‹1‹. 7HRE^ ”1”0 FFOUR_ ”1”ŸNEGATIVE z1¡1¡÷ SYNCHRONOUS IDL‹ ¦1¦Ff BLOCK‘ »1»VCANCEò1¸1¸W fMEDIUMK °1°—SUBSTITUT¦ ±1±ß¤1¤ÇILE SEPARATON©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶
õ2«2«aEXCLAMëF MAR‹2©2©OQUOT* ¥2¥¦NUMBER SIGT2œ2œLOLLA' ”2”{PERCENTO Œ2Œ†AMPERSAN�2…2…–APOSTROPH2v2võLEFT PARENTHESISW2€2€ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3kð 30,     #  DIGIóT ZERO
    0x0031: , Ö #  DIGIT ONE% 2% 2% 'TWJ 3% 3% 7HREL 4' 4' FFOURr 5& 5& 'IVL 6& 6& 6SIXK 7% 7% FEVEN' 8' 8' VEIGHT' 9' 9' (NI1a& a& GCOLOn b! b! KSEMI% c% c% ×LESS-THAN SIGO d* d* kEQUALS' e' e' GREATERT f- f- ÕQUESTION MARK"40) %40) ÆCOMMERCIAL A<4l%41) öLATIN CAPITAL LETTER A[ y4y2 B2 †4†2 C2 ‘4‘2 D2 �4�2 ©4©4©2 Fd ¶4¶2 G2 Á4Á2 H2 Ì4Ì2 I2 Ø4Ø2 J2 é4é2 Oö4ö&Ld þ4þd M2 	4	2 b442 552 P– 5 5 Q2  5 Y5 5 Sd  5 è5 5 Ud  5 V2  5 W2  5 :5 5 Yd  5 Z2  5 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸ð 5d,     #  RIGHóT SQUARE BRACKET
    0x005e: , ÷ #  CIRCUMFLEX ACCEN- f- f- …LOW LINEQ "60$ %60$ \GRAVEL #61( 1( öLATIN SMALL LETTER AX 20 20 	B0 30 30 	C0 40 40 	D0 50 50 	60 60 	F` 70 70 	G0 80 80 	H0 90 90 	I0 a0 a0 	J0 b0 b0 	K0 c0 c0 	L0 d0 d0 	M0 é/6e0 	N0 ì6ì O0 7ø7øÐ P0  7 
Q0  7 
R0  7 
S0  7 
7 7 
U`  7 
V0  7 
W0  7 
X0  7 
Y0  7 
Z0  7 �EFT CURLY‡7þ7þŠVERTICAL_7÷7÷ORIGHX ö7öFTILD—7ç7çVDELET" aÙf" ×NO-BREAK SPAC* Cfœ ÆCURRENCY SIG\bÜfL•MIDDLE DOb#40"fRàCYRILLIC CAPIT'Iˆ$40… È6 µUKRAINIAN IÅ #40¨f¨@ ×BYELORUSSIAN-M $40è ”L Yj#41q8ø #41-8OÀCYRILLIC CAPðITAL LETTER BE
    0x0412: @082, ø #  CYRILLIC CAP6 V6 36 36 'GH7 47 47 D6 56 56 I6 66 66 Z£ 77 77 m 86 86 I{95 95 gSHORT ; a; a; &KAq b6 b6 &EL6 c6 c6 M6 d6 d6 N6 e6 e6 O5 f5 f5 P³"206 /906 %ERl #216 16 S6 e9eT¢ e9eUk c9c&EF6 c9cHP2c9c'TSØ c9cCš2d9dS¥ f9fC9 d9d†HARD SIGÉ2k9k7YER¿m9mKSOFTu t9tûs9sY¨ t9tY13tat ESMAL¡3 qaq 	3 Ô3oao 	4 Ò3mam 	4 Ð3mam 	5 Î3kak 	4 Ì3iai 	4 Êð 37: 0x00a7,    ð #  CYRILLIC SMALL LETTER ZE
    0x0438: @0a8, 4 I3 93 93 gSHORT 9 a9 a9 &KAm b4 b4 &EL4 c4 c4 M4 d4 d4 N4 e4 e4 O3 f3 f3 P£"404 /e04 %ERh #414 14 S4 24 24 Tœ 34 34 Ug 43 43 &EF4 54 54 H:#464 64 'TSÐ 75 75 'CH5 DeDSŸ FeFC7 DeD†HARD SIG¯4KeK7YER¯MeMKSOFTq TeTéSeSY¢ TeTY5 f I¼5¹f…¶UKRAINIAN I%5�fZ×BYELORUSSIAN-K $5¤f:Y{9DfÜ eCAPITAæGHE WITH UPTUR?93ëA 4211JhNUMERO63221âf§³SQUARE ROOT3250Ò cGôBOX DRAWINGS LIGHT HORIZONTA3250çbÈ 9  hVERTIC7 dy7   DOWN AND R ­ 1­ b£= 	6LEFé 1wcÿ<  !UPw ÀRIGHT
    0xà2518: 0x00d9,  ð#  BOX DRAWINGS LIGHT UP AND LEFT
& b0x251c: /c3: 	�VERTICAL@ RM A "24A /b4A 	� 2� 2@ 	ADOWN} ¥HORIZONTAL‚ 3‚ /c1B 	ý @ ‚ 5@ 		F  "50/cdF DOUBLE : 1: /ba: 
� ø "528 d¸ 4aSINGLE;¸ ˆ E 3E 6} #WN4 E V E ‚t  ‘  ‚Š > 5ƒ /b8ƒ r ƒ  ?“ D 6D 7D ‡  ‚ D T D 7D bD ÂÆ  D = ‚2UP o Ã Ä 9€ d‹#UP2 C T † aC cKÃ † < b< /beÿ 
Â  ý � B Ib
Á B À d„ c„ ÂÀ  B } e; cÉ?‡fI KI �  OJZ ’ 6Í P I B â; G ™6*bÓ H X � -bè—  Ò  H A )d«\u Í .Ó 5d7J Ï J ` ” ;c÷J C :/cf·
;A Õ E0H Ó ÀND HORIZONTAðL SINGLE
    0x2569: 0x00ca, ö #  BOX DRAWINGS DOUBLE UP AND HORIZONTALA aA /d8A tVERTICAy G ` N bN 7N ˜ 
• Ý cN /ceN E £ 
N • "80G %dfG öUPPER HALF BLOCK, 4, c, ?LOW, 8, b, LFULLR Å %dd& OLEFT} 9© ð ORIGH, 1} &b0W , FSHAD #92' 1' {MEDIUM ( 3( 2( KDARK& a¡ f¡ ð<BLACK SQUARE
}
""" Python Character Mapping Codec cp1140 generated from 'py6 "-m, @s/CP'  .TXT' with1 cA P.py.
i ±#"

import  cs

###f ²APIs

class ($ .… 1):
ó`def en ñ(self,input,errors='strict'):,  `creturno “.charmap_B = , ¦ing_table)o /deo -B 	o  o ú ÁIncrementalEç r ç  h Ã final=False*  Y.S4[0]¤� D"ª  €  ª ø e½ª !@ ä ª  Qª ÑStreamWriter(N,Ò8cs. ¤ 5pas‡ ORead9  	9  ÐJàs module API

ý Ãgetregentry(7 
¡ž UInfo(Âbname='„%', e !e=1 2().     ig: 'r=Ðz/ J 	/ å/ sqr8=E# w”# ¡# ")
[  ŠT• E5codå2 = (`'\x00'ß P _r -> NUL7  1 1 ñSTART OF HEADING[ + 2+ 2+ ETEXT( 3( 3( ðEND OF TEXT
    '\Px9c'  ð#  0x04 -> CONTROL
 2'\t  "  " 5" óHORIZONTAL TABULATION0 2x862 0 60 
R 8x7f" 7" dDELETEC (97! 8! C (8d" 9" e" A"  (0b" B" oVERTIC× 0)C. “FORM FEED¸ rP +D$ åCARRIAGE RETUR%0ž E* “SHIFT OUTN )x0'F$ IG "10s l 10# õ DATA LINK ESCAPT(11+ 1+ TEVICEð6 ON- 2- 2-  4TWO¨ (13- 3- 5HRE\ 9»1r 8x85Q rÿ(08" d…BACKSPACh 8E1fF 1F gDANCEû8x19g fÔEND OF MEDIUM9/l8Ì1l� `1`ÔILE SEPARATORm 1@e_GROUP*  e1eoRECORD+  	  lNUNIT) 8r2rÉ 8i2i" /2^" S2S" 4›2F n  �2FHLINE±(x1$2HáõTRANSMISSION BLOCK€72X
j8W2W	S(x8X2Xß a¿ Ù2R	‡ R8R2Rf 0i2KtENQUIRYí 0Í2C¥ACKNOWLEDGk0G>5BELG943494341‰ 34õ SYNCHRONOUS IDLŽ 9=3=9=3= (x93=<9‘ ;" 0f )>]j963696369636ð9b'     #  0x3B ð-> CONTROL
    '\x14'
 ô #  0x3C -> DEVICE) U FOUR. 5. D. ôNEGATIVE ACKNOWLEDGE/ (9e/ /E   a" F" “SUBSTITUTG  " "  ¤ !40% 3PAC  B\xa0# Ä  41  ¨NO-BREAK S) (e2) 2) ôLATIN SMALL LETTER A WITH CIRCUMFLEXÏ e,/43? •DIAERESIS> 	¦ 4> EGRAVà (e1· 5: %AC:H\xe3: 6: FTILDt ê/47: ‡RING ABO³ 7y 8? CjdEDILLA)fï 9< N< 	µ aàA: ’CENT SIGN^ .— MB$ ’FULL STOP$ <$ —LESS-THANM () ÆLEFT PARENTHÿ++ GPLUSO |$ ÃVERTICAL LIN�&( 5’AMPERSANDÄ B\xe9' 5ì EF
5”5&: & by &? &8> &> 
&d: &Iñ §5&: ñ  fy +? ñ c> *> 	ñ dx (òSHARP S (GERMAN) !u 5,òEXCLAMATION MARK+ $+ 3gDOLLAR½*& 5sASTERISI )# /ORIGH0 ;, 0ƒSEMICOLOÌ9\xa<0(NOï-G 6+³HYPHEN-MINU�/' .TSOLID" 8\xc\6PCAPIT¡>c>6A )c@6@ +À '\xc1'     ð(#  0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
    '\xc3'
  < 6< FTILD< 5< 7< –RING ABOVA 7A 8A C¹ tCEDILLA» (d1> 9> N> 	» (a6< A< ¢BROKEN BARa ," #  B% CCOMM� %  C  ÂPERCENT SIGNG _' D' sLOW LIN	># E# ÇGREATER-THANO ?, F, ÒQUESTION MARKw B\xf8+ Ú 70( ESMALO STþ ; (c9; 1; QE= 
Qa< 2< ¥CIRCUMFLEX} bA 3A •DIAERESIS@ 	ø 4@ 7GRA‘d| JIù e< J< ù  fA OA ù c@ N@ ù `9 ë7L  0 ACÐ\:' 7CCOLOë#  2gNUMBERÂ@& 8 X‘ERCIAL ATn 1"'"™• 90APO«#PH;=M ;gEQUALSs "& 5=OTA6d>86û8 ù± 88	s@ç/ +	/ B'Ý/ 	/ C/ É/ 	/ D/ ¼/ û	/ wª/ î	/ F^ g€8Ü	/ G/ h/ Ë	/ H/ i/ ¾ë I/ 3\xa{8Æ LEFT-POINT¥ÿ DOUBLE ANGLE QU(bD êORIGHE "f0» ‰ 	¸  ô ETH (ICELANDIC)Æ fãÀ  #  0x8D ->ð LATIN SMALL LETTER Y WITH ACUTE
    '\xfe'
 ¿ #  0x8E ->: ôTHORN (ICELANDIC)? (b1? F? õ PLUS-MINUS SIGN* 0*  90* gDEGREE& j# "  �  91& É  JU k/ 2/ K/ l/ 3/ L/ m/ 4/ M/ n/ 5/ o/ 6/ O^ p/ 7/ P/ q/ 8/ Q/ r/ 9/ R/ B\xaa2 6 9A/ ðFEMININE ORDINAL I)5ATO5 b5 B5 oMASCUL6 
(e6k C6 	•IGATURE AÓ(b82 D2 tCEDILLA¿ cT õ�CAPITAL LV Pu20acX ó êGEURO¾@\xb5" ¾Aä9MIC% ~" ãAãCTILD¿ s  ÔSÌ t/ ÔT/ u/ ÔU/ v/ ÔV/ w/ ÔW/ x/ ÔX/ y/ ÔY/ z/ ÔZ/ 8\xaËAÔó	INVERTED EXCLAMATION MARQB\xbff AÓ4 MQUES1 dAÎz«?ETHo(ddp Û? êdêAõ{ ìaA §REGISTERED^¤ ãBóCIRCUMFLEX ACCEN‘B\xa3/ CBHPOUNQ 8\xaYB7YENt H\xb7H –MIDDLE DOm 9% þ™COPYRIGHTN aN ø1SECÏ	ÕIBðyPILCROWN b:Bè¢VULGAR FRAV ¦ONE QUARTE0íBï6 BHALFÄÀ\xbe'     # ð  0xB9 -> VULGAR FRACTION THREE QUARTERS
    '['    # 9 A9 `LEFT S) ’E BRACKET. ]. B. ORIGH/ B\xaf2 ] C/ bMACRONP H\xa8! D! ƒDIAERESI¢ H\xb4$ E$ ³ACUTE ACCEN› H\xd7' F' ¡MULTIPLICA3SIGy {+ 1   š  C0. ÷ ZCURLYö A- 1- òATIN CAPITAL LETTER A× B1 21 B1 C1 31 C1 D1 41 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 åLˆI1 B\xad4 æÝ£SOFT HYPHE8\xfaCÕW ESMALÝôO WITH CIRCUMFLEXe (f6e å? Þ(f2> > CGRAV¡H\xf3: : 2² 5: +: CTILDt }7 7D7 8 J. 8J™ K1 8K1 L1 8L1 M1 8M1 N1 8NO1 8Ob P1 8P1 Q1 8Q1 R1 8R1 B\xb94 8D8ÓUPERSCRIPT ONH\xfb* <U<c? <? <	§ <> 
<ax <: 
<ÓD<Yñ ² \v wE@ÕEVERSE SOLIDUöfÏE<PDIVISÊÉSQ À   #  0xE2 -ð> LATIN CAPITAL LETTER S
    'T'   Ÿ#  0xE3 -1 T1 U1 41 U1 V1 51 V1 W1 61 W1 X1 71 X1 Y1 81 Y1 Z1 91 Z1 B\xb24 WA1 ô SUPERSCRIPT TWO* (d4* B* ²óO WITH CIRCUMFLEÍ H\xd6A CA ƒDIAERESI9\xd« D@ UGRAVE½ 3| E< FACUT< 5< F< CTILD< 09 1   _ F0< “DIGIT ZERZ1% 1% #ONI ú I 2$ ¢â $ #m CTHREJ Å& & BFOUR0ñ % % IUÎ%  % #SIõ7Ü ó$ BEVENo 8& è& CEIGHÒ9& Ý& $NI)3\xbrÑB\xdbT , ÓUÓcA ÓA ÓÕ � Ó@ 
Óa| Ó< 	Ó(9f< ÓóCONTROL
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð+ cp1250 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP7  .TXT' withA “ P.py.
y ±#"

import  sÖ v ÁAPIs

class  ($ . 1):
—Adef ÷ ñe(self,input,errors='strict'):,  ™creturno B = , 4ing)C  o Bo *B 	o  o ú ±Incrementalí$er ç  ¤ ½ ¤  h Ã final=False* À,self.errorsð,encoding_table)[0]

class IncrementalDecoder( >cs. Á):
    def d, ó
(self, input, final=False*  . sreturn U ƒcharmap_@ :  F �.errors, ª óStreamWriter(Codec,U  z Dpassã  0ReaÝ 9   	9 D### 4às module API

ý Ãgetregentry(7 
æ e QInfo(1 åname='cp1250', e !e=1 2().     i½: 'r=¶Eõ/er/ J 	/ ÿ/ sqr8=E# w”# ¡# @)


K[ Ping T E�2 = (`'\x00'.ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›ðEXCLAMATION MARK
    C'"'  ð#  0x22 -> QUOTATION MARK
! +'#) 3) ²NUMBER SIGN& $& 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 0"'"ž   À 7$ ‘POSTROPHE% +'(I 8% òLEFT PARENTHESIS+ )+ 9+ ORIGH,  *, A, sASTERIS6+# B# GPLUSç ,$ C$ RCOMMA“ -  D  ³HYPHEN-MINUº .' E' ’FULL STOPK /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% #ONt2$ YI #TWH 3$ T$ 3HREJ 4& T“ BFOUR“ 5% SK 3FIVJ 6% Q% 2SIXI 7$ Q$ 3EVEè8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUES@@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 ML1 æLb M1 îb M1 N1 ù1 �O1 þ1 óP1 51 ³Q1 QÄ R1 ÀL LETTER R
 s   'S'  ð#  0x53 -> LATIN CAPITAL LETTER S
) +'T1 41 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 óEFT SQUARE BRACKET$\\/ ¶C. ãREVERSE SOLIDU¯])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINEÖ `#  60# YGRAVEJ a' 1' …ESMALƒAV b/ 2/ B/ c/ ã	^ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ Ó[	/ K/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðÍv/ ðËw/ ðÉx/ ðÇy/ ðÅz/ ðÃ{/ ð ÃZCURLYÂ|- î`VERTICsB}( çRÀV  ~. æCTILD~à\x7f'     #  0ðx7F -> DELETE
    '\u20ac'   #  0x80! ”EURO SIGN$ Ffffe$ 1$ ”UNDEFINED$ F201a$ 2$ ôSINGLE LOW-9 QUOTATION MARK6 
Z 36 Z ~ 4$ ODOUBZ F2026� 56 ôHORIZONTAL ELLIPSISˆ F2020. 6. gDAGGER! 1! 7! … 
( 
Ñ 8( Ñ  3m 9$ ™PER MILLEx7016) A)  LATIN CAPIÇ õLETTER S WITH CARO´F2039± B< �áEFT-POINTING A¤ž7015ÔCD € 	6ACUXF0164€ D< T¼  F017d< E< Z< ø ñ´ < 	´ 	½9½ %18œ 9SLEFT ]I6201• 9ORIGH6 ›9k þk <9.k 6 &22Ö .fBULLET &13! !wEN DASH" ñ9")EM" 
_1‰ QTRADE6’9oSMALL ×9*b 	fF0165: 	: 
9	: Ú	7017ó : ® !xa‚ AÕNO-BREAK SPACIE02c7× A
ƒ &2d9AFBREV@ &14ÐAîíLõTSTROK= !xa{¦ ö‹CURRENCY50* îAèAe TOGONE­!xaQe B… DN BA)!xa% 1SECùS!xa' fDIAERE•!xa4$ ACOPY¥Ö 5AàCAPITAL LETTERð S WITH CEDILLA
    '\xab'
 õ& #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARKD cD CD …NOT SIGN# d# D# ¦SOFT HYPHE& e& E& ¨REGISTEREDP Au017¹ · F* òLATIN CAPITAL LETTER Zõ ”DOT ABOVE� 'b0j  B0@ hDEGREEf 8xb1& 1& ¨PLUS-MINUS* Fu02d�  B2* TOGONE$Pu0142M ±  B3! ± ESMAL¯ L¯ VSTROK¬ 49  £ B4; ÅACUTE ACCENTÓ 5' 5' XMICRO¨ 8xb6% 6% zPILCROW' 7' 7' –MIDDLE DOq 8% 8% 
]Au010• õ 9" õ  Aõ 0 5f_ ; A; Ôb‹1ÔORIGHÕAu013´� Õ¼ b³DCAROÈ < îG¹ j øj öj 
h !17{: 	: Au015Z> Cx â R tmcC< Ü
< 	ŸC,< 	£CIRCUMFLEX}  WC ¹ L¹ } 6BREùcó } M} 	–DIAERESIS| %39˜Cf@ ù  ¸ ¸ }< Cq’C’< 	‰)C«> 
Í!xcð 2ÅnE¶ Au011%ò Æ< 	(xcÇCÇµ y « &1a«Â@ Z!xcÀõ Â| Iõ !xcÎ< Ðõ < àC 6×A D} ¹  rÛ< ÀD0 -> LATIN û.CAPITAL LETTER D WITH STROKE
    '\u0143'   #  0xD1 -> LATIN = N= HACUT< 7< 2< SCARONx !xdv x 3< Ox 0xd4v < 4< £CIRCUMFLEX} Pu0150C õ 5A xDOUBLE ü 0xd6A „ 6C ƒIAERESISƒ !xd:@ 7@ ôMULTIPLICATION SIG. ± 8p ± 8. ¦R.jVu016e< 9< U< ”RING ABOVç0xda? « AA 'Gu017jB< jc CC jd@ D@ Y ¿  62> xE< T< uCEDILLAäf< 9F> ESMAL—dSHARP  ë57 s /E05 é­ 0xe18 o EË	o A« 
: å : É: O0Î³ Ì? 6BRE[eÊEÊ: DÚAu013›x Ç	> Lñ Au010€: ¾	: C: !xe8 +¸Š: 
 v Œv Æ< .(e9ÛÄ	: E° Au011< t ½: dOGONEK¿(ebu ¼; � 1@ y ·> ±!xe%c±	: Ií !xeé: ¯: È²³ °G³  f}: Fµ: �; ¶F¶ÀTIN SMALL LEðTTER N WITH CARON
    '\xf3'
 ñ #  0xF3 -> LATIN SMALL LE: O: UACUTE: 4: 4: £CIRCUMFLEX? Pu0151A y 5? zDOUBLE € 6?  º 6A ƒIAERESIS 8xf7> 7> ÄDIVISION SIG  § 9* § 8(   R ZVu016f: 9: U: –RING ABOV_a= ß A? Gu017ZB: Zc{ CA Zd> D> Yø ¹ 6ŽlE: T: sCEDILLAÐGu02d¨F< 3DOTSó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð+ cp1251 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP7  .TXT' withA “ P.py.
y ±#"

import  sÖ v ÁAPIs

class  ($ . 1):
)Adef ÷ ñe(self,input,errors='strict'):,  creturno B = , 4ing)C  o Bo *B 	o  o ú ±Incrementalí$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� Ddª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  ¦�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±bname='”%', e !e=1 2().     ig: 'r=Ðz/ J 	/ å/ sqr8=E# w”# ¡# ð)


### Decoding Tðable

decoding_t ð  = (
    '\x00'
 õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þP3[“DIGIT ZER¡ø% `% òï$ Y$ éÀ3'        # ð 0x33 -> DIGIT THREE
    '4'    # & 4& BFOUR% 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& 3NIN• :% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, F, ÒQUESTION MARK@(  40( ÃCOMMERCIAL A4A( 1( òLATIN CAPITAL LETTER AY B1 21 B1 C1 vb C1 D1 �1 D1 E1 �1 F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 Ob P1 51 P1 Q1 Q1 R1 ;S1 Sb T1 ÔU1 Ub V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ 5ãREVERSE SOLIDU¯])  * R¦Y ^/ óCIRCUMFLEX ACCEN… _, ÿEOW Lß`# 6ñðGRAVE ACCENT
    'a#'  ð#  0x61 -> LATIN SMALL LETTER A
' +'b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ E/ f/ 6/ F/ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ ðQ/ r/ ðR/ s/ ðS/ t/ ðT/ u/ ðU/ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðóEFT CURLY BRACKEG|- îÃVERTICAL LIN0}( çORIGHV ~. æCTILDN 3\x7�i7×TDELET! Pu0402F ! 8ÉàCYRILLIC CAPITŸ �(DJ6 36 Ð6 G6 F201a6 ×óSINGLE LOW-9 QUOTATION MAR'W\u045l Þl 	/
j ©Ö ãODOUBj F2026  êpHORIZONsELLIPSIGf\u2020. éSDAGGE—! 1! Û… ( a´­ ÔƒEURO SIGŸ L 3m É™PER MILLE) F0409u Ã.ÐLš36 ÊšáEFT-POINTING A®¨0Þáz ÀITAL LETTER ù(NJE
    '\u040c'   #  0x8D -> CYRILLIC CAPITAL LETTER K6 b6 E6 	8TSHm f7 F7 	(DZ7 %527 )907 ESMAL¢ D¢ F20184 14 ôLEFT SINGLE QUOTATION MARKF20195 25 ORIGH6 C 936 k ODOUBk 	dk 45 k 6 2
56 gBULLETÂ 3W 6! wEN DASH" 4" 7" M" Ffffe" 8" •UNDEFINEDF 1‰ 9$ QTRADEOT SIGN* 7045TA* a	½L½&3a‚ B4 ¸$¿-POINTING AÍ7045E CE y 	5Ë
	­ 	59	4 

5
9
	5 0xa0¬AØNO-BREAK SPAChÂAýû ÕwSHORT U®: : 	˜ 8 0oA8 r ç!xa‰Ð ‹CURRENCYC9ú ¤Aö] äGHE WITH UPTUR…8xa6:£BROKEN BARü 8xa7% 1SEC%
Ñ 01) Ž Ž %IO\ ë 0ACOPYÏì 0^ 
/I´UKRAINIAN Iú!xa‹h : Œ2_9!xaD 9 NOÕ!xa¼# (¦SOFT HYPHEvK& ¬REGISTEREDö }ö 
ö $YITb_ BhDEGREE[ !xb­& ¨PLUS-MINUS*  '… Bü… ×BYELORUSSIAN-ˆ› Gu045K 
	GI 9À ” #Ÿ	I ù b5«ð  #  0xB5 -> MICðRO SIGN
    '\xb6'
 ú #  0xB6 -> PILCROW' 7' 7' £MIDDLE DOTL Pu0451' L 8% ô	CYRILLIC SMALL LETTER IO3 1211� 3 93 JNUME¥  Y 4Y A& Y ÃUKRAINIAN IEc 0xbb;  â B= óRIGHT-POINTING DOUBLE ANGLE QUOTATION MARKE  ‚ 8G ¨ CE ‚ Jx Vu04053 D3 eCAPITA'DZ6 56 E6 	D
4 Ÿ� F4 &YIÐ %10� )C03 � A4 ß/C14 	BÐ &12i 25 	V5 35 35 	(GH6 &/C46 	D5 p/C55 	S7u04¶C5>Z  §CD6   yCTk Ý9?Ui hSHORT : a: 
in KcCao 'ELMcj 
Qj 'EM5 d5 S
Eâ ­e5 
Rj —F041f4 
R4 P«2TDT
&ERÓ 2UDU
'ES5 UDU
TŸ UDU
Ui SDS
'EF5 SDS
HE2	DS
(TSÔ SDS
C‰2TDT
S¢ VDVC8 TDT
HHARDwFu042[D[
8YER·]ð DC -> CYRILLIC û-CAPITAL LETTER SOFT SIGN
    '\u042d'   #  0xDD -> CYRILLIC < E4 e4 E4 	'YU5 f5 F5 
A5 %305 )E05 ESMALØ 2 12 12 BÏ &323 23 V3 33 33 (GH4 44 44 D3 53 53 I3 63 63 Zš 74 74 g 83 83 IË92 92 hSHORT 8 a8 A8 Kb3 B3 'ELž c3 C3 M3 :E:	œEm39E9	3 Oe 6E6	2 P›44F4&ERf 45F5'ES3 5F5T™ 5F5443F3'EF˜ 3F3H/43F3(TSÌ 3F3Cg44F4Sœ 6F6
C6 4F4KHARD4;F;8YER§=F=~ 4DFD	àCFCz4DFDóYA
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð+ cp1252 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP7  .TXT' withA “ ð.py.

"""#"

import Ðcodecs

### C Â APIs

class ($ . à):

    def en ñ(self,input,errors='strict'):,  0 preturn 1 ³cs.charmap_B = , ¦ing_table)o  de> o )B 	o  o ú ÁIncrementalEç r ç  h Ã final=False*  Y.S4[0]¤� D"ª  €  ª ø eNª !@ ä ª  Qª ÑStreamWriter(N,Ò8cs. ¤ 5pas‡ ORead9  	9  ÐJ€s moduleÛ 

ý Ãgetregentry(7 
¡ž UInfo(Âåname='cp1252', e !e=1 2().     ig: 'r=Ðz/ J 	/ å/ sqr8=E# w”# ¡# ")
[ Ping T• E5codå2 = (`'\x00'ßñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ô SYNCHRONOUS IDLˆ Àx17'     #  ð0x17 -> END OF TRANSMISSION BLOCK
    '\x18'
 € #  0x184 eCANCEL! 9! 9! U eMEDIUM( a( A( ¥SUBSTITUTE% b% B% VESCAP! c! C! åFILE SEPARATORJ d) D) _GROUP*  e* E* oRECORD+  f+ F+ LUNIT)  & "  6 20) CSPACÇ !  1  €EXCLAMAT‚3MAR�"+ 2+ LQUOT) #) 3) ²NUMBER SIGN$& 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 1"'">u“APOSTROPH(I fñLEFT PARENTHESISP +')+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF 0" 3[¢DIGIT ZEROG 1% `% #ONt2$ Y$ #TWH 3$ T$ 3HREJ 4& T“ 3FOU‘5% SK 3FIVJ 6% Q% 2SIXÜ 7$ Q$ 3EVEèµw3R& E-L º& M& $NI):q FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 àJ'        #  0ðx4A -> LATIN CAPITAL LETTER J
    'K'   #  0x4B1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ >5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿrOW LINEÖ `# 6ñYGRAVEJ a' çESMAL<AV b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ ãk/ Ó	/ ál/ ÔC	/ ßm/ Ù/  Ýn/ Ù/  Ûo/ Ü¼ Ùp/ 7è^  ×q/ ðÕr/ ðÓs/ ð"t/ ðöu/ ðÀIN SMALL LETÐTER U
    'v'   ð#  0x76 -> LATIN SMALL LET/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ B/ òEFT CURLY BRACKET- |- C- ÒVERTICAL LINE( }( D( ORIGHV ~. E. CTILDN B\x7f# ŽF  TDELET! Pu20ac# !  80! ’EURO SIGN“ f\ufffe$ 1$ ”UNDEFINED$ F201a$ 2$ ôSINGLE LOW-9 QUOTATION MARK6 F01926 36 - ¥F WITH HOO9 7201“ 49 ODOUBo F2026o 56 ôHORIZONTAL ELLIPSIS� F2020. ÊgDAGGER! 1! ¼… 
( 702cw µ„MODIFIERóCIRCUMFLEX ACCEN7W\u203… Â™PER MILLE¥7016) ¼@CAPIß zSMECAROáF2039É É½áEFT-POINTING AÑË5ËàË€ •IGATURE O}
YìYF017dœ âX RZØ  
` þ` 	$ 9$ E2018„ 9Lé%6201U9É6 �9 k Yk $9k 6 2²9DBULL³ |&13÷ vEN DASH&14" )EM" 702dÐ üS	§8u21‹ æQTRADE-çt9çV å¢9å,ææ ä9äÎ9äV â7017šâYfDIAEREä!xa4!  ÿAþÔNO-BREAK SPAC«!xav) à1 -> INVERTED ðEXCLAMATION MARK
    '\xa2'
 õ #  0xA2 -> CENT SIGN$ 3$ 3$ ZPOUND% 4% 4% ŠCURRENCY( 5( 5( :YEN# 6# 6# ¥BROKEN BAR• 7% 7% 1SECà 	¼ 8' 8' •DIAERESISK 9$ 9$ ‹COPYRIGH	a) A) ö
FEMININE ORDINAL INDICATO© b5 B5 ÿLEFT-POINTING DOUBLE ANGLE QUOT¦ cD CD +NOœ d# D# ¦SOFT HYPHEËe& E& ›REGISTEREÐf* F* UMACROK 'b0!  B0! iDEGREEÌ(b1& 1& ªPLUS-MINUS* ŠBŠô SUPERSCRIPT TWO°b�B�	* EHREE, —B—€ACUTE ACè' –B–ZMICRO¢ ˜B˜zPILCROW' šBš¥MIDDLE DOTq ˜B˜uCEDILLA" –B–æ &ONä —B—oMASCUL˜
b˜B˜ò™b™B™¢VULGAR FRAŽ ONÖEARTEb¬B¬6 EHALFeH¹3 Tø1 QUk ÝbÈBÈÑINVERTED QUES2cØCØõLATIN CAPITAL LETTER A WITH GRAVŠcîCî< 	Šâ c C < 	¥CIRCUMFLEXA CA 	FTILD¹ 'C'< 	Cc@C@@ 	Rø7ABO:\C\A ³ gCg2 C¨^c€C€> E> 
æšCš< 	
æ¬C¬< 	æ ·C·A ÀITH DIAERESIÀS
    '\xcc'
 õ #  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE< d< D< FACUT< e< E< ¥CIRCUMFLEX} fA FA …DIAERESIù 'd0@ /D0@ 4ETHs (d13 13 N,ETILDð (d2< 2< O< 	h(d3< 3< 	h(d4< 4< h(d5A 5A 
õ 6< 6< ¤7@ 7@ õMULTIPLICATION SIGNŸ8. 8. ËcVSTROK 9= 9= U a< A< 
 b< B<   ÁDÁ¹ dÅDÅYù 
½ ÅDÅFTHOR§¹D¹ESMALpeSHARP ®e®E®	5 A¤ 	=eµEµ: 	Þ e³E³: ™e¶E¶? 	7e´E´: Ñe±E±> †RING ABOÕe´E´
? 9e¤E¤v	0 CštCEDILLA²e²E²	< E< 
Ö¯E¯: 
Ö­E­: Ö °E°? œ­E­	> le§E§: 
ñ ¥À  0xEE -> LAðTIN SMALL LETTER I WITH CIRCUMFLEX
    '\xef'
 ï #  0xEF -> LA? ”DIAERESIS> 'f0> /F0> 5ETH1 11 11 N® UTILDE: 2: 2: O: FGRAV: 3: 3: FACUT: 4: 4: \(f5? 5? 
í 6: 6: –7> 7> ÕDIVISION SIGNS8( 8( ü SVSTROK9; 9; UŽa: A: 
Žb: B: Ž c? C? Td> D> Yñ 
· e: E: FTHOR™•F•m « ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð+ cp1253 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP7  .TXT' withA “ P.py.
y ±#"

import  sÖ v ÁAPIs

class  ($ . 1):
ÜAdef ÷ ñe(self,input,errors='strict'):,  þcreturno B = , 4ing)C  o Bo *B 	o  o ú ±Incrementalí$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� Ddª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  ¦�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±ð name='cp1253',
  ò encode=Codec(). #,
 9 de   ²incremental: 6r=I E\ r/ J 	/ Dl / ástreamreader=S R R # Ewrit# W # �)


### [ ±ing Table

~ Ping_t A = (ò a'\x00'ü õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t" "  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& T B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç à,'        #  0ðx2C -> COMMA
    '-'   p#  0x2D  ÂHYPHEN-MINUS' .' E' ’FULL STOP$ /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% 2ONE$ 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOURo 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& $NI):% A% CCOLOk ;  B  GSEMI$ <$ CÓLESS-THAN SIGM =) LgEQUALS& >& K|GREATERR ?, SÒQUESTION MARK@( 4Y æƒERCIAL A4A( \óLATIN CAPITAL LETTER B1 i1 BŠ C1 v1 C1 D1 �1 D1 E1 �1 ™F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 jT1 ÔU1 UÄ V1 V1 W1 W1 X1 Y1 Yb Z1 ÐZ
    '['    ð    #  0x5B -> LEFT SQUARE BRACKET
# @'\\' . C. ò REVERSE SOLIDUS* ]) X D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINE~ `#  60# YGRAVEJ a' 1' òLATIN SMALL LETTER AV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ ÓÖK/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðU� v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ð ÃZCURLYÂ|- î‡VERTICALB}( çRÀV  ~. æCTILD~3\x7�f7×TDELET! Au20a1! 8ÉƒEURO SIGQ\ufff÷$ ¾ƒUNDEFINEQ\u201×$ ³óSINGLE LOW-9 QUOTATION MAR`\u0192Ä 6 º¥F WITH HOO9 7201“ ÄODOUBo F2026o ËóHORIZONTAL ELLIPSI( Ó &20. ÊSDAGGEx! 1! ¼… 
( 	@À88 -> UNDEFIôNED
    '\u2030'   #  0x89 -> PER MILLE SIGN) Ffffe) A) jUNDEFIM 9$ B$ ñSINGLE LEFT-POINTING A ïQUOTATION MARKh CD h 
Œ D$ E$ F$ /90$ E2018ø  91$  ñ  ý é 6201- 925 _RIGHT6 ck 36 k DOUBLE k d5 45 k 6 &226 56 dBULLET«F2013! 6! wEN DASH" 4" 7" M" 	Ë 98" ï(21‰ ¤QTRADE8¥9¥a” ¥¦ 9¦9¦9¦9¦!xaÅÇA¦äNO-BREAK SPACE’E0385þ A«÷GREEK DIALYTIKA TONOS0 60 ¦0 ù
CAPITAL LETTER ALPHA WITH@ !xa"™ °XPOUND·!xa%%  ŠCURRENCY( » ( ’:YEN# ® # ”£BROKEN BARÕ 0xa7Ó % —1SEC‹ó!xaÕ' œ„DIAERESI !xaÄ$ œACOPYK™ uéA›8xab˜ › Ý“°@!xa‘ š NOUË!xa# ™¤SOFT HYPHEñ!xaï& ›™REGISTERE¿Au201™DA¡pHORIZON!xb¦B¦ DEO*7xb1B£ªPLUS-MINUS*  £ B�ô SUPERSCRIPT TWOòb‡B‡	* 8HRE#�Ï BŽ ¤ KÙbó | ŒZMICRO¡ ŽBŽzPILCROW' �B�•MIDDLE DOn1038�— Ž— Š|EPSILONŒÀ'\u0389'   #ð0  0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS
    '\u038a'   # > A> /IO? 0xbb= ? B? ÷RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK„ cG „ CE Â ~OMICRONÆ 0xbd@ ‡ DB ±VULGAR FRACq ‡ONE HALFu e5 u E3 u _UPSILu  ;fB FB OOMEG{%90@ &C0@ ESMAL·yÜDIALYTIKA ANDÆ&91K 1K VALPHA&925 25 8BET4 34 34 HGAMM5 45 45 9DELj 55 55 E Õ 67 67 ZÕ 74 74 
3 83 83 *TH5 95 ª óÐ  C HKAPPq˜ÜC–ÜHLAMD5 †C†'MUœ xg vg N2 uCu'XId eCe	7 a\D\Pi aCDC4RHOe 6fffÎ DA”UNDEFINED$ 603a1D18SIG1a1D1'TAZa/D/ÏŸ /D/(PH).D.C3 .D.(PSf ,D,]Î -D- aFTC ;D;HF LDL	ÛŽB ”aXDX	> ùÀON WITH TONOø-S
    '\u03ae'   #  0xDE -> GREEK SMALL LETTER ETA WITH TONO< f< F< /IO= %b0= /E0= rUPSILON} ÜDIALYTIKA AND‹ &b1N 1N VALPHAú &b23 23 8BET2 32 32 HGAMM3 43 43 9DELf 53 53 EÍ 65 65 ZÍ 72 72 
1 81 81 *TH3 93 93  !È a2 A2 HKAPPcb3 B3 HLAMD3 c3 C3 'MU– d0 D0 N0 UEU'XI` IEIvOMICRON5 cAFAPe c#F#7RHOa !F!˜FINAL SIGõc(F(3 (F('TAcc&F&?Ò &F&(PH4%F%C1 %F%(PSb #F#GOMEG¾c$F$ V72F2<D CFC³D <cSFS	„ @ cFc8~  7fff> qóUNDEFINED
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð+ cp1254 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP7  .TXT' withA “ P.py.
y ±#"

import  às

### Codec AðPIs

class Codec(c !s. à):

    def en ñ(self,input,errors='strict'):,  0 preturn 1 ³cs.charmap_B = , ¦ing_table)o  de> o )B 	o  o ú ÁIncrementalEç r ç  h Ã final=False*  Y.S4[0]¤� D"ª  €  ª ø eNª !@ ä ª  Qª ÑStreamWriter(N,Ò8cs. ¤ 5pas‡ ORead9  	9 2### ðings module API

ý Ãgetregentry(7 
¡ž UInfo(Âåname='cp1254', ¯!e=1 2().     ig: 'r=Ðz/ J 	/ å/ sqr8=E# w”# ¡# @)


K[ Ping T• E5codå2 = (`'\x00'ßñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –ð17 -> END OF TRANð
SMISSION BLOCK
    '\x18'
 õ #  0x18 -> CANCEL! 9! 9! ÕEND OF MEDIUM( a( A( ¥SUBSTITUTE% b% B% VESCAP! c! C! åFILE SEPARATORJ d) D) _GROUP*  e* E* oRECORD+  f+ F+ LUNIT)  & "  6 20) CSPACÇ !  1  €EXCLAMAT‚3MAR�"+ 2+ LQUOT) #) 3) ²NUMBER SIGN$& 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 1"'">7$ ƒPOSTROPH(I fñLEFT PARENTHESISP +')+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF 0" 3[¢DIGIT ZEROG 1% `% #ONt2$ Y$ #TWH 3$ T$ 3HREJ 4& T“ 3FOU‘5% SK 3FIVJ 6% Q% 2SIXÜ 7$ Q$ 3EVEèµw3R& E-L º& M& $NI):q FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 ÈÀLATIN CAPITAðL LETTER J
    'K'   õ#  0x4B -> LATIN CAPITA1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 óEFT SQUARE BRACKET$\\/ >5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿrOW LINEÖ `# 6ñYGRAVEJ a' çESMALAV b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ ãk/ Óã	/ ál/ Ô	/ ßm/ Ù/  Ýn/ Ù/  Ûo/ Ü¼ Ùp/ 7è^  ×q/ ðÕr/ ðÓs/ ð"t/ ðöu/ ðð U
    'v'      ð  #  0x76 -> LATIN SMALL LETTER V
    'w'   / 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ B/ òEFT CURLY BRACKET- |- C- ÒVERTICAL LINE( }( D( ORIGHV ~. E. CTILDN B\x7f# _F  TDELET! Pu20ac# !  80! ’EURO SIGN“ f\ufffe$ 1$ ”UNDEFINED$ F201a$ 2$ ôSINGLE LOW-9 QUOTATION MARK6 F01926 36 - ¥F WITH HOO9 7201“ 49 ODOUBo F2026o 56 ôHORIZONTAL ELLIPSIS� F2020. ÊgDAGGER! 1! ¼… 
( 702cw µ„MODIFIERóCIRCUMFLEX ACCEN7W\u203… Â™PER MILLE¥7016) ¼@CAPIß zSMECAROáF2039É É½áEFT-POINTING AÑË5ËàË€ •IGATURE O}
YìY
$ â$ æ$ 9é$ E20189éLÑù 6201=9ú±6 x9ú k Ak d  ök 6 2š9öDBULL› d&13W évEN DASHê&14" ê)EM" 702dÐ äSñ�8u21‹ ÎQTRADEÏ\9ÏV ÍŠ9Í,ÎÎ Ì9Ì9Ì7017„ÌHBYÈfDIAERE¶!xa€AèÔNO-BREAK SPAC}!xa`) í IN“�ED EXCLAM°!xaI4 ì ­ºÀ    '\xa3'  ð   #  0xA3 -> POUND SIGN
    '\xa4'
 % 4% ŠCURRENCY( 5( 5( :YEN# 6# 6# ¥BROKEN BARp 7% 7% kSECTIOL 8' 8' •DIAERESISK 9$ 9$ šCOPYRIGHT™ a) A) ö
FEMININE ORDINAL INDICATO© b5 B5 ñLEFT-POINTING DOUBLE ANGLE QUOTAÆ EMARK¢ cD CD +NOœ d# D# ¦SOFT HYPHE¦e& E& ›REGISTEREÐf* F* UMACROK 'b0!  B0! iDEGREE3(b1& 1& ªPLUS-MINUS* 2* 2* ô SUPERSCRIPT TWO(b3* �	* EHREE, —B—ÅACUTE ACCENT' –B–ZMICRO¢ ˜B˜zPILCROW' šBš–MIDDLE DOq ˜B˜uCEDILLA“ –B–æ &ONä —B—oMASCUL˜
b˜B˜ò™b™B™¢VULGAR FRAŽ ONÖEARTEb¬B¬6 EHALFeô¹3 Tø1 QUk ÝbÈBÈÝINVERTED QUESlcØCØõLATIN CAPITAL LETTER A WITH GRAVŠcîCî< 	Šâ c C < 	¥CIRCUMFLEXA CA 	FTILD¹ 'C'< 	Cc@C@@ 	Rø7ABO:\C\A ³ gCg2 C¨^c€C€> E> 
æšCš< 	
æ¬C¬< 	æ ·C·A 	ª²C²@ ðI WITH GRAVE
   € '\xcd'  ð#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
1  < e< E< ¥CIRCUMFLEXA fA FA “DIAERESIS@ Au011ƒ ½ /D0@ G½ EBREV½ 'd1| /D1< N< FTILD< 2< 2< O< 7GRAx 3< 3< 	q(d4< 4< q(d5A 5A 
õ 6< 6< ­8xd7@ 7@ óMULTIPLICATION SIGNÛ8xd8. 8. ˜cVSTROK 9= 9= U a< A< 
 b< B<   cA CA dPu0130B ÎuDOT ABO�Gu015QÒS9uCEDILLA´ÏDÏESMALJdSHARP Ä!xe± !  ³ EÄ	5 Aq 	JeÂEÂ: 	¨eÀEÀ: ¦eÃEÃ? 	DeÁEÁ: Þ(xe¾E¾> IRINGÝ(xeÁEÁ
? Fe±E±ƒ	0 Cše¿E¿	< E< 
Ö¼E¼: 
ÖºEº: Ö ½E½? œºEº	> F
ñ ‚E´: 
ñ ¬;®: ñ ÀLEX
    '\xe0f'  ð #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
3 a'\u011@ > /F0> G> SBREVE: 7xf1x /F1: N: FTILD: 2: 2: O: 7GRAt 3: 3: FACUTt 4: 4: ¥CIRCUMFLEXí 5? 5? 
í 6: 6: Ÿ8xf7> 7> ÕDIVISION SIGN  8( 8(  SVSTROK9; 9; UŽa: A: 
Žb: B: Ž c? C? TAu013»óD> “DOTLESS IcGu015*E7 S(sCEDILLA< !xf: "  s ¤Y< ± ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð+ cp1255 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP7  .TXT' withA “ P.py.
y ±#"

import  sÖ v ÁAPIs

class  ($ . 1):
CAdef ÷ ñe(self,input,errors='strict'):,  Ùcreturno B = , 4ing)C  o Bo *B 	o  o ú ±Incrementalí$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� Ddª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  ¦�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±bname='”%', e ð e=Codec().encodCe,
  ò decode=Codec().  Ðincrementalen* 6r=I E / J 	/ Dl r/ ástreamreader=S R # Ewrit# W # �)


### [ ±ing Table

~ Ping_t A = (ò a'\x00'û õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t" "  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& T B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uðCOMMA
    '-'        ð#  0x2D -> HYPHEN-MINUS
    '.'   ' E' ’FULL STOP$ /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% 2ONE$ 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOURo 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& $NI):% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) LgEQUALS& >& K|GREATERR ?, SÒQUESTION MARK@( 4YÃCOMMERCIAL A4A( \òLATIN CAPITAL LETTER AY B1 i1 B1 C1 v1 C1 D1 �1 D1 E1 �1 ™F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 jT1 ÔU1 UÄ V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 ÀEFT SQUARE Bð RACKET
    '\\' ò   #  0x5C -> REVERSE SOLIDUS* ]) * D* ØIGHT SQUARE BY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINE~ `#  60# YGRAVEJ a' 1' òLATIN SMALL LETTER AV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü’O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðU� v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðšEFT CURLYi|- î‡VERTICALB}( çRÀV  ~. æCTILD~3\x7�87×TDELET! Au20a1! 8ÉƒEURO SIGQ\ufff÷$ ¾ƒUNDEFINEQ\u201×$ ³óSINGLE LOW-9 QUOTATION MAR`\u0192Ä 6 º¥F WITH HOO9 7201“ ÄODOUBo F2026o ËóHORIZONTAL ELLIPSI( Ó &20. ÊSDAGGEx! 1! ¼… 
( 702cw µ„MODIFIERëtÀFLEX ACCENT
ó    '\u2030'   #  0x89 -> PER MILLE SIGN
) Ffffe) A) ”UNDEFINED$ F2039$ B$ ñSINGLE LEFT-POINTING A äQUOTATION MARKD 
h CD h 
$ D$ E$ F$ /90$ E2018ø  91$  ñ  ý é 6201- 925 _RIGHT6 ck 36 k DOUBLE k d5 45 k 6 &226 56 dBULLET«F2013! 6! wEN DASH" 4" 7" M" 702dÐ 8" µSMALL TILDEH 1‹ ¦QTRADE:§9§a– §¨ 9¨9¨9¨9¨!xaÇÉA¨ÔNO-BREAK SPACL0xa1ü ) ­ý INVERTED EXCLAM•!xa	4 ¬0CEN«!!xa$ šYPOUNDŸ620a{AŠ¨NEW SHEQEL* 8xa5§ ~:YEN# 6# €£BROKEN BAR;8xa7% ƒ1SECwß!xaÁ¾ ˆ•DIAERESISK °$ †ACOPY5	™ dt …’MULTIPLIC]	{ b¢ � Ó‡¦6!xaE› Ž+NO # �¤SOFT HYPHEç!xaå& �™REGISTEREË8xaf· •UMACROK b’B’YDEGREX(xb�B�©PLUS-MINUSVb…B…ô SUPERSCRIPT TWO©b‹B‹	* 5HREb¡ñ B’€ACUTE ACãS �B�ZMICRO¢ ‘B‘zPILCROW' B“”MIDDLE DO](xb‘B‘uCEDILLA“ �B�æ %ONä fq À#  0xBA -> DðIVISION SIGN
    '\xbb'
 ð #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATE EMARKE cE CE ±VULGAR FRAC/  ON= UARTER6 d6 D6 EHALF3 e3 E3 ETHREk S9 f9 F9 ÑINVERTED QUES¤ Ó Pu05b03  C01 qHEBREW c SHEVA^  - 1- 1- ·HATAF SEGOL3 23 23 WPATAH3 33 33 TQAMATø  š 44 44 GIRIQa 5- 5- WTSERE- 6- 6- î 7- 7- è 8- 8- â 9. 9. THOLAMµ 1fffBÖA- ”UNDEFINED$ "05$ 	úIQUBUaý. û	. ÙDAGESH OR MAPkþ7 ü	7 WMETEG’ ¶ ö- TUNCTU‘$QA) øò` ð3  ØG RAFÊcëDë_ GPASE*cñDñ†SHIN DOTÂ cîDîS/ êDê’ ‡SOF PASU– fÉ íôLIGATURE YIDDISHÕ6VAV£ fÓ ý= gVAV YO1fÝ 
: L
= ë 	ë WGERES	fÕD!
4 _SHAYIýD*ý	!D!
$ !H $ $ û$ ì$ 605dEä§LETTER ALE=dEÞ- 'BEÚdýEÚ, GGIMEödîEÙ. 9DAL\ èEÐµ HÄd»E¾À LETTER VAV
ö    '\u05d6'   #  0xE6 -> HEBREW LETTER ZAYIN
. 7. 7. 7HET, 8, 8, T, 9, 9, 7YODX a, A, —FINAL KAF2 b2 B2 
, c, C, HLAMEŒ d. D. Œ 7MEMŒ e2 E2 
, f, F, ^ 'NU %e02 .F02 
, 1, 1, fSAMEKH¹ &e2/ 2/ 
(&e3- 3- º 'PE^ 41 41 	+ 5+ 5+ \ WTSADI_ æFæ . æFæ 'QO\eæFæ 8RESDçFç (SHleèFè 4TAVà 6fffVFâvUNDEFIN¬
$ Ú$ 7200H ÐôLEFT-TO-RIGHT MARKu 6200ŸFË%  .  6 	- 
~ Ì~ ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð+ cp1256 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP7  .TXT' withA “ P.py.
y ±#"

import  sÖ v ÁAPIs

class  ($ . 1):
VAdef ÷ ñe(self,input,errors='strict'):,  “creturno B = , 4ing)C  o Bo *B 	o  o ú ±Incrementalí$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� Ddª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ À  pass

clasðs StreamReader(Codec,c (s. ó():
    pass

### encodings module API

def getregentry(7 sreturn X e QInfo(T  X åname='cp1256', e !e=1 2().   deR    ²incremental: 6r=I EÁ /er/ J 	/ Dl / s8r8=+R # cwriter# W # ")
K[ �ing TableE[ _t 2 = (`'\x00'.ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I À#  0x28 -> LðEFT PARENTHESIS
    ')'   ÿ #  0x29 -> RIGH,  *, A, ‚ASTERISKO +# B# ’PLUS SIGN$ ,$ C$ RCOMMA  -  D  ³HYPHEN-MINUº .' E' ’FULL STOPK /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% 2ONE$ 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOURo 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ 3EVE´8& 8& E-L 9& MM$NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SÃQUESTION MAR
@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 D1 E1 �1 ™F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 �O1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 jT1 ÔU1 UÄ V1 V1 W1 ÀR W
    'X'   ð#  0x58 -> LATIN CAPITAL LETTER X
( 0'Y'   1 91 Y1 Z1 A1 Z1 [1 B1 òEFT SQUARE BRACKET. $\\/ � C. ò REVERSE SOLIDUS* ])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINE~ `#  60# YGRAVEJ a' 1' �ESMALŽAV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ 7/ G/ h/ Ù	IH/ i/ ×	/ I/ j/ Õ	/ J/ k/ Óf	/ K/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðU� v/ ðV/ w/ ðW/ x/ ðÇy/ ðÅz/ ðÃ{/ ð ÃZCURLYÂ|- î`VERTIC~B}( çRÀV  ~. æCTILD~3\x7�7×TDELET! Au20a1! 8ÉƒEURO SIGQ\u067÷$ ¾dARABIC7#PEbQ\u201ß, »óSINGLE LOW-9 QUOTATION MAR`\u0192Ì 6 Â¥F WITH HOO9 7201› ÌADOUBo ÀW-9 QUOTATIO÷%N MARK
    '\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS. 0. 6. gDAGGER! 1! 7! jOUBLE ( 702cw 8( öMODIFIER LETTER CIRCUMFLEX ACCENTd 3… 9< äPER MILLE SIGN) F0679� A) dARABICc DTTEH- 7203- B- ñSINGLE LEFT-POINTING A ŠQUOTATIOMF0152q CD  LATIN CAPIP´LIGATURE OEx 7068
D4 ¥ &CH¦ F0698b E. J, 8, F, FDDAL‡ %afY .90- 4GAF, 6201Y  91,  $ 06201` 925 _RIGHT6 c— 36 k DUk d5 45 k 6 2½9
WBULLEx&13W ýgEN DASD&14" þ)EM" 706aø
î'KEî(21“ êQTRADEÂë9x9ë &RRF203a§ ë'ììoSMALL ê 7200ÌêøZERO WIDTH NON-JOINL0Çì0 
, 706bÓ ì ³NOON GHUNNAÇ!xaFûAó×NO-BREAK SPAC£¹ AðµFCOMMP ?P â ·¨!xa4$ ÐZPOUND% E% ÀŠCURRENCY( 5Æ( ²:YEN# \# ´”BROKEN BAµ8xa7H ·1SECÞO!xaõL ¼fDIAERE!xÞ$ ²ACOPYX™ Pu06bev xA± äHEH DOACHASHMEŒ0xab6 a ¼ ´ä§!xa‡D » NO‰;!xaz# ¬¤SOFT HYPHEa!xaÃ & ¢›REGISTEREÓ]*  UMACROK b�B�YDEGREÒ!xbåG BŠ¨PLUS-MINUS`(xb�ÐB2 -> SUPERSCðRIPT TWO
    '\xb3'
 ò #  0xB3 -> SUPERSC* EHREE, 4, 4, ÅACUTE ACCENT' 5' 5' ¥MICRO SIGN% 6% 6% zPILCROW' 7' 7' –MIDDLE DOq 8% 8% uCEDILLAn 9" 9" æ $ONä Pu061b, A* ö ARABIC SEMICOLOÃ )  ;B+ õRIGHT-POINTING DOUBLE ANGLE QUOTATION MARKš cn E CE ±VULGAR FRAC/  ON= UARTER6 d6 D6 EHALF3 e3 E3 Tí1 QUk S9  f; F9 AQUES¢ Ñ Uu06c1/ 'C0/ ö LETTER HEH GOAL` 21 11  4AMZÊVu0622_ 2. ÷ALEF WITH MADDA ABOVÞ2ðÌ CîÌ � > Hv > >  > 2WAW{ = = { WBELOW%1> /
> ?YEH{ 	G= E
=  ö j O- M
- 7BEH, Y, W
,  TE‡HRBUTÁaÁaET` d` b` H- L- J
- GJEEMº C- A
- (HAæ <, :
, K- .C.ß Dú%30D+ )TH- 'D' R3%D% 4ZAIÇFu063D 8SEE- D *SH. ôDô 6SAD’3âDâ D, !xdÏ5DÑ’MULTIPLICck á 0 ÀDÒ Tì3þDÒ Z, þDÊ 
eöDÊ )GH. 4ËgTATWEE<4Ç ðFEH
    '\u0642' ô  #  0xDE -> ARABIC LETTER QAF
    '\u0643' , F, K, 0xe0* ,  E0, ´LATIN SMALL] ÇA WITH GRAVEf 4< ’  E1: 
’ 3LAM, 0xe2* f 2, f £CIRCUMFLEX?  Ñ 5A k 3? 
k 4MEEl  - 6- 4- GNOONZ 7- 5- 7HEH, 8, 6, 3WAW, !xeV ñ 7, ñ  CWuCEDILLA< f < 8< E< “0xe9  : 9: DACUTÍ8xea: A: ¡8xeb? B? “DIAERESISñ  ²¹ ßC> 
ß´ALEF MAKSUR& 5 ´ 5 D5 Yº8xeeŸ =Ž IRÞ  f? P? Þ © FbÞ xFATHATA�cj * RKDAMM* d* PT KKASR* ý T ;~ ƒ!xfË:F5ã  O" �$f Gº f Au065o' B· ' (xf=F=ÇDIVISION SIG0&51)TSHADD+!xf^Ý UÝ Q ± º± b 4UKU‰ !xfáa ÿa `fö?  } ? `7200â	óLEFT-TO-RIGHT MARK[Gu200©
%  .  6 	- 706dþ øþ tóYEH BARREE
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð+ cp1257 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP7  .TXT' withA “ P.py.
y ±#"

import  sÖ v ÁAPIs

class  ($ . 1):
eAdef ÷ ñe(self,input,errors='strict'):,  °creturno B ðinput,errors,encñ*oding_table)

    def decode(self,input,errors='strict'):,  0 preturn 1 ³cs.charmap_B = , o ðclass IncrementalEnG  r( >cs. x  ¤ e, ¤  h Ã final=False* ¢ @ :  ê .ä , § ][0]

ª D"ª  €  ª ø Nª !@ ª  ª óStreamWriter(Codec,T ¤ Dpassã  ORead9  	9 D### 4às module API

ý Ãgetregentry(7 
2ž UInfo(Såname='cp1257', e !e=1 2().     ig: .r=`/ J 	/ å/ sqr8=E# w”# ¡# @)


K[ Ping T• Ec¥2 = (`'\x00'ßñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  ðSUBSTITUTE
    '`\x1b'  ð#  0x1B -> ESCAPE
 X'\x1c! C! åFILE SEPARATOR) d) D) _GROUP*  e* E* oRECORD+  f+ F+ LUNIT)  & 1   È  20) CSPACÇ !  1  òEXCLAMATION MARKÉ "+ 2+ LQUOT) #) 3) ²NUMBER SIGNO $& 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 0"'"¹  7$ ƒPOSTROPH(I 8% ñLEFT PARENTHESISP +')+ 9+ ORIGH,  *, A, sASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF 0" 3[¢DIGIT ZEROG 1% `% #ONt2$ Y$ #TWH 3$ T$ 3HREJ 4& T“ 3FOU‘5% SK 3FIVJ 6% Q% 2SIXÜ 7$ Q$ 3EVEè8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 ML1 æLb ðM'        #  0x4ðD -> LATIN CAPITAL LETTER M
    'N'   #  0x4E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 óEFT SQUARE BRACKET$\\/ « 5C. ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿrOW LINEÖ `# 6ñYGRAVEJ a' çESMAL©AV b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ Ó�	/ K/ l/ Ô°	/ L/ m/ Ù/  Ýn/ Ù/  Ûo/ Ü¼ Ùp/ 7è^  ×q/ ðÕr/ ðÓs/ ð"t/ ðöu/ ðÍv/ ðËw/ ðÉx/ ðÀ LETTER X
  c  'y'  ð#  0x79 -> LATIN SMALL LETTER Y
' +'z/ A/ Z/ {/ B/ òEFT CURLY BRACKET- |- C- ÒVERTICAL LINE( }( D( ORIGHV ~. E. CTILDN B\x7f# F  TDELET! Pu20ac# !  80! ’EURO SIGN“ f\ufffe$ 1$ ”UNDEFINED$ F201a$ 2$ ôSINGLE LOW-9 QUOTATION MARK6 
Z 36 Z ~ 4$ ODOUBZ F2026� 56 ôHORIZONTAL ELLIPSISˆ F2020. 6. gDAGGER! 1! 7! … 
( 
Ñ 8( Ñ  3m •ŸPER MILLEx�M 9™ „xáEFT-POINTING AŒ†›h 0xa8f "  (—gDIAEREF@02c7& $ �DCAROH)xbD �tCEDILLAg	?9ŽŠ Au201H f 9ŽLv÷ ã 6201'9ŸV6 9Ÿk €k d9°k 6 &226 °DBULL@\÷ 3! £tEN DASH=F2014" ¤)EM" 
_ž1‰ žQTRADE¸Ÿ9Ÿ9Ÿ  9 é9 6MAC}Vu02db�_OGONEŒ9ž|!xa¹A ÕNO-BREAK SPACW	jA¥M ñM ”HCENTd!xaô$ ‚ZPOUND% ÷% rˆCURRENCY( 
ÈAd• 6L g”BROKEN BA!xaç% j1SECÞ8!xd¨' o~@CAPI‡€�O WITH STi Î!xa°= ˆACOPY7	Ö 1015´ ð #  0xAA -> LATIðN CAPITAL LETTER R WITH CEDILLA
    '\xab'
 õ& #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARKD cD CD …NOT SIGN# d# D# ¦SOFT HYPHE& e& E& ©REGISTEREDP (c6* F* MLATIõ $AE‚ 'b02  B02 iDEGREEX (b1& 1& ªPLUS-MINUS* 2* 2* õ SUPERSCRIPT TWOz 3* 3* 6HRE¦ 4, 4, ÅACUTE ACCENTS 5' 5' ZMICRO¢ $ B6% zPILCROW' 7L 7' •MIDDLE DOq (f8% 8% pESMALcOcVSTROKÓ 9; 9; )$ON* Au015Œ Œ BA* e  ÈbÈBÈORIGHÉbÉBÉ±VULGAR FRACø ONUARTER�ÜBÜ6 EHALF3 eé3 T1 QUk S9 eÔø	ˆöAu010RSCöSAºTOGONEØAu012¨ = = I= 0r=  = z TMACRO	 · é = 3= Cz ##cñ  ÒCC< y …DIAERESIcc\C\@ 	R%GABOVÇ1.½ xA E½ t1Y= Ž= 	7Â= ¦î7&CAs(xc§C§y 	sAu017> x ¹x Zò < 1ë¹x 	KDOT n21´@ G| 
ÿGu013~ ¼> K>  2aÉø Ç> !­3´= Ë5L{ 6_DÙÀTIN CAPITAL ó-LETTER S WITH CARON
    '\u0143'   #  0xD1 -> LATIN CAPITAL < N< WACUTE< 5< 2< sCEDILLA> !xdx z 3> Oz cz 4< 6MACó !xdµ y 5= DTILDó 0xd6w < 6< •DIAERESISõ 7@ 7@ ÷MULTIPLICATION SIG� 720 �8. �U#cOGONEKk  Ú1= 9= L= TSTROKè Vu015a= A= S6< B< ¶ �ØaC= aVu017b¹ D@ Zö ‡DOT ABOVù &7d@ E@ L0xdf: ¼ F< ESMALJdSHARP Au010�ä/E05 A¯ â2r ; ¼	p I; 0E»	; v 	¢ ± Åv ¸	; Cv 7xe4 E¶	: u Ú!xe'^E·> LRINGÙ 19 · º	? E· h1¬; µ‡; -OEÂ	; -	Me® ï ¿	: ° g €E¼	: : 1Ûº	: t ; 2'»	> Gb
Gu013z ·	< K< 2óE³	< Ÿ3pÚ²"³ 6CF¹!Û š
v F¸r�: ·: ÀH CEDILLA
  �  '\xf3'  ð#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
/ p'\u014d< : 4: cMACRON; 0xf59 "  ; 5; DTILDu 8xf6: 6: •DIAERESISx 7> 7> ÄDIVISION SIG  Au017  8(  UcOGONEKc  2e ; 9; L; TSTROKÜ Vu015b; A; S; ‹6: B: ° ‹cs ‹C; Q )@ î D> Z³ ‡DOT ABOVñ  7e~ > E> &CAAVu02d9: F: ^ ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð+ cp1258 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP7  .TXT' withA “ P.py.
y ±#"

import  sÖ v ÁAPIs

class  ($ . 1):
�Adef ÷ ñe(self,input,errors='strict'):,  Õcreturno B = , 4ing)C  o Bo *B 	o  o ú ±Incrementalí$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� Ddª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  ¦�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±bname='”%', e !e=1 2().     ig: 'r=Ðz/ J 	/ å/ sqr8=E# w”# ¡# ")
[  šTñ
~ åð = (
    '\x00'   ð  #  0x00 -> NULL
    '\x01'
  1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t" Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG '10# 1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ(19‘¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"÷u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þP3[“DIGIT ZER¡ø% `% òï$ Y$ éæ$ T$ àÀ4'        # ð 0x34 -> DIGIT FOUR
    '5'    # % 5% 2IVE% 6% 6% 2SIX$ 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& 3NIN• :% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, F, ÒQUESTION MARK@(  40( ÃCOMMERCIAL A4A( 1( òLATIN CAPITAL LETTER AY B1 21 B1 C1 31 C1 D1 �“ D1 E1 �1 F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 Ob P1 51 P1 Q1 Q1 R1 ;S1 Sb T1 ÔU1 Ub V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ ñ5ãREVERSE SOLIDU¯])  * R¦Y ^/ óCIRCUMFLEX ACCEN… _, ÿEOW Lß`# 6ñYGRAVEJ a' çÀSMALL LETTER  A
    'b'   ò#  0x62 -> LATIN SMALL LETTER B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ E/ f/ 6/ F/ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ ðR/ s/ ðS/ t/ ðT/ u/ ðU/ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðóEFT CURLY BRACKEG|- îÃVERTICAL LIN0}( çORIGHV ~. æCTILDN 3\x7�:7×TDELET! Au20a1! 8ÉƒEURO SIGQ\ufff÷$ ¾ƒUNDEFINE`\u201aŽ $ ³óSINGLE LOW-9 QUOTATION MARf\u01926 º¥F WITH HOO9 7201“ ÄODOUBo F2026o ËóHORIZONTAL ELLIPSI( Ó &20. ÊSDAGGEx! 1! ¼… 
( 702cw µ„MODIFIER¼óCIRCUMFLEX ACCEN7 d 3… ÂŸPER MILLE¥¼¥ &39± ±¥áEFT-POINTING A¹³5³ÈŒ@CAPIG¥LIGATURE Oe
AÔœ $ À  #  0x8E ->ÿ UNDEFINED
    '\ufffe'   #  0x8F ->$ /90$ E2018H  91$ ôLEFT SINGLE QUOTATION MARK} F20195 25 ORIGH6 c6 36 k ODOUBk 	d5 45 k 6 &226 56 gBULLETÂ 3! 6! wEN DASH" 4" 7" M" 702dÐ 8" µSMALL TILDEH 1‹ 9& QTRADEQT SIGN* 	Ó 9A* ÷F203a– B$ ª¿-POINTING A¿7015ý CE bLATIN ¿ ¥LIGATURE OÅ 
› D2 › 
$ E$ 7017n¶z óCAPITAL LETTER Y WITH DIAERESIS#0xa0ý öAÒÔNO-BREAK SPAC± 8xa1) ×ý INVERTED EXCLAMÖ!xa3] Ö0CENÕ¤!xa9$ ÄXPOUNDÉ!xa9% ´ŠCURRENCY( 5¥ ¦:YEN# 6# ¨¥BROKEN BAR7% «1SEC¶`!xa{— °aØ$ ®ACOPY]
™ ‡) ­ö
FEMININE ORDINAL INDICATO© b© ¾ ¶Õ½!xaty ½+NO¥2# ®¤SOFT HYPHEo!xa@& °›REGISTEREÐf· ¶UMACROK b—B—iDEGREE3b”B”ªPLUS-MINUS* ŠBŠô SUPERSCRIPT TWOûb�B�	* 5HREb—B—€ACUTE ACèS –B–ZMICRO¢ ˜B˜zPILCROW' šBš”MIDDLE DOŒ(xb˜B˜uCEDILLA“ –B–æ &ONä —B—oMASCUL˜
b˜B˜ò™b™B™¢VULGAR FRAŽ ONREARTEb¬B¬6 ÀFRACTION ONEð HALF
    '\xbe'
 õ #  0xBE -> VULGAR FRACTION THREE QUARTERS9 f9 F9 ÑINVERTED QUES; DMARK1 'c01  C01 õLATIN CAPITAL LETTER A WITH GRAVE< 1< 1< FACUT< 2< 2< £CIRCUMFLEX} Au010C #/C3A 7BRE¹ 4} 4< …DIAERESIf(c5@ 5@ ‡RING ABO� 6A 6A 072 72 C¨sCEDILLA-8xc8> 8> E> 
æ9< 9< 
æa< A< æ8xcbA BA ªAu030á&C@ `COMBIN“ç u ACCENT*dq D1 I*
î ¶C¶< 	î  ¾C¾A 	î &11î DÍD½ USTROKbdÎDÎN= DTILD<  g&gDÎgJHOOKÿ'd3eD¼Ok 	ed¼D¼< eGu01a%½A DHORNd·D·;  (xdÅDÅ¡MULTIPLICA›6SIGn µDµn Î� BD¶Ucç ¶D¶< 
Ÿ±D±< Ÿ8xdc²A d ßF‹Á@ ß Æ™; ÀÆð!xdc ^©ESMAL4eSHARP 6ew5 ðE0 -> LATIN SMALLð LETTER A WITH GRAVE
    '\xe1'
 û #  0xE1 -> LATIN SMALL: FACUT: 2: 2: £CIRCUMFLEXy Pu0103A y 3? 7BRE³ 48  ³ 4: “DIAERESISx 8xe5> 5> ‡RING ABO} 6? 6? &70 70 CšuCEDILLA« 8< 8< E< 
Ö9: 9: 
Öa: A: Ö8xeb? B? œAu030�C> aCOMBIN‡ }u ACCENT"do D1 ¾ I"
è e: E: è  f? F? è &11è /F0> D· USTROKPf9 ýF°N; DTILD: Fu032qF°]”DOT BELOWZf, h ŸOh 	ZfŸFŸ: ZAu01aã F ? EHORN² šFš9 “(xf¨F¨ÆDIVISION SIGf ”F”f »•F•US	Ïf•F•: 
��F�: �7xfcçF‘` ? TPu01b0@ Ëž> ËAu20a¸ 9 �JDONG‰‚F‚YN› ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ñ	 cp273 generated from 'p5 "-m+ ðs/CP273.TXT' with0 � P.py.
g ±#"

import  sÄ d ÁAPIs

class  ($ Às.Codec):

 ó   def encode(self,input,errors='strict'):
  preturn 1 ³cs.charmap_B = , ±ing_table)
C  o  de> o )B 	o  o ñclass IncrementalEç  r(~ >cs. ç  ¤ ½  h Ã final=False*   Y.S][0]

ª D"ª  €  ª ø ª (@ ä ª  Qª óStreamWriter(Codec,T ¤ Dpassã  ORead9  	9 2### ðings module API

ý Ãgetregentry(7 
�ž QInfo( ±Õname='cp273', ñ=0 2().  e   if: .r=_/ J 	/ ä/ spr7=D# w“#  # @)


J[ Ping T” D5codä2 = '`'\x00'-ñ  #  0x00 -> NULL (NUL)7 & 1& 1& öSTART OF HEADING (SOH2 22 22 –TEXT (STX/ 3/ 3/ 0END_ - E- )9c- 4- 0STR„  TERMINATOR` _ t0 æ 52 ô	CHARACTER TABULATION (HT5 3x867 65 õ õSELECTED AREA (SSA8 )7f8 78 ¦DELETE (DEU)97( 8( ô UGUARD] &EP] )8d5 95 õREVERSE LINE FEED (RI� )8e2 A2 ðSINGLE-SHIFT TWOÁ 22 )0b2 B2 \ )V)0�C0 CFORMŒ $FFZ rX ˆD* ôCARRIAGE RETURN (CR0 *x0¼ E0 µ  OUBO* 
uF* VIN (S1ñ1ñàDATALINK ESCAP§%LEZ 1ü1üðDEVICE CONTROL ON4 &C14 	þ1þ4 v&DCv114 1HREj 3j 91ðOPERATING SYSTEM ð	COMMAND (OSC)
    '\x85'
 õ  #  0x15 -> NEXT LINE (NEL+ )08+ 6+ ÕBACKSPACE (BS* )87* 7* õ
END OF SELECTED AREA (ESA6 1` 86 ¶CANCEL (CAN( 9^ 9( ^ ¥MEDIUM (EM. )92. A. õPRIVATE USE TWO (PU21 88f'B1 õSINGLE-SHIFT THREE (SS34 )1c4 C4 öFILE SEPARATOR (IS40 d0 D0 ZGROUP1 a e1 E1 jRECORD2 Ç 1Ç F2 JUNIT0 1“ (80b  200 öPADDING CHARACTER (PAD3 13 13 öHIGH OCTET PRESET (HOP3 	Ž 223 ÀBREAK PERMIT0HERO&PH6 3i 36 2NO 9 / 'NB/ 4/ 4/ •INDEX (IN¿ n% û2ûö…FEED (LF€ 1Ð2úröTRANSMISSION BLOCK (ETB; bg `2PSCAPEýˆ	ý2ýwpTABULATd STm	2±: ÒWITH JUSTIFICM E(HTJ« )8a« *D ~ V~ 
à .rPARTIALCµFORWARD (PL{)x8020	6  X7 U¢ 0­27ÆENQUIRY (ENQ) 6Ë /öACKNOWLEDGE (ACK- 
Þ*wBELL (Bþ9 3 ðDEVICE CONTROL STR.6(DCž9$3$POf&PUˆ1» 3"ð SYNCHRONOUS IDL}Y93 ¨›@T STí'(S·9#3#l<6(CCU9|3.ÁMESSAGE WAITú %MWV9È 4PSTARTUGUARD&SP0™ 0;Ð kF(EOTl 	=3=l –'SO–	434ä‡ GRAPHICôIÞ0DUCÿFSGCIw 	131F E	> = 	939IˆEQUENCE = &CSz 1&@�ðFOUR (DC4)
    '\xA15'  ð#  0x3D -> NEGATIVE ACKNOWLEDGE (NAK)
+ Y'\x9e6 E6 ÐPRIVACY MESSA1 %PM0 01a': "  f F0 ó SUBSTITUTE (SUB,  )  , !40, DPACE} #a0$ M  41! ¨NO-BREAK S* )e2* 2* òLATIN SMALL LETTER A WITH CIRCUMFLEXj {= ‹ 3@ òEFT CURLY BRACKET. :\xe˜ 4. n EGRAVÓ #e1l Ó 5; FACUT; 3; 6; FTILD; 	ü/47; ‡RING ABO¶ 7{ 8@ C_dEDILLA.fó 9= N= 	¸ )c4x A; lCAPITAÙ’DIAERESIS| .> ØBA ’FULL STOP% <% C% âLESS-THAN SIGN* (* DL'vPARENTH{ +, :7LUSQ !% /òEXCLAMATION MARK} &, 5/’AMPERSAND% C\xe9( `53	 Em
`	»5D; DI\xeb{ D@ «I\xe8? U? 
Ud; UIõ 	à5U; õ  f{ Z@ õ c? Y? õ ~8 Û5W	=d\ =U� $b =gDOLLARÄ*' ?sASTERIS¼)$ 9mRIGHT :;- :ƒSEMICOLO‹^% :Ÿc ACCEN±-- 6;³HYPHEN-MINU//( >TSOLID# 9\xcj6&“” £[e ( ElSQUAREmcm6q %Ð\xc1'      # ð& 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
    '\xc3'
 @  # = 6= FTILD= 5= 7= –RING ABOVB 7B 8B C¼ tCEDILLA¾ )d1? 9? N? 	¾ )f6= A= ESMAL6O; ’DIAERESIS| ,<  :B? CCOMM� %! C! ÂPERCENT SIGNI _( D( sLOW LIN(>$ E$ ÇGREATER-THANQ ?- F- ÒQUESTION MARKz C\xf8, ý 70) :SSTROK’ I\xc9< 1< vE@
va= 2= ¤CIRCUMFLEX» )cbB 3B ¿:\xcü 4A 7GRA·d~ sIý e= s= ý  fB xB ý cA wA ý `: ù7u! 0 ACÝ£:( `CCOLOù#! BgNUMBERÏ9\xa$7H1SECÎH2"'"È˜ H0APO·#PH¸=u JgEQUALSu "' D1OTAw EdI8E	I � Gµ 8G	ƒUõ0 :	0 B…ç0 (	0 C0 ×0 	0 D0 Ê0 
	0 ¸0 ý	0 F` gˆ8ë	0 G0 h0 Ú	0 H0 i0 Í I0 4\xaƒ38Õ LEFT-POINTàÿ DOUBLE ANGLE QU3bE ùORIGHF !f0¾ À  #  0x8C ->ð LATIN SMALL LETTER ETH (Icelandic)
    '\xfd'
 Ï  #  0x8D ->> ÅY WITH ACUTE; e; E; _THORN{ )b1@ F@ ô PLUS-MINUS SIGNk (b0+  90+ gDEGREE' j$  Í  91'  JW k0 20 K0 l0 30 L0 m0 40 M0 n0 50 o0 60 O` p0 70 P0 q0 80 Q0 r0 90 R0 C\xaa3 } 9A0 õ
FEMININE ORDINAL INDICATO6 b6 B6 oMASCUL7 
)e6m C7  Aà)b81 tCEDILLAÁ cT eCAPITA~V )a4V ö‡CURRENCYÍH\xb5) AôYMICRO& )df& óó SHARP S (Germanÿs< 2ASñ t0 T0 u0 U0 v0 V0 w0 W0 x0 X0 y0 Y0 z0 Z0 9\xaAó	INVERTED EXCLAMATION MAR‡:\xbô5 MQUES2 d@Aü¨&d&A<@ (d(A%*aB 4©REGISTERED#a2„SB6JCENT% 3% 5KPOUNK 	�B9YENJ )b7J “MIDDLE DOI\xa9& ˆCOPYRIGHš @' �B ÅCOMMERCIAL AS bzð B6 -> PILCROW SàIGN
    '\xbc'
 õ  #  0xB7 -> VULGAR FRACTION ONE QUARTER7 d7 87 EHALF4 e4 94 ETHREm S: a¥ A: UNOT SÉ |[  É B$ ÓVERTICAL LINEM Bu203‰ ò C) GOVER$ 3xa8P $ D$ …DIAERESI– )b4% E% ÃACUTE ACCENTq 9xd7( F( ¡MULTIPLICAbÉ 9\xeW  C0/ ûLATIN SMALL LETTER A WITH – Ak &C1? PCAPITA   B2 22 B2 C2 32 C2 D2 42 D2 E2 52 ÙF2 62 ’G2 ýk,G– H2 ø2 H2 I2 ö2 I2 9\xa\Cî¥SOFT HYPHEºf(ñY 	(O(¥CIRCUMFLEXg 6œ äC•BROKEN BAé)f2& 
f CGRAV�I\xf3;  ; :œ )f5; 3; FTILDv 	,D?U?Jw ?D?J¬ K2 ?K2 L2 ?L2 M2 ?M2 N2 ?PO2 ?Od P2 ?P2 Q2 ?Q2 R2 ?²#b95 ØD? UPERSCRIPTÎ] I\xfb+ C,C}= -CõRIGHT CURLY BRACKE	fš Lo 
Lam Õ L; 
Lf; À  #  0xDF ->ð  LATIN SMALL LETTER Y WITH DIAERESIS
    '\xd6'
 Ã  #  0xE0 ->? eCAPITAA OA )f7A 1A ÒDIVISION SIGNj S&  j 2) © j œ T2 32 Td U2 42 U2 V2 52 V2 W2 62 W2 X2 72 X2 Y2 82 Y2 Z2 92 Z2 C\xb25 úA2 ô SUPERSCRIPT TWO+ )d4+ B+ »%“CIRCUMFLEÑ #\\@ ýCB ãREVERSE SOLIDUö:\xd˜ D+ m 	UGRAVEª 3j Õ E= FACUT= 5= F= CTILD= 0: ßFI“DIGIT ZERJ1& . & #ONK ÿ K *K ”ç % % 3HREL ¸' ' BFOUR7÷ & & I])& ú& #SIê% í% 3EVE8	â' CEIGHÑ9' ×' $NI14\xböFËC\xdbV - ÍUòÍ]? ã Í ¶ ã SQUARE BRACKEÅ 4\xdÈ r Òr 
Òap = Ò= 	Ò)9f= Ò€APPLICAT óPROGRAM COMMAND (APC)
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð- cp424 generated from 'MAPPINGS/VENDORS/MISC/CP424.TXT' with6 ‡ P.py.
m ±#"

import  sÊ j ÁAPIs

class  ($ . 1):
Adef ë ñe(self,input,errors='strict'):,  :creturno B = , 4ingC  o 6o *àdecode(input,eð!rrors,decoding_table)

class IncrementalEncoder( >cs. Á):
    def e, ó
(self, input, final=False*  . sreturn U ƒcharmap_@ :  F ".e§  § ?[0]ª  DÌ ª  €  ª ø eª '@ ª  ª óStreamWriter(Codec,ÿ  ¤ Dpassã  0Rea‡9   	9 2###�ðings module API

ý Ãgetregentry(7 
�e QInfo(Û ±Õname='cp424', ˜!e=0 2().     if: .r=_/ J 	/ ä/ spr7=D# w“#  # @)


J[ Ping T% D52 = '`'\x00'-ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ & (9c& 4& TSELECG t  ¹ 5! ôHORIZONTAL TABULATIONw "862 é 60 ôREQUIRED NEW LINE, (7f, 7, UDELET! (97! 8! ÕGRAPHIC ESCAP) (8d) 9) ¤SUPERSCRIPÌ 8x8e& A& UREPEA! (0b! B! oVERTICë 0<C. “FORM FEEDã rP ?D$ åCARRIAGE RETUR90� E* †SHIFT OU  	1F$ IG 1i1i@DATAxK51u1uöDEVICE CONTROL O¬1w1w- 3TWOö (x1|1|- 5HRE¾9¾1…úRESTORE/ENABLE PRESENTj5]j1ša(08# �…BACKSPAC} 8d1…ù
PROGRAM OPERATOR COMMUNIC€ 1] �UCANCEÕ(19~ •‚dMEDIUM.9[—PUNIT «  ¬  1 ÉCUSTOMER USE°�1��ILE SEPAÕ ~ ð1d'     #  0x1D -ð> GROUP SEPARATOR
    '\x1e'
 ÿ #  0x1E -> RECORD+  f+ F+ NUNIT) '80)  20) 1DIG* DLECT{ (81' 1' õSTART OF SIGNIFICANCE0 20 20 OFIELª  (83* 3* WÓ –UNDERSCORT 4* 4* óBYPASS OR INHIBIT PRESENTATION� n7  8 259 “LINE FEED$ 2x17& \ 26$ 0ENDß õTRANSMISSION BLOCK4 b4 74 FSCAP² 8! 8! ÆSET ATTRIBUT( 9( 9( ^4fEXTEND¬ (8a/ A/ pET MODEdSWITCH¥ 8¥ B- ðCONTROL SEQUENCE55FIX2 c_ C2 rMODIFY � ¿ (051 D1 tENQUIRYS (06" º¥ACKNOWLEDG0„µDBELLE 9«3«¥<reserved>% ©3©% 1� 3žõ SYNCHRONOUS IDL” 9Ÿ3Ÿ´INDEX RETURc(x9œ3œŠW POSI“(x933“hUPARENv9¨ •ö NUMERIC BACKSPAr0‚ �Á'š3švUBSCRIP~ –3– û ˆNT TABULc(x9“3“ÉREVERSE FORMk9’3’õUSTOMER USE THRE€1× �tDEVICE Æ6FOU"	WŠŸNEGATIVE q 9Q3—- 	Û –uSUBSTITÂ Þ c4œžAu05d¾_4—óHEBREW LETTER ALEF� - Æ- Ÿ
- $BE¥ , k,  
, DGIMEC . Ð. §
. 9DAL\ ~. ¥
. H§ Y {+ ª
+ 7VAVß Ø, ª
, DZAYIZ Z . ª
. H± Ø, ²
, T, !xa7²²ACENTÎª .Öª’FULL STOP$ <$ ¡—LESS-THANM () œQLEFT óÀTHESIS
    '3+'  ð#  0x4E -> PLUS SIGN
 +'|$ F$ ÒVERTICAL LINE( &(  50( ’AMPERSAND$ `\u05d9) p  51$ øHEBREW LETTER YO, a, 2, —FINAL KAF^ b2 32 
, c, 4, HLAMEŒ d. 5. Œ 7MEMŒ e2 62 
, f, 7, ^ #NU” H&e02 82 
, 1, 9, bSAMEKH¹ !*  ù £A/ òEXCLAMATION MARK+ $+ B+ gDOLLAR@*& C& sASTERISI )# D# òRIGHT PARENTHESISu ;, ³„SEMICOLO!xaÛ Ä ³7NOT– -G 6®³HYPHEN-MINUn /' ±TSOLID" ‹2' 06§ 4AYI™ Vu05e3- ¢ êPU^ 41 § 	+ 5+ ¤RTSADIM_ 64 ¦ . 7. ¨ 'QOŒ&e8, ¢ 3RESt‡ 6£HD!xa² Ý6¡¢BROKEN BARÙ ,z Æ6›RCOMMA  %  •hPERCEN&_' ™7LOW÷># �ÇGREATER-THANu?, ˜KQUESYV\ufff=7�xUNDEFIN“e7š
K2TAVî P ¤P 
t ›$ !xau{7ŽÕNO-BREAK SPAC·
M ŒM å |$ r$ 6201–7jzDOUBLE «`7g€GRAVE ACú.:' a^#  \XNUMBE÷@& b ‚‘ERCIAL ATn 1"'"§ Tc“APOSTROPHP=M eXEQUALª"& _)OT¹À  '\ufffe'  ð #  0x80 -> UNDEFINED
    'a'   $ 1$ òLATIN SMALL LETTER A/ b/ 2/ B/ c/ 3/ C/ d/ 4/ ¼ e/ 5/ E^ f/ 6/ F/ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ 3\xa{§A/ ôEFT-POINTING DOUBLE ANGLE QUOTATION MARKD bD BD ORIGHE Aufffy‰ CE T\$ D$ E$ 2xb1'l F$ õ PLUS-MINUS SIGNÛ 0* 9êgDEGREE& j# "  9ìJU k/ ì_l/ ìL^ m/ ìM/ n/ ìo/ ìO^ p/ ìP/ q/ ìQ/ r/ ìR/ ?9ìc9Ì$ «2xb8ž c9«cCEDILLòŽ ©(a4F ©‡CURRENCY�G\xb5( A§WMICRO% ~" ¦A¦CTILDÇs  —SNt/ —T/ u/ —U/ v/ —V/ w/ —W/ x/ —X/ y/ —Y/ z/ —Z/ 	A—A—A—
BA—ßA™À    '\xae'  ð   #  0xAF -> REGISTERED SIGN
    '^'   *  B0* òCIRCUMFLEX ACCENT, B\xa3/ , 1, HPOUNQ H\xa5% 2% 7YENt H\xb7# 3# –MIDDLE DOm 9% 4% ™COPYRIGHTN aN 5) kSECTIOu 6P 6' yPILCROWN (bc' 7' ¢VULGAR FRAV ´ONE QUARTER(bd6 86 EHALF3 e3 93 ETHREk S9 [6 Ü BA9 `LEFT S” ƒE BRACKEG]. B. C/  B\xaf2 ãC/ SMACRO0H\xa8! D! ƒDIAERESI¢ H\xb4$ E$ [ACUTEOd¹¥«MULTIPLICAÀ{R ÷ C©÷ ZCURLYö A- ªòLATIN CAPITAL LETTER AUB1 ¶1 B1 C1 Ä1 C1 D1 Ð1 D1 E1 Ø1 E1 F1 â1 ƒG1 ì1 Gb H1 ç1 H1 I1 å1 I1 8\xaICÝ¤SOFT HYPHE…Aufff>¦CÕƒUNDEFINE?\$ Ê$ Í$ Í$ Ê$ }DÀ‰Á J. ÁJ9K1 ÁK1 L1 ÁL1 M1 ÁM1 N1 Á×O1 ÁOb P1 ÁP1 Q1 ÁQ1 R1 Á
·DÁÓUPERSCRIPT ON¯¡DÅDÅÀDD -> UNDEFIÿNED
    '\ufffe'   #  0xDE -> UNDEFI$ F$ \D  S H  E0$ ó REVERSE SOLIDUSr 2xf7, * 1* ÒDIVISION SIGN( S% š  E2( óLATIN CAPITAL LETTER Y T1 31 Tb U1 41 U1 V1 51 V1 W1 61 W1 X1 71 X1 Y1 81 Y1 Z1 91 Z1 B\xb24 °A1 ó SUPERSCRIPT TWO* 
L EB* L/EC$ D$ ¸E¸0Û fF¸“DIGIT ZERÙ 1% ³ % 2ONEý $I ¯I !3H ¢$ 3HREJ 4& —& BFOURo 5% ‹% #IVJ 6% % #SIAŒ¸ r$ 3EVE�8J g& CEIGHQ9& \& $NI)3\xbPFPžFRFRFRFR2x9fä ¼ Ró ONES
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð) cp437 generated from 'VENDORS/MICSFT/PC/CP437.TXT' with2 ƒ P.py.
i ±#"

import  sÆ f ÁAPIs

class  ($ . 1):
�Adef ç ñe(self,input,errors='strict'):,  %creturno B = , †ing_map)m 0m *B 	m   m ª)ø ±IncrementalÛ$er å  h Ã final=False*  W.Q
?[0]¨  DP
¨ ÀementalDecodóer):
    def decode(self, input, final=False*  . preturn / ³cs.charmap_@ :  F �.errors, óing_table)[0]

class StreamWriter(Codec,U  z Jpass9 ORead9  	9 ð### encodings module API

ý Ãgetregentry(7 
æ ž QInfo(1 Õname='cp437', d !e=0 2().     ²incremental: 6r=I EÀ /er/ J 	/ DÒ/ spr7=c*R # w“#  # 0)

IZ ping MapAWd_map =ñmake_identity_dict(range(256))
°  Ámap.update({F€0x0080:  0c7,kö #  LATIN CAPITAL LETTER C WITH CEDILLA? 1? +fc? ESMAL= U= –DIAERESIS? 2? /e9? 	E? VACUTE; 3; 2; 	A; ¦CIRCUMFLEX@ 4@ 4@ º  5? 0? GGRAVº 6; 5; ˆRING ABO@ 7@ ³	t±8= a} 	r79@ b@ 7 a? 8? 7b; f; 	Iñz  c? e? ù d@ ê
 º e; ckd­¼  fA 2A 4 9çiB ù
k9å/e6;–IGATURE Aä9Ùc3 p 5 Óf(	ÙOâ£ 9Ófu @ f9ÓfR
 
â9ÓfÀATIN SMALL LñETTER U WITH CIRCUMFLEX
    0x0097: 0f9, ù #  LATIN SMALL L@ VGRAVE; 8; f; 	Y{ –DIAERESIS? 9? +d6? eCAPITA| OA aA cA ý ‚  bA %a2A –CENT SIGN§ c% 3% [POUND& d& 5& ;YEN$ e$ E20a7$ kPESETA' f' 6019– ’ FEHOOK« !a0: 50e1a :  A: FACUTÌ#a1; d; 	I; 2; f!v  Æv 3; av 	À; 4; ì 
N± GTILDì 5; d; y= 6= a³ öFEMININE ORDINAL INDICATORšfb6 oMASCUL7 bbb÷INVERTED QUESTION MARUE2310R»REVERSED NOÛaAaA$ $b±VULGAR FRAC� †ONE HALFî 3bX 4 gQUARTE%D˜î qEXCLAMAp 
ñ UE00abñ ÿLEFT-POINTING DOUBLE ANGLE QUOTE s&0bE ORIGHF b6259À LF G SHAbk'25àlMEDIUM( X6259XLDARK& C6250.ÒBOX DRAWINGS ‚  4EICAL£b?E252477 P AND W@ D6256ì 	@ q 1 SIyA �H O?256¿ H Ç‰ X H a6255M	� CDOWN| Í D n6255ÄD Ð €&56µD Ž× É ”?255YA 8 ¨ð2557,     #  BOX Dð!RAWINGS DOUBLE DOWN AND LEFT
    0x00bc: 0x255d, › #  BOX D= /UP;  d; c; $UP{ v v SINGLE} eB bB 2 } R B fB /10B _LIGHTû #c0< 4< 	ú RI w "c1; 3; ¦HORIZONTAL@ 2@ 2;· B 3B 1B 
�VERTICAL@Ã 4A 0:
z 59 3z F 6F /5e}º Á #c7I fI  ŒI Z ”8I aI @ 9< < ƒ� z a> /69z MbA 6A 
 C 6Â —GÆ B | 6R| G /67#UP€A Rd/68H ’  H Qd%6/WN’ //65’ Ù” 75k
´§£ èd95	gC œ C C/52Ð E B3E y Š V Š >6‚ðI òC6CN † — N d œ U1i%�ÕÀ  0x00da: 0x`250c,  ð#  BOX DRAWINGS LIGHT DOWN AND R 
) å0x00db: 0x2588= ¦FULL BLOCK& c& 4& ¬LOWER HALF, d, � OLEFT+ e+ %90W ž , f, 8, ?UPPƒ  e0, E03b1X õ	GREEK SMALL LETTER ALPHAã !e14 50df4 ZLATIN4 vSHARP S6 26 53936 j eCAPITAl GGAMMl 36 cÌ 6 	  &PIg 41 ag 8SIGg 56 c6 	g 4 64 50b5Ñ ¦MICRO SIGN� 7& &3cÁ  6TAU2 82 %a6X 2 )'PHö 94 9œ4 GTHET]a6 /a9j GOMEG6 ?03bÒ 
8DELj 521ej †INFINITYø <03cø 	„	ö '03‚ö 	2 gEPSILO’&22ö §INTERSECTI( f6226ÅIDENTICAL TO¸ fCªPLUS-MINUSf62263ûGREATER-THAN OR EQU_ 6226oOLESS1 623232TOP) é FGRAL½ ù6232å oBOTTOM0 õ%f7É‹DIVISIONë ø6224’oALMOSTâ  ñ&0b±  DEÉR ä6221¸ö BULLET OPERATORÖ Ù&0b¦ ¦MIDDLE DOT& ÉE221aÌ ˜SQUARE RO' ¼&07ïÏSUPERSCRIPT û lfÔ60b2c < 'TWGÍ625abBLACK ” ¶ ¿'00( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (U `'\x00'æ@ #  ê’00 -> NUL( ! 1! 1! õSTART OF HEADINGN 2- 2- 2TEXƒ W 3* 3* 0ENDU 	( 4( 4( pRANSMISƒ‚ 50 à5 -> ENQUIRY
     '\x06'  ð
#  0x0006 -> ACKNOWLEDGE
  ( 7( •7 -> BELL! 8! 8! tACKSPACG t$ $  o 9& óHORIZONTAL TABULATIONX n2 a2 “LINE FEED& 2x0b( X b& oVERTICV :x0c0 c0 HFORMV r$ ® d& äCARRIAGE RETUR¨ 2x0e. ‚ e, •SHIFT OUT¨ f& f& IK )10%  10% ô DATA LINK ESCAPR:x11- 1- öEVICE CONTROL ON/ 2/ 2/  4TWO° *13/ 3/ 6HRE` 41 41  EFOURa 50 50 �NEGATIVE‰1±1±ö SYNCHRONOUS IDLŽ 
¶1¶õ
END OF TRANSMISSION BLOCK” 
Ë1ËUCANCEî*19· ÈY eMEDIUMM a* À–SUBSTITUTª 
Á1Áê
´1´ÆILE SEPARATOVdu ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2Æ!" »aEXCLAMC MAR•"- ¹LQUOT+ #+ µ£NUMBER SIGh$( ¬HOLLA( %( ¤wPERCENTQ &) œ‚AMPERSAN¬0"'"R  *2•“APOSTROPH(M †òLEFT PARENTHESISf)- �ORIGH.  *. ”sASTERISq+% ’GPLUSó ,& •RCOMMA› -" Œ³HYPHEN-MINUÄ .) ‰’FULL STOPO /& ‚TSOLIDJ >{3{“DIGIT ZERÝ8' €' 2/& y& )&& t&  ( t› ' sO 3FIV$
' q' 2SIX3& À 0x0037 -> DðIGIT SEVEN
    '8'   á#  0x0038 -> D( REIGHT( 9( 9( BNINE' :' a' CCOLOq ;" b" GSEMI& <& c& ÓLESS-THAN SIGQ =+ d+ gEQUALS( >( e( |GREATERV ?. f. ÒQUESTION MARKó @*  40* ÃCOMMERCIAL ADA* 1* òLATIN CAPITAL LETTER A] B3 23 B3 C3 33 C3 D3 43 D3 E3 53 F3 63 Ff G3 73 G3 H3 ÑeH3 I3 Ü3 I3 J3 è3 J3 K3 ù3 [L3 1Lf M3 f M3 N3 3 tO3 3 Of P3 5'3 P3 Q3 0Q3 R3 0R3 S3 0S3 T3 0üU3 0Uf V3 0V3 W3 0W3 X3 0X3 Y3 0Y3 Z3 0Z3 [3 0óEFT SQUARE BRACKEb$\\1 Ê5-ãREVERSE SOLIDUÁ]+  , &Rð] ^1 $óCIRCUMFLEX ACCEN‹ _. EOW L+`% 6YGRAVEN a) LSMAL5b1 À062 -> LATINð SMALL LETTER B
    'c'   ú#  0x0063 -> LATIN1 C1 d1 41 D1 e1 51 E1 f1 61 F1 g1 71 G1 h1 81 H1 i1 91 I1 j1 a1 J1 k1 b1 K1 l1 c1 L1 m1 d1 M1 n1 e1 N1 o1 f1 O1 p1 /701 P1 q1 11 Q1 r1 21 R1 s1 S1 t1 T1 u1 U1 v1 V1 w1 W1 x1 X1 y1 Y1 z1 Z1 {1 óEFT CURLY BRACKEU|/ ÃVERTICAL LIN^}* ORIGHZ ~0 CTILDR 3\x7³C7÷UDELET# "c7H # 8éPCAPIT¤ ™âC WITH CEDILLA3\xf©@ øU> ƒDIAERESI¥J\xe9€ E@ 6ACU¼ *e2< A< “CIRCUMFLE-J\xe4A "A ½ 0@ 1@ EGRAVy*e5< << ‡RING ABOA ºL¸*ea Yx< bA iA <À\xe8'     # ð& 0x008a -> LATIN SMALL LETTER E WITH GRAVE
    '\xef'
 2 # < b< I< •DIAERESIS@ e@ c@ ¥CIRCUMFLEXA cA dA 	½ *c4< e< eCAPITAû A¿ *c5B fB †RING ABOB)c9C /90C €FACUT€6> 1> ¼•IGATURE A4 c4 24 ÷ 6 f-&936 j &O+ªfw 4A +*f2ë 5@ 	ê*fb< 6< U½ ¦7A 
} 
$/98< Y} ù d99@ °	|B 
%9âB B a}è”CENT SIGN�*a3gÎZPOUND' 
69´8YEN% Pu20a7N Z9�iPESETA( 1019œ ( ƒ	˜F^DHOOK¯  e1a  ½a{	; þ
yd< y“ù	< f'a�	x K
< ax ‡É
< ð ‚N+ETILD5d< ~C> a¶ €ôFEMININE ORDINAL INDICATOR¡b7 voMASCUL8 
rarôINVERTED QUESTION MARPu2310ZGae»REVERSED NOé
QaQ% b#4±VULGAR FRAC„ …ONE HALFó Z C5 eQUARTE+a Tó qEXCLAMAr ö ðxab'     #  0x00ð+ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
    '\xbb'
   #  0x00afF ORIGHG Pu2591I G  b0G LG c SHADEo  ( 2( 1( mMEDIUM) 3) 2) LDARK' 0P 3' ÒBOX DRAWINGS … †VERTICALˆ (24_ 48 A AND]A 6ñ 5A s 1 SI€B –I 	Â 6I Ï‹ Y I (56Ó 7I CDOWN~ Ð E 5E 8E Ó 	¼9E  ™#Ì 	^aB 9 7À b9 w  d> c> %UPAz c< d< /UP}ŽEÒ	Í#UP° S † (10† Ï	C ÿ 1cÅ=  þ &y 3< Ù< ‰HORIZONT’@cñA  º C 1C EÆ 0?c| 3| y	óG '5eÀc„Ä 
(5fJ ‹ XJ [ Û(5aJ Ï5Øƒ | (69| 	| R6cD 	S ZÉ 5C †~ 	[ÀRAWINGS DOUBû>LE VERTICAL AND HORIZONTAL
    '\u2567'   #  0x00cf -> BOX DRAWINGS UP SINGLEB w DOUBLEI 8I /d0I 3 I _ I 4I 1I RDOWN 5 K a K 5K 2K 5 K a K (59K 3K #UPI SRIGHT¥ D 	#4D w D ž D 2ˆ 5D Š F 3F 6F 5 Œ � Œ (6bF 7F }J „(6aO 8O ˆ ™ O e ž 1n9O L¤!UPH FLEFT; (0cŠ a; k Xd> 8y b> §FULL BLOCK' 	èc' ­LOWER HALF- 	’ d- ?EFT, (90¾ e, ¢ - 8-  ?UPP† G03b1Z eäó	GREEK SMALL LETTER ALPHAè 0xdf3 beÐZLATIN5 sSHARP S7 Hu039£e¼l eCAPITAn DGAMMn Hu03cÐ e¨7 	£ &PIi ai –2 i 9SIGi 	7 ‰7 	i 5 !xb�x¦MICRO SIGN“ ceY\  6TAU3  a6hÈe=3 Æ 'PHû 9ªe#5 GTHETdae7 GOMEG7 bÖ 7 	26DELl H221eØ &†INFINITYý cý Z  	û Œ0%3  eEPSILOš9222û /¨INTERSECTI) 6+f+BIDEN�#TO¼ xRf©PLUS-MINUS1226Aµ fð
ATER-THAN OR EQUAL TO
   ñ# '\u2264'   #  0x00f3 -> LESS-THAN OR EQUAL TO
   2 83202 42 ÷TOP HALF INTEGRAL. 1. 5. oBOTTOM1 0xf7/ ‘ 61 ÕDIVISION SIGN[ 0248, » 7* lALMOSTµ !xb³ V 8, kDEGREET (19T 9( ó BULLET OPERATOR€ +xbª a, £MIDDLE DOT' Xu221aS b' —SQUARE RO( 807f( c( ôUPERSCRIPT LATIN SMALL LETTER 0xb2; à d= &TWÁ!5a8e, bBLACK — º x' U f) óNO-BREAK SPACE
)

### Encoding Map

e �_map = {Q  _100:g000,N v2NUL-  1  1  öSTART OF HEADINGL 2, 2, 2TEX€U 3) 3) 0ENDS 
' 4' 4' pRANSMIS‚ 5/ 5/ VQUIRY# 6# 6# ¶ACKNOWLEDGE' 7' 7' (BE8  8  2ACK€ Gå 9% 9% €HORIZONT¾0ABU?O11 a1 a1 –LINE FEED› b% b% oVERTICT c/ c/ KFORMT d% d% çCARRIAGE RETUR¤ e+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAP�1„1„÷DEVICE CONTROL ON. †1†. z u1‹1‹. 7HRE^ ”1”0 2FOU‘_ ”1”ŸNEGATIVE z1¡1¡÷ SYNCHRONOUS IDL‹ ¦1¦Fe BLOCK@1»1»VCANCEò1¸1¸W fMEDIUMK °1°—SUBSTITUT¦ ±1±ß¤1¤†ILE SEPAßN©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶
õ2«2«€EXCLAMAT-6MAR‹2©À022,     #  óQUOTATION MARK
    0x0023: , ö  #  NUMBER SIGN' 4' 4' \DOLLA' 5' 5' {PERCENTO 6( 6( –AMPERSANDt 7% 7% –POSTROPHE& 8& 8& öLEFT PARENTHESIS, 9, 9, ORIGH- a- a- wASTERIS>b$ b$ KPLUSí c% c% VCOMMA— d! d! ·HYPHEN-MINU¿ e( e( –FULL STOPM f% f% WSOLIDH "30# %30# ¥DIGIT ZEROI #31& 1& &ON~#32% 2% 'TWJ d,33% 7HREL d3d— FFOUR— c3c½ 7FIVL a3a& 6SIXK a3a% 6EVEü3b3b' E<N ]3]' (NI1V3VGCOLOn S3SKSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cNQUES]4i4i ú•ERCIAL AT<4l4löLATIN CAPITAL LETTER 44y4y2 Bd †4†2 C2 ‘4‘2 ³4�4�2 ©4©4©2 F– ¶4¶2 G2 Á4Á2 H2 Ì4Ì2 I2 Ø4Ø2 J2 é4é2 n4ö4ö&Ld þ4þd M2 	4	2 ±442 552 Õ5 5 QÈ ð52: 0x0052,     #ó  LATIN CAPITAL LETTER R
    0x0053: , / #2 S2 42 42 T2 52 52 U2 62 62 V2 72 72 W2 82 82 X2 92 92 Y2 a2 a2 Z2 b2 b2 ÷EFT SQUARE BRACKE[c/ c/ çREVERSE SOLIDU¸d+ d+ ?IGH[ e0 e0 ÷CIRCUMFLEX ACCENˆ f- f- …LOW LINEÛ "60$ %60$ \GRAVEL #61( 1( ÅESMALÃAX 20 20 	B0 ó/630 	C0 ñ6ñ	� D0 ï6ï	0 í6í	0 F` ë6ë	0 G0 é6é	0 H0 ç6ç	0 I0 å6å	0 J0 ã6ã¥	0 K0 ä6ä L0 é6é0  M0 é6é0  N0 ì6ìÀ O0 7ø7ø`  P0  7 
Q0  7 
ó7 7 
97 7 
7 7 
í7 7 
ë7 7 
é7 7 
ç7 7 
å7 7 
ã7 7  ã]CURLYâ7þ7þ`VERTICÎ_7÷Ð7d,     #  RIóGHT CURLY BRACKET
    0x007e: , – #  TILDE! f! f! VDELET" "a0" f" ×NO-BREAK SPAC* 1* %adL õ
INVERTED EXCLAMATION MARK� "a25 %9b5 –CENT SIGN% 3% c% [POUND& 5& € ;YEN$ a$ %a6J öFEMININE ORDINAL INDICATOR€ b6 e6 ÿLEFT-POINTING DOUBLE ANGLE QUOTê cE aE +NOé bm8$ jDEGREEÆ bj%f1' «PLUS-MINUS+ `fõ SUPERSCRIPT TWOæ b@e[MICROQ 7Ç fÇ –MIDDLE DOybh7¢ oMASCULibimORIGHjbj/±VULGAR FRAC„ ON¨FARTEæ"bdÚ a‹7 FHALF4@a±ôAQUESm 	ñ"c4f 8LõATIN CAPITAL LETTER A WITH DIAERESISs c§8$LA R FABOV©"c6ƒ %92�B —IGATURE A5 ø/805 ¸ C¸ vCEDILLA¶ 9t ? E? 7ACU„dð/a5| N= 
ãdî 9= O= qdO9ò/ú UA %e¯A ESMALñfSHARP èe8õ 	6 '7GRAáe0m; 
ke0+83.; ¥CIRCUMFLEXèeß4@ leÝ„+ õ Û eíkÙ eÙ«s  ×"e8×8	/Õ¥8†; ¥àa: 0x0088,    ñ% #  LATIN SMALL LETTER E WITH CIRCUMFLEX
    0x00eb: 089, @ –DIAERESIS? c? d? 	I VGRAVE; d; /a1; GACUT; e; /8c; õ f@ b@ õ "f1? /a4? 	Nõ FTILDº "f2; /95; 	O; 
0"f3; /a2; 
0"f4; /93; 0 #f6@ ñ 
¶ 0 7? %f6 ÕDIVISION SIGN"f9) %97) Í Ua; aã 
; 9Ÿ v É
{  �/98õ 	Yõ ? $19Rf? 	F? DHOOKn#39QeQÅGREEK CAPITA=VGAMMA6 8ie16 FTHET6 al B6 7SIGl axe6 5PHI  aD%ea4 FOMEG  bÓ+e06 	GGALPH4 VeFj 	4 7DEL#b5>eh 	eEPSILO33c06 Ýj  Pcog1  
mcÏ }4  5TAUkcŸý2  �3207ìf¹¿SUPERSCRIPTº320aF9;hPESETAD3221 f ó BULLET OPERATORÀ 32214fÁ¶SQUARE ROOT' neµ …INFINITY$ 2v e†¥INTERSECTIÊ3224>feõ ALMOST EQUAL TOS 6“f“{IDENTIC( À4: 0x00f3,  ð    #  LESS-THAN OR EQUAL TO
    0x2265: 0x00f2,  1 GREATER4 23104 %a94 ôREVERSED NOT SIGNa #32- %f4- öTOP HALF INTEGRAL- 1Z %f5- oBOTTOM0 #50] c] öBOX DRAWINGS LIGHT HORIZONTi 2502i 'b3i 9 hVERTIC7 c7 /da7 	 DOWN AND R Ý 57/bf= FLEFT< 4y /c0< 	/UPw 8; d®$ ; 
u î c%{  2¶ bŸ
fA 	� 2� �»  oè 3‚ /c18@ ‚ ‘(Â F  5§d† oDOUBLE¨5bq: C05àd¸ 4aSINGLEµ ª N E 3:6· #WN4 E V E ‚t  ‘ 45Ÿ/b8ƒ r ƒ  ?“ ‚ 6Ç /b7D ‡  ‚ D T D 7D bD ÂÆ  D = ‚2UP o Ã ‹9€ d‹#UPö C T † aC cKÃ 	† < b< /beÿ 
Â  ý � B Ib
Á B À d„ c„ ÂÀ  B } e; cÉ?‡fI KI �  OJZ ’ 6Í P I B 
âÀDRAWINGS VERð!TICAL SINGLE AND LEFT DOUBLE
    0x2562: 0x00b6, ò #  BOX DRAWINGS VERH 8 H X H 3H 9H ? O � A 4A /d1A (WNÍ ­HORIZONTALÓ 5J 2J �  ‡ J Õ 6J /cbJ  LQ DOWNJ × 7C fC /UPÕ 8H /d0H Ó 9H /caH E /UPÑ aA /d8A âLG ¬bN 7N ˜ °cN /ceN E £ 
N ´"80G d´öUPPER HALF BLOCK, ·cs ?LOW, ÄOLFULLR Å &ddR  ¹}  9© ð _RIGHT© "91Õ bAL, FSHAD9‡{MEDIUM ( ðeKDARK& a¡ f¡ ðlBLACK SQUARE
}
""" Python Character Mapping Codec cp500 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP500.TXT' with gencN P.py.
v À#"

import c cs

###s ²APIs

class ($ .’ 1):
 Qdef eW ñ(self,input,errors='strict'):,  ]creturno “.charmap_B = , ¦ing_table)o  de‰ o )B 	o  o ú ÁIncrementalEç r ç  h Ã final=False*  Y.S4[0]¤� D"ª  €  ª ø eNª !@ ä ª  Qª ÑStreamWriter(N,Ò8cs. ¤ 5pas‡ ORead9  À):
    pass
ð2
### encodings module API

def getregentry():
    return codecs.C QInfo(  ! Õname='cp500', d 0e=C0 2().   deQ    ²incremental: 6r=I EÀ /er/ J 	/ Dl / ástreamreader=S R R # Ewrit# W # 1)

J[ �ing TableDZ _t 2 = '`'\x00'-ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ & (9c& 4& dCONTRO› t   º 5" ôHORIZONTAL TABULATIONx "862 ê 60 
R 8x7f" 7" dDELETEC (97! 8! C (8d" 9" e" A"  (0b" B" oVERTIC× 0)C. “FORM FEED¸ rP +D$ åCARRIAGE RETUR%0ž E* †SHIFT OUÁ	'F$ IG 1V1Võ DATA LINK ESCAPT1b1bsDEVICE [6 ON- d1d- 3TWOö (x1i1i- 5HRE\ 9»1r 2x85IB1r¤ s (08" d…BACKSPACh 8E1fF 1F gDANCEû8x19g fCdMEDIUM� 9/l8Ì1l� `1`ÔILE SEPARATORm 1@e_GROUP*  e1eoRECORD+  	  lNUNIT) 8r2rÉ 8i2i" /2^" S2S" 4›2F n  �2FHLINE±(x1$2HáõTRANSMISSION BLOCK€72X
j8W2W	S(x8X2Xß a¿ 2R	‡ R8RÀ#  0x2C -> CðONTROL
    '\x05'
 õ #  0x2D -> ENQUIRY" 6" E" µACKNOWLEDGE& 7& …F -> BELg '90  30 C‰ (91" 1"  1‰  32" õ SYNCHRONOUS IDLŽ (93M 3+ o 4" 4" /35" 	‘ 6"  0f 7" ôEND OF TRANSMISSIOND(98” 8. ¶ 9" 9" a" A" b" B"  1¶ C" sDEVICE � T FOUR¶ 1(BŸNEGATIVE ) (9e OV Q 	Ã K“SUBSTITUTâ D "  ¸4QCSPAC  8\xaq4O™NO-BREAK ) "e2L 4VôLATIN SMALL LETTER A WITH CIRCUMFLEX­ e,4j? •DIAERESIS> 	¦ †> EGRAVà e/4ž: %AC:8\xe4¶: FTILDt ê4Î: ‡RING ABO³ #4ß?  CjdEDILLA)fï ù<  N< µ [Ý)òLEFT SQUARE BRACKETh .. ’FULL STOP$ <$ ÓLESS-THAN SIGÐ() { vPARENTH	++ GPLUSO !$ òEXCLAMATION MARK£ &+ 5’AMPERSAND$ 8\xeL5"S ES
B¡53: 3 �53? 3%53> 
3dê53Iñ ´53: ñ  fy 8? ñ c> 7> 	ñ dx À 0x59 -> LATðIN SMALL LETTER SHARP S (GERMAN)
    ']'   ò#  0x5A -> RIGHT SQUARE BRACKET/ $/ B/ ²DOLLAR SIGN& *& C& ‚ASTERISK# )# D# x ²PARENTHESIS, ;, E, ƒSEMICOLOs ^$ F$ óCIRCUMFLEX ACCENÅ -,  60, ³HYPHEN-MINUw /' 1' TSOLID" B\xc2% = 62" ÅLATIN CAPITA}vA WITH ‘ Ú H\xc4A 3A VDIAERH\xc0@ 4@ UGRAVE| 1< 5< FACUT< 3< 6< FTILD< 5< 7< ‡RING ABO¹ 7A 8A CvdEDILLA÷ d÷ 9> N> 	» (a6z -¢BROKEN BARa ," 2   #CCOMM� %  0PER D_' !sLOW LINJ># ÇGREATER-THANO ?,  ÃQUESTION MAR˜B\xf8+ ¾ 7Ó	NO STþ ù H\xc9; 0; E= 
Qa< J< J bA JA J	ø J@ 
Jd| JIù e< J< ù  fA OA ù c@ N@ ù `9 ë7L  	p:' 7¼#  2@NUMB¶U@& 8 X‚ERCIAL AÞ0"'"Î  Â90APO«#PH;=M ;gEQUALS5"& 5=OTA6d>86û8 ùF88	s@ç/ +ÐSMALL LETTER �B
    'c'   ò#  0x83 -> LATIN SMALL LETTER C/ d/ 4/ D/ e/ 5/ E/ f/ 6/ F/ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ B\xab2 IA/ ôEFT-POINTING DOUBLE ANGLE QUOTATION MARKD bD BD ORIGHE (f0‰ CE Ò ô ETH (ICELANDIC)‚ fãÆ D= ³Y WITH ACUT¼3\xfî: E: _THORNy (b1¶ F? ô PLUS-MINUS SIGN£ bà  90* gDEGREE& jM 1   �  91&  JU k/ 2/ ©l/ 6L^ m/ 6M/ n/ 6o/ 6O^ p/ 6P/ q/ 6Q/ r/ 6R/ B\xaa2 §6ðFEMININE ORDINAL I¢5ATO5 b5 'oMASCUL6 
(e6k •IGATURE AÓ(b82 tCEDILLA¿ cT õžCAPITAL LV (a4V ê‡CURRENCYÂG\xb5( AèWMICRO% ~" çAçCTILDÃ s  ØSÐ t/ ØT/ u/ ØU/ v/ ØV/ w/ ØW/ x/ ØX/ y/ ØY/ z/ ØZ/ 8\xaÏAØÿ INVERTED EXCLAMþ A×4 MQUES/d
AÒ~¾ìÀELANDIC)
   € '\xdd'  ð#  0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE
1  < e< E< ôTHORN (ICELANDIC)A aA FA õ REGISTERED SIGN* 2k  B0* JCENT$ 3$ 1$ KPOUNI 5% 2% 9YENH (b7# 3# ¥MIDDLE DOT‘ 9% 4% ‹COPYRIGH– 	N 5) kSECTIOu 6P 6' zPILCROWœ c' 7' ¢VULGAR FRAV ´ONE QUARTER­ bå/B86 EHALF3 ›/B93 ETHREk S9 a¢ A9 (NO|Â 1   t BB# `VERTICo%IN`"af+ ( C( VMACRO8! ½…DIAERESI� (b4$ ¥Å0 ACB· d§‹«MULTIPLICA®{R Â C�óLEFT CURLY BRACKE+A- ˜cAŒ B1 ¤1 B1 C1 ²1 C1 D1 ¾1 D1 E1 Æ1 ¼F1 Ð1 qG1 Ú1 G“ H1 Õ1 H1 I1 Ó1 I1 8\xa7CË¥SOFT HYPHE…faCÎW ESMAL@O@¤CIRCUMFLEXe fùCå? ÞfC> CGRAV¡8\xf.C: 2² CC+: CTILDt }‚D718 J. 8J™ K1 8K1 L1 8L1 M1 8M1 N1 8NO1 8Ob P1 8P1 ÀQ'        # ð 0xD8 -> LATIN CAPITAL LETTER Q
    'R'    # 1 91 R1 B\xb94 1 A1 ô SUPERSCRIPT ONE* (fb* B* Œ ESMALŠ õU WITH CIRCUMFLEX? c? C? •DIAERESIS> 	§ D> FGRAV· ax E: FACUT: f: F: Yñ ² \< !  Y E0> æREVERSE SOLIDUÜ 7, * 1* ÒDIVISION SIGNS%  R 2( �Y T1 31 Tb U1 41 U1 V1 51 V1 W1 61 W1 X1 71 hY1 3Yb Z1 3Z1 B\xb24 °34TWO* (d4* 3²OD5(d6A 5A …)xd« 7@ 	9(d3| 9< 	;(d5< ;< CTILDw09 çF9“DIGIT ZERZ1% 4 % ±ú I 0I ¢â $ #$ 3HRE“ Å& & 3FOUJñ % % IŽÎ%  % #SIÂ$ ó$ 3EVE8è& CEIGHÒ5L Ý& &NIÚbÑFÑ8\xdFÓdFÓA ÓÕ ­ Ó@ 
ÓFÓ< 	Ó9FÓóCONTROL
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
"""Python Character Mappinðlg Codec cp720 generated on Windows:
Vista 6.0.6002 SP2 Multiprocessor Free with the command:
  python Tools/unicode/genwincx ð.py 720
"""#"


import ' scs

###  ²APIs

class ($ .¿ Ñ):

    def eZ ð(self,input,errors='strict')™  . ƒ  returno “.charmap_B = , ¦ing_table)o  de‰ o )B 	o  o ú ÁIncrementalEç r ç  h Ã final=False*   Y.S4[0]¤� D"ª  €  ª ø eNª !@ ä ª  Qª ÑStreamWriter(N,Ò8cs. ¤ 5pas‡ ORead9  	9  ÐJàs module API

ý Ãgetregentry(7 
�ž QInfo(î ±aname='¾%', d !e=0 2().     if: 'r=Ïy/ J 	/ ä/ spr7=D# w“#  # ")
[ Ping T” D5codä2 = '`'\x00'-ñ  #  0x00 -> CONTROL CHARACTER> - 1- 1- 2- 2- 3- 3- 4- 4- 5- 5- 6- 6- 7- 7- 8- 8- 	t+ •9- 	n- A- 	3x0b/ ïB- c- C- 	r+ ´ D- 	3x0e/ ‡ E- f- F- 
1Ð1Ð1Ðð 11 -> CONTROL CðHARACTER
    '\x12'
 ý  #  0x12 -> CONTROL C- 3- 3- 4- 4- 5- 5- 6- 6- 7- 7- 8- 8- 9- 9- a- A- b- B- c- C- d- D- e- E- f- F-  *  v 20- RSPACE—!! 1! òEXCLAMATION MARK, ", ÃLQUOT* #* À²NUMBER SIGNQ $' ºXDOLLA' %' ´wPERCENTO &( ¯‘AMPERSANDt 2"'"…§“APOSTROPH(K  ñLEFT PARENTHESISR ,'), ŸORIGH-  *- ŸsASTERISh+$ –GPLUSí ,% Ž2MMA— -! ‚³HYPHEN-MINU¿ .( }’FULL STOPM /% uTSOLIDH 0# 3k¢DIGIT ZEROI 1& p& #ON~)¤3i% #TWJ !% d% 3HREL ' d— 3FOUž& cM 3FIVL & a& 2SIXâ % a% 3EVEüÿ' b' E<N ù' ]' $NI1:VVCCOLOn ;! SGSEMI% <% S—LESS-THAN}=* \XEQUAL¤>' [|GREATERT ?- cKQUES‡@) 4iÒCOMMERCIAL AT<A) lóLATIN CAPITAL LETTER 4B2 y2 Bd C2 Àx43 -> LATINð
 CAPITAL LETTER C
    'D'  ü#  0x44 -> LATIN2 D2 E2 52 E2 F2 62 F2 G2 72 G2 H2 82 H2 I2 92 I2 J2 A2 J2 K2 B2 K2 L2 C2 L2 M2 D2 M2 N2 E2 N2 O2 F2 O2 P2 /502 P2 Q2 12 Q2 R2 22 R2 S2 32 S2 T2  T2 U2  U2 V2  V2 W2  W2 X2  X2 Y2  Y2 Z2  Z2 [2  óEFT SQUARE BRACKE[%\\0 ­5ãREVERSE SOLIDU¸]*  + ORIGH[ ^0 óCIRCUMFLEX ACCENˆ _- cOW LINõ`$ 6YGRAVEL a( ÷ESMAL±A3b0 õ	0 B0 c0 ó	0 d0 ñ	0 e0 ï	0 f0 í	0 g0 ë	0 	h0 é	0 i0 ç	0 j0 å	0 k0 ãa	0 l0 ä‘	0 ÿm0 é0 ÀSMALL LETTER  M
    'n'  ò#  0x6E -> LATIN SMALL LETTER N0 o0 F0 O0 p0 /700 P0 q0 10 Q0 r0 20 R0 s0 30 S0 t0 40 T0 u0 50 U0 v0 60 V0 w0 70 W0 x0 80 X0 y0 90 Y0 z0 A0 Z0 {0 B0 óEFT CURLY BRACKEN|. C. ÒVERTICAL LINEW }) D) ORIGHX ~/ öCTILDP C\x7f$ 7çóCONTROL CHARACTETR\x80'ˆ E\x81 (e9C 8šµE WITH ACUT~ )e2; ¥A; “CIRCUMFLEÅF\x84† 0K �K EGRAV† &86F 7F vC‘ dEDILLA)ea= ƒ	Î )eb@ “@ ƒDIAERESIÂI\xe8? ¢? 	e8­I÷ z ez ¾\ ? ù %8d�&8e f 9yQu0651n ±98ÄARABIC SHADDŽ ) ^) —) 3UKUéA\xf4O "  ( „Oü ½ a@ 9ÄCURRENCY SIGi Bu064¤i ¢‘ tTATWEELIf	9,U“ f’9Æ@ 
Hu062_Ä¥ "GHAMZe2e³
/ BALEF¨ MžE ABOz n 3~³? x ? }? ·àARABIC LETTER ðWAW WITH HAMZA ABOVE
    '\xa3'
 ó  #  0x9C -> POUND SIGN& Qu0625( & D& øARABIC LETTER ALEFe WBELOW? 6? E? 8YEH> £  } 7> F>  } l 8. .A0. 7BEH- 9- 1- ·TEH MARBUTA5 a5 25 - b- 3-  H� c. 4. GJEEM\ d. 5. (HAë e- 6- K. f. 7. 6DALˆ '30- 8- )TH. 1. 9. R'32- A- 7ZAI§3Ï§.AB. 8SEE. 4\ û
Õ*SH/ A 3SAD"xaõWAòðLEFT-POINTING DOUBLE ANGLE QUOTATIONlKE bE ùORIGHF Gu259pBLF T SHAD	 ' jBmMEDIUM( dBþLDARK& 0N ÷ÒBOX DRAWINGS ‚ fVERTIC7252“B 7 P AND W2Hu256ì 	@ q 1 SIyA �H ¿ -H Ç‰ X H 5ùBG	H CDOWN| Í D xB^D Ð µtD ŽÉ YˆA 	8 ¼B’8 u  àB¡= %UP<x IB­	; /UPwLBÂB u1B¿	B û 1	Cµ<  ú û ð34'    #  0xC1 -ð$> BOX DRAWINGS LIGHT UP AND HORIZONTAL
    '\u252c' Ÿ#  0xC2 -@ ODOWNB 1B 3B �VERTICALF R• ƒ '00ƒ 4A ¼ 3z 59 	z F '5e 6F @ fSINGLEÁ v DOUBLEÈ '5fI 7I 8 I Z I aI 8I @ ÕM'54< 9< Ñ> '69> A> z M'66A BA  C CC — ÙÆ 5B DB | RE: 	| G 7FG 2UP óA R&68H /D0H  H ^ Q6-D1H �4 ’ 5’ /J ” 5kD7#UP’ á5× 59
gC œ C 2Ð CÐ E 3E BE y Í '6bE >ò	CDCÂÜ N ­ &1iU	eFLEFT: 0QDQ: ! Ã_= 8w M§FULL BLOCK& Ý0­LOWER HALF, �  ¯ + 9EDž , 8, ð?UPPƒ 7063"EÔôARABIC LETTER DADÜ 7063IE¹
- ðTAH
    '\u0638'  ð  #  0xE2 -> ARABIC LETTER ZAH
    '\u0639' - 3- 7AIN- a- 4- )GH/ '41/ 5/ $FE‰ 1xb5+ ¶ 6- —MICRO SIG‚ !42( ¯ 7& 
Ü 6QAF¯ '43- 8- K- 4- 9- 7LAMZ ¯ ‡ A- 8MEE. 6[ B. 8NOOã 7. C. H6Wu0648- D- 7WAW¶ ìE- ÇALEF MAKSURA6 õF6 Y� 7226ó F0- ÇIDENTICAL TOU b¸  F1( ÈxFATHATAc+ ÏKDAMM+ d+ ÍKKASR+ e+ Ë� © f( Ä~ ( '50( ¿Ñ { ( (22±FÁ˜LMOST EQU$"xbQ F¿iDEGREE7221ÖF¹ó BULLET OPERATOR} "xbYR ·£MIDDLE DOT& Gu221ñF¯—SQUARE RO' (07¨ôSUPERSCRIPT LATIN SMALLxÔ"xbÅ‰ ·< %TW*225akFµbBLACK ” ¶ x& S §óNO-BREAK SPACE
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð) cp737 generated from 'VENDORS/MICSFT/PC/CP737.TXT' with2 ƒ P.py.
i ±#"

import  sÆ f ÁAPIs

class  ($ . 1):
Adef ç ñe(self,input,errors='strict'):,  creturno B = , †ing_map)m 0m *B 	m   m ª)ø ±IncrementalÛ$er å  h Ã final=False*  W.Q
?[0]¨  DP¨  ~  ¨ ö L¨ Àturn codecs.ñcharmap_decode(input,self.errors, ðing_table)[0]

class StreamWriter(Codec,D 8cs. º):
    pass9 ORead9  	9 ó### encodings module API

def getregentry(7 sreturn ‘ ž QInfo(�  ‘ Õname='cp737', d !e=0 2().     ²incremental: 6r=I EÀ /er/ J 	/ D’/ spr7=c*R # w“#  # 0)

IZ ping MapAWd_map =2ñmake_identity_dict(range(256))
°  Ámap.update({Fð 0x0080: 0x0391,kö #  GREEK CAPITAL LETTER ALPHA6 16 26 7BET5 25 35 GGAMM6 36 46 8DELl 46 56 vEPSILONÙ 58 68 ZÙ 65 75 	4 74 84 )TH6 86 96 (IO95 a5 GKAPPxa6 b6 GLAMD6 b6 c6 &MUsc3 d3 N3 d3 e3 &XIf e3 f3 XOMICRf8 /a08 Pk 9SaS5RHOŸ 9Qa7SIG9Ra&TA<9PaU9Ra'PH
NaC4 Ma'PSh MaFOMEG¬9Mb¨OSMALù9Lbù	4 	÷9IbÛ	3 
õ9GÐb4,     #  GRðEEK SMALL LETTER DELTA
    0x009c: @3b5, m #  GR4 vEPSILON6 d6 66 	(ZEi e3 73 		2 f2 82 	(TH4 #a04 94 	'IO™ #a13 a3 	FKAPP6#a24 b4 	GLAMD4 34 c4 	%MUe#a41 d1 	N1 51 e1 	&XIb 61 f1 	WOMICRý"a76 /c06 	Pg 81 11 	6RHO™ 92 32 	GSIGM`a4 24 	kFINAL : b: 4: 	'TAj6c6
U6a6c6
'PH:5c5
C2 5c5
&PSd b36259žµLIGHT SHADE“b'6259_lMEDIUM( 6259»LDARK& 6250N ÒBOX DRAWINGS ‚ †VERTICAL… 6252ª7 – AND LEFT@ "6256ì 	@ q u SINGLEA g DOUBL9?256¿ H 8 H X � K6255	� CDOWN| D ^6255ŒD x D ˜ ˆ p6256µD  ÿ  × Y}?255Yp A y {6255áy u †6255!= %UPø x ‹6255�	; /UPw›6255B u«6251H	B û cµ1	ÀS LIGHT UP AðND RIGHT
    0x00c1: 0x2534, ð #  BOX DRAWINGS L. ö UP AND HORIZONTAL@ 2@ /2c@ 	ODOWNB 3B 1B 
�VERTICALF Ã 4A /00ƒ 	¼ 59 3z F 6F /5e º fSINGLEÁ v DOUBLEK7I fI 8 I Z I 8I aI @ ÕM9< < Ñ> a> /69z MbA 6A 
 C cC Â — ÙÆ dB 5B | e: 6R| G fG 72UP óA R#d0H 8H ’  H ^ Qd%6/WN’ //65’ Ù” 75k#UP$á£ × 95	C œ C C/52Ð E B3E y Š V Š >/6bE ðI òC6CN † — N d œ U1i	e6LEFŸdQ0Q: 6 Ãçw M8w ¦FULL BLOCK& 08Ý¬LOWER HALF, 8�  ¯ + 9Ež , ð8, ?UPPƒ eÔ603cøó	GREEK SMALL LETTER OMEGAã À00e1: 0x03ac ,  ð#  GREEK SMALL LETTER ALPHA WITH TONOS
+ ï0x00e2: 0x03ad? 	EPSILONA 3A eA 
T~ 4= /ca= 	$IO> –DIALYTIKAÀ 5B /afB þ 6> /cc> 	_OMICRþ 7A ?
U?8A b‚ 		A  9E „
OOMEG†a? +86„ oCAPITAEbA 8A G	cC 9C Éd? IÃ K@ e@ 	@ 	fC …C 	Ì
† #f0C ÍC Ê!f1A 50b1Fõ PLUS-MINUS SIGN9fùE2265+ ö	GREATER-THAN OR EQUAL TO4 ìE22644 OLESS1 àa—Ýfâ"	XG  ë50f7¼ ‹DIVISIONÓ6224ÍoALMOST ½60b0T E~R Ÿ6221Üö BULLET OPERATORb‹&0b¦ ¦MIDDLE DOT& p6221W˜SQUARE RO' T6207OúSUPERSCRIPT LATIN'Q50b2Û < 'TW<625abBLACK ” ¶ !0( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (U `'\x00'Ê0 # Æµ000 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- 2TEXƒ x 3* 3* 0ENDU 	( 4( 4( pRANSMISƒ‚ 50 50 UQUIRY$ 6$ Àx0006 -> ACKðNOWLEDGE
    '\x07'
 õ #  0x0007 -> BELL! 8! 8! tACKSPACG t$  G 9& óHORIZONTAL TABULATIONX n2 a2 “LINE FEED& 2x0b( Ÿ b& oVERTICV :x0c0 c0 HFORMV r$ ® d& äCARRIAGE RETUR¨ 2x0e. ‚ e, •SHIFT OUT¨ f& f& IK )10%  10% ô DATA LINK ESCAPR:x11- 1- öEVICE CONTROL ON/ 2/ 2/  4TWO° *13/ 3/ 6HRE` 41 41  EFOURa 50 50 ÌNEGATIVE ACK‰*161 61 ö SYNCHRONOUS IDLŽ 
¶1¶õ
END OF TRANSMISSION BLOCK” 
Ë1ËUCANCEî*19† ÈY eMEDIUMM a* À–SUBSTITUTª 
Á1Áê
´1´ÆILE SEPARATOVdu ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2Æ!" »aEXCLAMC MAR•"- ¹LQUOT+ #+ µ£NUMBER SIGh$( ¬HOLLA( %( ¤wPERCENTQ &) œ‚AMPERSAN¬1"'"H•“APOSTROPH(M †òLEFT PARENTHESISf)- �ORIGH.  *. ”sASTERISq+% ’GPLUSó ,& •RCOMMA› -" Œ³HYPHEN-MINUÄ .) ‰’FULL STOPO /& ‚TSOLIDJ >b3{“DIGIT ZERÝ8' €' 2/& y& )&& t&  ( t› ' sO 3FIV$
' q' 2SIX3& q& 3EVEà8'        #  0ðx0038 -> DIGIT EIGHT
    '9'   @#  0( 9( BNINE' :' a' RCOLON" ;" b" GSEMI& <& c& ÓLESS-THAN SIGQ =+ d+ gEQUALS( >( e( |GREATERV ?. f. ÒQUESTION MARKÑ @*  40* ÃCOMMERCIAL ADA* 1* òLATIN CAPITAL LETTER A] B3 23 B3 C3 33 C3 D3 43 D3 E3 53 F3 63 Ff G3 73 G3 H3 ÑeH3 I3 Ü3 I3 J3 è3 J3 K3 ù3 [L3 1Lf M3 f M3 N3 3 tO3 3 Of P3 5'3 P3 Q3 0Q3 R3 0R3 S3 0S3 T3 0üU3 0Uf V3 0V3 W3 0W3 X3 0X3 Y3 0Y3 Z3 0Z3 [3 0óEFT SQUARE BRACKEb$\\1 ¢5-ãREVERSE SOLIDUÁ]+  , &Rð] ^1 $óCIRCUMFLEX ACCEN‹ _. EOW L+`% 6YGRAVEN a) LSMAL5b1 	1 ðB
    'c'       ð #  0x0063 -> LATIN SMALL LETTER C
    'd'   1 41 D1 e1 51 E1 f1 61 F1 g1 71 G1 h1 81 H1 i1 91 I1 j1 a1 J1 k1 b1 K1 l1 c1 L1 m1 d1 M1 n1 e1 N1 o1 f1 O1 p1 /701 P1 q1 11 Q1 r1 21 R1 s1 S1 t1 T1 u1 U1 v1 V1 w1 W1 x1 X1 y1 Y1 z1 Z1 {1 óEFT CURLY BRACKEU|/ ÃVERTICAL LIN^}* ORIGHZ ~0 CTILDR 3\x7³7÷TDELET# Pu0391J # 8é°GREEK CAPIT¤ hRALPHA\7 27 ï7 8BET6 36 ô6 HGAMM7 47 ú7 9DELn 57  7 cEPSILO.Ý 69 9 ZÝ 76 6 
5 85 5 *TH7 97 7 )IOa6 6 HKAPPb7 "7 HLAMD7 c7 (7 MQzðd'   #  0x008c -ÿ%> GREEK CAPITAL LETTER NU
    '\u039e'   #  0x008d -4 'XI4 f4 e4 vOMICRON9 (a09 f9 Pm 'a14 /904 7RHOi 35 15 WSIGMA7 47 27 'TAB(a55 35 YUPSIL69 49 (PH75 55 C5 85 65 (PSj 95 75 GOMEGDb°87 ESMALƒHALPH5 2l 95 8BET4 	äa4 8GAMâbâb5 9DELj 	âc5 Eàbà[	
ZÕ 	ß[	4 
3 	ÝU	3 *TH5 ÝaV	5 )IOa¥aU	4 VKAPPAS(bb5 S	5 HLAMD5 c5 S	5 M…(bd2 L	2 ùbùaI	2 ÷b÷aF	2 õcõaH	7 ócCaC	ñcaAïcvaBlFINAL ; HaH	(cFaF&cFaF	$cEaE	"cEaE 8259¦bC´LIGHT SHADE8259fb7mMEDIUM) Äb+LDARK' 0P ð	BOX DRAWINGS LIGHT VERTIõ6CAL
    '\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
A (61A 5A ; eSINGLEB v DOUBLEŠ (62I 6I 9 I Y I (56I 7I CDOWN~ E 5E 8E z E š Š (63E 9E   ^	5^aB { (57{ b9 Õ(5d> c> %UPü z c< d< /UP}bC eC {(10C fC Øÿ 1/c0= þ R"ÿ 3< 1< ‰HORIZONT’@/c2A º C 1C 3C š  Æ 0?c| 3| y	| G '5eÀc	Ä ]‘(5fJ ‹ ¾ÒJ [ J aJ Ï5Øƒ | (69| 	| R6cD 	SZ 5C †~ 	[; 	~ H c2UP ûB ['68•d(
ëI _ Þd55 ” ¹d?À DRAWINGS DOø<WN DOUBLE AND HORIZONTAL SINGLE
    '\u2559'   #  0x00d3 -> BOX DRAWINGS UPI ^RIGHTD 8D 4D w � D ž ˆ 2D 5D CDOWNy F 	3F 6F { F � Œ (6bF 7F ˆVERTICALc(6aO 8O ˆ ™ O ¯ ž 1n9O L¤!UPH FLEFT; (0cŠ a; k 7ª> 8y b> §FULL BLOCK' 4e c' ­LOWER HALF- 	’ d- ?EFT, (90Y e, ¢ - 8- f- ?UPP† 803c e0- ô	GREEK SMALL LETTER OMEGAè 803a» /e15 ÷ALPHA WITH TONOS@ dÏ /e2@ EPSILONB eB ¼·  /ET€ c—e¶>  $IO? ˆDIALYTIKf� µC 
cB®?  _OMICRcDªB  UDcìe�B 	 cŠ”F  AÊ(86I™@ @CAPI·ƒN	�e�B P	8ºD Ð8RÍ@ TA 	âA 	8‹ùD 	8Øf�Ñ0xb1ÏWfô PLUS-MINUS SIGN	@2265. ƒf	÷ATER-THAN OR EQUAL TO5 ffüÀLESS-THAN ORö@ EQUAL TO
    '\u03aa'   #  0x00f4 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
E bE 5E UPSILONH 0xf7F � 6H ÔDIVISION SIGN· @2248, · 7* lALMOSTã 0xb0* V 8,  DEå T  19* T 9( ó BULLET OPERATOR€ +xbª a, £MIDDLE DOT' Iu221^b' —SQUARE RO( 807f{ c( õUPERSCRIPT LATIN SMAL�0xb2; à d= %TWï125aä e, bBLACK — º x' U f) óNO-BREAK SPACE
)

### Encoding Map

e �_map = {Q  [100:c000,7 rFNULL  1  1  öSTART OF HEADING, 2, 2, 2TEX€u 3) 3) 0ENDS 
' 4' 4' pRANSMIS‚ 5/ 5/ VQUIRY# 6# 6# ¶ACKNOWLEDGE' 7' 7' (BE8  8  2ACK€ Gå 9% 9% pHORIZON¿@TABU?O11 a1 a1 –LINE FEED› b% b% `VERTIC@T  c/ c/ KFORMT d% d% çCARRIAGE RETUR¤ e+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAP�1„1„÷DEVICE CONTROL ON. †1†. z u1‹1‹. 7HRE^ ”1”0 2FOU‘_ ”1”ŸNEGATIVE z1¡1¡÷ SYNCHRONOUS IDL‹ ¦1¦Fe BLOCK@1»1»VCANCEò1¸1¸W fMEDIUMK °1°—SUBSTITUT¦ ±1±ß¤1¤†ILE SEPAßN©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶
õ2«2«€EXCLAMAT-4MAR‹À0022: 0x0022 ,  ð#  QUOTATION MARK
 ‚0x0023:  * ¶NUMBER SIGN' 4' 4' \DOLLA' 5' 5' {PERCENTO 6( 6( –AMPERSANDt 7% 7% –POSTROPHE& 8& 8& öLEFT PARENTHESIS, 9, 9, ORIGH- a- a- wASTERIS>b$ b$ KPLUSí c% c% VCOMMA— d! d! ·HYPHEN-MINU¿ e( e( –FULL STOPM f% f% WSOLIDH "30# %30# ¥DIGIT ZEROI #31& 1& &ON~#32% 2% 'TWJ d,33% 7HREL d3d— FFOUR— c3c½ 7FIVL a3a& 6SIXK a3a% 6EVEü3b3b' E<N ]3]' (NI1V3VGCOLOn S3SKSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cNQUES]4i4i ú•ERCIAL AT<4l4löLATIN CAPITAL LETTER 44y4y2 Bd †4†2 C2 ‘4‘2 ³4�4�2 ©4©4©2 F– ¶4¶2 G2 Á4Á2 H2 Ì4Ì2 I2 Ø4Ø2 J2 é4é2 n4ö4ö&Ld þ4þd M2 	4	2 ±442 552 Õ5 5 QÈ À0x0052: 0x00@52,  ð#  LATIN CAPITAL LETTER R
 ‚0x0053:  2 S2 42 42 T2 52 52 U2 62 62 V2 72 72 W2 82 82 X2 92 92 Y2 a2 a2 Z2 b2 b2 ÷EFT SQUARE BRACKE[c/ c/ çREVERSE SOLIDU¸d+ d+ ?IGH[ e0 e0 ÷CIRCUMFLEX ACCENˆ f- f- …LOW LINEÛ "60$ %60$ \GRAVEL #61( 1( ÅESMALÃAX 20 õ	0 B0 ó/63` 	C0 ñ6ñ	` D0 ï6ï	0 í6í	0 F` ë6ë	0 G0 é6é	0 H0 ç6ç	0 I0 å6å	0 J0 ã6ã¥	0 K0 ä6ä L0 é6é0  M0 é6é0  N0 ì6ìÀ O0 7ø7ø`  P0  7 
Q0  7 
ó7 7 
97 7 
7 7 
í7 7 
ë7 7 
é7 7 
ç7 7 
å7 7 
ã7 7  ã]CURLYâ7þ7þ`VERTICÎ_À7d: 0x007d, ð    #  RIGHT CURLY BRACKET
 ‚0x007e:  ,  / VTILDE! f! f! VDELET" "a0" f" ÖNO-BREAK SPAC* b* 8L •GREE SIGNs #b1Q 1' «PLUS-MINUS+ 2+ d+ ö SUPERSCRIPT TWOV 7+ a+ –MIDDLE DOf& 6& ‰DIVISIONz 2386O eO  Ê ôK CAPITAL LETTER ALPHA WITH TONOS� 3388A bj A EPSILONC 9C cC T‚ a? =‚ /IO@ c@ e _OMICRÂ e<ƒ U¡/f0† /EG9o8A Ê¿9z8¥º FBETA5 32/82¬ GGAMM6 46 36 8DELl 56 46 `¤ Ù/858 ZÙ 787	4 /87i )TH6 ô8Dj  µÔ ê/89k GKAPPxbBãGLAMD6 8Ø&MUŸ di ÈN3 98¼&XIf )8¯8 à8¤Pk aS9S%RH #3a9Q7SIGa9R&TA<a9Pu	9R'PH
9NC4 9M'PSh Ð97,     #  GRðEEK CAPITAL LETTER OMEGA
    0x03aa: @0f4, o #  GR6  ÷IOTA WITH DIALYTIKD bD 5D UPSILONG cG +e1G ESMAL¿ CALPHŠ VTONOSÊ d? 2? 	E„ A eA 3A 
= f= 	½ F
> "b1> /98{ 	û ð #b24 94 	6BET©#b33 a3 	GGAMM4 44 b4 	8DELh 54 c4 	‹Ñ 66 d6 	ZÑ 73 e3 		2 82 f2 	)TH4 94 /a04 	 ÜÌ WaÌ
GKAPPjGaÁ
GLAMD4 4a´
&MU™ &að	¨N1 aÙ
&XIb 
/a6.	uOMICRON6 #c0d76 	Pg c3a3
6RHOc 1aþ
—FINAL SIGc8ak
4 8a8
&TAjc6a6
EÖ 6a6
'PH:5a5
C2 5a5
'PSd 3e3

‹c4e›
 gBcBe
BE SeÀE 
ÍcceË
	† A seo
=€ à207f: 0x00fc, ð    #  SUPERSCRIPT LATIN SMALL LETTER N
( ð 0x2219: 0x00f9,  < ö BULLET OPERATOR+ a+ b+ µSQUARE ROOT' #48' 7' õ ALMOST EQUAL TO+ #64+ 3+ ÏLESS-THAN OR1  51 21 GREATER4 25004 %c44 ôBOX DRAWINGS LIGHT HORIZONTALž 25029 bž 9  hVERTIC7 c7 /dap 	 DOWN AND R t 1­ /bf= 5LEFy#51N/c0< 	/UPw ´d$; 
u î c%{  2¶ bŸ
fA 	� 2� ¦ oè 3‚ /c18@ ‚ 5@ 		Â F  5ú/cdF oDOUBLE¨"51qbq: � l5àd¸ 4aSINGLEwª N E 3} /d6· #WN4 E V E ‚t  ‘ 45/b8ƒ r ƒ  ?“ ‚ 6Ç bµ	F{ ‡  ‚ D T D 7D  D ÂK D = ‚2UP o Ã ‹Ëd‹#UPö C T † ãcKÃ 	† < bÿ e‡
Â AQB Ib
Á B À d„ c„ q  À  B } e; cÉ?‡fI KI �  JZ ’ 6Í àVERTICAL AND Rð	IGHT
    0x2561: 0x00b5, ö! #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLEH 2H 6H 8 H X H 3H 9H ? — � A 4A /d1A (WNÍ ­HORIZONTALÓ 5J 2J �  ‡ J Õ 6J /cbJ  LQ DOWNJ × 7C fC /UPÕ 8H /d0H Ó 9H /caH E /UPÑ aA /d8A âLG ¬bN 7N ˜ °cN /ceN E £ 
N ´"80G d´öUPPER HALF BLOCK, ·cs ?LOW, ÄOLFULLR Å &ddR  ¹}  9© ð R&© 91AL, FSHAD9‡{MEDIUM ( ðeKDARK& a¡ f¡ ðZBLACK SQUARE
}
""" Python Character Mapping Codec cp775 generated from 'VENDORS/MICSFT/PC/CP775.TXT' with2 cA P.py.
i ±#"

import  cs

###f ²APIs

class ($ .… 1):
ó`def en ñ(self,input,errors='strict'):,  ˜creturno “.charmap_B = , †ing_map)m /dem -B 	m   m dtable)ø ÁIncrementalEå r å  h Ã final=False*  W.Q
?[0]¨  D ¨  ~  ¨ ö e¹¨ !@ â ¨  Oª ÑStreamWriter(J,Ð8cs. ¤ 5pasƒ ÐReader(Codec,ò<codecs.StreamReader):
    pass

### encodings module API

def getregentry()7 sreturn X C_ QInfo(T  X Õname='cp775', d !e=0 2().   deQ    ²incremental: 6r=I EÀ /er/ J 	/ Dl / sr=*R # cwriter# W # )HY ping Map@Vd_map =1ñmake_identity_dict(range(256))
¯ 0ing5 ‘.update({Eð 0x0080: 0x0106,jö #  LATIN CAPITAL LETTER C WITH ACUTE= 1= ;0fc= ESMAL; U; –DIAERESIS? 2? /e9? 	E? z 3; ?101; 	A; fMACRONw 4< ?0e4< ¶  5? ?123? 	G{ vCEDILLA| 6= ?0e5= 	¸ —RING ABOVr7@ ?107@ 	­8; /42; 	L¸ WSTROKw 9< 1ô 
ªoa< 5bRz 2b? ò 
= c= /2bô 	Iz ¸ d< 7žZ>  e= ,0cd= êf fA )A + 9Ú/0cÀ ¶
À 9ÚeµÚ–IGATURE A$9Îc3 ² 5 È/4d¡	Oc¡9Èfq ¤ ¹< b9È° A Ê9Êa? †CENT SIGk9¯+5aß d Sá „±5½
; °,0dx µ#0dÚÀ#  LATIN CAPñITAL LETTER U WITH DIAERESIS
    0x009b: 0f8, å #  LATIN SMAL? O? fSTROKE< c< %a3< ¦POUND SIGN& d& db 8CAP£ d e> 7d ëMULTIPLICATIONm f/ %a4/ ŠCURRENCY) !a0) 5100) ø – Aú VMACROÔ "a1> /2a> I> 2> &0f8| tFACUTs!a3; ?17by Zy ‡DOT ABOVA 4A cA 	| ? 5? ù ? » 6; E201dz òRIGHT DOUBLE QUOTÒEMARK? a77 E00a67 B†VN BAR& 8& 9& BCOPYa 	�#a9* e* ›REGISTEREº#aa+ ,;NOTH@bÖ ±VULGAR FRAC¡†ONE HALF­ 8bX 4 gQUARTEä I5141º 7³Lü­aIa:ÄEFT-POINTING‡?ANG�_bE cF b|7259É 
FSHAD«beE2592ð {MEDIUM ( O6259OLDARK& :6250N áBOX DRAWINGS L‚ …VERTICAL¬b06252Q7 – AND LEFT@ 10@ µhVOGONEýb46010*> Có(CA¥b:/11yE= { R&11x{ > jbi6256—	:÷r; 6255'A 	s“625538 ODOWNu  œ6255Ð= /UP;   2Z2p /16‘S®ë˜ð 2510,     #  BOð#X DRAWINGS LIGHT DOWN AND LEFT
    0x00c0: 0x2514, m #  BO< !UP: RI ; 1; 3; ¦HORIZONTAL@ 2@ /2c{ 	· B 3B 1B 
�VERTICALÃ 4A /00ƒ 	z 59 3z F 6F E0172 öLATIN CAPITAL LETTER U WITH OGONEK@7> /6a> fMACRON> 8> 6255> 	ùDOUBLE ú9< ú< »8a> %69¸ z 7bA 6A 
 C cC ùÂ ;	dB 5B | e: 6<| G fG E017d=Z=(CAþd÷K0105= ESMALxA; xdø<010y 	< C< w ó6011û´ 	; E; w íO0117³ 	< •DOT ABOVEðdëO012f? 	I{ îO0161< 	S< ò ã3; 	ádáb< ßdßO017e< 	Þ%18; 	 O	MdÚ0Ú: ˜
dÖ8w –FULL BLOCõd¹8{¬LOWER HALF, £8�  ¯ + ”9Îž , y6258, ?UPPƒ eh,0dÿâO<FACUT³ei/0d³
ðSHARP S (GERMAN)
    0xà00e2: 0x014c,  ð#  LATIN CAPITAL LETTER O WITH MACRON
* c0x00e3> 3> N> VACUTE= 4= ;0f5= LSMALy GTILD; 5; d; ¶ = 6= b= —MICRO SIGÛ 7& ?144ž 	Ù 8; +36; ž KvCEDILLA9? 7? 	= a= b= | L| b? 	| = c= 4ø 	= 3ö d= /12¹ E¹ ‰e> 4ÔÇ} f? E2019} õRIGHT SINGLE QUOTATION MARKª f07 E00ad7 ¦SOFT HYPHEK"f1' %b1' ªPLUS-MINUSvf�7201€�EFT DOUBˆ ‡50bea ±VULGAR FRAC¸ @THREÈ fARTERSÂ „b³{PILCROW˜ qa”"SEZ 	6f\f( PDIVIS;
) _6201³ ä _LOW-9r[50b0ê 0DEGÛ 
^ C'22Ðö BULLET OPERATOR1&0b² ¦MIDDLE DOT& &0b!æSUPERSCRIPT ONœf&0b+ ‰X ö&0bö	- &WO+ ã625aû ·BLACK SQUAR€ Ì'00( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (} `'\x00'ó0 # -µ000 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- 2TEXx x 3* 3* 0ENDU 	( 4( 4( pRANSMIS„‚ 50 50 UQUIRY$ 6$ 6$ ¢ACKNOWLEDGq ¤ 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  c9& pHORIZONˆ@TABUÓ~<'\n2 a2 •LINE FEEDÇ b( »Ðb -> VERTICALð TABULATION
    '\x0c'
 ó #  0x000c -> FORM FEED& r$  & d& æCARRIAGE RETURR e. R e, “SHIFT OUTR :x0f& f& IK )10%  10% ôDATA LINK ESCAPER *11- 1- öEVICE CONTROL ON/ 2/ 2/  5TWO^ 3/ 3/ 6HRE` 41 41  EFOURa 50 50 öNEGATIVE ACKNOWLEDGa 61 ö6 -> SYNCHRONOUS IDL- 7- 7- õ
END OF TRANSMISSION BLOCK” 86 86 eCANCEL# 9# 9# Y eMEDIUM* a* a* –SUBSTITUTª b' b' ê
´1´ÆILE SEPARATOVdN ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2ÆCSPACô !" »aEXCLAM­C MAR•"- ¹LQUOT+ #+ µ£NUMBER SIGh$( ¬HOLLA( %( ¤wPERCENTQ &) œ‚AMPERSANV1"'"y•“APOSTROPH(M †òLEFT PARENTHESISf)- �ORIGH.  *. ”sASTERISq+% ’GPLUSó ,& •RCOMMA› -" Œ³HYPHEN-MINUÄ .) ‰’FULL STOPO /& ‚TSOLIDJ >b3{“DIGIT ZERÝ8' €' 2/& y& )&& t&  ( t› ' sO 3FIV$
' q' 2SIX3& q& 3EVEõ( r( EKP ú( m( $NIk:ª3f4COL†;" cGSEMI& <& c—LESS-THANŽ=+ À 0x003d -> EðQUALS SIGN
    '>'   ÷
#  0x003e -> GREATER-THAN. ?. f. ÒQUESTION MARKX @*  40* ÒCOMMERCIAL AT* A* 1* òLATIN CAPITAL LETTER A3 B3 23 B3 C3 33 C3 D3 43 D3 E3 53 E3 F3 63 F3 G3 73 G3 H3 83 H3 I3 93 I3 J3 a3 J3 K3 b3 [L3 c3 Lf M3 d3 M3 N3 —LO3 3 Of P3 5'3 P3 Q3 0Q3 R3 0R3 S3 0S3 T3 0üU3 0Uf V3 0V3 W3 0W3 X3 0X3 Y3 0Y3 Z3 0Z3 [3 0óEFT SQUARE BRACKEb$\\1 à5-ãREVERSE SOLIDUÁ]+  , &ORIGH] ^1 $óCIRCUMFLEX ACCEN‹ _. cOW LIN`% 6YGRAVEN a) LSMAL5b1 	1 3c1 	1 1d1 	1 /e1 ÿ	1 f1 ý	1 +ðg'        #  0x00ð67 -> LATIN SMALL LETTER G
    'h'   Ÿ#  0x00681 H1 i1 91 I1 j1 a1 J1 k1 b1 K1 l1 c1 L1 m1 d1 M1 n1 e1 N1 o1 f1 O1 p1 /701 P1 q1 11 Q1 r1 21 R1 s1 31 S1 t1 41 T1 u1 51 U1 v1 61 V1 w1 W1 x1 X1 y1 Y1 z1 Z1 {1 óEFT CURLY BRACKEU|/ ÒVERTICAL LINEY }* ORIGHZ ~0 CTILDR B\x7f% N7÷TDELET# Pu0106% # 8éPCAPIT¤ ¤¥C WITH ACU> 0xfc< $  > öU< ƒDIAERESI£J\xe9@ E@ |  º 1> | A< SMACRO@\xe4; ¹ = ¹ Pu0123B } +G} rCEDILLAê@\xe5< ~ 8~ ˜RING ABOV¶7C  H´ Xu0142< SL» WSTROKy 1ø _±	uIu015lklR| 
7 @ 	ö zN> (2bø ‰Œ I| » 7«qœ= » Z? «À '\xc4'     ð.#  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
    '\xc5'
  B fB ¥RING ABOVEC 9C /90C E… EACUT> *e6> 1> õSMALL LIGATURE A4 c4 24 ÷ 6 Pu014dl ë &936 j +O¦ dMACRONå fs 4= hXu0122} 5@ ³  G tCEDILLA€ a>  ¨ 96@ „CENT SIG¦ Xu015af 7& Sf ‹ > b> 8> 	!<  +xd 9< à _"0xdc| â aB U¼ B *f8B bB 	À ‚ USTROKT*a3= c= XPOUNDb+xdd d' bf *d7f ±éMULTIPLICATIONo *a40 ŸˆCURRENCY* Pu0100, Þa†	à  :a‡ÀI~	? *xf>a’{w7wa˜{ Z{ 9DOT‚Au017=ü �@ 	ý �	¾ @ 	¾ 8201Va™òRIGHT DOUBLE QUOTÚEMARKÑ
1a«B’UN BAR' 
]a”BCOPYc ý0xae AaƒšREGISTEREÇa0, m)NON!xbÙ % P±VULGAR FRAC®„ONE HALF± bZ H5 dQUARTEé  ž1À ÄY!L Ë¿C¬ Y LEFT-POINTµ�?ANG•bF ojG Hu259Ì bŒDSHADt ( ×ô bu|MEDIUM ) a) ð2 -> DARK SHADE
õ)    '\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
8 (248 48 ” AND LEFTA 9010A 5A ÷LATIN CAPITAL LETTER A WITH OGONEK? c€ 6? C? VCARON> (18> 7> E> } (16? 8? ”DOT ABOVE� H2563B 9B 	weDOUBLEx@H2551B aB { (579 b9 ODOWNw d> c> -UP< H012e< d< óIv(60? e? S? 	ó9251> f> 	réö 1­/c0= õ R3p3< 1< ‰HORIZONTkë/c2A º C 1C æ»Æ 0?cð| 3| éy b| G 8017©cñUþ³'6a=cò? 7MAC19255? ò	Å °5íÂ{(69» ê| <8256°cóD 	ù	ÈÉ 5C  E~ 	Eü; 	~ H 8017¿cƒZF	DG0105Šd> OSMAL²{ d=  °d<  ®ñÀ 0x00d3 -> Lý2ATIN SMALL LETTER E WITH DOT ABOVE
    '\u012f'   #  0x00d4 -> LA@ I@ fOGONEK= (61= 5= S= VCARON< (73< 6< U< y b= 7= :MACz e= 8= Zz 	¶ H2518< 9< ôBOX DRAWINGS LIGHT UP AND LEFTñ H250c; a; ADOWN= RJ > 8y b> •FULL BLOC’H2584e c' ­LOWER HALF- 	’ d- ?EFT, (90Y e, ¢ - 8- f- ?UPP† !xd‚ e0- ‚eCAPITAÄO‘SACUTE!xd¾> 1> 	 óSHARP S (GERMAN)@ Hu014&e2@ ~ L4¿ ?/e3? N½   f5S½ }ù FTILDù < |¹ 	> b> ~—MICRO SIG¥4OehÝ  Pu0136ß g¡ KvCEDILLAš(37@ k	Ú> "en> ~ L~ 	p@ 	~ > 4ü ‡–8ú (12ú ˜> ¼ Ö”Þy«» ?  H2019 ¾ëôSINGLE QUOTATION MAR|0xad6 ÎfÉ SOODYPHEU!xb4( ³©PLUS-MINUS�8201‡fŸ £ODOUB‹ bác —±VULGAR FRAC¼ @THREÌ cARTERSw!xb¹; ”xPILCROW› !xaž) �"SE\ E+xf) lPDIVISB* Au201¹ ºfoé _LOW-9zðb0'     #  0x00f8ð -> DEGREE SIGN
    '\u2219'   #  0x00f9( ó BULLET OPERATOR, 0xb7* , a, ¥MIDDLE DOT' Q ' b' õ SUPERSCRIPT ONE, 3S c, FTHRE. 2. d. #WOZ Pu25a0. Ù e, µBLACK SQUARU ' ¯ f) óNO-BREAK SPACE
)

### Encoding Map

e �_map = {z  E100:M000,f \FNULL  1  1  öSTART OF HEADING, 2, 2, 2TEXuu 3) 3) 0ENDS 
' 4' 4' ¢RANSMISSIOV 5/ 5/ VQUIRY¢ 6# 6# ¢ACKNOWLEDGfJ 7' 7' (BE8  8  2ACK€ GE 9% 9% ùHORIZONTAL TABULATÀ a1 a1 –LINE FEEDÂ b% b% oVERTICT c/ c/ KFORMT d% d% çCARRIAGE RETURde+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAP�1„1„åDEVICE CONTROL¦ x1†1†. Tz. ‹1‹. Ö0 ”1”0 2FOU†/ ”1”ŸNEGATIVE z1¡1¡÷ SYNCHRONOUS IDL¦1¦Fe BLOCK@1»1»VCANCEò1¸1¸W fMEDIUMK °1°—SUBSTITUT¦ ±1±ß¤1¤†ILE SEPAÔN©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶
õ2«2«aEXCLAMëF MAR‹2©2©OQUOT* ¥2¥fNUMBER 2œ2œLOLLA' ”2”{PERCENTO Œ2Œ AM&AN�2…2…–APOSTROPH2v2vðLEFT PARENTHESIS
    0x0029:� 0x0029,  ð#  RIGHT PARENTHESIS
 % "a:- a- †ASTERISK$ b$ b$ –PLUS SIGN% c% c% VCOMMA! d! d! ·HYPHEN-MINU’ e( e( –FULL STOPM f% f% WSOLIDH "30# %30# ¥DIGIT ZEROI #31& 1& 6ONE% 2% 2% 'TWJ 3% 3% 7HREL 4' 4' FFOURr 5& 5& 'IVL 6& 6& 6SIXK 7% 7% 6EVEÀ#38' 8' E<N 9' ]V(NI1V3VGCOLOn S3SKSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cÆQUESTION MAR4i4i ú•ERCIAL AT<4l4löLATIN CAPITAL LETTER 44y4y2 Bd †4†2 C2 ‘4‘2 D2 �4�2 ©4©4©2 Fd ¶4¶2 G2 Á4Á2 H2 Ì4Ì2 I2 Ø4Ø2 J2 é4é2 Oö4ö&Ld þ4þd M2 	4	2 ±442 552 Õ5 5 QÈ 5 5 Y5 5 �5 5 è5 5 UÈ  5 V2  5 À LATIN CAPITóAL LETTER W
    0x0058: , ö  #  LATIN CAPIT2 X2 92 92 Y2 a2 a2 Z2 b2 b2 öEFT SQUARE BRACKET/ c/ c/ ö REVERSE SOLIDUS+ d+ d+ ?IGH[ e0 e0 ÷CIRCUMFLEX ACCENˆ f- f- …LOW LINE� "60$ %60$ \GRAVEL #61( 1( ™ESMALÉAX 20 20 	B0 30 30 	C0 40 40 	D0 50 50 	60 60 	F` 70 70 	G0 é/680 	H0 ç6ç	€I0 å6å	0 J0 ã6ãy	0 K0 ä6ä L0 é6é0  M0 é6é0  N0 ì6ìÀ O0 7ø7ø`  P0  7 
Q0  7 
R0  7 
97 7 
7 7 
U�  7 
V0  7 
é7 7 
ç7 7 
å7 7 
ã7 7  ã]CURLYâ7þ7þ`VERTIC¢_7÷7÷RàX ö7öFTILD—7ç7çVDELET" aÙf" ×NO-BREAK SPAC* £9ã ?F SIGXa˜9ê [POUND& Ž9u ŠCURRENCY) Àa6: 0x00a7, ð    #  BROKEN BAR
 €0x00a7:  0f5,  & ÆSECTION SIGN( 9( %a8( ›COPYRIGHT* b* e* ñLEFT-POINTING DOUBLE ANGLE QUOTAo FMARKo cE aE ,NOi d$ %f0$ §SOFT HYPHEº e' %a9' ªREGISTERED» "b0+ få kDEGREE' 1' 1R «PLUS-MINUS+ 2+ d+ õ SUPERSCRIPT TWOó #b3+ c+ FHREE- 5- %e6- [MICRO~ 6& %f4& {PILCROW( n¦MIDDLE DOTt %fbN Ì 'ONŸ f+ *b¢VULGAR FRA¤ ONCFARTEÓba¨ 7 FHALFÜ %%f3± 4 T�1 QUm S: "c4d8ï÷ATIN CAPITAL LETTER A WITH DIAERESIA Ë8,LA RCFABOVncç%92½ B —IGATURE A5 Î9>5 ¸ E¸ FACUT= d¬e= O= ñ esz = GTILDz ì Î= 	odì9°’MULTIPLIC‰	ø"d8ß9Áp 	 STcdÂ9Y> U(®  f ekA ESMAL\õSHARP S (GERMAN)€ e�?  ›eª8f? ™ e­¾ I—e—8Ì	ñ •f•a; 
V
Ðfé e(
; 
‘fä ; áf�fc]DIVIS�f‰ÖŒ £ ðSTROKE
    0x00f°c: 0x0081,  ð#  LATIN SMALL LETTER U WITH DIAERESIS
+ b0x0100? +a0? eCAPITAA AA fMACRON> 1> +83> 	} < 4< +b5< z fOGONEKz 5> d¸ z < 6< 8< z Cô VACUTEy 7= 7· 	y ; «+b6; x )CAkdx dè
x 
; "12; /edx Eð ä"13> +89> 	ñ < j+b8< ò > †DOT ABOVn1nda
? 8¼ b­€ ("19> +d2¾ ú < 2t9ÞGtuCEDILLAf2u? 	{ = a¸ a+ö I| ð"2b> /8cö 	< e< bj> 4f> /d4z < 3jejKô p3heå
= 2+ea¸ pL| +eb? 	ì= 4‚ar? VSTROK_4¦86{ < £e›ö Nö 
F4ýe™	y ; ú+ee/x ê4)ß
z = «| Oô Z4Ã92	õ < 5· 8dÀ  #  LATIN CðAPITAL LETTER R WITH CEDILLA
    0x0157: @08b, ï #  LATIN SMAL= a= +97= C| S| VACUTEz b= 8= 	z ; "60; +be; x UCARONx "61= +d5= x ; ð cð Uð 9MACy ñ d> 	y < "72µ +c6µ ò > eOGONEKó "73> d> z < 9< /8dz Zô 
ä71al
; ./a3x †DOT ABOV`"7c¹ +a4A 	õ | ?  d? +cf? rA 
)"7e= dÜ
;  3201pex ôRIGHT SINGLE QUOTATION MARã3201î &f2¯ �EFT DOUB6 å am 7 ß fÊ1 _LOW-9¤ 2Û %f9¤ ó BULLET OPERATOR²3250âc½áBOX DRAWINGS L¦HORIZONTAL9 )b79  hVERTIC7 ?&da› p ‘DOWN AND %t 1­ b³t  = FLEFT< 4*/c0y 	/UPw 8; dO´ ; 
u î c%{  2¶ bŸ
fA 	� 2� ®2	è 3‚ /c18@ ‚ š‚  	Â F  5úc	F : †bq: � 05ø õÀ DOUBLE DOWNð AND RIGHT
    0x2557: 0x00bb, ñ #  BOX DRAWINGS DOUBLE DOWN> 7LEF= a= /c8= 
!UP; y d< /bc< 	w "60; c; �VERTICAL}  "63B /b9} 
	B 
ƒ 6A c7¥HORIZONTALz#69C a„ 
=A cA eA 
	Å G  8N%dfG õUPPER HALF BLOCK´ "84s dz?LOW, 8, #LFULLR Å %dd~  i} 9© ð S, 1} &b0W  øe SHADEÐ #92' 1' lMEDIUM( 02( KDARK& a¡ f¡ ðTBLACK SQUARE
}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP850.TXT' with2 c; P.py.
c ±#"

import  cs

###` ²APIs

class ($ . 1):
`def en ñ(self,input,errors='strict'):,  8creturno “.charmap_B = , †ing_map)m /dem -B 	m   m dtable)ø ÁIncrementalEå r å  h Ã final=False*  W.Q
?[0]¨  D ¨  ~  ¨ ö e¹¨ !@ â ¨  Oª ÑStreamWriter(J,Ð8cs. ¤ 5pasƒ ORead9  	9  ÌFàs module API

ý Ãgetregentry(7 
�ž UInfo(¾Õname='cp850', d !e=0 2().     id: .r=]/ J 	/ ä/ spr7=D# Ðwriter=StreamóWriter,
    )

### Decoding Map

d ù_map = codecs.make_identity_dict(range(256))5 ‘.update({d €0x0080:  0c7,w ö #  LATIN CAPITAL LETTER C WITH CEDILLA? 1? +fc? ESMAL= U= –DIAERESIS? 2? /e9? 	E? VACUTE; 3; 2; 	A; ¦CIRCUMFLEX@ 4@ 4@ º  5? 0? GGRAVº 6; 5; ˆRING ABO@ 7@ ³	t±8= a} 	r79@ b@ 7 a? 8? 7b; f; 	Iñz  c? e? ù d@ ê
 º e; ckd­¼  fA 2A 4 9çiB ù
k9å/e6;–IGATURE Aä9Ùc3 p 5 Óf(	ÙOâ£ 9Ófu @ f9ÓfR
 
â9Óf
º ÓfŸ	º @ { Ñf
Y5õ  Ðd4© ÷ A  ÒdA ½ A  Øf
€ WSTROKgÕ%a3š¥POUND SIGNë9»db £ d ¾doëMULTIPLICATIONm ¬/19F
F�àHOOK
    0x00a°0: 0x00e1,  ð#  LATIN SMALL LETTER A WITH ACUTE
'  3 #a1; d; 	I; 2; /f3; 	O; 3; a; 	U; 4; ì 
N; GTILDì 5; d; eCAPITA)= 6= a³ öFEMININE ORDINAL INDICATOR_76 b6 oMASCUL7 87 f öINVERTED QUESTION MARKi 92 %ae2 ö REGISTERED SIGN+ a+ c+ ;NOT$ b$ b±VULGAR FRAC †ONE HALFX c4 X 4 gQUARTE#d7 a–ì qEXCLAMAp 
ï e5 bÄ ÿLEFT-POINTING DOUBLE ANGLE QUOTE fE bE ORIGHF b}6259À LF G SHA}biE2592² lMEDIUM( V6259VLDARK& A6250N ÒBOX DRAWINGS ‚  2EICAL£b=E2524… 7 P AND W@ Bcì iBkbBc´ ¦= ¦CIRCUMFLEX N%c0¿ B 	FGRAVþbT%a9= ACOPYò
ýbL6256ƒ	&\^' b6255'A 	à vE2557£ 8 ODOWNu  6255³= /UP;  ƒš;CENbs5� ;YEN:R6251¡	„ —À cH1œ
¿ ¶8c\3; ‡HORIZONTct2º· 	B �1B 
	2Ã š0:
z À   0x00c5: 0px253c,  ð#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
2 €0x00c6:  %e3F öLATIN SMALL LETTER A WITH TILDE; 7; c; oCAPITA= 8= E255ax 	¾ ‘DOUBLE UP¹ RÌ y 9< 4< 
ODOWN> a> /69> 
z 3bA 6A 
 C cC 0C 
	½dB 5B | e: 68z	| G fG 600a…ÕCURRENCY SIGN®"d0) fª b 6ETH2 12 d2 Y	4 24 cPf 4 Ê¦CIRCUMFLEXv 3B b”B 	–DIAERESISA 4A 8A FGRAVM!d5= ;131= 	ˆ–DOTLESS Iu À+cd8 ø Iø GACUTu Âe= 5ÇO00cfB 5 Ì15	Æ�FLEFTú È0È: †
?dÄ8w ¦FULL BLOCKc §8ä¬LOWER HALF, ‘700a–ROKEN BARR }600cµ e¯$s6258?UPP� evd�Oe�Ö	�fSHARP  eƒd.K‹s N eƒ/d2NB 
e+f5= 	µ ; 
Êe},0d; º = ‚b= ZMICROekfk	ž FTHOR:e]d4 ÀN CAPITAL LEñTTER THORN
    0x00e9: 0da, ñ #  LATIN CAPITAL LE6 ÆU WITH ACUTE= a= b= ¦CIRCUMFLEXB bB 9B GGRAV c= +fd= ESMALº Yº d; d; ÷ = e= %afx WMACROVf" %b4" :u ACCENTÿ "f0( a‡ ¦SOFT HYPHEO "f1' %b1O çPLUS-MINUS SIG+ 2+ E2017+ æDOUBLE LOW LIN? f3+ E00be+ öVULGAR FRACTION THREE QUARTERS· 4: 6: {PILCROW� 5( a� "SEZ 
µ 6( f( PDIVISƒ 
) 7) %b8y vCEDILLAœ 8# 0# 0DEGÇ 
J øaJ ‡DIAERESIè àb˜ —MIDDLE DOÅÄbÄØSUPERSCRIPT Os²%b3� + oÊ ¤/b2- &WO+ ’625aõ pBLACK S¼ó˜( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (} d'\x00': Q¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- 2TEXx x 3* 3* 0ENDU 	( 4( 4( pRANSMISj‚ 50 50 UQUIRY$ 6$ 6$ ¢ACKNOWLEDGq ¤ 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  �c9& pHORIZON¤@TABU¶‚<'\n2 a2  þU FEEDÇ b( # 0b& �VERTICAL V :x0c0 c0 HFORMV r$ ® d& ÓCARRIAGE RETU€ !e. ‚ e, †SHIFT OUëf& f& IûJ'\x1ˆ1ˆ@DATAöuK ESCAP™1”1”åDEVICE CONTROL¹ \ 
–1–/ T� / 
›1›/  [‰1¤1¤1 EFOUR0 
¤1¤™NEGATIVE ‰À   '\x16'   ð  #  0x0016 -> SYNCHRONOUS IDLE
    '\x17'
 - 7- õ
END OF TRANSMISSION BLOCK6 86 86 eCANCEL# 9# 9# Y eMEDIUM* a* a* –SUBSTITUTª b' b' VESCAP# c# c# åFILE SEPARATORu d+ d+ _GROUP,  e, e, oRECORD-  f- f- LUNIT+  (  © 20+ CSPACÑ !" 1" €EXCLAMAT–3MAR•"- 2- LQUOT+ #+ 3+ ²NUMBER SIGN&$( 4( XDOLLA( %( 5( wPERCENTQ &) œ‘AMPERSANDw 1"'"’•“APOSTROPH(M †ñLEFT PARENTHESIST -')- �ORIGH.  *. ”sASTERISq+% ’GPLUSó ,& •RCOMMA› -" Œ³HYPHEN-MINUÄ .) ‰’FULL STOPO /& ‚TSOLIDJ 0$ 3{¢DIGIT ZEROK 1' €' #ONˆ2& y& #TWL 3& t& 3HREN 4( t› 3FOUÁ5' sO 3FIVN 6' q' 2SIXè q3q& 3EVEõ( r( EKP ú( m( $NI9:� fCCOLOq ;" cGSEMI& <& c—LESS-THANŽ=+ lXEQUAL¶>( k|GREATERV ?. sKQUES¥@* 4y ’ERCIAL ATDA* |óLATIN CAPITAL LETTER IB3 ‰3 Bf C3 –3 C3 D3 ¡3 Ñ-'E3 ­3 ¹F3 ¹3 F™ ð G'        #  0xð0047 -> LATIN CAPITAL LETTER G
    'H'   Ÿ#  0x00483 H3 I3 93 I3 J3 a3 J3 K3 b3 K3 L3 c3 L3 M3 d3 M3 N3 e3 N3 O3 f3 O3 P3 /503 P3 Q3 13 Q3 R3 23 R3 S3 33 S3 T3 43 T3 U3 53 U3 V3 63 V3 W3 0W3 X3 0X3 Y3 0Y3 Z3 0Z3 [3 0óEFT SQUARE BRACKEb$\\1 ù5-ãREVERSE SOLIDUÁ]+  , &ORIGH] ^1 $óCIRCUMFLEX ACCEN‹ _. rOW LINEà `% 6YGRAVEN a) ESMALAZ b1 	1 B1 c1 	1 C1 d1 	1 D1 e1 ÿ	1 f1 ý	1 Fb g1 û	1 )h1 ù	1 'i1 ÷	1 %j1 õ	1 #k1 óï	1 !l1 ô 	1 m1 ù1  n1 ù1  o1 üÄ p1 7b ÀALL LETTER P€
    'q'   ò#  0x0071 -> LATIN SMALL LETTER Q1 r1 21 R1 s1 31 S1 t1 41 T1 u1 51 U1 v1 61 V1 w1 71 W1 x1 81 X1 y1 91 Y1 z1 a1 Z1 {1 b1 óEFT CURLY BRACKEU|/ c/ ÒVERTICAL LINEY }* d* ORIGHZ ~0 e0 CTILDR B\x7f% •f" UDELET# )c7#  80# ¸PCAPIT¤ ºâC WITH CEDILLAµ J\xfc@ øU> ƒDIAERESI¥J\xe9@ E@ 6ACU¼ *e2< A< “CIRCUMFLE-J\xe4A "A ½ 0@ 1@ EGRAVy*e5< << ‡RING ABOA ºL¸*ea Yx< bA iA <8@ x@ 
<
Ø8ƒmIù| e| ”õ	­@ ý  ö«A 	½ cu·< rû¿ c;×B 	=cw9÷€
y6@9õ•IGATURE Aðc4 é÷ 6 f-9ãOêªfw ãA lfdð95 -> LATIN SMALLð LETTER O WITH GRAVE
    '\xfb'
 ô
 #  0x0096 -> LATIN SMALL< U< ¥CIRCUMFLEXA 9A 7A 
} f< 8< Y} ”DIAERESIS| *d6@ 9@ eCAPITA¿ û B cB aB B *f8B bB 	A‚ USTROK~*a3= c= ¥POUND SIGNè d d' ¥è 
f *d7f e? èMULTIPLICATIONo Pu01922 f0 o 	Ó F—DHOOKª  e19  O/a0; A; EACUT*ed< 1< I<  fI/a2< †	x *fax 3< 
< ð 4< N´ ETILDð d< 5< Ö> a¶ ¹ðFEMININE ORDINAL INDâ$OR¡b7 ¯oMASCUL8 
«a«ÑINVERTED QUESG5MAR*aeXžšREGISTEREâaˆaˆ8NOT˜+xb!k±VULGAR FRAC‚ …ONE HALFñ Z c5 eQUARTE)ažtñ bEXCLAM;	ô 
OakþLEFT-POINTING DOUBLE ANGLE QUOTF bF �ORIGHG Au259Å Èb� G E SHA‰ ( ðbymMEDIUM) hQ fLDARK' 0P QáBOX DRAWINGS L…  =CICAL«Pu25243_ M8 P AND ]A !xcï ~bR€cµ > R÷�>  c0À C ^C 		aKbdACOPYûIu256Š\+À DOUBLE VERTö8ICAL AND LEFT
    '\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
9 79 b9 ODOWNw d> c> ,UP< 0xa2: ³ d< “CENT SIGNÙ :xa5& e& 8YEN% Pu2510' þ f% 	þ oLIGHT Ä '14= /c0= Ã RJ ž Iu253< 1< —HORIZONTA(2c} 2A º C 1C 3C Vú‰Æ 0?/c4B | 3| 5: 	| G 0xe3 c6G óLATIN SMALL LETTER A WITH TILDEƒ+xc< 7< oCAPITA> 	 8a| : c8> 	:8þ5þ9= ¾w(69| ´| 8Xu2566B ½D 	ýÃ	ÄÉ 5C ÊE~ 	Aß; 	~ H !xa‰BˆCURRENCY,!xf« * dïl 4ETHcd3 æ3 c5 cXh Ú5 Ö¤CIRCUMFLEXx  cbÝC ÚC 	•DIAERESISB 8B ÚB 	DGRAV[Hu013UdÞ> 	—•DOTLESS Iw ¹ Ð1Iü DACUTw :xceµ Ò> : fC ×º � : S<dÜSœ
Œ0ÔdØ; 8y ÔÀFULL BLOCK
 ñ   '\u2584'   #  0x00dc -> LOWER HALF BLOCK
 - 0xa6+ - d- ¤BROKEN BAR' *cc' e' óLATIN CAPITAL LETTER I WITH GRAVE>  ’ 0@ ’ f> ?UPP’  d3+ ’  e0- k Ok SACUTEk :xdf> 1> ESMAL§ uSHARP S7 2u 27 à u ¥CIRCUMFLEXC 2z 3C #:xf5> 4> 	¸  FTILDô < 5< ½ 	> b> 6> ¤MICRO SIGNß *fe¡ 7' —	¡ ETHOR5 d5 85 š 
7 al 97 Ub> a> Ì 9C bC 
Ìd> �-	+Y½ < �g2> aþ§UMACRO“bêŒCt ACCENTñaŠ fˆ¦SOFT HYPHEQ 1î fr¨PLUS-MINUSEPu2017. 	fg`DOUBLE¢E LINÖb<fPõVULGAR FRACTION THREE QUARTERÎbÕfMxPILCROW� !xaŽ ÷f:"SE\ 	þ) %PDIVIS† *  b8á S (tCEDILLA[b$ 0DEGÌ L aL †DIAERESIî œ ð•MIDDLE DOÐbÔfÔ×SUPERSCRIPT O|
„fÂ, xÏ 
úf´	. #WO, Au25aý ¢pBLACK SÇÿ' $¨óNO-BREAK SPACE
)

### Encoding Map

e �_map = {z  	100:000,ý  FNULL  1  1  öSTART OF HEADING, 2, 2, 2TEXuu 3) 3) 0ENDS 
' 4' 4' pRANSMISi 5/ à5,     #  ENQUó IRY
    0x0006: , ö  #  ACKNOWLEDGE' 7' 7' FBELL  8  8  wACKSPACE 9% 9% öHORIZONTAL TABULATIONV a1 a1 –LINE FEED% b% b% oVERTICT c/ c/ KFORMT d% d% çCARRIAGE RETUR¤ e+ e+ –SHIFT OUT¤ f% f% II "10$ %10$ ö DATA LINK ESCAPJ#11, 1, ÷EVICE CONTROL ON. 2. 2. 5TWO¬ #13. 3. 7HRE^ 40 40 FFOUR_ 5/ 5/ �NEGATIVEz1¡%160 ÷ SYNCHRONOUS IDL‹ ¦1¦ö
END OF TRANSMISSION BLOCK‘ »1»VCANCEÝ1¸1¸W fMEDIUMK °1°—SUBSTITUT¦ ±1±ß¤1¤ÇILE SEPARATON©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶
õ2«2«aEXCLAMëF MAR‹2©2©OQUOT* ¥2¥¦NUMBER SIGT2œ2œLOLLA' ”2”{PERCENTO Œ2Œ†AMPERSAN�2…2…–APOSTROPH2v2võLEFT PARENTHESISW2€2€ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3k3k–DIGIT ZER¿3p3p& 3i3i% 	3d3d% 	 3d3d— 	÷3c3cM 6FIV3a3a& 5SIX+3a3a% 6EVEü3b3bÀ  #  DIGIT EóIGHT
    0x0039: , æ #  DIGIT NINE& a& a& VCOLON! b! b! KSEMI% c% c% ×LESS-THAN SIGO d* d* kEQUALS' e' e' GREATERT f- f- ÕQUESTION MARKÌ "40) %40) ÆCOMMERCIAL A<#41) 1) öLATIN CAPITAL LETTER A[ 22 22 B2 32 32 C2 42 42 D2 52 52 #462 62 Fd 72 72 G2 82 82 H2 Ì/492 I2 Ø4ØÂJ2 é4é2 Oö4ö&Ld þ4þd M2 	4	2 b442 Od 552 P2  5 Q2  5 R2  5 S2  5 è5 5 Ud  5 V2  5 W2  5 X2  5 Y2  5 Z2  5 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸5RË[ 5÷CIRCUMFLEX ACCENˆ 5HOW L66\GRAVEL 6÷6÷OSMAL 6õ6õ	0 6ó6ó	0 ð64: 0x0064,     ó#  LATIN SMALL LETTER D
    0x0065: ,  0 E0 60 60 	F0 70 70 	G0 80 80 	H0 90 90 	I0 a0 a0 	J0 b0 b0 	K0 c0 c0 	L0 d0 d0 	M0 e0 e0 	N0 f0 f0 	O0 "700 /700 	P0 10 10 	Q0 20 20 	R0 30 30 	S0 40 40 	T0  /750 	U0  7 
V0  7 
W0  7 
X0  7 
Y0  7 
Z0  7 ÷EFT CURLY BRACKENþ7þÆVERTICAL LING7÷7÷ORIGHX ö7öGTILDP ç7çVDELET" aÙf" ×NO-BREAK SPAC* Óaœ  INÇ öED EXCLAMATION MARøaØb5 †CENT SIG�aÍ9[POUND& Ãcª ‹CURRENCY) ¼b;YEN$ °d˜ –BROKEN BAfa¦f1SECæ 
Á žfn†DIAERESIƒa“bÃBCOPYà
O �aM÷
FEMININE ORDINAL INDICATO­ “a÷ ÿLEFT-POINTING DOUBLE ANGLE QUOT°ªa,NO¯¥f§SOFT HYPHEÖ�aœREGISTEREÛ§e» VMACROM b§=jDEGREE×b¤fwðPLUS-MINUS SIGN
    0xà00b2: 0x00fd,  ð#  SUPERSCRIPT TWO
  # #b3+ c+ FHREE- 4- %ef- ÆACUTE ACCENT( 5( 6( ¦MICRO SIGN& 6& %f4& {PILCROW( 7( a( —MIDDLE DOt 8& 7& vCEDILLAq 9# b# 'ONê a+ aN öMASCULINE ORDINAL INDICATORb b7 !öRIGHT-POINTING DOUBLE ANGLE QUOTATION MARKF cF ”±VULGAR FRAC0  ON> GARTE} d7 ß 7 FHALFk e4 %f34 T1 QUm S: f: %a8: ÑINVERTED QUES§ 	× "c02 bTöLATIN CAPITAL LETTER A WITH GRAV‘#c1= 5o = 	—¬ cb�= 	¦CIRCUMFLEXB 'c¼ GTILD¼ 7/8e¼ †DIAERESIlcP8WÀ 	Ri8ABO?l/92ƒ —IGATURE A¸ y/805 ±C±oc’dà¶ E? ð¬9| = ð¾dî ¹ = ðÉd¼ 	³ ÄdôIý Êd°= ý Ód«= ý ÛdÛý B ý dê/d195ETHbdáaáN1
bdáe¯O= 
kdÜek= 
ndÜek= n dÝeù B ù ØÀ99,     #  Lñ!ATIN CAPITAL LETTER O WITH DIAERESIS
    0x00d7: 09e, ö #  MULTIPLICATION SIGN/ 8/ d/ Lp fSTROKE> 9> /eb> U® GGRAV= a= 9= GACUT= b= a= ¦CIRCUMFLEX¼ cB 9B j dA e;Yý À e= 8À GTHOR®f6 16 ESMALfSHARP "e06 /856 	A§ 
¤"e1; /a0; 
â "e2; /83;   "e3@ /c6@ FTILD"e4; /84; Ù#e5? z ‡RING ABOÙ"e6@ 9¦—IGATURE A² ¶/87² 	C£uCEDILLAÊeÄ8Ê	E= àÁ/82x 	; à¿8Âv àÂ8ÿ@ ¥ ¿8~	? Iõ ¹a b; õ ·/8c0	; õ Á81¶ õ fÊd�
5ETHfÁ
N'
FfÁ97
‰
Wf¼aW
; 
bf¼97
; b f½eñ 
@ ñ ¸; � Äf7]DIVIStf°9ÀR O WITH STRñ OKE
    0x00f9: 097, ÷ #  LATIN SMALL LETTER U WITH GRAV; a; /a3; GACUT; b; /96; ¦CIRCUMFLEX¶ c@ /81@ –DIAERESIS? d? /ec? 	Yõ º e; 0
VTHORNo f4 /98o ® 2131? /d5? 	”DOTLESS Iw 21928 /9f8 	Fæ CHOOK: B2017: %f2: äDOUBLE LOW LINÊB2500+ %c4+ ôBOX DRAWINGS LIGHT HORIZONTALd #50ž b>9  hVERTIC7 ú/dap 	 DOWN AND R t 1­ bt  = FLEFT< 4é 0y 	/UPw 8; /d9; 
u î c%{  2¶ bŸ
fA 	� 2� 
2	è 3‚ c«B  8@ ‚ þ@  	Â F  5ú/cdƒß: ~bq: � 05ø õ8 m
ª5‚/bb° 
> 	µ5™cp	3{ ty b< 	w 6d; *m
} "63)b4	B 
ƒ 6A c7ð 6cð=A ±e»
	Å G  8Nd¬õ UPPER HALF BLOC°#58ldz9LOW, À
    0x2588:� 0x00db,  à#  FULL BLOCK
 q0x2591:& %b0& ¶LIGHT SHADE' 2' 1' lMEDIUM( 3( 2( KDARK& "a0& %fe& ðTBLACK SQUARE
}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP852.TXT' with2 c; P.py.
c ±#"

import  cs

###` ²APIs

class ($ . 1):
`def en ñ(self,input,errors='strict'):,  tcreturno “.charmap_B = , †ing_map)m /dem -B 	m   m dtable)ø ÁIncrementalEå r å  h Ã final=False*  W.Q
?[0]¨  D ¨  ~  ¨ ö e¹¨ !@ â ¨  Oª ÑStreamWriter(J,Ð8cs. ¤ 5pasƒ ORead9  	9  ÌFàs module API

ý Ãgetregentry(7 
�ž UInfo(¾Õname='cp852', d !e=0 2().     id: .r=]/ J 	/ ä/ spr7=D# w“#  # )Z  ~0MapA0codáTmap =Ïñmake_identity_dict(range(256))
° 5 ‘.update({F ¨8%c7öLATIN CAPITAL LETTER C WITH CEDILLA? É+fc? ESMAL= U= –DIAERESIS? á/e9? 	E? DACUT3008ôeô¹ 	z A; ¦CIRCUMFLEX{ 4/e4{ 	@ º  5? ?16f? 	ù —RING ABOV¿ 6@ 0x	¿ vú 7; /0e; ±8= /147
L7WSTROK´ 9< &0eÜsÀALL LETTER Eð WITH DIAERESIS
    0x008a: @150, ó #  LATIN CAPITAL LETTER OA ¶OUBLE ACUTED bD 1D OSMALB cB ?0eeB 	I„ ¦CIRCUMFLEX‚ d@ ;179@ Æ ZB ¿ e= ?0c4= A= D fA ?106A CA 
~ !90= /0c» E= 1= /13= L= 2= a· 	·; 3; ,0f3	; 4° #94@ 2@ q!95? ;13dº ï¼ UCARON,#96= l
; 7; 52x So8= bµ 	ô ; 9; ,0d/x q1 æ;0dc| A U¹ A  ã6ñA TA rÞ;165~ 	ú ; Ù4[x ¯VSTROK™9Ú%d7y ÷MULTIPLICATION SIGÈW	¨ Æ
ã aÆe¨ 	; B
aÄ/0ev 
ü; Â50f3à ½	v ; ÂË	; ; ½/10î eOGONEKa¼0
< »7+ç£½7ø
; »+18hx ¤ò ¾,11¥	k< ¹a¹:NOT·aœ7ËÀSMALL LETTERð
 Z WITH ACUTE
    0x00ac: @10c, ò #  LATIN CAPITAL LETTER C= VCARON= d= +5f= ESMAL; S; fEDILLA= e= 60ab= öEFT-POINTING DOUBLE ANGLE QUOTATION MARKE fE bE ORIGHF  b0F F2591‹  F V SHAD,#b1' 2' lMEDIUM( 2( 3( LDARK& 3& 0N áBOX DRAWINGS L‚ …VERTICALò "b47 %24] 7 – AND LEFT@ 5@ 700cì ñA¶
.#b6= ´ .= ¦CIRCUMFLEX 7B 511a¿ B E 
p"b8= /5e= r b9? 6256˜	;qs< aA 5<A 	õ b8 7¸ 8 ODOWNu  ¢O255d= 
/UP;   7m‡DOT ABOVò¤,17	á? žO2510» ã÷ c”1è
ö ôoc¨3; ‡HORIZONTccÀ2ö 	¯· B Ü1B 
	iÃ æ0:
z ß?253z F è1œ9è7BRE5cã0g= 	5; á6255	z¢öÞ5ö< nqÛ/69«> z 3ä/66A 
 C ê6õ„ 7	ñ3255B À#  BOX DRAWIðNGS DOUBLE HORIZONTAL
    0x00ce: 0x256c, × #  BOX DRAWI: ÏVERTICAL ANDG fG E00a4G ÕCURRENCY SIGNp !d0) 5111) öLATIN SMALL LETTER D WITH STROKE< 1< 0< oCAPITA> 2> /0e> GCARO· 3= ?0cb= E¹ –DIAERESIS¼ 4A ;10fA ø | 5; +47; ÷ N| = 6= ?0cd= I= GACUTq7= 3= ¦CIRCUMFLEX÷ 8B ,118	÷ 6º 9; E2518º 	š�LIGHT UP“FLEFTu a: 0Ô: ADOWN< RI = b= 8w ¦FULL BLOCK& c& ð¬LOWER HALF, d, E0162É óÀTƒvCEDILLAk ¢?016…U? —RING ABOVÇ�62588?UPP­ e ?0d3­ On 
0e¡/0då
fSHARP e™'0dL s f ež/14µ "µ š4 	£; š,Ú; 
Þe˜&16”; õ Sh= ˜/16E
; ‘5î x Rx +“O00da‹= –K0155= 	-x ”?017-x î ²<00f		 Y÷ Á,0d; 4= ¿œ	x üeº600b®Ö f ACCENòf¶a¢ À#  SOFT HYPHàEN
    0x00f1: @2dd, ð  #  DOUBLE ACUT FCENT/ 2/ b/ fOGONEK" 3" %c7" GCAROr 4! %d8! VBREVEB 5! &0aB ·SECTION SIGI 6( f( ^DIVIS) 7) br vCEDILLAt 8# 0• kDEGREEs 9' aJ –DIAERESISL a% 62d9L hOT ABOå b% 5171% ù
LATIN SMALL LETTER U WITH’g cB 5Œ B eCAPITAD RD …d= ¤ = 	 ; e; 625a+·BLACK SQUARÇf( '00( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (õ d'\x00'¦ ½¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- 2TEXø x 3* 3* 0ENDU 	( 4( 4( pRANSMIS ‚ 50 50 UQUIRY$ 6$ 6$ ¢ACKNOWLEDGq ¤ 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  	c9& pHORIZONV@TABU+Ò<'\n2 a2 •LINE FEEDÇ b( #x 0b& �VERTICAL V :x0c0 c0 HFORMV r$ ® d& âCARRIAGE RETUR1 !e. ‚ e, †SHIFT OUëf& f& IK 1ˆ1ˆõ DATA LINK ESCAP™1”1”öDEVICE CONTROL ON/ 
–1–/ 4TWOX1›1›/ 6HRE` 
¤1¤1 EFOURa 
¤1¤pNEGATIV ‰1±1±ö SYNCHRONOUS IDLŽ 
¶1¶Z2R BLOCfJ'\x1Ë1ËUCANCE
)19È1ÈY eMEDIUMá a* À–SUBSTITUTª 
Á1Áê
´1´ÆILE SEPARATOVdu ¹_GROUP,  
¹1¹oRECORD-  
À1Àð UNIT SEPARATOR
p    ' '   ð#  0x0020 -> SPACE
 -'!" 1" òEXCLAMATION MARK- "- 2- LQUOT+ #+ 3+ ²NUMBER SIGNS $( 4( XDOLLA( %( 5( wPERCENTQ &) 6) ‘AMPERSANDw 0"'"þ   7& ƒPOSTROPH(M 8' ñLEFT PARENTHESIST -')- 9- ORIGH.  *. a. sASTERISq+% b% GPLUSó ,& c& RCOMMA› -" d" ³HYPHEN-MINUÄ .) e) ’FULL STOPO /& f& TSOLIDJ 0$ 3{¢DIGIT ZEROK 1' €' #ONˆ2& y& #TWL 3& t& 3HREN 4( t› BFOUR› 5' sO 3FIVN 6' q' 2SIXM 7& q& 3EVE8( r( EKP 9( m( $NI9:' fCCOLOq ;" cGSEMI& <& c—LESS-THANŽ=+ lXEQUAL¶>( k|GREATERV ?. sKQUES¥@* 4y ’ERCIAL ATDA* |óLATIN CAPITAL LETTER IB3 ‰3 Bf C3 –3 C3 D3 ¡3 Ñ-'E3 ­3 ¹F3 ¹3 F™ G3 Æ3 G3 H3 Ñ3 H3 I3 Ü3 I3 J3 è3 J3 K3 ù3 �L3 1Lf M3 f M3 N3 3 ÅO3 À   #  0x004fð -> LATIN CAPITAL LETTER O
    'P'   Ÿ#  0x00503 P3 Q3 13 Q3 R3 23 R3 S3 33 S3 T3 43 T3 U3 53 U3 V3 63 V3 W3 73 W3 X3 83 X3 Y3 93 Y3 Z3 a3 Z3 [3 b3 óEFT SQUARE BRACKEb$\\1 ac0 ãREVERSE SOLIDUÁ]+  , d, ?IGH] ^1 e1 óCIRCUMFLEX ACCEN‹ _. f. ‚LOW LINEà `% 6YGRAVEN a) ESMALkAZ b1 	1 B1 c1 	1 C1 d1 	1 D1 e1 ÿ	1 f1 ý	1 Fb g1 û	1 G1 h1 ù	1 H1 i1 ÷	1 I1 j1 õ	1 J1 k1 óW	1 K1 l1 ôˆ	1 L1 m1 ù1  M1 n1 ù1  N1 o1 üÄ p1 7b  q1 r1 s1 Pt1 "u1 v1 w1 	x1 ày'        #  0ðx0079 -> LATIN SMALL LETTER Y
    'z'   @#  01 a1 Z1 {1 b1 òEFT CURLY BRACKET/ |/ c/ ÒVERTICAL LINE* }* d* ORIGHZ ~0 e0 CTILDR B\x7f% Ü f" UDELET# )c7#  80# 0PCAPIT¤ 2âC WITH CEDILLAµ J\xfc@ 1@ 	pU> ”DIAERESIS@ *e9@ 2@ E@ 6ACU¼ *e2< 3< A< ¥CIRCUMFLEX} 4A 4A ½ Au016b`/85@ ý ”RING ABOV~Au010€A 6A |
þ : $  < 7< 
¸Au014>> 8> L<TSTROK· :xeb8eµ8  50B } tuO xDOUBLE  Xu0151E ˆêC 0xeeA Cœý	½I† AAu017ÀÉ ³A É ZC Â +xcÁ> ÂI  06Ã € áB Bc¼ ÿ 9üÉ¾ Au013@ | 9úü D> aº 9ø<  *xf89øú·!xf5ù øA w (3d½ øû SCARONv 9x9õû < 57õz Sq 3ºz õ<  +xd4ôz 6*xd+9ö0x 6ûÀ ó„ ÀLETTER T WITý-H CARON
    '\u0165'   #  0x009c -> LATIN SMALL LETTER T WIT< (41< d< eCAPITA> L> cSTROKE{ 0xd7= { e? ÷MULTIPLICATION SIG«  0d2 « f0 «  Cm ç !xe© l /a0< A< EACUT¨ ev < 1< I<   f3² < 2< O< a< 3< U< Pu0104> ,&a4< ›ò cOGONEK› ? &a5? 	= 72| 6= | Zº ªXu017eº 7> 	{ < (18< 8< z Ez ö (19? 9? 	{ = 0xac; êa= ;NOTÃ7Õb% Ã Ý ‡ ”c < ªÝ  Pu015f¡ > ¬	Ü SsCEDILLA0xab< Ý «òLEFT-POINTING DOUBLE ANGLE QUOTÁ4MARV+xbF ÁORIGHG Au259ÎË bÌ G T SHAD¸ ( 2· ( ¸mMEDIUM) §) ¥LDARK' 0P �áBOX DRAWINGS L… ƒVERTICAL=Hu252ŒbŒ8 P AND ]A !xcï ~bŽú�8!xcµ > �> £CIRCUMFLEX� Hu011·b”� Ò5Òb–}Iu256Ÿ—	@|yAAu255CáœB 	ù 1255¥9 °9 ODOWNw 	b²> -UP< 1017.z °s,…DOT ABOVÿ40170À0x00be -> LAöPTIN SMALL LETTER Z WITH DOT ABOVE
    '\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
= 4= /c0= !UP; GRIGH< 3< 1< ¦HORIZONTALº (2c} 2A º C 1C 3C �VERTICALÆ 0?/c4B | 3| 5: 	| G H01026G  LA eCAPITAA6BREþH0103> 7> 	>< H255a< 8< B:DOUBLE þ5þ9= ¾=(69| a? | 8H2566B bB � D 	ýcD 	ÄÉ 5C dC ~ 	Ae; 	~ H !xa‰cÔCURRENCY SIGNrG01114dïl	.DjUSTROKi)01idð= ©? (0e| î? 	DCAROº 0xcb< ä dé> E¼ –DIAERESISü  0fD (déB ü ~ Xu0147< ë< û N~ > 0xcd< ¼ âI> DACUTw!xc6> â| > ¦CIRCUMFLEXû 1?û é¿ 	û ;½  _8¿ < è_¨L]0àdä; ¡Y8y à¤FULL BLOCKÜ 1258ÿ  ÃªLOWER HALF- 8016ld­	LTŠtCEDILLAm 1016Žm ²@ U@ LRING¯80d­ðUPPER HALF BLOCK
  �  '\xd3'  ð #  0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE
3  > f> 1> ESMAL< uSHARP S7 47 27 u £CIRCUMFLEXC Au014º ¸ 3C N¸  > ƒ > 4> 	¸ < 8¿ < 5< VCARON¶ (60< 6< ù S¶ > 1> 7> 	¶ < 5ò 8< z Rz 
èax $  ô 9> U> Pu0155@ > a> 	¸ z  Iu0172b< ¸ z jDOUBLE§ fd ¿ cE 	� Y½ +xd< d< � >  Iu016§e> 	z Tz sCEDILLA/!xb³¸ f> ™t ACCENT) a¥ fÆ¦SOFT HYPHE€2Ï Šf°2
X Pu02db;0 ©cOGONEK{ Xu02c7# ‰
·(2d1fmEBREVGaB è fS´SECTION SIGÀ +xf) @\DIVIS* bs S ,_Z$ iDEGREEv aL þ„DIAERESIÕ ,9	æuDOT ABOë  ÐÄfÐ	Î O‘ •Î’Q
Ž)15§ Ð	� < 125a3z Î¶BLACK SQUARÑ' Z¹óNO-BREAK SPACE
)

### Encoding Map

e �_map = {f ™100:¡000,| ŠFNULL  1  1  öSTART OF HEADING, 2, 2, 2TEXVu 3) 3) 0ENDS 
' 4' 4' pRANSMISŸ 5/ 5/ VQUIRY# 6# 6# ¢ACKNOWLEDGf  7' 7' (BE8  8  À BACKSPACE
 £   0x0009:  ,  ð
#  HORIZONTAL TABULATION
 1 a1 a1 –LINE FEED% b% b% oVERTICT c/ c/ KFORMT d% d% çCARRIAGE RETUR¤ e+ e+ –SHIFT OUT¤ f% f% II "10$ %10$ õDATA LINK ESCAPEP #11, 1, ÷EVICE CONTROL ON. 2. 2. 6TWO\ 3. 3. 7HRE^ 40 40 FFOUR_ 5/ 5/ ÷NEGATIVE ACKNOWLEDG_ 60 60 ÷ SYNCHRONOUS IDL, 7, 7, ö
END OF TRANSMISSION BLOCK‘ 85 85 fCANCEL" ¸%19" W fMEDIUM) °1°—SUBSTITUT¦ ±1±ß¤1¤ÇILE SEPARATON©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶FSPACî 2«2«aEXCLAMëF MAR‹2©2©OQUOT* ¥2¥¦NUMBER SIGT2œ2œLOLLA' ”2”{PERCENTO Œ2Œ†AMPERSAN�2…2…—APOSTROPHv2võLEFT PARENTHESISW2€2€ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3k3k–DIGIT ZER¿3p3p& 3i3i% 	3d3d% 	 3d3d— 	÷3c3cM 6FIV3a3a& 5SIX+3a3a% 6EVEü3b3b' E<N ]3]' 'NIC3V3V7COL«3S3SÀ  SEMICOLON
³    0x003c: , ð #  LESS-THAN SIGN
 * d* d* kEQUALS' e' e' GREATERT f- f- ÕQUESTION MARK} "40) %40) ÖCOMMERCIAL AT) 1) 1) öLATIN CAPITAL LETTER A2 22 22 B2 32 32 C2 42 42 D2 52 52 E2 62 62 F2 72 72 G2 82 82 H2 92 92 I2 a2 a2 J2 b2 b2 Oö/4c2 Ld þ4þXM2 	4	2 b442 Od 552 P2  5 Q2  5 R2  5 S2  5 è5 5 Ud  5 V2  5 W2  5 X2  5 Y2  5 Z2  5 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸5ORIGH[ 5÷CIRCUMFLEX ACCENˆ 5fOW LINõ66\GRAVEL 6÷6÷OSMAL 6õ6õ	0 6ó6ó	0 6ñ6ñ	0 6ï6ï	0 í6íÀTIN SMALL LEóTTER F
    0x0067: , ñ #  LATIN SMALL LE0 G0 80 80 	H0 90 90 	I0 a0 a0 	J0 b0 b0 	K0 c0 c0 	L0 d0 d0 	M0 e0 e0 	N0 f0 f0 	O0 "700 /700 	P0 10 10 	Q0 20 20 	R0 30 30 	S0 40 40 	T0 50 50 	U0 60 60 	V0  /770 	W0  7 
X0  7 
Y0  7 
Z0  7 ÷EFT CURLY BRACKENþ7þÖVERTICAL LINEW ÷7÷ORIGHX ö7öGTILDP ç7çVDELET" aÙf" ×NO-BREAK SPAC* Cc* ÆCURRENCY SIG\aÜf<{SECTION( Ôf¤†DIAERESI¹aiaã ñLEFT-POINTING DOUBLE ANGLE QUOTAj 6MAR~a€aÞ;NOTŽ {fâ¦SOFT HYPHEÝ b0‰jDEGREEN b-e-¶ACUTE ACCENbuCEDILLAbK c‘b•qPCAPITˆsqA WITH ­ ƒ cžbÞ= –CIRCUMFLE�c8ÇðB cU8ŸÀ CÀ Ec9? E? ÿ ‚dm½ = ½ À
    0x00cd:� 0x00d6,  ð#  LATIN CAPITAL LETTER I WITH ACUTE
)  5 2ce:= 7= ¥CIRCUMFLEXB "d3B /e0B O #d4= 2=  6B /99B –DIAERESISÀ 7A eA öMULTIPLICATION SIGN/ a/ ep Uï c= %9al «= ­  dA /edA Y~ f= 1= ESMAL'fSHARP  "e16 aà	6 Aq "e2; /83q 	; Ü e/84@ -eÚ8Ü	º Cº uCEDILLAè#e9¼ š	= E= 
T#eb; #; ·  äa§
ÎeÎ/8c1	; q fÌaõ 
Êf¬9ì
; { Èì
@ 5fìf]DIVISÀfÀa¨ 
�
Øf¾8™
; £  Øe�
º#10IcÞ 8KEBREVã#10Õc
; Õa•[= dOGONEKC2105/a5Ž	< +8f< z ¾	©#108/	�; äa¥x ECARO#10â9µ x ; ºdzx Dqð CARON
    0x010°f: 0x00d4,  ð#  LATIN SMALL LETTER D WITH CARON
' c0x0110; 1; lCAPITA= fSTROKE> 1> 0> y < 8< +a8< z E· fOGONEKz 9> 9> 	z < a< +b7< z 1b= d· y 
; 3´ 9lLò FACUTk3µ +92µ 	x ; d³ +95; ð = µ e= 6= x 
; 4+9d; x  "42y 8i
´ < 3< /e3z Nj#44= N
; 7; dj= /e= 	j; 5Æ/8að Oð zDOUBLE a5®+8bD 	 B 
9²ðR†  5;eÃ 	 ; 9+fcº x 
v5•f¥x ; “HSð H9-	x ; “b; ð = uCEDILLA;5.aò 
= 6je| 	m6ce1ô 
l6dµ x Tlô 6e#	z = Ø9| 
ô Ø9�z 
; èdµ x ÀAL LETTER U ðWITH RING ABOVE
    0x016f: @085, ÿ
 #  LATIN SMALL LETTER U @ "70@ +eb@ lCAPITAB ¶DOUBLE ACUT„ "71D fD „ B 9B /8d† ZÈ  a= a 
; b; bx ;DOT#7cA e¹ 	û | ?  d? +a6? ~A UCARONû#7e= 7= | 	; 22c7; %f3; 
! #d8! 4! 6BREx#2d²%fa! ß #2d_%f2% dOGONEKÄ #2d%f1" !s ACCENT/ 3250®c— öOX DRAWINGS LIGHT HORIZONTAL9 2Ð bñ B9 hVERTIC7 ßdæ 7   DOWN AND R t 1­ %bfÜ = 	6LEFé "14° /c0< 	/UPw »/d9; 
u î c%{  2¶ bŸ
fA 	� 2� 02	è 3‚ cPB  8@ ‚ O@  	Â F  5úcW	F ã: Kbq: � l5ø õ8 ª5bB° > 	µ5/c8p{ t
#5ÿ/bc< 	w 6d; *m
} "63db4	B 
ƒ 6A c7ð 6GcðÀGS DOUBLE UPð AND HORIZONTAL
    0x256c: 0x00ce, ÿ #  BOX DRAWINGS DOUBLE VERTICALG "80G %dfG õUPPER HALF BLOCKs #84, c, ?LOW, 8, b, KFULLR "91& %b0& µLIGHT SHADEy #92' 1' lMEDIUM( 3( 2( KDARK& aó f:ðXLACK SQUARE
}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP855.TXT' with genc; P.py.
c À#"

import c cs

###` ²APIs

class ($ . 1):
Qdef eW ñ(self,input,errors='strict'):,  &creturno “.charmap_B = , †ing_map)m  de‡ m )B 	m   m dtable)ø ÁIncrementalEå r å  h Ã final=False*  W.Q
?[0]¨  D ¨  ~  ¨ ö eL¨ !@ â ¨  Oª ÑStreamWriter(J,Ð8cs. ¤ 5pasƒ ORead9  	9  ÌFàs module API

ý Ãgetregentry(7 
�ž UInfo(¾Õname='cp855', d !e=0 2().     id: .r=]/ J 	/ ä/ spr7=D# w“#  # )Z  ~0MapA0codáTmap =Ïñmake_identity_dict(range(256))
° 5 ‘.update({F G&45;ô	CYRILLIC SMALL LETTER DJ˜2008¿/405  oCAPITA7 Ï5453§l Gl Ü/405  l 	7 ´&45;l &IO5G/404  k 6 66 /54Ö ·UKRAINIAN IK7> ð04,     #  CYRILLðIC CAPITAL LETTER UKRAINIAN IE
    0x0088: @455, õ #  CYRILLIC SMAL> 'DZ5 95 05  u 	7 a7 /56l ×BYELORUSSIAN-· ¶ bJ 0J  � L cL /57– &YI€ d4 04  € 6 e6 /58j Jkf4 04  j 6 "906 /59j L5 15 05  k 	7 27 /5al Nl 35 05  l 	7 47 /5bl 6TSHD"956 06  m 
8 68 /5cn KÚ 75 05  m 	7 ˆel uSHORT U‹9Œ9  p ; �ft (DZN|6  q 
8 h4©  	jYÝ h24  l 6 h4] 	j –HARD SIGNNo2;  q = av/30PAp at13  p 5 r/31h Baq14  i 6 p4h 	J'TSk o25  k 	7 n/34Ö Dk m14  k 6 l3¿ 	Ö (ag14  j 6 b4   	j &EF`24  j 6 ðc: 0x0433,     #ð  CYRILLIC SMALL LETTER GHE
    0x00ad: @413, ' #5 oCAPITA7 e7 50ab7 öLEFT-POINTING DOUBLE ANGLE QUOTATION MARK| fE bE ORIGHF  b0F F2591‹  F V SHADé #b1' 2' lMEDIUM( 2( LDARK& 3& 0N áBOX DRAWINGS L‚ …VERTICALò "b47 %24… 7 P AND W@ 5@ E0445@ ã&HA4 64 24  â6 76 /38j Ii 83 13  i 5 95 6256o	HJ aA 5ÿA 	® b8 7á 8 ODOWNu  c= d= 
/UP;  q%39; ÃgSHORT *s/419  _; iE2510t 	ì ®ë c_1³
ê ¿ccs3; ‡HORIZONT.c‹/2c· B §1B 
	]Ã ±0:
z ª?253z F ¼%3a-Kðcº14  (6 ½62556 	#ˆèÄ5è< `cÁ6Øz %Ê%66%A  C Ð6çÂ )	×?255B | Ø?256*| G äÐ00a4,     #  ð
CURRENCY SIGN
    0x00d0: @43b, ö #  CYRILLIC SMALL LETTER EL4 14 14  oCAPITA6 26 /3cj Mj 34 14  j 6 46 /3dj 54 14  j 6 66 /3ej OÓ 73 13  i 5 85 /3fh &PEi 94 E25184 öBOX DRAWINGS LIGHT UP AND LEFT: a: 0v:  ADOWN< RI = b= 8w ¦FULL BLOCK& c& 4� ¬LOWER HALF, d, ?041ý  2ÿ e6 46  	Ù&YA– f4 E2580– ?UPP– e92`  – b e;4b oR– e924  j E6 ;%41Ì j Sj 924  j 6 ;/42j T�e924  j 6 </43j UÓ :23  i 5 ;O0436h 'ZHÓ 6?0415  j 	7 0?043
 	¨Vk >?0414  k 6 H4×JSOFT&eM2;  q =  V1jNUMEROd fQ&0a‚L VHYPHEsfB} 	06YERÒfD6  Á 
8 F/37
žfF14  l Z6 F8žH±fG5  ðCAPITAL LETTER SàHA
    0x00f7: @44d, ö #  CYRILLIC SMALL LETTER E3 83 23  oCAPITA5 95 /49h 8SHCŸ a7 27  l 9 b9 /47p 'CHÚ c5 25  n 	7 d7 &0a7 ÆSECTION SIGN9e( E25a0” ·BLACK SQUAR‡ f( '00( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (} d'\x00'à ÷¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- ETEXT* 3* 3* 0ENDU 	( 4( 4( ¢RANSMISSIOM Ð 50 50 UQUIRY| 6$ 6$ ¢ACKNOWLEDGq L 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  Cc9& pHORIZON`TABULA¡ n2 a2 “LINE FEED& 2x0b( #² 0b& �VERTICAL V :x0c0 c0 HFORMV r$ ® d& æCARRIAGE RETURme. ‚ e, †SHIFT OUëf& f& IK 1ˆ1ˆõ DATA LINK ESCAP™1”1”öDEVICE CONTROL ON/ 
–1–/ 4TWOX1›1›/ 6HRE` 
¤1¤1 EFOURa 
¤1¤ŸNEGATIVE ‰ 1±1±ö SYNCHRONOUS IDLŽ 
¶1¶Z2e BLOCK” 
Ë1ËUCANCE
)19È1ÈY eMEDIUMM a* À–SUBSTITUTª 
Á1Áê
´1´ÆILE SEPARATOVdu ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2Æ!" »aEXCLAMC MAR•"- ¹LQUOT+ #+ µfNUMBERm-'$( Ð4 -> DOLLAR S°IGN
    '%'   õ#  0x0025 -> PERCENT S) &) 6) ‘AMPERSANDO 0"'"K   O 7& ‘POSTROPHE' -'(M 8' òLEFT PARENTHESIS- )- 9- ORIGH.  *. a. ‚ASTERISKS +% b% GPLUSó ,& c& RCOMMAH -" d" ³HYPHEN-MINUÄ .) e) ’FULL STOPO /& f& TSOLIDJ 0$  30$ ¢DIGIT ZEROK 1' 1' #ONˆ2& 2& #TWL 3& 3& 3HREN 4( 4( BFOUR› 5' sÂ 3FIVN 6' q' 2SIXM 7& q& 3EVEè8( r( EKP 9( m( $NI9:' fCCOLOq ;" cGSEMI& <& c—LESS-THANŽ=+ lXEQUAL¶>( k|GREATERV ?. sÃQUESTION MAR4@* 4y ’ERCIAL ATDA* |óLATIN CAPITAL LETTER IB3 ‰3 Bf C3 –3 C3 D3 ¡3 Ñ-'E3 ­3 ¹F3 ¹3 F™ G3 Æ3 G3 H3 Ñ3 H3 I3 Ü3 I3 J3 è3 J3 K3 ù3 [L3 1Lf M3 f M3 N3 3 ÅO3 3 -P3 5'3 ÷Q3 0QÌ R3 0wÐS'        #  ð0x0053 -> LATIN CAPITAL LETTER S
    'T'   1#  3 43 T3 U3 53 U3 V3 63 V3 W3 73 W3 X3 83 X3 Y3 93 Y3 Z3 a3 Z3 [3 b3 óEFT SQUARE BRACKEb$\\1 •c0 ãREVERSE SOLIDUÁ]+  , d, ?IGH] ^1 e1 óCIRCUMFLEX ACCEN‹ _. f. ‚LOW LINEà `%  60% YGRAVEN a) 1) ¡ESMALŸAZ b1 21 B1 c1 	b C1 d1 	1 D1 e1 ÿ	1 f1 ý	1 Fb g1 û	1 G1 h1 ù	1 H1 i1 ÷	1 I1 j1 õ	1 J1 k1 ó‹	1 K1 l1 ô L1 m1 ù1  M1 n1 ù1  N1 o1 üÄ O1 p1 7b  P1 q1 Q1 r1 R1 s1 Pt1 "u1 v1 w1 	x1 y1 z1 {1  ZCURLY|/ `VERTICÅ|}* À0x007d -> RIð
GHT CURLY BRACKET
    '~'   ò#  0x007e -> TILDE" B\x7f% " f" TDELET# Pu0452% #  80# ÷	CYRILLIC SMALL LETTER DJ6 06 16 oCAPITA8 (53n 28 	n Gn 	6 36 n 	8 (51n 48 	n #IO4Iu0405 55 m 7 (54l 67 	l ¸UKRAINIAN IQ	? 7? v A (55€ 8A 	€ (DZw 	6 96 w 	8 (56n a8 	n ×BYELORUSSIAN-º p	K bK ƒ M (57˜ cM 	˜ 'YI‚ 	5 d5 ‚ 7 (58l :	Ë	5 ’5 l 7 '59l 9¦L6 06 ¦
	8 (5an ¦Nn 	6 ¦
	8 (5bn ¦8TSH»	7 ¨

9 (5cp ªKÞ 	6 ¡
	8 (5en ˜wSHORT U—	: œ
< 5ûÖ9 )DZT	7 Œ

9 4¬ x	á 25 x7 4hx–HARD SIGNT2< 
>  '30Ìa†Ar 14 „
6 À0431'   #  0ð&x00a2 -> CYRILLIC SMALL LETTER BE
    '\u0411'   #  05 35 oCAPITA7 (467 47 	l 'TSm 26 56 m 	8 (34n 68 	n Dm 15 75 m 7 (35l 87 	l Il 	5 95 l 7 4£ a7 	l &EF²25 b5 l 7 (33Ø c7 	l (GHÙ 	6 d6 m 8 0xabl We8 óLEFT-POINTING DOUBLE ANGLE QUOTATION MARKë +xbF fF ORIGHG Hu259ä b0G LG F SHAû@2592·  b1( mMEDIUM) bjLDARK' 0P \ÒBOX DRAWINGS … ƒVERTICAL÷ 9u25âb]8 P AND ]A 8044�bh	ì&HA5 25 
eë7 (385
g	l Ik 14 
dk 6 9256ve	SP9255	pB 	± H2557å t9 ODOWNw d> {> -UP< H0439< 
�	_eSHORT /9041: ƒe< H2510v y	² ºï 	yco=  î Ði	êcƒ< ‰HORIZONT<cº c›A  º C 1C ·´Æ 0?cÁ| 3| º¿  	ãG ÀTAL
    '\u0ù(43a'   #  0x00c6 -> CYRILLIC SMALL LETTER KA
    '\u0415 75 oCAPITA7  92557 87 ôBOX DRAWINGS DOUBLE UP AND RIGHTt H2554© 9= ODOWN? (69? a? | ¦HORIZONTAL� (66B bB � D 0D cD �VERTICALÉ 5C dC ~ c~ e; 	~ H !xa‰4fH ÔCURRENCY SIGN4G043br !d0* ^Ei90415 15 ^7 3Þ )d27 	Ê&EM¡ 15 35 l 7 (3dØ 47 
l 15 55 l 7 (3el ¢O× 	4 ¡
6 (3fj  $PEk H25185 ˜LÇÔ7LEFÓ0}”; Q8y �¦FULL BLOCK  8¯ádsªLOWER HALF- 9041]£90447 Y7 	YE8258ÉdF?UPP™ 2b eI™ d 8044d eK	™ $ER290425 
Il 7 '41	eK
l Sl 	5 
Il 7 (42l 
K	l 'TEl 	5 
Il 7 (43l 
L	l Uk 	4 
Jk 6 3beKG'ZH× 16 F6 l 8 À  '\u0432'  õ& #  0x00eb -> CYRILLIC SMALL LETTER VE
    '\u0412'  5 c5 oCAPITA7 (4c7 d7 	l –SOFT SIGNs 2< e< s > H2116z f> hNUMEROf 0xad& Ù  f0( N WHYPHEŽ  4b* 6 f1( 6GYERUÅ 	7 27 Å 
9 (37p 39 	:Z¦	5 45 n 7 (48l 57 	l 7SHAÛ 	6 66 m 	8 4tJ78 	n Ù 24 84 l 6 (49Ø 96 	j 9SHCÚ 	8 a8 n : 4�\'CH¨ 26 ]
8 !xa6 ¼^xSECTIONåXu25a0	K´BLACK SQUARŠ x' R 6óO-BREAK SPACE
)

### Encoding Map

e �_map = {% _100:g000,K AFNULL  1  1  öSTART OF HEADING, 2, 2, FTEXT) 3) 3) 0ENDS 
' 4' 4' ¢RANSMISSIOË 5/ 5/ VQUIRYy 6# 6# ¢ACKNOWLEDGfJ 7' 7' (BE8  8  2ACK€ GE 9% 9% pHORIZON‹`TABULA
� a1 a1 –LINE FEED% b% b% ŸVERTICAL T c/ c/ KFORMT d% d% çCARRIAGE RETURde+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAP�1„1„÷DEVICE CONTROL ON. †1†. 5TWOP1‹1‹. 7HRE^ ”1”0 FFOUR_ ”1”žNEGATIVE zÀ0016: 0x0016 ,  ð#  SYNCHRONOUS IDLE
 ‚0x0017:  , ö
END OF TRANSMISSION BLOCK5 85 85 fCANCEL" 9" 9" W fMEDIUM) a) a) —SUBSTITUT¦ b& b& WESCAP" c" c" æFILE SEPARATORr d* d* _GROUP+ e+ e+ oRECORD, f, f, OUNIT*  "20* %20* FSPACÌ #21! 1! €EXCLAMATŒ6MAR‹#22, 2, OQUOT* 3* 3* µNUMBER SIGN#24' 4' \DOLLA' 5' 5' {PERCENTO 6( 6( –AMPERSANDt …&27% ‡POSTROPHv2vöLEFT PARENTHESISR €2€ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3k3k¥DIGIT ZEROI 3p3p& &ON~3i3i% 'TWJ d3d% 7HREL d3d— 6FOU©3c3cM 7FIVL a3a& 6SIXâ a3a% 6EVEü3b3b' E<N ]3]' (NI1V3VGCOLOn S3SKSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cNQUES‡4i4i ú•ERCIAL AT<4l4löLATIN CAPITAL LETTER 44y4y2 Bd †4†2 C2 ‘4‘2 ³4�4�2 ©4©4©2 F– ¶4¶2 G2 ð 8: 0x0048,     ó#  LATIN CAPITAL LETTER H
    0x0049: ,  2 I2 a2 a2 J2 b2 b2 K2 c2 c2 L2 d2 d2 M2 e2 e2 N2 f2 f2 O2 "502 /502 P2 12 12 Q2 22 22 R2 32 32 S2 42 42 T2 52 52 U2 62 62 V2 72 72 W2 82 82 X2  /592 Y2  5 Z2  5 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸5ORIGH[ 5÷CIRCUMFLEX ACCENˆ 5uOW LINEÛ 66\GRAVEL 6÷6÷ESMAL·AX õ6õ	0 B0 ó6ó	0 C0 ñ6ñ	0 D0 ï6ï	0 í6í	0 F` ë6ë	0 G0 é6é	0 6ç6ç	0 6å6å	0 6ã6ã™	0 6ä6äÉ	0 ÿ6é6é0  ý6é6é0  û6ì6ìÀ ù7ø7ø`  ÷7 7 
õ7 7 ÀALL LETTER RÃ
    0x0073: , ö	 #  LATIN SMALL LETTER S0 40 40 	T0 50 50 	U0 60 60 	V0 70 70 	W0 80 80 	X0 90 90 	Y0 a0 a0 	Z0 b0 b0 ÷EFT CURLY BRACKENc. c. ÖVERTICAL LINEW d) d) ORIGHX e/ e/ GTILDP f! f! VDELET" "a0" f" ×NO-BREAK SPAC* Cc* ÕCURRENCY SIGNÅ aÜfÅ {SECTION( Da¾ ñLEFT-POINTING DOUBLE ANGLE QUOTAE FMARKm 2%f0â ¦SOFT HYPHE” bl ½ Ym 2401-8àCYRILLIC CAPITÐ{$IO£ 34026 1£ 6 %DJp#40ã/837 G7 §8Zn ·UKRAINIAN Iw ú8:@ 'DZ7 87 ×BYELORUSSIAN-„ 1A8AL &YI6 #8ã6 /)9�L7 09�N7 ‡9A7TSH^A9ÕKo  9ÌeSHORT Ñ#40:9Ð'DZª 1PaPA»1XaNB1XeVñV6 Wa]GØ Wa‚€#41Ma�ƒ1Le�À  #  CYRILLIðC CAPITAL LETTER ZHE
    0x0417: @0f4, ¾ #  CYRILLI7 6 86 /b86 Ik 95 e5 gSHORT ; a; /c7; &KAq b6 /d16 &EL6 c6 36 M6 d6 56 N6 e6 Ø O5 f5 dk P³"206 /e26 %ERl #216 &ES6 26 6l T¢ 36 UUk 45 /abk &EF6 56 b¡ HP"266 aä'TSØ cc£ Cš2df¤ S¥ f/fan 8SHC9 d/9f9 †HARD SIGÉ2kf^7YER¿me;OFTu tf1Žs9>Y¨ t/e0Y13ta6  ESMAL’3 qaI 	3 BÓ 3o 	4 V4 ma• 	4 G“3m“ 	5 Di ka¥ 	4 I4 i.e9n	4 Ê3g¸ 
5 i db€ 	4 ‹3`b@ 	3 Ä3`c=Â3WdAÀð3c: 0x00d2,     #ð  CYRILLIC SMALL LETTER EM
    0x043d: @0d4, / #4 N4 e4 64 O3 f3 83 %PE4 "404 /e14 &ER4 14 34 S4 24 54 Tœ 34 74 Ug 43 /aa3 &EF4 54 b› &HA4 64 aÒ'TSÐ 75 /fb� 'CH5 85 ž SŸ 95 9j 8SHC7 a7 /9e7 †HARD SIG¯"4b; fH7YER¯c6 /edq KSOFTq TfKS/9cn Y¢ TY5 8I¼5 /80œ &DJÑ 5!/825 G5 #8Y·UKRAINIAN Is -8d'DZ5 .8–×BYELORUSSIAN-€ x5C8ÃI4 B8Ã%A9�L5 ?�N5 99-'TS599ÅKk  ¼fSHORT 59À%DZ¤ 3211ö%efžhNUMEROÉ3250‚cóBOX DRAWINGS LIGHT HORIZONTALØ32503b‡9  hVERTIC7 ;dÍ 7   DOWN AND R t 1­ À0bf,     #  ð%BOX DRAWINGS LIGHT DOWN AND LEFT
    0x2514: 0x00c0, O #  <  !UP: RI ; 8; /d9; 
u c: /c3: 	�VERTICAL{  2¶ /b4A 	� 2� 2@ 	2¥HORIZONTALý 3‚ /c1B 	8@ ‚ 5@ 		F  #50IdF DOUBLE : 1: /ba: 
� ø 5ø õr ;
3#57v bv 
> 	µ"5a= /c8= 
ty d< /bc< 	w 6d; *® #63} 4	B 
ƒ 6A c7ð #69C ð=A ±eB
	Å G  8N%dfG õUPPER HALF BLOCKl8ldz?LOW, �#KFULLR 9öîUSHADEy "92-bÝ{MEDIUM ( ÙGKDARK& aó f:ð<LACK SQUARE
}
""" Python Character Mapping Codec cp856 generated from 'MAPPãð/VENDORS/MISC/CP856.TXT' with6 cE P.py.
m ±#"

import  cs

###j ²APIs

class ($ .‰ 1):
'`def en ñ(self,input,errors='strict'):,  Ycreturno “.charmap_B = , ¦ing_table)o /deo -B 	o  o ú ÁIncrementalEç r ç  h Ã final=False*  Y.S4[0]¤� ÀalDecoder(coñdecs.IncrementalDecoder):
    def d ó
(self, input, final=False*  . preturn A ³cs.charmap_@ :  F �.errors, óing_table)[0]

class StreamWriter(Codec,U  z Jpass9 ORead9  	9 ð### encodings module API

ý Ãgetregentry(7 
æ ž QInfo(1 Õname='cp856', d !e=0 2().     i¢: 'r=µEÀ /er/ J 	/ ä/ spr7=c*# w“#  # @)


J[ Ping TÔ DZä2 = '`'\x00'-ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™GQUOT) À    '#'     ð   #  0x23 -> NUMBER SIGN
    '$'   & 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 0"'"m   q 7$ ‘POSTROPHE% +'(I 8% òLEFT PARENTHESIS+ )+ 9+ ORIGH,  *, A, ‚ASTERISKO +# B# GPLUSç ,$ C$ RCOMMAD -  D  ³HYPHEN-MINUº .' E' ’FULL STOPK /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% #ONt2$ 2$ #TWH 3$ Tm CTHREJ 4& T“ BFOUR“ 5% SK 3FIVJ 6% Q% 2SIXI 7$ Q$ 3EVEè8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SÃQUESTION MAR
@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 �O1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 ÀL LETTER S
 s   'T'  ð#  0x54 -> LATIN CAPITAL LETTER T
) +'U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 óEFT SQUARE BRACKET$\\/ …C. ò REVERSE SOLIDUSX ])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINE~ `#  60# YGRAVEJ a' 1' TESMALRAV b/ 2/ B/ c/ 3/ C/ d/ á	� D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ Ó*	/ K/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðÍv/ ðËw/ ðÉx/ ðÇy/ ðÅz/ ðÃ{/ ð ÃZCURLYÂ|- î`VERTICBB}( çRÀV  ~. æCTILD~3\x7�7×TDELET! Pu05d0F ! ð 80 -> HEBREW LEñTTER ALEF
    '\u05d1'   #  0x81 -> HEBREW LE- 7BET, 2, 2, WGIMEL. 3. 3. 9DAL\ 4. 4. 'HEY 5+ 5+ 7VAV, 6, 6, WZAYIN. 7. 7. H± 8, 8, T, 9, 9, 7YOD„ a, A, ˆFINAL KAÃb2 B2 
, c, C, HLAMEŒ d. D. Œ 7MEM¾ e2 E2 
, f, F, ^ 'NU %e02 .902 
, Ù9Ù fSAMEKH¹ eÜ9Ü 
(eÛ9Û º P³eÞ9Þ 	+ Þ9Þ \ WTSADI½ æ9æ . æ9æ 'QO\eæ9æ 8RESDç9ç (SHleè9è TÆ6fffV9âuUNDEFIN¬!xa’É9Ú•POUND SIGA
I ÑI dI ÃïMULTIPLICATIONR ÅR uv A·$ ¯$ ¤$ ›$ Ž$ ‡$ w$ m$ e$ !xa–A\™REGISTEREä!xaá* Y8NOTµ!xbÖ# P±VULGAR FRACätONE HAL	)xbV _3 tQUARTER™
úpa½� pòLEFT-POINTING DOUBLE ANGLE QUOT†CMARKh )xbD †BRIGHE ÀTING DOUBLE ÷+ANGLE QUOTATION MARK
    '\u2591'   #  0xB0 -> LIGHT SHADE& 2& 1& mMEDIUM' 3' 2' LDARK% 0L 3% ÃBOX DRAWINGS †VERTICAL‚ &24[ 46 ” AND LEFT? Ffffe? 5? ŸUNDEFINED$ 6$ 7$ 0xa9j S8$ RCOPYRW4IGNq 7256/9) 	
tDOUBLE Õ 7255¼A@ w  57¢ óB7 ODOWNs d< C< ,UP: !xaõD: fCENT S0xa5\ $ E$ 8YEN# Pu2510% ½ F# 	4½¼ 1CCë;  » ®23: ÿ: ‰HORIZONT¼c´ C?  ´ A 1A 3{À 05C=x 3x 6¹  	 E 	{CWCWVu255aFW	� .À5Ài‚=6ÑrCfx  F2566¸ oB ¿u	ˆÃ 5A |;z ‘9 	z F !xa}×C´‰CURRENCYÜ	*D¡¥D‹$ p$ S$ Sø
‘ 8% $ $$ 
d
m 
$ m ð2518'   #  0xD9 ->ÿ* BOX DRAWINGS LIGHT UP AND LEFT
    '\u250c'   #  0xDA ->9 ADOWN; RH < &88< B< §FULL BLOCK% 4% C% ©LOWER HALF+ 0xa6) Œ D+ ¤BROKEN BARP @fffe' ± E% ”UNDEFINED$ F2580$ F$ /PPt uO !E0+ O 
$ 1$ 2$ 3$ 4$ 5$ 0xb5L E6$ ¤MICRO SIGN(
Ù 7% L
$ 8$ 9$ il Q$ P$ I$ 8xaf!HTMACRO!xb·BE´ACUTE ACCENA7xadH FA¦SOFT HYPHEM 1& C©PLUS-MINUS”@2017, àFIó DOUBLE LOW LINE¾!xb¡ FOõVULGAR FRACTION THREE QUARTERS9 hFdxPILCROWŠ !xaˆ ` g"SEX E)xf' jPDIVIS€ ( b,O muCEDILLA˜ µ" k0DEGÂ H aH m†DIAERESIâ 	” m•MIDDLE DOº b9ho n×SUPERSCRIPT Oj3* t* fÅ 2, |	, #WO* Au25añ ê‚pBLACK S±ç% § ˆóNO-BREAK SPACE
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð# generated from 'VENDORS/MICSFT/PC/CP857.TXT' with2 } P.py.
c ±#"

import  sÀ ` ÁAPIs

class  ($ . 1):
?Adef á ñe(self,input,errors='strict'):,  êcreturno B = , †ing_map)m *m *B 	m   m ¤)ø ±IncrementalÕ$er å Àncode(self, óinput, final=False):
  ð	return codecs.charmap_en (: Áself.errors, ðing_map)[0]

class IncrementalDe<  r( >cs. ~ Qdef d, (b ", n ¨ @ :  F ¨   ¨ Xtableª àStreamWriter(C÷ ,ª  ¤ Dpassã  ORead9  	9 D### 2às module API

ý Ãgetregentry(7 
Žž UInfo(¯Õname='cp857', d !e=0 2().     i¼: 'r=µEr/ J 	/ þ/ spr7=D# w“#  # 0)

IZ ping MapA0codáTmap =Àñmake_identity_dict(range(256))
° 5 ‘.update({F€0x0080:  1c7,ö#  LATIN CAPITAL LETTER C WITH CEDILLA? 1? +fc? ESMAL= U= –DIAERESIS? 2? /e9? 	E? VACUTE; 3; 2; 	A; ¦CIRCUMFLEX@ 4@ 4@ º  5? 0? GGRAVº 6; 5; ˆRING ABO@ 7@ ³	t±8= a} 	r79@ b@ 7 a? 8? 7b; f; 	Iñz  c? e? ù d@ ?131@ 	–DOTLESS Ihe8 ,0chaª¹  fA /A 1 9äfB ö
h9â/e6ø –IGATURE Aá9Öc3 p 5 Ðf(	ÖOß  ð 94: 0x00f6,    ñ$ #  LATIN SMALL LETTER O WITH DIAERESIS
    0x0095: 0f2, ? VGRAVE; 6; b; 	Uz ¦CIRCUMFLEX@ 7@ 9@ { 8; ;130; eCAPITA÷ I} xDOT ABO¼ 9A ?0d6A 8aA cA ÿ y bA +f8A ¸WSTROKzc< %a3< ¦POUND SIGN`d& db %ä d e> 515ed X> ScvCEDILLA} f? f? 	ß = !a0= ?0e1= 	Az FACUT#a1; d; 	; 2; fVò 	³ .; 3; av 	; 4; ì 
Nì GTILDì ¼d; £= ¾/11àGz 7BRE?a»/11Þ
; »&0b; õINVERTED QUESTION MARKKa¬aª ›REGISTEREóa–a–:NOTayb"±VULGAR FRAC †ONE HALFƒ qbX 4 vQUARTER7 ‚a¡ì qEXCLAMAp 
ï y'0aWÿEFT-POINTING DOUBLE ANGLE QUOTE &0bE ORIGHF bˆ6259À LF G SHAˆbt6259DlMEDIUM( a6259aLDARK& L6250N ÒBOX DRAWINGS ‚  2EICALlbHE2524ƒ7 – AND LEFT@ Mcì HMvbM&0c´ ;=  bR/0cÒ 	À0b8: 0x00a9,  ð#  COPYRIGHT SIGN
 ð 0x00b9: 0x2563, ö #  BOX DRAWINGS DOUBLE VERTICAL AND LEFTA aA /51A 8 b8 78 
ODOWNu  c= d= 
/UP;  d; E00a2; <CENe% 5% ;YEN:f$ E2510$ 	:LmÀ #c0< 4< 	¿ ¶8"c1; 3; ¦HORIZONTAL@ 2@ /2c{ 	· B 3B 1B 
	2Ã 4A 0:
z 59 3z F 6F 600eóöLATIN SMALL LETTER A WITH TILDE=7; c; oCAPITA= 8= O255azkö§5ö< ·q¤/69z 3­/66A 
 C ³6õÂ 7	º?255B | Ï?2568| G ò600a…ŠCURRENCYdß600bêõMASCULINE ORDINAL INDICATOR^dÛ600a7 _FEMIN6 Ñ600c6 Ï”EÑ¦CIRCUMFLEXx ÑE00cbÞB 	–DIAERESISA ÑO00c8A FGRAVT‚d5: None;  ‚–UNDEFINEDb ´cñ£ Iå GACUTb ¶d ?#  = 	"»B00cf¦ B " À1"- û	`d¼0¼gùÀ
    0x00db:� 0x2588,  à#  FULL BLOCK
 r0x00dc:& 4& ¬LOWER HALF, d, E00a6, ¦BROKEN BARR e& %cc& öLATIN CAPITAL LETTER I WITH GRAVE= f= E2580= ?UPP�  e0, E00d3, i Oi FACUTi #e1= f= ESMAL¤ uSHARP SŸ #e26 .Ü s ¦CIRCUMFLEXB 3B 2x B 
"e4= +f5= 	µ ; GTILDð 5; d; x = 6= b= ¦MICRO SIGNÛ r7: Noneœ æ  #  UNDEFINED% 8K "d7' û#  MULTIPLICATIONT 9/ a/ äUäa= b= ®bB 9B ®/fc
Yº ‡DIAERESIlHa? WMACROq-600bŽåu ACCENTtf)%adÆ ¦SOFT HYPHEO f%b1' ªPLUS-MINUS—/f2ëfëbá#  VULGAR FRACìÖTHREE QUARTERû fèbi{PILCROW‡ ÕaM"SEZ 	šfÀf( ]DIVISo"f7ðb4vCEDILLAMÁb¢0DEGÇ 
s ¹aJ ãf¡b˜ —MIDDLE DO¿…b…æSUPERSCRIPT ONæfÎ600b+ oÊ  b‹	- &WO+ Œ625aõ pBLACK S¼€ ’( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (} `'\x00'­ O ±¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- 2TEXx x 3* 3* 0ENDU 	( 4( 4( pRANSMISj‚ 50 50 UQUIRY$ 6$ 6$ ¢ACKNOWLEDGq ¤ 7( ð 7 -> BELL
    '`\x08'  ð#  0x0008 -> BACKSPACE
 2'\t$ $  & 9& óHORIZONTAL TABULATION2 n2 a2 “LINE FEED& 2x0b( X b& oVERTICV :x0c0 c0 HFORMV r$ ® d& äCARRIAGE RETUR¨ 2x0e. ‚ e, •SHIFT OUT¨ f& f& IK )10%  10% ô DATA LINK ESCAPR:x11- 1- öEVICE CONTROL ON/ 2/ 2/  4TWO° *13/ 3/ 6HRE` 41 41  EFOURa 50 50 öNEGATIVE ACKNOWLEDGa 61 ö6 -> SYNCHRONOUS IDL- 7- 7- õ
END OF TRANSMISSION BLOCK” 
Ë1ËeCANCEL# 9Y ÈY eMEDIUM* a* À–SUBSTITUTª 
Á1Áê
´1´ÆILE SEPARATOVdu ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2Æ!" »aEXCLAMC MAR•"- ¹LQUOT+ #+ µ£NUMBER SIGh$( ¬HOLLA( %( ¤wPERCENTQ &) œ‚AMPERSAN¬0"'"  *2•“APOSTROPH(M †òLEFT PARENTHESISf)- �ORIGH.  *. ”sASTERISq+% ’GPLUSó ,& •RCOMMA› -" Œ³HYPHEN-MINUÄ .) ‰’FULL STOPO /& ‚TSOLIDJ >{3{“DIGIT ZERÝ8' €' 2/& y& )&& t&  ( t› ' sO 3FIV$
' q' 2SIX3& q& 3EVEõ( r( EKP úà   #  0x0039 -ð> DIGIT NINE
    ':'   ò#  0x003a -> COLON" ;" b" GSEMI& <& c& ÓLESS-THAN SIGQ =+ d+ gEQUALS( >( e( |GREATERV ?. f. ÒQUESTION MARKÑ @*  40* ÒCOMMERCIAL AT* A* 1* òLATIN CAPITAL LETTER A3 B3 23 B3 C3 33 C3 D3 43 D3 E3 53 F3 63 Ff G3 73 G3 H3 83 H3 I3 93 I3 J3 èËJ3 K3 ù3 [L3 1Lf M3 f M3 N3 3 tO3 3 Of P3 5'3 P3 Q3 0Q3 R3 0R3 S3 0S3 T3 0üU3 0Uf V3 0V3 W3 0W3 X3 0X3 Y3 0Y3 Z3 0Z3 [3 0óEFT SQUARE BRACKEb$\\1 {5-ãREVERSE SOLIDUÁ]+  , &ORIGH] ^1 $óCIRCUMFLEX ACCEN‹ _. EOW L+`% 6YGRAVEN a) LSMAL5b1 	1 3c1 	1 àC
    'd'     ð   #  0x0064 -> LATIN SMALL LETTER D
    'e'   1 51 E1 f1 61 F1 g1 71 G1 h1 81 H1 i1 91 I1 j1 a1 J1 k1 b1 K1 l1 c1 L1 m1 d1 M1 n1 e1 N1 o1 f1 O1 p1 /701 P1 q1 11 Q1 r1 21 R1 s1 31 S1 t1 T1 u1 U1 v1 V1 w1 W1 x1 X1 y1 Y1 z1 Z1 {1 óEFT CURLY BRACKEU|/ ÃVERTICAL LIN^}* ORIGHZ ~0 CTILDR 3\x7³á7÷UDELET# "c7H # 8éPCAPIT¤ 7âC WITH CEDILLAJ\xfc@ øU> ƒDIAERESI¥J\xe9@ E@ 6ACU¼ *e2< A< “CIRCUMFLE-J\xe4A "A ½ 0@ 1@ EGRAVy*e5< << ‡RING ABOA ºL¸*ea Yx< bA iA <8@ x@ 
<
ØÀ8b -> LATIN ðSMALL LETTER I WITH DIAERESIS
    '\xee'
 ÿ #  0x008c -> LATIN @ £CIRCUMFLEXA Pu0131C A dA “DOTLESS I9 0xc47  z e9 eCAPITA¼ A¼ *c5B fB ¥RING ABOVE… 9C /90C E… EACUT> *e6> 1> =•IGATURE A4 c4 24 ÷ 6 f-&936 j çO¦ §+xfw 4A (*f2ë 5@ 6GRAe*fb< 6< U½ ¦7A }   0  &98< p<#*OT$d;9B ~= dc‚ ë/9aB B *f8B bB  USTROKs*a3= ä¤POUND SIGNdd Ê*è 	f Au015LiÐSècEDILLA  @ f¨ @ Î	ã > !xe…caÉ	> L
Çdx < Ç	!	< f\aÏ	x 3
< ax Õ
< ð ÐNlETILDd< Ìé>  Hu011èaÎ> G| 5BRE > æaË<  !xb: ¨ËóINVERTED QUESTION MARKU!xa« 3 ¼šREGISTERE a¦a¦9NOT%b,‰±VULGAR FRAC‚ „ONE HALF† bZ �5 tQUARTER8 a©’ñ qEXCLAMAr ô À '\xab'     ð2#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
    '\xbb'
  F fF ORIGHG „u2591'  G  b0G LG c SHADEo  ( 2( 1( mMEDIUM) 3) 2) LDARK' 0P 3' ÒBOX DRAWINGS … †VERTICALˆ (24_ 48 A AND]A !xcï ñ 5A ôLATIN CAPITAL LETTER A WITH ACUT!xcµ > 6> ¥CIRCUMFLEX� 0À C 7C EGRAV� *a9> 8> ACOPYûS SIGNi Iu256Š9+ 	cgd,Au255.d/baB {  57¨ 9 b9 ODOWNw d> c> ,UP< +xa¡d< HCENT0xa5` „ƒ8YEN% Au251«Å b	@£Ä 1¨cX=  Ã ¾>3< l< ‰HORIZONT%cá º c„A  º C 1C  ‰Æ 0?cª| 3| £¿  	¸G !xeþåc¬LSMALè5TILï+xc< ¥>  8a€¥	Á zþ5þ·¾w6#ü´| 8 86¾ ½D 	ýÃ	ÄÉ 5C ÊE~ 	Aß; 	~ H !xa‰BˆCURRENCY,!xbð* dïðMASCULINE ORDINAL INDICATOR
   € '\xaa'  ð#  0x00d1 -> FEMININE ORDINAL INDICATOR
, K'\xc7 27 õLATIN CAPITAL LETTER E WITH CIRCUMFLEXC bz 3C •DIAERESISB 8B 4B SGRAVE> Pufffe@ ú 5> “UNDEFINED& 0xcd$ $  & 6& é Ié DACUTd !xcb > 7> ' f� 8C 'Au251)Ã 9B óBOX DRAWINGS LIGHT UP AND LEFTþ Pu250c ; a; ADOWN= RJ > 8y b> §FULL BLOCK' 4e c' ©LOWER HALF- 0xa6+ Rd- –BROKEN BA · ' e' ·		@2580g ÷ f> ?UPP’  d3+ k  e0- k O" dße€> ESMALGeSHARP ûd2u €u Y*d2¸ €C #:xf5> |	¸ < STILDEñ+xd< zô => b> ’£MICRO SIGNe ße{ß*d7Ç ^pMULTIPLò8IONV *xdøeL» Uí
óeO> 	¶ 9± TC 		¶eek·	¶Ì	< fªzz 	< Yù ‡+xa@ “TMACRO´+xbÖxQd ACCEN˜*xa–ft¦SOFT HYPHEQ 1.f^¨PLUS-MINUSÛ1fS1bÒf6ÀVULGAR FRACT2ÕTHREE QUARTER´b»f3xPILCROWŠ *xa•f "SE\ ä+xf) PDIVIS† * b‰ð   #  0x00f7 -> ðCEDILLA
    '\xb0'
 ô
 #  0x00f8 -> DEGREE SIGN( *a8( 9( „IAERESIS& *b7& a& ¥MIDDLE DOT' 9' b' õ SUPERSCRIPT ONE, 3, c, FTHRE. 2. d. #WOZ Au25aý û e, µBLACK SQUARU '  $f) óNO-BREAK SPACE
)

### Encoding Map

e �_map = {z  g100:o400,~FNULL  1  1  öSTART OF HEADING, 2, 2, 2TEXuu 3) 3) 0ENDS 
' 4' 4' ¢RANSMISSIOV 5/ 5/ VQUIRY¢ 6# 6# ¢ACKNOWLEDGfJ 7' 7' (BE8  8  2ACK€ GE 9% 9% ùHORIZONTAL TABULATÀ a1 a1 –LINE FEEDÂ b% b% oVERTICT c/ c/ KFORMT d% d% çCARRIAGE RETURde+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAP�1„1„åDEVICE CONTROL¦ x1†1†. Tz. ‹1‹. Ö0 ”1”0 EFOUR¯1”1”ŸNEGATIVE z1¡1¡÷ SYNCHRONOUS IDL¦1¦Ff BLOCK‘ »1»VCANCEò1¸1¸W fMEDIUMK °1°—SUBSTITUT¦ ±1±ß¤1¤ÇILE SEPARATON©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶
õ2«2«aEXCLAMëF MAR‹2©2©OQUOT* ¥2¥fNUMBER œ2œ2œLOLLA' ”2”{PERCENTO Œ2Œ AM&AN�2…2…–APOSTROPH2vÐ28,     #  LEóFT PARENTHESIS
    0x0029: , � #  RIGH- a- a- †ASTERISKQ b$ b$ –PLUS SIGN% c% c% VCOMMA! d! d! ·HYPHEN-MINU¿ e( e( –FULL STOPM f% f% WSOLIDH "30# %30# ¥DIGIT ZEROI #31& 1& 6ONE% 2% 2% 'TWJ 3% 3% 7HREL 4' 4' FFOURr 5& 5& 'IVL 6& 6& 6SIXK 7% 7% 6EVEÀ#38' 8' E<N ]+39' (NI1V3VGCOLOn S3SKSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cÆQUESTION MAR4i4i ú•ERCIAL AT<4l4löLATIN CAPITAL LETTER 44y4y2 Bd †4†2 C2 ‘4‘2 D2 �4�2 ©4©4©2 Fd ¶4¶2 G2 Á4Á2 H2 Ì4Ì2 I2 Ø4Ø2 J2 é4é2 Oö4ö&Ld þ4þd M2 	4	2 ±442 552 Õ5 5 QÈ 5 5 Y5 5 �5 5 è5 5 UÈ  5 àV
    0x0057: €0x0057,  ð#  LATIN CAPITAL LETTER W
 * 28:  2 X2 92 92 Y2 a2 a2 Z2 b2 b2 öEFT SQUARE BRACKET/ c/ c/ ö REVERSE SOLIDUS+ d+ d+ ?IGH[ e0 e0 ÷CIRCUMFLEX ACCENˆ f- f- …LOW LINE� "60$ %60$ \GRAVEL #61( 1( ËESMALÉAX 20 20 	B0 30 30 	C0 40 40 	D0 50 50 	60 60 	F` 70 ë	 G0 é/68` 	H0 ç6ç	` I0 å6å	0 J0 ã6ã«	0 K0 ä6ä L0 é6é0  M0 é6é0  N0 ì6ìÀ O0 7ø7ø`  P0  7 
Q0  7 
R0  7 
97 7 
7 7 
U�  7 
V0  7 
é7 7 
ç7 7 
å7 7 
ã7 7  ã]CURLYâ7þ7þ`VERTICÔ_7÷7÷RàX ö7öFTILD—7ç7çVDELET" aÙf" ×NO-BREAK SPAC* Óaœ  INÇ öED EXCLAMATION MARøaØb5  tF SIG�Àa3: 0x009c, ð    #  POUND SIGN
 €0x00a4:  0cf,  & ‹CURRENCY) 5) %be) ;YEN$ 6$ %dd$ ¦BROKEN BARs 7& %f5& lSECTION 8( 9( –DIAERESISM 9% %b8% ›COPYRIGHT� a* %d1* ÷
FEMININE ORDINAL INDICATO­ b6 a÷ ñLEFT-POINTING DOUBLE ANGLE QUOTAÊ FMARK¥ cE a{ ,NOŸ d$ %f0$ §SOFT HYPHE°e' aœREGISTEREÛf+ e» VMACROM "b0" f=jDEGREE:#b1' :«PLUS-MINUS+ 2+ õ SUPERSCRIPT TWO#b3+ cñ + FHREE- §e§ÆACUTE ACCENT( ¦%e6U [MICRO¦ ¨%f4& {PILCROW( ª¸—MIDDLE DOt ¨7N vCEDILLA— ¦%fb# 'ONê §oMASCUL¨b¨!©b©”¢VULGAR FRA£ ONçFARTE%b¼aß 7 FHALFÉ%f34 T1 QUm óbØa¶ÞINVERTED QUES€cèb¢öLATIN CAPITAL LETTER A WITH GRAV‘cþb¯= 	—æ cb�= 	¦CIRCUMFLEXB 'c¼ GTILD¼ 78 	_cP8WA 	R8ABO?l%92èB —IGATURE A¸ y85 ±C±oc’dà? E? ð¬9| = ð¾î ¹ = ðÉd¼ 	³ ÄÀde,     #  LñATIN CAPITAL LETTER I WITH GRAVE
    0x00cd: 0d6, _ #  L= GACUT= e= 7= ¦CIRCUMFLEX fB 8B •DIAERESISA "d1A /a5A Ný FTILDÀ "d2= /e3= O= 
:#d3= 0= 
:#d4= 2= : #d5B ù ¼ ù 6= /99 w 7A e¸öMULTIPLICATION SIGN¦8/ /9dp WSTROK§9> /eb> U§a= ë = §b= az §cB 9B j "+e1ƒ ESMALÜfSHARP "e0w 8	6 A1eRØ; 
/eP8P; - eSc�@ 
ÒeQ/84'	ñ feN8z ‡RING ABOGeQ¦–IGATURE AÖeC8=	í C£uCEDILLAQeQ8W	= E= 
¸eN8{; àL8ö-; àO8Œ@ ¥ L/ecä	çeça 	"õ å8v õ Á8¾	õ ¶ õ f�Ù
ðN WITH TILDE
   � 0x00f2: @95,  ð#  LATIN SMALL LETTER O WITH GRAVE
' ; 3; /a2; GACUT; 4; /93; ¦CIRCUMFLEX{ 5@ /e4@ GTILD{ 6; 9; –DIAERESISz 7? %f6z ÖDIVISION SIGN) 8) %9b) YWSTROK¤ 9< 7< 	U•a; aZ
; •b; 9Û ²  ; •c@ /81¶ Z f? /ed? 	Yõ ? 211e? a¾ eCAPITAËGA 6BREË#11| aq
; "30x +98· x Ix wDOT ABO| "31A 8ø 
”DOTLESS Ia#15ñ /9ey Sy vCEDILLA? ó +9f? 	ù= 3250õ cEóBOX DRAWINGS LIGHT HORIZONTALv 3250obŸ9  hVERTIC7 [%da­ 7   DOWN AND R t 1­ bê = 	FLEFT< ©/c0y 	/UPw /d9; 
u î c%{  2¶ bŸ
fA 	� 2� Ú2	è 3‚ cB  8@ ‚ —@  	Â F  5úc[	F oDOUBLE¨5•bq: � 05ø õ8 ª5]b4° > 	µ5úc‰= ÀE UP AND RIGðHT
    0x255d: 0x00bc, ö #  BOX DRAWINGS DOUBLE UP AND LEF; "60; c; �VERTICALA 7RIG} "63B /b9} 
	B 
ƒ 6A /cbA 
ADOWN ¥HORIZONTAL#69C aC 
A cA eA 
	Å G  8N%dfG õUPPER HALF BLOCK´ "84s dz?LOW, 8, #KFULLR "91& %b0~ L«e SHADEy #92' 1' lMEDIUM( Ù2( KDARK& aó f:ðBLACK SQUARE
}
""" Python Character Mapping Codec for CP858, modified from cp850.
D  

import c3 cs

###? ²APIs

class ($ .^ 1):
ü `def en ñ(self,input,errors='strict'):,  Gcreturno “.charmap_B = , †ing_map)m /dem -B 	m   m dtable)ø ÁIncrementalEå r å  h Ã final=False*  W.Q
?[0]¨  D ¨  ~  ¨ ö e¹¨ !@ â ¨  Oª ÑStreamWriter(J,Ð8cs. ¤ 5pasƒ ORead9  	9  ÌFs�ule API

ý Ãgetregentry(7 
�ž UInfo(¾Õname='cp858', d !e=0 2().     id: .r=]/ J 	/ ä/ spr7=D# w“#  # )Z  ]0MapA0codáTmap =Ïñmake_identity_dict(range(256))
° 5 ‘.update({F hç%c7öLATIN CAPITAL LETTER C WITH CEDILLA? ¨fú? ESMAL= U= ð
DIAERESIS
    0x0082: 0x0P0e9,  ð#  LATIN SMALL LETTER E WITH ACUTE
' €0x0083:  /e2; 	A; ¦CIRCUMFLEX@ 4@ 4@ –DIAERESIS? 5? 0? GGRAVº 6; 5; ˆRING ABO@ 7@ 7@ 	Cú fEDILLA¸ 8= a= 	r79@ b@ 7 a? 8? 7b; f; 	I÷ z  c? e? ù d@ c@ º e; ckeCAPITAè­¼  fA 2A 4 #90B iB ù
k"91= /e6û –IGATURE Aä"923 c3 p 5 Óf(	Oâ£ 9Ófu @ f9ÓfR
 
â9Óf
Uº ÓfŸ	º @ { Ñf
Y{ õ  Ðd4©„÷ A  ÒdA ½ A  Øf
€ WSTROKgÕ%a3š¥POUND SIGNô9»db £ d ¾doëMULTIPLICATIONm ¬/19F
F�EHOOK§ a¤%e1Í  %
¢a¢d; 	; ªfCv  ; °L
ù; Ð4: 0x00f1,   ñ!  #  LATIN SMALL LETTER N WITH TILDE
    0x00a5: 0d1, ; oCAPITA= 6= %aa= öFEMININE ORDINAL INDICATORs 76 b6 oMASCUL7 87 fm öINVERTED QUESTION MARKi 92 %ae2 ö REGISTERED SIGN+ a+ c+ ;NOT$ b$ %bd$ ±VULGAR FRAC †ONE HALFX c4 X 4 gQUARTE#d7 a–ì qEXCLAMAp 
ï e5 b  ÿLEFT-POINTING DOUBLE ANGLE QUOTE fE bE ORIGHF  b0F 6259À LF G SHA}#b1' 2² lMEDIUM( 2( 3( LDARK& 3& 0N ÒBOX DRAWINGS ‚  2EICAL£"b47 %24] 7 P AND W@ Bcì }BAFACUTbBc´ º= ¦CIRCUMFLEX N%c0¿ B 	GGRAV T%a9= ACOPYò
ýbL6256ƒ	&\^' b6255'A 	à vE2557£ 8 ODOWNu  6255³= /UP;  ƒš;CENbs5� ;YEN:R6251¡	„ —À cH1œ
¿ ¶8c\3; ‡HORIZONTct2º· 	B �1B 
	2Ã š0:
z “?253z F œeóZ	V×TVc•; ×= •6255 	zk	öÀ    0x00c9: €0x2554,  ð#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
* €0x00ca: > /69> 
!UP< ¦HORIZONTALA bA 6A 
 C cC 0C 
�VERTICALŠ Æ dB 5B | e: /6c| G fG 600a…ÕCURRENCY SIGN/"d0) fª öLATIN SMALL LETTER ETH2 12 d2 oCAPITA4 24 %caÖ f 4 ö WITH CIRCUMFLEXv 3B bB –DIAERESISA 4A 8A VGRAVE= 5= 620a–KEUROK6% O00cdb Iå GACUTb 7= e= "8B fB " 9A 6251"	¹L© z6LEFµdµ0:  s
,d±8w ¦FULL BLOCK‚”8Ñ¬LOWER HALF, ~700a–ROKEN BARR j600cµ ”¯`6258?UPP� ec/d3™OenÖ	 fSHARP íepd.Öps N ep/d2µ 
el+f5= 	µ } FTILDej<00d; º = ‚b= <MIC¨ekfk	ž FTHOR'e]d4 — 6 R?00d÷UúU?00dò= ÄZ600dLâB Äq<00fÎ	&Yº ÀE
    0x00ed : 0x00dd,  ð#  LATIN CAPITAL LETTER Y WITH ACUTE
)  5 "ee= %af= fMACRON" f" %b4" C u ACCENT( "f0( a‡ ¦SOFT HYPHEO "f1' %b1O çPLUS-MINUS SIG+ 2+ E2017+ æDOUBLE LOW LINÇ  f3+ E00be+ öVULGAR FRACTION THREE QUARTERS· 4: 6: {PILCROW� 5( a� "SEZ 
µ 6( f( PDIVISƒ 
) 7) %b8y vCEDILLAœ 8# 0# 0DEGÇ 
J 9' aJ ‡DIAERESIè a% b˜ —MIDDLE DOÅb& 9r ØSUPERSCRIPT Osc+ 3+ oÊ d- 2- &WO+ ’625aõ pBLACK S¼ó˜( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (} `'\x00'1 # R¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- 2TEXx x 3* 3* 0ENDU 	( 4( 4( pRANSMISj‚ 50 50 UQUIRY$ 6$ 6$ ¢ACKNOWLEDGq ¤ 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  c9& pHORIZON­@TABU¿‚<'\n2 a2  þU FEEDÇ b( »b& �VERTICAL V :x0c0 c0 HFORMV r$ ® d& âCARRIAGE RETUR° !e. ‚ e, †SHIFT OUëf& f& IK 1ˆ1ˆ@DATAöuK ESCAP™1”1”åDEVICE CONTROL¹J'\x1–1–/ T� / 
›1›/  [‰1¤1¤1 EFOUR0 
¤1¤ŸNEGATIVE ‰ 1±1±ö SYNCHRONOUS IDL
¶1¶Z2e BLOCK” 
Ë1ËUCANCE
)19È1ÈY eMEDIUMM a* ÀtSUBSTIT‹ i
Á1Áê´Àx001c -> FILðE SEPARATOR
    '\x1d'
 ÿ #  0x001d -> GROUP,  e, e, oRECORD-  f- f- LUNIT+  ( $  „  20+ RSPACE¦ !" 1" òEXCLAMATION MARK- "- 2- LQUOT+ #+ 3+ ²NUMBER SIGNS $( 4( XDOLLA( %( 5( wPERCENTQ &) 6) ‘AMPERSANDw 1"'"š7& ƒPOSTROPH(M 8' ñLEFT PARENTHESIST -')- 9- ORIGH.  *. a. sASTERISq+% b% GPLUSó ,& c& RCOMMA› -" Œ³HYPHEN-MINUÄ .) ‰’FULL STOPO /& ‚TSOLIDJ 0$ 3{¢DIGIT ZEROK 1' €' #ONˆ2& y& #TWL 3& t& 3HREN 4( t› 3FOUÁ5' sO 3FIVN 6' q' 2SIXè 7& q& 3EVE8( r( EKP 9( m( $NI9:' fCCOLOq ;" cGSEMI& <& c—LESS-THANŽ=+ lXEQUAL¶>( k|GREATERV ?. sKQUES¥@* 4y ’ERCIAL ATDA* |óLATIN CAPITAL LETTER IB3 ‰3 Bf C3 –3 C3 D3 ¡3 Ñ-'E3 ­3 ¹F3 ¹3 F™ G3 Æ3 G3 H3 Ñ3 H3 I3 Ü3 I3 J3 è3 J3 K3 ù3 �L3 À04c -> LATINð
 CAPITAL LETTER L
    'M'   ü#  0x004d -> LATIN3 M3 N3 e3 N3 O3 f3 O3 P3 /503 P3 Q3 13 Q3 R3 23 R3 S3 33 S3 T3 43 T3 U3 53 U3 V3 63 V3 W3 73 W3 X3 83 X3 Y3 93 Y3 Z3 a3 Z3 [3 b3 óEFT SQUARE BRACKEb$\\1 ú 5c0 ãREVERSE SOLIDUÁ]+  , &ORIGH] ^1 $óCIRCUMFLEX ACCEN‹ _. rOW LINEà `% 6YGRAVEN a) ESMALAZ b1 	1 B1 c1 	1 C1 d1 	1 D1 e1 ÿ	1 f1 ý	1 Fb g1 û	1 G1 h1 ù	1 H1 i1 ÷	1 I1 j1 õ	1 J1 k1 ó½	1 K1 l1 ôî	1 m1 ù1  n1 ù1  o1 üÄ p1 7b  q1 r1 s1 Pt1 "u1 ðv'        #  0x00ð76 -> LATIN SMALL LETTER V
    'w'   Ÿ#  0x00771 W1 x1 81 X1 y1 91 Y1 z1 a1 Z1 {1 b1 òEFT CURLY BRACKET/ |/ c/ ÒVERTICAL LINE* }* d* ORIGHZ ~0 e0 CTILDR B\x7f% of" UDELET# )c7#  80# ÃPCAPIT¤ ÅâC WITH CEDILLAµ J\xfc@ 1@ 	U> ”DIAERESIS@ *e9@ 2@ E@ 6ACU¼ *e2< 3< A< “CIRCUMFLE-J\xe4A 4A ½ 0@ 5@ EGRAVy*e5< <½ ‡RING ABOA ºL¸*ea Yx< bA iA <8@ x@ 
<
Ø8ƒxIù| e| ”õ	µ@ ý  ö«A 	½ cu·< rû¿ c;×B 	=cw9÷€
y6@9õ•IGATURE Aðc4 é÷ 6 f-9ãOêªfw ãA lfd9ã@ 	êf#9ã½  ¦ãA 
} 
$9áY:ù d9à°ð ETTER O WITH DIðAERESIS
    '\xdc'
 û #  0x009a -> LATIN CAPITAL LETTER U WITH DIB *f8B bB ESMAL@ O@ dSTROKE *a3= c= ¤POUND SIGN' dd d' ¦ f *d7f e? èMULTIPLICATIONo Pu01922 f0 o 	Ó FÓ DHOOKª  e19  P/a0; A; EACUT*ed< 1< I<  fI/a2<  	x *fax 3< 
< ð 4< N´ ETILDð d< 5< |> a¶ 6> ðFEMININE ORDINAL INDâ$OR¡b7 77 oMASCUL8 f%88 ÑINVERTED QUESG5MAR*ae3 93 šREGISTEREâaˆaˆ8NOT˜+xb!k±VULGAR FRAC‚ …ONE HALFñ Z c5 eQUARTE)ažtñ bEXCLAM;	ô bô kþLEFT-POINTING DOUBLE ANGLE QUOTF bF �ORIGHG Au259Å Èb� G E SHA‰ ( ðbymMEDIUM) hQ fLDARK' 0P QáBOX DRAWINGS L…  =CICAL«Pu2524?_ M8 P AND ]A !xcï ~bR€cµ > R÷�> ¥CIRCUMFLEX� 0À C ^C 	EGRAV*a9> dACOPYûIu256Š\	+gd,Au255.mrB 	ä  9 P9 †9 ODOWNw Æ> �> ,UP< +xa¡“:CEN&*a5Fàe -> YEN SIGN
ö.    '\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
= 4= /c0= !UP; RJ < 3< 1< ¦HORIZONTALA (2c} 2A º C 1C 3C �VERTICALÆ 0?/c4B | 3| 5: 	| G 0xe3À c6G óLATIN SMALL LETTER A WITH TILDEB+xc< 7< oCAPITA> 	Pu255a| : c8> 	:DOUBLE þ5þ9= ¾=(69| a? | 8Xu2566B bB � D 	ýcD 	ÄÉ 5C dC ~ 	Ae; 	~ H !xa‰BÔCURRENCY SIGN0f« * dïl 4ETH3 d3 æ3 c5 cXh Ú5 Ö¤CIRCUMFLEXx  cbÝC ÚC 	•DIAERESISB 8B ÚB 	DGRAV[Hu20a�dÞIEUROQ*cdd ½Ié DACUTd :xce> ¿> ' fC Äå C ' @)dÉ@‰
>0$Å; ‚:8y Á£FULL BLOCKÇAu258à  ¤©LOWER HALF- !xa6Ž“ROKEN BART !xc· ' z6	
!58’ p?UPP’ d£es"O" dßÐe1 -> LATIN SðMALL LETTER SHARP S
    '\xd4'
 õ #  0x00e2 -> LATIN CAPITA9 õO WITH CIRCUMFLEXC 2C 3C TGRAVE> *f5> 4> S¸  ETILD< d< 5< ½ 	> b> 6> ¥MICRO SIGN¡ e¡ 7' "	¡ ETHOR5 d5 85 š 
7 al 97 UŽFACUTb> a> Ì 9C bC 
Ìd> c> 	+Y½ < d< 2> *afz e> UMACRO“bêf# @t ACCENTñaŠ  f0) ¦SOFT HYPHEQ 1t  f1( ¨PLUS-MINUSEPu2017. gfgåDOUBLE LOW LINÇb<fPõVULGAR FRACTION THREE QUARTERÎ b6e  ÎfMxPILCROW� !xaŽ ) :"SE\ 	þ) %PDIVIS† * *b8| (tCEDILLA[*b0$ 0DEGÌ L aL †DIAERESIî œ ð•MIDDLE DOÐbÔfÔ×SUPERSCRIPT O|3¡ Â, xÏ 
úf´	. #WO, Au25aý ¢pBLACK SÇÿ' ›¨óNO-BREAK SPACE
)

### Encoding Map

e �_map = {z  Õ100:Ý400,ìFNULL  1  1  öSTART OF HEADING, 2, 2, 2TEXuu 3) 3) 0ENDS 
' 4' 4' pRANSMISi 5/ 5/ VQUIRY# 6# 6# ¢ACKNOWLEDGf  7' 7' (BE8  8  2ACK€ GE 9% 9% pHORIZON9@TABU)„1 a1 a1  ûV FEEDÂ b% b% ŸVERTICAL T c/ c/ ð FORM FEED
    0�x000d: 0  ,  ð#  CARRIAGE RETURN
 # e+ e+ –SHIFT OUT% f% f% II "10$ %10$ õDATA LINK ESCAPEP #11, 1, ÷EVICE CONTROL ON. 2. 2. 6TWO\ 3. 3. 7HRE^ 40 40 FFOUR_ 5/ 5/ ÷NEGATIVE ACKNOWLEDG_ 60 60 ÷ SYNCHRONOUS IDL, 7, 7, ö
END OF TRANSMISSION BLOCK‘ 85 85 fCANCEL" 9" 9" W fMEDIUM) a) a) —SUBSTITUT¦ b& b& ßc" c" ×FILE SEPARATON©%1d* _GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶FSPACî 2«2«€EXCLAMATŒ6MAR‹2©2©OQUOT* ¥2¥¦NUMBER SIGT2œ2œLOLLA' ”2”{PERCENTO Œ2Œ•AMPERSAND2…2…—APOSTROPHv2vöLEFT PARENTHESISR €2€ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3k3k–DIGIT ZER¿3p3p& 3i3i% 	3d3d% 	 3d3d— 	÷3c3cM 6FIV3a3a& 5SIX+3a3a% 6EVEü3b3b' E<N ]3]' 'NIC3V3VGCOLOn S3SKSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cAQUES‡ÀMARK
    0x0Ð040: 0x0040,  ð#  COMMERCIAL AT
 ! 1) 1) öLATIN CAPITAL LETTER A2 22 22 B2 32 32 C2 42 42 D2 52 52 E2 62 62 F2 72 72 G2 82 82 H2 92 92 I2 a2 a2 J2 b2 b2 K2 c2 c2 L2 d2 d2 M2 e2 e2 N2 f2 f2 O2 55îP2  5 Q2  5 R2  5 S2  5 è5 5 Ud  5 V2  5 W2  5 X2  5 Y2  5 Z2  5 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸5ORIGH[ 5÷CIRCUMFLEX ACCENˆ 5fOW LINõ66\GRAVEL 6÷6÷OSMAL 6õ6õ	0 6ó6ó	0 6ñ6ñ	0 6ï6ï	0 í6í	0 6ë6ë	0 	6é6é	0 6ç6ç	0 ð 6a: 0x006a,    ó #  LATIN SMALL LETTER J
    0x006b: , 0 K0 c0 c0 	L0 d0 d0 	M0 e0 e0 	N0 f0 f0 	O0 "700 /700 	P0 10 10 	Q0 20 20 	R0 30 30 	S0 40 40 	T0 50 50 	U0 60 60 	V0 70 70 	W0 80 80 	X0 90 90 	Y0 a0 a0 	Z0  &7b0 ÷EFT CURLY BRACKENþ7þÖVERTICAL LINEW ÷7÷ORIGHX ö7öGTILDP ç7çVDELET" aÙf" ×NO-BREAK SPAC* Óaœ  INÇ öED EXCLAMATION MARøaØb5 †CENT SIG�aÍ9[POUND& Ãcª ‹CURRENCY) ¼b;YEN$ °d˜ –BROKEN BAfa¦f1SECæ 
Á žfn†DIAERESIƒa“bÃBCOPYà
O �aM÷
FEMININE ORDINAL INDICATO­ “a÷ ÿLEFT-POINTING DOUBLE ANGLE QUOT°ªa,NO¯¥f§SOFT HYPHEÖ�aœREGISTEREÛ§e» VMACROM b§=jDEGREE×b¤fw«PLUS-MINUS+ šfæSUPERSCRIPT TWýb f 	+ 6HRE'b§e§€ACUTE ACúëb¦eå[MICRO¦ ¨f¸{PILCROW( ª¸–MIDDLE DOˆb¨vðCEDILLA
    0x00b9: 0x`00fb,  ð#  SUPERSCRIPT ONE
 €0x00ba:  %a7+ öMASCULINE ORDINAL INDICATOR7 b7 f7 öRIGHT-POINTING DOUBLE ANGLE QUOTATION MARKF cF cF ±VULGAR FRAC0  ON> GARTE} d7 ß 7 FHALFk e4 /f3k ETHREm S: f: %a8: ÑINVERTED QUES§ 	× "c02 bTöLATIN CAPITAL LETTER A WITH GRAV‘#c1= 5o = 	GACUT= 2= 6= ¥CIRCUMFLEXî "c3B c¼ GTILD 4= /8e †DIAERESIl#c5A Wý 	Ri8ABO?6B /92ƒ —IGATURE A¸ 75 /805 ±C±vCEDILLA48? /d4? E? ð9= 9| = ð¾dî ¹ = ðÉdrB ³ ÄdôIý Êd°= ý Ód«= ý ÛdÛý B ý dê/d1ú%TH.dáaáN1
bdáe¯O= 
kdÜek= 
ndÜek= n dÝeù B ù Ø9j= « ä9¨pMULTIPLÛ ›FSIGN¦Ô/9dp VSTROKQdÕe¢YU§Õeë = 	§À0db: 0x00ea,  ð#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
. €0x00dc:  09a,  B –DIAERESISA dA /edA Yƒ VACUTE= e= 8= VTHORN6 f6 16 ESMALô fSHARP © "e06 /856 	A§ FGRAV§ "e1; /a0; 
â "e2; /83;   "e3@ /c6@ GTILD¶ 4; /84; Ù#e5? z ˆRING ABO56@ 9¦—IGATURE A² 73 /87² 	C£uCEDILLA#e8= Ê	E= à9; 2x 	; àa; Âv àb@ 9{ ¥ ¿8~	 Iõ ¹a :; õ ·/8cµ 	; õ Á/8b@ õ fÊd�
5ETHfÁ
N'
FfÁ97
O; 
Wf¼aW
; 
bf¼97
; b f½eñ 
@ ñ ¸; � Äf7ÆDIVISION SIGÆf°9
£ VSTROK)f±9)
ö•±aZ
; •¬9Û n	m; •­r
@ Z ±evÀ LATIN SMALLñ LETTER Y WITH ACUTE
    0x00fe: 0e7, ô  #  LATIN SMALL; VTHORN4 f4 /984 	o “DIAERESIS? B20ac? %d5? …EURO SIGd 2192% %9f% ˜  FÓ EHOOK_ "17: %f2: äDOUBLE LOW LINý B2500+ %c4+ ôBOX DRAWINGS LIGHT HORIZONTALd #50ž /b39 	hVERTIC7 ú a7 	 DOWN AND R t 1­ b­  = FLEFT< 4é 0y 	/UPw 8; /d9; 
u î c%{  2¶ bŸ
fA 	� 2� 
2	è 3‚ /c1ý @ ‚ ë‚  	Â F  5ú/cd† ß: 1½bq: � 05ø õ8 m
ª5‚/bb° 
> 	µ"5a³ c]	3{ ¬"5d< /bcy 
< 	w 6d; *m
ö #63} 4	B 
ƒ 6A c7ð #69C ðA ±eB
	Å G  8Nd¬õ UPPER HALF BLOC°#58ldz?LOW, �#KFULLR 9öîÊFSHADþcbÝ{MEDIUM ( ÙGKDARK& aó f:ðXLACK SQUARE
}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP860.TXT' with genc; P.py.
c ð#"

import codecs
ò
### Codec APIs

class  (c !s. à):

    def en ñ(self,input,errors='strict'):,  0 preturn 1 ³cs.charmap_B = , †ing_map)m  de< m )B 	m   m dtable)ø ÁIncrementalEå r å  h Ã final=False*  W.Q
?[0]¨  D ¨  ~  ¨ ö eL¨ !@ â ¨  Oª ÑStreamWriter(J,Ð8cs. ¤ 5pasƒ ORead9  	9  ÌF€s module× 

ý Ãgetregentry(7 
�ž UInfo(¾Õname='cp860', d !e=0 2().     id: .r=]/ J 	/ ä/ spr7=D# w“#  # !)
Z ping MapA0codáTmap =Ïñmake_identity_dict(range(256))
° 5 ‘.update({F€0x0080:  0c7,ö #  LATIN CAPITAL LETTER C WITH CEDILLA? 1? +fc? ESMAL= U= –DIAERESIS? 2? /e9? 	E? VACUTE; 3; 2; 	A; ¦CIRCUMFLEX@ 4@ 3@ GTILD{ 5; 0; GGRAV; 6; +c1; o¸ ó 7= e¬	mª8= az 	= k09@ c@ º B aB /e8‚ 7b; +cd; } Iï7c= /d4= O= ü dB eæ
} º e; cgÀCAPITAL LETTñER A WITH TILDE
    0x008f: 0c2, ö #  LATIN CAPITAL LETT= ¥CIRCUMFLEXB #90B 9B E FACUT #91= 0= ¼ GGRAV= 2= 8= z = 3= +f4= ESMAL÷ Oµ ÷ 4@ 5@ 
t#95; t{ ¶ 6; +dav ¯U¸ m7= fª	x ; x 8; /ccx Ix = 9= d+µ m-a= z · –DIAERESIS bA an–CENT SIGN% c% 3à [POUND& d& dAÉ Œ e= F20a7c [ESETAd ‘dŠ ‘-
âaŒ%e1d = 	âM; Š/ed; 	à; ˆf³ 	v ± †Ð	; Pv �ì 
N‘
Ta�d; È= ƒa³ õFEMININE ORDINAL INDICATORaa|b6 oMASCUL7 x%bf–öINVERTED QUESTION MARKi mïÜ �
¤amam+NO+aPb)±VULGAR FRAC‘ †ONE HALF• _bX 4 gQUARTE5pa¨þ qEXCLAMAp 
hE00ab3ÿLEFT-POINTING DOUBLE ANGLE QUOTE †bE ORIGHF b�6259À LF G SHA„b{6259³lMEDIUM( h6259hLDARK& Sð2502,     #  BOXð DRAWINGS LIGHT VERTICAL
    0x00b4: 0x2524,  #  BOX7 – AND LEFT@ 5@ /61@ q u SINGLEA v DOUBLEH 6H 2H 8 H X H 7H /56H CDOWN| D 8D 5D x D ˜ ˆ 9D /63D  ÿ �H A aA 5Yp A 8 b8 7y 
Îc= d= 
/UP°  d; c; /UPweB bB ufB /10B û #c0< 	
ú RMs"c1; 3; ‡HORIZONT„"c2@ 2;· B 3B 1B 
Œ øÃ 0:
z  3z F þ/5e¹º Á T‹ÿfI ?
 I aI @ ü5< ˆÊ z ù/69z M6{ C 6Â —GÆ B | 6R| G 6#UPóËA Rd/68�
ØH «d%6/WN’ /6ŸÀDOWN DOUBLE ðAND HORIZONTAL SINGLE
    0x00d3: 0x2559, ð #  BOX DRAWINGS UP DOUBLE H ]RIGHTC 4C 8C u C T † 5C 2C CDOWNw E 6E 3E y E › Š 7E /6bE ˆVERTICAL^8N aN † — N ­ œ 9N 1iLž!UPG FLEFT: a: /0cˆ : fç= b= 8w ¦FULL BLOCK& c& 4c ¬LOWER HALF, d, �  ¯ + e+ %90W …W f, 8, ?UPPƒ  e0, E03b1X õ	GREEK SMALL LETTER ALPHAã !e14 50df4 ZLATIN4 vSHARP S6 26 &39—j @CAPI’l GGAMMl ˜603cÌ 6 	  &PIg †?03ag 8SIGg y<03c6 	g 4 hE00b5¦MICRO SIGN� I603cÁ  6TAU2 -E03a6X 2 )'PHö 6039œ4 GTHET]603aõ6 GOMEG6 ?03bÒ 
8DELj 521eÔ †INFINITYø <03cø 	„	ö '03‚À 	2 gEPSILO’&22ö §INTERSECTI( f6226BIDEN÷%TO¸ fCªPLUS-MINUSf62263øGREATER-THAN OR EQUAL _ 6226oOLESS1 623232TOPU é FGRAL½ ù6232å oBOTTOM0 õ%f7ÉpDIVISIO™øfø6224’oALMOSTâ  ñ&0b±  DEÉ=ä6221¸ö BULLET OPERATORÖ ÙÐ0b7,     #  MðIDDLE DOT
    0x00fb: 0x221a, Ø #  SQUARE RO' c' 607f' öUPERSCRIPT LATIN SMALL LETTER Nc d< O00b2< 6TWO+ e+ E25a0+ SBLACK” ( f( '00( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (U d'\x00' ¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- 2TEXƒ x 3* 3* 0ENDU 	( 4( 4( ¢RANSMISSIOx X 50 50 UQUIRY¦ 6$ 6$ µACKNOWLEDGE( 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  ec9& ð HORIZONTAL TABUKÅ n2 a2 •LINE FEEDŸ b( #Ô 0b& oVERTICV :x0c0 c0 HFORMV r$ ® d& æCARRIAGE RETURme. ‚ e, †SHIFT OUëf& f& IK 1ˆ1ˆõ DATA LINK ESCAP™1”1”öDEVICE CONTROL ON/ 
–1–/ �J'\x1›1›/ 6HRE` 
¤1¤1 DFOUR¹1¤1¤ŸNEGATIVE ‰ 1±1±ö SYNCHRONOUS IDLŽ 
¶1¶Z2e BLOCK” 
Ë1ËUCANCE
)19È1ÈY eMEDIUMM a* À–SUBSTITUTª 
Á1Áê
´1´ÆILE SEPARATOVdu ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2Æ!" »ó EXCLAMATION MAR•"- ¹LQUOT+ #+ µ£NUMBER SIGh$( ¬HOLLA( %( ¤wPERCENTQ &) œ AM&"AN¬0"'"  *2•“APOSTROPH(M †òLEFT PARENTHESISf)- �ðRIGHT PARENTHESIS
  c  '*'  ð#  0x002a -> ASTERISK
 -'+% b% ’PLUS SIGN& ,& c& RCOMMA" -" d" ÂHYPHEN-MINUS) .) e) ’FULL STOP& /& f& TSOLIDJ 0$  30$ ¢DIGIT ZEROK 1' 1' 2ONE& 2& 2& #TWL 3& 3& 3HREN 4( 4( BFOURu 5' 5' #IVN 6' 6' 2SIXM 7& 7& 3EVEÌ8( 8( REIGHTP 9( 9( $NI9:' fCCOLOq ;" cGSEMI& <& c—LESS-THANŽ=+ lXEQUAL¶>( k|GREATERV ?. sÃQUESTION MAR4@* 4y ƒERCIAL ADA* |óLATIN CAPITAL LETTER IB3 ‰3 BªC3 –3 C3 D3 ¡3 D3 E3 ­3 ¹F3 ¹3 Ff G3 Æ3 G3 H3 Ñ3 H3 I3 Ü3 I3 J3 è3 J3 K3 ù3 [L3 1Lf M3 f M3 N3 3 ÅO3 3 -P3 5'3 ÷Q3 0QÌ R3 0wS3 0¶T3 0üU3 0UÌ V3 0V3 W3 À 0x0057 -> LðATIN CAPITAL LETTER W
    'X'   ï#  0x0058 -> L3 X3 Y3 93 Y3 Z3 a3 Z3 [3 b3 òEFT SQUARE BRACKET0 $\\1 É c0 ò REVERSE SOLIDUS, ]+  , d, ?IGH] ^1 e1 óCIRCUMFLEX ACCEN‹ _. f. ‚LOW LINE„ `%  60% YGRAVEN a) 1) ¢ESMALÓAZ b1 21 B1 c1 31 C1 d1 41 D1 e1 51 f1 61 Fb g1 71 G1 h1 ù	WH1 i1 ÷	1 I1 j1 õ	1 J1 k1 óŒ	1 K1 l1 ô L1 m1 ù1  M1 n1 ù1  N1 o1 üÄ O1 p1 7b  P1 q1 Q1 r1 R1 s1 Pt1 "u1 U“ v1 V1 w1 	x1 y1 z1 {1  ZCURLY|/ `VERTICù|}* R Z  ~0 CTILD°3\x7³R7÷UDELET# "c7H # 8é�ÓC WITH CEDILL×3\xf©@ øðU WITH DIAERESIS
     '\xe9'
 ð #  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
2  < 2< 3< A< ¥CIRCUMFLEXA 3A 4A FTILD} 0< 5< EGRAV< *c1< 6< eCAPITA÷ » 
÷ 7> 7> 	3C÷ eEDILLAô a> 8> q5cA 9A ½ C *e8„ aC 	Â A 
<d< b<  I 	<*d4> c> O>  *ecC dC 	½  
½ qe< ½ ù	scðf> ½ co/90C |	>cô/91> ¿ 
ý 
ö9ëý | 	> fº9í¸)f5¸9íA 	zfz9í< 	¹ d09íUs	sf±í< 	z cª9ëq¬d0èö 	2d| ã| º ”DIAERESIS©até•CENT SIGN& 
R9ÑYPOUND' dGµ� IAu20at¥9·jPESETAf � ¡3	ëeaœ	Y\
< 
aš	< é	< f¶ a˜	< ´ fÝa–åÀ ACUTE
    '`\xf1'  ð#  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
1 K'\xd< 5< oCAPITA> 
*aaz 6> ôFEMININE ORDINAL INDICATORu b7 77 oMASCUL8 fo 88 ôINVERTED QUESTION MARKk *d23 93 à OEGRAV*ac> a> „NOT SIGNc *bd% b% ±VULGAR FRAC” …ONE HALF5 Z c5 eQUARTE;a°d8 qEXCLAMAr *ab£ e6 þLEFT-POINTING DOUBLE ANGLE QUOTF bF fF ORIGHG Au259Å ¯ b0G LG E SHA› ( ½( 1( mMEDIUM) 3à ) 2) LDARK' 0P 3' ÒBOX DRAWINGS …  OCICAL«Xu2524_ _8 P AND ]A 6ñ d	A s 1 SI€B –I 	Â oI Ï‹ Y I (56Ó �	I CDOWN~ Ð E 5E ŽE Ó 	¼ E ™#Ì 	^¤B 	9 7À ¸9 w  øuÁ> %UPAz ÿ< Å	< /UP}ŽC ÒC {(10 Ï	C ÿ 1cÅ=  þ &ÿ 3< Ù< ‰HORIZONT’@cñA  º C 1C ÄÆ 0?c| 3| y	ó	G À  '\u255e'  ô< #  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
    '\u255f'   J 7J 9 J [ J aJ 8J A &UPD = 4= 9= ODOWN? (69? a? | ¦HORIZONTAL� (66B bB � D 0D cD �–‡ 5C dC ~ c~ e; 	~ H 7H fH (UPVB ['68I /d0I  	I Z6-d1I •5 K a `(65” 2K 5 K a K 5t-d3K #UPI ~D 	#4D 3 D ž ˆ 2Ó 5D Š F 3F RF 5 Œ � Œ (6bF N®O SdSÌ9 ™ O ¯ ž 1neL"%FLEFT; 0]da; % Íd> 8y ]§FULL BLOCK' 	è@­LOWER HALF- 	’ * ³ , 9Vd¢ - 8-  ?UPP† G03b1ñeäó	GREEK SMALL LETTER ALPHAè 0xdf3 teÐZLATIN5 sSHARP S7 Hu039£e¼l eCAPITAn DGAMMn Hu03cÐ e¨7 	£ &PIi ai –2 i 9SIGi 	7 ‰7 	i 5 !xb�x¦MICRO SIGN“ cÀ 0x00e7 -> Gñ$REEK SMALL LETTER TAU
    '\u03a6'   #  0x00e8 -> G3 eCAPITA5 6PHI5 (985 95 VTHETA7 (a97 a7 GOMEG7 (b47 b7 	Ö 6DELl H221e5 c5 †INFINITY‘ cý d% ý 	Z 	û (b5X e3 tEPSILONj 9222û f7 ¨INTERSECTI) '61` !f0) ³DENTICAL TOR !xb' ¹ f1) çPLUS-MINUS SIG~ 6µ  f2, øGREATER-THAN OR EQUa Hu226w f35 OLESS2 8320¼ 42 �TOP HALF î CGRALÁ Au232Ã z f5. oBOTTOM1 0xf7] ò 61 ‹DIVISIONð 4  f7* lALMOSTç !xb³ V  DET 1Âfôó BULLET OPERATORÛ +xbª é£MIDDLE DOT' Pu221aÓ Ù—SQUARE RO( 807f( ÌúSUPERSCRIPT LATINãü0xb2; à ä= $TWTAu25a‘ ÝbBLACK — º x' U ÏóNO-BREAK SPACE
)

### Encoding Map

e �_map = {Q  y100:�000,š �2NUL-  1  1  öSTART OF HEADINGL 2, 2, 2TEX€U 3) 3) 0ENDS 
' 4' 4' pRANSMIS‚ 5/ 5/ BQUIRxy 6# 6# ¶ACKNOWLEDGEJ 7' 7' (BE8  8  2ACK€ Gl 9% 9% pHORIZONÝ@TABU?‚1 a1 a1 –LINE FEED› b% b% 3VER¥T  c/ c/ KFORMT d% d% âCARRIAGE RETURÕ¤ e+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAP�1„1„÷DEVICE CONTROL ON. †1†. z Ñ 1‹1‹. 7HRE^ ”1”0 ÀOL FOUR
    ‚0x0015:   ,  ð	#  NEGATIVE ACKNOWLEDGE
 ( 60 60 ÷ SYNCHRONOUS IDL, 7, 7, ö
END OF TRANSMISSION BLOCKa 85 85 fCANCEL" 9" 9" W fMEDIUM) a) a) —SUBSTITUT¦ b& b& WESCAP" c" c" æFILE SEPARATORr d* d* _GROUP+ e+ e+ oRECORD, f, f, OUNIT*  "20* %20* FSPACÌ #21! 1! €EXCLAMATŒ6MAR‹#22, 2, OQUOT* 3* 3* µNUMBER SIGN#24' 4' \DOLLA' ”%25' {PERCENTO Œ2Œ–AMPERSANDt …2…—APOSTROPHv2vöLEFT PARENTHESISR €2€ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3k3k¥DIGIT ZEROI 3p3p& &ON~3i3i% 'TWJ d3d% 7HREL d3d— 6FOU©3c3cM 7FIVL a3a& 6SIXâ a3a% 6EVEü3b3b' E<N ]3]' (NI1V3VGCOLOn S3SKSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cNQUES‡4i4i ú•ERCIAL AT<4l4löLATIN CAPITAL LETTER 44y4y2 Bd †4†2 C2 ‘4‘2 ³4�4�2 ©4©4©2 àF
    0x0047: €0x0047,  ð#  LATIN CAPITAL LETTER G
 * 28:  2 H2 92 92 I2 a2 a2 J2 b2 b2 K2 c2 c2 L2 d2 d2 M2 e2 e2 N2 f2 f2 O2 "502 /502 P2 12 12 Q2 22 22 R2 32 32 S2 42 42 T2 52 52 U2 62 62 V2 72  W2  /58d X2  5 Y2  5 Z2  5 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸5ORIGH[ 5÷CIRCUMFLEX ACCENˆ 5uOW LINEÛ 66\GRAVEL 6÷6÷ESMALéAX õ6õ	0 B0 ó6ó	0 C0 ñ6ñ	0 D0 ï6ï	0 í6í	0 F` ë6ë	0 	6é6é	0 6ç6ç	0 6å6å	0 6ã6ãË	0 6ä6äû	0 ÿ6é6é0  ý6é6é0  û6ì6ìÀ ù7ø7ø`  ÷7 ð71,     #  LATIN óSMALL LETTER Q
    0x0072: , © #  LATIN 0 R0 30 30 	S0 40 40 	T0 50 50 	U0 60 60 	V0 70 70 	W0 80 80 	X0 90 90 	Y0 a0 a0 	Z0 b0 b0 ÷EFT CURLY BRACKENc. c. ÖVERTICAL LINEW d) d) ORIGHX e/ e/ GTILDP f! f! VDELET" "a0" f" ×NO-BREAK SPAC* 1* aœ  INÇ õED EXCLAMATION MARKÑ aØ9(–CENT SIGN% Í9[POUND& £acö
FEMININE ORDINAL INDICATO)a©a#ÿLEFT-POINTING DOUBLE ANGLE QUOTÆ Àa+NOÅ bI¢jDEGREEÆ bF%f1’«PLUS-MINUS+ <fqõ SUPERSCRIPT TWOBb¯e[MICROQ ufÇ –MIDDLE DO­bh›PMASCU©ibiI»jbj±VULGAR FRAC` ON¨FARTEæb8ag7 FHALF4a±ÐAQUESm 	Ícã9¼¥PCAPITÌ×¶A WITH GRAV?cù8£= 	7ACU¦c8]= 	–CIRCUMFLEcd8a¼ TGc9%80µ Cù uCEDILLAjc½/92? E? 8Ê9| = 8Ì8ö = 8‘9&û I¼ —À08b,     #  ñLATIN CAPITAL LETTER I WITH ACUTE
    0x00d1: 0a5, O #  = N= GTILD= 2= 9= O= GGRAV= 3= /9f= · 4= /8c= ¦CIRCUMFLEXù 5B 9¼ ù 9= d Uù a= 6= ù c= a= –DIAERESISø fA +e1A ESMAL,fSHARP 6 "e06 8'	6 Aï eb0q 	; 
í e`/83; ä ec/84@ 
â#e7ñ 7; 	Cñ uCEDILLAd#e8= ¥	.E= 
eZ/82x 	; .X/88; .[8Õ	¶ F¶ dñ aU
; 
¶ f¤
f9•
}fag
; ± {9•
; g fyñ 
@ 
•f•f:ÕDIVISION SIGN�fF9¾
žfFaß 
; A
; š#39”e”\GREEKÈEGAMMl#39leÈ6 FTHET6 al …6 7SIGl "a6çeb6 4PHI‹#3a‹e4 FOMEG  be56 	ŒEALPH4 À3b4: 0x00eb,  ð#  GREEK SMALL LETTER DELTA
  ð 0x03b5: 0x00ee,  4 uEPSILON6 #c06 36 	&PI1 31 51 	FSIGM› #c44 74 	6TAUf 62 d2 	$PH˜ B207f2 %fc2 úSUPERSCRIPT LATIN?B20a7< 9;¥PESETA SIG' 2219' %f9c ó BULLET OPERATORÀ C221a+ b+ ¶SQUARE ROOT' e' eµ …INFINITY$ 2v %efK ¥INTERSECTIÊB2248L feõ ALMOST EQUAL TOS #61+ 0S kDENTIC( ¸fÏLESS-THAN ORY  „%f2Y GREATER4 #32‚%f44 �TOP HALF é DGRALº $32º ~oBOTTOM0 #50] c] öBOX DRAWINGS LIGHT HORIZONTi 2502#bû 9  1VER5  250c7 %daÍ 7   DOWN AND R = 1­ bê= 	5LEFJ#51«cÓ<  /UPw 9d×$; 
u î c%{  2¶ bŸ
fA 	� 2� pö  oè 3‚ /c1±	ý @ ‚ ‘a	Â F  5úcï	È oDOUBLE¨5bq: � l5àd¸ 4aSINGLEwª N E /d6=E 4 E V E ‚@ L 45r/b8ƒ r ƒ  ?Ç mb:~#WN4 D T Æ CbñD ÂÆ  ˆ = ‚À#  BOX DRAWIð#NGS UP SINGLE AND RIGHT DOUBLE
    0x2559: 0x00d3, Ó #  BOX DRAWIC 2 C T C aC /c8C @ &UPC < b< /be< 
Â >LEFÁ cB dB �  B À dB cB ? À  B ¿ e; /c6; �VERTICAL‡fI 7I �  Ì ÐÍ #60I Í ™ I Ô "61B /b5‹ z Õ Z#62H Ó H X � 3H 9� ? 	Ò  H A 4A /d1A (WN¡­HORIZONTALÓ 5J 2J �  YJ Õ 6J /cbJ  ¦Q DOWNaJ × 7C fC 
;A Õ 8H /d0H Ó J/caH E G� Ñ HdHâL× ZdR• œ fc¨Ý £ 
þG 8žd´öUPPER HALF BLOCK, ·Ê?LOW, ÄOLFULLR Å d+ )} 9© ð o©  91ALkFSHADj9‡{MEDIUM ( ðeKDARK& a¡ f¡ ðTBLACK SQUARE
}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP861.TXT' with2 c; P.py.
c ±#"

import  cs

###` ²APIs

class ($ . 1):
í`def en ñ(self,input,errors='strict'):,  ¤creturno ð
.charmap_encode(input,errð0ors,encoding_map)

    def decode(self,input,errors='strict'):
,   preturn 1 ³cs.charmap_B = ,  m ðtable)

class IncrementalE� 3er(M  x  ¤ » ¤  h Ã final=False* ¢ @ :  ê .ä 
?[0]¨  D ¨  ~  ¨ ö ¨ (@ ¨  Oª óStreamWriter(Codec,R ¤ Dpassã  ORead9  	9 A### Kðings module API

ý Ãgetregentry(7 
0ž QInfo(} ¯Õname='cp861', d !e=0 2().     id: .r=]/ J 	/ ä/ spr7=D# w“#  # 0)

IZ ping MapA�$ =bñmake_identity_dict(range(256))
°  Ámap.update({F€0x0080:  0c7,kö #  LATIN CAPITAL LETTER C WITH CEDILLA? 1? +fc? ESMAL= U= –DIAERESIS? 2? /e9? 	E? VACUTE; 3; 2; 	A; ¦CIRCUMFLEX@ 4@ 4@ º  5? 0? GGRAVº 6; 5; ˆRING ABO@ 7@ ³	t±8= a} 	r79@ b@ 7 a? 8? 7b; drª6ETHåc4 f4 	+	2 d2 +de¡ f VTHORNh e6 cM6 � fA A  9ÉKB ÛMÀ  0x0091: 0x`00e6,  ð#  LATIN SMALL LIGATURE AE
 €0x0092:  c3 oCAPITA5 35 /f4h öETTER O WITH CIRCUMFLEXu 4@ u ¨ 	@ –DIAERESIS? 5? e 	VTHORN4 64 b4 	U³ 7@ +dd@ (µ YB GACUTe8= f= 	ð ; 9; d+x m- aA c¹ û A  bA +f8A 	½ € WSTROKù c< %a3< —POUND SIGœd& db ä d e> F20a7d [ESETAe f' E0192' 	¿F¿EHOOK;!a0: ?0e1: 	A: 
ù#a1; ù
I; ™f;°  wv Ÿa± 	ñ; šcì ‹î ˜cî = ð ¡dð = ò žò = ô ž%bf/÷INVERTED QUESTION MAR•E23102 ÊREVERSED NOTya�a�$ db:±VULGAR FRAC� †ONE HALF—\bX 4 vQUARTER7 maâî qEXCLAMAp 
ñ d700a>ÿEFT-POINTING DOUBLE ANGLE QUOTE ‚&0bE ORIGHF bŽ6259À LF V SHADzbz'25ïlMEDIUM( g6259wLDARK& R6250=ÀBOX DRAWINGSZ0HT 4EICALlbN6252(7 – AND LEFT@ Q6256ì 	@ q à SINGLE AND LEðFT DOUBLE
    0x00b6: 0x2562, ó
 #  BOX DRAWINGS VERTICAL8 è AND LEFT SINGH 7H /56H ODOWND 8D 5D x ˆ Ð 9D /63D  ÿ × Ð aA /51A 8 b8 78 
u c= d= 
%UPø x d; c; /UPweB bB ufB /10B @LIGHz.WNÀ #c0< 4< 	ú RI û "c1; 3; ¦HORIZONTAL@ 2@ 2;· B 3B 1B 
D øÃ 4A 0:
z 59 3z F þ/5e}º Á TKÿfI ¯I Z I aI @ ü5< ƒ� z ù/69z M6{ C 6Â —Q B | 6R| G 6#UP;A Rd/68�
ØH Qd%6/WN’ /6Ÿ	& ™” 75k
Ü §£ ®d95	Ð AND RIGHT DOð	UBLE
    0x00d5: 0x2552, ú #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOE 6E 3E 4 E V Š 7E /6bE ƒVERTICAL} I £HORIZONTAL¤ N 8N aN † N ­ N 9N /18N L!UPG FLEFT: a: /0c: 	f_= b= 8w ¦FULL BLOCK& c& 4c ¬LOWER HALF, d, �  ¯ + e+ %90W ýW f, 8, ?UPPƒ  e0, E03b1X õ	GREEK SMALL LETTER ALPHAã !e14 50df4 ZLATIN4 vSHARP S6 26 &39—j @CAPI4l GGAMMl 36 cÌ 6 	  &PIg 41 ag 8SIGg y<03c6 	g 4 hE00b5¦MICRO SIGN� I603cÁ  6TAU2 -E03a6X 2 )'PHö 6039œ4 GTHET]O03a9j GOMEG6 ?03bÒ 
8DELj 521ej †INFINITYø <03cø 	„	ö '03‚ö 	2 gEPSILO’&22ö §INTERSECTI( f6226BIDEN÷%TO¸ fCªPLUS-MINUSf62263øGREATER-THAN OR EQUAL _ 6226oOLESS1 623232TOPU é FGRAL½ ù6232å oBOTTOM0 õ%f7ÉpDIVISIO™øfø6224’oALMOSTâ  ñ&0b±  DEÉ=ä6221¸ö BULLET OPERATORÖ Ù&0b¦ –MIDDLE DOfÉ6221–˜SQUARE RO' ¼&07ïÏSUPERSCRIPT û lfÔ&0bÑð SUPERSCRIPT TWOð
    0x00fe: 0x25a0, ö #  BLACK SQUARE( f( '00( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (U d'\x00't  ‹ ¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- ETEXT* 3* 3* 0ENDU 	( 4( 4( µRANSMISSIONX 50 50 UQUIRY$ 6$ 6$ ¢ACKNOWLEDGq 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  ×c9& öHORIZONTAL TABULATÅ n2 a2 •LINE FEEDÇ b( #F 0b& oVERTICV :x0c0 c0 HFORMV r$ ® d& æCARRIAGE RETURme. ‚ e, †SHIFT OUëf& f& IK 1ˆ1ˆõ DATA LINK ESCAP™1”1”öDEVICE CONTROL ON/ 
–1–/ 4TWOX1›1›/ 6HRE` 
¤1¤1 EFOURa 
¤1¤ŸNEGATIVE ‰ 1±1±ö SYNCHRONOUS IDLŽ 
¶1¶Z2e BLOCK” 
Ë1ËUCANCE
)19È1ÈY eMEDIUMM a* À–SUBSTITUTª 
Á1Áê
´1´ÆILE SEPARATOVdu ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2Æ!" »aEXCLAMC MAR•"- ¹LQUOT+ #+ µ£NUMBER SIGh$( ¬HOLLA( %( ¤wPERCENTQ &) œ‚AMPERSAN¬0"'"  *2•“APOSTROPH(M †òLEFT PARENTHESISf)- �ORIGH.  *. ”sASTERISq+% ’GPLUSó ,& •RCOMMA› -" ŒðHYPHEN-MINUS
   S '.'  ð#  0x002e -> FULL STOP
 -'/& f& rSOLIDUS$ 0$  30$ ¢DIGIT ZERO' 1' 1' 2ONE& 2& 2& #TWL 3& 3& 3HREN 4( 4( BFOURu 5' 5' #IVN 6' 6' 2SIXM 7& 7& BEVEN( 8( 8( REIGHT( 9( 9( $NI9:' a' CCOLOq ;" b" GSEMI& <& c& ÓLESS-THAN SIGQ =+ d+ gEQUALS( >( k|GREATERV ?. sÒQUESTION MARK@* 4yÃCOMMERCIAL ADA* |òLATIN CAPITAL LETTER A] B3 ‰3 B3 C3 –3 C3 D3 ¡3 D3 E3 ­3 ¹F3 ¹3 Ff G3 Æ3 G3 H3 Ñ3 H3 I3 Ü3 I3 J3 è3 J3 K3 ù3 [L3 1Lf M3 f M3 N3 3 tO3 3 -P3 5'3 ÷Q3 0QÌ R3 0wS3 0lT3 0üU3 0UÌ V3 0V3 W3 0W3 X3 0\Y3 0Yf Z3 À#  0x005a ->ð LATIN CAPITAL LETTER Z
    '['   ò#  0x005b -> LEFT SQUARE BRACKET0 $\\1 0 c0 ò REVERSE SOLIDUS, ]+  , d, ?IGH] ^1 e1 óCIRCUMFLEX ACCEN‹ _. f. ‚LOW LINE„ `%  60% YGRAVEN a) 1) <ESMAL:AZ b1 21 B1 c1 31 C1 d1 41 D1 e1 51 f1 61 Fb g1 71 G1 h1 81 H1 i1 91 I1 j1 a1 J1 k1 ó&	êK1 l1 ô L1 m1 ù1  M1 n1 ù1  N1 o1 üÄ O1 p1 7b  P1 q1 Q1 r1 R1 s1 Pt1 "u1 U“ v1 V1 w1 W1 x1 X1 y1 Y1 z1 {1  ZCURLY|/ `VERTIC`|}* R Z  ~0 CTILD°3\x7³R7÷UDELET# "c7H # 8éÓC WITH CEDILL×3\xf©@ øU> ƒDIAERESI¥J\xe9€ E@ 6ACU¼ *e2< A< üA\xe4A À #  0x0084 -ð!> LATIN SMALL LETTER A WITH DIAERESIS
    '\xe0'
 Ï #  0x0085 -@ 	UGRAVE< 5< 6< ‡RING ABOA 7A 7A C½ uCEDILLA a> 8> E> •IRCUMFLEXA bA 9A <8@ a@ 	<dxb< eCAPITAº4ETH± f5 c5 	í3 *de¤ d3 h TTHORNj *c47 e7 YcfB )c9… /90C ãFACUTž6> 1> -•IGATURE A4 c4 24 .6 f-&936 j „O‰fw 4A ‰få9Å	ãfþ9¾U¶ *dda¾-ù YC 	Ÿf> ¾< d0¹z s2*dc¼ »B ÿ B fý9ÁõUSTROKh*a3 É•POUND SIG†dd ½è 	f Au20aaÜ9ÅhPESETAg Pu0192� ( «	Ë FÇDHOOK( e19  ?a£	; &	ea¡>Iw 	< fAa©	x 
< 
8a¯ú	< cð ª8ò cò ¨> ô dô ±ÐCAPITAL LETTEð
R O WITH ACUTE
    '\xda'
 ÿ #  0x00a7 -> LATIN CAPITAL LETTER U>  *bf> 8> óINVERTED QUESTION MARKq Pu23105 q 93 óREVERSED NOT SIGN. 0xac,  Ÿ a. % *bd% b% ±VULGAR FRAC„ „ONE HALFZ bZ c5 tQUARTER8 *a1m d8 ó qEXCLAMAr ö :xab6 e6 þLEFT-POINTING DOUBLE ANGLE QUOTF bF fF ORIGHG Au259Å ƒ b0G LG T SHAD ( 2· ( 1( mMEDIUM) 3) 2) LDARK' 0P 3' ÒBOX DRAWINGS …  ?CICALsXu2524_ 48 P AND ]A 6ñ 5A s 1 SI€B –I 	Â 6I Ï‹ Y I (56Ó w	CDOWN~ Ð E 5E ~E Ó 	¼�E ™#Ì 	^¤B 	9 7À ¸9 w  øžÁ> %UPAz ÿ< Å	< /UP}ŽC ÒC {	bÏ	C ÿ 1cÅ=  þ &ÿ 3< Ù< ‰HORIZONT’@cñA  º C 1C ÄÆ 0Jc| 3| y	óG '5eÀc	Ä ]‘5JMc‹ XJ [ J ÒJ À0c8 -> BOX Dû.RAWINGS DOUBLE UP AND RIGHT
    '\u2554'   #  0x00c9 -> BOX D= ODOWN? (69? a? | ¦HORIZONTAL� (66B bB � D 0D cD �VERTICALÉ 5C dC ~ c~ e; 	~ H 7H fH ‘UP SINGLEÀ B áS8I /d0I  I _ I -d1I •5 ” 5” 2K – 5t-d3K #UP” ð9Ú 5#4D Ø D ž D 2Ó 5D F 3F 6F { Ð (6bF 7F }J ù	aO 8O %O e *1neL”¡7LEF 0]da; k Ídy 8y ]§FULL BLOCK' 	è@­LOWER HALF- 	’ * ³ , 9Vd¢ - 8-  ?UPP† G03b1¢eäó	GREEK SMALL LETTER ALPHAè 0xdf3 íeÐZLATIN5 sSHARP S7 Hu039£e¼l eCAPITAn DGAMMn Hu03cÐ e¨7 	£ &PIi ai –2 i 9SIGi 	7 ‰7 	i 5 !xb�x¦MICRO SIGN“ ceY\  6TAU3 aÒe=3 Æ 'PHû 9ªe#5 GTHETdað ea -> GREEK CAPõ)ITAL LETTER OMEGA
    '\u03b4'   #  0x00eb -> GREEK SMAL5 EDELT5 H221e5 c5 †INFINITYZ (c6% d% Z  6PHI3 (b53 e3 tEPSILON7 H22297 f7 ¨INTERSECTI) '61) !f0) ³DENTICAL TOR !xb'  f1) çPLUS-MINUS SIG~ 6µ  f2, øGREATER-THAN OR EQUa Hu226w f35 OLESS2 8320¼ 42 �TOP HALF î CGRALÁ Au232Ã × f5. oBOTTOM1 0xf7] ò 61 ‹DIVISIONð  48, [ 7* lALMOSTç !xb³ V 8,  DET 1Â f9( ó BULLET OPERATORÛ +xbª a, £MIDDLE DOT' Xu221a§ Ù—SQUARE RO( 807f( ÌúSUPERSCRIPT LATINü0xb2; à ä= $TWTAu25a8ÝbBLACK — º x' U ÏóNO-BREAK SPACE
)

### Encoding Map

e �_map = {Q  Ö100:Þ000,÷ í2NUL-  1  1  öSTART OF HEADINGL 2, 2, 2TEX€U 3) 3) 0ENDS 
' 4' 4' pRANSMIS‚ 5/ 5/ BQUIRxy 6# 6# ¶ACKNOWLEDGEJ 7' 7' (BE8  8  2ACK€ Gl 9% 9% pHORIZONq@TABU?‚1 a1 a1 –LINE FEED› b% b% 3VER¥T  c/ c/ KFORMT d% d% âCARRIAGE RETURÕ¤ e+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAP�1„1„÷DEVICE CONTROL ON. †1†. z Ñ 1‹1‹. 7HRE^ ”1”0 2FOU‘_ ”1”ŸNEGATIVE z1¡1¡÷ SYNCHRONOUS IDL‹ ¦1¦Fe BLOCK@1»À0018,     # ó CANCEL
    0x0019: , ö #  END OF MEDIUM) a) a) ¦SUBSTITUTE& b& b& WESCAP" c" c" æFILE SEPARATORL d* d* _GROUP+ e+ e+ oRECORD, f, f, OUNIT*  "20* %20* FSPACÌ #21! 1! õEXCLAMATION MARKÎ #22, 2, OQUOT* 3* 3* ¶NUMBER SIGNQ 4' 4' \DOLLA' 5' 5' {PERCENTO 6( 6( –AMPERSANDt 7% 7% ‡POSTROPH8& 8& öLEFT PARENTHESISR €%29, ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3k3k¥DIGIT ZEROI 3p3p& &ON~3i3i% 'TWJ d3d% 7HREL d3d— 6FOU©3c3cM 7FIVL a3a& 6SIXâ a3a% 6EVEü3b3b' E<N ]3]' (NI1V3VGCOLOn S3SKSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cNQUES‡4i4i ú•ERCIAL AT<4l4löLATIN CAPITAL LETTER 44y4y2 Bd †4†2 C2 ‘4‘2 ³4�4�2 ©4©4©2 F– ¶4¶2 G2 Á4Á2 H2 Ì4Ì2 I2 ØÐ4a,     #  LAóTIN CAPITAL LETTER J
    0x004b: , o #  LA2  K2 c2 c2 L2 d2 d2 M2 e2 e2 N2 f2 f2 O2 "502 /502 P2 12 12 Q2 22 22 R2 32 32 S2 42 42 T2 52 52 U2 62 62 V2 72 72 W2 82 82 X2 92 92 Y2 a2 a2 Z2  &5b2 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸5ORIGH[ 5÷CIRCUMFLEX ACCENˆ 5uOW LINEÛ 66\GRAVEL 6÷6÷ESMALSAX õ6õ	0 B0 ó6ó	0 C0 ñ6ñ	0 D0 ï6ï	0 í6í	0 F` ë6ë	0 G0 é6é	0 H0 ç6ç	0 I0 å6å	0 6ã6ã	0 6ä6ä3	0 ÿ6é6é0  ý6é6é0  û6ì6ìÀ ù7ø7ø`  ÷7 7 
õ7 7 
ó7 7 
97 7 ÀR T
    0x00À75: 0x0075,  ð	#  LATIN SMALL LETTER U
 ( 60 60 	V0 70 70 	W0 80 80 	X0 90 90 	Y0 a0 a0 	Z0 b0 b0 öEFT CURLY BRACKET. c. c. ÖVERTICAL LINE) d) d) ORIGHX e/ e/ GTILDP f! f! VDELET" "a0" f" ×NO-BREAK SPAC* 1* aœ  INÇ õED EXCLAMATION MARKÑ "a35 9ú ¦POUND SIGN& NaÈ ÿLEFT-POINTING DOUBLE ANGLE QUOTk eaÃ:NOTi bî GkDEGREE' ë %f17«PLUS-MINUS+ 2á fõ SUPERSCRIPT TWOæ bTe$[MICROQ fÇ –MIDDLE DORb2·)3b3ž±VULGAR FRACÎ ONqVARTERÉ ¦aý7 FHALF4 Šaz>AQUESm 	;c…%a4…ƒPCAPIT:…§A WITH ACU×"c4—8RÀ= •DIAERESIS° c­8a~ 	R¦FABOV0c/92À —IGATURE A5 þ/805 õ Cõ vCEDILLA¶ ÷9? E? 4×ô4I= dZ805ETH® da4 Oq _â® = âdS9º~ 	VSTROK©d1aÁ U¼ x9ä{ = ¼  «9~ Y~ 68ù À CAPITAL LETñTER THORN
    0x00df: 0e1, ð #  LATIN SMALL LET4 uSHARP S6 "e06 /856 	ÆA WITH GRAVE; 1; /a0; GACUT; 2; /83; ¦CIRCUMFLEX{ 4@ 4@ ‡DIAERESIõ 5? 6? ˆRING ABOú 6@ 9k—IGATURE Aò 73 /87s 	ChvCEDILLAï 8= a= 	E= ¥9; 2; ¥a; 8; ¥b@ 9@ ¥ d? aeÐIõ 
º fÕcz 
%THb#f3m '
Om Œ9Ì
; ' fMÌ
@ 'fYfÌÆDIVISION SIG fE/9b	h VSTROK¾faä 
U9  — ; cš8
@  F9Å
Yº ez 9
	…#19Ù/9fe	Fo DHOOK‚#39‚e‚ÅGREEK CAPITAÁEGAMM#39Õed6 FTHET6 al s6 7SIGl a©eK6 5PHIÖ aeº4 FOMEG  bZeZ6 	ËGALPH4 ‡eß4  7DELb%ee®4  eEPSILOI#3c^e6  PcoI1  
mcÏ 0ÐGREEK SMALL LðETTER TAU
    0x03c6: @0ed, ò #  GREEK SMALL L2 3PHI2 B207f2 %fc2 úSUPERSCRIPT LATIN> N< "a7< %9e< ¥PESETA SIG' 2219' %f9' ô BULLET OPERATORR 321a+ b+ ¶SQUARE ROOT' e' eµ …INFINITY$ 2v %efK ¶INTERSECTIOž "48L %f7( õ ALMOST EQUAL TOS #61+ 0+ {IDENTIC( 4( 3( ÏLESS-THAN ORY  51 21 GREATER4 23104 aV0REVà YD NOTƒ#32- %f4a �TOP HALF DGRALç $32ç 5- oBOTTOM0 #50] c] öBOX DRAWINGS LIGHT HORIZONTi 2502Ã b(9  1VERb  250c7 'da  p  DOWN AND R = 7bt  = 5LEFw#51Øc <  /UPw fd®; 
u î c%{  2¶ bŸ
fA 	� 2� �»  2è 3‚ /c1±	8@ ‚ ‘ñ	Â F  5§	È oDOUBLE¨5bq: � l5àd¸ 4aSINGLEwª N E 3î6=E 4 E V E ‚@ L 45Ÿ/b8ƒ r ƒ  ?Ç šbg~#WN4 D T Æ pbD ÂÆ  ˆ = ‚2UP o  ‹Sd‹(UPÂ C T † ácKÃ C < ðb: 0x00be,     #ð-  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
    0x255c: 0x00bd, . #B 2 B R B dB cB ? %UPB ; e; /c6; ˆVERTICALÅ NRIGHÆ fI 7I �  I Í #60I Í ™ I Ô "61B /b5‹ z ™#62H Ó áX � 3H 9� ? 	Ò  H A 4A /d1A (WN¡­HORIZONTALÓ 5J 2J �  YJ Õ 6J /cbJ  åQ DOWNaJ × 7C fC 
;A Õ 8H /d0H Ó 9H /caH E G� Ñ aA /d8A âL× bN R• œ f/ceœ Ý £ 
þG 8žd´öUPPER HALF BLOCK, ·Ê?LOW, ÄOLFULLR Å d+ )} 9© ð o©  91ALäFSHAD©9‡{MEDIUM ( ðeKDARK& a¡ f¡ ðTBLACK SQUARE
}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP862.TXT' with2 c; P.py.
c ±#"

import  cs

###` ²APIs

class ($ . 1):
í`def en ñ(self,input,errors='strict'):,  ãcreturno “.charmap_B = , †ing_map)m /dem -B 	m   m dtable)ø ÁIncrementalEå r ÀalEncoder):
ð    def encode(self, input, final=False):
*   preturn / ³cs.charmap_@ :  F �.errors, ðing_map)[0]

class IncrementalDeM  r( >cs. ~  ¨ d, ¨ '@ ¨   ¨ Xtableª óStreamWriter(Codec,ª  ¤ Dpassã  ORead9  	9 2###‹ðings module API

ý Ãgetregentry(7 
Žž UInfo(¯Õname='cp862', –!e=0 2().     i¼: 'r=µEKr/ J 	/ þ/ spr7=D# w“#  # 0)

IZ ping MapA0codáTmap =Àñmake_identity_dict(range(256))
° 5 ‘.update({Fð 0x0080: 0x05d0,ö #  HEBREW LETTER ALEF. 1. 1. 6BET- 2- 2- VGIMEL/ 3/ 3/ 8DAL^ 4/ 4/ &HE[ 5, 5, 6VAV- 6- 6- VZAYIN/ 7/ 7/ Hµ 8- 8- T- 9- 9- 6YOD‡ a- a- ‡FINAL KAÍb3 b3 	- c- c- GLAME� d/ d/ � 6MEMÂ e3 e3 	- f- f- ` &NU©9êeê	- éeéeSAMEKH½ 9ìeì	49ëeë¾ PÂ9îeî, îeî^ VTSADIÁ öeö/ öeö&QOi9öeö7RESK÷e÷ðSHIN
    0x009a:� 0x05ea,  ð#  HEBREW LETTER TAV
 p0x009b:- 50a2- –CENT SIGN% c% 3% [POUND& d& 5& ;YEN$ e$ E20a7$ kPESETA' f' 6019– ´LATIN SMALLÈ µF WITH HOOK« !a0: 50e1a :  A: VACUTE; 1; d; 	I; 2; f!v  O; 3; ®;  U; 4; ì 
N; GTILDì 5; d; eCAPITAc= 6= a³ öFEMININE ORDINAL INDICATOR_76 b6 oMASCUL7 87 f–÷INVERTED QUESTION MAR92 E23102 »REVERSED NOÛ aa- E00ac- $ $b±VULGAR FRAC� †ONE HALFî 3bX 4 gQUARTE%D˜î qEXCLAMAp 
ñ UE00abÄ ÿLEFT-POINTING DOUBLE ANGLE QUOTE s&0bE ORIGHF b6259À LF G SHAbk'25àlMEDIUM( X6259XLDARK& C6250.ÒBOX DRAWINGS ‚  4EICAL£b?E252477 P AND W@ D6256ì 	@ q 1 SIyA �H O?256¿ H Ç‰ X H aO2556Ð CDOWN| Í D n6255Ä	Ô D Ð €&56µD Ž× É ”?255YA 8 ¨6255]y Ä u ±6255å= %UP<x µ6255ì	; /UPwÂ6255}B uÐf: 0x2510,   ð*  #  BOX DRAWINGS LIGHT DOWN AND LEFT
    0x00c0: 0x2514, < !UP: RI ; 1; 3; ¦HORIZONTAL@ 2@ /2c{ 	· B 3B 1B 
�VERTICALÃ 4A /00ƒ 	z 59 3z F 6F /5e º fSINGLEÁ v DOUBLEK7I fI 8 I Z I 8I aI @ 9< < ÑNa> /69z MbA 6A 
 C cC Â — NÆ dB 5B | e: 6R| G fG 72UP óA Rd/68H ’  H ^ Qd%6/WN’ //65’ Ù” 75k#UP$á£ × 95	C œ C C/52Ð E B3E y Š V Š >/6bE ðI òC6CN † — N d œ U1iÜ�	ÚdQ0Q: 6 Ãçw M8w ¦FULL BLOCK& 08Ý¬LOWER HALF, 8�  ¯ + 9Ež , ðÀ2580,     # ð UPPER HALF BLOCK
    0x00e0: @3b1, ö #  GREEK SMALL LETTER ALPHA4 14 50df4 ZLATIN4 öSHARP S (GERMAN)? 2? 5393? s eCAPITAu GGAMMu 36 +c06 	© &PIg 41 ag 8SIGg 56 c6 	g 4 64 50b5› ¦MICRO SIGN� 7& 53c4& ÷ 	Z 6TAU2 82 +a62 )'PHö 94 /984 GTHET]a6 /a96 GOMEG6 b6 bÒ 
8DELj c4 E221ej †INFINITYø d$ <03cø 	*	ö e2 ‚\ gEPSILO’f6 6222ö §INTERSECTI( f$6226$ÅIDENTICAL TO¸ fLªPLUS-MINUSf62263ûGREATER-THAN OR EQU_ 6226oOLESS1 623232TOP é FGRAL½ ù6232å oBOTTOM0 õ%f7É‹DIVISIONë ø6224’oALMOSTâ  ñ&0b±  DEÉR ä6221¸ö BULLET OPERATORÖ Ù&0b¦ ¦MIDDLE DOT& ÉE221aÌ ˜SQUARE RO' ¼&07øÏSUPERSCRIPT  lfÔ60b2c < 'TWGÍ625abBLACK ” ¶ ¿'00( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (U d'\x00' ’00 -> NUL( ! 1! 1! õSTART OF HEADINGN 2- 2- 2TEXƒ W 3* 3* 0ENDU 	( 4( 4( pRANSMISƒ‚ 50 50 BQUIRp | 6$ 6$ µACKNOWLEDGEL 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  jc9& pHORIZONþ@TABUK�<'\n2 a2 •LINE FEEDŸ b( #ÙÐ0b -> VERTICAðL TABULATION
    '\x0c'
 ó #  0x000c -> FORM FEED& r$  & d& æCARRIAGE RETURR e. R e, “SHIFT OUTR :x0f& f& IK )10%  10% ôDATA LINK ESCAPER *11- 1- öEVICE CONTROL ON/ 2/ 2/  5TWO^ 3/ 3/ 6HRE` 41 41  EFOURa 50 50 öNEGATIVE ACKNOWLEDGa 61 ö6 -> SYNCHRONOUS IDL- 7- 7- õ
END OF TRANSMISSION BLOCK” 86 86 eCANCEL# 9# 9# Y eMEDIUM* a* a* –SUBSTITUTª b' b' ê
´1´ÆILE SEPARATOVdN ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2ÆCSPACô !" »aEXCLAM­C MAR•"- ¹LQUOT+ #+ µ£NUMBER SIGh$( ¬HOLLA( %( ¤wPERCENTQ &) œ‚AMPERSANV1"'"y•“APOSTROPH(M †òLEFT PARENTHESISf)- �ORIGH.  *. ”sASTERISq+% ’GPLUSó ,& •RCOMMA› -" Œ³HYPHEN-MINUÄ .) ‰’FULL STOPO /& ‚TSOLIDJ >b3{“DIGIT ZERÝ8' €' 2/& y& )&& t&  ( t› ' sO 3FIV$
' q' 2SIX3& q& 3EVEõ( r( EKP ú( m( $NIk:ª3f4COL†;" cGSEMI& <& c—LESS-THANŽ=+ À  0x003d -> ðEQUALS SIGN
    '>'   ÷
#  0x003e -> GREATER-THAN. ?. f. ÒQUESTION MARKX @*  40* ÒCOMMERCIAL AT* A* 1* òLATIN CAPITAL LETTER A3 B3 23 B3 C3 33 C3 D3 43 D3 E3 53 E3 F3 63 F3 G3 73 G3 H3 83 H3 I3 93 I3 J3 a3 J3 K3 b3 [L3 c3 Lf M3 d3 M3 N3 —LO3 3 Of P3 5'3 P3 Q3 0Q3 R3 0R3 S3 0S3 T3 0üU3 0Uf V3 0V3 W3 0W3 X3 0X3 Y3 0Y3 Z3 0Z3 [3 0óEFT SQUARE BRACKEb$\\1 à5-ãREVERSE SOLIDUÁ]+  , &ORIGH] ^1 $óCIRCUMFLEX ACCEN‹ _. cOW LIN`% 6YGRAVEN a) LSMAL5b1 	1 3c1 	1 1d1 	1 /e1 ÿ	1 f1 ý	1 +ðg'        #  0x0ð067 -> LATIN SMALL LETTER G
    'h'   Ÿ#  0x00681 H1 i1 91 I1 j1 a1 J1 k1 b1 K1 l1 c1 L1 m1 d1 M1 n1 e1 N1 o1 f1 O1 p1 /701 P1 q1 11 Q1 r1 21 R1 s1 31 S1 t1 41 T1 u1 51 U1 v1 61 V1 w1 W1 x1 X1 y1 Y1 z1 Z1 {1 óEFT CURLY BRACKEU|/ ÒVERTICAL LINEY }* ORIGHZ ~0 CTILDR B\x7f% N7÷TDELET# Pu05d0% # 8édHEBREW�BALEF¤ \/ 1/ ç
/ Bü . 2. ä
. CGIME	0 30 ã
0 9DAL` 40 â
0 Hê 5- Þ
- #VAª‹ 6. Û
. CZAYIb0 70 Ú
0 H¹ 8. ×
. T. 9. Ô
. 7YOD£a. Ñ
. ˆFINAL KA×b4 Ô
4 
. c. Ó
. HLAME’ d0 Ù
0 ’ #MEãPe4 Ý
4 
. ëÆé
. b 'NU²eú9ú 
. ù9ù SSAMEK™ Á ðe2'   #  0x0092 -ü > HEBREW LETTER AYIN
    '\u05e3'   #  0x0093 -/ ‡FINAL PE3 43 43 	- 5- 5- ` WTSADIc 66 66 0 70 70 7QOF^ 8. 8. GRESH/ 9/ 9/ )SHRa/ a/ 3TAV] 0xa2, €b. „CENT SIG¦!xa¤& c& ZPOUND' k' d' 8YEN% Iu20a,e% iPESETA( 1019œ f( ´LATIN SMALLN´F WITH HOOKÕ )e1Õ /a0; A; DACUT^:xed< 1< I<  f'/a2< O< µ<a	ï  U< ð <  N< ETILDð d< !< eCAPITAi> a¶ )ÁFEMININE ORD¼”INDICATOR¡b7 0oMASCUL8 f�:ôINVERTED QUESTION MARPu23105 Ga>»REVERSED NOéc, †=% b#4±VULGAR FRAC„ tONE HALõ+xbZ C5 eQUARTE+a Tó qEXCLAMAr ö :xabÈ eþLEFT-POINTING DOUBLE ANGLE QUOTF bF ƒORIGHG Au259Å ƒb� G E SHA‹ ( òb{mMEDIUM) jQ hLDARK' 0P SáBOX DRAWINGS L…  ?CICALžHu252abO8 P AND ]A 6ñ T	A s 1 SI€B –I 	Â _I Ï‹ Y I 5Ñbq	I CDOWN~ Ð E áw~E Ó ÀE AND LEFT Dñ!OUBLE
    '\u2563'   #  0x00b9 -> BOX DRAWINGS D0 ö VERTICAL AND LEFTB (51B aB 9 79 b9 ODOWNw d> c> /UP< c< d< $UPø ï X SING8(5bC eC 3  S  (10C fC oLIGHT ÿ '14= /c0= þ RJ y 3< 1< ¦HORIZONTALA 2@/c2A º C 1C 3C 	wÆ 0?/c4B | 3| 5: 	| G (5eƒ6G A 	Ä 
(5fJ 7J Ž –J [ š(5aJ 8J A 5Øƒ | (69| 	| R(66B D 	�LÉ 5C E~ 	[; 	~ H c#UP’_B ['68Sd(
ëI Z6d55 ” 5” ?K * Ÿ– 5tdG
ß ±9ï	#I
lD ž D 2Ó SÓ F �dRF { dF W Œ 6›ðd7 -> BOX DRAWING÷@S VERTICAL DOUBLE AND HORIZONTAL SINGLE
    '\u256a'   #  0x00d8 -> BOX DRAWINGO 9 O e O (18O ,9 O �LIGHT UPH FLEFT; (0c; a; ADOWN= RJ > 8y b> §FULL BLOCK' 4e c' ­LOWER HALF- 	’ d- ?EFT, (90Y e, ¢ - 8- f- ?UPP† G03b1Z  e0- ó	GREEK SMALL LETTER ALPHAè 0xdf3 × e15 ZLATIN5 óSHARP S (GERMAN)@ Pu0393B  e2@ u @CAPIHw DGAMMw Hu03cÙ &e37 	¬ &PIi ai 42 i 9SIGi 	7 57 	i 5 0xb5Ó 65 ¦MICRO SIGN“ c$ e7' ü 	\ 6TAU3  a6\ /F3 Æ 'PHû 9³e,5 GTHETd(a9l (7 GOMEG7 bÖ !7 	Ö 6DELl H221el /†INFINITYý cý 'Z  	û Œ0.3  eEPSILOš9222û 8¨INTERSECTI) 64f4BIDEN#TO¼ x[f(©PLUS-MINUS1226Aµ fõATER-THAN OR EQUAL a Hu226wfOLESS2 (32Df2TOPH î CGRALÁ Iu232ê 	oBOTTOM1 0xf7Ñò ‹DIVISIONð 4 flALMOSTç !xb³ V  DEÓT 1Âfôó BULLET OPERATORÛ +xbª é–MIDDLE DO8(21ÂfÙ—SQUARE RO( !07¿ÌÏSUPERSCRIPT  z:xb26ä= $TWTAu25ai ÝbBLACK — á ' 5ÏóNO-BREAK SPACE
)

### Encoding Map

e ð_map = {
    0x0000:� 0x0000,  €#  NULL
  "1:  1  öSTART OF HEADING, 2, 2, FTEXT) 3) 3) 0ENDS 
' 4' 4' ¶RANSMISSIONV 5/ 5/ VQUIRY# 6# 6# ¶ACKNOWLEDGE' 7' 7' (BE8  8  wACKSPACE 9% 9% ùHORIZONTAL TABULATÀ a1 a1 –LINE FEED› b% b% oVERTICT c/ c/ KFORMT d% d% çCARRIAGE RETURde+ e+ ‡SHIFT OUßf% f% II "10$ 1xö DATA LINK ESCAPJ1„1„÷DEVICE CONTROL ON. †1†. 5TWOP1‹1‹. 7HRE^ ”1”0 FFOUR_ ”1”ŸNEGATIVE z1¡1¡÷ SYNCHRONOUS IDL‹ ¦1¦Ff BLOCK‘ »1»VCANCEò1¸1¸W fMEDIUMK °1°—SUBSTITUT¦ ±1±ß¤1¤ÇILE SEPARATON©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶
õ2«2«aEXCLAMëF MAR‹2©2©OQUOT* ¥2¥¦NUMBER SIGT2œ2œLOLLA' ”2”{PERCENTO Œ2Œ†AMPERSAN�2…2…–APOSTROPH2v2võLEFT PARENTHESISW2€2€ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3k3k–DIGIT ZER¿3p3p& 3i3iÀDIGIT TWO
  “  0x0033:  ,  ð #  DIGIT THREE
 ' 4' 4' FFOUR& 5& 5& 'IVL 6& 6& 6SIXK 7% 7% FEVEN' 8' 8' VEIGHT' 9' 9' 7NIN™ a& a& GCOLOn b! b! KSEMI% c% c% ×LESS-THAN SIGO d* d* kEQUALS' e' e' GREATERT f- f- ÕQUESTION MARK"40) %40) ÆCOMMERCIAL A<#41) 1) öLATIN CAPITAL LETTER A[ 22 22 B2 †/432 C2 ‘4‘– D2 �4�2 4©4©2 Fd ¶4¶2 G2 Á4Á2 H2 Ì4Ì2 I2 Ø4Ø2 J2 é4é2 Oö4ö&Ld þ4þd M2 	4	2 b442 Od 552 P2  5 Q2  5 Y5 5 Sd  5 è5 5 Ud  5 V2  5 W2  5 :5 5 Yd  5 Z2  5 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸5RË[ 5÷CIRCUMFLEX ACCENˆ Àf: 0x005f,  ó   #  LOW LINE
    0x0060: ,  $ ÆGRAVE ACCENT( 1( 1( öLATIN SMALL LETTER A0 20 20 	B0 30 30 	C0 40 40 	D0 50 50 	60 60 	F` 70 70 	G0 80 80 	H0 90 90 	I0 a0 a0 	J0 b0 b0 	K0 c0 c0 	L0 d0 d0 	M0 e0 e0 	N0 f0 f0 	O0 7ø/700 	P0  7 
Q0  7 
R0  7 
S0  7 
À7 7 
U`  7 
V0  7 
W0  7 
X0  7 
Y0  7 
Z0  7 ÷EFT CURLY BRACKENþ7þŠVERTICAL_7÷7÷ORIGHX ö7öFTILD—7ç7çVDELET" aÙf" ×NO-BREAK SPAC* Óaœ  INÇ öED EXCLAMATION MARøaØ9( (F SIG�aÍ9[POUND& “9€ ;YEN$ Ça‡ö
FEMININE ORDINAL INDICATOMaÍaGÿLEFT-POINTING DOUBLE ANGLE QUOTê äaB:NOTŸ bmÆkDEGREE' jf=«PLUS-MINUS+ `fæSUPERSCRIPT TWÃb@eVMICROQ À0x00b7: 0x00@fa,  à#  MIDDLE DOT
 €0x00ba:  &a7& öASCULINE ORDINAL INDICATOR7 b7 f7 öRIGHT-POINTING DOUBLE ANGLE QUOTATION MARKF cF cF ±VULGAR FRAC0  ON> GARTE} d7 b7 
FHALFk f4 84 ÑINVERTED QUESm 	� #d12 52 õLATIN CAPITAL LETTER N WITH TILDEo do +e1= ESMAL; õSHARP S (GERMAN)? e| 0? 	Az FACUTz ez 
I; fv 4v 	ð #f3-2; 	Ov 7; %f6; PDIVIS.ESIGNf«3) ‘	TUd  2192d 9¯;  F; 5HOO£#39Ù eÙ \GREEKTGAMMA« 2398p %e9« 6 FTHET6 al €6 7SIGl #a6l Ú6 5PHI  #a94 4 FOMEG  b e–6 	�GALPH4 4j ¬4  7DEL#b54 e>	h eEPSILO33c06 j  Pcoá1  
mcÏ /4  5TAUkcŸdÍ 	�#5dÉ 8gdHEBREWr5ALEÙ5§8ð
. %BEî#5d8Î
- TGIMEL¼ #5d"8S
/ 8DAL^ 8À
/ H§#5dä8}
, 6VAVˆ D8#
- EZAYI
#5dR8¥
/ Hµ «8?
- T- 88Ø
- 6YOD¶ °8e
- F]'KAÍW8.
3 	- >8>- ÀETTER LAMED
°    0x05dd: @08d, ð #  HEBREW LETTER FINAL MEM
  3 e3 e3 	- f- f- ` 5NUN` "e03 /903 	- 1- 1- fSAMEKH] 20 20 7AYI‹ 3. 3. ¾ &PE` 42 42 , 5, 5, ^ VTSADIa 65 65 / 7/ 7/ 6QOF\ 8- 8- 7RESK9. 9. (SHKa. a. 3TAV‰ 32076%fc- ôSUPERSCRIPT LATIN SMALL§´420aò Ÿ¥PESETA SIG' #21¾ f¾ ô BULLET OPERATORŽ #21» &fbŽ ¦QUARE ROOT' eµ …INFINITY$ 2v e¶INTERSECTIOž 4Šf·õ ALMOST EQUAL TOS 6f/{IDENTIC( šfÌÏLESS-THAN ORY  Ÿf+GREATER4 #31¼aV0REVà YD NOTƒ#32- f,�TOP HALF DGRALç $32ç -oBOTTOM0 #50] c] öBOX DRAWINGS LIGHT HORIZONTi #50"b(9  1VERb  250càdà7   DOWN AND R = 7b= 	5LEFw#51Øc <  /UPw fd®; 
u î c%{  2¶ bŸ
fA 	� 2� �»  oè 3‚ c:B  8@ ‚ ‘a	Â F  5§€	† oDOUBLE¨5bq: � ð 
    0x2552: 0x`00d5,  ð#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
1 ï0x2553: 0x00d6E 4 E V E 4E /c9E  t ‘ Š > 5> /b8> 
È >LEFÇ 6D 7D Ç D Æ 7D bD 
Æ  D Å 8= /d4= /UP‹9C 3C Â ÎÃ aC cKÃ &UPÌÂ b< /be n <  ý LcB dB Á B R „ dB cB ? À  B ; e; cÉ�VERTICAL‡fI KI � ÑZ ’ #60I Í P I B 1B bâ; G™#62H Ó  ]Ò -bè—  Ò  H Ñ )/d1à
ë¬HORIZONTALl65/d2J Ï J -” ;c÷J C :/cf� 
ýA Õ E0H Ó J/caH E G� Ñ HdHâLyG × ZdRN d œ fc¨Ý £  …N G 8žd´öUPPER HALF BLOCK, ·Ê?LOW, ÄOLFULLR Å d+ )} 9© ð ÀRIGHT HALF Bð	LOCK
    0x2591: 0x00b0, ö  #  LIGHT SHADE' 2' 1' lMEDIUM( 3( 2( KDARK& "a0& %fe& ðTBLACK SQUARE
}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP863.TXT' with2 c; P.py.
c ±#"

import  cs

###` ²APIs

class ($ . 1):
`def en ñ(self,input,errors='strict'):,  acreturno “.charmap_B = , †ing_map)m /dem -B 	m   m dtable)ø ÁIncrementalEå r å  h Ã final=False*  W.Q
?[0]¨  D ¨  ~  ¨ ö e¹¨ !@ â ¨  Oª ÑStreamWriter(J,Ð8cs. ¤ 5pasƒ ORead9  	9  ÌFàs module API

ý Ãgetregentry(7 
�ž UInfo(¾Õname='cp863', d !e=0 2().     id: .r=]/ J 	/ ä/ spr7=D# w“#  # )Z  ~0MapA0codáTmap =Ïñmake_identity_dict(range(256))
° 5 ‘.update({F ‚8%c7öLATIN CAPITAL LETTER C WITH CEDILLA? É+fc? ESMAL= U= –DIAERESIS? á/e9? 	E? DACUT3008ôeô¹ 	z A; ¦CIRCUMFLEX{ 4c@ ù B 5B eÅ;‚ GGRAV½ 6; %b6ø ÆPILCROW SIGN¥ 7( ež	c œ8= ae " ]"9@ b@ Ü àa: 0x00e8,    ñ  #  LATIN SMALL LETTER E WITH GRAVE
    0x008b: 0ef, ; I; –DIAERESIS? c? e? ¦CIRCUMFLEX@ d@ E2017@ çDOUBLE LOW LINª e+ E00c0+ å eCAPITAç A¬ ç f= ah ÅSECTION SIGN� "90( /c9e LFACUT¢ #91= 8= 
¢ #92= a= L "93B +f4B 	O@ 4@ +cb@ aü #95A LA N"96A f‚ 	Â UÂ 7@ ¾@ 8; a=‹CURRENCY"9) d) ‡haB chè h ´%a2A KCENT¨ š%a3% [POUND& €<00d2³Œ 4’d¯= s—&19Ê M	±FñEHOOK©a©%a6ß ¦BROKEN BAR& ’b­³0 AC2( }f-ˆ  ÓB ; v¸	Ã @; qa0íaUb% vCEDILLAƒ 7b¾ öSUPERSCRIPT THRE¥a$a¥VMACROacÔ×Ç× a$6231«»REVERSED NO©aa$ ò%bdî¢VULGAR FRAÇ†ONE HALFbX 4 gQUARTE3bþ 7 Q 9 aaÓEFT-POINTING Ú±ANGLE QUOTA�7MARØ&0bE ORIGHF À MARK
    0xà00b0: 0x2591,  ð #  LIGHT SHADE
 c0x00b1' 2' lMEDIUM( 2( 3( LDARK& 3& 0N ÃBOX DRAWINGS‚ †VERTICAL… 47 %24] 7 – AND LEFT@ 5@ 6ì 	@ q u SINGLEA g DOUBL6H ¿ H 8 H X � 7H /56Ð CDOWN| D 8D 5D x D ˜ ˆ 9D 6µ	/  × YaA 5YA y b8 7½  x u c= d= 
%UPø x d; c; /UPweB bB ufB /10B †û cµ1	
ú RÏû cÉ3; ‡HORIZONT„cá2;· B ý1B 
	mÃ 0:
z  3z F þ/5e¹º Á T‹ÿfI ? I Z I aI @ ü5< ˆ� z ù/69z M6
C 6Â —GÆ B | 6R| G 6(UP“A Rd/68�ØÀUBLE AND HORðIZONTAL SINGLE
    0x00d1: 0x2564, ó #  BOX DRAWINGS DOWN4 „ AND HORJ HDOUBJ 2J 5J 4 J ” 3J /59J 7UP H SRIGHT£ × 4C 8C u ‹ C T C 5C 2C E 6E 3E y Š › Š 7E /6bE ˆVERTICAL¨N 8N aN 8 — N ­ œ 9N 1iLž!UPG FLEFT: a: /0cˆ : f y_= b= 8w ¦FULL BLOCK& c& Ý¬LOWER HALF, d, �  ¯ + e+ %90º ž , f, 8, ?UPPƒ  e0, E03b1X õ	GREEK SMALL LETTER ALPHAã eÀE00df4 ZLATIN4 vSHARP S6 ¬6039—j @CAPI&l GGAMMl ˜603cÌ 6 	  &PIg †?03ag 8SIGg y<03c6 	g 4 h600b}¦MICRO SIGN� I603cÁ  6TAU2 -E03a6_2 )'PHö 6039œ4 GTHET]603aõ6 GOMEG6 ?03bÒ 
8DELj 521eÔ †INFINITYø <03cø 	„	ö '03‚À 	2 gEPSILO’&22ö §INTERSECTI( f6226BIDEN÷%TO¸ fCªPLUS-MINUSf62263øGREATER-THAN OR EQUAL _ '22.OLESS1 623232TOP) é FGRAL½ ù6232å oBOTTOM0 õ%f7ÉpDIVISIO³ð GN
    0x00f7: €0x2248,  ð#  ALMOST EQUAL TO
 €0x00f8:  %b0+ ¶DEGREE SIGN' 9' E2219' ö BULLET OPERATOR+ a+ E00b7+ ¦MIDDLE DOT& b& E221a& ˜SQUARE RO' c' 607f' ÷UPERSCRIPT LATIN SMALL LETTER ´ d< O00b2< 'TWe+ 625abBLACK ” ¶ f( '00( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (U `'\x00'�1 # ‰¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- 2TEXƒ x 3* 3* 0ENDU 	( 4( 4( ¢RANSMISSIOx X 50 50 UQUIRY¦ 6$ 6$ µACKNOWLEDGE( 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  c9& €HORIZONT0ABUKÅ n2 a2 •LINE FEEDŸ b( »b& oVERTICV :x0c0 c0 HFORMV r$ ® d& æCARRIAGE RETURme. ‚ e, †SHIFT OUëf& f& IK 1ˆ1ˆõ DATA LINK ESCAP™1”1”öDEVICE CONTROL ON/ 
–1–/ �J'\x1›1›/ 6HRE` 
¤1¤1 2FOU¥ a 
¤1¤ŸNEGATIVE ‰ 1±1±ö SYNCHRONOUS IDLŽ 
¶1¶Z2d BLOCKM1Ë1ËUCANCE
)19È1ÈY eMEDIUMM a* À–SUBSTITUTª 
Á1Áê
´1´†ILE SEPAû Vdu ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2Æ!" »ó EXCLAMATION MAR•"- ¹LQUOT+ #+ µfNUMBERL-'$( ¬HOLLA( %( ¤wPERCENTQ &) À 0x0026 -> AðMPERSAND
    "'"   ñ#  0x0027 -> APOSTROPHE' 0'('#   ' 8' òLEFT PARENTHESIS- )- 9- ORIGH.  *. a. ‚ASTERISKS +% b% ’PLUS SIGN& ,& c& RCOMMA" -" d" ³HYPHEN-MINUÄ .) e) ’FULL STOPO /& f& TSOLIDJ 0$  30$ ¢DIGIT ZEROK 1' 1' #ONˆ2& 2& #TWL 3& 3& 3HREN 4( 4( BFOUR› 5' 5' #IVN 6' 6' 2SIXM 7& qCSEVEÌ8( r( EKP 9( m( $NI9:' fCCOLOq ;" cGSEMI& <& c—LESS-THANŽ=+ lXEQUAL¶>( k|GREATERV ?. sÃQUESTION MAR4@* 4y ’ERCIAL ATDA* |óLATIN CAPITAL LETTER IB3 ‰3 Bf C3 –3 C3 D3 ¡3 Ñ-'E3 ­3 ¹F3 ¹3 F™ G3 Æ3 G3 H3 Ñ3 H3 I3 Ü3 I3 J3 è3 J3 K3 ù3 [L3 1Lf M3 f M3 N3 3 ÅO3 3 -P3 5'3 ÷Q3 0QÌ R3 0wS3 0¶T3 0ÀATIN CAPITALð LETTER T
    'U'   ô#  0x0055 -> LATIN CAPITAL3 U3 V3 63 V3 W3 73 W3 X3 83 X3 Y3 93 Y3 Z3 a3 Z3 [3 b3 óEFT SQUARE BRACKEb$\\1 bc0 ò REVERSE SOLIDUS\ ]+  , d, ?IGH] ^1 e1 óCIRCUMFLEX ACCEN‹ _. f. ‚LOW LINE„ `%  60% YGRAVEN a) 1) ;ESMAL9AZ b1 21 B1 c1 31 C1 d1 41 D1 e1 ÿ	Ä f1 ý	1 Fb g1 û	1 G1 h1 ù	1 H1 i1 ÷	1 I1 j1 õ	1 J1 k1 ó%	1 K1 l1 ô L1 m1 ù1  M1 n1 ù1  N1 o1 üÄ O1 p1 7b  P1 q1 Q1 r1 R1 s1 Pt1 "u1 v1 w1 	x1 y1 z1 {1  ZCURLY|/ `VERTIC_|}* R Z  ~0 CTILD°ð\x7f'     #  0x00ð7f -> DELETE
    '\xc7'
   #  0x0080# ôLATIN CAPITAL LETTER C WITH CEDILLA@ *fc@ 1@ ESMAL> U> ”DIAERESIS@ *e9@ 2@ E@ 6ACU¼ *e2< 3< A< ¤CIRCUMFLEX} cA 4A ý C *e0„ 5C 	 A EGRAV|*b6< 6< ÄPILCROW SIGN¨ e¥7) ¥	e £*eag 8> c'*ebA 9A ä8@ a@ 	$*ef< b< Iä| e@ c@ ý Au201~!dA åDOUBLE LOW LINÑce, ¨P	ë ah  ‹®ySECTIONc49´Ó	6cŽ9²¥ > 	¥ cM9°> R9xf4“9·OÓA c�9·Â cV9¶Æ Xf„ ¼ë	“øÅ fÅÔA 	…aBÒ‰CURRENCY+d* »é ndâ9¾C « nag9ÄICENT« *a3ªYPOUND' d8�y� 	:d·¢Í ¹Au019Ð 9§� 	úF¿DHOOKÈaña¹¤BROKEN BAR' bµa¢Ä0 AC8) f3a�‹ ÀTTER O WITH ðACUTE
    '\xfa'
 ù #  0x00a3 -> LATIN SMALL LETTER U WITH < *a8< 4< ”DIAERESISb b& 5& uCEDILLA$ 3J 6$ õSUPERSCRIPT THRE´ *af. 7. dMACRONQ *ce# 8# × eCAPITAÙ IÙ £CIRCUMFLEXC Pu2310E 9C õREVERSED NOT SIGq  ac,  Ha. % *bd% b% ó	VULGAR FRACTION ONE HALFˆ +xbZ c5 uQUARTER8 d8 X : ³*ab¨ e; ñLEFT-POINTING DOUBLE ANGLE QUOTA½ EMARK� F fF ORIGHG Pu2591� ˆ b0G LG T SHAD ( 2( 1( mMEDIUM) oQ 2) LDARK' 0P ÒBOX DRAWINGS … ƒVERTICAL÷ Xu2524ˆ 8 P AND ]A 6ñ 1	A s 1 SI€B –I 	Â VI Ï‹ Y I (56Ó q	I CDOWN~ Ð E 5E “E Ó 	¼•E ™#Ì 	^©B 	9 7À ½9 w  ýuÆ> %UPAz < Ê	< /UP}ŽC ÒC {	bÏ	C ÿ 1cÅ=  þ &ÿ 3< Ù< ‰HORIZONT’@cñA  º C 1C ÄÆ 0Oc| 3| y	óG À'\u255e'   #ò<  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
    '\u255f'   # J 7J 9 J [ J aJ 8J A &UPD = 4= 9= ODOWN? (69? a? | ¦HORIZONTAL� (66B bB � D 0D cD �–‡ 5C dC ~ c~ e; 	~ H 7H fH (UPVB ['68I /d0I  	I Z6-d1I •5 K a `(65” 2K 5 K a K 5t-d3K #UPI ~D 	#4D 3 D ž ˆ 2Ó 5D Š F 3F RF 5 Œ � Œ (6bF N®O SdSÌ9 ™ O ¯ ž 1neL"%FLEFT; 0]da; % Íd> 8y ]§FULL BLOCK' 	è@­LOWER HALF- 	’ * ³ , 9Vd¢ - 8-  ?UPP† G03b1ñeäó	GREEK SMALL LETTER ALPHAè 0xdf3 teÐZLATIN5 sSHARP S7 Hu039£e¼l eCAPITAn DGAMMn Hu03cÐ e¨7 	£ &PIi ai –2 i 9SIGi 	7 ‰7 	i 5 !xb�x¦MICRO SIGN“ cÀx00e7 -> GREõ-EK SMALL LETTER TAU
    '\u03a6'   #  0x00e8 -> GREEK CAPITA5 6PHI5 (985 95 VTHETA7 (a97 a7 GOMEG7 (b47 b7 	Ö 6DELl H221e5 c5 †INFINITY‘ cý d% ý 	Z 	û (b5X e3 tEPSILONj 9222û f7 ¨INTERSECTI) '61` !f0) ³DENTICAL TOR !xb' ¹ f1) çPLUS-MINUS SIG~ 6µ  f2, øGREATER-THAN OR EQUa Hu226w f35 OLESS2 8320¼ 42 �TOP HALF î CGRALÁ Au232Ã z f5. oBOTTOM1 0xf7] ò 61 ‹DIVISIONð 4  f7* lALMOSTç !xb³ V  DET 1Âfôó BULLET OPERATORÛ +xbª é£MIDDLE DOT' Pu221aÓ Ù—SQUARE RO( 807f( ÌúSUPERSCRIPT LATINãü0xb2; à ä= $TWTAu25a‘ ÝbBLACK — º x' U ÏóNO-BREAK SPACE
)

### Encoding Map

e �_map = {Q  y100:�000,š �2NUL-  1  1  öSTART OF HEADINGL 2, 2, 2TEX€U 3) 3) 0ENDS 
' 4' 4' pRANSMIS‚ 5/ 5/ BQUIRxy 6# 6# ¶ACKNOWLEDGEJ 7' 7' (BE8  8  2ACK€ Gl 9% 9% pHORIZONÝ@TABU?‚1 a1 a1 –LINE FEED› b% b% 3VER¥T  c/ c/ KFORMT d% d% âCARRIAGE RETURÕ¤ e+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAP�1„1„÷DEVICE CONTROL ON. †1†. z Ñ 1‹1‹. 7HRE^ ”1”
0 À FOUR
    0x€0015: 0x  ,  ð	#  NEGATIVE ACKNOWLEDGE
 ( 60 60 ÷ SYNCHRONOUS IDL, 7, 7, ö
END OF TRANSMISSION BLOCKa 85 85 fCANCEL" 9" 9" W fMEDIUM) a) a) —SUBSTITUT¦ b& b& WESCAP" c" c" æFILE SEPARATORr d* d* _GROUP+ e+ e+ oRECORD, f, f, OUNIT*  "20* %20* FSPACÌ #21! 1! €EXCLAMATŒ6MAR‹#22, 2, OQUOT* 3* 3* µNUMBER SIGN#24' 4' \DOLLA' ”%25' {PERCENTO Œ2Œ–AMPERSANDt …2…—APOSTROPHv2vöLEFT PARENTHESISR €2€ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3k3k¥DIGIT ZEROI 3p3p& &ON~3i3i% 'TWJ d3d% 7HREL d3d— 6FOU©3c3cM 7FIVL a3a& 6SIXâ a3a% 6EVEü3b3b' E<N ]3]' (NI1V3VGCOLOn S3SKSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cNQUES‡4i4i ú•ERCIAL AT<4l4löLATIN CAPITAL LETTER 44y4y2 Bd †4†2 C2 ‘4‘2 ³4�4�2 ©4©4©2 ðF
    0x0047: 0x`0047,  ð#  LATIN CAPITAL LETTER G
 ‚0x0048:  2 H2 92 92 I2 a2 a2 J2 b2 b2 K2 c2 c2 L2 d2 d2 M2 e2 e2 N2 f2 f2 O2 "502 /502 P2 12 12 Q2 22 22 R2 32 32 S2 42 42 T2 52 52 U2 62 62 V2 72  W2  /58d X2  5 Y2  5 Z2  5 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸5ORIGH[ 5÷CIRCUMFLEX ACCENˆ 5uOW LINEÛ 66\GRAVEL 6÷6÷ESMALéAX õ6õ	0 B0 ó6ó	0 C0 ñ6ñ	0 D0 ï6ï	0 í6í	0 F` ë6ë	0 	6é6é	0 6ç6ç	0 6å6å	0 6ã6ãË	0 6ä6äû	0 ÿ6é6é0  ý6é6é0  û6ì6ìÀ ù7ø7ø`  ÷7 7 À #  LATIN SMó	ALL LETTER Q
    0x0072: , Ç #  LATIN SM0 R0 30 30 	S0 40 40 	T0 50 50 	U0 60 60 	V0 70 70 	W0 80 80 	X0 90 90 	Y0 a0 a0 	Z0 b0 b0 ÷EFT CURLY BRACKENc. c. ÖVERTICAL LINEW d) d) ORIGHX e/ e/ GTILDP f! f! VDELET" "a0" f" ×NO-BREAK SPAC* £9ó •CENT SIGNÁ a˜9ê [POUND& Ž9Î‹CURRENCY) W%a0À –BROKEN BAaM8Ä {SECTIONN Ea†DIAERESI*aÚaTñLEFT-POINTING DOUBLE ANGLE QUOTAj FMARKñaO,NO+œaVMACROMbœ'jDEGREE× #b1Ã1%«PLUS-MINUS+ Äf`õ SUPERSCRIPT TWOÃ bÊaÒ	+ 6HREbÑaƒ €ACUTE AC$U WeU [MICRO¦ ö8& {PILCROW( øff–MIDDLE DO}böËvCEDILLA— ôAwõbõü¢VULGAR FRA� ON3FARTE¾bôaX7 FHALF± ùaÈ4 T¡1 QUm ßcT8ßiPCAPIT�›¶A WITH GRAVçc?8A¦= –CIRCUMFLE˜c³8ÑB C ©cÌ9h? E? ¾ 9| = Árc!%92ez 	û À0x00cb: 0x00@94,  ð#  LATIN CAPITAL LETTER E WITH DIAERESIS
- €0x00ce:  /a8A IA ¦CIRCUMFLEXB fB /95B ƒ #d4A 9A Oƒ #d9B dB UB UGRAVEÀ #db= e=  #dcB aB  C+e1A ESMALÄfSHARP »"e0w 8y	6 Aô #e2; 3q 	; ò  #e7@ 7@ 	C{ uCEDILLAq#e8= /	¸ ²
¬eé/82x 	; FACUTç#eav év ó '8¦@ ãeh/8cº 	fe#/8b@  "f3þ a9
b
9fŸ,
; 9 f,%f6º ÕDIVISION SIGNfÝ9U
ÄfÝa¤ 
; ß Ø9Ÿ B	Ø; ß ý8¼
@ ™#19Š%9f  FJDHOOK/#39ÓeÓ\GREEKûEGAMM}#39}eÇ6 FTHET6 al g6 7SIGl "a6ues6 5PHIÖ ae4 FOMEG  #b1j 0F6 	ÅGALPH4 ØeR4  7DEL#b5h ,4  eEPSILOÙ#3c©ež6  PcoÚ1  ÀSIGMA
    0xà03c4: 0x00e7,  ð#  GREEK SMALL LETTER TAU
 c0x03c62 d2 	3PHI2 B20172 82 õ DOUBLE LOW LINE+ "7f+ %fc] úSUPERSCRIPT LATIN› N< 3219< 9< ö BULLET OPERATOR+ a+ b+ ¶SQUARE ROOT' e' eŽ …INFINITY$ 2v %efK ¶INTERSECTIOž "48L fiõ ALMOST EQUAL TOS #61+ 0S kDENTIC( ¼%f3( ÏLESS-THAN ORY  5Y 21 GREATER4 23104 aV0REVà •D NOT SIGå #32- %f4a �TOP HALF DGRALç $32ç 5- oBOTTOM0 #50] c] öBOX DRAWINGS LIGHT HORIZONTi 2502Ã b(9  1VERb  250c7 'da  p  DOWN AND R = 7bt  = 5LEFw#51Øc <  /UPw fd®; 
u î c%{  2¶ bŸ
fA 	� 2� �»  2è 3‚ /c1±	8@ ‚ ‘ñ	Â F  5§î	È û: bq: � l5àd¸ 4aSINGLEwª N E 3î6=E 4 E V E ‚@ L 45Ÿ/b8ƒ r ƒ  ?Ç žbg~#WN4 D T Æ °bD ½Æ  ˆ = ‚2UP o  ‹Sd‹(UPÂ C T † ácKÀINGS DOUBLE ðUP AND RIGHT
    0x255b: 0x00be, ñ #  BOX DRAWINGS UP SINGLE< ¶LEFT DOUBLEB cB dB 2 B R B dB cB ? À  „ ; e; /c6; ˆVERTICALÅ Æ fI 7I � JZ ’ #60I Í ™ I B 1B /b5‹ GW› H 2H 8 H X H 3H 9� ? 	Ò 	¥"64A /d1A #WNG… ¬HORIZONTAL¦#65J 2J �  YJ Õ 6J /cbJ  å[ DOWN” 7C fC 
;‹ ¡ H 8H /d0H 2 ‰ 3H 9H /caH E G� A aA /d8A âL� ` N ZdR• Ý fc¨}  £ 
þ• 8žd´öUPPER HALF BLOCK, ·Ê?LOW, ÄOLFULLR Å d+ )} 9© ð ¸©  91ALåV SHAD©9‡lMEDIUM( ðeKDARK& a¡ f¡ ðTBLACK SQUARE
}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP864.TXT' with2 c; P.py.
c ±#"

import  cs

###` ²APIs

class ($ . 1):
í`def en ñ(self,input,errors='strict'):,  %creturno “.charmap_B = , †ing_map)m /dem -B 	m   m atable)ø Àss Increment alEncoder( Åcs.Increment Á):
    def e, ó
(self, input, final=False*  . sreturn U ƒcharmap_@ :  F �.errors, ÷ing_map)[0]

class Ž  DeM ¨  ~  ¨ d, ¨ '@ ¨   ¨ Xtableª ðStreamWriter(Codec,° 8cs. ¤ Dpassã  0Rea…9   	9 2###‹ðings module API

ý Ãgetregentry(7 
Že QInfo(Ù ¯Õname='cp864', –!e=0 2().     iJ: 'r=Ïw/ J 	/ ä/ spr7=D# w“#  # 0)

IZ ping MapA0codáTmap =Àñmake_identity_dict(range(256))
° 5 ‘.update({Fð 0x0025: 0x066a,kõ #  ARABIC PERCENT SIGN/ !80/ 50b0/ kDEGREE' 1' 7' ¦MIDDLE DOTM 2& E2219& ö BULLET OPERATOR+ 3+ § ˜SQUARE ROR 4' 5592R ÆMEDIUM SHADEO ö 6250Ç öFORMS LIGHT HORIZONTAL2 6Z 0Z 2 hVERTIC0 70 %3cŠ 0 O ANDo 8? /24? 7LEFT99 x ODOWNt a; 1; ã ? R(b: 3® !UP4 Vc9 1ˆ® 
ã d5 0¨ 5 ¤ e6 1¤ 
4 f4 8†Ø 	� 9!&3b( ÅK SMALL BETA79&E221e_ †INFINITY$ $E03c6$ P 6PHI+ $E00b1+ ÚPLUS-OR-MINUS£9+E00bd. ÆFRACTION 1/2V +700bn( 4( !&24,ö ALMOST EQUAL TO+ E00ab{  Dð POINTING GUILLEMEÑT
    0x0098: 0bb, ÷ #  RIGHT POINTING GUILLEME4 94 Efef74 òARABIC LIGATURE LAM WITH ALEF
 ö
HAMZA ABOVE ISOLATED FORMŒ aX 8X %[FINALU rb: NoneS  á –UNDEFINEDz c% dŸ +÷ æ eG c“ ?#  G Õ f°  a1i E00adi µSOFT HYPHENü  a2' Efe82' � WETTERÃDMADDÃ–  #a5J 4J J 6à 7% à3fe8nÞ ƒ å/8fÍ ?BEHÈaÈ/95; T; bC/99; H< c< =060YVCOMMAñÈ9
ñOJEEMÛ ½/a1  /HAfŸ ?feaK<  b0< K0660w õ-INDIC DIGIT ZEROæ bþ,66ª 	3 6ONE2 	<066		2 'TWd 3— 3— 	GTHREf 44 %	f FFOUR™ X<066:
3 'IVf 6f 6š 	6SIXe 72 Õ	e 7SEV;b]<066±	4 EPh X<066â	4 (NI™PdË" LÄFbP=061´†SEMICOLO	b@?febg OSEENbTb££ /SH= Ub= /ADx U=061¦ðQUESTION MARK
    0x00c0: 0x0P0a2,  Ð#  CENT SIGN
 å0x00c1: 0xfe80% öARABIC LETTER HAMZA ISOLATED FORM= 2= 1= ÿALEF WITH MADDA ABOVEM 3M 3M ” M 
4M 5M 2WAW™ L 5L /caL ›AIN FINAL68 /8b8 ?YEH„  MNITIK 7K dK i¥8< 9¥_BEH Iv 9: ’ TEÙORBUT"aC 7¹  C } b: >/TH¸ c; fu OJEEMó d; aó /HA-e: ê K; f; 9° ?DAL5#d0; &< ûaURaùdùabZ�dèbcOSEENždÖbd/SH< Æb*?SADv Èbí D: ·c{TNb¶cÁZ; ·cê œñd®cê /GH< °E00a6ÅõBROKEN VERTICAL BAR;d¤E00ac/ +NOœd�600fïŠDIVISIONÅd|600d) ¾MULTIPLICAT/ pcpå —ep=064/uTATWEELá e^dçF^†e]Î 
“?QAFªe[Ðdb,     #  ARð!ABIC LETTER KAF INITIAL FORM
    0x00e4: 0xfedf, h #  AR: ?LAM: 5: /e3: ?MEE; 6; 7; ONOONv 7; b; ?HEH: 8: d: ËWAW ISOLATED%9; %ÏALEF MAKSURAD aD f/Y¹ b: b¹ ?DADu c; /ccô ~AIN MEDd9 e9  GH; =FINQe: ® : if= /e1w T¥"f0< 7y oSHADDAè  f15 =065q 5 H) f2* Ofee5› ´› 3< 9< µ;  eÂ ; ÂfŸ/f0t 	´É f¥/f2A  ±8 ¢dy ´ £ddQÇ(£f; €IGATURE ÊQWITH ú 
 M_ABOVEBf·6X #Òd«¯ « "fÒdKê#Ôfìv  Ñv Õ625aÔÆBLACK SQUARE%cf: Non5 NóUNDEFINED
})

### Decoding Table

d  _t A = (P d'\x00'• ¬¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- ETEXT* 3* 3* 0ENDU 	( 4( 4( µRANSMISSIONX 50 50 UQUIRY$ 6$ 6$ ¢ACKNOWLEDGl 7( ð7 -> BELL
    '\x008'  ð#  0x0008 -> BACKSPACE
 2'\t$ $  & 9& óHORIZONTAL TABULATION2 n2 a2 “LINE FEED& 2x0b( X b& oVERTICV :x0c0 c0 HFORMV r$ ® d& äCARRIAGE RETUR¨ 2x0e. ‚ e, •SHIFT OUT¨ f& f& IK )10%  10% ô DATA LINK ESCAPR:x11- 1- öEVICE CONTROL ON/ 2/ 2/  4TWO° *13/ 3/ 6HRE` 41 41  EFOURa 50 50 öNEGATIVE ACKNOWLEDGa 61 ö6 -> SYNCHRONOUS IDL- 7- 7- õ
END OF TRANSMISSION BLOCK” 
Ë1ËeCANCEL# 9Y ÈY eMEDIUM* a* À–SUBSTITUTª 
Á1Áê
´1´ÆILE SEPARATOVdu ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2Æ!" »aEXCLAMC MAR•"- ¹LQUOT+ #+ µ£NUMBER SIGh$( ¬HOLLA( Q\u066ÅÛ2¤çARABIC PERCENTX &X £‚AMPERSAN³0"'"  V œ“APOSTROPH(M �òLEFT PARENTHESISm)- —ORIGH.  *. ›sASTERISx+% ™GPLUSó ,& œRCOMMA› -" “³HYPHEN-MINUÄ .) �’FULL STOPO /& ‰TSOLIDJ E‚3‚“DIGIT ZERä?' ‡' 96& €& 0-& {& '$( {› ' zO 3FIV$' q' 2SIX3
& q& 3EVEü( r( EKP À     #  0x00ð	39 -> DIGIT NINE
    ':'   �#  0x003a' RCOLON" ;" b" GSEMI& <& c& ÓLESS-THAN SIGQ =+ d+ gEQUALS( >( e( |GREATERV ?. f. ÒQUESTION MARKÑ @*  40* ÒCOMMERCIAL AT* A* 1* òLATIN CAPITAL LETTER A3 B3 23 B3 C3 33 C3 D3 43 D3 E3 53 F3 63 Ff G3 73 G3 H3 83 H3 I3 Ü˜I3 J3 è3 J3 K3 ù3 [L3 1Lf M3 f M3 N3 3 tO3 3 Of P3 5'3 P3 Q3 0Q3 R3 0R3 S3 0S3 T3 0üU3 0Uf V3 0V3 W3 0W3 X3 0X3 Y3 0Y3 Z3 0Z3 [3 0óEFT SQUARE BRACKEb$\\1 {5-ãREVERSE SOLIDUÁ]+  , &ORIGH] ^1 $óCIRCUMFLEX ACCEN‹ _. EOW L+`% 6YGRAVEN a) LSMAL5b1 	1 3c1 1 ÀR C
    'd'   ð#  0x0064 -> LATIN SMALL LETTER D
( 0'e'   1 51 E1 f1 61 F1 g1 71 G1 h1 81 H1 i1 91 I1 j1 a1 J1 k1 b1 K1 l1 c1 L1 m1 d1 M1 n1 e1 N1 o1 f1 O1 p1 /701 P1 q1 11 Q1 r1 21 R1 s1 31 S1 t1 T1 u1 U1 v1 V1 w1 W1 x1 X1 y1 Y1 z1 Z1 {1 óEFT CURLY BRACKEU|/ ÃVERTICAL LIN^}* ORIGHZ ~0 CTILDR 3\x7³á7÷UDELET# "b0H # 8é£DEGREE SIGBJ\xb7( à“MIDDLE DOî `\u2219) O ÖãBULLET OPERATOÑ, a, Ñ—SQUARE ROT 8592( È¥MEDIUM SHAï Au250Î } ÀqFORMS LG“HORIZONTA{\3 	\ Â3 ªþ 1 (3c� Â1 _ AND q (24@ Ñ@ 6LEF[)52z Ú: ODOWNv 1< å< ç @ tñ 	± ï; !UP5 ë 1�ú: ± 
ç 0« 6 § À
    '\u2514ð'   #  0x008e -> FORMS LIGHT UP AND R È
    '\u25185 f5 DLEFT4 G03b24  904 ôGREEK SMALL BETA- H221e- 1- „INFINITY% H03c6% 2% R 3PHI, 0xb1* ç  93, õPLUS-OR-MINUS SIGN/ d/ 4/ ÅFRACTION 1/2) c) 5) 4) Hu2243 96) ó ALMOST EQUAL TO, :xabU 7,  Lô POINTING GUILLEME_+xb4 84 µ5 Pufef7k ý 995 `ARABICþòATURE LAM WITH ALEF
 ñHAMZA ABOVE ISOLATED5Â  Y 	î aY  ZFINALV )ffbV •UNDEFINED| & c& !ef2û d& û ê H @H Ù PÙ 0xa0¬ÄaB�NON-BREAKSSPACE*xaÄaD¤SOFT HYPHEìHufe8™aGÂ WETTERúDMADDúÈ :xa3¢ fIOUND^*a4' ^ˆCURRENCY*  œ , ^a_œ –œ *ufa�d& {& (e8‰am—  †  0e8fý Ñ 	rm?BEHU(95< 	U< T< 9< ;
² /TH= 8060äaR= SCOMMAsAufe9uÞ 	U¢ OJEEMß a¥= 	J= /HAaA¢ L< K= 1066Zy bX= ô-INDIC DIGIT ZER£Hu066­ b]4  $ON� 3 hbh	g (TWf Rš Pf  HTHREh 4b^5 ÀT FOUR
    'ñ%\u0665'   #  0x00b5 -> ARABIC-INDIC DIGIT FIVE
    '4 64 64 7SIX3 73 73 GEVEN5 85 85 WEIGHT5 95 95 5NINÑ Hfed14 a4 ö
 LETTER FEH ISOLATED FORMp (1b< b< …SEMICOLOÒ 9febi c- i OSEENj 9feb«d=  H> 		e>  /ADz H061fä f< ÓQUESTION MARK0xa2/ V c01 ‡CENT SIG 80( | c1& |w_HAMZA• 8fe8L.c2> ÿALEF WITH MADDA ABOVEN 3Œ 3N 	– N «.c4N 2WAW› M (ca› £'™AIN FINAL›8fe8›c¨9 ?YEH†  NNITIL d… ÁL n$9fe9«É= B`x 9˜Ï;  TEàORBUT*9}cß  D I 	CÞ±/TH» 6cí _JEEM x a÷ ì ?HAH; 	î é K< %céï ?DALBa+dô
Î/TH= _d Rg‚8feahd	 Z!›bidø ’bjdæ S‘= 	/Ö S�; 	ñ Ø D; Ðc1'   #  0x00ý0d7 -> ARABIC LETTER TAH ISOLATED FORM
    '\ufec5'   #  0x00d8 < Z< b< 9x ¼AIN INITIALw f; a; /GH= 0xa6; ´ b= óBROKEN VERTICAL BARä :xac0 c0 „NOT SIGN% *f7% d% ‰DIVISION* d* e* »MULTIPLICAT0  c9\ cf0 
Ÿê ŸG0640< 'e0< sTATWEELÁ Xufed3+ 1+ ?FEHŽÔ ¢ .e2; ?QAF; .e3; K; .e4; ?LAMv eì 5; ?MEE< Áí 6< ?NOO·eî j Hd(edŸi ?WAW¥e*i¿LEF MAKSURAE f4s Y¼ b¼ q
Â?DADw co}
<  þ?MED$ e2’
: $>FIN_	± £; (e1y ± ^²8fe7{ f²SHADDA ì  8065s f½6 Hèe²f­ Àž eŒf¯ Á< Êf°  < Þ  8fefÆf¯ AÀÑ'f2“fµ  ½9 d{ ² E· dj³ -f< 	³€IGATURE ßQWITH þ 
 M"_ABOVEPfÿPfÇÀRABIC LIGATUòRE LAM WITH ALEF
 ð2MADDA ABOVE FINAL FORM
    '\ufedd'   #  0x00fb -> ARABIC LETTER T ŒISOLATED< 9< c< OKAF < (f1< d< ?YEH< H25a0< e< ÅBLACK SQUAREÝ 8ffe) f) óUNDEFINED
)

### Encoding Map

e �_map = {L  100:#000,< 2FNULL  1  1  öSTART OF HEADING, 2, 2, FTEXT) 3) 3) 0ENDS 
' 4' 4' ¶RANSMISSIONV 5/ 5/ VQUIRY# 6# 6# ¢ACKNOWLEDGa7' 7' (BE8  8  wACKSPACE 9% 9% ùHORIZONTAL TABULATÀ a1 a1 –LINE FEEDÂ b% b% oVERTICT c/ c/  (T d% d% çCARRIAGE RETURde+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAPJ1„1„÷DEVICE CONTROL ON. †1†. 5TWOP1‹1‹. 7HRE^ ”1”0 FFOUR_ ”1”ŸNEGATIVE z1¡1¡÷ SYNCHRONOUS IDL‹ ¦1¦Ff BLOCK‘ »1»VCANCEò1¸1¸W RMEDIUd &1°1°—SUBSTITUT¦ ±1±ß¤1¤ÇILE SEPARATON©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶
õ2«2«aEXCLAMëF MAR‹2©2©OQUOT* ¥2¥¦NUMBER SIGT2œ2œLOLLA' d2d†AMPERSANh2]2]–APOSTROPHÝ2N2NõLEFT PARENTHESISz2X2XORIGH- À02a: 0x002a,  À#  ASTERISK
 ‚0x002b:  , Ö #  PLUS SIGN% c% c% VCOMMA! d! d! ÆHYPHEN-MINUS( e( e( –FULL STOP% f% f% WSOLIDH "30# %30# ¥DIGIT ZEROI #31& 1& 6ONE% 2% 2% 'TWJ 3% 3% 7HREL 4' 4' FFOURr 5& 5& 'IVL 6& 6& 6SIXK 7% 7% 6EVEÀ#38' 8' VEIGHTN 9' 9' (NI1a& a& GCOLOn S%3b! KSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cÆQUESTION MAR4i4i ú†ERCIAL A<4l4löLATIN CAPITAL LETTER 44y4y2 B 4†4†2 C2 ‘4‘2 D2 �4�2 ©4©4©2 Fd ¶4¶2 G2 Á4Á2 H2 Ì4Ì2 I2 Ø4Ø2 J2 é4é2 Oö4ö&Ld þ4þd M2 	4	2 ±442 552 Õ5 5 QÈ 5 5 Y5 5 �5 5 è5 5 UÈ  5 V2  5 W2  5 ÀTIN CAPITAL óLETTER X
    0x0059: , ó #  LATIN CAPITAL 2 Y2 a2 a2 Z2 b2 b2 öEFT SQUARE BRACKET/ c/ c/ ö REVERSE SOLIDUS+ d+ d+ ?IGH[ e0 e0 ÷CIRCUMFLEX ACCENˆ f- f- …LOW LINE� "60$ %60$ \GRAVEL #61( 1( gESMALeAX 20 20 	B0 30 30 	C0 40 40 	D0 50 50 	60 60 	F` 70 70 	G0 80 80 	H0 ç/690 	I0 å6å	°J0 ã6ãG	0 K0 ä6ä L0 é6é0  M0 é6é0  N0 ì6ìÀ O0 7ø7ø`  P0  7 
Q0  7 
R0  7 
97 7 
7 7 
U�  7 
V0  7 
W0  7 
ç7 7 
å7 7 
ã7 7  ã]CURLYâ7þ7þ`VERTICp_7÷7÷RàX ö7öFTILD—7ç7çVDELET" aÙaÙ÷NON-BREAKING SPAC. §c.  CF SIG\aœaœ[POUND& ’a’‹CURRENCY) [dkuBROKEN D&BAàab: 0x0097,   ñ  #  LEFT POINTING GUILLEMET
    0x00ac: 0dc,  3 †NOT SIGN$ d$ %a1$ ¦SOFT HYPHE' "b0' %80' jDEGREEN "b1' %93' ÛPLUS-OR-MINUS. 7. 8| –MIDDLE DOÆ "bb& %98T ORIGHú 
bú %954 ÅFRACTION 1/4þ bþ /94( 2( dª %de( ¡MULTIPLICAV 	Uf/ d/ PDIVIS ) 33b2Ü W UÄK SMALL BETA„ 33c6, 2U , 4PHI+ #60ÿ aùµARABIC COMMS #61[%bbS ( …SEMICOLO261f ,bf, AQUESEMARK„ 42eÛ \ uTATWEEL* 55f* uSHADDAH* 6T bT ö-INDIC DIGIT ZERO3 ] b] 	3 6ONE2 ”bh� 	2 'TWd 3ö2 7HREf 44 z4  FFOUR™ 53 Õ3 'IVf 4+b6µ	Ì 6SIXe »/b72 
&EV3668™ ¢™  Eµh 94 9h 	(NI™a3 2 y PERCENÚ3221b 8ÈäBULLET OPERATOZ3221Z 8Á•SQUARE ROŠB221e� 9LƒINFINITYØ 32249rÔLMOST EQUAL T73250Î8Ð pFORMS L*¤ HORIZONTA*3250›8] 2 hVERTIC0 8ˆ0 ‘DOWN AND PÃ $51˜ >6  5 Ð8"5 /UPi ,8S4  
g Ò a73 m  2¡ ¥: 	s 2s ª9 E° 3t `; 9 t †àFORMS LIGHT VEðRTICAL AND HORIZONTAL
    0x2592: 0x0084, õ #  MEDIUM SHADE( "a0( %fe( ´BLACK SQUAR( Cfe7d( 0( aARABICP !DA^ sAL FORM] 3fe8] ,c15 ûLETTER HAMZA ISOLATED= 1r /c2= ÿALEF WITH MADDA ABOVEM aM =FINÔ 3— 3— Þ — 
4M /a5M — 5J cð k2WAW-– bL 6– ?YEHL  MNITI.7/c7K Åe‡ /a8< 	f9 99 ?BEH(9ut ; ê 9u  TE©ORBUTò9Ä/aa¸  C ,"97ó c; 
¸ 9: /abu H.)< w /adw OJEEM¥à/cc< 
w aàaï
'/HAaá² ; u Øf° K; aÙ± < w Úcw ?DALbaÙdîN/TH< ÚdõRPaÙd¦OZAIN³ bÚb?SEE< ÛdÔ< ebÜb/SHx Ýdµ= y ÀRM
    0xfeb°9: 0x00be,  ð#  ARABIC LETTER SAD ISOLATED FORM
' b0xfebb; /d5; 	kNITIAL: d: /eb: Du f; /d6; 	u #c1: 7: ?TAHê #c5; 8; Z; `/df; ?AINv av c` ; <FIN^c˜9s 	#cr /ec: =MEDÑcÑF GH­ H#cev dv = ê a: 
Iì "d0v fv î dJbw /FEJ"d3v /e1² ; ° „f„?QAFI#d7u 2u ; u ¾fKu †/e3u ; u Mf?LAMê /e4u ; u eÔe¨?MEEv eÕ©< w Ö›?NOO e×< w Ø�HÂeØ8; u ^f� : peeû?WAWe¿LEF MAKSURAD f*ßAD § f\fáYn"f2»fä ; s “£ÀER YEH INITIðAL FORM
    0xfef5: 0x00f9, ò #  ARABIC LIGATURE LAM WITH ALEF
 ûMADDA ABOVE ISOLATEDX 6X aX %=FIN­ 7U 9­ OHAMZ­ 8X ­ X ­ bU dIcG eG ‹ ðL}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP865.TXT' with genc; P.py.
c À#"

import c cs

###` ²APIs

class ($ . 1):
ŒQdef eW ñ(self,input,errors='strict'):,  ©creturno “.charmap_B = , †ing_map)m  de‡ m )B 	m   m dtable)ø ÁIncrementalEå r å  h Ã final=False*  W.Q
?[0]¨  D ¨  ~  ¨ ö eL¨ !@ â ¨  Oª ÑStreamWriter(J,Ð8cs. ¤ 5pasƒ ORead9  	9  ÌFàs module API

ý Ãgetregentry(7 
�ž UInfo(¾Õname='cp865', d !e=0 2().     id: .r=]/ J 	/ ä/ spr7=D# w“#  # )Z  ~0MapA0codáTmap =Ïñmake_identity_dict(range(256))
° 5 ‘.update({F Ê"801%c71òLATIN CAPITAL LETTER CËvCEDILLA? 1? +fc? ESMAL= U= –DIAERESIS? 2? e£~ 	? E? VACUTE; 3; 2z 	A; ¦CIRCUMFLEX@ 4@ 4@ ÀSMALL LETTERñ A WITH DIAERESIS
    0x0085: 0e0, ô #  LATIN SMALL LETTER? VGRAVE; 6; 5; ˆRING ABO@ 7@ 7@ 	Cº vCEDILLA} 8= a= 	E= –IRCUMFLEX@ 9@ b@ 7 a? 8? 7b; f; 	Iº z  c? e? Cù  d@ c@ º e; +c4; lCAPITA.¼  fA 2A 4 #90B 9ƒ ùFACUT±"91= +e6= ì—IGATURE A3 23 c3 ² 5 35 f(h TOâ£ #94@ u @ f9Ó/f2ç 	 
â9Óf
Uº ÓfŸ	º @ { Ñf
Y{ õ  Ðd4©	÷ A  ÒdA ½ A  Øf
öWSTROKgÕ%a3³¥POUND SIGN´9»db £ d ¾620aokPESETAe ¤/19>
FˆEHOOKŸ aœ%e1Å K
šašd; 	; ¢f;v  ; ¨D
ñ; £ì 
N&FTILDìaŸd; Æ= ¡a³ ðFEMININE ORDINAL INDICATOR
    0x00a°7: 0x00ba,  ð#  MASCULINE ORDINAL INDICATOR
#  / #a87 f7 öINVERTED QUESTION MARK2 92 E23102 öREVERSED NOT SIGN- a- E00ac- $ b$ %bd$ ±VULGAR FRAC� †ONE HALFX c4 X 4 gQUARTEî d7 %a1k î qEXCLAMAp 
ñ e5 b5 ÿLEFT-POINTING DOUBLE ANGLE QUOTE fE 4E ŠCURRENCY2 b0) 6259£ µLIGHT SHADE#b1' 2P lMEDIUM( 2( 3( LDARK& 3& 0N ÒBOX DRAWINGS ‚  FICAL… 47 2Õ 7 P AND :@ 5@ 6ì 	@ q 1 SI\A rH 6H ¿ H ª‰ X H DE2556-	� CDOWN| Í D QO2555D Ð c&56µˆ q× É w?255YA 8 ‹O2557½ y u ”6255È¶ %UP<x ˜6255Ï	; /UPw¥6255¥B u¢'25Ø	B û cµ1	
ú RÏû cÉ3; ‡HORIZONT„cá2;· B ý1B 
,½Ã 0: z  3z F þ/5eµº Á T‹ÿ	È I ? I Z I Œ	I @ ü5< ˆÀND RIGHT
   ð 0x00ca: 0x2569,  ð#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
- A bA 6A 
ODOWNC cC 0C 
�VERTICALG VRIGHT… dB 5B ¿ e: /6c| G fG 7G ‘UP SINGLE½ A `É #d0H 8H ’
�^ H 1H 4H �’ 2J 5J ” 3J 5k#UP$á× 4C Õ C œ 5C 2Ð E 6E 3E y Í 7E /6bE ðI :¤ Ø 8N aN 8 — N d N 9N 1iL6LEF‹dQ0Q: € Ã¤w M8w ¦FULL BLOCK& 08Ý¬LOWER HALF, 8�  ¯ + 9Ež , ð8, ?UPPƒ eÔE03b1šõ	GREEK SMALL LETTER ALPHAã eÀE00df4 ZLATIN4 vSHARP S6 ¬6039—j eCAPITAl GGAMMl ˜603cÌ 6 	  &PIg †?03ag 8SIGg y<03c6 	g 4 h600b}¦MICRO SIGN� I603cÁ  6TAU2 -603aµ2 )'PHö 6039œ4 GTHET]603aõ6 GOMEG6 ?03bÒ 
8DELj 521e3†INFINITYø Àd: 0x03c6,  ð   #  GREEK SMALL LETTER PHI
    0x00ee: @3b5, 2 vEPSILON6 f6 E22296 §INTERSECTI( "f0( &61( µDENTICAL TOP  f1( 600b( æPLUS-MINUS SIG{  f2+ 9226± ûATER-THAN OR EQU_ 34 4‡ OLESS1 41 53201 �TOP HALF é FGRAL½ 5- ½ oBOTTOM0 60 E00f7] ‹DIVISIONë 7) E2248) oALMOSTâ  8+ 600b±  DEûR 9' 6221¸ö BULLET OPERATORÖ a+ 600b¦ ¦MIDDLE DOT& b& E221a£ ˜SQUARE RO' c' 607f' úUPERSCRIPT LATIN¤ñd< O00b2< 'TWGÍ625abBLACK ” ¶ ¿'00( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (U d'\x00'A X’00 -> NUL( ! 1! 1! õSTART OF HEADINGN 2- 2- 2TEXƒ W 3* 3* 0ENDU 	( 4( 4( pRANSMISƒ‚ 50 50 UQUIRY$ 6$ 6$ µACKNOWLEDGE( 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$ Öc9& €HORIZONTò0ABUK�<'\n2 a2 •LINE FEEDŸ b( # 0b& 3VER§V :x0c0 c0 HFORMV r$ ® d& âCARRIAGE RETURå Åe. ‚ e, †SHIFT OUëf& f& IK 1ˆ1ˆõ DATA LINK ESCAP™1”1”öDEVICE CONTROL ON/ 
–1–/ �J'\x1›1›/ 6HRE` 
¤1¤1 2FOU¥ a 
¤1¤ŸNEGATIVE ‰ 1±1±ö SYNCHRONOUS IDLŽ 
¶1¶Z2d BLOCKM1Ë1ËUCANCE
)19È1ÈY eMEDIUMM a* À–SUBSTITUTª ÁÀ 0x001b -> EðSCAPE
    '\x1c'
 õ #  0x001c -> FILE SEPARATOR+ d+ d+ _GROUP,  e, e, oRECORD-  f- f- LUNIT+  ( $  ¯  20+ CSPACÑ !" 1" òEXCLAMATION MARKÓ "- 2- LQUOT+ #+ 3+ ²NUMBER SIGNS $( 4( XDOLLA( %( 5( wPERCENTQ &) 6) ‘AMPERSANDw 1"'"Å7& ƒPOSTROPH(M 8' ñLEFT PARENTHESIST -')- 9- ORIGH.  *. a. sASTERISq+% b% GPLUSó ,& •RCOMMA› -" Œ³HYPHEN-MINUÄ .) ‰’FULL STOPO /& ‚TSOLIDJ 0$ 3{¢DIGIT ZEROK 1' €' #ONˆ2& y& #TWL 3& t& 3HREN 4( t› 3FOUÁ5' sO 3FIVN 6' q' 2SIXè 7& q& 3EVE8( r( EKP 9( m( $NI9:' fCCOLOq ;" cGSEMI& <& c—LESS-THANŽ=+ lXEQUAL¶>( k|GREATERV ?. sKQUES¥@* 4y ’ERCIAL ATDA* |óLATIN CAPITAL LETTER IB3 ‰3 Bf C3 –3 C3 D3 ¡3 Ñ-'E3 ­3 ¹F3 ¹3 F™ G3 Æ3 G3 H3 Ñ3 H3 I3 Ü3 I3 J3 è3 J3 K3 ù3 ÀAPITAL LETTE°R K
    'L'   ò#  0x004c -> LATIN CAPITAL LETTER L3 M3 d3 M3 N3 e3 N3 O3 f3 O3 P3 /503 P3 Q3 13 Q3 R3 23 R3 S3 33 S3 T3 43 T3 U3 53 U3 V3 63 V3 W3 73 W3 X3 83 X3 Y3 93 Y3 Z3 a3 Z3 [3 b3 óEFT SQUARE BRACKEb$\\1 -5-ãREVERSE SOLIDUÁ]+  , &ORIGH] ^1 $óCIRCUMFLEX ACCEN‹ _. rOW LINEà `% 6YGRAVEN a) ESMALAZ b1 	1 B1 c1 	1 C1 d1 	1 D1 e1 ÿ	1 f1 ý	1 Fb g1 û	1 G1 h1 ù	1 H1 i1 ÷	1 I1 j1 õ	1 J1 k1 óð	1 !l1 ô!	1 m1 ù1  n1 ù1  o1 üÄ p1 7b  q1 r1 s1 Pt1 "u1 À75 -> LATIN ðSMALL LETTER U
    'v'   ù#  0x0076 -> LATIN 1 V1 w1 71 W1 x1 81 X1 y1 91 Y1 z1 a1 Z1 {1 b1 òEFT CURLY BRACKET/ |/ c/ ÒVERTICAL LINE* }* d* ORIGHZ ~0 e0 CTILDR B\x7f%  f" UDELET# )c7#  80# ÃPCAPIT¤ öâC WITH CEDILLAµ J\xfc@ 1@ 	U> ”DIAERESIS@ *e9@ 2@ E@ 6ACU¼ *e2< 3< A< “CIRCUMFLE-J\xe4A 4A ½ 0@ 5@ EGRAVy*e5< <½ ‡RING ABOA ºL¸*ea Yx< bA iA <8@ x@ 
<
Ø8ƒxIù| e| ”õ	µ@ ý  ö«A 	½ cu·< rû¿ c;×B 	=cw9÷€
y6@9õ•IGATURE Aðc4 é÷ 6 f-9ãOêªfw ãA lfd9ã@ 	êf#9ã½  ¦ãA 
} 
$9áY:ù àd6'     #  0x0ð(099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
    '\xdc'
 ¯ #  0x009aB UB *f8B bB LSMAL‚ dSTROKE *a3= c= ¤POUND SIGN' dd d' è 		f Pu20a7h å e? hPESETAg Xu0192( f( g 	Ë FDHOOK¢  e19  H/a0; A; EACUT*ed< 1< I<  fA/a2<  	x *fax 3< ú
< ð 4< N´ ETILDð d< 5< ¶> a¶ 6> ôFEMININE ORDINAL INDICATOR¡b7 77 oMASCUL8 f%88 ôINVERTED QUESTION MARPu23105 oa–ÈREVERSED NOTu*xa‚a‚% b#e±VULGAR FRAC„ …ONE HALFó Z ]5 eQUARTE+a nó qEXCLAMAr ö 0xabô eÿLEFT-POINTING DOUBLE ANGLE QUOTF  4F ƒˆCURRENCY8Au259¨ fbr…IGHT SHAn ( Õb^mMEDIUM) MQ KLDARK' 0P 6áBOX DRAWINGS L…  "CICALŽAu252Ü _ 28 P AND @A 6ñ 7	A s 1 SIcB yI 	Â BI ²‹ Y I  56¯Ó T	I CDOWN~ Ð E 5E aE Ó 	¼sE |#Ì 	^‡B 	9 ]b›9 w  ÛC¤> %UPAz Ðc'   #  0x00bÿ6d -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
    '\u255b'   #  0x00be C  3 C S C (10C f† ¥LIGHT DOWND = 4= /c0= !UP; RJ < 3< 1< ¦HORIZONTALA (2c} 2A º C 1C 3C �VERTICALÆ 0?/c4B | 3| 5: 	| G (5e6G A 	Š]P(5fJ 7J C—aJ 8J A 59= ØÍ Æ (69| a? | R(66B bB � D 	cD � âÉ 5C E~ 	[; 	~ H 7
#UPûB ['68I d(
ëI µÞd5•5 ” 5” ?K * Ÿ– 5tdG
ß è9Ú 5#I
lD ž D 2Ó SÓ F 3F RF { dF W Œ 6›dNc6SdSÌˆ ™ O ¯ ž 1neö% {; 0]da; % 7> 8y Àdb -> FULL BûLOCK
    '\u2584'   #  0x00dc -> LOWER HALF B- c- d- ?EFT, (90, e, ORIGH- 8- f- ?UPP† G03b1Z  e0- ó	GREEK SMALL LETTER ALPHAè 0xdf3 è  e15 ZLATIN5 sSHARP S7 Pu03939  e27 l eCAPITAn DGAMMn Hu03cÐ &e37 	£ &PIi ai 42 i 9SIGi 	7 57 	i 5 0xb5Ó 65 ¦MICRO SIGN“ c e7' ü 	\ 6TAU3  a6\ /83 Æ 'PHû (985 95 GTHETd(a97 a7 GOMEG7 bÖ b7 	Ö 6DELl H221el &†INFINITYý cý 0 	û Œ0%3  eEPSILOš9222û /¨INTERSECTI) 6+f+ÃIDENTICAL TO¼ xRf©PLUS-MINUS1226Aµ føATER-THAN OR EQUa Hu226wfOLESS2 (32Df2TOPl î CGRALÁ Iu232ê 	oBOTTOM1 0xf7Ñò ‹DIVISIONð 4 flALMOSTç !xb³ V  DEÓT 1Âfôó BULLET OPERATORÛ +xbª é£MIDDLE DOT' Pu221aÓ —Ù—SQUARE RO( !07( ÌÏSUPERSCRIPT  z0xb2c à ä= $TWTAu25ai ÝbBLACK — º x' U ÏóNO-BREAK SPACE
)

### Encoding Map

e �_map = {Q  Ç100:Ï000,è Þ2NUL-  1  1  öSTART OF HEADINGL 2, 2, 2TEX€U 3) 3) 0ENDS 
' 4' 4' pRANSMIS‚ 5/ 5/ BQUIRxy 6# 6# ²ACKNOWLEDGEJ Àx0007: 0x00007,  €#  BELL
 ‚0x0008:    †ACKSPACE% 9% 9% öHORIZONTAL TABULATION1 a1 a1 –LINE FEED% b% b% oVERTICT c/ c/ KFORMT d% d% çCARRIAGE RETUR¤ e+ e+ –SHIFT OUT¤ f% f% II "10$ %10$ ö DATA LINK ESCAPJ#11, 1, ÷EVICE CONTROL ON. 2. 2. 5TWO¬ #13. 3. 7HRE^ 40 40 FFOUR_ 5/ 5/ ÷NEGATIVE ACKNOWLEDG_ 60 60 ÷ SYNCHRONOUS IDL, 7, ¦ö
END OF TRANSMISSION BLOCK‘ »%18a VCANCEÝ1¸1¸W fMEDIUMK °1°—SUBSTITUT¦ ±1±ß¤1¤ÇILE SEPARATON©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶
õ2«2«aEXCLAMëF MAR‹2©2©OQUOT* ¥2¥¦NUMBER SIGT2œ2œLOLLA' ”2”{PERCENTO Œ2Œ†AMPERSAN�2…2…–APOSTROPH2v2võLEFT PARENTHESISW2€2€ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3k3k–DIGIT ZER¿3p3p& 3i3i% 	3d3d% 	 3d3d— 	÷3c3cM 6FIV3a3a& 5SIX+3a3a% 6EVEü3b3b' E<N ]3]' $NICÀx003a: 0x0030a,  �#  COLON
 ‚0x003b:  ! KSEMI% c% c% ×LESS-THAN SIGO d* d* kEQUALS' e' e' GREATERT f- f- ÕQUESTION MARKÌ "40) %40) ÖCOMMERCIAL AT) 1) 1) öLATIN CAPITAL LETTER A2 22 22 B2 32 32 C2 42 42 D2 52 52 E2 62 62 F2 72 72 G2 82 82 H2 92 92 I2 a2 ØÂJ2 é/4bd Oö4ö&Ld þ4þ– M2 	4	2 b442 Od 552 P2  5 Q2  5 R2  5 S2  5 è5 5 Ud  5 V2  5 W2  5 X2  5 Y2  5 Z2  5 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸5ORIGH[ 5÷CIRCUMFLEX ACCENˆ 5fOW LINõ66\GRAVEL 6÷6÷OSMAL 6õ6õ	0 6ó6ó	0 6ñ6ñ	0 6ï6ïÀ#  LATIN SMAóLL LETTER E
    0x0066: , Ö #  LATIN SMA0 F0 70 70 	G0 80 80 	H0 90 90 	I0 a0 a0 	J0 b0 b0 	K0 c0 c0 	L0 d0 d0 	M0 e0 e0 	N0 f0 f0 	O0 "700 /700 	P0 10 10 	Q0 20 20 	R0 30 30 	S0 40 40 	T0 50 50 	U0  /760 	V0  7 
W0  7 
X0  7 
Y0  7 
Z0  7 ÷EFT CURLY BRACKENþ7þÆVERTICAL LING7÷7÷ORIGHX ö7öGTILDP ç7çVDELET" aÙf" ×NO-BREAK SPAC* Óaœ  INÇ öED EXCLAMATION MARøa¨9ú –POUND SIGŽaža… ‹CURRENCY) §agö
FEMININE ORDINAL INDICATO-a­a'ÿLEFT-POINTING DOUBLE ANGLE QUOTÊ Äa":NOTŸ bM¦kDEGREE' Jf«PLUS-MINUS+ fuæSUPERSCRIPT TW£b³e[MICROQ yfÇ –MIDDLE DO±bhŸPMASCU­ib$î±VULGAR FRAC ONbFARTE böaM7 6HALAbÚakŽAQUESm 	‹ce8£PCAPITŠÕò A WITH DIAERESIDÀ0x00c5: 0x00@8f,  ð#  LATIN CAPITAL LETTER A WITH RING ABOVE
. €0x00c6:  /92B —IGATURE A5 75 /805 w Cw vCEDILLAt 9? 9? E? FACUT| "d1= /a5| N= GTILD= î 9= O= •DIAERESIS» "d8~ /9dA WSTROK c> a> U fA +e1A ESMALîfSHARP µ "e06 83	6 $7GRAen«; 
©#e2v 3¬ 	v ¥CIRCUMFLEXk#e4@ 4@ ª#e5? 6?  e+k e7s 	eZ8	j¥P8Ä; ¥a&8³ 	v ¥b@ Q{ ¥ 8O	? Iõ dz a ‚; õ e; /8cõ 	; õ †/8b@ õ fTÙ
ÀfT9Ê
¾
0"f3õ a%
; 
0fŠ9Ê
; 0 fKñ 
@ 0 WfÊÕDIVISION SIGN2fC9˜
h ›fD9¼
™ZDa
; Z?9Û À	 ; ZÀ0x00fc: 0x00@81,  ð#  LATIN SMALL LETTER U WITH DIAERESIS
+ €0x00ff:  /98? 	Y? 3192? f? 	F? DHOOKy 2393: %e2: ÅGREEK CAPITAº VGAMMA6 86 96 FTHET6 al 46 7SIGl #a6l ¢ 5PHI  #a94 aj FOMEG  #b16 06 	ÄGALPH4 44 b4 	7DEL#b54 e4 	uEPSILONÔ #c06 36 	Pco51 	
mcÏ 74 	6TAU— Ÿd2 	�3207ì%fc2 ¿SUPERSCRIPT7B20a79;¥PESETA SIG' #21 f ó BULLET OPERATORÀ B221aR fÁ¶SQUARE ROOT' e' eµ …INFINITY$ 2v e†¥INTERSECTIÊ3224>feõ ALMOST EQUAL TOS 6“f“{IDENTIC( ¸fÏLESS-THAN ORY  „føOATER4 #31‚aV0REVà YD NOTƒ#32- fí�TOP HALF DGRALç $32ç «oBOTTOM0 #50] c] öBOX DRAWINGS LIGHT HORIZONTi #50)b(9  1VERb  250cþdP7   DOWN AND R = 7b= 	5LEFw#51Øc <  /UPw fd®; 
u î c%{  2¶ bŸ
fA 	� 2� �»  oè 3‚ c�B  8@ ‚ ‘aÂ ÀL AND HORIZOð	NTAL
    0x2550: 0x00cd, ú #  BOX DRAWINGS DOUBLE HORIZO: 1: /ba: 
hVERTICr 28 /d58 óWN SINGLE AND RIGHTˆ · 3E 6E ¼ E V E 4E /c9E ü FDOWNŠ > 5> /b8> 
È >LEFÇ 6D 7D Ç D Æ 7D bD 
Æ  D Å 8= /d4= /UP‹9C 3C Â ÎÃ aC cKÃ /UP‡b< /be n <  ý LcB #UP2 B R FdB c„  À  „ ; e; cÉ?‡fI KI � 6Í P I Ô 6â; GW› H *b8 H X H -bè—  Ò 	¥6)/d1à
ë.:‹ 5/d2J Ï J Õ ;c÷J � :/cf� 
ýA Õ E0H Ó JcRG� Ñ HdHâL1G × ZdRN d œ fc¨"£  …N G 8žd´öUPPER HALF BLOCK, ·àc,     #  LOWEðR HALF BLOCK
    0x2588: 0x00db, Œ #  FULL& c& d& OLEFTQ #90+ e+ ORIGH, 1, %b0, L, USHADE¤ #92' 1' {MEDIUM ( 3( 2( KDARK& a¡ f¡ ðTBLACK SQUARE
}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP866.TXT' with2 c; P.py.
c ±#"

import  cs

###` ²APIs

class ($ . 1):
`def en ñ(self,input,errors='strict'):,  Þcreturno “.charmap_B = , †ing_map)m /dem -B 	m   m dtable)ø ÁIncrementalEå r å  h Ã final=False*  W.Q
?[0]¨  D ¨  ~  ¨ ö e¹¨ !@ â ¨  Oª ÑStreamWriter(J,Ð8cs. ¤ 5pasƒ ORead9  	9  ÌFàs module API

ý Ãgetregentry(7 
�ž UInfo(¾Õname='cp866', d !e=0 2().     id: .r=]/ J 	/ ä/ spr7=D# w“#  # )Z  ~0MapA0codáTmap =Ïñmake_identity_dict(range(256))
° 5 ‘.update({F ÿ8&41Šö
CYRILLIC CAPITAL LETTER A5 ¿&41˜5 BÎ2008Î&41¦6 V6 Ü5413Ü6 'GH7 4?4147 qC00856 56 Il 66 66 Z£ 77 77 m ¸?4186 
ÀTER I
    0xà0089: 0x0419,  ð#  CYRILLIC CAPITAL LETTER SHORT I
' c0x008a; a; &KA6 b6 b6 &EL6 c6 c6 M6 d6 d6 N6 e6 e6 O5 f5 f5 %PE6 "906 /206 &ER6 16 16 S6 26 26 T¢ 36 36 Uk 45 45 &EF6 56 56 HP#966 66 'TSØ 77 77 'CH7 87 87 S¥ f2fC9 d2d†HARD SIGÉ9k2k7YER¿m2mKSOFTu t2tûs2sY¨ t2tY1at3t ESMALð3 q3q 	3 B*ao3o 	4 V4 m3m 	4 G“am3m 	5 Di k3k 	4 I4 i3i 	4 Z� g3g 
5 i d3d 	4 ‹a`3` 	3 Äa`3` 	9 ÂaW3W 	4 ÀaS3S 
4 ¾aJ3J 
4 óaI3I 4 ÀETTER O
    ð0x00af: 0x043f,  ð#  CYRILLIC SMALL LETTER PE
   4  b04 E25914 §LIGHT SHAD' 1' 2' lMEDIUM( 2( 3( LDARK& 3& 0N ÒBOX DRAWINGS ‚ †VERTICAL¬ 47 %24] 7 – AND LEFT@ 5@ 6ì 	@ q u SINGLEA g DOUBL6H ¿ H 8 H X � 7H /56Ð CDOWN| D 8D 5D x D ˜ ˆ 9D 6µ	/  × YaA 5YA y b8 7½  x u c= d= 
%UPø x d; c; /UPweB bB u­O2510B û cµ1	
ú RÏû cÉ3; ‡HORIZONT„cá2;· B ý1B 
	mÃ 0:
z  3z F þ/5e¹º Á T‹ÿ¯	wI ? I Z I a’ @ ü5< ˆ� z ù/69z M6
C 6Â NGÆ B | 6R| G 6(UP“A ÀL DOUBLE
   ð 0x00d0: 0x2568,  ð!#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
4 H 1H 4H CDOWN4 J ` J 2J 5J 4 J ” 3J /59J 
Ü SRIGHT£ � 4C u ‹ C œ C 5C 2† E 6E 3E y Š › Š 7E /6bE �VERTICALò8N aN † — @­ œ 9N 1iLž!UPG FLEFT: a: /0cˆ : f Ã_= b= 8w ¦FULL BLOCK& c& Ý¬LOWER HALF, d, �  ¯ + e+ %90º ž , f, 8, ?UPPƒ eÔ6044, õ	CYRILLIC SMALL LETTER ERã eÀE0441Œ 4 S4 ª6044Ú4 T(e”6044É4 Ug „6044~3 &EF4 u6044E4 &HA4 dO0446'TSÐ TO04475 'CH5 ;6044vž SŸ "6044Î5 C7 6044§7 –HARD SIGN60440; 7YER¯-60446 0SOFpq <O044dMKDO044e3 Y¢ LO044f4 fT0  @CAPIV%IOBfV56  	Š4 V0ï j ¶UKRAINIAN Ifb5@  ÐSMALL LETTER ð	UKRAINIAN IE
    0x00f4: @407, ö #  CYRILLIC CAPITAL LETTER YI6 56 56  OSMAL4 64 /0ej vSHORT Uo 7; 5;  	o 9 89 50b0t ¶DEGREE SIGN` 9' E2219' ö BULLET OPERATOR+ a+ 600bú ¦MIDDLE DOT& b& E221aQ ˜SQUARE RO' c' 5116' kNUMEROŸ d' E00a4' ‹CURRENCY) e) 625aï bBLACK } Ÿ f( '00( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (U d'\x00'A X¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- 2TEXl x 3* 3* 0ENDU 	( 4( 4( ¢RANSMISSIO X 50 50 UQUIRY¦ 6$ 6$ ¢ACKNOWLEDGf L 7( w7 -> BE8! 8! 2ACKŽ Y2'\t$  ¤c9& pHORIZON¨vTABULATÅ n2 a2 •LINE FEEDÇ b( # 0b& �VERTICAL V :x0c0 c0 HFORMV r$ ® d& æCARRIAGE RETURme. ‚ e, †SHIFT OUëf& f& IK 1ˆ1ˆõ DATA LINK ESCAP™1”1”öDEVICE CONTROL ON/ 
–1–/ 4TWOX1›1›/ 6HRE` 
¤1¤1 2FOUŽJ'\x1¤1¤ŸNEGATIVE ‰ 1±1±ö SYNCHRONOUS IDLŽ 
¶1¶Z2e BLOCKõ 
Ë1ËUCANCE
)19È1ÈY eMEDIUMM a* À–SUBSTITUTª 
Á1Áê
´1´†ILE SEPAä Vdu ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2Æ!" »aEXCLAMð MARK
    '"'     ð   #  0x0022 -> QUOTATION MARK
    '#'   + 3+ ²NUMBER SIGN( $( 4( XDOLLA( %( 5( wPERCENTQ &) 6) ‘AMPERSANDw 0"'"›   Ÿ 7& ‘POSTROPHE' -'(M 8' òLEFT PARENTHESIS- )- 9- ORIGH.  *. a. sASTERISF+% b% GPLUSó ,& c& RCOMMA› -" d" ³HYPHEN-MINUÄ .) e) ’FULL STOPO /& f& TSOLIDJ 0$  30$ ¢DIGIT ZEROK 1' 1' #ONˆ2& yM #TWL 3& t& 3HREN 4( t› BFOUR› 5' sO 3FIVN 6' q' 2SIXM 7& q& 3EVE8( r( EKP 9( m( $NI9:' fCCOLOq ;" cGSEMI& <& c—LESS-THANŽ=+ lXEQUAL¶>( k|GREATERV ?. sKQUESz@* 4y ’ERCIAL ATDA* |óLATIN CAPITAL LETTER IB3 ‰3 Bf C3 –3 C3 D3 ¡3 Ñ-'E3 ­3 ¹F3 ¹3 F™ G3 Æ3 G3 H3 Ñ3 H3 I3 Ü3 I3 J3 è3 J3 K3 ù3 �L3 1Lf M3 f M3 N3 3 ÅO3 3 -P3 5'3 ð P
    'Q'      ð  #  0x0051 -> LATIN CAPITAL LETTER Q
    'R'   3 23 R3 S3 33 S3 T3 43 T3 U3 53 U3 V3 63 V3 W3 73 W3 X3 83 X3 Y3 93 Y3 Z3 a3 Z3 [3 b3 óEFT SQUARE BRACKEb$\\1 ûc0 ãREVERSE SOLIDUÁ]+ Zd, ?IGH] ^1 e1 óCIRCUMFLEX ACCEN‹ _. f. ‚LOW LINEà `%  60% YGRAVEN a) ESMALAZ b1 	1 B1 c1 	1 C1 d1 	1 D1 e1 ÿ	1 f1 ý	1 Fb g1 û	1 G1 h1 ù	1 H1 i1 ÷	1 I1 j1 õ	1 J1 k1 óñ	1 K1 l1 ô"	1 L1 m1 ù1  M1 n1 ù1  N1 o1 üÄ O1 p1 7b  P1 q1 r1 s1 Pt1 "u1 v1 w1 	x1 y1 z1 àZ
    '{'     ð   #  0x007b -> LEFT CURLY BRACKET
    '|'   / c/ ÒVERTICAL LINE* }* d* ORIGHZ ~0 e0 CTILDR B\x7f% | f" TDELET# Pu0410% #  80# àCYRILLIC CAPIT§ rETTER A« \6 16 16 	Bm 27 27 	V7 37 37 	(GH8 48 48 	6 Ý 57 57 	In 67 67 	Z¦ 78 78 
o 87 87 	I¹96 96 	hSHORT < a< a< 	K,b7 0b'ELª c7 87 M7 d7 E7 N7 e7 L7 O6 b=`6 P»2t9t
&ERn 2u9u
'ES7 u9u
2u9u
Um s9s
'EF7 s9s
H[2s9s
(TS�s9s
C«2t9t
S¨ v9vC: t9t
‡HARD SIGÖ2{9{
8YERÇ}9}
LSOFTw „9„ƒ9ƒ
Y« „9„
Y;3„a„zSMALL LöÀu0431'   #  ñ&0x00a1 -> CYRILLIC SMALL LETTER BE
    '\u0432'   #  5 25 V5 35 35 (GH6 46 46 D5 55 55 I5 65 65 Z  76 76 k 85 85 It94 94 hSHORT : a: a: 'KAo b5 b5 'EL5 c5 c5 M5 d5 d5 N5 e5 e5 O4 f4 f4 P«G25915  b05 –LIGHT SHAs8259bHmMEDIUM) b<LDARK' 0P .ÒBOX DRAWINGS … uVERTICAƒ82520b08 ” AND LEFT&9256ñ <	A s u SINGLEB g DOUBL:6Â PI 9 I Y ’ 5™bc	I CDOWN~ E bsE z E š Š 6¼„E   #^5^ŒB 	{ 5hb�9 w  db™> %UPü z Õb 	< /UP}Mb®C {(10ˆ½	C ÿ 1cÅ=  þ Rßÿ 3< Ù< ‰HORIZONT’@cñA  º C 1C ÄÆ 0?cÀ DRAWINGS LIð+GHT HORIZONTAL
    '\u253c'   #  0x00c5 -> BOX DRAWINGS LI: ÏVERTICAL ANDG (5eG 6G A aSINGLEH R[ fDOUBLE‘ (5fJ 7J 9 J [ J aJ 8J A &UPD = 4= 9= ODOWN? (69? a? | ™(66B bB � D 0D cD � Þ–	C dC ~ 	[e; 	~ H 7Æ fH 2UP û‰B  áÌ '68I /d0I 3 I _ I -d1I •5 K a K 5” 2K 5 K a K 5t-d3K #UPI è9D 	#4D w D ž D 2Ó SŠ F 3F RF 5 Œ � Œ (6bF NBO SdSÌ9 ™ O ¯ ž 1ne}%FLEFT; 0]da; %Ö 8y ]¦FULL BLOCKe 8è@­LOWER HALF- 	’ * ³ , 9VdY 	-  ?UPP† 8044- eäô	CYRILLIC SMALL LETTER ERè G0441&eÐ5 S5 çeº5 'TE5 Öe¤5 U4 †e”4 'EF5 ð 5'   #  0x00e5 ÿ&-> CYRILLIC SMALL LETTER HA
    '\u0446'   #  0x00e6 5 7TSE6 76 76 (CH6 86 86 S¢ 96 96 	C8 a8 a8 —HARD SIGNà b< b< GYERU7 c7 c7 LSOFTs d< d< Qe4 e4 Y¥ f5 f5 ''015 )f05 eCAPITA^&IO57 17 	“5 (04l 25 l ·UKRAINIAN I5A 3A 	v ? 0Ý)f4? € 'YIì 	7 57 	v 5 0Âfl gSHORT É5< …
: 0xb0`õf‰iDEGREE”8221{f{ó BULLET OPERATORÿ !xbý T o£MIDDLE DOT' Hu221–fZ—SQUARE RO( (11˜fKhNUMERO£ !xaêw 7xURRENCY* Au25a÷ êf-bBLACK € £ x' S !óNO-BREAK SPACE
)

### Encoding Map

e �_map = {Q  V100:^000,w mFNULL  1  1  öSTART OF HEADING, 2, 2, 2TEXiu 3) 3) 0ENDS 
' 4' 4' ¢RANSMISSIOV 5/ 5/ VQUIRY¢ 6# 6# ¢ACKNOWLEDG¥J 7' 7' (BE8  8  2ACK€ GE 9% 9% pHORIZON�yTABULATÀ a1 a1 –LINE FEEDÂ b% b% ŸVERTICAL T c/ c/ KFORMT d% d% çCARRIAGE RETURde+ e+ ‡SHIFT OUßf% f% À IN
    0x00À10: 0x0010,  ð#  DATA LINK ESCAPE
 $ 1, 1, ÷EVICE CONTROL ON. 2. 2. 6TWO\ 3. 3. 7HRE^ 40 40 FFOUR_ 5/ 5/ ÷NEGATIVE ACKNOWLEDG_ 60 60 ÷ SYNCHRONOUS IDL, 7, 7, ö
END OF TRANSMISSION BLOCK‘ 85 85 fCANCEL" 9" 9" W fMEDIUM) a) a) —SUBSTITUT¦ b& b& ßc" c" ×FILE SEPARATONd* d* _GROUP+ e+ e+ oRECORD, f, f, OUNIT*  2¶2¶FSPACî 2«2«€EXCLAMATŒ6MAR‹2©2©OQUOT* ¥2¥µNUMBER SIGN‘2œ2œLOLLA' ”2”{PERCENTO Œ2Œ–AMPERSANDt …2…—APOSTROPHv2vöLEFT PARENTHESISR €2€ORIGH- „2„wASTERISh‚2‚KPLUSí …2…VCOMMA— |2|·HYPHEN-MINU¿ y2y–FULL STOPM r2rWSOLIDH 3k3k–DIGIT ZER¿3p3p& 3i3i% 	3d3d% 	 3d3d— 	÷3c3cM 6FIV3a3a& 5SIX+3a3a% 6EVEü3b3b' E<N ]3]' 'NIC3V3VGCOLOn S3SKSEMI% S3SšLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cNQUES‡4i4i ú•ERCIAL AT<4l4löLATIN CAPITAL LETTER 44y4yÀ #  LATIN CAóPITAL LETTER B
    0x0043: , É #  LATIN CA2 C2 42 42 D2 52 52 E2 62 62 F2 72 72 G2 82 82 H2 92 92 I2 a2 a2 J2 b2 b2 K2 c2 c2 L2 d2 d2 M2 e2 e2 N2 f2 f2 O2 "502 /502 P2 12 12 Q2 22 22 R2  /532 S2  5 T2  5 U2  5 V2  5 W2  5 X2  5 Y2  5 Z2  5 ÷EFT SQUARE BRACKE[5çREVERSE SOLIDU¸5ORIGH[ 5÷CIRCUMFLEX ACCENˆ 5fOW LINõ66\GRAVEL 6÷6÷ESMALãA36õ6õ	0 6ó6ó	0 6ñ6ñ	0 6ï6ï	0 í6í	0 6ë6ë	0 	6é6é	0 6ç6ç	0 6å6å	0 6ã6ã“	0 6ä6äÃÐSMALL LETTER ÓL
    0x006d: , ö	 #  LATIN SMALL LETTER M0 e0 e0 	N0 f0 f0 	O0 "700 /700 	P0 10 10 	Q0 20 20 	R0 30 30 	S0 40 40 	T0 50 50 	U0 60 60 	V0 70 70 	W0 80 80 	X0 90 90 	Y0 a0 a0 	Z0 b0 b0 ÷EFT CURLY BRACKENc. c. ÖVERTICAL LINEW ÷%7d) ORIGHX ö7öGTILDP ç7çVDELET" aÙf" ×NO-BREAK SPAC* Cfœ ÆCURRENCY SIG\bS ¬kDEGREE' fs•MIDDLE DO;#40IfyàCYRILLIC CAPITCI¯$40¬ O6 µUKRAINIAN Iì $40œ /@ $YI¾#40�f6 eSHORT @#4148ç Ap 18ep BÜ 1k8V6 q8ql 'GH7 ‰8I·#41~8~m µ1„8Z£ ì8‹m ZÙ ‘8å6 !1–8–5 !; ¡8.; K"§8§6 E}#41¯8¯6 ƒ#41¼8 ªE-à41e: 0x008e,  ð   #  CYRILLIC CAPITAL LETTER O
    0x041f: @08f, 5 	%PE6 "206 /906 &ER6 16 16 S6 26 26 T¢ 36 36 Uk 45 45 &EF6 56 56 &HA6 66 66 'TSØ 77 77 'CH7 87 87 S¥ 97 97 C9 a9 a9 –HARD SIGNb= b= 7YER¿c8 c8 KSOFTu d= d= We5 e5 Y¨ t9tY13tat ESMALÝ3 qaq 	3 BÓ 3oao 	4 V4 mam 	4 G“3mam 	5 Di kak 	4 I4 iai 	4 Z� gag 
5 i dad 	4 Iê3`a` 	3 gSHORT 9 `a` 	9 KWaW 	4 &EL¡ SaS 
4 M4 JaJ 
4 ó3IaI 	4 º3FaF 	3 ¸4DeD¶4EeEE´4EeE²4EeEI4CeCÀ #  CYRILLICð SMALL LETTER EF
    0x0445: @0e5, Ê #  CYRILLIC4 &HA4 64 64 6TSE5 75 75 'CH5 85 85 SŸ 95 95 C7 a7 a7 –HARD SIGNÜ b; b; FYERU6 c6 c6 KSOFTq d; d; Ke3 e3 Y¢ f4 f4 "514 /f14 %IO
#544 34 ¶UKRAINIAN IÚ 5ZfÃ&YIr fŽdSHORT 3211üfµhNUMERO¡3221„f„ó BULLET OPERATOR‹ 3221xf=´SQUARE ROOT' 2500$%c4$öBOX DRAWINGS LIGHT HORIZONTAL9 29 b]9  hVERTIC7 žd7   DOWN AND R t 1­ b9= 	6LEFé 1/c0é 	/UPw /dv$; 
u î c%{  2¶ bŸ
fA 	� 2� 2ö 	oè 3‚ cyt ý @ ‚ G@  	Â F  5úcš	F oDOUBLE¨9bq: � l5àd¸ 4aSINGLEwª N E 3%dÓ· #WN4 E V E ‚t  ‘ 45Šbìƒ r ƒ  ?“ ‚ žðb7,     #  BOX DRð'AWINGS DOWN DOUBLE AND LEFT SINGLE
    0x2557: 0x00bb, ¥ #  BOX DRD ? K D = 8= /d4= #UPo  SRIGHT� C 9C 3C Â C Ã aC /c8C @ &UP†  b< /be< 
Â AO B cB dB 2 ~ B À dB cB ? À  B } e; /c6; �VERTICAL‡fI 7I �  �#60I Í ™ I Ô "61B /b5‹ GW› H 2H 8 H X H 3H 9� ? 	Ò 	¥"64A /d1A (WN¡¬HORIZONTAL-#65J 2J �  YJ Õ 6J c÷J :/cf� 
;A Õ E0H Ó J/caH E G� Ñ HdHâL1G × ZdRN d œ fc¨Ý £ 
þG 8žd´öUPPER HALF BLOCK, ·Ê?LOW, ÄOLFULLR Å d+ )} 9© ð o©  91ALkFSHADê9‡{MEDIUM ( ðeKDARK& a¡ f¡ ðTBLACK SQUARE
}
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP869.TXT' with2 c; P.py.
c ð#"

import codecs

##ò# Codec APIs

class  (c !s. à):

    def en ñ(self,input,errors='strict'):,  0 preturn 1 ³cs.charmap_B = , †ing_map)m  de< m )B 	m   m dtable)ø ÁIncrementalEå r å  h Ã final=False*  W.Q
?[0]¨  D ¨  ~  ¨ ö eL¨ !@ â ¨  Oª ÑStreamWriter(J,Ð8cs. ¤ 5pasƒ ORead9  	9 2###œ°ings module× 

ý Ãgetregentry(7 
�ž UInfo(¾Õname='cp869', ª!e=0 2().     id: .r=]/ J 	/ ä/ spr7=D# w“#  # 0)

IZ ping MapA0codáTmap =Ïñmake_identity_dict(range(256))
° 5 ‘.update({FÐ0x0080: None,ö    #  UNDEFINED% 1% 2% 3% 4% 5% ’6: 0x0386à ö#  GREEK CAPITAL LETTER ALPHA WITH TONOSú 7f 8f 50b7f ¦MIDDLE DOTK 9& %ac& †NOT SIGN$ a$ ° ¦BROKEN BAR& b& E2018J 0LEFK öNGLE QUOTATION MARK6 c6 96 ORIGH7 d7 6038m CEPSILONEeC E2015z pHORIZONƒ	Ú f* 6038¤ m T®#90? ai ? /IO@ 1@ a@ •DIALYTIKAg"92D 8ç„ ð OMICRON WITH TOðNOS
    0x0093: None, ö    #  UNDEFINED% 4%  5:R #38L ù#  GREEK CAPITAL LETTER UPSILON WITH TO� 6C "ab� C –DIALYTIKA¯ 7G 50a9G æCOPYRIGHT SIGN* 8* 538f* ´ _OMEGA² 9A 50b2A ö SUPERSCRIPT TWOl a+ 3+ FHREE- b- 53ac- ™ ESMALKOALPH— c? &0al [POUNDþ d& ?3ade 	E°eA ó	¦ /ET¤ f= |	= /IO> "a0> /ca¼ 	> &"a1B /90B K AND¹"a2L c¯
_OMICRú#a3A ‹
;"a4A +91Î ~3ga´9¿g6 6BET_a¦9]5 GGAMM6 •?394¡ 8DELl ¡/956 ¥Ù ˜?3968 ZÙ ¢?3975 	4 ©&0b¹ö	VULGAR FRACTION ONE HALF� ž?398h )THj ®9Öw ôk ¢0RñLEFT-POINTING DOUBLE ANGLE QUOTA´ FMARKE ª&0b—LF b²'25¢L’6HADúb—'25“ŠMEDIUM S( s'25†LDARK& X6250áÒBOX DRAWINGS ‚ …VERTICALò bN6252­7  W@ XžXFKAPP#bYhâGLAMD6 Y|	l ÀR MU
    0x0Ð0b8: 0x039d,  ð#  GREEK CAPITAL LETTER NU
 `0x00b93 E25633 öBOX DRAWINGS DOUBLE VERTICAL AND LEFTA aA /51A 8 b8 78 
ODOWNu  c= é ¶ /UP;  d; E039ex $&XI« e3 f3 vOMICRON8 f8 E25108 	¦ oLIGHT â #c0< 4< 	á RI w "c1; 3; ¦HORIZONTAL@ 2@ /2c{ 	· B 3B 1B 
	TÃ 4A 0:
z 59 3z F 6F 603a $P$#c73 3 6RHOi¯O255ai|å¸5å< ¦`µ/69z "¾/66A 
 C Ä6e	Â &	Ë?255B | Ò?256'| G á603a=õUSIGMA÷dÛ603a»6 &TA§dÔE03a5p4 WUPSILƒdÌ603a¨8 &PHËd¾603aš4 C4 ±O03a8  'PSh ¬603a…h GOMEG>œbiESMALâGALPH4 �+b2ž 	4 7BET3 œ<03bÛ	3 8GAMÙ”1	ÒðÏ	Ed�0�: NÍÀx00db: 0x25808,  à#  FULL BLOCK
 å0x00dc: 0x2584& ¬LOWER HALF, d, 603b, ö	GREEK SMALL LETTER DELTA` e4 5` 4  vEPSILON6 f6 E25806 ?UPP–  e0, E03b6, b  'ZE• #e13 73 		2 22 Me  )TH4 34 9f 	(IO™ 43 a3 	FKAPPb#e54 b4 	GLAMD4 64 c4 	%MU‘#e71 d1 	N1 81 e1 	&XIb 91 f1 	WOMICR)"ea6 c)˜ Pg b1 1g 	6RHO™ "O03c32 	GSIGM`*/c24 	kFINAL : 0cd
'TAj,'03ÂUTONOSÇ f'&0aÂ¦SOFT HYPHEzf&0b  PLUS-MINUS¬ + cÛ
UÛfc¯
&PH³fc®
C2 &0a2 {SECTIONÂ cÖ
'PSŒ 8ô «DIALYTIKA w&0b¡ DE Š þ&0aŠ ‡DIAERESIÃíQ
FOMEGŠfð
¥e WITH Ë <Å  Ã ùE L AND
È ’ S#625aSÆBLACK SQUARE¶ 0( óNO-BREAK SPACE
})

### Decoding Table

d  _t A = (U `'\x00':@ #  >¥00 -> NULL! 1! 1! õSTART OF HEADING- 2- 2- ETEXT* 3* 3* 0ENDU 	( 4( À#  0x0004 ->ð END OF TRANSMISSION
    '\x05'
 õ #  0x0005 -> ENQUIRY$ 6$ 6$ µACKNOWLEDGE( 7( •7 -> BELL! 8! 8! tACKSPACG t$  “ 9& öHORIZONTAL TABULATÅ n2 a2 •LINE FEED~ b( ë b& oVERTICV :x0c0 c0 HFORMV r$ ® d& æCARRIAGE RETURme. ‚ e, •SHIFT OUT¨ f& f& IK )10%  10% ô DATA LINK ESCAPR:x11- 1- öEVICE CONTROL ON/ 2/ 2/  4TWO° *13/ 3/ 6HRE` 41 41  EFOURa 
¤1¤ŸNEGATIVE ‰ 1±1±ö SYNCHRONOUS IDLŽ 
¶1¶2 e BLOCK” 
Ë1ËUCANCEî*19ç ÈY eMEDIUMM a* À–SUBSTITUTª 
Á1Áê
´1´ÆILE SEPARATOVdu ¹_GROUP,  
¹1¹oRECORD-  
À1ÀLUNIT+  �  =2Æ!" »aEXCLAMC MAR•"- ¹LQUOT+ #+ µ£NUMBER SIGh$( ¬HOLLA( %( ¤wPERCENTQ &) œ‚AMPERSAN¬1"'"”•“APOSTROPH(M †òLEFT PARENTHESISf)- �ORIGH.  *. ”sASTERISq+% ’GPLUSó ,& •RCOMMA› -" Œ³HYPHEN-MINUÄ .) ‰’FULL STOPO /& ‚TSOLIDJ >b3{“DIGIT ZERÝ8' €' 2/& y& )&& t&  ( t› ' sO àFIVE
    '6'    ð#  0x0036 -> DIGIT SIX
 0'7'   & 7& BEVEN( 8( 8( REIGHT( 9( 9( BNINE' :' a' CCOLOq ;" b" GSEMI& <& c& ÓLESS-THAN SIGQ =+ d+ gEQUALS( >( e( |GREATERV ?. f. ÒQUESTION MARKó @*  40* ÃCOMMERCIAL ADA* 1* òLATIN CAPITAL LETTER A] B3 23 B3 C3 33 C3 D3 43 D3 E3 53 F3 ¹ÿ Ff G3 Æ3 G3 H3 Ñ3 H3 I3 Ü3 I3 J3 è3 J3 K3 ù3 [L3 1Lf M3 f M3 N3 3 tO3 3 Of P3 5'3 P3 Q3 0Q3 R3 0R3 S3 0S3 T3 0üU3 0Uf V3 0V3 W3 0W3 X3 0\Y3 0Yf Z3 0Z3 [3 0óEFT SQUARE BRACKEb$\\1 ò5-ãREVERSE SOLIDUÁ]+  , &Rð] ^1 $óCIRCUMFLEX ACCEN‹ _. EOW L+`% 6YGRAVEN a) À   #  0x0061ð -> LATIN SMALL LETTER A
    'b'   Ÿ#  0x00621 B1 c1 31 C1 d1 41 D1 e1 51 E1 f1 61 F1 g1 71 G1 h1 81 H1 i1 91 I1 j1 a1 J1 k1 b1 K1 l1 c1 L1 m1 d1 M1 n1 e1 N1 o1 f1 O1 p1 /701 P1 q1 11 Q1 r1 R1 s1 S1 t1 T1 u1 U1 v1 V1 w1 W1 x1 X1 y1 Y1 z1 Z1 {1 óEFT CURLY BRACKEU|/ ÃVERTICAL LIN^}* ORIGHZ ~0 CTILDR 3\x7³t7÷TDELET# Aufff	# 8éƒUNDEFINE*\& Þ& Ó& È& ½& ²& @0386.ä §°GREEK CAPITˆ®ãLPHA WITH TONOK ¸h 0xb7f $  h ­“MIDDLE DO3\xaÜ' £sNOT SIG²1\xa² L —“BROKEN BA`\u2018u L �óSINGLE QUOTATION MAR£7 97 •k8 
8038o À8d -> GREEK ð6CAPITAL LETTER EPSILON WITH TONOS
    '\u2015'   #  0x008e -> HORIZONA 4BAR+ H0389+ f+ lGREEK o /TAk  G038a@ /90@ /IOA aA 1A —DIALYTIKAÆ c† 2E _OMICR5HfffeD 3D ”UNDEFINEDj & 4& 9038L 5& VUÅH03ab� 6D !xaà 97H äCOPYRIGHT SIGNÝ H038fs 8+ · OOMEG 0xb2@ m 9B ó SUPERSCRIPT TWOn :xb3, a, CHREE. Iu03aãb. œ ESMALOALPHš an c@ [POUND ad— ; 9d' g  }H03aeB }B 	ƒ�	ç NcNa�? 0Wu0390À a‘C J ANDŠ803c¶a™	M —803c‘a—O I	(91Ñ ³B ã<q9Í
aÄGBETA6 i6 ¶HGAMM7 4¤ ¥¤ 9DELn éa±°§ 6p ¨p ZÝ 76 ²6 5 !xb¿a¹÷	VULGAR FRACTION ONE HALF  8j ®j &THl  ¼î~¾ë @m xh¢ ²ñLEFT-POINTING DOUBLE ANGLE QUOTA· DMARKF b®F ºdG 9u25®Àb0 -> LIGHT üSHADE
    '\u2592'   #  0x00b1 -> MEDIUM ) 3) 2) LDARK' 0P 3' öBOX DRAWINGS LIGHT VERTICALˆ (24_ 48 ” AND LEFTA H039aA 5A ÷GREEK CAPITAL LETTER KAPPA7 b7 67 HLAMD7 c7 77 'MUk d4 84 N4 9256v94 	OeDOUBLEPH2551v aB ¯ H25579 b9 ODOWNw 	í c> -UP< H039ez d< Ë$XI® H039f4 e4 tOMICRON9 H25109 f9 	b±æ 1¶/c0= å Rûy 3< zy  < ‰HORIZONT3„c’A  º C 1C ®«Æ 0?c¸| 3| ±¿  *| G 903a� ÁP-ac¾6RHO°5ac¿	° ‹±'5íÈ­? '69¥cÅ| 'H2566B ÎD 	kÔ	³É 5C ÛE~ 	0â; 	~ H 803aScñ^GSIGMòaÂdë7 %TA¿G03a5vdä5 VUPSIL–803a¯dÜ9 (PH×²dÎ5 ÀCAPITAL LETTø+ER CHI
    '\u03a8'   #  0x00d4 -> GREEK CAPITAL LETTER PS5 95 55 VOMEGAl (b17 67 ESMALj HALPH5 25 75 8BET4 34 84 EGAMM5 9251
95 ôBOX DRAWINGS LIGHT UP AND LEFTÙ H250cp a; ADOWN= RJ > 8y b> §FULL BLOCK' 4e c' ªLOWER HALF- 903b- d- ×	k9DEL75b e5 wEPSILON™ 07 f7 ?UPP™ 6-  e0- ™  ZÏ74 14 
3 T/e23 *TH5 ×/e35 )IO4aœ @	iEKAPPkH03bb5 @	5 HLAMD5 ee>$MU™H03bdg ;N2 e2 9X(bf2 6Ð VOMICR4803c4e27  Pi c=e&2  6RHO ce23  6SIG803cpe:lFINAL ; ue@'TAq83 <£ STONOSË !xaÉ§f7¤SOFT HYPHEŒxa( + PLUS-MINUS° , Hu03cïf$Uï803cÂf&PecÁf%˜!xa1 É #|SECTIONÆ êf	¿8ù ©DIALYTIKA b­Ž  DE©� xL( „DIAERESIÍ yhfý=c4f ®d WITH Ï ÀA
    '\u03bøB0'   #  0x00fc -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
    '\u03ceP dP ROMEGAN T@ 925a� e@ ÃBLACK SQUAREi x' ¹ f) óNO-BREAK SPACE
)

### Encoding Map

e �_map = {Q  ü 100:@00,  v#  NULL  1  1  öSTART OF HEADING, 2, 2, FTEXT) 3) 3) 0ENDS 
' 4' 4' ¶RANSMISSIONV 5/ 5/ VQUIRY# 6# 6# ¢ACKNOWLEDGf7' 7' (BE8  8  2ACK€ FE 9% 9% ùHORIZONTAL TABULATÀ a1 a1 –LINE FEEDÂ b% b% oVERTICT c/ c/ KFORMT d% d% çCARRIAGE RETURde+ e+ ‡SHIFT OUßf% f% II 1x1xö DATA LINK ESCAP�1„1„÷DEVICE CONTROL ON. †1†. 5TWOP1‹1‹. 7HRE^ ”1”0 FFOUR_ ”1”ŸNEGATIVE z1¡1¡÷ SYNCHRONOUS IDL‹ ¦1¦Ff BLOCK‘ »1»VCANCEò1¸1¸W fMEDIUMK °1°—SUBSTITUT¦ ±1±ß¤1¤ÇILE SEPARATON©1©_GROUP+ ©1©oRECORD, °1°OUNIT*  2¶2¶
õ2«2«aEXCLAMëF MAR‹2©2©OQUOT* ¥2¥¦NUMBER SIGT2œ2œLOLLA' ”2”{PERCENTO Œ2Œ†AMPERSAN�2…2…–APOSTROPH2v2võLEFT PARENTHESISW2€2€ORIGH- „2„wASTERISh‚Ð2b,     #  PLóUS SIGN
    0x002c: , – #  COMMA! d! d! ÆHYPHEN-MINUS( e( e( –FULL STOP% f% f% WSOLIDH "30# %30# ¥DIGIT ZEROI #31& 1& 6ONE% 2% 2% 'TWJ 3% 3% 7HREL 4' 4' FFOURr 5& 5& 'IVL 6& 6& 6SIXK 7% 7% 6EVEÀ#38' 8' VEIGHTN 9' 9' (NI1a& a& GCOLOn b! b! KSEMI% S%3c% šLESS-THAN}3\3\[EQUAL¤3[3[GREATERT c3cÕQUESTION MARK4i4i ú†ERCIAL A<4l4löLATIN CAPITAL LETTER 44y4y2 B� †4†2 C2 ‘4‘2 D2 �4�2 ©4©4©2 Fd ¶4¶2 G2 Á4Á2 H2 Ì4Ì2 I2 Ø4Ø2 J2 é4é2 Oö4ö&Ld þ4þd M2 	4	2 ±442 552 Õ5 5 QÈ 5 5 Y5 5 �5 5 è5 5 UÈ  5 V2  5 W2  5 :5 5 À  LATIN CAPIó	TAL LETTER Y
    0x005a: , ç #  LATIN CAPI2 Z2 b2 b2 öEFT SQUARE BRACKET/ c/ c/ ö REVERSE SOLIDUS+ d+ d+ ?IGH[ e0 e0 ÷CIRCUMFLEX ACCENˆ f- f- …LOW LINE� "60$ %60$ \GRAVEL #61( 1( 5ESMALeAX 20 20 	B0 30 30 	C0 40 40 	D0 50 50 	60 60 	F` 70 70 	G0 80 80 	H0 90 90 	I0 å/6a0 	J0 ã6ã	àK0 ä6ä L0 é6é0  M0 é6é0  N0 ì6ìÀ O0 7ø7ø`  P0  7 
Q0  7 
R0  7 
97 7 
7 7 
U�  7 
V0  7 
W0  7 
X0  7 
å7 7 
ã7 7  ã]CURLYâ7þ7þ`VERTICp_7÷7÷RàX ö7öFTILD—7ç7çVDELET" aÙf" ×NO-BREAK SPAC* s9Å –POUND SIGYa	8I–BROKEN BA¿aÿf_{SECTIONN ÷fÇ†DIAERESIÜaì9LBCOPY9
� ¶a0ÐLEFT-POINTINGñ DOUBLE ANGLE QUOTATION MARK
    0x00ac: 089, Æ #  NOT SIGN$ d$ %f0$ ¦SOFT HYPHE' #b0' 8' jDEGREEN #b1' 1' «PLUS-MINUS+ 2+ 9� õ SUPERSCRIPT TWO¤ #b3+ aV 	+ FHREE- 7- 8ª ¦MIDDLE DOT& b& %afS ïRIGHT-POINTINGab=%abF ±VULGAR FRAC‘„ONE HALFz 2384z ez  HvK TONOS' 5' %f7[ ' œDIALYTIKA1 61 +861 ü
CAPITAL LETTER ALPHA WITHA 8A dA EPSILONC 9C Ü „ /ET‚ a? 9Œô ? /IO@ ð/92Â _OMICRÂ eƒ 5C UfC �Æ OOMEG9laEA ESMALÈ;ANDÕ9‘/a4Ð }9œaFBETA5 ¦a�GGAMM6 aèô8DELl ad¬¤ %au[n ZÙ Ra5 	4 M/acx)TH6 @aƒ üÔ 6b­GKAPPxb®GLAMD6 bb®&MUŸ $b«N3 …b&XIf u/bepû8 alcPk aSc%RHÂ#3ac7SIGadÀ #  GREEK CAðPITAL LETTER TAU
    0x03a5: @0d1, É #  GREEK CA4 vUPSILON8 68 28 6PHI4 74 34 C4 84 44 'PSh 94 54 VOMEGAž a6 9
÷IOTA WITH DIALYTIKD bD 6z NG cG bG ESMALÇCALPHŠ VTONOSÊ d? d? 	EÒ„ A eA eA 
= f= f= 	F
> "b0> /fc> 	@[ AND O 1O d‘J?#b24 7ƒ 	6BETø#b33 83 	GGAMM4 44 ¦
8DELh ®™ÚÑ ¬/e0ž 	ZÑ «e	8	2 ©e	2 )TH4 ©e	4  +Ì ¦e	3 GKAPPj–e	4 GLAMD4 ƒe9
MIbue6
N1 ee4
X×bY/e9Ç	WOMICR©cQ/ea6 	Pg c3e}
5RHO”c1eÊ
—FINAL SIGc8eî
4 8e
äc6f›
TÖ 6f�
àc5fœ
Þc5ff
Üc3fÏ
ÚÀ
    0x03ca:� 0x00a0,  ð#  GREEK SMALL LETTER IOTA WITH DIALYTIKA
. q0x03cb:B /fbB 	UPSILONE cE /a2E 	TOMICRE VTONOS† dA 3A 		† A eA /fdA 	COMEG
? B2015? %8e? ãHORIZONTAL BARª C2018* 0öLEFT SINGLE QUOTATION MARK6 96 c` ORIGH7 25007 %c47 áBOX DRAWINGS LD ª p 25029 bP9  †VERTICAL7 È/dap 	‘DOWN AND Ã = 1­ /bf=  6< 4° cÈ°  /UPw ‘/d9w 	; 
u î c%{  2¶ bŸ
fA 	� 2� 7ö  oè 3‚ /c1ý @ ‚ 5@ 		Â F  5úc}	È DOUBLE : 1øbq: � 05ø õ8 ;
ª#57v Ä° > 	µ"5a= /c83{ qy çby < 	w 6d; *m
} "63¹ b4	B 
ƒ 6A c7ð 6cðA ±©B	Å G  8Nd¬õ UPPER HALF BLOC¼#58ldz?LOW, �#KFULLR 9öîÊUSHADEå9ÅÝðMEDIUM SHADE
    0xà2593: 0x00b2,  à#  DARK SHADE
 b0x25a0& %fe& ðhBLACK SQUARE
}
""" Python Character Mapping Codec cp874 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP874.TXT' with@ cO P.py.
w ±#"

import  cs

###t ²APIs

class ($ .“ 1):
ã `def en ñ(self,input,errors='strict'):,  creturno “.charmap_B = , ¦ing_table)o /deo -B 	o  o ú ÁIncrementalEç r ç  h Ã final=False*  Y.S4[0]¤� D"ª  €  ª ø e½ª !@ ä ª  Qª ÑStreamWriter(N,Ò8cs. ¤ 5pas‡ ORead9  	9  ÐJàs module API

ý Ãgetregentry(7 
¡ž UInfo(Âaname='’%', d !e=0 2().     if: 'r=Ïy/ J 	/ ä/ spr7=D# w“#  # ")
[  —T” D5codä2 = '`'\x00'Þ1 # $� -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" ¢ACKNOWLEDG ï 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED½ b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h 10# ô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1vàDEVICE CONTROLð  TWO
    '\x13'
 õ #  0x13 -> DEVICE CONTROL THREE/ 4/ 4/  EFOUR. 5. 5. öNEGATIVE ACKNOWLEDG] 6/ ö6 -> SYNCHRONOUS IDL+ 7+ 7+ õ
END OF TRANSMISSION BLOCKŽ 84 84 eCANCEL! 9! 9! U eMEDIUM( a( A( –SUBSTITUT¢ b% B% VESCAP! c! C! ÖFILE SEPARATOFd) D) _GROUP*  e* E* oRECORD+  f+ F+ LUNIT)  & "  ! 20) CSPACÇ !  1  €EXCLAMAT‚3MAR�"+ 2+ LQUOT) #) •²NUMBER SIGN‡$& ŒHOLLA& %& „wPERCENTM &' |‘AMPERSANDq 1"'")u“APOSTROPH(I fñLEFT PARENTHESISP +')+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF 0" 3[“DIGIT ZER¡1% `% #ONt2$ Y$ éæ½3T$ àÝ& T“ ×Ô% SK 3FIV” Ê% Q% 2SIX#Ã$ Q$ 3EVEèµ& R& E-L º& M& $NI):)FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 À E
    'F'    ð#  0x46 -> LATIN CAPITAL LETTER F
' 0'G'   1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 B1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ 5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿrOW LINEÖ `# 6ñYGRAVEJ a' çESMAL AV b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ ëg/ Û	/ éh/ Ù	/ çi/ ×	/ åj/ Õ	/ ãk/ ÓØ	/ ál/ Ô	/ ßm/ Ù/  Ýn/ Ù/  Ûo/ Ü¼ Ùp/ 7è^  ×q/ À    #  0x71 ð-> LATIN SMALL LETTER Q
    'r'   �#  0x72 / R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ B/ óEFT CURLY BRACKEG|- C- ÒVERTICAL LINEU }( D( ORIGHV ~. E. CTILDN B\x7f# JF  TDELET! Pu20ac# !  80! ’EURO SIGN“ f\ufffe$ 1$ ŸUNDEFINED$ ³$ ¨$ �$ F2026� ’óHORIZONTAL ELLIPSIï¾ ‘R 
â †$ {$ p$ e$ Z$ Q$ M$ C$ G$ 9J$ E2018º9JL2ôSINGLE QUOTATION MARK[F20195 [6 Ù9mk ODOUBk 	dk ~k 6 &226 �DBULLüf\u2013! ƒwEN DASHä 4" �)EM" 	£999999990xa0@!  ÉAÕNO-BREAK SPACò@0e01+ ) „°THAI CHARACˆdKO KAI›60e0ÞA0 YHO KH2 ïA{ð THAI CHARACTER ò$KHO KHUAT
    '\u0e04'   #  0xA4 -> THAI CHARACTER 3 7WAI3 53 53 'ON2 62 62 wRAKHANG5 75 75  wNGO NGU1 81 81  0CHOÙ ˜ 92 92 I– a3 A3 
É b3 B3  WSO SOÇ c/ C/  Ç 'OE2 d2 D2  JYO YÅ e1 E1  D)'DAc f2 F2  †TO PATAK2 %102 /B02  HOlŽ&112 12 —NANGMONTH1&128 28 hPHUTHA5 35 35  XNO NE� (B(XDO DEÿ %B%ITO T� #B#T/U‹1!B!3 8AHAÇ $B$4 Og %B% *†1!B!xBO BAIMQ1!B!WPO PL�1"B"jPHO PH,#B#HFO Fb !B!b 	Y!B!a ‰2C b ISAMPµ2"C"GMO MÆ 2C ³2CXRO RU` CR2CILO L¤2CL] 
C
XWO WAÎ2C “As2CSS%2C b 	LCfHO HIP_2CLÃðULA
    '\u0e2d'õ    #  0xCD -> THAI CHARACTER O ANG
    '\u0e2e'/ E/  —HO NOKHUK3 f3 F3  –PAIYANNOI3 %303 /D03  gSARA A0 10 10  ÇMAI HAN-AKAT6 26 26  f g 31 31 Mb 41 41 ø 50 50 1 61 61 'UE’ 71 71 2 82 82 b 90 90 U1 a1 A1  ePHINTH1 6fff„ DB1 ”UNDEFINEDU 
$ C$ ûH ð$ 60e3áDá÷URRENCY SYMBOL BAH|4âEâ†4âEâ¬1 ÝEÝO160e4ÜEÜ—I MAIMUAN9 äEäA9 7ALA½4îEî¨LAKKHANGYA¨ òEòMN'MO€4óEóvMAITAIKb60e4ôEô PEc ôEô 0 (THÆ ôEô1 R,b%Eô§ 1 wCHATTAW±&4c6 6 ˜THANTHAKH&4d5 5 xNIKHAHIÍ‘E%2 iYAMAKK53E3vXFONGM1 50F0—DIGIT ZER[5*F** 'ON"5"F") (TWR F) 8HRET F+ FFOUR75ýFý* (IVT òFò* 7SIXS éFé) 7EVEµÐ58'   #  0xF8û -> THAI DIGIT EIGHT
    '\u0e59'   #  0xF9+ GNINE* a* A* ÷CHARACTER ANGKHANKHU4 b4 B4  UKHOMUŽ Ffffe0 C0 ”UNDEFINEDT 
$ D$ E$ F$ ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð6 cp875 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP875.TXT' with? � P.py.
v ±#"

import  sÓ s ÁAPIs

class  ($ . 1):
nAdef ô ñe(self,input,errors='strict'):,  Pcreturno B = , 4ing&C  o ?o *B 	o  o ú ±Incrementalê$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� Daª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  £�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±aname='‘%', d !e=0 2().     if: 'r=Ïy/ J 	/ ä/ spr7=D# w“#  # ")
[  –Tí
~ ä2 = 'P'\x00¥5 00;ANULL0  1 1 õSTART OF HEADING+ 2+ 2+ 4TEX8x03( 3( 0ENDQ & (9c& 4& dCONTRO› t  º 5" ôHORIZONTAL TABULATION  "862  060 
R 8x7f" 7" TDELET88x97! 8! C (8d" „" · |" 0h" àB -> VERTICAL ðTABULATION
    '\x0c'
 ó #  0x0C -> FORM FEED$ r"  $ D$ æCARRIAGE RETURN e, N E* “SHIFT OUTN 8x0f$ F$ IG '10#  10# ôDATA LINK ESCAPEN (11+ 1+ öEVICE CONTROL ON- 2- 2-  5TWOZ 3- 3- 5HRE\ (9d/ 4/ ‚ Q (85" 5"  (08" 6" …BACKSPACh (87$ 7$ h 1F 8" TANCEL‰ (19C 9! ÔEND OF MEDIUM( 9/A( k 8Ì/1B"  1`1`ÔILE SEPARATORm 1@e_GROUP*  e1eoRECORD+  	  lNUNIT) 8r2rë i2i" /2^" S2S" 4›2F n  �2FHLINE±(x1$2HáõTRANSMISSION BLOCK€bZ »2X
j8W2WcC 8X2Xß ae R	‡ R8R2Rf 0i2KtENQUIRYª (06ˆ C¥ACKNOWLEDGk0G>5BELG943494341‰ 34õ SYNCHRONOUS IDLŽ 9=3=9=3= (x93=<9‘ ;" 0f )>]j96369636963696361¶ 6D(6FOU�	(BŸNEGATIVE ) 9’3O51Ã K“SUBSTITUTâ “ Û4Qû2u03Q£4OóGREEK CAPITAL LETTER ALPHA�àu0392'   #  0xÿ'42 -> GREEK CAPITAL LETTER BETA
    '\u0393'   #  0x434 HGAMM5 45 45 9DELj 55 55 wEPSILON¡ 67 67 ZÕ 74 74 
3 83 83 *TH5 95 95 $IO[/  {qA4 òLEFT SQUARE BRACKETþ .. B. ’FULL STOP$ <$ C$ ÓLESS-THAN SIGK() D) âFT PARENTHESIST ++ E+ GPLUSO !$ F$ òEXCLAMATION MARKO &+  50+ ’AMPERSAND$ Ša) Š 51$ ¾HKAPPŠb5 óHLAMD5 c5 ô'MUœ d2 ñN2 e2 î'XId f2 éXOMICR &a07 ìPi &a12 ë6RHOœ a&5é4SIG&]c ê5êORIGHë$/ ëgDOLLARu*& ísASTERISm)# çx è;, èeSEMICO‚^$ èóCIRCUMFLEX ACCEN°-, 6é³HYPHEN-MINU_/' ìTSOLID"  ac6Ù'TAsaa6×Uaaa6Ü(PHB`6ÝC3 `6Þ(PSf ^6ÚGOMEGÜaF6Ý “è WITH DIALYTIKC T6íHF |ãþ`VERTICˆ2INE[,( ÷%COl%  ñ0PERt_' À   #  0x6D -ð> LOW LINE
    '>'   ò#  0x6E -> GREATER-THAN SIGN, ?, F, ÒQUESTION MARK( B\xa8+ T  70( “DIAERESIS$ Pu0386& $ 1$ øGREEK CAPITAL LETTER ALPHA WITH TONO@ f @ 2@ EPSILONB 9‚ 3B T€  0xa0< "  € 4> ÓNO-BREAK SPACa\é a+ ) 5) é /IOh  ? c? 6? _OMICRè eB 7B U*	fB 8B NOMEG,`;  c,9@ ¢AVE ACCENT:' A' CCOLO#  B  gNUMBER¥@& C& ÂCOMMERCIAL An 1"'"’  ÁD( “APOSTROPH½=M gEQUALSs "& <OTA Í5. 8˜DIALYTIKAå7§ 0 %¦LATIN SMAL#AbZ / /  B/ V/ /  C/ d^ ò/  D/ r^ ø/  j_/ è/  F^ g� Õ/  G/ h/ Â/  H/ i/ ±/  I/  ã b14 §¹×
§ Ê3 23 Ì3  GBETA2 32 Ø2  HGAMM3 43 ã3  9DELf ¢ñ3  U› Ì8 5  ZÍ (xb>9	 DE4 Xj» 9ÿJ‡ k/ ÿ¦l/ ÿL^ m/ ÿM/ n/ ÿÜo/ ÿO^ p/ ÿP/ À'q'        #ð  0x98 -> LATIN SMALL LETTER Q
    'r'   #/ 9/ R/ `\u03b74 / A/ ZGREEK^ 7ETA1 81 B1 *TH3 93 C3 )IOe a2 D2 HKAPP˜ b3 E3 HLAMD3 c3 F3 #MUû 0xb4. !  , A00 ÂACUTE ACCENT' ~$  ' 1' RTILDE  s  2  Ñ S/ t/ 3/ ~ u/ 4/ Ô v/ 5/ V� w/ 6/ W/ x/ 7/ X/ y/ ëY/ z/ ëZ/ ëd4 ¿ëN0 e0 ê'XI` f0 çvOMICRON5 &c05 êPe &c10 ç7RHOa 31 åDSIGM!xa1 ÁBè—POUND SIG¹ a=Bæ9 ó ALPHA WITH TONOÕ \aŒB>  EPSILON@ œB@ T| c]B"<   �y „DIALYTIK Fu03aéB4A 
ú c8B=  &� @ :S@  U:c(Bd@  c~yD  OOMEG€2’BˆPFINALr˜Au03c‚ÁB‘'TAÂ&c5j ’,165 ’H“CB“C1 CB“ðPSI
    '{'      ð  #  0xC0 -> LEFT CURLY BRACKET
    'A'   - 1- òATIN CAPITAL LETTER A1 B1 21 B1 C1 31 C1 D1 41 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 B\xad4 ¹A1 ³SOFT HYPHEN& Pu03c9( & B& ¥GREEK SMALÝCOMEGáf\u03903 C3 öIOTA WITH DIALYTIKA AND TONOS~ bK DK UPSILONN F2018™ EN ØôSINGLE QUOTATION MARKƒ F20155 F5 pHORIZONÝ2BAR) }$  6D6ORIGH7J. 7J_ K1 7¹ L1 7Lb M1 7M1 N1 7MO1 7Ob P1 7P1 Q1 7Q1 R1 7çB\xb14 D7ãPLUS-MINUS SIGî 8\xbaD;±VULGAR FRACisONE HAL'H\x1a] ;“SUBSTITUT} ` 87' ‚ •ANO TELEI‹6201¾Dò”ó	0xa6_  DóuBROKEN ï"\\# % EïÔEVERSE SOLIDUÅ
Õ EëÕ SN >EßV T1 ß©U1 ßUV1 ßV1 W1 ßW1 X1 ßX1 Y1 ßY1 Z1 ßZ1 À\xb2'     # ð 0xEA -> SUPERSCRIPT TWO
    '\xa7'
 0 # * B* ´ECTION SIGN' (1a' C' ŸUBSTITUTE% D% (abJ E% ñLEFT-POINTING DOUBLE ANGLE QUOTAŽ DMARKi (acD FD 7NOT± 0  "  Ø  F0# “DIGIT ZERý 1% 1% #ONÕ 2$ 2$ E3$ 3$ 3HREJ 4& 4& BFOURÛ 5% 5% #IVJ 6% 6% 2SIXI Ö7$ 3EVEØ8J 8& REIGHTL 9& 9& $NI)3\xbJFt3\xaT , vPCOPYRu Ç)\xxFxFxbxFxo y"9f¸ yóCONTROL
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
#
# cp932.py: Python Uni=   CB ¡ for CP932- ð*Written by Hye-Shik Chang <perky@FreeBSD.org>
#

import _R rcs_jp,   €multibyt› ±ec as mbc

& ' =: A.get !('´ ’')

classª ( !s.· !):Q2e =t .  
  P ±Incrementale„er(mbc.Mª   ,U ß — 4 ¤   £ ‚  D‚   ‚ 4 ‚ 	ÑStreamReader(T,™! Õ. ^  N^ 
! ^  ^ ódef getregentry(& breturn"UInfo(¶Sname=WJ0=þ #()? 5   iFI .r=/ J 	/ ²/ s r =w# cwriter# <# ÿ/49ÿ/49ÿÀik Chang <peòrky@FreeBSD.org>
#

import _codecs_kr,   ‘multibyte ’ as mbc

 =: A.get ð('cp949')

class C] ( !s. �):
    en " =t .  do   P ÁIncrementalEB tr(mbc.Mª   ,U  s   ‚ >cs.4 ¤   ‰ ‚  Dª ‚   ‚ 4 ‚ 	ÑStreamReader(T,™! Õ. ^ OWrit^ 
! ^  ^ ódef getregentry(& breturn"UInfo(¶Sname=WJ0=þ #()? 5   iFI .r=/ J 	/ ²/ s r =w# we# <# ð)
#
# cp950.py: Python Uni“U¡ for CP950-  ? ÿ
ten by Hye-Shik Chang <peÿ$twÌÿ*twÿ/50ÿÿÿD250' Ç¶à  ¦   ÿ“Ïeuc_jis_2004qEUC_JIS* Àen by Hye-Shò$ik Chang <perky@FreeBSD.org>
#

import _codecs_jp,   ‘multibyte ’ as mbc

 =: A.get ð
('euc_jis_2004')

class Cd (# !s. �):
    en " ={ .  dv   P ÁIncrementalEB tr(mbc.M±   ,U  s   ‚ >cs.4 ¤   ‰ ‚  Dª ‚   ‚ 4 ‚ 	ÑStreamReader(T, ! Ü. ^ OWrit^ 
! ^  ^ ódef getregentry(& breturn"UInfo(¶Zname=^Q7=#()F <   iMI .r=/ J 	/ ¹/ s§r§=~# wl# C# c)
#
# Yðx0213.py: Python Uni¡cÐ for EUC_JISX* ;  M ßten by Hye-ShjÂ ÿÿH^9 êÒü  Â   ˜ðp.py: Python UnicðDode Codec for EUC_JP
#
# Written by Hye-Shik Chang <perky@FreeBSD.org>
#

import _cN qs_jp, c  ‘multibyte ’ as mbc

 &= : A.get ò('euc_jp')

class¬ ( !s.¹ �):
    en " =u .  dp   P ÁIncrementalEB tr(mbc.M«   ,U  s   ‚ >cs.4 ¤   ‰ ‚  Dª ‚   ‚ 4 ‚ 	ÑStreamReader(T,š! Ö. ^  O^ 
! ^  ^ ódef getregentry(& breturn"UInfo(¶Tname=XK1=ÿ #()@ 6   iGI .r=/ J 	/ ³/ s¡r¡=x# cwriter# =# )Ô Mðkr.py: Python Uni•W!KR/  A )$krÏ+kr/krÿÿE2kr'! Ìºä  ª   “ðgb18030.py: PythðLon Unicode Codec for GB18030
#
# Written by Hye-Shik Chang <perky@FreeBSD.org>
#

import _cO `s_cn, _ %cs ‘multibyte ’ as mbc

 &= : A.get A('gb“ ’')

class® ( !s.» �):
    en " =v .  dq   P ÁIncrementalEB tr(mbc.M¬   ,U  s   ‚ >cs.4 ¤   ‰ ‚  Dª ‚   ‚ 4 ‚ 	ÑStreamReader(T,›! ×. ^  P^ 
! ^  ^ ódef getregentry(& breturn"UInfo(¶Uname=YL2= #()A 7   iHI .r=/ J 	/ ´/ s¢r¢=y# cwriter# ># )Öÿ gb2312.py: Pyth $ /  A r ’ ÿÿCX! Íºä  ª   �À)
#
# gbk.pyðN: Python Unicode Codec for GBK
#
# Written by Hye-Shik Chang <perky@FreeBSD.org>
#

import _cK `s_cn, [ %cs ‘multibyte ’ as mbc

 &= : A.get â('gbk')

class¦ ( !s.³ �):
    en " =r .  dm   P ÁIncrementalEB tr(mbc.M¨   ,U  s   ‚ >cs.4 ¤   ‰ ‚  Dª ‚   ‚ 4 ‚ 	ÑStreamReader(T,—! Ó. ^  L^ 
! ^  ^ ódef getregentry(& breturn"UInfo(¶Qname=UH.=ü #()= 3   iDI .r=/ J 	/ °/ sžrž=u# cwriter# :# S)
"""îB'hexf'Lò - 2-digit hex content transferX¢ing.

ThisYB de/ë ps from ÓBs to	 0.

€ <ò
Marc-Andre Lemburg (mal@l `.com).£ 
'(5Óbinascii

###µ `APIs

 Ð ‹ ó(input, errors='strict'cassert D ==   6(l ‚.b2a_hexT c), len )x ¿ x 4?a2bx  oself, 
 ¾÷ D) W ê W 9 	Š Í&Ú Ç � ä ³final=False*  à õ · .ú ' ý©©ñ¿„  ®  „ ’® :
3® * ‡wÀcodecs.Streað2mWriter):
    charbuffertype = bytes

class StreamReader(Codec, c (s. L ó### encodings module API

def getregentry(I dreturnj x QInfo(²  ¶ µname='hex', b be=hex_  Rdecod   ²incremental6 6r=I E¶ /er/ J 	/ Dh / s@wq=2~R # rc# p# ‚_is_textØ ’ing=False! ñ)
""" Python Character Mapping =ð generated from 'hp_roman8.txt' with$  &ac.py.
VÒBased on data: ðftp://dkuug.dk/i18n/Còmaps/HP-ROMAN8 (Keld Simonsen)O ðOriginal source: LaserJet IIP Prin¹ ñ	User's Manual HP part no’ ó33471-90901, Hewlet-Packard, June 1989¿  (U¿ Ü �permissioŒ Ó"""#"

importe 

¥-5API (!s. "):Î  »2ó(self,input,errors='strict'Ð ³
Ô4Ò(e(= ,V “ing_table= o ro )B 	o  o û ç  ¤ ½ e¤  h   fö´*  Y.S4[0]¥� �ª   €  ª ø ª (@ ä ª  Qª O[ ¤ 5pas‡ 9  	9  Ð�u="p-;{ 1().w Ÿ ê$e=  ¾  ƒ�")
C TT˜ ½Ó¨2 =  `'\x00'Ù ñ #  0x00 -> NULLÃ  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ & À    '\x04'  ð   #  0x04 -> END OF TRANSMISSION
    '\x05'
 . 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& •7 -> BELL 8 8 tACKSPACC t" ¹ 9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEEDx b& B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* •SHIFT OUT  f$ F$ IG '10#  10# ô DATA LINK ESCAPB8x11+ 1+ öEVICE CONTROL ON- 2- 2-  4TWO¨ (13- 3- 6HRE\ 4/ „D‰ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1– e BLOCKŽ «1«UCANCEÌ(19Ý ¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  { v2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"Pu“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þP3[“DIGIT ZER¡ø% `% òï$ Y$ éæ$ T$ àÝ& T“ ×Ô% SK 3FIVÊ% Q% 2SIX#Ã$ Q$ 3EVEèð 8'        #  0xð
38 -> DIGIT EIGHT
    '9'   v#  0x39& BNINE% :% A% RCOLON  ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, F, ÒQUESTION MARKÇ @(  40( ÃCOMMERCIAL A4A( 1( òLATIN CAPITAL LETTER AY B1 21 B1 C1 31 C1 D1 41 D1 E1 51 F1 61 Fb G1 71 G1 H1 ±WH1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 Ob P1 51 P1 Q1 Q1 R1 R1 S1 S1 T1 ÔU1 Ub V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ \5ãREVERSE SOLIDU¯])  * R¦Y ^/ óCIRCUMFLEX ACCEN… _, ÿEOW Lß`# 6ñYGRAVEJ a' çLSMALõb/ å	/ óc/ ã	/ ñd/ á/ ÀER D
    'e'  ð#  0x65 -> LATIN SMALL LETTER E
' 0'f'   / 6/ F/ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ ðU/ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðóEFT CURLY BRACKEG|- îÃVERTICAL LIN0}( çORIGHV ~. æCTILDN 3\x7�~7×UDELET! "80D ! 8É’<control>è H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ a$ [$ b$ P$ c$ G$ d$ C$ e$ 9$ =8=$ 9@9@9@9@9@9@9@9@9@9@9@9@9@Ð96 -> <controÐl>
    '\x97'
 ÷ #  0x97 -> <contro$ 8$ 8$ 9$ 9$ a$ A$ b$ B$ c$ C$ d$ D$ e$ E$ f$ F$ 'a0$  A0$ äNO-BREAK SPACEmc) 1) öLATIN CAPITAL LETTER A WITH GRAV< 2e 2< ¥CIRCUMFLEX} Æ/A3A E} º/A4< }  ×/A5A •DIAERESIS½ «/A6@ I½ �  ÈAè{A � (b4ÃACUTE ACCENT¨ Au02cê OA„MODIFIERÝÖ7 € (MANDAR÷HINESE FOURTH TONE)V 6 V 9V ò [ < )xa÷QÝ Au02dS` Q¥SMALL TILD‚dãASCU„è † d gAk< 	Î A Au20a‚£ ˆ“LIRA SIGN$ (xaäBˆUMACRO! dB€YÂ á] f< €*º: böByiDEGREE½ c‰BcCœ tCEDILLAž e> `	ž <  d1\œB\Nz 	f< W	x : a: Qô
INVERTED EXCLAMATION MARKæ bá^4 MQUES1 4Û 9‰CURRENCY}(a3%ZPOUND% 5% &:YEN# 	‡#1SEC— ©Au019ÎÍB	6Fp5HOOa7 Ð  ~	„ e$ CkÀ SMALL LETTEðR A WITH CIRCUMFLEX
    '\xea'
 ÿ #  0xC1 -> LATIN SMALL LETTER E? (f4? 2? O? b? 3? U? (e1? 4? ü UACUTE÷ 9: 5: ÷ 	: (f3: 6: ò 
: 	k7: í 	: (e0t 8: è FGRAVè 8: 9: è 	: (f2: A: è 
: 	\B: è 	: eNC: è •DIAERESISÔ	MD> ì > (f6ð E> ð > c> F> ô > 'c5> &D0> eCAPITA‡ú ‡RING ABOçeA ÆIHd&DÆ€ þ USTROKcc9DÄ= A2 eï ·í  dí ¼í 	Hfè ¼
æ eæ ½ä cËD³”eQD¹å 	Edª ¹z Íz dz ¿@ ÍÿDÅ@ ‰	¡(efÛÃö º 	> ÃôSHARP S (GERMAN)?d²Ã¸ 8KcŽEÆ	ù cVEÁ} FTILDO	< ¾ÀIN SMALL LETðTER A WITH TILDE
    '\xd0'
 ð #  0xE3 -> LATIN CAPITAL LET< ô ETH (ICELANDIC)? f? 4? OSMAL= (cd| 5= | I¸ EACUT¸ (cc< 6< EGRAV< (d3< 7< Ox  (d2< 8< 
x 5< 9< 	¨f< A< 	i² : Au016¥âB: fSî SCARONß < 1´ < C< 	v :  0xda8  XD: v Uv ÜPu0178> v E< Y< “DIAERESIS¶ 0xff> | F@ 	¶ > 'de> &F0> º _THORN	A 1A 	 ? (b7€ 2? ¤MIDDLE DOTã bF·”MICRO SIG¾8xb6J �zPILCROW' 	° ‡ôVULGAR FRACTION THREE QUARTERhPu2014b ¨F„uEM DASH§ ¦Fj[ %ONY 6 Fd6 DHALF3 aoF[ðFEMININE ORDINAL IºDATOR5 b5 ToMASCUL6 
 abô ^FPð	EFT-POINTING DOUBLE ANGLÛ 1OTADCMARKz Fu25a”FXpBLACK Sd©bk EORIGHl !xbÂ° N¨PLUS-MINUS	óufffe'
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
#
# hz.py: Python Uni:   C? q for HZ' ð*Written by Hye-Shik Chang <perky@FreeBSD.org>
#

import _O rcs_cn,   €multibyt• ±ec as mbc

& ' =: A.get Ò('hz')

class¤ ( !s.± !):À2e =q .    P ±Incremental\„er(mbc.M§   ,U Ÿ — 4 ¤   À = codec

clþass IncrementalDecoder(mbc.Multibyte  ?,
   @ >cs.4 !):5   1 =  @

cl‚ �StreamRea| yCodec, ƒ ! ,< (s. ^ Writer(^ ! ^  ^ ódef getregentry(& dreturn¥ p QInfo(ÿ  7–name='hz'G en=- 2().  d—   iÁ: 'r=€E\ r/ J 	/ / s�r�=t# wb# 9# ñ)
# This module implqðs the RFCs 3490 (IDNA) and ð1 (Nameprep)

import string D, re®�
from uniG@datad  / Èucd_3_2_0 as  @

# m ð$ section 3.1
dots = re.compile("[\u002E\u3002\uFF0E ]61]")D ù	5
ace_prefix = b"xn--"
s  Óassumes queryÞ ðs, so AllowUnassigned is true
w C c(labelyQ# Mapf1new Q = [] ‘for c in  ‹ Œ#ift  N ã.in_table_b1(cV  &   ^ ± to nothingW     …continue ‚ †.append(·D.mapf Q2(c))4 — ´ = "".join(@ !)
 ¢# Normalizc / ò$.n" ‚("NFKC",ì B �ProhibitQ  c1« Q or \?  ô /  ;/c2+ O3(c)U 4* 5* 6* 7* 8* 9brraise UÅõError("Invalid character %r" % c×¡Check bidiš`RandALùsØ`d1(x) ýx!A 	"c  ù Í0ere‘"a /    R  Ðy ñ. Must perform further¤  E   |# tests^ a1) TheS ó sY ¨Ó5.8 MUST be pÒ;ed.X n 1 Îð C.8, which was already checWked
  ó'# 2) If a string contains any RandALCat character, the- J „MUST NOTD C 
> .3  if# (z ùprep.in_table_d2(x) for x in label):>  Æ ù'raise UnicodeError("Violation of BIDI requirement 2")
G ?# 3aA '  !be.GfirsC ˜ ;theE , and az	S KlastA £` ¥s3not_ w[0] or  ?-1]e13eSretur¿è

def ToASCII(Ò6tryv á# Step 1: try - é 5 " =0.enö‘("ascii")& iexcept[ Bpass& 6lse °# Skip to sz ¡3: UseSTD3} ñRules is false, soC  ~9 8k£if 0 < lené V < 64s  > 	    Ñö Pempty¯„too longd1p2: nameG¡ 6 = ‰ ý4 ë 
F ) 4Ž	³k  —E^kñ5: Check ACE prefix #if�òstartswith(sace_$ ³ÚL× ;  < _ ßA6: Eð( �PUNYCODE… x@puny!I §7: Prependm 	G ¿ " +Þ 	582sizÅîêÅ æ8æÈLŸ1“  1¶Ñ Òif isinstance8 w, bytes˜Qpure_Cb = TruÓ e"	î §­ ‰	 &   _   «
 ! 	; F~Ö  ²  2 ¡2: PerformþÀprep
       ñ label = nameprep( 3)
  õ.# It doesn't say this, but apparently, it should be ASCII nowF Etry:  Z f " = ö .encode("ascii"}  except Uni  ZErrorG Yraise  ò("Invalid character in IDNl ^ ñ# Step 3: Check for ACE prefix« bif not6 ò.startswith(ace_' )� ¢return strA%, Í M p œ4: Removem 1I[lenh (]
F P5: Deñ  using PUNYCODE$ dresultJ 11.d* `("puny4 )")L ±6: Apply To·D Ž 42 = (U 
: `7: ComR the # P of sZ 6 - 5one 3` #Và2 will already:áin lower case., iQ V.' V() !=u2vš#1DNAÕâÂround-trip",™  2ñ B8: rçð  5­   ò

### Codec APIs

class (Œ1cs. ICdef àself, input, eùÂs='strict'):Â H#if  	! ý  # #ýðA is quite clear that implementations must‡i Ò  B   j²unsupported† ` handl“""+µ B B PÔ 
¢ 6fb'', 0Ü 5W" =6'6'6\< Epassã Jelse• #Çåame: fast path2  Ó (3s =ý§.split(b'.Ž  (  ^,  ‹	 js[:-1]r  * %P(0 < - c) < 64% &  ™6 ó empty or too longü> &ifc Îs[-1]) >= 64– d [ Ò±,g ø Ö = bytearray(ÃÁ  YCdotsWA ¾  ¼Qs andÈ5  É 
Â @trai•0_do Ÿ	Æ2del÷ I '- â 
… #if%
  Î b# Join0RU+002É   -.extenda 
  ËŠ)V–Àbytes(resultñ"+trailing_dot), len(input)

    def decode(self,  ò, errors='strict'):/  3 #if D != ! :N     �raise UniY EK Ò("Unsupported@ P hand› 2 "+o ”  B bif notŽ \ ¶eturn "", 0• Ò# IDNA allowsÒ ôing to operate on‘  Õ •ngs, too.¹ s ’sinstance)Š, bytes)† õ# XXX obviously wrong, see #3232V Í  q" =I V 
ë £ace_prefixö ù ¹# Fast path^ :tryœ  s r&Î.á‰'ascii') -  dexcept'D¾` Fpass~‚labels =· º.split(b"."ç ' 1andˆ ª[-1]) == 0f ¹i = '.'ö Fdel A  OelseH '· µresult = []A 2forX 2 in	 sP 5 £.append(Toæ(� )ñ ƒ’".".join(9 )’	‹ð
class IncrementalEnA r( ¾cs.Buffered" ž Î!_b& !_e< Ös, final4  ýÓaò	is quite clear that impl± Ñtions must beg%ctZ i u;w(b'', 0‰š žCdots�)œ m&b'm/if.\  Ä
& í U Ã $ Ç  #eld ®_ ò# Keep potentially unfinished´ õ until the next callô  d   ƒ        å c óúfarray(t…size = 0. {0if 5 õJoin with U+002EU  ¤   ‹ @.ext·Fb'.'Š       ] Y += 1> 
: uToASCIIï 8  @  e…F  ^ 2i ; ! ¥ O(ŽM,))
;ÀentalDecoderð(codecs.BufferedIncrementalDe ár):
    def _b& !_d ó(self, input, errors, final4  8 #if Â != 'strict'S     �raise Unip EH Ò("Unsupported@ Â handling "+l !)
™  B bif not‹ \ Çeturn ("", 02 á# IDNA allows Ñ  \ Ôto operate on“  ¶ ˜ngs, too.u ³isinstance($st1 ˜   òlabels = dots.split- )J Jelse· ó # Must be ASCII‚ 1  X q   = P –, "ascii"Y  ( € 1 � 7"."@trai[•_dot = ''i 2if @ 
Ÿ p J[-1]  w T .U     3del^  C t   #elc O^ ò# Keep potentially unfinishedU ù until the next calld  h ƒ   ÿ     ä  b PresulN%[] …size = 0 3for­ "in	 sì F £.append(To%(z)é0if a 
A  §   U += 1x  3lenO Pw Â = ".".join( H) + õ Q c  M ! ¢ r‰I ,« ð)

class StreamWriter(C’,8cs. VJpass9 ORead9  	9 ð### encodings module API

ãÃgetregentry(7 º ‘ ž UInfo(ý Åname='idna', c !e=/ 2().  r   i‡: 'r=šE¿ /er/ J 	/ É/ sowo=b# rY# L# ÷
)
#
# iso2022_jp.py: Pyth6û  ã1ISO( !JP7  èð ten by Hye-Shik Chang <perky@FreeBSD.org>
#

im
" _ƒ_w ",   �multibytž¡c as mbc

& , =? A.get #('Q E_jp'“¾  �" =~ Ù÷{  ª¿d(mbc.M´   j « ¸ .s.4 ¤   ‰ ‚ ÀalDecoder(mbÿc.MultibyteIncrementalDecoder,
     >cs.4 !):5   1 =  ÷

class StreamReader(Codec, mbƒ ! ,< (s. ^ OWrit^ 
! ^  ^ ódef getregentry(& dreturn¥ Î QInfo(ÿ  7öname='iso2022_jp'O en=5 2().  d   i©: 'r=ˆE\ ¼/ J 	/ ës¥r¥=|� # wj# A# f)
#
# ù ð_1.py: Python Uniý  ý � for ISO#AJP_1;  M ð&ten by Hye-Shik Chang <perky@FreeBSD.org>
#

import _Y 3cs_{ ä më( 0 as~"

 =? A.get (ÅD_1')ÏÂ (# !s. –þß�  P Å(  p m — 4 ¤   ‰ ‚  ‚   ‚ 4 ‚ 	q#ß/_1%ç2%2%Ž2%ŠÀ          coðdecs.IncrementalEncoder):
     2c = ‡

class .  De" þ r(mbc.Multibyte  ,M  Q   @ 
‚ T ‚ 	ùStreamReader(Codec, ƒ ! ,¾ (s. ^ OWrit^ 
! ^  ^ ódef getregentry(& dreturn¥ Î UInfo(4öname='iso2022_jp_2'Qe°=7 2().  d¡   iù: 'r=¾/ J 	/ ¹/ s§r§=~# wl# C# h)
#
# û ð004.py: Python UniB  � for ISO(qJP_2004A  S ð&ten by Hye-Shik Chang <perky@FreeBSD.org>
#

import _\ 3cs_� ì mó( 0 as†"

 =? A.get (ÍT004')\È (& !s. &Ÿ‹è#Š  P Î¬î¬4 ¤ · ‰ ‚  !‚   û~   b 	°4 ‚ 	z.á aTI  ?   1ž3.3+Ž3(4Àodec.decode
þ
class IncrementalEncoder(mbc.Multibyte  ?,
   @ >cs.4 !):5   1 =  
‚  De ‚   ‚ 4 ‚ 	�StreamReaþ yCodec, ! ,¾ (s. ^ Writer(^ ! ^  ^ ódef getregentry(& dreturn¥ p QInfo(� ¹öname='iso2022_jp_3'Qe=7 2().  d¡   iM: .r=/ J 	/ ¹/ s§r§=~# wl# C# g)
#
# û ðext.py: Python Uni� ÿ � for ISO'aJP_EXT?  Q ð&ten by Hye-Shik Chang <perky@FreeBSD.org>
#

import _[ 3cs_ ê ms( 0 as„"

 =? A.get (ËText')YÆ (% !s. #œˆå ‡  P Ë+ÿß `K JH  >   -›/kr)/KR%ˆÀ22_kr')

cla ss Codec(c !s. �):
    en 0 =  "c.   de   ñ

class IncrementalEB þ r(mbc.Multibyte  ,U  s   h >cs.4 ¤   ‰ ‚  Dª ‚   ‚ 4 ‚ 	ÑStreamReader(T), ! ,a(s. ^ OWrit^ 
! ^  ^ ódef getregentry(& dreturn¥ Î UInfo(¶öname='iso2022_kr'O5=5 #()D :   iKI .r=
/ J 	/ ·/ s¥r¥=|# wj# A# ò)
""" Python Character MappingZð iso8859_1 generated from 'MAPPINGS/ISO# / À-1.TXT' with2 âP.py.
m £#"

import�S

###j DAPIsr= Ö² æNó(self,input,errors='strict'û �
ÿƒcharmap_B = , µing_table)
o Žo )B 	o  o €<ç  h Ã final=False*  Y.S4[0]¤� �‡ €  ª ø eNª !@ ä ª  Qª û([,T ¤ 5pas‡ 			9  	9  ÐJàs module API

ý  *`ŸØ] ‘T˜Ð

decoding_taðble = (
    '\x00'
 õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þP3[“DIGIT ZER¡ø% `% òï$ Y$ éæ$ Ð3 -> DIGIT TH°REE
    '4'   ò#  0x34 -> DIGIT FOUR% 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& 3NIN• :% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, F, ÒQUESTION MARK@(  40( ÃCOMMERCIAL A4A( 1( òLATIN CAPITAL LETTER AY B1 21 B1 C1 31 C1 D1 �“ D1 E1 �1 F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 Ob P1 51 P1 Q1 Q1 R1 ;S1 Sb T1 ÔU1 Ub V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ 5ãREVERSE SOLIDU¯])  * R¦Y ^/ óCIRCUMFLEX ACCEN… _, ÿEOW Lß`# 6ñYGRAVEJ a' À    #  0x61 ð-> LATIN SMALL LETTER A
    'b'   �#  0x62 / B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ E/ f/ 6/ F/ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ ðR/ s/ ðS/ t/ ðT/ u/ ðU/ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðóEFT CURLY BRACKEG|- îÃVERTICAL LIN0}( çORIGHV ~. æCTILDN 3\x7�:7×UDELET! "80D ! 8É’<control>è H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ a$ [$ êŒP$ ß$ G$ Ô$ C$ É$ 9$ =8=$ 9@9@9@9@Àntrol>
    '`\x92'  ð#  0x92 -> <control>
 X'\x93$ 3$ 4$ 4$ 5$ 5$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ A$ b$ B$ c$ C$ d$ D$ e$ E$ f$ F$ 'a0$  A0$ äNO-BREAK SPACEý(a1) 1) õ
INVERTED EXCLAMATION MARK4 UAU•CENT SIGN$ UAUZPOUND% VAVŠCURRENCY( ZAZ:YEN# YAY¥BROKEN BAR• ZAZ1SECà 	¼ ]A]•DIAERESISK ]A]‹COPYRIGH	bAbö
FEMININE ORDINAL INDICATO© sAsÿLEFT-POINTING DOUBLE ANGLE QUOT¦ “A“+NOœ ’A’¦SOFT HYPHEË”A”›REGISTEREÐšAšUMACROK b—B—iDEGREEÌb”B”ªPLUS-MINUS* ŠBŠô SUPERSCRIPT TWO°b�B�	* 5HREb—B—€ACUTE ACèS –B–ZMICRO¢ ˜B˜zPILCROW' šBš¥MIDDLE DOTq ˜B˜uCEDILLA" –B–æ &ONä —B—oMASCUL˜
b˜B˜ò™b™B™¢VULGAR FRAŽ ONÖEARTEb¬B¬6 EHALFeÜB¹3 Tø1 QUk ÝbÈBÈAQUES2cØCØõLATIN CAPITAL LETTER A WITH GRAVŠcîCî< 	Šâ c C ÀLATIN CAPITAðL LETTER A WITH CIRCUMFLEX
    '\xc3'
 ü	 #  0xC3 -> LATIN CAPITAA UTILDE< 4< 4< •DIAERESIS@ 5@ 5@ –RING ABOV� 6A 6A 2 72 72 C0eEDILLA± 8> 8> E> 7GRA¬ 9< 9< FACUT¶ a< A< æ bA BA ªc@ C@ Iù d< D< 
ù e< E< ù  fA FA ù 'd0@ /D0@ ô ETH (Icelandic)1(d1? 1? N8	^(d2< 2< O< 	mdÖDÖ< 	tdÖDÖ< td×D×A 
õ ÒDÒ< °àDàõMULTIPLICATION SIGNŸÐDÐn USTROK•dÑDÑU ÑDÑ< 
 ÌDÌ<   ÍDÍA dÑDÑYù 
½ ÑDÑ_THORNRÑDÑESMAL®õ SHARP S (German�eÏEÏ	> -	ReÊEÊ: 	ó eÈEÈ: ®eËEË? ðTILDE
    '\xe4'  ð #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
3 `'\xe5'
  > 5> ¥RING ABOVE? 6? 6? 0 70 70 C­ uCEDILLAl 8< 8< E< 7GRA¦ 9: 9: FACUT° a: A: ¥CIRCUMFLEX³ b? B? œc> C> Iñ d: D: 
ñ e: E: ñ  f? F? ñ 'f0> /F0> ô ETH (Icelandic)l(f1= 1= N.ETILDå(f2: 2: O: 	Y(f3: 3: 	h(f4: ¶t hf·F·? 
í ²F²: ¢ÀFÀÕDIVISION SIGN�¬F¬f VSTROKŽ­F­UŽ­F­: 
Ž¨F¨: Ž ©F©? T­F­Yñ 
· ­F­_THORN2­F­y · ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_10 generated from 'MAPPINGS/ISO$ / Ð-10.TXT' with3 ‰ P.py.
o ±#"

import  sÌ l ÁAPIs

class  ($ . 1):
ÞAdef í ñe(self,input,errors='strict'):,  [creturno B = , 4ingC  o 8o Àrors='strictS'):
  ð	return codecs.charmap_de á(input,errors, ðing_table)

class IncrementalEn6  r( >cs. x Qdef e, r(self, h Ã final=False*  ¥ ¢ @ :  F .§  § ?[0]ª  Dà ª  €  ª ø eª '@ ª  ª àStreamWriter(C›,T ¤ Dpassã  ORead9  	9 2###�ðings module API

ý Ãgetregentry(7 
�ž UInfo(Sõname='iso8859-10', �!e=5 2().     ik: .r=d/ J 	/ é/ sur<=I# w˜# ¥# @)


O[ Ping T* I5codé2 = ,`'\x00'ãñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ôàc'     #  0x1Cð -> FILE SEPARATOR
    '\x1d'
 € #  0x1D) _GROUP*  e* E* oRECORD+  f+ F+ LUNIT)  & "  ~  20) RSPACEž !  1  òEXCLAMATION MARK+ "+ 2+ LQUOT) #) 3) ²NUMBER SIGNO $& 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 1"'"†7$ ƒPOSTROPH(I 8% ñLEFT PARENTHESISP +')+ 9+ ORIGH,  *, A, sASTERIS_+# B# GPLUSç ,$ C$ RCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF 0" 3[¢DIGIT ZEROG 1% `% #ONt2$ Y$ #TWH 3$ T$ 3HREJ 4& T“ 3FOU‘5% SK 3FIVJ 6% Q% 2SIXÜ 7$ Q$ 3EVEè8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 ML1 æLb M1 îb M1 ðN'        #  0x4Eð -> LATIN CAPITAL LETTER N
    'O'   #  0x4F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 óEFT SQUARE BRACKET$\\/ z 5C. ãREVERSE SOLIDU¯])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, ÿrOW LINEÖ `# 6ñYGRAVEJ a' çESMALxAV b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ ÓP	/ K/ l/ Ô	/ L/ m/ Ù/  M/ n/ Ù/  Ûo/ Ü¼ Ùp/ 7è^  ×q/ ðÕr/ ðÓs/ ð"t/ ðöu/ ðÍv/ ðËw/ ðÉx/ ðÇy/ ð ÀTTER Y
    '3z'  ð#  0x7A -> LATIN SMALL LETTER Z
' +'{/ B/ òEFT CURLY BRACKET- |- C- ÒVERTICAL LINE( }( D( ORIGHV ~. E. CTILDN B\x7f# Ò F  UDELET! '80!  80! ’<control>“ H\x81$ 1$ 2$ 2$ 3$ 3$ 4$ 4$ 5$ 5$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ [hb$ P$ c$ G$ d$ C$ e$ 9$ =8=$ 9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@a@A@ÔNO-BREAK SPAC©Au010ÛÊAEœPCAPITEžÓA WITH OGONEKÂAu011`= ^= E= fMACRON= 2= w= G= wCEDILLA> »{ ‘> I> { @= ª= 	ûAu013Ä< Â< Ky 
· (xaÜAÜ·SECTION SIG3ue ße Le  —ÿ> ù> D> WSTROK6= = S= )CAÓ6À  0xAB -> LAÿ.TIN CAPITAL LETTER T WITH STROKE
    '\u017d'   #  0xAC -> LA=  Z= SCARON< !xa: < D< ¤SOFT HYPHE& Vu016ab E& b Ub 6MACc Gu014= F= 4ENG–  b0n –  B03 §DEGREE SIG–  05( ø  B1& – ESMAL3A” cOGONEKa Vu0113; 2; E; Ï 2; 3; G; vCEDILLAw &2bw 4< I< w 9; 5; GTILD&37: 6: Ku 
± !xb: ‰7< ¦MIDDLE DOTÖ &3ca 8% ˆ La  ‰1< 9< D< ÷6; A; S; õ ÏØ 9B: le° l	tj Gu201®jpHORIZONà6BARO6%m	c k; k	; iAu010k
Ci»xE	“!xcC€= DACUT•0xc2F< �< £CIRCUMFLEX&!xc…A ‡A 8xc4} ‡< •DIAERESIS| É| Œ@ –RING ABOVþ 6� “A 2 Fu012xC‰©<î0¡C¡o C,!xcvì ¡< ,å Ý8é ^¢< 	µ !xcÊy ¥= ¥ } f} ª@ +OT¤C°r	ù !xc¬¼ Ã| ®ÞÀ    '\xcf'  ð0   #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
    '\xd0'  @ /D0@ ó ETH (Icelandic)? Pu0145A ? 1? N wCEDILLA> c> 2> O> cMACRON= 0xd3; ú /D3= UACUTE< 4< 4< ¥CIRCUMFLEXA ö } 5A FTILD} 6} 6< ³Pu0168B t7@ U6
| : ¸ 8< rTSTROK¹ Vu0172y 9= y eOGONEK2a; z A= 
¯b< B< ¯ g} CA s8xdd� D@ Ys
½ e< E< _THORNd 8xdfA ãESMALá÷ SHARP S (German¢ 01@ .Eá	> A¹ 
be9 6EÝ; 	ô e(: Ù: ¯eÛEÛ? 	àeÙEÙ: çeÖEÖ> ”RING ABOV (xeÙEÙ
? 0 Au012Û›É	0 º	NAu010“; È	; CÖ'CA7 e9›Å	: E: ÕAu011< t Â: 	¯ (xeÁEÁ; — y 7µ y ¾> +OT–)ñ ¼	> fñ (xeºEº: Æ Ýy ¸y õ (xf™F¸ÀETTER ETH (I÷6celandic)
    '\u0146'   #  0xF1 -> LATIN SMALL LETTER N WITH CEDILLA< d< 2< O< cMACRON; 0xf39 w 3; UACUTE: 4: 4: ¥CIRCUMFLEX? 5? 5? FTILDy (³ 6: “DIAERESISx Pu0169z h7> U,
x 88 x 8: fTSTROK³ Au017hu 9; u cOGONEK° 8xfav A; 
¡b: B: ¡ c? C? g!xf‘-D> Yg
· ex E: �THORN (IH 3¨kF? óKRA
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_11 generated from 'MAPPINGS/ISO$ / Ð-11.TXT' with3 ‰ P.py.
o ±#"

import  sÌ l ÁAPIs

class  ($ . 1):
\Adef í ñe(self,input,errors='strict'):,  ¤creturno B = , 4ingC  o 8o *B 	o  o ú ±Incrementalã$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DZª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  œ�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±cname='ŠU-11', i !e=5 2().     ik: 'r=Ô~à,
        incróementaldecoder=Incr D 3,
  �streamrea) S R # rwriter=# W # �)


### [ ±ing Table

~ Ping_t A = (u a'\x00'~ õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t" "  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& T B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ ÀF -> SOLIDUS€
    '0'   ò#  0x30 -> DIGIT ZERO% 1% 1% 2ONE$ 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOURo 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& $NI):% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, F, ÒQUESTION MARK@( 4YÃCOMMERCIAL A4A( \òLATIN CAPITAL LETTER AY B1 i1 B1 C1 v1 C1 D1 �1 D1 E1 �1 ™F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 óP1 51 P“ Q1 Q1 R1 ;S1 Sb T1 ÔU1 Ub V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ ©5ãREVERSE SOLIDU¯])  * R¦Ð SQUARE BRACK ET
    '^'   ó#  0x5E -> CIRCUMFLEX ACCEN, _, F, ‚LOW LINEO `#  60# YGRAVEJ a' 1' òLATIN SMALL LETTER AV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ Ùc N/ o/ Ü’O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ðS/ t/ ðöu/ ðU^ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðô EFT CURLY BRACKi|- î‡VERTICALB}( çORIGHV ~. æCTILD~3\x7�ß7×UDELET! "80D ! 8É’<control>è H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ õh[$ ê$ P$ ß$ G$ Ô$ Cð <control>
    '`\x8e'  ð#  0x8E -> <control>
 X'\x8f$ F$ '90$ /90$ 1$ 1$ 2$ 2$ 3$ 3$ 4$ 4$ 5$ 5$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ A$ b$ B$ c$ C$ d$ D$ @9@9@9@a@A@ãNO-BREAK SPACE�Au0e0G±AE÷THAI CHARACTER KO KAI0 S0 Q0 YHO KH2 a2 _2 7UATe p3 n3 Wf 3 }3 'ONe �2 ‹2  wRAKHANG5 ž5 œ5 wNGO NGU1 «1 ©1 0CHOn˜ ¹2 ·2 I– È3 Æ3 
É ×3 Õ3 WSO SOÇ â/ à/ Ç OYð2 î2 JYO YÅ ý1 û1 D)'DA• 2 	2 †TO PATAK2 12 B2 gHO THAŽ1 B ×THO NANGMONTH11(B( 8 hPHUTHA5 +B+XNO NE� (B(XDO DEÿ %B%ITO T� #B# Å 8THU‹1!B!3 Ad$B$4 Og %B% *†1!B!xBO BAIMQ1!B!ðPO PLA
    '\u0e1cö$'   #  0xBC -> THAI CHARACTER PHO PHUNG
    '\u0e1d3 D3  WFO FA/ e/ E/  b 'AN2 f2 F2  a 0 %200 /C00   b vSAMPHAOe &215 15  GMO MÆ &22/ 2/  gYO YAK_ 30 30  XRO RU` 40 40 U\ 5, 5,  XLO LI²&261 61 ] 7, 7,  hWO WAE~81 81  hSO SALë 91 91 GRUSIð a1 A1 SLb0 B0  gHO HIP` c0 iLO CHUÃ C9O A€CˆHO NOKHU@C‡PAIYANNO'3DWSARA ˆ3D¶AI HAN-AKAT-3	D	f g 
D
1 Mb D1 ø D0 1 D1 'UE’ D1 2 D Œv3D0 1 DePHINTH1 Tfffe'Ñ  60e3…D…÷URRENCY SYMBOL BAH 4†E†*4†E†\A1 �E�é4€E€xI MAIMU‡4ˆEˆA9 7ALAa4’E’˜LAKKHANGY‘4–E–Mò'MO$4—E—vMAITAIK20e4˜À  0xE8 -> THý!AI CHARACTER MAI EK
    '\u0e49'   #  0xE9 -> TH0 7THO1 a1 A1 'RI1 b1 B1 ‡CHATTAWA6 c6 C6  ·THANTHAKHAT5 d5 D5  xNIKHAHI2 e2 E2  ‡YAMAKKANd f2 F2  XFONGM1 %501 %F01 —DIGIT ZER[&51* 1* 6ONE„ &52) 2) (TWR 3) 3) 8HRET 4+ 4+ GFOUR~ 5* 5* (IVT 6* 6* 7SIXS 7) 7) 7EVE€&58+ 8+ GEIGHÝ5ÜFÜz)NIQÕFÕ§ANGKHANKHU´ ØFØUKHOMUŽ Tfffe'=  ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_13 generated from 'MAPPINGS/ISO$ / Ð-13.TXT' with3 ‰ P.py.
o ±#"

import  sÌ l ÁAPIs

class  ($ . 1):
"Adef í ñe(self,input,errors='strict'):,  Écreturno B = , 4ingC  o 8o *B 	o  o ú ±Incrementalã$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DZª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  œ�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±cname='ŠU-13', i !e=5 2().    à,
        incróementalencoder=Incr E 3,
  i -de/ D / �streamreaX S R # rwriter=# W # �)


### [ ±ing Table

~ Ping_t A = (¤ a'\x00'­ õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t" "  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& T B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº ð.'        #  0x2Eð -> FULL STOP
    '/'   p#  0x2F$ rSOLIDUS" 0"  30" ¢DIGIT ZERO% 1% 1% 2ONE$ 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOURo 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& $NI):% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, SÒQUESTION MARK@( 4YÃCOMMERCIAL A4A( \òLATIN CAPITAL LETTER AY B1 i1 B1 C1 v1 C1 D1 �1 D1 E1 �1 ™F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 $T1 ÔU1 UÄ V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ Ë5ÐREVERSE SOLID US
    ']'   ò#  0x5D -> RIGHT SQUARE BRACKET/ ^/ E/ óCIRCUMFLEX ACCEN, _, F, ‚LOW LINEO `#  60# YGRAVEJ a' 1' òLATIN SMALL LETTER AV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ Ù4 M/ n/ Ù/  N/ o/ Ü’O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðU� v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðšEFT CURLYi|- î‡VERTICALB}( çÀV  ~. æCTILD~3\x7�7×UDELET! "80D ! 8É’<control>è H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ õh[$ ê$ P$ ßð #  0x8C -> <conðtrol>
    '\x8d'
 ú #  0x8D -> <con$ e$ E$ f$ F$ '90$ /90$ 1$ 1$ 2$ 2$ 3$ 3$ 4$ 4$ 5$ 5$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ A$ b$ B$ c$ C$ @9@9@9@9@9@a@A@ãNO-BREAK SPACEÕAu201— ÕAEóRIGHT DOUBLE QUOTATION MARK6 (xaWAW•CENT SIGN$ WAWZPOUND% XAXˆCURRENCY(  § § \¡ _LOW-9§ nAn¥BROKEN BAR¨ oAo1SECó Ï drArðLATIN CAPITAL LETTER O WITH STi d ‹A‹BCOPYjf Au015´ è �f Rf uCEDILLAg ªAªÔLEFT-POINTINGÕ?ANGÛÊAÊ+NOÚ2 	AÉ¦SOFT HYPHE ±& ËšREGISTEREcó * Ñõ A¶(xbßBßhDEGREE5(xb!BÜªPLUS-MINUS* ÐBÐô SUPERSCRIPT TWOcbÖBÖ	* 4HRE¦  µMÍBÝ �†[bFBêZMICRO° 2BÙzPILCROW' ÛBÛ¤MIDDLE DOTÒ fÙBÙOSMAL×b×B×%ON1015Œ Ø	e ÖbÖBÖ9×bŠdB×¢VULGAR FRAî ONïÐARTER
    '\x@bd'  ð#  0xBD -> VULGAR FRACTION ONE HALF
( X'\xbe3 E3 äTHREE QUARTERS9 (e69 F9 óLATIN SMALL LETTER AE0 Pu01042 œ &C00 fCAPITA2 Æ WITH OGONEK= 2¨ = 1= I= &00z 2= A= fMACRONz 0é z 3= C= DACUTó !xcñ "  < 4< y …DIAERESIc c5· @ 5@ ”RING ABOV� Pu0118C � 6A E½ t&12= 7= 7c= 8= 7&CAs0xc9: ÷ 9< ¶ sAu017> ò A< Zò < 1ëB< x <DOTn21C@ G| vCEDILLAi3~ ¼P K>  2a6ø Ç> !­&3b= Ë{ L{ 6_DÙS> ëUu0143z DØN< ¯4 ó D×< 
o!xdx eDØOz ÝDØ< 	m!xdµ y Õ= DTILDÐ!xd"< Ð< Q d7m@ Ó¡MULTIPLICA7SIGû7ÐDÄU#> 41m žÅTTSTROKè Fu015ÎDÆS6< Æ¶ �Ø!Ã= a JDÅC 7Ã6Ç@ ðCARON
    '\xdf'  ð #  0xDF -> LATIN SMALL LETTER SHARP S (German)
3 ±'\u0105'   > /E0> ÖA WITH OGONEK; &2f; 1; I; &01; 2; v fMACRONv &07; 3; Cv SACUTE: 0xe48 ë 4: u •DIAERESIS> '> 5> ”RING ABOV} Pu0119 h6? E· h&13; 7; -d; 8; -&CAg!xe® ï 9: ° gVu017at A: Zê : 1ÛB: t <DOTb2'C> Gx sCEDILLAÝGu013z D< K< &2bð E< Ÿ&3c; »Lw 6CF¹S< ÛAu014
‹F¸N: ¡%46° F·: 
c!xf�QF¸Ov ÅF¸: 	a(xfµFµ; DTILD°!xfé ¯ °: -fN> ³ÇDIVISION SIGÍ7‹ U&42Œ¡<TSTROKÜ Fu015²F¢;6: ¢° ‹êŸ; Q U@ )¡U &7e,£> 7u20·F¢ðRIGHT SINGLE QUOTAT×óMARK
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW ðCodec iso8859_14ð generated from 'MAPPINGS/ISO8859/ Ð-14.TXT' with3 ñ
codec.py.

"""#"

import  €s

### C% Â APIs

class ($ . à):

    def en ñ(self,input,errors='strict'):,  0 creturno “.charmap_B = , ¦ing_table)o /deo -B 	o  o ú ÁIncrementalEç r ç  h Ã final=False*  Y.S4[0]¤� D"ª  €  ª ø e½ª !@ ä ª  Qª ÑStreamWriter(N,Ò8cs. ¤ 5pas‡ ORead9  	9  ÐJ€s moduleÛ 

ý Ãgetregentry(7 
¡ž UInfo(Â“name='isoa%', i !e=5 2().     ik: 'r=Ô~/ J 	/ é/ sur<=I# w˜# ¥# ")
[ Ping T™ I5codé2 = ,`'\x00'ãñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] ð5'     #  0x15 -ð> NEGATIVE ACKNOWLEDGE
    '\x16'
 ö #  0x16 -> SYNCHRONOUS IDL+ 7+ 7+ õ
END OF TRANSMISSION BLOCK_ 84 84 eCANCEL! 9! 9! U eMEDIUM( a( A( –SUBSTITUT¢ b% B% VESCAP! c! C! åFILE SEPARATORo d) D) _GROUP*  e* E* oRECORD+  f+ F+ LUNIT)  & "  • 20) CSPACÇ !  1  €EXCLAMAT‚3MAR�"+ 2+ LQUOT) #) 3) ²NUMBER SIGN$& 4& XDOLLA& %& 5& wPERCENTM &' |‘AMPERSANDq 1"'"�u“APOSTROPH(I fñLEFT PARENTHESISP +')+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF 0" 3[¢DIGIT ZEROG 1% `% #ONt2$ Y$ #TWH 3$ T$ 3HREJ 4& T“ 3FOU‘5% SK 3FIVJ Ê-3Q% 2SIXÜ Ã$ Q$ 3EVEèµ& R& E-L º& M& $NI):º FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 À8 -> LATIN CðAPITAL LETTER H
    'I'   ú#  0x49 -> LATIN C1 I1 J1 A1 J1 K1 B1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/  5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿrOW LINEÖ `# 6ñYGRAVEJ a' çESMALžAV b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ çi/ ×	/ åj/ Õ	/ ãk/ ÓE	/ ál/ Ôt	/ ßm/ Ù/  Ýn/ Ù/  Ûo/ Ü¼ Ùp/ 7è^  ×q/ ðÕr/ ðÓs/ ðÀETTER S
    C't'  ð#  0x74 -> LATIN SMALL LETTER T
' +'u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ B/ óEFT CURLY BRACKEG|- C- ÒVERTICAL LINEU }( D( ORIGHV ~. E. CTILDN B\x7f# ìF  UDELET! '80!  80! ’<control>“ H\x81$ 1$ 2$ 2$ 3$ 3$ 4$ �� 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ a$ [$ b$ P$ c$ G$ d$ C$ e$ 9$ =8=$ 9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@a@A@ÔNO-BREAK SPAC©Au1e0#ÊAE¶PCAPITE¸ø B WITH DOT ABOV@ ?@ a@ 	ö> !xa< "  > {£POUND SIGN(Au010¦% |c £ C£ 1010Â@ ˜@ 	£ > (1e~ ²> ÐCAPITAL LETTEðR D WITH DOT ABOVE
    '\xa7'
 ó	 #  0xA7 -> SECTION SIGN' Pu1e80) ' 8' òLATIN CAPITAL LETTER Wg 7GRAc 9:  c 9< œCOPYRIGHTe 2+ e A) e 	DACUTÈ Vu1e0b< B< ESMALŸ Gu1efz C> ß Yß dx ß D< ¤SOFT HYPHEA8xae& E& ©REGISTERED@0178, F* Œ –DIAERESIS«1l @ /B0@ FÌ Uu1e1f€ &B1@ 	J> 6012)&B2> JG~ F0121~ 3@ 	~ > 71e4~ 4> ~ M~ 71e4~ 5@ 	~ > 0xb6º 
 B6> yPILCROWá11e5) ¡sáP¥ 8¥ Œ	¥ Š Au1e5ïz Šz 	: x 3á > Ÿ	> x �6—�—Sò fz Ÿ	z | ¸4´ �ò z ¶ M &85@ ·@ 	z > 6ªË	> ö !xc4OCÉA6ø !xcx < Åø < ®!xc< Ã< £CIRCUMFLEX‚!xc­A Ä} DTILDÈ!xc¯< Â} ±!xc¯@ Â| JRINGcœA ÅòA ³ T2 ÐC¨uCEDILLA-í> Îp E> 
æZCÐðCAPITAL LETTER Eð WITH ACUTE
    '\xca'
 ò #  0xCA -> LATIN CAPITAL LETTER E< ¥CIRCUMFLEXA bA BA •DIAERESIS@ c@ C@ I� FGRAV½ d< D< 
ù e< E< ù  fA FA ù Pu0174B z/D0@ Wù �  d1?  »/D1A NA ETILD:(d2< 2< O< 	v(d3< 3< 	vdó ´ 4< õ  5} 5A 
õ 6< 6< ²11e6.²7@ T5vDOT ABO¯(d8€ 8@ uVSTROK²9= 9= U} 
²· vå< 
²àDà< ² áDáA v(xdåDåYù ½  dô²å< ½  åDåESMALeSHARP Ó'e0«EÚ	5 A° 	©eÓEÓ: ê (xeÑEÑ: è eÔEÔ? 	UeÒEÒ: ÝeÏEÏ> JRINGReÞÙEÒ
? E(e7šÂ	0 CštCEDILLA©e¾E¾	< (
Ö»E»: 
Ö¹E¹: Ö ð b'     #  0xEB ð"-> LATIN SMALL LETTER E WITH DIAERESIS
    '\xec'
 Ÿ #  0xEC > I> UGRAVE: d: D: FACUT: e: E: ¥CIRCUMFLEXy f? F? ñ Pu0175@ ñ /F0> Wñ }  f1=  0/F1? N? ETILDö (f2: 2: O: 	j(f3: 3: 	j(f4: 4: í  *í 5? 
í 6y 6: ¤@1e6b@ ¤7> T+vDOT ABO™ f8< ¶ 8> iVSTROK¤9; 9; Uy 
¤a: A: 
¤ë ¯ B: ¤ ÁFÁ³ j(xfÅFÅYñ ·  H7ó ¤Å: ·  ÅFÅ? · ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_15 generated from 'MAPPINGS/ISO$ / Ð-15.TXT' with3 ‰ P.py.
o ±#"

import  sÌ l ÁAPIs

class  ($ . 1):
þAdef í ñe(self,input,errors='strict'):,  ×creturno B = , 4ingC  o 8o *B 	o  o ú ±Incrementalã$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DZª  €  ª ø ª (@ ä ª Às,decoding_tðable)[0]

class StreamWriter(Codec,c (s. º):
    pass9 ORead9  	9 ó### encodings module API

def getregentry(7 sreturn ‘ ž QInfo(�  ‘ õname='iso8859-15', i !e=5 2().   deV    ²incremental: 6r=I EÅ /er/ J 	/ Dl / sur<=h/R # w˜# ¥# @)


O[ Ping TÙ I_ _t 2 = ,`'\x00'2ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' À  #  0x26 ->ð AMPERSAND
    "'"   ñ#  0x27 -> APOSTROPHE% 0'('!   % 8% òLEFT PARENTHESIS+ )+ 9+ ORIGH,  *, A, ‚ASTERISKO +# B# ’PLUS SIGN$ ,$ C$ RCOMMA  -  D  ³HYPHEN-MINUº .' E' ’FULL STOPK /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% #ONt2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOUR“ 5% 5% #IVJ 6% 6% 2SIXI 7$ QCSEVE´8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SÃQUESTION MAR
@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 �O1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 jT1 ÔU1 UÄ V1 Àx56 -> LATINð
 CAPITAL LETTER V
    'W'   ü#  0x57 -> LATIN1 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 òEFT SQUARE BRACKET. $\\/ ò C. ò REVERSE SOLIDUS* ])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINE~ `#  60# YGRAVEJ a' 1' ÁESMALðAV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ Û	G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ Ó—	/ K/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðU� v/ ðËw/ ðÉx/ ðÇy/ ðÅz/ ðÃ{/ ð ÃZCURLYÂ|- î`VERTICàB}( çRÀV  ~. æCTILD~3\x7�7×UDELET! "80D ! 8É’<control>ÓH\x81$ ¾$ 2$ ³$ 3$ ¨$ À84'     #  0ðx84 -> <control>
    '\x85'
 � #  0x85$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ A$ b$ B$ c$ C$ d$ D$ e$ E$ f$ F$ '90$ /90$ 1$ 1$ 2$ 2$ 3$ 3$ 4$ @9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@a@A@äNO-BREAK SPACEõaEAEõ
INVERTED EXCLAMATION MARK4 UAU•CENT SIGN$ UAUXPOUND% Au20a8rAVHEURO$ (xaVAV8YEN# Au016ï G UöLATIN CAPITAL LETTER S WITH CARO¨ mAm1SECó Ï  c )c pc OSMALa †A†‹COPYRIGH2‹A‹õFEMININE ORDINAL INDICATORgœAœÿLEFT-POINTING DOUBLE ANGLE QUOTÏ „ øA¼+NOœ »A»¦SOFT HYPHEL½A½™REGISTEREù(xaÃAÃ7MAC—bÑ” BÀhDEGREEù!xb”& ½ªPLUS-MINUS* ³B³ô SUPERSCRIPT TWORb¹B¹	* 4HRE=Au017BÀyZy bØBØ;MICýb/BÚzPILCROWÞ ÅBÅ¡MIDDLE DOTÙ À'\u017e'   #ð%  0xB8 -> LATIN SMALL LETTER Z WITH CARON
    '\xb9'
 ! #: 9: õ SUPERSCRIPT ONE* a* A* õMASCULINE ORDINAL INDICATOR6 b6 B6 óRIGHT-POINTING DOUBLE ANGLE QUOTATION MARKE Pu0152G ¥ CE ß ôCAPITAL LIGATURE O¯  4 34 D4 2 &782 E2 f GYG“DIAERESIS¦ 0xbf>  KF@ ÜINVERTED QUES× 7xc01  C01 × q Aq DGRAVß 8xc1< 1< FACUT< M© /C2< ¤CIRCUMFLEXê cZA 3A FTILD} 4¹ 4< f(c5@ 5@ Rc7ABO:6A 6A ³ 72 72 C¨uCEDILLA-U-œWE> 
æžCž"< 
æ°C°< 	æ »C»A 	ªc7¶ßIù d< ¾5< 
ù e< È< ù  ÉCÉù A ù dØDØ4ETH%dÏDÏN,	RdÏDÏO< 	adÊDÊ< 	hdÊDÊ< hdËDËA 
õ ÆDÆ< ¤ÔDÔpMULTIPLÀ �5SIG&dÄDÄn USTROK?dÅDÅU ÅDÅÀTER U WITH Að CUTE
    '\xdb'
 õ# #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEXA cA CA •DIAERESIS@ d@ D@ Y� A½ e< E< UTHORNq f5 F5 ESMALð eSHARP ¦ 'e05 /E05 A¤ EGRAVa(e1: 1: 	Þ (e2: 2: ™(e3? 3? FTILD³ 4: 4: Ñ(e5> 5> ‡RING ABO06? 6? ­ 70 70 CštCEDILLA(e8< 8< E< 
Ö9: 9: 
Öa: A: Ö °E°	¾³ œ­E­	> Iñ §E§: 
ñ ¥E¥: ñ  ¯E¯³ ñ f¸F¸4ETHf¯F¯N"	6f¯F¯O: 	MfªFª: 	\fªFª: \f«F«? 
í ¦F¦: –´F´ÅDIVISION SIG«f F f USTROKf¡F¡Ö
Ž¡F¡: 
ŽœFœ: Ž �F�? T¡F¡ÀLETTER Y WITðH ACUTE
    '\xfe'
 õ #  0xFE -> LATIN SMALL LETTER THORN3 f3 F3 óY WITH DIAERESIS
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_16 generated from 'MAPPINGS/ISO$ / Ð-16.TXT' with3 ‰ P.py.
o ±#"

import  sÌ l ÁAPIs

class  ($ . 1):
9Adef í ñe(self,input,errors='strict'):,  ’creturno B = , 4ingC  o 8o *B 	o  o ú ±Incrementalã$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DZª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  œ�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±cname='ŠU-16', i !e=5 2().     ik: 'r=Ô~/ J 	/ é/ sur<=I# w˜# ¥# ")
[  ”Të
~ é2 = ,W'\x00S 00SANULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& ¥RANSMISSIO(05. 5. UQUIRYv 6" 6" ¥ACKNOWLEDG”(07& w7 -> BE8 8 tACKSPACC t"  × 09$ ð HORIZONTAL TABUæ» n0 A0 •LINE FEED½ b& + 0B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ ÖCARRIAGE RETUt0§0§†SHIFT OUÓ˜0˜$ ÐIN
    '\x10'  ð#  0x10 -> DATA LINK ESCAPE
  `'\x11'
  + 1+ öEVICE CONTROL ON- 2- 2-  5TWOZ 3- 3- 6HRE\ 4/ 4/  EFOUR] 5. 5. öNEGATIVE ACKNOWLEDG] 6/ ö6 -> SYNCHRONOUS IDL+ 7+ 7+ õ
END OF TRANSMISSION BLOCKŽ 84 84 eCANCEL! 9! 9! U eMEDIUM( a( A( –SUBSTITUT¢ b% B% Ôc! C! ÖFILE SEPARATOFd) D) _GROUP*  e* E* oRECORD+  f+ F+ LUNIT)  & "  {2¦CSPACè !  ›€EXCLAMAT‚3MAR�"+ ™LQUOT) #) •²NUMBER SIGN‡$& ŒHOLLA& %& „wPERCENTM &' |‘AMPERSANDq 1"'"ƒu“APOSTROPH(I fñLEFT PARENTHESISP +')+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF 0" 3[“DIGIT ZER¡øu3`% òï$ Y$ éæ$ T$ àÝ& T“ ×Ô% SK 3FIVÊ% Q% 2SIX#Ã$ Q$ 3EVEèµ& R& E-L º& M& $NI:rFCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 vÀLATIN CAPITAðL LETTER C
    'D'   õ#  0x44 -> LATIN CAPITA1 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 B1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 T1 U1 U1 V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ •5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿcOW LINÛ`# 6ñYGRAVEJ a' çESMALbA,b/ å	/ B/ c/ ã	/ ñd/ á	/ ïe/ ß	/ f/ Ý	/ ëg/ Û	/ éh/ Ù	/ çi/ ×	/ åj/ Õ	/ ãk/ Ó:	/ ál/ Ôi	/ ßm/ Ù/  Ýn/ Ù/ ÀALL LETTER N€
    'o'   ò#  0x6F -> LATIN SMALL LETTER O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ B/ óEFT CURLY BRACKEG|- C- ÒVERTICAL LINEU }( D( ORIGHV ~. E. CTILDN B\x7f# ×7×UDELET! '80! 8É’<control>“ H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ a$ [$ b$ P$ c$ G$ d$ C$ e$ 9$ =8=$ 9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@a@A@ÔNO-BREAK SPAC©Au010ÛÊAE¡PCAPITE£ÓA WITH OGONEKÂ = ô= À2 -> LATIN Sô2MALL LETTER A WITH OGONEK
    '\u0141'   #  0xA3 -> LATIN CAPITAL= L= dSTROKE= F20ac= 4= –EURO SIGN$ &1e$ 5$ ÷DOUBLE LOW-9 QUOTATION MAR— &606 66 — S— DCAROr 0xa7: Ó 7< 1SECc ™ 7016ú 8' c S5a 9a 9: ™COPYRIGHTü @0218+ ]A) c ]e £OMMA BELOW>0xab@ Ì BB ÓEFT-POINTING L_ANGLEL7± † CD ãZLDACUTâ8xad€ D< ¤SOFT HYPHErPu017a( b E& è 	K`   : â : F: "< …DOT ABOV  b&  B0@ hDEGREEˆ!xbé& 1& ¨PLUS-MINUS* Fu010Ò B2* Ê � C,x K2BK	I1017iBIw 	w 7201< aŠa0xb6« axPILCROW(xbLBL£MIDDLE DOT¥ ÅãBJ¼ 7010¼ Jø 	3m&21ÕB[	: Ybw Y6Z5òZ”IGATURE O²Pu0153{ëR	ó 2 7FB^”Y”—DIAERESISŸÔd	+ŸbcbCb° ~ ^6GRAžcxCx< 		zcZ¡CŠx ¦CIRCUMFLEX÷ 0C iC�¹ 7BRE¹ 4£} �} s 0`| ”ù Ú
ù : | š< AS(xc¥àC7 -> LATIN CAðPITAL LETTER C WITH CEDILLA
    '\xc8'
 ù #  0xC8 -> LATIN CA> E> UGRAVE< 9< 9< FACUT< a< A< ¥CIRCUMFLEX} bA BA •DIAERESIS@ c@ C@ Iù d< D< 
ù e< E< ù  fA FA ù Pu0110B ò/D0@ Dù TSTROK·Vu0143= 1= N= 	ú  d2:  k/D2< O< 	kdv < 3< 
x 4x 4< rGu01525A zDOUBLE „ 6„ 6C ® ƒ 1µ7@ S<| Gu017¿ ãU< ¿ êDêC 
»¹ »ê< » (xdåDå< »(xdæDæA -!xêcOGONEKcAu021ü = ëTy³COMMA BELOWB (xdìDìESMALÚeSHARP ÚeîqEá	5 Au 	«'e1¦EÞ: 	©eÜEÜ: §Au010á*Eß? 6BRE„eÝEÝ: ß  07ó x Ú	> :
ñ ÑEÑ	: A9!xeh •Á	0 j ¤eƒ< Á	< ƒÀGRAVE
    '\Pxe9'  ð#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
/ X'\xea: A: ¥CIRCUMFLEX? b? B? •DIAERESIS> c> C> I· FGRAV· d: D: 
ñ e: E: ñ  f? F? ñ Pu0111@ ¨/F0> Dñ TSTROKò Vu0144; 1; N; 	ò  f28 "  u 2: O: 	f(f3: 3: 
t ¬ t 4: fGu015(5? jDOUBLE×(f6º 6A ˜  Ø27> S2ø Gu017¹ 8: U: ¹ ÊFÊA 
­ÊFÊ: µ !xfí ­Å: ­(xfÆFÆ? ó lÊ»cOGONEK?Au021º ; ËTm³COMMA BELOW@ (xfÌFÌY@ ¹ ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_2 generated from 'MAPPINGS/ISO# / À-2.TXT' with2 ‡ P.py.
m ±#"

import  sÊ j ÁAPIs

class  ($ . 1):
7Adef ë ñe(self,input,errors='strict'):,  ccreturno B = , 4ingC  o 6o *B 	o  o ú ±Incrementalá$er ç  ¤ ½ ¤  h Ã final=False*  Y.S3[0]¤À Incremental€Decoder( ãcs.Incremental Á):
    def d, ó
(self, input, final=False*  . sreturn U ƒcharmap_@ :  F �.errors, óing_table)[0]

class StreamWriter(Codec,U  z Jpass9 0ReaÝ 9   	9 ð### encodings module API

ý Ãgetregentry(7 
æ e QInfo(1 õname='iso8859-2', h !e=4 2().     i¦: 'r=¹EÄ /er/ J 	/ è/ str;=g.# w—# ¤# @)


N[ Ping TØ H^è2 = +`'\x00'1ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™ÐQUOTATION MAR�K
    '#'   ò#  0x23 -> NUMBER SIGN& $& 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 0"'"“   — 7$ ‘POSTROPHE% +'(I 8% òLEFT PARENTHESIS+ )+ 9+ ORIGH,  *, A, sASTERIS6+# B# GPLUSç ,$ C$ RCOMMA“ -  D  ³HYPHEN-MINUº .' E' ’FULL STOPK /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% #ONt2$ 2$ #TWH 3$ Tm CTHREJ 4& T“ BFOUR“ 5% SK 3FIVJ 6% Q% 2SIXI 7$ Q$ 3EVEè8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SÃQUESTION MAR
@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 �O1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 ð 3 -> LATIN CAPIðTAL LETTER S
    'T'   ÷#  0x54 -> LATIN CAPI1 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 óEFT SQUARE BRACKET$\\/ …C. ãREVERSE SOLIDU¯])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINEÖ `#  60# YGRAVEJ a' 1' TESMALƒAV b/ 2/ B/ c/ 3/ C/ d/ á	� D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ Ó*	/ K/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðÍv/ ðËw/ ðÉx/ ðÇy/ ðÅz/ ðÃ{/ ð ÃZCURLYÂ|- î`VERTICsB}( çRÀV  ~. æCTILD~3\x7�7×UDELET! à80'     #  0x8ð
0 -> <control>
    '\x81'
 � #  0x81$ 2$ 2$ 3$ 3$ 4$ 4$ 5$ 5$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ A$ b$ B$ c$ C$ d$ D$ e$ E$ f$ F$ '90$ 9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@a@A@ãNO-BREAK SPACE…Au010Û…AEõLATIN CAPITAL LETTER A WITH OGONEK= !2dˆ= ^GBREV] 4¤  Z] L] TSTROK= !xa˜  AsÕCURRENCY SIGN… !13Ye we 	GCARO< 5< �< S¡ FACUT  §A§xSECTIONŸ !xa"Ç ª–DIAERESISÃ 6°‡ ª‡ 	Ã 4< Â< 
gEDILLAz g> Ü> Tz 7b< ô< Z< 
=³§SOFT HYPHEŸ7( b b 	ž ¸< &< 	uDOT ABO¼!xb’¢ BBhDEGREEÞ ?öf B?ÐSMALL LETTER üA WITH OGONEK
    '\u02db'   #  0xB2 ->! 6142! 3! òLATIN SMALL LETTER L\ cSTROKE\ 0xb49 \ 4; ÃACUTE ACCENT' Pu013e) ƒ 5' b VCARON: 5½ 6: Sœ { : 62c7t 7: Z 0xb8 » 8  eEDILLAB 0161$ ¶ 9" ¶  | \ Vu015f: A: v 5< B< Tò v &7a: C: Z: ,&dd: D: PDOUBLÈÎ7ÎE.  h ¢ ch F: „DOT ABOVm Vo�&C0> eCAPITAªRâ !xcÊî/C1< B!xc< Að x < ¦CIRCUMFLEXI0C ¹ aA 5BREõ !xcó } b} 	–DIAERESIS| %39sC{| ßù Vu0106< }< Cq}¸ ¸ < C0)C�> 
3!xcð z ·¶ E¶ Au011ª¹< 	i!xcªy º= « 1ÀCÀ@ Z!xcÀ| Â1Iõ !xcÎ< Ðx < àC 6×A D} ¹  r0dDÕ< 	Vu0143= ÖNy Ý4£µ DÖ< µ !xdv 2DÑOx (xdÑDÑ< n52Ð5 -> LATIN CAðPITAL LETTER O WITH DOUBLE ACUTE
    '\xd6'
 ÿ #  0xD6 -> LATIN CAC …IAERESIS@ 7@ 7@ óMULTIPLICATION SIGN. Pu01580 n 8. n R± GCARO< &6e< 9< U< –RING ABOVë a?  ë AA 'Pu0170> ¹ B< jcA  CC jd@ D@ Y ¿  62> ¿ E< T< sCEDILLA¶0xdf< º F> ESMALedSHARP  ë57 s /E05 é­ 0xe18 o /E1: A« 
: å : 2: £CIRCUMFLEXè Pu0103{ ³ 3? 6BRE[ e48 y 4: DÚAu013›x 5> Lñ  ² €: ¾	šC: !xe8 ² ¸Š: 
 v Œv Æ< Ä8xe9(Ä	: E° Au011< t ½: cOGONEK×8xebu ¼; � 1@ y ·> ±!xe%c±	: Ií !xeé: ¯: È²³ °Dy ³  f}: Fµ: TSTROK^Au014; ¶Nu ¶ : F¶: ¯ !xf¯(F±þt !xf¬ : ±: b5(²? fwF¹A 1(xf½F½ðDIVISION SIGN
  ó+  '\u0159'   #  0xF8 -> LATIN SMALL LETTER R WITH CARON
  : &6f: 9: U: £RING ABOVE? 0xfa= y A? DACUT: Pu0171< ³ B: xDOUBLE A 0xfc? { CA …IAERESIS¹ d> D> Yø x Pu0163< ¹ E: T: sCEDILLAv Gu02d¨F< 3DOTSó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_3 generated from 'MAPPINGS/ISO# / À-3.TXT' with2 ‡ P.py.
m ±#"

import  sÊ j ÁAPIs

class  ($ . 1):
Adef ë ñe(self,input,errors='strict'):,  »creturno B = , 4ingC  o 6o *B 	o  o ú ±Incrementalá$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DXª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  š�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±cname='ˆE-3', h !e=4 2().     ij: 'r=Ó}/ J 	/ è/ str;=H# w—# ¤# ")
[  ‘Tè
~ è2 = +P'\x00pê 006ANULL0  H 1 õSTART OF HEADING+ 2J 2+ ETEXT( âS 3( 0ENDQ 	& 4N 4& •RANSMISSIj8x05. 5. UQUIRYv 6" 6" ¤ACKNOWLEDG9ðx07'     #  0x07ð -> BELL
    '\x08'
 � #  0x08 ƒACKSPACE$ t"  $ 9$ óHORIZONTAL TABULATION0 n0 A0 “LINE FEED$ 2x0b& x B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ äCARRIAGE RETUR  2x0e, | E* •SHIFT OUT  f$ F$ IG '10#  10# ô DATA LINK ESCAPB8x11+ 1+ öEVICE CONTROL ON- 2- 2-  4TWO¨ (13- 3- 6HRE\ 4/ 4/  EFOUR] 5. 5. öNEGATIVE ACKNOWLEDG] 6/ ö6 -> SYNCHRONOUS IDL+ 7+ 7+ õ
END OF TRANSMISSION BLOCKŽ «1«UCANCEÌ(19U ¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"éu“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þP3[“DIGIT ZER¡ø% `% òï$ Y$ éæ$ T$ àÝ& T“ ×Ô% SK 3FIVÊ% Q% 2SIX#Ã$ Q$ 3EVEèµ& R& E-L º& M& $NI:”3F4COLz;  Cð SEMICOLON
    '3<'  ð#  0x3C -> LESS-THAN SIGN
! +'=) D) gEQUALS& >& E& |GREATERR ?, F, ÒQUESTION MARKz @(  40( ÒCOMMERCIAL AT( A( 1( òLATIN CAPITAL LETTER A1 B1 21 B1 C1 31 C1 D1 41 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 B1 CL1 æLb M1 îLM1 N1 ù1 PO1 þ1 Ob P1 51 P1 Q1 Q1 R1 R1 S1 S1 T1 ÔU1 Ub V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ ó5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿcOW LINÛ`# 6ñYGRAVEJ a' çLSMALõb/ å	/ óc/ ã	/ ñd/ á	/ ïe/ ß	/ f/ Ý	/ ëg/ ÛÀIN SMALL LETÐTER G
    'h'   ð#  0x68 -> LATIN SMALL LET/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðóEFT CURLY BRACKEG|- îÒVERTICAL LINEU }( çORIGHV ~. æCTILDN B\x7f#  7×UDELET! '80! 8É’<control>“ H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ a$ [$ b$ P$ c$ G$ d$ C$ e$ 9$ =8=$ 9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@À\x9a'     # ð 0x9A -> <control>
    '\x9b'
 0 # $ B$ c$ C$ d$ D$ e$ E$ f$ F$ 'a0$  A0$ ãNO-BREAK SPACEÝ Pu0126+ Ý  A1) öLATIN CAPITAL LETTER H WITH STROK= 62d8= 2= DBREV  0xa3  : A3  £POUND SIGN‚ 8xa4% 4% ˆCURRENCY( cufffe'5  · 7 · 65 · 	£CIRCUMFLEXA 8xa7v 7A xSECTIONu !xaà Â 8' “DIAERESISK Au013nŒ 9$ Œ ICuDOT ABO&Au015ö@ „@ S@ vCEDILLA~ 1> ž> G>   º F¶< J< F ÓAÓ¤SOFT HYPHEâº7Pî ¾t Zt .!xbl’BÚhDEGREE¸  áf B×OSMALÕ
7xb2BÕó SUPERSCRIPT TWO{(xbßBß	* 5HREbi· æÅACUTE ACCENTS 5} 5L\MICROÝ ' Ý ýÝ µb‹ û–MIDDLE DO‰ ùBùy 31­ † ÷	† “DOTLESS Iâ  îÀ7 î	7 ì< ì	< ê3ê	: èbèBè¢VULGAR FRA6„ONE HALFè ¯7!õ õ	 ócóCó3A35GRA]!xc¤íC	à< ”Ã (xc
C
x 	j	ù(xcCN 	g %0apC@ C9Au010Ô„C6ÀLATIN CAPITAðL LETTER C WITH CIRCUMFLEX
    '\xc7'
 ý	 #  0xC7 -> LATIN CAPITAA eEDILLA> 8> 8> E UGRAVE< 9< 9< FACUT< a< A< ÷  bA BA •DIAERESIS½ c@ C@ Iù d< D< 
ù e< E< ù  fA FA ù dufffe''d1M /D1M NETILDÃ(d2< 2< O< 	;(d3< 3< 	B(d4< 4< BPu0120C 2/D5A G¹ vDOT ABOø d6>  r/D6@ ù ‚(xd²D²óMULTIPLICATION SIGN£Au011«® ¢® ï (xd§D§Uï 
¨§D§< 
¨¢D¢< ¹  ø h£A hAu016B :§@ 5BREäGu015< §S5½  §D§ESMAL•eSHARP •e˜ò &E0Z	5 At 	©eÉEÉ: 	§eÇEÇ: è 
Oe›E›L ° 03°E˜	> 	–Au010é> –> È (xe•E•G? 
EeEE£	< Ce³ ñœÀTIN SMALL LEðTTER E WITH ACUTE
    '\xea'
 ø #  0xEA -> LATIN SMALL LE: ¥CIRCUMFLEX? b? B? •DIAERESIS> c> C> I· FGRAV· d: D: 
ñ e: E: ñ  f? F? ñ dufffe'þ 'f1K /F1K Nþ ETILDþ (f2: 2: O: 	8(f3: 3: 	8(f4: 4: 8Au012ï h/F5? G³ vDOT ABOï(f6} 6> ñ v8xf7> 7> ÓDIVISION SIGN‘Au011W¤ 8(  ¤ ã 8xf9g 9? Uã 
–…F…: 
–€F€: ³  �F�? XGu0160…> 5BREÐGu015: …S+· Au02dl©…3ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_4 generated from 'MAPPINGS/ISO# / À-4.TXT' with2 ‡ P.py.
m ±#"

import  sÊ j ÁAPIs

class  ($ . 1):
ÆAdef ë ñe(self,input,errors='strict'):,  øcreturno B = , 4ingC  o 6o *B 	o  o ú ±Incrementalá$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DXª  €  ª ø ª (@ ðinput,self.errorð!s,decoding_table)[0]

class StreamWriter(Codec,c (s. º):
    pass9 ORead9  	9 b### enŠ ós module API

def getregentry(7 sreturn ‘ ž QInfo(�  ‘ õname='iso8859-4', h !e=4 2().     ²incremental: 6r=I EÄ /er/ J 	/ D}/ str;=g.R # w—# ¤# @)


N[ Ping TØ H^è2 = +`'\x00'1ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „tPERCENTM À  '&'       ð #  0x26 -> AMPERSAND
    "'"   $ 7$ ‘POSTROPHE% 0'('!   % 8% òLEFT PARENTHESIS+ )+ 9+ ORIGH,  *, A, ‚ASTERISKO +# B# ’PLUS SIGN$ ,$ C$ RCOMMA  -  D  ³HYPHEN-MINUº .' E' ’FULL STOPK /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% #ONt2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOUR“ 5% 5% #IVJ 6% QÝ 2SIXI 7$ Q$ 3EVE´8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SÃQUESTION MAR
@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 �O1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 jT1 ÔU1 UÄ ð V'        #  0xð56 -> LATIN CAPITAL LETTER V
    'W'   #  0x571 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 òEFT SQUARE BRACKET. $\\/ ò C. ò REVERSE SOLIDUS* ])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINE~ `#  60# YGRAVEJ a' 1' òESMALðAV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ Ý	ë F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ ÓÈ	/ K/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðU� v/ ðËw/ ðÉx/ ðÇy/ ðÅz/ ðÃ{/ ð ÃZCURLYÂ|- î`VERTICàB}( çRÀV  ~. æCTILD~3\x7�7×UDELET! "80D ! 8É’<control>ÓH\x81$ ¾$ 2$ ³$ 3$ ¨$ Àol>
    '\x804'  ð#  0x84 -> <control>
 X'\x85$ 5$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ A$ b$ B$ c$ C$ d$ D$ e$ E$ f$ F$ '90$ /90$ 1$ 1$ 2$ 2$ 3$ 3$ @9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@a@A@ãNO-BREAK SPACEõAu010ÛAEöLATIN CAPITAL LETTER A WITH OGONEK= 3ˆ= ^= ESMAL; 6KRA1 51 k1 n Rn dCEDILL> !xaª "  > …ÖCURRENCY SIGNf 2— ‰f If GTILD3ïd ¡< L< ¢ »A»xSECTION¡ !xaŸ É ¾–DIAERESISÅ 6Ä‰ ¾‰ S‰ 7ARO1ø< Ö< E< 9MAC= 2= ï= G= 
Gu016â	> T> TSTROK}(xa"A"§SOFT HYPHEÞ 7( Þ $c Zc C(xa<A<	þ !xbu›B9hDEGREEÁ 6íƒ B6	ù4&2daB4U5F\ $	\ "b"ÐB4 -> ACUTE Aö0CCENT
    '\u0129'   #  0xB5 -> LATIN SMALL LETTER I WITH TILDE: &3c: 6: L: uCEDILLA< 62c7< 7< SCARON  0xb8 – 8  B 0161$ ¸ 9" ¸  S~ \ Vu0113: A: E: 6MAC—  -; B; G; ó '16ó C< T< cSTROKEVu014a² D; eCAPITA¦6ENG3 &7e3 E3 	×Zn { m b: F: 	k %001 &C01 ž Am 	R!xcÅé/C1= DACUT0xc2w < 2< £CIRCUMFLEX%!xcÍA 3A þ8xc4} 4< •DIAERESIS| 5@ x6–RING ABOVþ 6A A 2  ¾Cu32 ícOGONEK° Fu010îC’= CæS!xcbh¬y tå ®èC®< 	µ !xcÊy °= ¥ } f} ´@ +OT¤d¤¹rù !xc¬¼ Â| < Þ ï6CÉA 	˜ ú ÕDÕDï°Þ7DÕN= )4jD×O> ¸ 3²DÓK= 
{ (xdÕDÕ{ t!xdø µDÖA 	Rd¹ < Ñ< ­!xd_@ ßðMULTIPLICATION SIGN
  �  '\xd8'  ð#  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
2 p'\u0172? = 9= U= cOGONEK= 0xda; "  = A= DACUTy 8xdb< B< ¥CIRCUMFLEX} cA CA “DIAERESIS@ Au0169½ D@ DTILD½  < û < E< cMACRONy 8xdf¹ F= ESMAL®gSHARP ®  017 r /E05 A¦
p e9 ¦/E1; 	¤e: 2: ¢ e3² ? 3? `8xe4: 4: Ú8xe5> 5> ”RING ABOVÝ8xe6? 6? 0 Au012Ò›70 I›	APu010dm ; »	C; 'CAE e98 \¸	: E: ÕAu011< t µ: 	¯ (xe´E´; — y 7µ y ±> +OT–)ñ ¯	> fñ 0xeev : ­: Æ ß÷ · ¯y 	z ò |; FµD¥˜4‡; µN; sCEDILLAaAu014-< ·² 3¤F³Kw (xfµFµw h(xf¶F¶? 	.f*áF±: —!xfñ > ¿ÅDIVISION SIG·f.( ¬f Í7‘­cfhv ðA -> LATIN SMALLð LETTER U WITH ACUTE
    '\xfb'
 û #  0xFB -> LATIN SMALL: ¥CIRCUMFLEX? c? C? “DIAERESIS> Pu0169@ } D> DTILD·  : ¹ : E: eMACRONu '2du F; óDOT ABOVE
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_5 generated from 'MAPPINGS/ISO# / À-5.TXT' with2 ‡ P.py.
m ±#"

import  sÊ j ÁAPIs

class  ($ . 1):
Adef ë ñe(self,input,errors='strict'):,  5creturno B = , 4ingC  o 6o *B 	o  o ú ±Incrementalá$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DXª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  š�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±cname='ˆE-5', h !e=4 2().     ij: 'r=Ó}/ J 	/ è/ str;=H# w—# ¤# ")
[  ‘Tè
~ è2 = +P'\x00© ( 006ANULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& •RANSMISSIü8x05. 5. UQUIRYv 6" 6" ¤ACKNOWLEDG8x07& w7 -> BE8 8 tACKSPACC t" Q9$ ð HORIZONTAL TABUˆ» n0 A0 •LINE FEED½ T À0x0B -> VERTðICAL TABULATION
    '\x0c'
 ó #  0x0C -> FORM FEED$ r"  $ D$ æCARRIAGE RETURN e, N E* “SHIFT OUTN 8x0f$ F$ IG '10#  10# ôDATA LINK ESCAPEN (11+ 1+ öEVICE CONTROL ON- 2- 2-  5TWOZ 3- 3- 6HRE\ 4/ 4/  EFOUR] 5. 5. öNEGATIVE ACKNOWLEDG] 6/ ö6 -> SYNCHRONOUS IDL+ 7+ 7+ õ
END OF TRANSMISSION BLOCKŽ 84 84 eCANCEL! 9! 9! U eMEDIUM( a( A( –SUBSTITUT¢ b% B% Ô”1”ÆILE SEPARATOFdJ ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦CSPACè !  ›aEXCLAM�C MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSAN"1"'"Cu“APOSTROPH(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þP3[“DIGIT ZER¡ø% `% òï$ Y$ éæ$ T$ àÝ& T“ ×Ô% SK 3FIVÊ% Q% 2SIX#Ã$ Q$ 3EVEèµ& R& E-L º& M& $NI:”3F4COL(;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, Sð QUESTION MARK
 s   '@'  ð
#  0x40 -> COMMERCIAL AT
  +'A( 1( òLATIN CAPITAL LETTER A1 B1 21 B1 C1 31 C1 D1 41 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 B1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 5ßP1 Q1 Q1 R1 R1 S1 S1 T1 ÔU1 Ub V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ P5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿcOW LINÛ`# 6ñYGRAVEJ a' çLSMALõb/ å	/ óc/ ã	/ ñd/ á	/ ïe/ ß	/ f/ Ý	/ ëg/ Û	/ éh/ Ù	/ çi/ ×	/ åj/ Õ	/ àJ
    'k'     ð   #  0x6B -> LATIN SMALL LETTER K
    'l'   / C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ ðóEFT CURLY BRACKEG|- îÒVERTICAL LINEU }( çORIGHV ~. æCTILDN B\x7f# d7×UDELET! '80! 8É’<control>“ H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ a$ [$ b$ P$ c$ G$ d$ C$ e$ 9$ =8=$ 9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@À9E -> <contràol>
    '\x9f'
 ÷ #  0x9F -> <contr$ 'a0$  A0$ ãNO-BREAK SPACEM Pu0401+ M  A1) ÷CYRILLIC CAPITAL LETTER IO5 25 25 	(DJk 36 36 	G6 46 46 	¸UKRAINIAN Iu 5? 5? 	(DZ6 66 66 	×BYELORUSSIAN-‚ ,7K 7K 	'YI5 85 85 		*95 95 	L6 a6 A6 	N6 b6 B6 	8TSHXc7 C7 	Km 0xad4  ñ AD6 ·SOFT HYPHEN4e( ÊE& ÊwSHORT U: S: Q: (DZÍ 1f7 Bd7 Ak 1oBo
B61oBo
V5 nBn	Ô nBn
Dk dBd
™1cBc

tNBN
Î1NBN
‚1MBM
N: QBQ
KPBP
'ELMNBN
'EM5 O¶M¶\1\B\
%1VBV
PK2TCT
&ERÓ 2UCU
'ES5 UCU
TŸ UCU
^2SCS
'EFž à5'   #  0xC5 -ÿ&> CYRILLIC CAPITAL LETTER HA
    '\u0426'   #  0xC6 -5 7TSE6 76 76 	(CH6 86 86 	S¢ 96 96 C8 a8 A8 	—HARD SIGNà b< B< 	GYERU7 c7 C7 	LSOFTs d< D< 	Qe4 E4 	Y¥ f5 F5 
'%305 )D05 ESMALZ2 12 12 BÏ &323 23 V3 33 33 G‡&344 44 Dg 53 53 I3 YDY	2Zš WDW
4 g TDT	3 I¥3PDP	2 hSHORT 8 PDP	8 KGDG	3 'ELž CDC
3 M3 :D:
3 à39D9	3 Oe 6D6	2 P›44E4&ERf 45E5'ES3 5E5T™ 5E5443E3'EF˜ 3E3²43E3	Š43E3	ˆ44E4	†46E6
	„44E4‚ 4;E;
€Ð4c'   #  0xECÿ+ -> CYRILLIC SMALL LETTER SOFT SIGN
    '\u044d'   #  0xED: E2 e2 E2 'YU3 f3 F3 A3 E21163  F03 kNUMERO¾ &51& 1& ø $IOY F04523 23 'DJó &534 34 G4 44 44 ¸UKRAINIAN Iq 5= 5= (DZ4 264 ×BYELORUSSIAN-~ "7} 7I 'YI3 83 83 	 93 93 L4 a4 A4 N4 b4 B4 8TSHLc5 C5 Ki !xa5JFJ|SECTION³?F?gSHORT D5DFDóDZHE
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_6 generated from 'MAPPINGS/ISO# / À-6.TXT' with2 ‡ P.py.
m ±#"

import  sÊ j ÁAPIs

class  ($ . 1):
‘Adef ë ñe(self,input,errors='strict'):,  creturno B = , 4ingC  o 6o *B 	o  o ú ±Incrementalá$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DXª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  š�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±ð name='iso8859-6C',
  ò encode=Codec().  )de   ²incremental: 6r=I E\ r/ J 	/ Dl / ástreamreader=S R R # Ewrit# W # �)


### [ ±ing Table

~ Ping_t A = (a'\x00'õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t" "  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& T B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rFPLUSç À','        #ð  0x2C -> COMMA
    '-'   #  D  ÂHYPHEN-MINUS' .' E' ’FULL STOP$ /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% 2ONE$ 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOURo 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& $NI):% A% CCOLOk ;  B  GSEMI$ <$ CÓLESS-THAN SIGM =) LgEQUALS& >& K|GREATERR ?, SÒQUESTION MARK@( 4Y æƒERCIAL A4A( \óLATIN CAPITAL LETTER B1 i1 BŠ C1 v1 C1 D1 �1 D1 E1 �1 ™F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 jT1 ÔU1 UÄ V1 V1 W1 W1 X1 Y1 Yb Z1 ÀR Z
    '['   ð#  0x5B -> LEFT SQUARE BRACKET
% @'\\' 2   . C. ò REVERSE SOLIDUS* ]) * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINE~ `#  60# YGRAVEJ a' 1' òLATIN SMALL LETTER AV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ ÓÖK/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðU� v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ð ÃZCURLYÂ|- î‡VERTICALB}( çRÀV  ~. æCTILD~3\x7�87×UDELET! "80D ! 8É’<control>è H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ õÀ  #  0x8A ->ð <control>
    '\x8b'
 ¿ #  0x8B ->$  c$ C$ d$ D$ e$ E$ f$ F$ '90$ /90$ 1$ 1$ 2$ 2$ 3$ 3$ 4$ 4$ 5$ 5$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ A$ @9@9@9@9@9@9@9@9@9@a@A@ãNO-BREAK SPACEoufffe' (xa A ßCURRENCY SIGNB i ' 1060eÇAcÃARABIC COMMA‚ (xafAf¯SOFT HYPHE¨ QRé 	A 1061ö B}ö �SEMICOLOÔ 1061AR ?R ÓQUESTION MARKP
¨ 1062u< Cs< ´LETTER HAMZ‹Au062. }
. õALEF WITH MADDA ABOVš1062™> —> v > ³> ±
> 2WAW{ = Ì= Ê
= ¹ > TBELOW21062æ> ä
> ?YEH{ 	ÿ= ý
=  { j - 
- 7BEH, , 
,  TE‡HRBUTÁ 4 4 ` ©C©)TH� ÌCÌ- GJEEMZ Ô† Ò
† ÐHAH
    '\u06ö 2e'   #  0xCE -> ARABIC LETTER KHAH
    '\u062f- F- 6DAL, %30, .D0, )TH- 1- 1- 'RE… &32, 2, GZAIN† 3- 3- 8SEE- 4- 4-  H. 5. 5.  'AD‡ 6, 6, D, 7, 7, T‘&38, 8, Z, 9, 9, 
7a, A, 'GH. Tfffe'ë  !6064,E,gTATWEEU4(E( F(4(E( 4QAFµ 6064'E' K, &E& 7LAMX $E$ 8MEE- %E% 7NOO¬4&E& H
&E& 7WAW² &E&·LEF MAKSURA5 /E/ Y� b['EB[xFATHATAã c* C* KDAMM* d* D* KKASR* ïEï~ Ñ éEé{ ' 5¸F¸x ' ¶F¶WSHADDG5²F²ESUKUb!4 [ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_7 generated from 'MAPPINGS/ISO# / À-7.TXT' with2 ‡ P.py.
m ±#"

import  sÊ j ÁAPIs

class  ($ . 1):
ñAdef ë ñe(self,input,errors='strict'):,  Xcreturno B = , 4ingC  o 6o Àn codecs.chañ
rmap_decode(input,errors, ðing_table)

class IncrementalEn6  r( >cs. Á):
    def e, r(self, h Ã final=False*  . sreturn U 1cha¢ @ :  F .§  § ?[0]ª  Dà ª  €  ª ø eª '@ ª  ª óStreamWriter(Codec,ÿ  ¤ Dpassã  ORead9  	9 2###�ðings module API

ý Ãgetregentry(7 
�ž QInfo(Û ±õname='iso8859-7', œ!e=4 2().     ij: .r=c/ J 	/ è/ str;=H# w—# ¤# @)


N[ Ping T) H5codè2 = +`'\x00'1ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ð
ILE SEPARATOR
    '\x1d' ð    #  0x1D -> GROUP SEPARATOR
 `'\x1e'
 * E* oRECORD+  f+ F+ LUNIT)  & ~  20) RSPACEt !  1  òEXCLAMATION MARK+ "+ 2+ LQUOT) #) 3) ²NUMBER SIGNO $& 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 1"'"\7$ ƒPOSTROPH(I 8% ñLEFT PARENTHESISP +')+ 9+ ORIGH,  *, A, sASTERIS_+# B# GPLUSç ,$ C$ RCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF 0" 3[¢DIGIT ZEROG 1% `% #ONt2$ Y$ #TWH 3$ T$ 3HREJ 4& T“ 3FOUg5% SK 3FIVJ 6% Q% 2SIXÜ 7$ Q$ 3EVEè8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 ML1 æLb M1 îb M1 N1 ù
1 ÀLETTER N
   S 'O'  ð#  0x4F -> LATIN CAPITAL LETTER O
) *'P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 óEFT SQUARE BRACKET$\\/ z 5C. ãREVERSE SOLIDU¯])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, ÿrOW LINEÖ `# 6ñYGRAVEJ a' çESMALGAV b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ Ó	/ K/ l/ ÔN	/ L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ Ùp/ 7è^  ×q/ ðÕr/ ðÓs/ ð"t/ ðöu/ ðÍv/ ðËw/ ðÉx/ ðÇy/ ðÅz/ àA -> LATIN SMAðLL LETTER Z
    '{'   ò#  0x7B -> LEFT CURLY BRACKET- |- C- ÒVERTICAL LINE( }( D( ORIGHV ~. E. CTILDN B\x7f# £ F  UDELET! '80!  80! ’<control>“ H\x81$ 1$ 2$ 2$ 3$ 3$ 4$ 4$ 5$ 5$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ A$ b$ PŒc$ G$ d$ C$ e$ 9$ =8=$ 9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@a@A@ÔNO-BREAK SPAC©Au201KÊAEmóSINGLE QUOTATION MARKº 5 \5 VM6 	(xahAh¦POUND SIGN[ aK[ iLEURO$ $ ixDRACHMA' (xalAl£BROKEN BARp (xamAm1SECò — !xa%"  s p•DIAERESISK $ pDCOPYä 1037wM uõGREEK YPOGEGRAMMENIW A ¢ÿ-POINTING DOUBLE A±xT› Ÿ:NOT.žAž¥SOFT HYPHEŸSfffe'š  óÈ ‰¨HORIZONTALebŽàB0 -> DEGREE SàIGN
    '\xb1'
 ø	 #  0xB1 -> PLUS-MINUS S* 2* 2* õ SUPERSCRIPT TWOT 3* 3* CHREE, Pu0384. € 4, ·GREEK TONOS& 5& 5& �DIALYTIKA0 60 60 ù
CAPITAL LETTER ALPHA WITH@ 0xb7>  7@ §MIDDLE DOT• 8' » 8% » e ~EPSILONg  ý 9B 9B T¥   > a> A> /IO? 0xbb= ä B? ÷RIGHT-POINTING DOUBLE ANGLE QUOTATION MARKcG CE _OMICR0xbd@ ‡ DB ±VULGAR FRACq ‡ONE HALFu e5 u E3 u Uy	fB FB OOMEG{%90@ &C0@ ESMAL^y§9ANDkAu039ƒÍ C�Í «9Ž5 Œ5 GBETA4 ˜4 –4 HGAMM5 ŸCŸä9DELj ®C®5 ¡ µCµZÕ «Õ ©Õ 
3 ·C·*TH5 ªCª óÐ  C HKAPPq˜Ñ –Ñ HLAMD5 †C†'MUœ xg vg N2 uCu'XId eCe	7 a\D\>Pi aCDC$RH£gufffe'r D8SIGaD'TACaD¸Ÿ D(PHDÀGREEK CAPITAõ$L LETTER CHI
    '\u03a8'   #  0xD8 -> GREEK CAPITA3 (PS3 93 93 WOMEGAh a5 A5 øIOTA WITH DIALYTIKC bC BC UPSILONF cF CF ESMALï CALPHˆ WTONOSÇ d> D> E‚ @ e@ E@ < f< F< A= %b0= /E0= ;\ AND N 1N 1N E:&b23 23 7BETð&b32 32 HGAMM3 43 43 9DELf 53 53 ÒÍ 65 65 ZÍ 72 72 
1 ™E™	¨*TH3 ™E™	3  !È –E–	2 HKAPPc†E†	3 HLAMD3 sEs'MU– eEeN0 UEUXÁbIEIvOMICRON• cAFAPe c#F#7RHOa !F!˜FINAL SIGõc(F(3 (F('TAcc&F&?Ò &F&P�c%F%	¾c%F%	¼c#F#ºc$F$ Vrc2F2<D CFC³D ±À    '\u03cd'ô2   #  0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS
    '\u03ce' @ E@ _OMEGA>  ófffe'
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_8 generated from 'MAPPINGS/ISO# / À-8.TXT' with2 ‡ P.py.
m ±#"

import  sÊ j ÁAPIs

class  ($ . 1):
DAdef ë ñe(self,input,errors='strict'):,  tcreturno B = , 4ingC  o 6o *B 	o  o ú ±Incrementalá$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DXª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  š�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±cname='ˆE-8', h !e=4 2().     ij: 'r=Ó}/ J 	/ è/ str;=H# w—# ¤# ")
[  ‘Tè
~ è2 = +P'\x00[] 00]ANULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t" Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& B 0B$ oVERTICR 8x0c. C. HFORMR r" ¦ ”æCARRIAGE RETUR[e, | ~†SHIFT OUÓf$ Fr ðSHIFT IN
    '\x@10'  ð#  0x10 -> DATA LINK ESCAPE
  X'\x11+ 1+ öEVICE CONTROL ON- 2- 2-  5TWOZ 3- 3- 6HRE\ 4/ 4/  EFOUR] 5. 5. öNEGATIVE ACKNOWLEDG] 6/ ö6 -> SYNCHRONOUS IDL+ 7+ 7+ õ
END OF TRANSMISSION BLOCKŽ 84 84 eCANCEL! 9! 9! U eMEDIUM( a( A( –SUBSTITUT¢ b% B% Ôc! C! ÖFILE SEPARATOFd) D) _GROUP*  e* E* oRECORD+  f+ F+ LUNIT)  & 1   ¦2¦CSPACè !  ›€EXCLAMAT‚3MAR�"+ ™LQUOT) #) •²NUMBER SIGN‡$& ŒHOLLA& %& „wPERCENTM &' |‘AMPERSANDq 0"'"�  u“APOSTROPH(I fñLEFT PARENTHESISP +')+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þ[3[“DIGIT ZER¡ø% `% òï$ Y$ éæ$ T$ àÝ& T“ ×Ô% SK 3FIVÊ% Q% 2SIX#Ã$ Q$ 3EVEèµ& R& E-L º& M& $NI:”3FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 à3 -> LATIN CAPðITAL LETTER C
    'D'   ø#  0x44 -> LATIN CAP1 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 B1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 T1 U1 U1 V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ •5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿcOW LINÛ`# 6ñYGRAVEJ a' çESMAL“A,b/ å	/ B/ c/ ã	/ ñd/ á	/ ïe/ ß	/ f/ Ý	/ ëg/ Û	/ éh/ Ù	/ çi/ ×	/ åj/ Õ	/ ãk/ Ó:	/ ál/ Ôi	/ ßm/ Ù/  Ýn/ Ù/ À SMALL LETTE°R N
    'o'   ò#  0x6F -> LATIN SMALL LETTER O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ B/ óEFT CURLY BRACKEG|- C- ÒVERTICAL LINEU }( D( ORIGHV ~. E. CTILDN B\x7f# ×7×UDELET! '80! 8É’<control>“ H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ a$ [$ b$ P$ c$ G$ d$ C$ e$ 9$ =8=$ 9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@a@A@ÔNO-BREAK SPAC©dufffe'’a.A.ƒCENT SIGÒ8\xa.A.ðPOUND SIGN
    '`\xa4'  ð
#  0xA4 -> CURRENCY SIGN
 X'\xa5( 5( :YEN# 6# 6# ¥BROKEN BARH 7% 7% kSECTIOL 8' 8' •DIAERESISK 9$ 9$ ™COPYRIGHT™ dt A) ®MULTIPLICA{ bW B. òLEFT-POINTING DOUBLE ANGLE QUOTD EMARK› cD CD *NO• (ad# D# ¦SOFT HYPHEwe& E& ©REGISTEREDå (af* F* UMACROK 'b0!  B0! iDEGREEG (b1& 1& ªPLUS-MINUS* 2* 2* ô SUPERSCRIPT TWO(b3* 3* EHREE, �B�ÅACUTE ACCENT' �B�ZMICRO¢ ‘B‘zPILCROW' B“–MIDDLE DOq ‘B‘uCEDILLA“ �B�%ONä fq �\DIVISbŠBŠÝ‹b‹B‹¢VULGAR FRAy ONÈEARTE§bžBž6 EHALF eæ«3 Tê1 QUk Ècufffe'F  ÿ‚1201±#DZeLOW LIÙAu05de* EcôHEBREW LETTER ALE0 - l- j
- $BE~ , n, l
, TGIMELD105dr. p
. 9DAL\ t. r
. H¹ ‡ x+ v
+ 7VAV… , }
, DZAYI� Z dE„
. H± �Z ‹
, T, —, •ÀHEBREW LETTE÷(R YOD
    '\u05da'   #  0xEA -> HEBREW LETTER FINAL KAF2 b2 B2 
, c, C, HLAMEŒ d. D. Œ 7MEMŒ e2 E2 
, f, F, ^ 6NUN^ %e02 .F02 
, 1, 1, gSAMEKH[ 2/ 2/ 8AYIˆ 3- 3- º 'PE^ 41 41 	+ 5+ 5+ \ WTSADI_ 64 64 . 7. 7. 'QO\&e8, 8, 8RESD9- 9- )SHDèFè 4TAVà _fffe' 6200pF¢ôLEFT-TO-RIGHT MARK: 6200qF�%  .  6 	- t ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð iso8859_9 generated from 'MAPPINGS/ISO# / À-9.TXT' with2 ‡ P.py.
m ±#"

import  sÊ j ÁAPIs

class  ($ . 1):
3Adef ë ñe(self,input,errors='strict'):,  ¾creturno B = , 4ingC  o 6o *B 	o  o ú ±Incrementalá$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DXª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  š�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±cname='ˆE-9', h !e=4 2().     ij: Ðr=Incremental£Encoder,
  Ñincrementalde &=I D / ástreamreader=S R # Ewrit# W # �)


### [ ±ing Table

~ Ping_t A = (¤ a'\x00'­ õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t" "  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& T B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' iðFULL STOP
    '/'     ð   #  0x2F -> SOLIDUS
    '0'   "  30" ¢DIGIT ZERO% 1% 1% 2ONE$ 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOURo 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& $NI):% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, SÒQUESTION MARK@( 4YÃCOMMERCIAL A4A( \òLATIN CAPITAL LETTER AY B1 i1 B1 C1 v1 C1 D1 �1 D1 E1 �1 ™F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 óP1 51 P“ Q1 Q1 R1 ;S1 $T1 ÔU1 UÄ V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ ©5zREVERSEÓ]) À    #  0x5D ð-> RIGHT SQUARE BRACKET
    '^'   ó#  0x5E -> CIRCUMFLEX ACCEN, _, F, ‚LOW LINEO `#  60# YGRAVEJ a' 1' òLATIN SMALL LETTER AV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ Ùc N/ o/ Ü’O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ðS/ t/ ðöu/ ðU^ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðšEFT CURLYi|- î‡VERTICALB}( çÀV  ~. æCTILD~3\x7�ß7×UDELET! "80D ! 8É’<control>è H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ õh[$ ê$ P$ ß$ G$ Àd'     #  0xð8D -> <control>
    '\x8e'
 � #  0x8E$ f$ F$ '90$ /90$ 1$ 1$ 2$ 2$ 3$ 3$ 4$ 4$ 5$ 5$ 6$ 6$ 7$ 7$ 8$ 8$ 9$ 9$ a$ A$ b$ B$ c$ C$ d$ @9@9@9@9@a@A@äNO-BREAK SPACE±aEAEõ
INVERTED EXCLAMATION MARK4 UAU•CENT SIGN$ UAUZPOUND% VAVŠCURRENCY( ZAZ:YEN# YAY¥BROKEN BAR• ZAZ1SECà 	¼ ]A]•DIAERESISK ]A]‹COPYRIGH	bAbö
FEMININE ORDINAL INDICATO© sAsÿLEFT-POINTING DOUBLE ANGLE QUOT¦ “A“+NOœ ’A’¦SOFT HYPHEË”A”›REGISTEREÐšAšUMACROK b—B—iDEGREEÌb”B”ªPLUS-MINUS* ŠBŠô SUPERSCRIPT TWO°b�B�	* 5HREb—B—€ACUTE ACèS –B–ZMICRO¢ ˜B˜zPILCROW' šBš¥MIDDLE DOTq ˜B˜uCEDILLA" –B–æ &ONä —B—oMASCUL˜
b˜B˜ò™b™B™¢VULGAR FRAŽ ONÖEARTEb¬B¬6 EHALFeqB¹3 Tø1 QUk ÝbÈBÈðINVERTED QUESTIOðN MARK
    '\xc0'
 õ #  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE< 1< 1< FACUT< 2< 2< ¥CIRCUMFLEX} 3A 3A FTILD} 4< 4< •DIAERESIS| 5@ 5@ ‡RING ABO:6A 6A ³ 72 72 C¨uCEDILLA± 8> 8> E> 
æ9< 9< 
æa< A< æ bA BA ªc@ C@ Iù d< D< 
ù e< E< ù  fA FA ù Au011ƒ ØDØGù 6BREždØDØN< 	[dØDØO< 	jdÓDÓ< 	qdÓDÓ< qdÔDÔA 
õ ÏDÏ< ­(xdÝDÝôMULTIPLICATION SIGNÍdÍDÍn USTROKHdÎDÎU ÎDÎ< 
 ÉDÉ<   ÊDÊA dAu013ëÎ9DOT³Gu015QÒS9�dÏDÏESMALeeSHARP ge±  œEÄ	5 šeÂð E1 -> LATIN SMAðLL LETTER A WITH ACUTE
    '\xe2'
 ý #  0xE2 -> LATIN SMA: ¥CIRCUMFLEX? 3? 3? FTILDy 4: 4: •DIAERESISx 5> 5> –RING ABOV} 6? 6? 0 70 70 C`uCEDILLA« 8< 8< E< 7GRA¦ 9: 9: 
Öa: A: Ö b? B? œc> C> Iñ d: D: 
ñ e: E: ñ  f? F? ñ Au011@ D/F0> Gñ 6BREâ'f1x /F1: N: 	?f¸F¸O: 	Vf³F³: 	ef³F³: ef´F´? 
í ¯F¯: Ÿ(xf½F½ÔDIVISION SIGN©f©F©f USTROK fªFªUŽªFª: 
Ž¥F¥: Ž ¦F¦? TAu013»óª“DOTLESS IcGu015*§S(Hf:  ªF¤Y< ± ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
#
# johab.py: Python Uni=   CB ¡ for JOHAB- ð*Written by Hye-Shik Chang <perky@FreeBSD.org>
#

import _R rcs_kr,   €multibyt› ±ec as mbc

& % =: Àkr.getcodec(ð'johab')

class Codec(c !s. �):
    en 0 =  "c.   de   P ÁIncrementalEB þ r(mbc.Multibyte  ,U  s   h >cs.4 ¤   ‰ ‚  Dª ‚   ‚ 4 ‚ 	ÑStreamReader(T), ! ,a(s. ^ OWrit^ 
! ^  ^ ódef getregentry(& dreturn¥ Î UInfo(¶Sname=WJ0=0 #()? 5   iFI .r=/ J 	/ ²/ s r =w# we# <# ò)
""" Python Character MappingUñ2 koi8_r generated from 'MAPPINGS/VENDORS/MISC/KOI8-R.TXT' with ge?`c.py.
o £#"

import�S

###l DAPIstÓ¯ ãPó(self,input,errors='strict'ø �
üƒcharmap_B = , µing_table)
o �o )B 	o  o Í$Ú ç  h Ã final=False*  Y.S4[0]¤� Ÿª   €  ª ø eNª !@ ä ª  Qª  ýÍ[ ¤ 5pas‡ 		9  	9  ÐJàs module API

ý �' Š2-r'¼ Èe e     ž�@ð ing Table

decoð
ding_table = (
    '\x00'
 õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þP3[“DIGIT ZER¡ø% `% òï$ Y$ éæð    #  0x33 -> DðIGIT THREE
    '4'   Á#  0x34 -> D& BFOUR% 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& 3NIN• :% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, F, ÒQUESTION MARK@(  40( ÃCOMMERCIAL A4A( 1( òLATIN CAPITAL LETTER AY B1 21 B1 C1 31 C1 D1 �“ D1 E1 �1 F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 Ob P1 51 P1 Q1 Q1 R1 ;S1 Sb T1 ÔU1 Ub V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ 5ãREVERSE SOLIDU¯])  * R¦Y ^/ óCIRCUMFLEX ACCEN… _, ÿEOW Lß`# 6ñXGRAVEJ À'a'        #ð  0x61 -> LATIN SMALL LETTER A
    'b'   #/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ E/ f/ 6/ F/ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ ðQ/ r/ ðR/ s/ ðS/ t/ ðT/ u/ ðU/ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðóEFT CURLY BRACKEG|- îÃVERTICAL LIN0}( çORIGHV ~. æCTILDN 3\x7�:7×TDELET! Pu2500F ! 8ÉáBOX DRAWINGS L| “HORIZONTAŽ\8 28 Ò8  â 26 Ÿn Ù6  ‘DOWN AND ù < 1ª æ< 	3LEF| w &14­ ò;  /UPu 8: ý: s ê 9   y 2³ @ 
 2 (?  ià3€ :A  3? € J? ÀNGS LIGHT VEö2RTICAL AND HORIZONTAL
    '\u2580'   #  0x8B -> UPPER HALF BLOCK
+ 4+ C+ ?LOW+ 8+ D+ MFULLP c% E% OLEFTz 9¥ F* ORIGH+ 1U  90+ L+ VSHADEö &92& 1& |MEDIUM ' 3' 2' KDARK% &32�  93% 2TOPÆ hINTEGRna, 4, ¶BLACK SQUARŸ 6219x 5' åULLET OPERATORÉ 621a* 6* K V ROOT& 4� 97& ö ALMOST EQUAL TO* 6ä 98* ÏLESS-THAN OR0 5€ 90 GREATER3 xr 9A3 ÖNO-BREAK SPAC'32Ë›oBOTTOM\!xbZX Ÿ³DEGREE SIGNá !xbø& šäSUPERSCRIPT TW0xb7Ù * Ÿ…MIDDLE DZ)xf% šˆDIVISIONw Au255Ÿ gA—ÿBOX DRAWINGS DOUBLE 5Aª9 "VEæç  p é p º7 W¡ ANGLEO† D (04{ ÙôCYRILLIC SMALL LETTER I4 w 1Aà
ç $WNì BAND w  SIˆ w 6255ƒAý
D +FDOWN» = �Aø 
q
÷ @2556ú;-C 3 € C Ã C FC 
Ã  C Â ¬AR	< 2UP m } AŽ B >AaB 1 B S B VAz®&UPB ; b>†} l ;  ù A A¡A ¾ A Q A d‚ ¸	A > ½  A : e: Í	: e�fH BíH ‹ 
65BüRà
    '\u2561' ô8  #  0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
    '\u0401' G 3G ôCYRILLIC CAPITAL LETTER IO5 F25625 45 | l | Œ G 3G 5G > Ê Ã @ 4@ 6@  (WNÿ pHORIZONÓ [ I 5I 7I 3 Ì I Ò 6I 8I   |[ DOWNI ‹ 7B 9B /UPÒ 8G AG Ð 9G BG D /UPÎ a@ C@ ÛGF «F256bM DM –  /ª	cM EM D ¡ 
M ®!xa>FF ãCOPYRIGHT SIGN) Uu044eo !C0) gESMALe&YU3 &303 13 A2 12 Ì	e Bÿ4±Cÿ	3 'TS4 3wCþg D3 aCê3 I3 4f Ý3 'EF PCÇ3 (GHg š ²4 Hg\C£3 I™ )¬CŽ2 hSHORT 8 ?C8 K� %Cr3 'ELž CX3 M3 dj>3 3+fE043fe D4PÎ3 4Y14gD5&ERþ 4hD5'ES3 2D4TÌ ÎD4ÀIC SMALL LETð#TER U
    '\u0436'   #  0xD6 -> CYRILLIC SMALL LET2 7ZHE4 24 74 V3 &4c3 83 –SOFT SIGNm &4b: 9: 8YERÖ 75 A5 Z¢ 83 B3 7SHAœ d4 C4 f 92 D2 9SHCh Ï E6 C¥&4aj F4 KHARDr%2e: )E0: eCAPITAYr&105 15 	?&114 24 	BB2±/E35 	'TS6 &14k 46 	D5 55 55 	I5 2j 
Q>&EFI&13j 
R5 Gã2  
U6 L1èEP5 IŸ ¶EO4 hSHORT : †EV: KóEW5 'EL¤ bEZ5 M5 ÁEY5 ’1 
Z5 Oi fáFT
PK5 T
Y=2‰FU
&ERŸ 2ŠFU
'ES5 FT
TÔ êFT
\óFS
	¦1Ÿ T
¨2FFS
ª 2·FZ

¬1ÝF]
®2ÆFX
°À   '\u042d' ô%  #  0xFC -> CYRILLIC CAPITAL LETTER E
    '\u0429' 4 D4 	WSHCHA8 78 E8 	(CHn a6 F6 	óHARD SIGN
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB p koi8_t* ð
# http://ru.wikipedia.org/ –/ÐšÐžÐ˜-8( ò
www.opensource.apple.com/ •/libiconv	 %-4 ò/tests/KOI8-T.TXT

import Ú ¤ ÁAPIs

class  ($ . 1):
¥Adef %ñe(self,input,errors='strict'):,  creturno IB = , 4ingWC  o po *B 	o  o ú ±Incremental$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� D’ª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  Ô�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±`name='ÂE-t', e !e=1 2().     ig: 'r=Ðz/ J 	/ å/ sqr8=E# w”# ¡# ")
[  ÈT
~ å2 = (P'\x00ƒó 00…ANULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" ¤ACKNOWLEDG“!x0Çw7 -> BE8E 8 tACKSPACC t" C 9$ pHORIZONrvTABULAT» n0 A0 •LINE FEED½ b& Ì 0B$ �VERTICAL R Ðx0c'     #  0ð
x0C -> FORM FEED
    '\r'     #  0x0D$ ó CARRIAGE RETURN* 2x0e, * E* •SHIFT OUT$ f$ F$ IG '10#  10# ôDATA LINK ESCAPEN (11+ 1+ öEVICE CONTROL ON- 2- 2-  5TWOZ 3- 3- 6HRE\ 4/ 4/  EFOUR] 5. 5. öNEGATIVE ACKNOWLEDG] 6/ ö6 -> SYNCHRONOUS IDL+ 7+ 7+ õ
END OF TRANSMISSION BLOCKŽ 84 84 eCANCEL! 9! 9! U eMEDIUM( a( A( –SUBSTITUT¢ b% B% Ôc! ”ÆILE SEPARATOFd) ™_GROUP*  ™1™oRECORD+   1 LUNIT)  { 2¦CSPACè !  ›€EXCLAMAT‚3MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSAN"3"'"!"2u“APOSTROPH(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þ[3[“DIGIT ZER¡ø% `% òï$ Y$ éæ$ T$ àÝ& T“ ×Ô% SK 3FIVÊ% Q% 2SIX#Ã$ Q$ 3EVEèµ& R& E-L º& M& $NI:”3FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( ð40 -> COMMERCIAL° AT
    'A'   ò#  0x41 -> LATIN CAPITAL LETTER A1 B1 21 B1 C1 31 C1 D1 41 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 B1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 Q1 R1 R1 S1 S1 T1 ÔU1 Ub V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ (5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿcOW LINÛ`# 6ñYGRAVEJ a' çLSMALõb/ å	/ óc/ ã	/ ñd/ á	/ ïe/ ß	/ f/ Ý	/ ëg/ Û	/ éh/ Ù	/ çi/ ×	/ åj/ Õ	/ ãk/ ÓÍð SMALL LETTER K
p    'l'   ð#  0x6C -> LATIN SMALL LETTER L
$ +'m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ B/ óEFT CURLY BRACKEG|- îÒVERTICAL LINEU }( çORIGHV ~. æCTILDN B\x7f# d7×TDELET! Pu049b# ! 8ÉŠCYRILLICˆóKA WITH DESCENDE~\B 3B ÜB 2GHEC USTROK‚ F201a@ íòSINGLE LOW-9 QUOTATION MARK'v 26 ôv PCAPITWBx eB ODOUBx F20266 pHORIZONr sELLIPSIkf\u2020. FDAGG=F2021! ÿ… 
( 7fff­ ø”UNDEFINED7203m íÓPER MILLE SIGì <b²ç<	|HôF2039· ú´áEFT-POINTING AÈÂbÂ† Âˆ F04b7ˆ -D 	Ê C|¿ bÑBC ‡ E 
ŸgŸ6049è9ji lE2018ð 9lLr}i6201­9aR6 ck ak Ÿk d5 Tk ÐDOUBLE QUOTATöION MARK
    '\u2022'   #  0x95 -> BULLET! &13! 6! wEN DASH" 4" 7" M" Ffffe" 8" •UNDEFINEDF 1‰ 9$ QTRADE® T SIGN* 
N A* N 603ar B$ ñSINGLE RIGHT-POINTING A lQUOTAT
i CE i 
$ D$ E$ F$ /A0$ E04efù  A1$ õCYRILLIC SMALL LETTER U WITH MACRO[604e©)A2> oCAPITA@ &51~ 3@ 	~ #IOÎ!xa<�!A43 yURRENCYö604eˆA©Ù IÙ  0xa6— f Æ¥BROKEN BAR‹ 7% É1SEC€AÎ	AÎ;AÈ8xab“ È7LEFÀoDOUBLEÇ	8xacD Ç8NOT]8xad# Æ¤SOFT HYPHE!xaEÈ¨REGISTEREDP uÿ Î7xb0t BÎhDEGREEJ !xbPt BÐªPLUS-MINUS* È* ¼äSUPERSCRIPT TWsAu040V ôB¦æ¨
Ó B¨Ò104e… Y 
¤Y ¦b¦B¦zPILCROWê ¨B¨•MIDDLE DO¸	ƒB¦1211r ° ¦hNUMEROo ú ¨b¨B¨i©i ©c
× ª$ ¨$ 8xa9~¢ACOPYµ 	þ @044e+ $C§x#YUHAu043Ü3 ´3 A2 ’C¼2 &BE3 4¼CÅ	kàTSE
    '\u043ö%4'   #  0xC4 -> CYRILLIC SMALL LETTER DE
    '\u04353 53 I3 4f 63 'EFf 3f 73 (GHg š 84 'HAg 8g 93 I2 92 A2 hSHORT 8 a8 B8 K� b3 C3 'ELž c3 D3 M3 d3 E3 N3 e3 F3 O2 f2 /D02 PÎ3 13 Y1&40f 23 &ER™ &413 33 S3 23 4TÌ ÎD4Ue &36e 3Z 3™ 4V™ 0D3‡SOFT SIG4�D:8YERÖ 7Ö =Z¢ ¢D8SÖ4ÓD9	o4ÖD89SHCh Ï ;C¥4D<KHARDr2vEDeCAPITA®Yr1EF5 G1EG4 B¨2±EI5 'TS6 1EL6 ‚1èEN5 „2j 
Q5 †1¸ER5 	ˆ2  
U6 L1èEP5 T1¶EO4 
ŽÀu041a'   #  ÿ*0xEB -> CYRILLIC CAPITAL LETTER KA
    '\u041b'   #  0xEC5 	'EL5 c5 D5 
M5 d5 E5 
N5 e5 F5 	O4 f4 /F04 	&PE5 25 15 	Y=&20j 25 	'ERj 15 35 
S5 25 45 	TÔ 35 55 	Ui &164 64 	'ZHj 1Ÿ 76 	V5 2F/F85 	‡SOFT SIG2·/F9< 	8YERÞ 7Þ A7 	Z¨ 85 X
(SHïFY}&29j X
9SHCl × [
Cµ&2an \
BHARD€ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ñ
 koi8_u generated from 'p6 "-m, ðs/KOI8-U.TXT' with1 ƒ P.py.
i ±#"

import  sÆ f ÁAPIs

class  ($ . 1):
ŸAdef ç ñe(self,input,errors='strict'):,  \creturno B = , 4ingC  o 2o *B 	o  o ú ±IncrementalÝ$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� DTª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9 Ð### encodingsð$ module API

def getregentry():
    return codecs.C QInfo(  ! åname='koi8-u',  en3 =1 2().  )de   ²incremental: 6r=I E\ r/ J 	/ Dl / ástreamreader=S R R # Ewrit# W # �)


### [ �ing TableE€coding_t 2 = (`'\x00'.ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pDRIGH, ÀHESIS
    '*#'  ð#  0x2A -> ASTERISK
 +'+# B# ’PLUS SIGN$ ,$ C$ RCOMMA  -  D  ÂHYPHEN-MINUS' .' E' ’FULL STOP$ /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% 2ONE$ 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOURo 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ 3EVE´8& 8& REIGHTL 9& 9& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SÃQUESTION MAR
@( 4Y æƒERCIAL A4A( \óLATIN CAPITAL LETTER B1 i1 B–C1 v1 C1 D1 �1 D1 E1 �1 ™F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 �O1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 jT1 ÔU1 UÄ V1 V1 W1 W1 X1 Y1 À  #  0x59 ->ð LATIN CAPITAL LETTER Y
    'Z'   ¯#  0x5A ->1 Z1 [1 B1 òEFT SQUARE BRACKET. $\\/ _ C. ò REVERSE SOLIDUS* ])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINE~ `#  60# YGRAVEJ a' 1' _ESMAL]AV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ Õ	§J/ k/ Ó5	/ K/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðU� v/ ðV/ w/ ðW/ x/ ðX/ y/ ðÅz/ ðÃ{/ ð ÃZCURLYÂ|- î`VERTICMB}( çRÀV  ~. æCTILD~3\x7�7×TDELET! Pu2500F ! 8ÉáBOX DRAWINGS L| “HORIZONTAŽ\8 28 Ò8  â �6 Ÿn Ù6  ‘DOWN AND ù < 1ª æ< 	3LEFÃ w &14­ ò;  ,UPu À\u2518'   # ð* 0x85 -> BOX DRAWINGS LIGHT UP AND LEFT
    '\u251c'   # 9 69 �VERTICAL? RL @ &24@ 7@ 
 2 8? ADOWN{ ¦HORIZONTAL€ 3€ 9A ù ? € A? 	ÿ E &80BE öUPPER HALF BLOCK¯ 8¯ C+ ?LOW+ 8V D+ MFULLP À E%  _z 9¥ F* É+ 1z  90+ @VSHADEË &92& 1& |MEDIUM ' 3' 2' KDARK% &32�  93% 2TOP› hINTEGRòa, 4, ¶BLACK SQUARŸ 6219x åULLET OPERATORÉ 621a* K F ROO)&24�9éö ALMOST EQUAL TOP 6ä9ÔÏLESS-THAN OR0 5€ ÃGREATER3 x¶9·ÖNO-BREAK SPAC'32Ë›oBOTTOM\!xbZX Ÿ³DEGREE SIGNá !xbø& šäSUPERSCRIPT TW0xb7Ù * Ÿ…MIDDLE DZ)xf% šˆDIVISIONw Au255Ÿ «A—	äDOUBLE  5Aª9 æç  p é p º7 W¡ ANGLE�O† D (04{ ÙôCYRILLIC SMALL LETTER I4Fu045?Aà3 ¶UKRAINIAN Ið5= öž  Q´ ­ 6°ñ 	z ×BYELORUSSIAN-‡ I ÔI ,I EYI (@ )? 7255? AyéÅ  ò< §AM	< _UP SI³
62559A\B FAAND AS „ QAu�? •B ; bƒ�} ¿  ù ð DOUBLE
    '\u0ö>491'   #  0xAD -> CYRILLIC SMALL LETTER UKRAINIAN GHE WITH UPTURN
    '\u255dJ EJ ÷BOX DRAWINGS DOUBLE UP AND LEFT: e: F: ñ VERTICAL SINGLE@ SRIGHTT H fH /B0H ‹  ˆ H Y H &60H 1H ? — H A U-B2A : x Ñ  Ð 7040G 3G œeCAPITAž$IO| F0404½ 45 	Ó$IE? F2563? 5? ÆÂ  ü  » @ F0406@ 6@ ´ ×BYELORUSSIAN-Œ K 7K 7K 	EYI (B )A 7256Œ 8A Ì ADOWNƒ§HORIZONTALB ƒ 9B (UP”@ ÉF2568Ê AG T OG  Ž 9G BG D bG @ a@ C@ Õw Ô 7049%
9�š;&6c™ ;  
&ß !xaËBGDCOPYâ#GN) Fu044pC(¤	ô&YU3 3î C3 A2 ½C2 B|6044°Cð	˜ 'TS4 3ïCï	4 D3 5nCãš 7044f 
Ö	f 'EF IC¾	3 'GHš 4š ±š Hg[C¢3 I™ )òC�2 hSHORT 8 >C~8 K� bjq3 Er6043CW	7'EMÑ df >f Àu043e'   #  ÿ'0xCF -> CYRILLIC SMALL LETTER O
    '\u043f'   #  0xD02 &PE3 43 13 'YA3 0f 23 'ER3 13 33 S3 23 43 TÌ 33 53 Ue &362 62 'ZHf 3™ 74 V3 &4cg 83 –SOFT SIGN¡ &4b: 9: 8YERÖ 75 A5 Z¢ 83 B3 (SHd4 C4 f 92 D2 9SHCh Ï E6 C¥&4aj <KHARDr%2e: EDeCAPITAxYr1EF5 ?1EG4 BB2±EI5 'TS6 &14Ô 
L6 D5 55 
N5 I5 2j 
Q5 &EFå1¸ER5 Gã2  
U6 L1èEP5 IŸ ¶EO4 hSHORT : †EV: KóEW5 'EL¤ bEZ5 M5 ÁEY5 ’1 
Z5 ˜1eFT
š25 T
œ2‰FU
ž2ŠFU
E 2FT
¢2êFT
ÐU
    '\u0416ö''   #  0xF6 -> CYRILLIC CAPITAL LETTER ZHE
    '\u04126 76 	V5 &2c5 85 	–SOFT SIGNq &2b< 9< 	FYERU7 &177 A7 	Z¨ 85 B5 	6SHAk &2d6 C6 	j 94 D4 	9SHCl × E8 	Cµ&2an F6 	BHARD€ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð! kz1048 generated from 'MAPPINGS/VENDORS/MISC/KZ-  .TXT' with7 ‰ P.py.
o ±#"

import  sÌ l ÁAPIs

class  ($ . 1):
ÙAdef í ñe(self, input, errors='strict'):.  creturnq D 	> ,Z 4ing#E  s <s ,D s  s ±Incrementalë$er í  ¨ × 	³final=False*  G .Z4[0]®’ Dd¬  ‚  ¬ ú T¬ @ P	¬  U¬ ÑStreamWriter(Z, § 5pas” ORead:  	:  ª“ðings module API

Ãgetregentry(7 
­  QInfo(‰ ·bname='˜%', e !e=1 2().     im: 'r=Ô€/ J 	/ é/ ssr9=F# w–# £# ")
)[  žTõ
~ ç2 = (P'\x00YG 00\ANULL1   1  1  õSTART OF HEADING, ZL 2, ETEXT) 3U 3) 0ENDS 	' 4' 4' ÀD OF TRANSMIðSSION
    '\x05'
 õ  #  0x05 -> ENQUIRY# 6# 6# µACKNOWLEDGE' 7' •7 -> BELL  8  8  tACKSPACE t# � 9% öHORIZONTAL TABULATÀ n1 A1 •LINE FEED{ b' å B% oVERTICT 9x0c/ C/ HFORMT r# ª D% æCARRIAGE RETURde-  E+ •SHIFT OUT¤ f% F% II (10$  10$ ô DATA LINK ESCAPJ9x11, 1, öEVICE CONTROL ON. 2. 2.  4TWO¬ )13. 3. 6HRE^ 40 40  EFOUR_ 	”1”ŸNEGATIVE z 1¡1¡ö SYNCHRONOUS IDL‹ 	¦1¦áEND OF TRANSMIe BLOCK‘ 	»1»UCANCEÝ)19â ¸W eMEDIUMK a) °–SUBSTITUT¦ 	±1±ß	¤1¤ÆILE SEPARATONdr ©_GROUP+  	©1©oRECORD,  	°1°LUNIT*  ~  *2¶õ!! «aEXCLAMëC MAR‹", ©LQUOT* #* ¥£NUMBER SIGT$' œHOLLA' %' ”wPERCENTO &( Œ‚AMPERSAN�2"'"r…“APOSTROPH(K vòLEFT PARENTHESISW), €ORIGH-  *- „sASTERISh+$ ‚GPLUSí ,% …RCOMMA— -! |³HYPHEN-MINU¿ .( y’FULL STOPM /% rTSOLIDH Y3k“DIGIT ZER¿& p& % i% 	% d%  ý' d— ÷ô& cM 3FIVê& a& 2SIX+ã% à7 -> DIGIT SEV EN
    '8'  ò#  0x38 -> DIGIT EIGHT' 9' 9' BNINE& :& A& CCOLOn ;! B! GSEMI% <% C% ÓLESS-THAN SIGO =* D* gEQUALS' >' E' |GREATERT ?- F- ÒQUESTION MARKí @)  40) ÃCOMMERCIAL A<A) 1) òLATIN CAPITAL LETTER A[ B2 22 B2 C2 32 C2 D2 42 D2 E2 52 F2 62 Fd G2 72 G2 H2 Á^H2 I2 Ì2 I2 J2 Ø2 J2 K2 é2 OL2 ö&Ld M2 þd M2 N2 	2 bO2 2 Od P2 52 P2 Q2  Q2 R2  R2 S2  S2 T2  èU2  Ud V2  V2 W2  W2 X2  X2 Y2  Y2 Z2  Z2 [2  óEFT SQUARE BRACKE[%\\0 ¦5ãREVERSE SOLIDU¸]*  + RË[ ^0 óCIRCUMFLEX ACCENˆ _- EOW L`$ 6YGRAVEL a( ÷LSMALb0 õ	0 c0 Ð3 -> LATIN SMðALL LETTER C
    'd'  ÷#  0x64 -> LATIN SM0 D0 e0 50 E0 f0 60 F0 g0 70 G0 h0 80 H0 i0 90 I0 j0 A0 J0 k0 B0 K0 l0 C0 L0 m0 D0 M0 n0 E0 N0 o0 F0 O0 p0 /700 P0 q0 10 Q0 r0 20 R0 s0 30 S0 t0  T0 u0  U0 v0  V0 w0  W0 x0  X0 y0  Y0 z0  Z0 {0  óEFT CURLY BRACKEN|. þÃVERTICAL LING}) ÷ORIGHX ~/ öCTILDP 4\x7š÷7çTDELET" Qu0402H " 8ÙàCYRILLIC CAPIT£ N(DJ7 37 à7 G7 G201a7 çóSINGLE LOW-9 QUOTATION MAR>X\u045n în 	Á
l ÈÚ óODOUBl G2026£ úpHORIZONsELLIPSIYg\u2020/ ùSDAGGE«" 1" ëˆ ) 'ac) äƒEURO SIG¹ N 3p Ù™PER MILLE* G0409O Ó5ÚL£37 Ú£áEFT-POINTING A·±0èñ| N| 80497 ÿ7 ðKA WITH DESCENDER
    '\u0ð!4ba'    #  0x8E -> CYRILLIC CAPITAL LETTER SHHA
, w'\u040f8 F8 	FDZHE8 &528 )908 ESMALn %DJ5 G20185 15 ôLEFT SINGLE QUOTATION MARKk G20196 26 ORIGH7 c7 37 m ODOUBm 	d6 46 m 7 257 gBULLETÆ 3Y 6" wEN DASH# 4# 7# M# Gfffe# 8# •UNDEFINEDH 1� 9% QTRADEWT SIGN+ 8045\A+ 7	ÇLÇ3l 9B5 Â+¿-POINTING A×8045F CF { N{ G049b D5 öKA WITH DESCENDERó bC 
*	ó 
(5(9(	6 &1xa0­ –A&ÕNO-BREAK SPAC204b, ÀAÀ1TRA Uã XSTROKJ 1v J /J 	ª SH d­A@H ’ 4CHWS"xaÅõ C‹CURRENCY}eb 5b ƒBARRED OÆ1xa6ä e OBDN BAì9xa7& R1SECc
04WŠ I„ ;„ hACOPYê 9AgL?GHE× "xaµm u Ïm¡t"xaE t NOI"xa $ c¤SOFT HYPHE:"xaˆ' GpREGISTE©
^- ’
<þ ”êi BDhDEGREEc"xbÁ' A¨PLUS-MINUS+  ô>� B"� ó	BYELORUSSIAN-UKRAINIAN Iž Hu045L 
&	nJ eP– 7Â
J À    '\xb5'  ð    #  0xB5 -> MICRO SIGN
 `'\xb6'
 & 6& zPILCROW( 7( 7( £MIDDLE DOTN Qu0451( t 8& ô	CYRILLIC SMALL LETTER IO4 2211„ 4 94 JNUME© Wu0493[ A' [ ó GHE WITH STROKEh 1xbb? ê BA óRIGHT-POINTING DOUBLE ANGLE QUOTATION MARKF Qu04d9H ® CF ‡ VSCHWA7 'a27 D7 eCAPITA"EN¿ —DESCENDERE EE 	^C 	fˆ FC @STRA& U &10< )C0< Ä ù 1/C15 	B¬Gu041//C26 	V6  /C36 	(GH7 4Ø 47 	D6 56 _	I6 íCo6 Z£ €vC~7 m 8£ 
Ž£ æáC�k wSHORT I; ap 
£p K"šÜ ˜q 'ELl cl 
ˆl 'EM6 d6 ‡6 e6 
xl ×7041jCj5 P³2dDd
2eDe
&ES× 2eDe
T¢ eDe
;2cDc
'EF¡ cDc
HP2cDc
(TSØ cDc
Cš2dDd
S¥ fDfC9 dDdÀL LETTER HARðD SIGN
    '\u042b' ÷#  0xDB -> CYRILLIC CAPITAL LETTER YERU8 c8 C8 	LSOFTu d= D= 	Er e5 E5 	Y¨ f6 F6 
Al &306 )E06 ESMAL3 13 13 BÓ '324 24 V4 34 34 (GH5 45 45 D4 54 54 I4 64 64 Z� 75 75 i 84 84 IÔ93 93 hSHORT 9 a9 A9 KWEW	A'EL¡ SES
4 M4 JEJ
4 ó3IEI	4 Og FEF	3 P£4DFD&ERh 4EFE'ES4 EFETœ EFEI4CFC'EF› CFCH:4CFC(TSÐ CFCCx4DFDSŸ FFF
C7 DFD<HAR¢4KFK
 4MFMž 4TFT	éSFSš4TFTóYA
)

### Encoding table
e _ ð = codecs.charmap_build(decoding_table)ñ4
""" Python 'latin-1' Codec


Written by Marc-Andre Lemburg (mal@le ð.com).

(c) Copyright CNRI, All R ð
s Reserved. NO WARRANTY.
† �
import c| bs

###ˆ Â APIs

class ($ .§ ð,):

    # Note: Binding these as C functions will result in$  X 3notF sconvertC ðm to methods. This  �ntended.4  en� # =» .G2_1_ # /de#  Ý ÁIncrementalET rê  #):Y "f h ó
(self, input, final=False*  $oreturn¨ (:  F ¿.errors)[0]›  DÌ ›  q Bdef à › '@ › 
`Stream«1er(,m8cs. • 5pasL ORead9  9 C)2er(I ‚ , < ¦¢"ß #  # ;  °ings module 

hÃgetregentry(± 
ìQInfo(n  õname='iso8859-1', h !e=4 .  ©    iÂ8 .r=»/ J 	/ O/ sêr±=h# cwriter# ˜Þ )jðàCharacter Mappñò ð  generated from 'VENDORS/APPLE/ARABIC.TXT' with/ p2.pyÊ?#"
Í- ÔA<—“='strict'é Ì
íscharmap�Ù= ,V ‚ing_map): m m )B ª ,  m otable)M èQè
õg¨ 6e·¨  Oª êÀpass

class ðStreamReader(Codec,c (s. ó():
    pass

### encodings module API

def getregentry(7 sreturn X e QInfo(T  X õname='mac-arabic', i !e=5 2().   deV    ²incremental: 6r=I EÅ /er/ J 	/ Dl / s<r<=/R # cwriter# W # )NZ ping MapF\d_map =7ñmake_identity_dict(range(256))
° 0ing5 ‘.update({F€0x0080:  0c4,pö #  LATIN CAPITAL LETTER A WITH DIAERESISA 1A %a0A öNO-BREAK SPACE, right-left6 26 %c76 w Cw vCEDILLA? 3? 9? E? VACUTE= 4= /d1= N= GTILD= 5= 6= O= 0 6A cA UA 7A e¿ LSMAL°ú 8; ¬v; GGRAVø 9; 2· ; ¦CIRCUMFLEXua@ h@ 6 b? 56ba dARABIC §NOON GHUNN&c5 50ab5 ÿLEFT-POINTING DOUBLE ANGLE QUOTATION MARK¶dQ e¶	Å ´e= ´	= ²f; 8É ¥; 
¸9àe9ó v ¸ 9ßeD{ ¸9è/edº 	Iì
­9ä6202jpHORIZON—�ELLIPSIS¨9â/eev õ å/ef@ õ  ãf¢
_9Ý/f3z 	]0ÝbªORIGHïÀ-left
    0xà0099: 0x00f4,  ð#  LATIN SMALL LETTER O WITH CIRCUMFLEX
,  8 #9a@ 6@ –DIAERESIS? b? 7? ö
DIVISION SIGN, right-left5 c5 a5 ´  U´ VACUTE; d; 9; GGRAV; e; b; *f@ c@ *"a0? %20? _SPACE"#a1- 1- €EXCLAMATZOMARK8 28 28 OQUOT6 36 36 oNUMBERÃ#a43 w_DOLLA3 	53 &66öáARABIC PERCENTn ê!a6/ &02™ŸAMPERSANDü 71 ‹ŸAPOSTROPHf82 8ø ÀLEFT PARENTHéj t2…ORIGH9 m2oSTERISÏ^2³APLUS)š Z&60¤dVCOMMA]G%2dú ÏHYPHEN-MINUS\ @%2e4 ŸFULL STOP1 1%2f1 _SOLID` b!&66!¼ ø-INDIC DIGIT ZEROn õ (need override)ã bC&66CO  )ONN Y&66YN  /TWœ q&66qN ?HREž Ž&66ŽP  OFOUR;ª5¹O /IVž Ê'66Êù	Ù?SIX� ç'66çN  9EVE}Ú&66í  Eà  &66P  /NIy333À COLON, righðt-left
    0x00bb: @61b, ö #  ARABIC SEMICOLON, c, 503c, üLESS-THAN SIGN, righb d6 d6 oEQUALS3 e3 e3 GREATERl f9 561f9 Î ÕQUESTION MARKÒ  c00 E274a0 ÿEIGHT TEARDROP-SPOKED PROPELLER ASTERISKì  c1P E0621P € ÆLETTER HAMZA 2/ 2/ öALEF WITH MADDA ABOVE? 3? 3? x ? 4? 4? 2WAW} > 5> 5> ¼ ? VBELOW¼ 6? 6? ?YEH} 7> 7>  } l 8. 8. 6BEH- 9- 9-  TEŽGRBUTÉa5 H
øTb s2s%(TH. u&62u
[ FJEEM¾ m&62m
. 'HAë g&62g
- K. \2\· 5DALˆ dYO0630FH. 737Rd5356ZAI´d$3$7SEE. 3)SH/ 36SADò3òD- á3áTÈdà3àZ- à3à	>Ø3Ø)GH/ Ú&05ÚÿLEFT SQUARE BRACKET:dç&05çÿ REVERSE SOLIDUS7 ð&05ðRÁs ÿ&05ÿÿCIRCUMFLEX ACCEN¬ 
&05
�LOW LINE¥ e4fTATWEE7e	4	F	e	4	2QAF~Àx00e3: 0x06403,  ð#  ARABIC LETTER KAF
 ï0x00e4: 0x0644- 6LAM- 5- 5- 7MEE. 6. 6. FNOON\ 7. 7. 6HEH- 8- 8- 6WAW- 9- 9- ÆALEF MAKSURA6 a6 a6 Y� b- b- wFATHATAè c+ c+ JDAMM+ d+ d+ JKASR+ e+ e+ � Ö f( f( ~ ( "f0( ,50( { ( 1( 1( VSHADDO#f2) 2) 6UKU"f3( 7É ½Pwf½7Ú(TT. ¾8�(TCdf¿dí&AE½aFVˆ ½a„ã G f½8êFDDALˆ µ9�[ (RR‰ ¶&07¶öLEFT CURLY BRACKET, right-lefth Å&07ÅßVERTICAL LINE5 Ï&07ÏORIGHp ß9J× ädkóYEH BARREE
})

### Decoding Table

d  _t A = (ü `'\x00'<0 # 8õ	000 -> CONTROL CHARACTER. 1. 1. 2. 2. 3. 3. 4. 4. 5. 5. 6. 6. 7. 7. 8. 8. 	t,  ž9. 	n. a. 	2x0b0 úb. c. c. 	r, ¸ d. 	2x0e0 Š e. ÀL CHARACTER
     '\x0f'
 ð #  0x000f -> CONTROL CHARACTER
$ Y'\x10. /10. 1. 1. 2. 2. 3. 3. 4. 4. 5. 5. 6. 6. 7. 7. 8. 8. 9. 9. a. a. b. b. c. c. d. d. e. e. 
à1à	 Y $  2àòSPACE, left-right!. àþEXCLAMATION MARK9 "9 ëOQUOT7 	#7 ô¾NUMBER SIGNk $4 ú_DOLLA4 %4  PERCENTi &5 �AMPERSAND› 0"'"T  {2ŸAPOSTROPHr (e ýLEFT PARENTHESISl -')9 ORIGH: *: 'ASTERISÝ +1 *OPLUS;,2 .8MMAË ð; in Arabic-script context, displayed asÈð 66C ARABIC THOU‚£S SEPARATOÎ-x x¿HYPHEN-MINUJ .5 ŸFULL STOP± 'B± |DECIMAL¯ /z Ë_SOLIDª ªÍ3ÍÏDIGIT ZERO; Q0  v-INDIC H ëo ' _ONE; o 1o 2ONEn +n Cn  TWÜ Ý Àntext, displðayed as 0x0662 ARABIC-INDIC DIGIT TWO
    '3'    # 0 d033 ->& ùHREE; in Arabic-script context, displn 3n  H p 4p 4p oFOUR; p 4p  H o 5o 5o ?IVEo 5o 2IVEo 6o 6o _SIX; Þ 6o 2SIXn 7n 7n OEVEN¼7n  H p 8p 8p _EIGHTp 8p H p 9p 9p ?NIN½9p  H o :o ao òCOLON, left-right. ;. b. OSEMI2 <2 c2 ßLESS-THAN SIGi  =7 d7 oEQUALS4 >4 e4 GREATERn 	?: f: ÞQUESTION MARK@6  406 ÒCOMMERCIAL AT7A* 1* òLATIN CAPITAL LETTER A3 B3 23 B3 C3 Öf C3 D3 ™3 D3 E3 ]3 !F3 !3 Ff G3 æ3 G3 H3 ©3 H3 I3 l3 I3 J3 03 J3 K3 53 K3 L3 61L3 M3 2f M3 N3 13 N3 O3 *3 mP3 5'3 Pf Q3 0ÀER Q
    'R'  ð#  0x0052 -> LATIN CAPITAL LETTER R
+ 0'S'   3 33 S3 T3 43 T3 U3 53 U3 V3 63 V3 W3 73 W3 X3 83 X3 Y3 93 Y3 Z3 a3 Z3 [3 b3 òEFT SQUARE BRACKET, left-right< $\\= Ôc< þ REVERSE SOLIDUS8 ]7  8 d8 ?IGHu ^= e= ÿCIRCUMFLEX ACCEN¯  _: f: ŽLOW LINE¨ `1  601 SGRAVEf 	a) 1) ESMALA1 b1 A	1 B1 c1 ?	1 C1 d1 =	1 D1 e1 ;	1 E1 f1 9	1 F1 g1 7	1 G1 h1 5	1 H1 i1 3	1 I1 j1 1	1 J1 k1 /ú	1 K1 l1 $ L1 m1 1  M1 n1 1  N1 o1 Ä O1 p1 7b  P1 q1 Q1 r1 Os1 Mt1 Ku1 Iv1 Gw1 Ex1 Cy1 Az1 ÀSMALL LETTER  Z
    '{'   ò#  0x007b -> LEFT CURLY BRACKET, left-right; |; c; ÞVERTICAL LINE6 }6 d6 ORIGHr ~< e< RTILDE” B\x7f% Ï f" ôCONTROL CHARACTER. )c4.  80. °LATIN CAPITÇ ôETTER A WITH DIAERESISB *a0B 1B ñNO-BREAK SPACE, 6-A7 *c77 27 y Cy uCEDILLA@ 9@ 3@ E@ EACUT%*d1> 4> N> 	c*d6> 5> O> 5*dcB 6B UB eÂ 7B ySMALL L·	þ e³8< EGRAV:*e2º 9< ¤CIRCUMFLEX¹eraA ;Pu06baƒ à8¯dARABICô ¥NOON GHUNN/ ab4 $  6 ª åÿ-POINTING DOUBLE ANGLE QUOTATION MARKÁeÁÆÁ	�¿e¿È>  ½*e8Ì â< 
¿<9ð	¶ x ¿ 
I9ï} ¿9xed½ 9ø	� Iø¸Au202zÅ9ôpHORIZONª�ELLIPSIS¯ex òx ù  
X9õA ù f±9ó	@ q*f3½ ío5+xb±ínû&fÃ9� LfÇ†A L
|9PDIVIS²OSIGNÐfa'     #  0xð#009c -> LATIN SMALL LETTER U WITH ACUTE
    '\xf9'
 ¯ #  0x009d< FGRAV< b< e< ¥CIRCUMFLEX} cA fA ’DIAERESIS@  = $  ½  a0@ òSPACE, right-left. !. 1. þEXCLAMATION MARK9 "9 29 OQUOT7 	#7 37 ¾NUMBER SIGNk $4 44 _DOLLA4 `\u066a9 Ã a54 áARABIC PERCENTp &+ ó!a60 �MPERSAND– 1"'"/ h72 �POSTROPHm (e 83 ÀLEFT PARENTHÈl -')9 99 ORIGH: *: a: ASTERISØ +1 b1 APLUS/�  k0³kjkRCOMMAd-[ WÎHYPHEN-MINUS^ .5 PžFULL STOP2 /2 A_SOLIDb  À  605 À b1À ø-INDIC DIGIT ZEROp ò (need override)ç P 1P SP  )ON%O 2O iO  /TWž 3O �O ?HRE  4Q žQ  OFOUR?5P º	�?FIV  6P Ú
	P ?SIXŸ 7O ÷O  9EVEÎà8Q @ Eï¢ ÀÐ-Q  /NI�:œ ìP CICOLOß þ1. @~ Q SEMI9 - <[ ;ŸLESS-THANr=7 IWEQUAL¦Àht-left
    C'>'  ð#  0x00be -> GREATER-THAN SIGN, right-left
2 p'\u061f? : f: ôARABIC QUESTION MARK1 G274a1  c01 ÿEIGHT TEARDROP-SPOKED PROPELLER ASTERISK‚ (21Q 1Q ‚ ÄLETTER HAMZA� H06220 20 ÷ALEF WITH MADDA ABOVE@ 3@ 3@ 	z @ 4@ 4@ 2WAW ? 5? 5? ¿ @ WBELOW¿ 6@ 6@ ?YEH 	7? 7?   n 8/ 8/ 7BEH. 9. 9.  TE•HRBUTÑ	Ra6 d bd b.  H“ c/ c/ GJEEM^ d/ d/ (HAð e. w
»K/ lclê6DAL‹ '30] di
] )TH/ GdG R3EdE GZAINŒ 4d4 8SEE/ #d# *SH0 d 7SAD� d D. ñdñ TÒ3ðdð Z. ðdð 
Eèdè %GH0 [ü ¥ ›dêÿLEFT SQUARE BRACKETU \= < ÷þ REVERSE SOLIDUS8 ]7 t  RÞu ^= ÿCIRCUMFLEX ACCEN¯  _: ŽLOW LINE¨  ·4egTATWEEH4e F4e 6QAF‹4e K. e 'LA‹4eÀETTER MEEM
 õ    '\u0646'   #  0x00e6 -> ARABIC LETTER NOON
 / 7/ 7/ 7HEH. 8. 8. 7WAW. 9. 9. ÇALEF MAKSURA7 a7 a7 Y“ b. b. xFATHATAí c, c, KDAMM, d, d, KKASR, e, e, „ Û f) f) � ) '50) 'f0) ~ ) 1) 1) WSHADDW(52* 2* 7UKU&7Î 'f3) BP€7å.f4. (TT/ 8Ÿ/f5/  Cr(d5¶ Ï &AE(a4- Í V‹ a�fÍ 6GAF\ 8ûfÍ FDDAL/ 9˜Å $RRŒ {µ  ‘¶fÆòLEFT CURLY BRACKET, right-leftj |; ÕÞVERTICAL LINE6 }6 ßORIGHr  c9ï!JÛ  . dxô. óYEH BARREE
)

### Encoding Map

e �_map = {û  ÞB00:  ,?öCONTROL CHARACTER- 1- 1- 2- 2- 3- 3- 4- 4- 5- 5- 6- 6- 7- 7- 8- 8- 9- 9- a- a- b- b- c- c- d- d- e- e- f- f- 1Ð/10- ð 1: 0x0011,     ó#  CONTROL CHARACTER
    0x0012: ,  - 3- 3- 4- 4- 5- 5- 6- 6- 7- 7- 8- 8- 9- 9- a- a- b- b- c- c- d- d- e- e- f- f- "20- %20- õSPACE, left-right£- a- ( -3 - 1Z 1Z ÿEXCLAMATION MARKe 8 a8 	p @%22p OQUOTn 6 a6 l 2¿NUMBER SIGN× 3 a3 f ¸2¸_DOLLAf 	3 a3 f ñ2ñPERCENTÍ ø2øŸAMPERSANDþ 1 a1 – -2-ŸAPOSTROPH�2 a2 d d2dÿLEFT PARENTHESISÍ 8 a8 	p §2§ORIGHq 9 a9 
r ì2ìASTERIS|0 a0 ` 2OPLUS91 a1 b T2T8MMA™ð; in Arabic-script context, displayed as_ð 66C ARABIC THOU±¦S SEPARATO�2ž2ž¿HYPHEN-MINU4 a4 ÀHEN-MINUS, róight-left
    0x002e: , ð  #  FULL STOP, +  -r6 ð; in Arabic-script context, displayed asM ý66B ARABIC DECIMAL SEPARATORy /aey t ª fª f1 xSOLIDUS¨ ` / a/  ^  "30^ %30^ ÏDIGIT ZERO; þ 0þ @-INDH � #31n 1n _ONE; n 1n 6ONEm 2m 2m  TWÚ Û 2m 6TWOm 3m 3m OHREEF3m  H o 4o 4o OFOUR·4o  H n 5n 5n  IV¸#5n 'IV¸6n 6n ?SIX%6n 6SIXÛ 7m 7m OEVEN¸7m  H o 8o 8o _EIGHTo 8o H o 9o 9o !NIq¹9o  H n an an _COLON¨3- b- ¦bZ bZ OSEMI^ c1 c1 ßLESS-THAN SIG” 6 b6 � dl dl oEQUALSi 3 b3 f ±38GREATERÕ 9 b9 
r J3JßQUESTION MARK×4P4PÕCOMMERCIAL AT-44öLATIN CAPITAL LETTER A2 Ð4Ð2 B2 Àx0043: 0x00403,  ð#  LATIN CAPITAL LETTER C
 ‚0x0044:  2 D2 52 52 E2 62 62 F2 72 72 G2 82 82 H2 92 92 I2 a2 a2 J2 b2 b2 K2 c2 c2 L2 d2 d2 M2 e2 e2 N2 f2 f2 O2 "502 /502 P2 12 12 Q2 22 22 R2 32  S2  /54d T2  5 U2  5 V2  5 W2  5 X2  5 Y2  5 Z2  5 ýEFT SQUARE BRACKET, left-right; d; 6 -A ; d5dÿ REVERSE SOLIDUSr 7 d7 n  5 ORIGHå < d< x æ5æÿCIRCUMFLEX ACCENZ9 d9 
r &5&OW LINEQ0 d0 `  6T6TSGRAVEÍ à6J6JESMALA0 H6H	0 B0 F6F	0 d6D6D	0 b6B6B	0 `6@À066,     #  óLATIN SMALL LETTER F
    0x0067: , O #  0  G0 80 80 	H0 90 90 	I0 a0 a0 	J0 b0 b0 	K0 c0 c0 	L0 d0 d0 	M0 e0 e0 	N0 f0 f0 	O0 "700 /700 	P0 10 10 	Q0 20 20 	R0 30 30 	S0 40 40 	T0 50 50 	U0 60 60 	V0  /770 	W0  7 
X0  7 
Y0  7 
Z0  7 ýEFT CURLY BRACKET, left-right: f: 5 -@ : D7DßVERTICAL LINEo 5 f5 j ~7~ORIGHß ; f; v Ä7ÄVTILDEµ7µöCONTROL CHARACTE"a²8‚ÿNO-BREAK SPACE, „  aØ8/ÿLEFT-POINTING DOUBLE ANGLE QUOTATION MARKQ bQ 9¹KR 'cË8‹PCAPITmö A WITH DIAERESIc|8lA CA uCEDILLA†c[8{? E? FACUTÃd8ˆ= N= 
 de8•= O= ú d8¦A UA eUÎ	·ÀETTER A WITHñ GRAVE
    0x00e1: 087, ÷ #  LATIN SMALL LETTER A WITH ACUT; 2; 9; ¦CIRCUMFLEX{ 4@ a@ –DIAERESIS? 7? d? 	Cº vCEDILLA= 8= f= 	E= 29; e; 2a; /90; 2b@ 1@ 2 d? 2? 	Iõ º e; 4; º f@ 5@ º f¦/96? 	Nº FTILD¦#f3z á
O; 
õ f¡9á
; õ  #f6{ á
@ õ  á%9bõ õ
DIVISION SIGN, right-leftÙfž9
Uï 
Ùfžcp  ; *™
; *c*�
@ *#60? aº µARABIC COMMö#61§ bR( ”SEMICOLONI#61²b“ , PQUEST…EMARK0 2£cœ0 DFHAMZ‹ 2=cŒ
/ BALEF¦–MADDA ABO·#62Ö%c3¬? x ? ÚcÏ
? 2WAW} > 5®cÍ
> ¼ ? VBELOW*cÍ
? ?YEH} cÐ
>  } l è/c8(6BEH- <cð
[ §TEH MARBUTÉ6cå5 b �c�%(TH� ×c×. FJEEM\ Þcú‰ ÀETTER HAH
  �  0x062e: P0ce,  ð#  ARABIC LETTER KHAH
 . f. f. 5DAL- "30- /d0- (TH. 1. 1. &REˆ #32- 2- FZAIN‰ 3. 3. 7SEE. 4. 4. H/ 5/ 5/ &ADŠ 6- 6- D- 7- 7- Tš#38- 8- Z- 9- 9- 	>a- a- (GH/ 4öeöfTATWEE 4òeòFò4òeò5QAFg4ñeñK- ðeð6LAMZ îeî7MEE. ïeï6NOOy4ðeðHðeð6WAW¶ ðeð¶LEF MAKSURA6 ùeùY� b&,eb&wFATHATAè c+ c+ JDAMM+ d+ d+ JKASR+ ÉeÉ� Ö ÃeÃ~ ( 5ÈfÈ{ ( ÆfÆVSHADDO5ÂfÂFSUKU6y by õ-INDIC DIGIT ZERO, right-left (need override)  6  b  	O ?ONEN Å bÅ 	N /TWœ ¨b¨
N ?HREž ËbË	P OFOURí íbí
O /IVž b	O ?SIX� .b.
N FEVENP Àft (need oveðrride)
    0x0668: @0b8, ü# #  ARABIC-INDIC DIGIT EIGHT, right-left (need oveP 9P 9P 	ONINEO aO +a5O Õ PERCENT SIGNÎ 7~ ,f4/ ¶LETTER TTEH. e] /f3. P- #86- Š [ (CH/ Xf / EDDALŠ #91] aŠ 'RR\ 9\ e. J- #a4[ 7- V- f- ¶ 5GAFµ bœ/8bZ µNOON GHUNNA5 #d2b f5 ¦YEH BARREE4 54 64 A, 3202§9ÔøHORIZONTAL ELLIPSIS|g 3274Ð %c0g øù TEARDROP-SPOKED PROPELLER ASTERISKP ð\}
""" Python Character Mapping Codec mac_croatian generated from 'MAPPINGS/VENDORS/APPLE/CROATIAN.TXT' with: cP P.py.
x ±#"

import  cs

###u ²APIs

class ($ .” 1):
`def en ñ(self,input,errors='strict'):,  4creturno “.charmap_B = , ¦ing_table)o /deo -B 	o  o ú ÁIncrementalEç r ç  h Ã final=False*  Y.S4[0]¤� D"ª  €  ª ø e½ª !@ ä ª  Qª ÑStreamWriter(N,Ò8cs. ¤ 5pas‡ ORead9  	9  ÐJàs module API

ý Ãgetregentry(7 
¡ž UInfo(Â¤name='mac-“%', k !e=7 2().     im: 'r=Ö€/ J 	/ ë/ swr>=K
# Àamwriter=StróeamWriter,
    )


### Decoding Table

d  _t A = (/ `'\x00'9 õ #  0x00 -> CONTROL CHARACTER, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 	t*  Œ9, 	n, A, 	2x0b. äB, c, C, 	r* ° D, 	2x0e. „ E, f, F, 
1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À
7x19¸1À
8x1a, À1À1À1À1À
8x1d„ À1À1À1À1À	 �  D2ÀRSPACEt!  ´òEXCLAMATION MARK+ "+ ³LQUOT) #) °²NUMBER SIGNO $& ªXDOLLA& %& ¤wPERCENTM &' Ÿ‘AMPERSANDq 1"'"ˆ—“APOSTROPH(I �ñLEFT PARENTHESISP +')+ �ORIGH,  *, �sASTERIS_+# †GPLUSç ,$ ~2MMA“ -  r³HYPHEN-MINUº .' mðFULL STOP
    '/'      ð  #  0x2F -> SOLIDUS
    '0'   "  30" ¢DIGIT ZERO% 1% 1% 2ONE$ 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOURo 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& $NI):% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, SÒQUESTION MARK@( 4YÃCOMMERCIAL A4A( \òLATIN CAPITAL LETTER AY B1 i1 B1 C1 v1 C1 D1 �1 D1 E1 �1 ™F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 óP1 51 P“ Q1 Q1 R1 ;S1 $T1 ÔU1 UÄ V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ ©5zREVERSEÓ]) À   #  0x5D -ð> RIGHT SQUARE BRACKET
    '^'   ó#  0x5E -> CIRCUMFLEX ACCEN, _, F, ‚LOW LINEO `#  60# YGRAVEJ a' 1' òLATIN SMALL LETTER AV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ Ùc N/ o/ Ü’O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ðS/ t/ ðöu/ ðU^ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðšEFT CURLYi|- î‡VERTICALB}( çÀV  ~. æCTILD~3\x7�ß7×óCONTROL CHARACTEGB\xc4O , 8ÔPCAPIT§ —ã WITH DIAERESIXH\xc5@ å@ •RING ABOV­ (c7A ÷A C� cCEDILL%H\xc9> > E> EACUTz (d1< < N< 	c(d6<  < O< 7d±w1@ U@ e¼ BÀATIN SMALL LðETTER A WITH ACUTE
    '\xe0'
 ù
 #  0x88 -> LATIN SMALL L: FGRAV: 2: 9: ¥CIRCUMFLEXy 4? A? •DIAERESIS> 3> B> FTILD· 5: C: ‡RING ABOö 7? D? CjuCEDILLAµ 9< E< E< 
¦8: F: 
¦a: /90: ¦ b? 1? ¦d> 2> Iñ c: 3: 
ñ e: 4: ñ  f? 5? ñ (f1> 6> Nñ 	—fÑ/97: O: 	fˆ9Â: 	+fƒ9Â: +(f6í Â? +ˆ9Â> 
+	ÓÂU+�9½: 
+	»: + 	ÏÀ? +Au202¦¤AÄdDAGGERYb  ÅA¦´DEGREE SIGN& a)AŽJCENT$ ‡AxZPOUND% AcxSECTION'  · r · KdBULLET‘ bAA.xPILCROWH (xd“AeSHARP !aA™REGISTEREÎ Au016?§ eCAPITASQDCAROSGu212ã ©TRADE MARKÅ blAïÆ0 AC…aéAÜ2± ÆÃNOT EQUAL TOK Ðu017d'   #  0ð$xAE -> LATIN CAPITAL LETTER Z WITH CARON
    '\xd8'
 � #  0xAF< O< cSTROKE= Pu221e? =  B0= ƒINFINITY# 0xb1!  `  B1# äPLUS-MINUS SIGŠ Pu2264, M 2* óLESS-THAN OR EQUAL TOZ  0 50 30 GREATER3 &063 43 “INCREMENTW !xbU ± 5$ [MICRO¬ &02I 6% ðPARTIAL DIFFEREN T  (Û 7/ ÕN-ARY SUMMATI�Vu220fY 8* dPRODUC¦ Gu016R 9( óESMALñSµñVu222bb A: ƒINTEGRAL¯ 0xaa! B# ôFEMININE ORDINAL INDICATOR5 b5 C5 oMASCUL6 	Pu03a9m D6 \GREEK»SOMEGAk Gu017wð	ý îfîBî	: ì!xb˜Cì°VERTED QUESÆS MARK¦ !xa¡1 ú#IN1 REXCLAú
4 c4 ;NOT{1j2C÷§SQUARE ROO 9¡Cê  F 4HOO¶ Au224$_ ÿmALMOST€'01MCc vCe DACUT9!xaƒè ñLEFT-POINTING DOUBLE ANGLE QUOT&,Au010.ª +€ 	
&02	C?pHORIZON/…ELLIPSISÊ0–3ÕNO-BREAK SPAC× c) 9“ AFGRAV< 3e @< 	ETILD< d´CF< Ù< Gu015*MÇ”IGATURE Op  4 ® {G2 12 D>¢ Dg&01DJsEM DASH¢Fu201D8 PGA@201dt” J_RIGHT6 !DZ EF¤¬6201çDVk /SI6 0xf7Ÿ &Db‰DIVISIONÀ25ca'   #  0ðxD7 -> LOZENGE
    '\uf8ff'   #  0xD8" £Apple logo% 0xa9# % 9% ãCOPYRIGHT SIGN) Pu2044+ N A) æFRACTION SLASH) &ac) B) KEUROM 3x M C$ ñSINGLE LEFT-POINTING A QQUOTAi FMARKh &3ah DD ½ E 0xc6C ÿ EE ôLATIN CAPITAL LETTER AV8xbb2 F2 p oDOUBLE¼  13G   E0E FEN DF0xb7  ™  E1" ¦MIDDLE DOT1 E2% G_OW-9 9 1e] } 36 ³ L6 
&306 46 ˜PER MILLEÜ0xc2' º 5) Sô WITH CIRCUMFLEXÖ 1010ý   6A ESMAL’C? EACUTœ(c1{ Î< Pu010d> v .· v DCARO0xc88 ñ C: DEv FGRAV² t < V< I< 
î Æ< i< 	i!xcA †A 	“DIAERESIS©!xcè@ ‚@ 		ù d < yOù  d‰< ƒx < ù Au011*ìFA 	ìD{ USTROK±dÞF˜; í| 
ô ­¸ F¯< Uy 	ídwFµ< 	ô !xdq} ÀA 	¹ Gu0130Ó
0ƒOTLESS I 2u02_gÉ„MODIFIERX¨ e ACCENÛ102d^< Ëm ETILDŽaÂFµ6MACœFu03c¶FœbGREEK M ÞP³ )xcg�ÌAu02då· ”RÉ&BOõb1FxsCEDILLA:!xcE ­ZÀTTER E WITH ðCIRCUMFLEX
    '\xe6'
 ó #  0xFE -> LATIN SMALL LETTER AE0 Pu02c72 0 F0 óCARON
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð8 mac_cyrillic generated from 'MAPPINGS/VENDORS/APPLE/CYRILLIC.TXT' with: ’ P.py.
x ±#"

import  sÕ u ÁAPIs

class  ($ . 1):
$Adef ö ñe(self,input,errors='strict'):,  zcreturno B = , 4ing(C  o Ao *B 	o  o ú ±Incrementalì$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� Dcª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  ¥�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±¤name='mac-“%', k !e=7 2().     im: 'r=Ö€/ J 	/ ë/ swr>=K# wš# §# ")
![  ŸTö
~ ë2 = .P'\x00> p!00@ñONTROL CHARACTER= , 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, x/06, r47, 8„ 8, 	t* X 9, 	n, A, 	2x0b. $/0B, c, C, 	r* ° D, 	2x0e. à#  0x0E -> CONð
TROL CHARACTER
    '\x0f'
 ÿ  #  0x0F -> CON, '10, /10, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, a, A, b, B, c, C, d, D, e, E, À1À	 U "  ì2ÀRSPACE!  ´òEXCLAMATION MARK+ "+ ³LQUOT) #) °²NUMBER SIGNO $& ªXDOLLA& %& ¤wPERCENTM &' Ÿ‘AMPERSANDq 1"'"ô—“APOSTROPH(I �ñLEFT PARENTHESISP +')+ �ORIGH,  *, �sASTERIS_+# †GPLUSç ,$ ~2MMA“ -  r³HYPHEN-MINUº .' m’FULL STOPK /$ eTSOLIDF P3[¢DIGIT ZEROG % `% #ONt	$ Y$ #TWH $ T$ 3HREJ û& T“ 3FOUÿô% SK 3FIVJ í% Q% 2SIXÜ å$ Q$ 3EVEèß& R& E-L Ù& M& $NI):”3FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4YÒCOMMERCIAL AT4A( \ð LATIN CAPITAL Lð ETTER A
    'B'   ò#  0x42 -> LATIN CAPITAL L1 B1 C1 31 C1 D1 41 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 B1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 R1 S1 S1 T1 T1 U1 U1 V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ ÷5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿcOW LINÛ`# 6ñYGRAVEJ a' çESMALÄõb/ å	/ óc/ ã	/ ñd/ á	/ ïe/ ß	/ f/ Ý	/ ëg/ Û	/ éh/ Ù	/ çi/ ×	/ åj/ Õ	/ ãk/ Óœ	/ ál/ ÔËÐSMALL LETTER �L
    'm'   ò#  0x6D -> LATIN SMALL LETTER M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ B/ óEFT CURLY BRACKEG|- C- ÒVERTICAL LINEU }( çORIGHV ~. æCTILDN B\x7f# 57×óCONTROL CHARACTEG`\u0410. , 8ÔàCYRILLIC CAPITª fA® 4 14 Ù4 B•  i 25 ß5 V5 35 å5 (GH6 46 ì6 5   55 ò5 Ij 65 ø5 Z  76 ÿ6 k 85 5 I©94 
4 hSHORT : a: : Kb5 5 EâMc5 #5 è5 d5 05 î5 e5 75 ó4 MKP«2T9T
‰2U9U
EÖ Ÿ 2U9U
TŸ U9U
ái S9S
&EF2S9S
ð HA
    '\u0426'õ'   #  0x96 -> CYRILLIC CAPITAL LETTER TSE
    '\u0427'6 76 	(CH6 86 86 	7SHAl 96 96 C8 a8 A8 	—HARD SIGNt b< B< 	GYERU7 c7 C7 	LSOFTs d< D< 	Qe4 E4 	Y¥ f5 F5 
…E20205  A05 cDAGGERû !xb H!A1! [EGREEå 9( n A2& näGHE WITH UPTURš0xa3‡ h 3B IPOUN¿!xa�% 4% ySECTIONŽ @2022N Ž 5' eBULLETÕ 6 H yPILCROWH 1040) H 
ô	BYELORUSSIAN-UKRAINIAN Ir aÐr #›REGISTEREä * zOPYRIGHY(21æ ¬TRADE MARKÈ ö
'DJ…56 
õESMAL@4 7226íÃNOT EQUAL TOAu040ïYà
G‘ 6 
á	‘ 4 1221zj BàƒINFINITY� 7xb1Bâ©PLUS-MINUSH@2264, M æÍLESS-THAN ORç F22650 ÔGREATER3 6045sBâI	ä qbz GBYMICROÑ 1049ý Ñ n µ ÈùB!
Ç0Fu šI—?  Ù	"= 0Cñ 4| Y¼Gu0455 
?	r 3 0Çh 
<ä L56 >ž 	i 	4 0ðBE -> CYRILLIC Cÿ*APITAL LETTER NJE
    '\u045a'   #  0xBF -> CYRILLIC SMAL4 84 /C04 g &053 13 C� $DZ� 0xac4 �  C26 „NOT SIGNÀ 6221À  C3# ´SQUARE ROOT& @0192K æ  C4& ZLATINã ´F WITH HOOK9 7224ë 59 ö ALMOST EQUAL TO* &06c 6* „INCREMEN‡ 0xab" Ð 7$ ôLEFT-POINTING DOUBLE ANGLE QUOTATION MAR’ )xbD 8D ORIGHE Gu202­ 9E pHORIZON&ƒELLIPSISÛ 8xa0· A. ÔNO-BREAK SPAC°Au040ž gB) Mæ7TSH7 57 C7 	„
5 0l D5 l Kˆ56 E6 	k 
4 ¼#ºPu20135ž D#sEN DASHU " 4" ,EM" ¬ Dþ .% W dW 6 çD  EFjŠ k 9k k /SI6 0xf74 D(PDIVISè	Ù001e* B,_LOW-9 ‚6 ‚tSHORT U�7045: : 	8 &0f¨ 8 ˆ)DZô7 
+	o 5 6211·D)iNUMEROF0401’ 
I¿70455 3 4Ã &YAe3LÕE-	ö 2 ˜ E'2 BO3íE83 V3 ¯E63 GÂ3ÁE44 Dg JE23 I3 óE/3 	\ð37'   #  0xE7 -> ÿ$CYRILLIC SMALL LETTER ZE
    '\u0438'   #  0xE8 -> 3 I2 92 92 hSHORT 8 a8 A8 'KAk b3 B3 'EL3 c3 C3 M3 d3 D3 N3 e3 E3 O2 f2 F2 P›%403 /F03 &ERf &413 13 S3 23 23 T™ 33 33 Ue 42 42 'EF3 53 53 H/&463 63 (TSÌ 74 74 (CH4 4F4Sœ 6F6
C6 4F4‡HARD SIG¢4;F;8YER§=F=LSOFTo DFD	àCFCYŸ 720aŸ DBEURO‰ ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð2 mac_farsi generated from 'MAPPINGS/VENDORS/APPLE/FARSI.TXT' with7 Œ P.py.
r ±#"

import  sÏ o ÁAPIs

class  ($ . 1):
UAdef ð ñe(self,input,errors='strict'):,  þcreturno B = , 4ing"C  o ;o *B 	o  o ú ±Incrementalæ$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� D]ª  €  ª ø ª (@ Ðinput,self.erð$rors,decoding_table)[0]

class StreamWriter(Codec,c (s. º):
    pass9 ORead9  	9 b### enŠ ós module API

def getregentry(7 sreturn ‘ ž QInfo(�  ‘ õname='mac-farsi', h !e=4 2().     ²incremental: 6r=I EÄ /er/ J 	/ D}/ str;=g.R # w—# ¤# @)


N[ Ping TØ H^è2 = +`'\x00'1ñ #  0x00 -> CONTROL CHARACTER= , 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 	t*  Œ9, 	n, A, 	2x0b. äB, c, C, 	r* ° D, 	2x0e. „ E, f, F, 
1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À
7x19¸1À
8x1a, À1À1À1À1À
8x1d„ À1À1À1À1À	 �  D2ÀòSPACE, left-right€!, ÀþEXCLAMATION MARK7 "7 À 0x22 -> QUOðTATION MARK, left-right
    '#'   þ#  0x23 -> NUMBER SIGN2 $2 42 _DOLLA2 %2 52 PERCENTe &3 63 �AMPERSAND• 0"'"Ã   Ç 70 �POSTROPHE1 +'(a 81 þLEFT PARENTHESIS7 )7 97 ORIGH8 *8 A8 ASTERIS– +/ B/ OPLUS/,0 C0 XCOMMAÃ ð,; in Arabic-script context, displayed as 0x066C ARABIC THOUv²S SEPARATOR<-v Dv ¿HYPHEN-MINU@ .3 E3 ŸFULL STOP­ 'B­ |DECIMAL« /x Fx _SOLID¦ 0.  30. ÏDIGIT ZERO; I³F0 EXTENDED¥ v-INDIC Q O1v 1v _ONE; v 1v 
2ONEu 2u 2u  TWê ë 2u 
2TWOu 3u u_THREE©/F3u  Q w 4w º×OFOUR×4w 
 Q v 5v þí 0FIVØ–/F5v #IVØ6v Av ?SIXM6v 
2SIXë 7u †u OEVENØ7u  Q w 8w Ìw E›w 8w 
Q w 9w w !NI±Ù9w 
 Q v :v JICOLO«À
    ';'    ð    #  0x3B -> SEMICOLON, left-right
% 0'<'   0 C0 ßLESS-THAN SIG5  =5 D5 oEQUALS2 >2 E2 GREATERj 	?8 F8 ÞQUESTION MARKÓ @4  404 ÒCOMMERCIAL ATû A( 1( òLATIN CAPITAL LETTER A1 B1 21 B1 C1 31 C1 D1 41 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 êK1 L1 L1 M1 b M1 N1 1 N1 O1 
1 O1 P1 51 P1 Q1 Q1 R1 R1 S1 S1 T1 ÔU1 Ub V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 þEFT SQUARE BRACKET\$\\; /5þ REVERSE SOLIDUS6 ]5 •5ORIGHq ^; (ÿCIRCUMFLEX ACCEN©  _8 /~OW LINE¢ `/ 6-SGRAVEb 9a' #LSMAL1b/ !	/ /c/ 	/ -d/ À64 -> LATIN ðSMALL LETTER D
    'e'   ù#  0x65 -> LATIN / E/ f/ 6/ F/ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ ðU/ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðòEFT CURLY BRACKET, left-right9 |9 úÞVERTICAL LINE4 }4 ÿORIGHn ~: 
CTILD¢3\x7¥Ñ7ûóCONTROL CHARACTEkB\xc4O , 8øPCAPIT¿ .ó A WITH DIAERESI|H\xa0@ 	ñNO-BREAK SPACE, *-5/H\xc75 u Cu uCEDILLA> 9> > E> EACUT(d1< +< N< 	W(d6< 8< O< +(dc@ I@ U@ e¼ Z©	ö e¥e: EGRAV0(e2´ p: “CIRCUMFLE¯9\xe^€? 1Pu06ba œ�dARABICÃ¥NOON GHUNN ab2 "  4 ð C -> LEFT-POINTð'ING DOUBLE ANGLE QUOTATION MARK, right-left
    '\xe7'
 õ #  0x8D -> LATIN SMALL LETTER C WITH CEDILLA< 9< E< E< UACUTE: 8: F: FGRAV: a: /90: ¥CIRCUMFLEXy b? 1? •DIAERESIS> d> 2> Iñ Pu2026< g 93: ÿHORIZONTAL ELLIPSIS¡e8  ¡ 94: ¡ t ñ  f? 5? ñ (f1> 6> Nñ ETILD¨(f3: 7: O: 	b£8: ¿RIGHT-POINTã (f4‹ 9Q B ‹ Bf¹�A? B` 9B> PDIVIS”OSIGNófäC4 ±  U< f’9Î: 	XfvÌ: % cdÑ? % ;  cAÕ^SPACE!, ÂoEXCLAMè	"7 »#5 ¶NUMBER »$2 ®_DOLLA2 Q\u066ïA¡áARABIC PERCENTl ‚&` ‘�AMPERSAND.1"'"ÜZ‡ŸAPOSTROPH_ (a ~ÀLEFT PARENTHh +')7 dµ8 *8 ]ASTERIS® +/ NAPLUS#—  ]0™]J]CCOMMÉ-W 7¿HYPHEN-MINU— .3 0žFULL STOPŠ /0 !_SOLID^  ¸  f03 ¸ B’EXTENDED Á ð-INDIC DIGIT ZERO, riÿHght-left (need override)
    '\u06f1'   #  0xB1 -> EXTENDED ARABIC-INDIC DIGIT ONE, rigV 2V 2V OTWO,V 3V 3V ?HRE® 4X 4X OFOUR¯ 5W 5W /IV® 6W 6W ?SIX­ 7V 7V OEVENX 8X 8X _EIGHTX 9X 9X ?NIN]:R  AW ICOLOë ; 1b1 ;B, 2Q SEMI7 + <& W C+ ßLESS-THAN SIG`  =5 D5 oEQUALS2 >2 E2 GREATERj 	  1f= Ê F8 Ê ÒQUESTION MARKÎ e\u274a/  C0/ ¸ø TEARDROP-SPOKED PROPELLER ASTERISKÛO 6062ƒCƒ~ ÇLETTER HAMZA. [C[
. ÷ALEF WITH MADDA ABOVE> CCC> v > )C)
> 2WAW{ = C
= ¹ > WBELOW¹ öCö
> ?YEH{ 	ÝCÝ
=  { j ²C²
- 7BEH, †C†
,  TE‡HRBUTÁ>c4 ` cCc)TH� c—e
Y GJEEMZ d- ]
- (HAæ e, W
, K- LCL³ 6DAL… %30Y DI
Y )TH- 'D' RÀ\u0632'   # ð 0xD2 -> ARABIC LETTER ZAIN
    '\u0633'   # - 3- 8SEE- 4- 4-  H. 5. 5.  'AD‡ 6, 6, D, 7, 7, 7TAHX 8, 8, Z, 9, 9, 
7a, A, %GH. [)  oeB. óLEFT SQUARE BRACKET, right-leftÀ \; ŸC: þ REVERSE SOLIDUS6 ]5 p D6 ?IGHq ^; E; ÿCIRCUMFLEX ACCEN©  _8 F8 ŽLOW LINE¢  w 404 Ø  E0/ ¤sTATWEELVu0641) 1) Í'FEí&42, ù 7QAFX øEø K, ÷E÷ 7LAMX õEõ 8MEE- öEö 7NOO}4÷E÷ H
÷E÷ 7WAW² ÷E÷·LEF MAKSURA5  E  Y� b—þìxFATHATAã c* î* KDAMM* d* â* KKASR* e* Ñ* ~ Ñ f' À' { ' 5¸F¸x ' ¶F¶WSHADDG5²F²GSUKU7Ä F­ Pn7ÏF­ (TT- 8�F® )TCVdÜF¯ &AEa3F­ V… a{F­ G‹8ÙF­ 7DDA<9†¥ $RR† {ü¤F¦¤_CURLY£|9 µ�VERTICALÿ}4 ¿R¡n  99ÏÀJEH
    '\u0ò46d2'   #  0xFF -> ARABIC LETTER YEH BARREE
)

### Encoding table
en _ ø	=codecs.charmap_build(de$ ð)
""" Python Character MappW CB ð2 mac_greek generated from 'MAPPINGS/VENDORS/APPLE/GREEK.TXT' with7 Œ P.py.
r ±#"

import  sÏ o ÁAPIs

class  ($ . Á):

    def ð ñe(self,input,errors='strict'):,  0 creturno B = , 2ingF)o ;o *B 	o  o ú ±Incrementalæ$er ç  h Ã final=False*  Y.S4[0]¤� D]ª  €  ª ø Nª !@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  ŸJàs module API

ý Ãgetregentry(7 
¡ž UInfo(Â¡name='mac-�%', h !e=4 2().     ij: 'r=Ó}/ J 	/ è/ str;=H# w—# ¤# ")
[  –Tí
~ è2 = +P'\x00HJ 00JñCONTROL CHARACTER= , 1, 1,  X 2, 3X 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 	t* 49, 	n, A, 	2x0b. ./0B, c, C, 	r* ° D, 	2x0e. „ E, f, ÞðCONTROL CHARACTEÀR
    '\x10'
 ö #  0x10 -> CONTROL CHARACTE, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, a, A, b, B, c, C, d, D, e, E, f, F,  ) "  À2ÀRSPACEà!  ´òEXCLAMATION MARK+ "+ ³LQUOT) #) °²NUMBER SIGNO $& ªXDOLLA& %& ¤wPERCENTM &' Ÿ‘AMPERSANDq 1"'"È—“APOSTROPH(I �ñLEFT PARENTHESISP +')+ �ORIGH,  *, �sASTERIS_+# †GPLUSç ,$ ~2MMA“ -  r³HYPHEN-MINUº .' m’FULL STOPK /$ eTSOLIDF P3[¢DIGIT ZEROG % `% #ONt	$ Y$ #TWH $ T$ 3HREJ û& T“ 3FOU§ô% SK 3FIVJ í% Q% 2SIXÜ å$ Q$ 3EVEèß& R& E-L Ù& M& $NI):”3FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4YÒCOMMERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 ÀAL LETTER B
p    'C'   ð#  0x43 -> LATIN CAPITAL LETTER C
& +'D1 41 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 B1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 S1 T1 T1 U1 U1 V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ Æ5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿcOW LINÛ`# 6ñYGRAVEJ a' çESMAL“A,b/ å	/ B/ c/ ã	/ ñd/ á	/ ïe/ ß	/ f/ Ý	/ ëg/ Û	/ éh/ Ù	/ çi/ ×	/ åj/ Õ	/ ãk/ Ók	/ ál/ Ôš	/ ßm/ Ù/ ÀR M
    'n'   ð#  0x6E -> LATIN SMALL LETTER N
& 0'o'   / F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ B/ óEFT CURLY BRACKEG|- C- ÒVERTICAL LINEU }( D( ORIGHV ~. æCTILDN B\x7f# ×7×óCONTROL CHARACTEGG\xc4, 8ÔPCAPIT§ 4ó A WITH DIAERESIXH\xb9@ åÔSUPERSCRIPT Oä H\xb2* à* #TWh9\xcT Û” E” EACUTü (b3f è	f 5HRE, (d6, åh Oh ü (dc@ ö@ U@ Pu0385B ¨8PGREEKfµLYTIKA TONOl e0. "  0 ªEGRAVê e|: “CIRCUMFLER9\xe%#? ' ç @ · 2ç 	Ý (a8Ý +J 8xe7$ 'ß CorCEDILLAc9\xeU5<  Seš O: 
wa° 9]	�t w b? \y -a
9p“POUND SIGQ\u212œ9k¨TRADE MARK* 8xee� Y�  I|C”9l	? Ì 8u20§ jBBULLiÀ '\xbd'     ò$#  0x97 -> VULGAR FRACTION ONE HALF
    '\u2030'   3 83 ãPER MILLE SIGN) 0xf4' ) 9) õLATIN SMALL LETTER O WITH CIRCUMFLEX? 6? A? ”DIAERESIS> a> B> £BROKEN BAR% Pu20ace Ë C% AEUROÆ ö # before Mac OS 9.2.2, was SOFT HYPHEí 9I í DK í  Uí SGRAVE… 8xfb: E: ' Â y F? 'Fu202Í A0> UDAGGE#@0393  # A1! ÅGREEK CAPITAÇSGAMMAÓ Au039ü5 25 HDELT5 8j 35 9THE5 ?j 45 HLAMDj ej 55 &XIÑ a'62 P2 0xdfb —AY fSHARP µ— 5 [¡REGISTERED–‘ (xaoA\˜COPYRIGHT) Gu03aÀFÀ8SIGÀ aa¿ V=5 BIOTAÒ„DIALYTIKd0xa7A Ë ["SEQ$Gu226Y7ÄNOT EQUAL TOï b% N $ DE“ ì )xbt £MIDDLE DOTK  œ1› Ü Bò I ÑEALPHÎ b3 € B¨PLUS-MINUS„  Ñ ûBûÌLESS-THAN ORÚ  0 5� öOATER3 !xa1 � ô9YEN† F0392V âBKY ädEPSILOù Pk7 éPZk «4 è4 
3 ó3 ñ3  “ëÇBüDKAPPë Ð Ri ü&MUg m2 ë› $PH –·B÷3 Uld F 2BF (PSy GÀxBF -> GREEKõ+ CAPITAL LETTER OMEGA
    '\u03ac'   #  0xC0 -> GREEK SMAL3 öALPHA WITH TONOS> &9d> 1> s #NU2 xn p 22 ƒNOT SIGN# Vu039fU 3# “ U gOMICRO7 &a17 47 4RHOj F22483 53 åALMOST EQUAL T* F03a4* 6* ” &TAê b1 ê 73 óLEFT-POINTING DOUBLE ANGLE QUOTATION MARK¡ )xbD 8D ORIGHE Pu2026‹ ã9E pHORIZONtELLIPSIÓ0xa0, · A. ãNO-BREAK SPACEœ  :5+ W B) YUPSIL§77 C7 6CHIj 8Á D3 ¦8çE@ Eª è6153µ FB TLATIN&•IGATURE O62012 DXtEN DASHÖ 6201@D<—7BAR) £D3 I@:Fu201šDE:6 *DDk /SI¥ k 9DFk 6 	!xfhDRPDIVIS
8^ Gg/ET¡&8aœ A> /IO? {;? ‹:638e� OB &B aÊh	¢¼'3a‚ q
@  a‹Dz	< =c=w	= ;
} u;Ð9c9Eƒ@ 	€ y	bQE¡@  u«E03b2îE«3  7BET€crE¨2  'PSbŠE£1  ÀDELTA
    '\ö+u03b5'   #  0xE5 -> GREEK SMALL LETTER EPSILON
    '\u03c65 65 6PHI1 &b31 71 WGAMMA3 73 83 (ET1 91 91 )IO2 e2 A2 XÆ a0 B0 HKAPP• b3 C3 HLAMD3 c3 D3 'MU)d0 E0 N0 f0 F0 YOMICRò05 /F05 P+c[/F10 öOMEGA WITH TONOSÓ &c1n 2> 7RHO1 `/F31 8SIG`&c4d 43 (TA881 *)TH“c“F(Ê 2f *lFINAL Ð 0F0C”cúF0UúbúF3Z5F5 —	‡DIALYTIKcCFC¨ D 9¿T…  L ANDœbK o� N !xa»F�ò:SOFT HYPHEN # before Mac OS 9.2.2, was undefined
)

### Encoding table
en _ ø	=codecs.charmap_build(de$ ð)
""" Python Character MappW CB ð6 mac_iceland generated from 'MAPPINGS/VENDORS/APPLE/ICELAND.TXT' with9 � P.py.
v ±#"

import  sÓ s ÁAPIs

class  ($ . 1):
<Adef ô ñe(self,input,errors='strict'):,  Çcreturno B = , 2ingJ)o ?o *B 	o  o ú ±Incrementalê$er ç  h À final=FalseC):
  ð	return codecs.charmap_en ñ(input,self.errors, ðing_table)[0]

class IncrementalDe>  r( >cs. € Qdef d, (d ", p Ã final=False*  ­ ª @ :  F ª  ª àStreamWriter(Cù ,ª  z Dpassã  ORead9  	9 D### 4às module API

ý Ãgetregentry(7 
æ ž UInfo(±õname='mac-iceland', j !e=6 2().     iÂ: 'r=»Er/ J 	/ / svr==J# w™# ¦# @)


P[ Ping T„ J5codê2 = -`'\x00':ñ #  0x00 -> CONTROL CHARACTER= , 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 	t*  Œ9, 	n, A, 	2x0b. äB, c, C, 	r* ° D, 	2x0e. „ E, f, F, 
1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À
7x19¸1À
8x1a, À1À1À1À1À
8x1d„ àD -> CONTROL CðHARACTER
    '\x1e'
 ý #  0x1E -> CONTROL C, f, F,  ) "  X  20, RSPACEx !  1  òEXCLAMATION MARK+ "+ 2+ LQUOT) #) 3) ²NUMBER SIGNO $& 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 1"'"`7$ ƒPOSTROPH(I 8% ñLEFT PARENTHESISP +')+ 9+ ORIGH,  *, A, sASTERIS_+# B# GPLUSç ,$ C$ RCOMMA“ -  D  ³HYPHEN-MINUº .' m’FULL STOPK /$ eTSOLIDF 0" 3[¢DIGIT ZEROG 1% `% #ONt2$ Y$ #TWH 3$ T$ 3HREJ 4& T“ 3FOUk5% SK 3FIVJ 6% Q% 2SIXÜ 7$ Q$ 3EVEè8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 ML1 æLb M1 îb M1 N1 ù1 �ðO'        #  0x4ðF -> LATIN CAPITAL LETTER O
    'P'   #  0x501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 óEFT SQUARE BRACKET$\\/ IC. ãREVERSE SOLIDU¯])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, ÿrOW LINEÖ `# 6ñYGRAVEJ a' çESMALGAV b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ Ó	/ K/ l/ ÔN	/ L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ Ùp/ 7è^  ×q/ ðÕr/ ðÓs/ ð"t/ ðöu/ ðÍv/ ðËw/ ðÉx/ ðÇy/ ðÅz/ ðÀTER Z
    '{#'  ð#  0x7B -> LEFT CURLY BRACKET
% +'|- C- ÒVERTICAL LINE( }( D( ORIGHV ~. E. CTILDN B\x7f# £ F  òCONTROL CHARACTERz G\xc4,  80, °LATIN CAPIT§ õETTER A WITH DIAERESIS@ 5@ 1@ •RING ABOV­ (c7A 2A C� uCEDILLA 9> 3> E> EACUTz (d1< 4< N< 	c(d6< 5< O< 7(dc@ 6@ U@ e¼ 7@ ySMALL Lµ	ö (e0z 8: 6GRAª(e2: 9: ¤CIRCUMFLEX«ejA? 1(e3} w¨ñ 	«e¢„â:  e ›?  žež©<  œ(e8ï Ã: 
¦a: 9Ñ	ï t ¦ b? Ð? ¦d> Í	> IÕ
—9É: 
ñ et Ç: ñ  -9Ê? ñ fˆ9È	> BfÑ9Â@	+fˆ9Â: 	+fƒ9Â: +fõ9Â? +ˆ9Â> 	ÂfÓÂ+
+�9½: 
+Àx9E -> LATINð SMALL LETTER U WITH CIRCUMFLEX
    '\xfc'
 ÿ #  0x9F -> LATIN? ”DIAERESIS> 'dd> &A0> eCAPITA Y TACUTE< (b0< 1< ´DEGREE SIGN& (a2& 2& JCENT$ 3$ 3$ ZPOUND% 7% 4% xSECTION' Au202r  A5' dBULLET‘ (b6H 6! xPILCROWH 8xdf' 7' X eSHARP O(ae5 85 ›REGISTEREÎ 9* 9* ‰COPYRIGH8u21Ð A) ©TRADE MARK² (b4S B* °0 ACr (a8' C' Au226ÝED$ ÄNOT EQUAL TOK cKE' $>A4d} ®2 OpTSTROK= Au221`– B­„INFINITY’ 'b1Ý B”¨PLUS-MINUS. ã 0M ˜ÌLESS-THAN ORì  0 5\ 0 ¤GREATER3 !xa1  ›B²)YE®)xb# ®[MICRO« 0ÓB²ð ARTIAL DIFFEREN  'ª º°N-ARY SUMMA1* 0æ* ¯* dPRODUC3Fu03cB­ èKd&PIX &2b,´ƒINTEGRAL# 0xaa! ­ôFEMININE ORDINAL INDICATOR5 b5 »oMASCUL6 	Au03amæ Í¾ tDMEGAk eÛBÛ	–ÙfÙBÙ	0 ×!xb„C×°VERTED QUES²îœ aß1 å#IN1 REXCLAæ
4 'Cï Òª 8`(Câ¦SQUARE ROO&19�CÕô	é FÀCHOOK¶ Au224$_ ë]ALMOSWAu220~* ð„INCREMEN‡ !xaaåñLEFT-POINTING DOUBLE ANGLE QUOTú	bD ÿ€E  p­ pHORIZON?WELLIPpaH· ð	NO-BREAK SPACE
    '\xc0 '  ð#  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
1 X'\xc3< C< ETILD< (d5< D< Ox < Pu0152> ´ E<  ”IGATURE Op  4 ® 4 F4 ~SMALL L2 62012  D02 sEN DASH Uu2014ˆ !D1" M" c" 2" ÷LEFT DOUBLE QUOTATION MARKW d5 35 ORIGH6 86 46 k OSINGk 	95 55 k 6 	0xf74 !  L D66 PDIVISÉ ESIGNÉ 05ca* ( 7( dLOZENG–0xff  J 8" ~–|Y”DIAERESIS` 7017ó 9> ¼@ 7204ÀA@ AFRAC‘)SLéaÇ%WEURO í 8xd0Ë $ET@)xf3 	þ 1 (ded ù1DTHOR†)xf5 ú3 €—Eû	™ WEACUTÑbE¤MIDDLE DOT¸6201Ep_LOW-9Ê NEG6 3f6 ™PER MILLEÀcSô ô M	£CIRCUMFLEXÖ xìA A EÎA  1ÞE/‚ 	x(cb< I< } K!xcI½ K@ 
	.Gù Iù 
¸ Óx Z< 	5 BEw} ù Ù� „9@ 	ù d < �Ä	ù dz< –x < ù 2uf8=ÙF¤¤Apple logo”dÕF�_À CAPITAL LETðTER O WITH GRAVE
    '\xda'
 ð #  0xF2 -> LATIN CAPITAL LET< U< FACUT< b< 3< ¥CIRCUMFLEX} 9A 4A ¹ Pu0131> ¹ 5< ESMAL· “DOTLESS Is Vu02c67 67 „MODIFIERë ¨ v ACCENT< &dc< 7< m ETILD af$  R8& gMACRONG 8# º 9! 5BRE“Au02d  A  yDOT ABO$ ¹$ B$ IRING% !xbg Š C% wCEDILLA‹ d‹ D" qDOUBLE é òu E. fOGONEKO &c7O F!  CAú ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ñ) mac_latin2 generated from 'MAPPINGS/VENDORS/MICSFT/MAC/÷°2.TXT' with= “ ò.py.

Written by Marc-Andre Lemburg (mal@l ð.com).

(c) Copyright CNRI, All R û	s Reserved. NO WARRANTY.6 ð2000 Guido van Rossum.
±#"

import § sdÁAPIs

class  ($ . 1):
³Adef …ñe(self,input,errors='strict'):,  &creturno ©B = , 4ing·C  o Ðo *B 	o  o ú ±Incremental{$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� Dòª  €  ª ø ª (@ ä ª  Qª `Stream1er(N,[ ¤ 5pas‡ ORead9  	9  4�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±¢name='mac-"%', i !e=5 2().     ik: 'r=Ô~/ J 	/ é/ sur<=I# cwriter# ÀWriter,
    ó
)


### Decoding Table

d  _t ð  = (
    '\x00'
 õ #  0x00 -> NULL 1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”1”ÆILE SEPARATOFdo ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦Ý!  ›aEXCLAMÓC MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSANt1"'"u“APOSTROPHø(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þP3[“DIGIT ZER¡ø% `% òï$ à2 -> DIGIT TWO€
    '3'   ò#  0x33 -> DIGIT THREE& 4& 4& BFOUR% 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ BEVEN& 8& 8& REIGHT& 9& 9& 3NIN• :% A% CCOLOk ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, F, ÒQUESTION MARK@(  40( ÃCOMMERCIAL A4A( 1( òLATIN CAPITAL LETTER AY B1 21 B1 C1 vb C1 D1 �1 D1 E1 �1 F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 Ob P1 51 P1 Q1 Q1 R1 ;S1 Sb T1 ÔU1 Ub V1 V1 W1 W1 X1 Y1 Yb Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ <5ãREVERSE SOLIDU¯])  * R¦Y ^/ óCIRCUMFLEX ACCEN… _, ÿEOW Lß`# À#  0x60 -> GðRAVE ACCENT
    'a'   ò#  0x61 -> LATIN SMALL LETTER A/ b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ E/ f/ 6/ F/ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ ðQ/ r/ ðR/ s/ ðS/ t/ ð¬u/ ðU^ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðóEFT CURLY BRACKEG|- îÃVERTICAL LIN0}( çORIGHV ~. æCTILDN 3\x7�i7×UDELET! "c4D ! 8ÉPCAPITœ Œã WITH DIAERESIM`\u0100B @ Ú@ SMACROu= 1= èA{ 	; 0xc99 "  x ôx E= 5ACUô  ´ ö < < y SOGONE¶H\xd6y = Oy 1#xd }  @ U@ e2ù 1» ÷ 5¼ z <: 	õ  2· ; Hµ Cµ àCARON
    '\xe04'  ð #  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
3 p'\u010d@ > B> C> WCARON: 6: C: eCAPITAz < WACUTE< 7< D< 	´ :  0xe98 "  ° E: E° t 7< : F: ° Z< ax < &90< 	° : &0e: 1: v Dv b!xešì &92< 	v I: ì &0fv 3: t  Vu0112: 4: ° b9MAC&13= 5= 	± ; N&96; x „DOT ABOVR!xfy ,7@ 	{ O,1Œ/98: µ x ~/99> x £CIRCUMFLEX	!xfõ · ½? ½0xf5n> ½> FTILD/Ï: ½	/U/< »©Ñ ]b² < ½: 0xfc8 ° ½° (Pu2020@ x A¿dDAGGER‡b _ A¦§DEGREE SIGò&18G �û dOGONEKc a¡A“XPOUNDb !xaŠˆ ~xSECTION'  Ð ¥AhdBULLETm bWANxPILCROWH !xd%o 5dSHARP 2!xaÐ5 0›REGISTEREÎ p* ˜COPYRIGHTˆ Gu212Ð ©TRADE MARK* 1011U Êò­�¼Ž ó)!26
_ ÝÃNOT EQUAL TO_Au012Î' ÈG>wCEDILLA< A< ÊE×	Ä  y ³Ð#  0xB0 -> LAð,TIN SMALL LETTER I WITH OGONEK
    '\u012a'   #  0xB1 -> LA; lCAPITA= dMACRON= F2264= 2= ÷ESS-THAN OR EQUAL TO0 50 30 GREATER3 F012b3 43   Û 
ž F0136; 5; Û KvCEDILLA¬ &02> 6> ðPARTIAL DIFFEREN / &11/ 7/ ÖN-ARY SUMMATI57014Y 8* Ò  L• dSTROKEe 70139; Ò = Ò F013c£ A> 	K< d< B< z A&F013e< C< x : 9: D: v HACUT,ÙE< v : 4¦F: v N£f4v&C0> 	x < 3ð C�> ¶ !xaÜÉCŒwNOT SIG¯1C¶SQUARE ROOTe4ÕCrƒ  Vu0147¿ q< Cë72207o„INCREMENš !xaýã dñLEFT-POINTING DOUBLE ANGLE QUOTyD MARð)xbD ~ORIGHE Gu202­ ˆpHORIZON2ƒELLIPSISQ0xa0· x×NO-BREAK SPAC³ 48+ ŒCe;>1015e : c³O³(0!xdô¦ lC GTILD¹ 5ýCl: }   :¿À sC 
è62016DrsEN DASH‚Fu201ÓDX,EM" � D> [RL W DPL6 æD` EFª· k 
D[k (SI6 ÀON MARK
    p'\xf7'  ð
#  0xD6 -> DIVISION SIGN
 p'\u25ca* ( 7( tLOZENGE" F014d" 8" õATIN SMALL LETTER O WITH MACRO] F0154; 9; eCAPITA= R= GACUTw &55< A< 	w : 8: B: v 'CA² F2039< C< ñSINGLE LEFT-POINTING A `QUOTATSDMARK17203SDD ORIGHE 7015‰ EE Lvÿ 	Ã F0156Ã F: ÿ dEDILLA½ 1015:&E0> wC< %60z &E1< z Sï	¶ 62015 E2< y_OW-9 k&1er 36 @DOUB¯6 F01616 46 \ ¦ 7015¦ 5: â Ñbv ’v : !xc® "  ”¤v AX< Fu016ƒE¾< T< 	”6016ƒE¿	:  !xc2² ½v Iv ² 7> î ¿Z< ² 7¿d : 6Úµ: ² Uv 	è0xd3Ùï ­= %ï !xdŸ< ¯< ¦CIRCUMFLEX²6XF²¸  /F±= Rú4BOV¥!xd4½ F¶6	ù  } f7èF¼< 	^{ Fu017mFÅtA ‚ 7Z‚ Î‚ A 2Ã Ó„ UOGONE'10177~ Ö~ 	; !xd!wÕÀATIN CAPITALð LETTER Y WITH ACUTE
    '\xfd'
 ÿ #  0xF9 -> LATIN SMALL: Pu0137< : A: Kt sCEDILLAv Vu017b< B< eCAPITAx Z> „DOT ABOV¶ Vu0141@ C@ L@ WSTROK= &7c= D= 	ó { &22> E> » G{ ù '2c5F> óCARON
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð2 mac_roman generated from 'MAPPINGS/VENDORS/APPLE/ROMAN.TXT' with7 Œ P.py.
r ±#"

import  sÏ o ÁAPIs

class  ($ . 1):
Adef ð ñe(self,input,errors='strict'):,  ³creturno .B = , 4ing"C  o ;o *B 	o  o ú ±Incrementalæ$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� D]ª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  Ÿ�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±¡name='mac-�%', h !e=4 2().     ij: 'r=Ó}/ J 	/ è/ str;=H# w—# ¤# ")
[  –Tí
~ è2 = +P'\x00s ¦!007ñONTROL CHARACTER= , , 1, Ë, 2, 3„ 3, 4, 4, 5, 5, 6, 6, À\x07'     # ð 0x07 -> CONTROL CHARACTER
    '\x08'
 0 # , 8, 	t*  , 9, 	n, A, 	2x0b. „ B, c, C, 	r* ° D, 	2x0e. „ E, f, F, 
'10, /10, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, À1À1À
8x19X À
8x1a, À1À1À1À1À
8x1d„ À1À1À1À1À	 �  D2ÀRSPACE@!  ´òEXCLAMATION MARK+ "+ ³LQUOT) #) °²NUMBER SIGNO $& ªXDOLLA& %& ¤wPERCENTM &' Ÿ‘AMPERSANDq 1"'"(—“APOSTROPH(I �ñLEFT PARENTHESISP +')+ �ORIGH,  *, �sASTERIS_+# †GPLUSç ,$ ~2MMA“ -  r³HYPHEN-MINUº .' m’FULL STOPK /$ eTSOLIDF P3[¢DIGIT ZEROG % `% #ONt	$ Y$ #TWH $ T$ 3HREJ û& T“ 3FOU3ô% SK 3FIVJ í% Q% 2SIXÜ å$ Q$ 3EVEèß& R& E-L Ù& À 0x39 -> DIGð IT NINE
    ':'   ò#  0x3A -> COLON  ;  B  GSEMI$ <$ C$ ÓLESS-THAN SIGM =) D) gEQUALS& >& E& |GREATERR ?, F, ÒQUESTION MARKÇ @(  40( ÒCOMMERCIAL AT( A( 1( òLATIN CAPITAL LETTER A1 B1 21 B1 C1 31 C1 D1 41 D1 E1 51 F1 61 Fb G1 71 G1 H1 81 H1 I1 91 I1 J1 È¹J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 PO1 þ1 Ob P1 51 P1 Q1 Q1 R1 R1 S1 S1 T1 ÔU1 Ub V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ 75ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿEOW Lß`# 6ñYGRAVEJ a' çLSMALõb/ å	/ óc/ ã	/ ñd/ á	/ ïe/ ß/ ÀER E
    'f'  ð#  0x66 -> LATIN SMALL LETTER F
' 0'g'   / 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ A/ J/ k/ B/ K/ l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðZ/ {/ ðóEFT CURLY BRACKEG|- îÒVERTICAL LINEU }( çORIGHV ~. æCTILDN B\x7f# O7×óCONTROL CHARACTEGG\xc4, 8ÔPCAPIT§ ¬ó A WITH DIAERESIXH\xc5@ å@ •RING ABOV­ (c7A ÷A C� rCEDILLA9H\xc9> > E> EACUTz (d1< < N< 	c(d6<  < O< 7(dc@ 1@ U@ e¼ Bµ	ö (e0z M: 6GRAª(e2: X: “CIRCUMFLE—9\xejh? 1(e3} wR> 	«e¢„Œ :  e ›?  ð C WITH CEDILLA
     '\xe9'
 ð #  0x8E -> LATIN SMALL LETTER E WITH ACUTE
0  : 8: F: FGRAV: a: /90: ¥CIRCUMFLEXy b? 1? •DIAERESIS> d> 2> Iñ c: 3: 
ñ e: 4: ñ  f? 5? ñ (f1> 6> Nñ ETILD¨(f3: 7: O: 	(f2: 8: 	+(f4: 9: +(f6? A? +5> B> 
+	ÓC: U+�/9D: 
+	»t + 	ÏÀ? +Pu2020-8AÄdDAGGERhb  YA¦´DEGREE SIGN& a)AŽJCENT$ ‡AxZPOUND% 7Ž o cxSECTION'  · r · KdBULLET‘ bAA.xPILCROWH (xd“AeSHARP {aA›REGISTEREÎ A‰COPYRIGHGu212Ð ð©TRADE MARK² bYAÜ³0 ACr aÖAÉü!26ÝE³ÄNOT EQUAL TOK cK eCAPITA]Aqd} “2 sTSTROK= Au221`– B’„INFINITY’ bB”¨PLUS-MINUS.Au2260M ˜ÌLESS-THAN ORì  0 <0 ¤GREATER3 !xa1 ²B²)YE®)xb# ®[MICRO« 0B²ð ARTIAL DIFFEREN ð
    '\u2211'   ò#  0xB7 -> N-ARY SUMMATION
    '\u220f'   * 8* tPRODUCT( F03c0( 9( ôGREEK SMALL LETTER PI0 F222b0 A0 ƒINTEGRAL# 0xaa! { B# ôFEMININE ORDINAL INDICATOR5 b5 C5 oMASCUL6 	Pu03a9m æ D6 ¾ eCAPITAÀ TOMEGAk  e63   E5 ZLATINó $AE0 (f80 F0 ÅO WITH STROK; b„k  C0; ÐINVERTED QUES²T MARKl 'a1l )C11 REXCLAæ
4 c4 24 wNOT SIG1`( C3# ¦SQUARE ROO0192K & 4&  Fé 4HOO¶ Au224$9 59 ó ALMOST EQUAL TOà  —~* 6* „INCREMEN‡ !xaa5åñLEFT-POINTING DOUBLE ANGLE QUOTú	bD ÿORIGHE Gu202­ pHORIZON[ƒELLIPSISÛ !xaH· ÕNO-BREAK SPACq)  gµAiFGRAV< 3¡< '< 	ETILD< (d5< -< Ê< Gu0154´ ”IGATURE Op  4 ® ì82 62012 D/sEN DASHePu2014Æ T D ,EM" "  >5/ W dW  /6 ÷D0 EFzš k ³D,k /SI6 0xf7Ÿ øD8ŠDIVISIONé&5céD<TOZENG–(xf“D	ñY|fDIAEREåGu017ó > 1@ 7204À%AFRAC)SLéaÇ%JEUROí '03KE ò0)Gu2031D –E 1fb0¸tTêFG6fb0PDFVàu2021'   #  0xðE0 -> DOUBLE DAGGER
    '\xb7'
 € #  0xE1( @MIDD( #OT% Pu201a' % 2% ÷SINGLE LOW-9 QUOTATION MARK6 e6 36 ƒ 6 &306 46 ãPER MILLE SIGN_ 0xc2'  º 5) õLATIN CAPITAL LETTER A WITH CIRCUMFLEXA Ô A 6A EA 1‚ 7A ‚ UACUTE} b< 8< } •DIAERESIS@ 8@ 9@ FGRAV| d< A< Iù 
¸ Ó5B< v f} CA ù c@ D@ 	ù (d3< E< Où  (d4< F< ù Auf8fû EF’¤Apple logo×dÕF�Õ¢ 
Þ ÐF¦< UÞ �F¬< 	Þ 7xd9F·A 	¹ Au013JÊESMALÈ“DOTLESS I,Pu02c6u 7 À„MODIFIERü¨ e ACCENÒ102dH< »m ETILD)a±íF¥TMACRO„Au02dˆG †5BREj     jyDOT ABO$ ¹$ RIRING% !xbg Š 6vCEDILLAd×G nÀ ò. 
UOGONE½102c! ï CAú ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð8 mac_romanian generated from 'MAPPINGS/VENDORS/APPLE/ROMANIAN.TXT' with: ’ P.py.
x ±#"

import  sÕ u ÁAPIs

class  ($ . 1):
sAdef ö ñe(self,input,errors='strict'):,  bcreturno .B = , 4ing(C  o Ao Àeturn codecsñ.charmap_decode(input,errors, ðing_table)

class IncrementalEn6  r( >cs. Á):
    def e, r(self, h Ã final=False*  . sreturn U ¢ @ :  F .§  § ?[0]ª  Dà ª  €  ª ø eª '@ ª  ª óStreamWriter(Codec,ÿ  ¤ Dpassã  ORead9  	9 2###�ðings module API

ý Ãgetregentry(7 
�ž QInfo(Û ±õname='mac-romanian', Ÿ!e=7 2().     im: .r=f/ J 	/ ë/ swr>=K# wš# §# @)


Q[ Ping T, K5codë2 = .`'\x00'4ñ #  0x00 -> CONTROL CHARACTER= , 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 	t*  Œ9, 	n, A, 	2x0b. äB, c, C, 	r* ° D, 	2x0e. „ E, f, F, 
1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À
7x19¸1À
3x1a, À  0x1A -> COðNTROL CHARACTER
    '\x1b'
 ï #  0x1B -> CO, c, C, d, D, e, E, f, F,  ) "  Ü  20, RSPACEü !  1  òEXCLAMATION MARK+ "+ 2+ LQUOT) #) 3) ²NUMBER SIGNO $& 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 1"'"ä7$ ƒPOSTROPH(I 8% ñLEFT PARENTHESISP +')+ 9+ ORIGH,  *, A, sASTERIS_+# †GPLUSç ,$ ~2MMA“ -  r³HYPHEN-MINUº .' m’FULL STOPK /$ eTSOLIDF 0" 3[¢DIGIT ZEROG 1% `% #ONt2$ Y$ #TWH 3$ T$ 3HREJ 4& T“ 3FOUï5% SK 3FIVJ 6% Q% 2SIXÜ 7$ Q$ 3EVEè8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4YÒCOMMERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 ML1 À 0x4C -> LATðIN CAPITAL LETTER L
    'M'   î#  0x4D -> LAT1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 óEFT SQUARE BRACKET$\\/ Ü 5C. ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿrOW LINEÖ `# 6ñYGRAVEJ a' çESMALÚAV b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ Ó�	/ K/ l/ Ô°	/ ßm/ Ù/  Ýn/ Ù/  Ûo/ Ü¼ Ùp/ 7è^  ×q/ ðÕr/ ðÓs/ ð"t/ ðöu/ ðÍv/ ðËw/ ðÀR W
    'x'   ð#  0x78 -> LATIN SMALL LETTER X
& 0'y'   / 9/ Y/ z/ A/ Z/ {/ B/ òEFT CURLY BRACKET- |- C- ÒVERTICAL LINE( }( D( ORIGHV ~. E. CTILDN B\x7f# F  òCONTROL CHARACTERz G\xc4,  80, \PCAPIT§ ^õA WITH DIAERESIS@ 5@ 1@ •RING ABOV­ (c7A 2A C� uCEDILLA 9> 3> E> EACUTz (d1< 4< N< 	c(d6< 5< O< 7(dc@ 6@ U@ e¼ 7@ 	µ	ö (e0z M: 6GRAª(e2: X: “CIRCUMFLE—9\xejh? 1(e3} w> 	«e¢„â+ e ›?  žež©<  œ(e8ï Ã: 
¦a: 9Ñ	ï t ¦ b? Ð? ¦d> Í	> IÕ
—9É: 
ñ et Ç: ñ  -9Ê? ñ fˆ9È	> BfÑ9Â@	+fˆ9Â: 	+fƒ9Â: +fõ9Â? +ˆ9Â> àTILDE
    '\xf0a'  ð#  0x9C -> LATIN SMALL LETTER U WITH ACUTE
/ X'\xf9: D: FGRAV: b: E: ¥CIRCUMFLEXy c? F? “DIAERESIS> Pu2020@ ñ  A0> cDAGGER! !xb "  ! 1! ¤EGREE SIGN&  a2E & 2& JCENT$ 3$ 3$ ZPOUND% 7% 4% xSECTION'  · r – 5' dBULLET‘ (b6H 6! xPILCROWH 8xdf' 7' ð dSHARP 48xae5 85 ›REGISTEREÎ  A9* ‰COPYRIGHGu212Ð A) ©TRADE MARK² (b4} B* ˆ0 ACr (a8' Éü!26ÝE³ÃNOT EQUAL TOK Gu010œ  eCAPITAA5BREÜAu021‰ c �< S< ôCOMMA BELOW # for Unicode 3.0 and laterš 1221‹^ B½ƒINFINITY# 7xb1B¿¨PLUS-MINUSYAu226[M ÃÍLESS-THAN OR@2265\ 0 ÏGREATER3 !xa1 &BÝ)YEÙ)xb# Ù[MICRO« ’BÝð ARTIAL DIFFEREN Au221ª å°N-ARY SUMMA\* 0* Ú* dPRODUC^Fu03c:BØ K'&PIX 2åX ßƒINTEGRAL# (xazBØö
FEMININE ORDINAL INDICATO�	5 æoMASCUL6 	Au03a˜Ž ø¾ •SOMEGA   À5 	o 	: "!xb¯RC°VERTED QUESÝDÇ !xa
1 #IN1 REXCLA
4 bC (  c‹C¦SQUARE ROO7&19JC n FCHOOK¶ Fu224GC^ALMOS­1220ú‰ „INCREMEN‡ !xaŒà7 -> LEFT-POINðTING DOUBLE ANGLE QUOTATION MARK
    '\xbb'
 ÿ #  0xC8 -> RIGHT-POINE Pu2026G E 9E ôHORIZONTAL ELLIPSISs  a0,  s A. äNO-BREAK SPACE) c) B)  LATIN CAPIZ öLETTER A WITH GRAV< 3e C< ETILD< (d5< D< Ox < Pu0152> E<  ”IGATURE Op  4 ® 4 F4 ~SMALL L2 62012  D02 sEN DASH<Uu2014ˆ !D1" M" c" 2" DLEFT5/ W d5 35 /6 86 46 k /SIš k 95 55 k 6 	0xf74 ] D66 PDIVISøESIGN 05ca* t D7( dLOZENG–0xff  J ~–|YfDIAEREåGu017ó > ¼@ 7204À%AFRACÀ)SLéaÇ%YEURO í '03KE ‡ë)Gu2031D –E 7021E VTVôCOMMA BELOW # for Unicode 3.0 and laterÔ1021ÎÔH\ )@2021\ Er^cDAGGER„ (xb€Ex£MIDDLE DOT%  ÛE{L_LOW-9« 6 eƒ |ƒ 6 3G¹ |˜PER MILLE%!xc¸ðEp²n£CIRCUMFLEXÖ xQA {A EÝA bA ”ðEACUT®cú< ®p} °!xc®@ °@ 
l< ¬ù Iù 
¸ Ó< ¿< 	v §À0xEC -> LATIðN CAPITAL LETTER I WITH DIAERESIS
    '\xcc'
 ÿ #  0xED -> LATI@ TGRAVE< (d3< E< O| FACUT< 4< F< £CIRCUMFLEX} Puf8ffC ¹  F0A £Apple logo% 0xd2#  Þ  F1% Þ ¢ 
Þ a< 2< UÞ b< 3< Þ 8xd9A 4A ¹ Pu0131> 5< ESMAL“DOTLESS I,Vu02c67 67 „MODIFIERE¨ v ACCENT< dHs 7< m ETILDôa±Ž8& gMACRONG 8ƒ 9! 5BREq2u02g A  yDOT ABO$ ¹$ B$ IRING% !xbg Š C% wCEDILLA‹ d‹ qDOUBLE Ç òu 
fOGONEKO &c7O ï CAú ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð6 mac_turkish generated from 'MAPPINGS/VENDORS/APPLE/TURKISH.TXT' with9 � P.py.
v ±#"

import  sÓ s ÁAPIs

class  ($ . 1):
"Adef ô ñe(self,input,errors='strict'):,  ¯creturno B = , 4ing&C  o ?o *B 	o  o ú ±Incrementalê$er ç  ¤ ½ ¤  h Ã final=False*  Y.S4[0]¤� Daª  €  ª ø ª (@ ä ª  Qª ÑStreamWriter(N,[ ¤ 5pas‡ ORead9  	9  £�ðings module API

ý Ãgetregentry(7 
¡ž QInfo( ±£name='mac-‘%', j !e=6 2().    ð ,
        increòmentalencoder=Incre E 3,
  i -de/ D / �streamreaX S R # rwriter=# W # �)


### [ ±ing Table

~ Ping_t A = (¤ a'\x00'­ õ#  0x00 -> CONTROL CHARACTER, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 	t* "  Œ9, 	n, A, 	2x0b. X B, c, C, 	r* ° D, 	2x0e. „ E, f, F, 
1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À1À
7x19¸1À
8x1a, À1À1À1À1À
8x1d„ À1À1À1À1À	 �  D2ÀRSPACEt!  ´òEXCLAMATION MARK+ "+ ³LQUOT) #) °²NUMBER SIGNO $& ªXDOLLA& %& ¤wPERCENTM &' Ÿ‘AMPERSANDq 1"'"ˆ—“APOSTROPH(I �ñLEFT PARENTHESISP +')+ �ORIGH,  *, �rASTERIS_À'+'        #ð  0x2B -> PLUS SIGN
    ','   #$ C$ RCOMMA  -  D  ÂHYPHEN-MINUS' .' E' ’FULL STOP$ /$ F$ TSOLIDF 0"  30" ¢DIGIT ZEROG 1% 1% 2ONE$ 2$ 2$ #TWH 3$ 3$ 3HREJ 4& 4& BFOURo 5% 5% #IVJ 6% 6% 2SIXI 7$ 7$ 3EVE´8& 8& REIGHTL 9& 9& $NI):% A% CCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SÒQUESTION MARK@( 4Y æƒERCIAL A4A( \óLATIN CAPITAL LETTER B1 i1 BŠ C1 v1 C1 D1 �1 D1 E1 �1 ™F1 ™1 Fb G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 CL1 æLb M1 îb M1 N1 ù1 �O1 þ1 óP1 51 ³Q1 QÄ R1 ;S1 jT1 ÔU1 UÄ V1 V1 W1 W1 X1 Y1 Yb ðZ'        #  0x5ðA -> LATIN CAPITAL LETTER Z
    '['   q#  0x5B1 òEFT SQUARE BRACKET. $\\/ . C. ò REVERSE SOLIDUS* ])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, F, ‚LOW LINE~ `#  60# YGRAVEJ a' 1' .ESMAL,AV b/ 2/ B/ c/ 3/ C/ d/ 4/ D/ e/ 5/ f/ 6/ F^ g/ 7/ G/ h/ 8/ H/ i/ 9/ I/ j/ Õ	§J/ k/ Ó	/ K/ l/ Ô L/ m/ Ù/  M/ n/ Ù/  N/ o/ Ü¼ O/ p/ 7è^  P/ q/ ðQ/ r/ ðR/ s/ ð"t/ ðöu/ ðU� v/ ðV/ w/ ðW/ x/ ðX/ y/ ðY/ z/ ðÃ{/ ð ÃZCURLYÂ|- î`VERTICB}( çRÀV  ~. æCTILD~3\x7�7×óCONTROL CHARACTEGB\xc4O , 8ÔÃó A WITH DIAERESIXH\xc5@ å@ •RING ABOV­ (c7A ÷A C� cCEDILL%H\xc9> > E> EACUTz (d1< < N< 	c"d6< À#  0x85 -> Lð ATIN CAPITAL LETTER O WITH DIAERESIS
    '\xdc'
 ß #  0x86 -> L@ U@ (e1@ 7@ ESMAL~ A> TACUTEz (e0: 8: FGRAV: 2: 9: ¥CIRCUMFLEXy 4? A? 1(e3> B> FTILD· 5: C: ‡RING ABOö 7? D? CjuCEDILLAó 9< E< E< 
¦8: F: 
¦a: /90: ¦ b? 1? ¦d> 2> Iñ /93: 
ñ et 4: ñ  f? 5? ñ fˆ9È	ˆNñ 	—fÑ9Â@	fˆ9Â: 	+fƒ9Â: +(f6+Â? +ˆ9Â> 
+	ÓÂ+
+�9½: 
+	»: + 	ÏÀ? +Au202¦AÄdDAGGERYb  ?A¦´DEGREE SIGN& a)AŽJCENT$ ‡AxZPOUND% AcxSECTION'  · r · KdBULLET‘ bAA.xPILCROWH (xd“AeSHARP RaA›REGISTEREÎ A‰COPYRIGHGu212Ð ð¢TRADE MARK² À    '\xb4'  ð   #  0xAB -> ACUTE ACCENT
    '\xa8'
 ' C' “DIAERESIS$ Pu2260& K D$ ÃNOT EQUAL TO' 0xc6% r E' ôLATIN CAPITAL LETTER AE2 d} F2 ÄO WITH STROK= Pu221eq –  B0= „INFINITY`  b1! ’  B1# ó PLUS-MINUS SIGN*  ã 4, M 2* ÌLESS-THAN ORì  0 50 30 GREATER3 !xa1 � 43 8YEN† )xb# 5# XMICRO% Vu2202{ 6% ðPARTIAL DIFFEREN Ú 1Ú 7/ çN-ARY SUMMATIO&0fY 8* dPRODUC3Fu03c B9( ¥GREEK SMALæ&PI‚ &2bX A0 ƒINTEGRAL# 0xaa! ­ôFEMININE ORDINAL INDICATOR5 b5 »oMASCUL6 	Pu03a9m Í¾ ¦TOMEGAk eÛBÛ	ó ÙfÙBÙ	0 ×!xb„C×°VERTED QUES²T MARKœ aß1 å#IN1 REXCLAæ
4 c4 ï Ò
1`(Câ¦SQUARE ROO&19�CÕô	é FÀ4HOO¶ Au224$_ ë]ALMOSW ð~* ðhINCREMÆaÐ åñLEFT-POINTING DOUBLE ANGLE QUOTú	bD ÿORIGHE Gu202­ pHORIZONVELLIPY!xaH· ÔNO-BREAK SPACìxq)  gµAiFGRAV< 3ì'< 	ETILD< d‘C-< Ê< Gu0154´ ”IGATURE Op  4 ® ì82 62012 D/sEN DASH Fu201ÛD ,EM" v D >5/ W dY5  /6 ÷D0oEFT SIš k ³D,k 6 À
    '\xf7' ð    #  0xD6 -> DIVISION SIGN
 …'\u25ca'( 7( sLOZENGE" 0xff  J 8" óATIN SMALL LETTER Y WITH DIAERESIS> Pu0178@ ˆ 9> oCAPITA@ &1e@ A@ G€ DBREVº Au011¼ | B< 	º : &30v C: ¶ Iv xDOT ABOz &31@ D@ 	z –DOTLESS I-5í E7 w Sw wCEDILLA> ï F> 	u < 6202±  E0< ÓDOUBLE DAGGERd 0xb7×  E1( @MIDD( #OT% Fu201T E2% ðSINGLE LOW-9 QUOTATŠGMARK6 ý  E36 ƒ 6 ª E46 ˜PER MILLEé8xc2º 5) LÇ\A\“IRCUMFLEX  x(û RA EA bA k‚ DACUTË8xcb¾ …¾ } ‡!xc…| ‡@ 5GRAÍ8xcd| ƒ
¸ Óx ƒ¸ < CvÓA Š€8xcc½ Š� 	ù (d3< �Oò	ù (d4< �x < ù 2uf8y½F’¤Apple logo”dÕF�”f 
Þ ¤ZF¦< UÞ �F¬< 	Þ 7xd9F·A 	¹ Fuf8a�FÊ£undefined1Pu02c6c ?®„MODIFIER³– e ACCENÀ102d6< ©CETILD“ašF“UMACRO[102dvG t
Ÿ2  XI!2d§$ @IRINGn!xbg ÊÀxFC -> CEDILðLA
    '\u02dd'   #  0xFD -> DOUBLE ACUT GCENT. b. E. fOGONEK! &c7! F! óCARON
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python 'mbcs' C7 ò for Windows


Cloned by Mark Hammond (mh
 ó$@skippinet.com.au) from ascii.py,
which was writtenM òc-Andre Lemburg (mal@l  L ð).

(c) Copyright CNRI, All R ð
s Reserved. NO WARRANTY.
Û ó
# Import them explicitly to cause an# ó Error
# on non-ý ‘ systems
Ð S" iT  0_u1e,  ^1e
#?ÀIncrementalDvGer,  ½  C...
R ` ÝˆRAPIs
Ú2e =f s b

def r �(input, eÄ Ás='strict'):Jbreturn< 0 ï, True)

class¤  (˜ .¾ b  Š – s(self, � ³final=False*  )� 6 0  = .Å O)[0]’  J’ ‡Bufferedš " p !_b" _ø B _ ÄStreamWriterY  K « C  
C LReadC  C x C  îO ò ings module APIâÃgetregentry(G A–)QInfo(î bRname=Ð, c "e=  † =  i¾2 'r=e½] / J 	/ ”^ ssr0=l)#  .#er# £# 
»?oemº?"""K5oem  ý H e ‘q  ; /  d � Ê ¾ ÿP u 
»[þ B àencode

class øStreamReader(codecs. �):
    de r = oem_ ó

### encodings module API

def getregentry(F preturn K @cs.Cn QInfo(c  g µname='oem', b "e=  … =  ²incremental2 6r=I E® /er/ J 	/ Dö / s.r.='R # cwriter# W # ñ)
""" Python Character Mapping ð for PalmOS 3.5.

B ñten by Sjoerd Mullender (s ð@acm.org); based on iso8859_15.py.
{ £#"

import‡Çx ²APIs

classŠ  Å Ü[ó(self,input,errors='strict',  Ô
õƒcharmap_B = , ±ing_table)
 o ›o )B 	o  o ù / ç  ¤ ½ e¤  h Ã final=False*  Y.S4[0]£� ªª   €  ª ø ª (@ ä ª  Qª + Æ1er(M, ¤ 5pas† Ÿ9   	9 –Enpalmos™– 2().æ ç$e=   ©�@ ›T• Ûñ¥2 = ¾`'\x00'ø ñ #  0x00 -> NULLÆ  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— ð b'     #  0x0B ð-> VERTICAL TABULATION
    '\x0c'
 ó #  0x0C -> FORM FEED$ r"  $ D$ æCARRIAGE RETURN e, N E* “SHIFT OUTN 8x0f$ F$ IG '10#  10# ôDATA LINK ESCAPEN (11+ 1+ öEVICE CONTROL ON- 2- 2-  5TWOZ 3- 3- 6HRE\ 4/ 4/  EFOUR] 5. 5. öNEGATIVE ACKNOWLEDG] 6/ ö6 -> SYNCHRONOUS IDL+ 7+ 7+ õ
END OF TRANSMISSION BLOCKŽ 84 84 eCANCEL! 9! 9! U eMEDIUM( a( A( –SUBSTITUT¢ b% B% Ô”1”ÆILE SEPARATOFdJ ™_GROUP*  ™1™oRECORD+   1 LUNIT)  {  2¦CSPACè !  ›aEXCLAM�C MAR�"+ ™LQUOT) #) •£NUMBER SIG@$& ŒHOLLA& %& „wPERCENTM &' |‚AMPERSAN"1"'"Cu“APOSTROPH(I fòLEFT PARENTHESISH)+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF þP3[“DIGIT ZER¡ø% `% òï$ Y$ éæ$ T$ àÝ& T“ ×Ô% SK 3FIVÊ% Q% 2SIX#Ã$ Q$ 3EVEèµ& R& E-L º& M& $NI:”3F4COL(;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, ÐF -> QUESTIONÐ MARK
    '@'   ò	#  0x40 -> COMMERCIAL AT( A( 1( òLATIN CAPITAL LETTER A1 B1 21 B1 C1 31 C1 D1 41 D1 E1 51 E1 F1 61 F1 G1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 B1 CL1 C1 Lb M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 5ßP1 Q1 Q1 R1 R1 S1 S1 T1 ÔU1 Ub V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ P5ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿcOW LINÛ`# 6ñYGRAVEJ a' çLSMALõb/ å	/ óc/ ã	/ ñd/ á	/ ïe/ ß	/ f/ Ý	/ ëg/ Û	/ éh/ Ù	/ çi/ ×	/ åj/ Õ/ ÀTTER J
    '3k'  ð#  0x6B -> LATIN SMALL LETTER K
' +'l/ C/ L/ m/ D/ M/ n/ E/ N/ o/ F/ O/ p/ /70/ P/ q/ 1/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ ðóEFT CURLY BRACKEG|- îÒVERTICAL LINEU }( çORIGHV ~. æCTILDN B\x7f# “7×TDELET! Pu20ac# ! 8ÉƒEURO SIG@\x81" "  $ ¾’<control>· `\u201a& $ ³óSINGLE LOW-9 QUOTATION MARf\u01926 º¥F WITH HOO9 F201e9 ÄODOUBo F20266 ËóHORIZONTAL ELLIPSI( Ó &20. ÊSDAGGEx! ô ¼… 
( 702cw µ„MODIFIERóCIRCUMFLEX ACCEN7 d 3… Â˜PER MILLE¥Gu016) ¼@CAPIß SMDCAROáVu2039ê É½áEFT-POINTING AÑË5Ëàý€ –IGATURE O}'66ìöBLACK DIAMOND SUI
6663¥ ë- LCLUB* 5* õ* \HEART+ 69ÿ+ ZSPADE+ 5018V 9Lî*6201Z9Î6 •9 k ^k d  k 6 2·9DBULL¸ �1w9ðEN DASH
    '\u2014'  ó #  0x97 -> EM DASH
    '\u02dc'  " 8" ´SMALL TILDE& F2122& 9& ô TRADE MARK SIGN* F0161* A* bLATIN V ôLETTER S WITH CARO: 0x9b8 Š B: –<control>^  53& Ð C$ 	^ ”IGATURE Oº 0x9d0 V D2 V 8x9e$ E$ Pu0178& z F$ z ƒCAPITAL Ú YÚ “DIAERESISº 0xa0> ˆ  A0@ ÕNO-BREAK SPAC± a?) 1) ñINVERTED EXCLAMATIONz] �4 24 HCENT™!xa9$ 3$ ZPOUND% 4¦ 4% ŠCURRENCY( 5( 5( :YEN# 6# 6# ¥BROKEN BAR¹ 7%  1SECà U!xa{¼ ¥a9K £‹COPYRIGH	a) ¢ö
FEMININE ORDINAL INDICATO© �A�ÿLEFT-POINTING DOUBLE ANGLE QUOT¦ iÆ ½+NOœ ®A®¥SOFT HYPHE*a°A°›REGISTEREÐfì ¶7MACub—B—iDEGREEÌb”B”ªPLUS-MINUS* ŠBŠô SUPERSCRIPT TWOûb�B�	* 5HREb—B—€ACUTE ACèS –B–ZMICRO¢ ˜B˜zPILCROW' šBš¥MIDDLE DOTq ˜B˜uCEDILLA" –B–æ &ONä —B—oMASCUL˜
b˜B˜ò™b™B™¢VULGAR FRAŽ ONÖEARTEb¬B¬6 EHALFe�B¹3 Tø1 QUk >bÈBÈAQUES2 Œj cØCØ¯A¯EGRAVŠcîCî< 	Šx  C < 	¥CIRCUMFLEXA CA 	¦(xc'ÀC4 -> LATIN ðCAPITAL LETTER A WITH DIAERESIS
    '\xc5'
 ÿ #  0xC5 -> LATIN @ ¥RING ABOVEA 6A 6A 2 72 72 C³ uCEDILLAp 8> 8> E> 7GRA¬ 9< 9< FACUT¶ a< A< ¥CIRCUMFLEX¹ bA BA ªc@ C@ Iù d< D< 
ù e< E< ù  fA FA ù 'd0@ /D0@ ô ETH (Icelandic)x(d1? 1? N8ETILDõ(d2< 2< O< 	m(d3< 3< 	t(d4< 4< td×D×¹ 
õ ÒDÒ< °àDàõMULTIPLICATION SIGNŸÐDÐn VSTROK ÑDÑU ÑDÑ< 
 ÌDÌ<   ÍDÍA dÑDÑYù 
½ ÑDÑ_THORNRÑDÑESMALrõ SHARP S (German�eÏEÏ	> °	ReÊEÊ: 	ó eÈEÈ: ®eËEË? 	LeÉEÉ: æeÆEÆ> ð RING ABOVE
    p'\xe6'  ð#  0xE6 -> LATIN SMALL LETTER AE
%  0 70 70 åC WITH CEDILLA< 8< 8< E< FGRAVv 9: 9: FACUT: a: A: ¥CIRCUMFLEX³ b? B? •DIAERESIS> c> C> Iñ d: D: 
ñ e: E: ñ  f? F? ñ 'f0> /F0> ô ETH (Icelandic).(f1= 1= N.ETILDå(f2: 2: O: 	Y(f3: 3: 	h(f4: 4: h(f5? 5? 
í ²F²í ¢ÀFÀÕDIVISION SIGN�¬F¬f VSTROKŽ­F­UŽ­F­: 
Ž¨F¨: Ž ©F©? T­F­Yñ 
· ­F­_THORN2­F­y · ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python Character MappW CB ð generated from 'PTCP154.txt' with" m ò.py.

Written by Marc-Andre Lemburg (mal@l ð.com).

(c) Copyright CNRI, All R û	s Reserved. NO WARRANTY.6 ð2000 Guido van Rossum.
á ±#"

import § s>Þ ÁAPIs

class  ($ . 1):
PAdef _ñe(self,input,errors='strict'):,  hcreturno ƒB = , 4ing‘C  o ªo À'strict'):
   ð	return codecs.charmap_de á(input,errors, ðing_table)

class IncrementalEn6  r( >cs. 0):
v Qdef e, r(self, h Ã final=False*  . ¢ @ :  F .§  § ?[0]ª  Dà ª  €  ª ø eª '@ ª  ª àStreamWriter(C›,T ¤ Dpassã  ORead9  	9 2###�ðings module API

ý Ãgetregentry(7 
�ž QInfo(Û ±õ name='ptcp154', š!e=2 2().     ih: .r=a/ J 	/ æ/ srr9=F# w•# ¢# @)


L[ Ping T' F5codæ2 = )`'\x00'/ñ #  0x00 -> NULL0  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1töDEVICE CONTROL ON- v1v- 4TWOH1{1{- 6HRE\ „1„/ EFOUR] „1„ŸNEGATIVE k 1‘1‘ö SYNCHRONOUS IDLˆ –1–2e BLOCKŽ «1«UCANCEÚ'19´1¨U eMEDIUMI a(  –SUBSTITUT¢ ¡1¡Ô”À0x1C -> FILEð SEPARATOR
    '\x1d'
 ÿ #  0x1D -> GROUP*  e* E* oRECORD+  f+ F+ LUNIT)  & "  ~  20) RSPACEž !  1  òEXCLAMATION MARK+ "+ 2+ LQUOT) #) 3) ²NUMBER SIGNO $& 4& XDOLLA& %& 5& wPERCENTM &' 6' ‘AMPERSANDq 1"'"†7$ ƒPOSTROPH(I 8% ñLEFT PARENTHESISP +')+ 9+ ORIGH,  *, A, sASTERIS_+# B# GPLUSç ,$ C$ RCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF 0" 3[¢DIGIT ZEROG 1% `% #ONt2$ Y$ #TWH 3$ T$ 3HREJ 4& T“ 3FOU‘5% SK 3FIVJ 6% Q% 2SIXÜ 7$ Q$ 3EVEè8& R& E-L 9& M& $NI):% FCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •+'E1 �1 ™F1 ™1 F“ G1 ¦1 G1 H1 ±1 H1 I1 ¼1 I1 J1 È1 J1 K1 Ù1 ML1 æLb M1 îb M1 N1 À0x4E -> LATIðN CAPITAL LETTER N
    'O'   ý #  0x4F -> LATI1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 61 V1 W1 71 W1 X1 81 X1 Y1 91 Y1 Z1 A1 Z1 [1 B1 óEFT SQUARE BRACKET$\\/ z 5C. ãREVERSE SOLIDU¯])  * D* ?IGHY ^/ E/ óCIRCUMFLEX ACCEN… _, ÿrOW LINEÖ `# 6ñYGRAVEJ a' çESMALxAV b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ F^ g/ Û	/ G/ h/ Ù	/ H/ i/ ×	/ I/ j/ Õ	/ J/ k/ Ó	/ K/ l/ ÔN	/ L/ m/ Ù/  M/ n/ Ù/  Ûo/ Ü¼ Ùp/ 7è^  ×q/ ðÕr/ ðÓs/ ð"t/ ðöu/ ðÍv/ ðËw/ ðÉx/ ðÇy/ ðð Y
    'z'      ð  #  0x7A -> LATIN SMALL LETTER Z
    '{'   / B/ òEFT CURLY BRACKET- |- C- ÒVERTICAL LINE( }( D( ORIGHV ~. E. CTILDN B\x7f# £ F  ÂDELETE (DEL)u `\u0496) '  80' àCYRILLIC CAPIT¥ þ ÷HE WITH DESCENDERE 2E 1E 	GE TSTROK® Vu04eeB 2B 	U… gMACRON‚ 3@ 3@ 	Ã€ 7201€ 4@ ôDOUBLE LOW-9 QUOTATION MARKv 7202=56 pHORIZON7„ELLIPSIS. 704b. 6. kC&k a© 7E 	ASTRA@U‚ ¨8= 	"HAg� Z19D S- &a0¥e¦BASHKIR KA¼ e¼ s= I» "a@ †@ "ENA ü  &9aÁ ¢D K@bD ¸D 7SHHÿ &b8{ Ï7 C=fl%97K 9ó	ÂZI 	6201Ž 9ñL oSINGLE.&19x äà6 c6 Úk Ÿ™&1d5 Ïk 6 2#9ÏDBULLÊV\u201f9ÂtEN DASH¦F2014y Ÿ)EM" 704bD 
„	~‚bÀ‚	ÀF04a1§ 
Š	… ˆÀ 
ˆ	; †> 
†	> „	b» 
„	B ‚	B ÀE -> CYRILLIû&C SMALL LETTER SHHA
    '\u04b9'   #  0x9F -> CYRILLI5 ó	CHE WITH VERTICAL STROKEI 0xa0G I  A0I ÔNO-BREAK SPAC) Pu040e+ r  A1) r gCAPITA© óORT U (Byelorussian)r Gu045I 2I ð G &08� 3G � JÅ e5 45 	†BARRED O· 9; 5; 	Zs–DESCENDERD boD6D 	pSTRAIGHG¿¶7û ¶7I ÆSECTION SIGNp  01) p 8' ´Ié !xaY\ 95 AOPYRŽ 
^ dA) „‚DSCHW¼0xab” a B8 ñLEFT-POINTING DOUBLE ANGLE QUOTAÚ CMARKÚ 8xacD CD ;NOTý  ef% ý D# ý 	hU!TMACRO;!xa¤¥ E> pREGISTE
9� h 
‹"KAk Œt BŒkDEGREEØ bÕB‰	Ø C
 Ð6B‡· ó	BYELORUSSIAN-UKRAINIAN I� ÒK 
‹	’ I 9}KBŸ	I beB 
¦	B ß!xbÂ |›xPILCROW}(xbyBy§MIDDLE DOT¢
w	… uAu211� ú uhNUMERO~ Gu04dÞ 
r	Y 	pbpBpÍq äíBqNm&aab
�b"ES2 .‡w B &9d† 
Ÿ	4�Fu041¼C�Š Î ê 4 	C«4 B¤À\u0412'   # ð& 0xC2 -> CYRILLIC CAPITAL LETTER VE
    '\u0413'   # 5 35 	(GH6 46 46 	D5 55 55 	I5 65 65 	Z  76 76 
k 85 85 	I?94 94 	hSHORT : a: A: 	'KAo b5 B5 	'EL5 c5 C5 
M5 d5 D5 
N5 e5 E5 	O4 f4 F4 	P«%205 /D05 	&ERj &215 15 
S5 25 U
TŸ UDU
Ui SDS
'EF5 SDS
HE2SDS
(TSÔ SDS
C‰2TDT
S¢ VDVC8 TDT
‡HARD SIG¼2[D[
8YER·]D]
LSOFTs dDdòcDc
Y¥ dDd
Y'3dEdESMALM2 aEa	2 BV3_E_	3 ²3]E]	3 	°3]E]	4 ®3[E[	3 ¬3YEY	3 	ª3WEW
4 4TETÀILLIC SMALL ó#LETTER I
    '\u0439'   #  0xE9 -> CYRILLIC SMALL 2 YSHORT8 a8 A8 'KAk b3 B3 'EL3 c3 C3 M3 d3 D3 N3 e3 E3 O2 f2 F2 &PE3 %403 /F03 'ER3 13 13 S3 23 23 T™ 33 33 Ue 42 42 'EF3 53 53 H/&463 63 (TSÌ 74 74 (CH4 84 84 Sœ 6F6
C6 4F4‡HARD SIG¢4;F;8YER§=F=LSOFTo DFD	àCFCYŸ DFDóYA
)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ p)
""" C) Ð for the Puni;  O ð), as specified in RFC 3492

Written by Martin v. LÃ¶wis.\ �

import R !cs· # É   ñ

def segregate(str):zÁ"""3.1 Basics e point, aion"""+ ñbase = bytearray() ãextended = set  cù 2stri  .ö if ord(c) < 128    _ ‚.append(& `   Jelse. v 0.adQ Š dorted(& J Preturz@tes(o 4), " "°lective_len&V, max+RB  õðlength of str, consider\Ponly EÀacters belowI .Kqres = 0¶ +:maxý  ? A+= 1@ Ö <resÄ BfindÅ  � Í, index, posÒ ‡a pair (# 0 ðicating the next ocñ&currence of
    char in str. index is the position of  * ñacter consideringD ñonly ordinals up to and includingf , =posa !inG  u @fullŒ 3ing� /2 PstartP œ !inœ  7 D  st– Q."""
 Ál = len(str) �while 1:   _ E+= 1  ifû V == l&  * âreturn (-1, -1O   0c =³ X[pos]F cD  6G l0+1,m 6 �elif c <1
7 0  ª  
def inser p_unsortã ², extended)= „"""3.2 I,  , 0 co— & Á 0old§ q = 0x80� ¢result = [Ó 2old� 2= -+Pfor c:s r  P *  [0   f Word(c@PurlenE“elective_³,* ¡delta = (c3 q+1) * (V #- Æ . ë ƒ œ ,š sp AfindA%c,! I 8  r =Ò ì     Qbreak;    ­ #+=V¡ ] 	& i�.append(4 \ I |@ 2  ºV ! ==»m 
@“T(j, bias+ð# Punycode parameters: tmi›ñ1, tmax = 26, base = 36u 1res  Œ�j + 1) -Z  0if ! S< 1: ‡ A E> 26 2R j res

digita ñb"abcdefghijklmnopqrstuvwxyz0123456789"Ý ’generate_	 ù lized_integer(Nø #13 G2 ) ó variable-length 9 s0GÒ = bytearray(-j‰| Ls ÜŠif N < tQa 2[N]e  7   M „ "s(2 !  B ñt + ((N - t) % (36 )Y N^" %//# ° j‚Radapt³À, first, num�U"if ß °b//= 70kOelse  2u 0 2+= 	 %//c  A# ((Ž-ª  ¨`) // 2€1455) €divisionJx £W \> 455… t B35 #öh S  …W + U7 =  H*Ã 5b + 38)´ÍBias
 º$te·sè Blen,H cÀq4 Bias ’a«ÖÀycode parameðters: initial bias = 72, damp ñ00, skew = 38
    result = bytearray() >  ñfor points, delta in enumerate( 1s):,  W  y 1gen _	 Òlized_integer2 ,¤ p  6 � –.extend(s � Tadapt; � Ò==0, baselen+ "+19 areturnÙ "s([ ð)

def punycode_en S(text½  K ", ‚ °ed = segregå & â ï ñ = insertion_unsortJ ? ˆ M 
$te`s(len(t )Xõ !ifÕ QÍ Åase + b"-" +§ • " n ?

# ¯ Decoding   0d4 eÈtnumber(n ô 2posÒt, error�"""3.3 Gó variable-length Cs"""Í —0  ±1
 Cj =  fhile 1#6try  O¥char = ord¨ ‚[extpos]š % Ðexcept IndexE¶ 
D #ifÌ Ê == "strict"#  F �raise UniPG À("incompleteq  A 6ng" = ©› ¡ + 1, Noneð     "=   ±if 0x41 <= ç å<= 0x5A: # A-Z;  + @digiâ( -7   !elI *30I *39ã C Ê22 # 0x30-26K ø,(uInvalidÎ DnR '%s' Ê  %; ß(-1á:lseÎ *²	l )2T(jÈ§?B += 5* wù #if ?< ti 
E 8  Õ¶w * (36 - tm jh "1
|ca ,m_endedi42 I– – Q4ing\ /8I po®-\j!72§ z
s  < ¼? ¢1newX&? = >u  D   ± @  ”§sL
˜â# There was aná Ñª öing. We can't continue becaus• ¢ Ð# synchroniza• is lost.‰  ' p »  u N ¥ +{ + œ0+=  6//  ""iföð > 0x10FFFF:
     ôif errors == "strict":
  àraise UnicodeE1 ñ("Invalid character U+%x" % )D  $ ¦ = ord('?' `pos =  ö% (len(base) + 1$   0 =  Ð[:pos] + chr(T  +  Upos:]s 0biaX ðadapt(delta, (exti u== 0), m i ! q newposN areturn}  

def puny0_de c(text,D)9Óif isinstance! 3str  S 5 0 =  1.enH r"ascii"Ž B ®memoryviewI Qbytesj @ è _ –rfind(b"-[  B= -1¯  ‘  DQ = ""õ   áextended = str\ $, ¥ r.upper(m MelseJ 4 ²: *h 	…[pos+1:]6 )p “áinsertion_sort9$, ¶ h ò
### Codec APIs

class (z1cs. 1):
•  å”¥self, inpuã"='$'… rem= 7 " P¶ 2res| s Os ·„not in (˜ ø, 'replace', 'ignore­ Œ Î ²UnsupportedÎÂ handling "+#Í 	ò ¼ Ó z j   ú ‰ÁIncrementalE
r– t¢³final=False*  Ÿl DØ†  \  † ù 	µ† 0if & .J ¶Rq »ÑÃ ¼	3 ÑStreamWriter(+,8 5pasd ORead9  	9  ­@°ings module¸|Ãgetregentry(7 ]‘ ž QInfo(X ÿdname='ï %', g !e=3 #()‡    i·I 'r=DÊ/ J 	/ Y/ ssws=G€# r]# P# Q)
"""Ü ð for quoted-printableñ encoding.

This codec de/ òes from bytes to	 Ò.
"""

import2 s qquopri
6 3io $ B@ ‚IO

def # _a ó(input, errors='strict'):
    assert D ==    Cf = Z G ) g  r .r Pf, g,† ²tetabs=True( ó
return (g.getvalue(), len_ )Á  de- Á Sr  Á ± pclass C×(° 1cs. b ‘oself, �
 ”%TÆœ  Z ± Z "< 	� 2)

Ð ÀIncrementalEÂ$erÝ  ê ³final=False* æ  Ï .±O)[0]”  D”  j $” 
 ” ÑStreamWriter(ø,±. � òcharbuffertype =ïà 1 OReadL  L #sÂs module APIYÃgetregentry(G nºQInfo(ê ©bname='Ž%', Ô= ¦ <   i]G .r=V/ J 	/ ñ/ s“w“=T # rj# \# ‚_is_textÛ 2ingÂ! )¡ð Python 'raw-uniC‚-escape'0


z òten by Marc-Andre Lemburg (mal@l ð.com).

(c) Copyright CNRI, All R ð
s Reserved. NO WARRANTY.
‘ # ‰ rcs

###ˆ  sf¥Í 1):
×°# Note: Bin²ð these as C functions will result in$  23notF  converting m×‘methods. Áis intended.4 $ =;Craw_R_R‡e. . 
# ó ]   9– (ú·9
yÐ.raw_unicode_ð*escape_encode(input, self.errors)[0]

class IncrementalDe0  r( >cs. Á):
    def d, (U #, b ³final=False*  . sreturn U praw_uni _§ K E  R §  ðStreamWriter(Codec,D 8cs. w Dpassà  ORead9  	9 A### <ðings module API

ú Ãgetregentry(7 
ã ž QInfo(. £name='raw-ü -ü %',# q !e== .  #   iÂ8 'r=»Er/ J 	/ / sywy=M†# rc# V# ñ)
#!/usr/bin/env python
""" P ñ Character Mapping ò for ROT13.

ThisFB de/ê Ðs from str to 0.

ž òten by Marc-Andre Lemburg (mal@l `.com).ˆ ‚

import` 0s

ƒ 5APIL   ’ 
o“='strict'.  3Õ(str.translat«ò rot13_map), lenÂ1))
- l ¹l KJ dß  ¡ 
Îu ª�   � 0� 1–¦_ot-13Š/()Œ
2().[ê ÙŽ� ¤ ‚_is_text"2ingµÅ )þUMap

‰# =ö.make_identity_dict(range(256))2 @.updÓ{µ�0x0041:  eh  2 f 3 &50 4 1 5 2 À46: 0x0053,
¡   0x0047: D54,
 8 5 9 6 a 7 b 8 c 9 d a e &41 f 2 #50 3 1 ¾ #52 ¾ #53 ¾ #54 ¾ #55 ¾ #56 ¾ 504¾ 50&4b˜ 0&4c 0%4d 6¾ &6e ¾ &6f ¾ &70 ¾ 706¾ 706¾ 706¾ 706¾ 706¾ 706¾ 706î706î706î706î6¾ î6¾ 7î6¾ 70¾ 70¾ 706¾ 706¾ 706¾ 706¾ 706¾ 706î706î70ð6d,
})

### Filter API

def rot13(infile, out	  ):‡ ð.write(codecs.en	 2 ò.read(), 'rot-13'))

if __name__ == '__main__'V ¡import syse �  sys.stdin,   ðout)
#
# shift_jis.py: Python Uni‡   C• á for SHIFT_JIS5 ó"Written by Hye-Shik Chang <perky@FreeBSD.org>
#

– _V rcs_jp,   ‘multibyte ’ as mbc

 &= : A.get %('¼ ’')

class² M¿ nY" =x h#ds   P ÁIncrementalE›tr(mbc.M®   Â  · .s.4 ¤   ‰ ‚  Dª ‚   ‚ 4 ‚ 	ÑStreamReader(T,�! Ù. ^  R^ 
! ^  ^  Ãgetregentry(& breturn!s.Î QInfo( ¶ [=[NC=4 #()C 9   iJI .r=	/ J 	/ ¶/ s¤ð reader=StreamResader,
  ástreamwriter=S W # ñ,)
#
# shift_jis_2004.py: Python Unicode Codec for SHIFT_JIS, ?  Q ð&ten by Hye-Shik Chang <perky@FreeBSD.org>
#

import _[ rcs_jp,   ‘multibyte ’ as mbc

 =: A.get *('Æ ’')

class¼ (% !s.É !):  en " =} .  dx   P ÁIncrementalEB tr(mbc.M³   l’
  ‚ >cs.4 ¤   ‰ ‚  Dª ‚   ‚ 4 ‚ 	J Rem(T,¢! Þ. ^  W/er^ ! ^  ^ ódef getregentry(& breturn"QInfo( ¯\name=`S9=#()H >   iOI .r=/ J 	/ »/  r© ¶# #_x0213#X, #‚Æ #ÿÿJ`dÚ  Ê   #Àoder,
      ö  incrementaldecoder=I D 3,
  �streamrea) S R # rwriter=# W # ð0)
""" Python Character Mapping Codec tis_620 generated from 'py7 "-m- ðs/TIS-620.TXT' with2  Æ `c.py.
k ±#"

import  cs

###h ²APIs

class ($ .‡ 1):
ù `def en ñ(self,input,errors='strict'):,  (creturno “.charmap_B = , ¦ing_table)o Œo )B 	o  o ú ñEç r ç  h Ã final=False*  Y.S4[0]¤� ›ª   €  ª ø eNª !@ ä ª  Qª ù(N,A8cs. ¤ 5pas‡ U9  	9  ÐJàs module API

ý Ãgetregentry(7 
¡ž UInfo(Â�name='tis^'¹ Éf !e=2 2().     l: 	l{/ J 	/ æ/ ›1[  �T– F5codæ2 = )`'\x00'ñ #  0x00 -> NULLH  1 1 õSTART OF HEADING+ 2+ 2+ ETEXT( 3( 3( 0ENDQ 	& 4& 4& µRANSMISSIONT 5. 5. UQUIRY" 6" 6" µACKNOWLEDGE& 7& w7 -> BE8 8 tACKSPACC t"  Q9$ öHORIZONTAL TABULAT» n0 A0 •LINE FEED— b& ¥B$ oVERTICR 8x0c. C. HFORMR r" ¦ D$ æCARRIAGE RETUR[e, | E* †SHIFT OUÓf$ F$ IG 1h1hô DATA LINK ESCAPB(x1t1tðDEVICE CONTROL ONE
    '\x@12'  ð#  0x12 -> DEVICE CONTROL TWO
" X'\x13- 3- EHREE/ 4/ 4/  EFOUR. 5. 5. öNEGATIVE ACKNOWLEDG] 6/ ö6 -> SYNCHRONOUS IDL+ 7+ 7+ õ
END OF TRANSMISSION BLOCKŽ 84 84 eCANCEL! 9! 9! U eMEDIUM( a( A( –SUBSTITUT¢ b% B% VESCAP! c! C! ÖFILE SEPARATOFd) D) _GROUP*  e* E* oRECORD+  f+ F+ LUNIT)  & 1   N 20) CSPACÇ !  1  €EXCLAMAT‚3MAR�"+ ™LQUOT) #) •²NUMBER SIGN‡$& ŒHOLLA& %& „wPERCENTM &' |‘AMPERSANDq 0"'"3  u“APOSTROPH(I fñLEFT PARENTHESISP +')+ pORIGH,  *, tsASTERIS_+# rGPLUSç ,$ uRCOMMA“ -  l³HYPHEN-MINUº .' i’FULL STOPK /$ bTSOLIDF 0" 3[“DIGIT ZER¡1% `% #ONtï¤3Y$ éæ$ T$ àÝ& T“ ×Ô% SK 3FIV” Ê% Q% 2SIX#Ã$ Q$ 3EVEèµ& R& E-L º& M& $NI):MFCCOLOk ;  CGSEMI$ <$ C—LESS-THANl=) LXEQUAL’>& K|GREATERR ?, SKQUESi@( 4Y æ’ERCIAL AT4A( \óLATIN CAPITAL LETTER B1 i1 Bb C1 v1 C1 D1 �1 •#'E1 À  #  0x45 ->ð LATIN CAPITAL LETTER E
    'F'   ¯#  0x46 ->1 F1 G1 71 G1 H1 81 H1 I1 91 I1 J1 A1 J1 K1 B1 K1 L1 C1 L1 M1 D1 M1 N1 E1 N1 O1 F1 O1 P1 /501 P1 Q1 11 Q1 R1 21 R1 S1 31 S1 T1 41 T1 U1 51 U1 V1 V1 W1 W1 X1 X1 Y1 Y1 Z1 Z1 [1 óEFT SQUARE BRACKET$\\/ 35ãREVERSE SOLIDU¯])  * ORIGHY ^/ óCIRCUMFLEX ACCEN… _, ÿcOW LINÛ`# 6ñYGRAVEJ a' çESMAL1A,b/ å	/ B/ c/ ã	/ C/ d/ á	/ D/ e/ ß	/ f/ Ý	/ ëg/ Û	/ éh/ Ù	/ çi/ ×	/ åj/ Õ	/ ãk/ Ó		/ ál/ Ô8	/ ßm/ Ù/  Ýn/ Ù/  Ûo/ Ü¼ Ùp/ ð70 -> LATIN SMALLð LETTER P
    'q'   ô#  0x71 -> LATIN SMALL/ Q/ r/ 2/ R/ s/ 3/ S/ t/ 4/ T/ u/ 5/ U/ v/ 6/ V/ w/ 7/ W/ x/ 8/ X/ y/ 9/ Y/ z/ A/ Z/ {/ B/ óEFT CURLY BRACKEG|- C- ÒVERTICAL LINEU }( D( ORIGHV ~. E. CTILDN B\x7f# yF  UDELET! '80!  80! ’<control>“ H\x81$ ¾$ 2$ ³$ 3$ ¨$ 4$ �$ 5$ ’$ 6$ ‡$ 7$ |$ 8$ q$ 9$ f$ a$ [$ b$ P$ c$ G$ d$ C$ e$ 9$ =8=$ 9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@cufffe'iAu0e0+®A)°THAI CHARACRgKO KAI0 70 50 YHO KH2 E2 C2 #UA¹\• T3 R3 ÀHWAI
    '\uð0e05'   #  0xA5 -> THAI CHARACTER KHO ÖN
    '\u0e062 62 wRAKHANG5 75 75  wNGO NGU1 81 81  0CHO¦ ˜ 92 92 I– a3 A3 
É b3 B3  WSO SOÇ c/ C/  Ç 'OE2 d2 D2  JYO YÅ e1 E1  D)'DAc f2 F2  †TO PATAK2 %102 /B02  HO9Ž&112 12 —NANGMONTH1&128 28 hPHUTHA5 35 35  XNO NE� 40 40  XDO DEÿ %B%ITO T� #B#T/U‹1!B!3 8AHAÇ $B$4 Og %B% *†1!B!—BO BAIMAI+!B!WPO PL�1"B"jPHO PH,#B#HFO Fb !B!b 	Y!B!a ‰2C b ISAMPµ2"C"GMO MÆ 2C ³2CXRO RU` CR2CILO L¤2CL] 
C
XWO WAÎ2C “As2CSSÔ2C b 	LCfHO HIP42CLÃUÃ C)O ¶2ÐCE -> THAI CHô$ARACTER HO NOKHUK
    '\u0e2f'   #  0xCF -> THAI CH3 –PAIYANNOI3 %303 /D03  gSARA A0 10 10  ÇMAI HAN-AKAT6 26 26  f g 31 31 Mb 41 41 ø 50 50 1 61 61 'UE’ 71 71 2 82 82 b 90 90 U1 a1 A1  ePHINTH1 Tfffe'>  60e3…D…÷URRENCY SYMBOL BAH 4†E†*4†E†P1 �E�Oì 60e4€E€—I MAIMUAN9 ˆEˆA9 7ALAa4’E’¨LAKKHANGYA¨ –E–Mò'MO$4—E—vMAITAIK60e4˜E˜ ôEc ˜E˜ 0 (THÆ ˜E˜1 R,bÉ/EBÉ  1 wCHATTAWU&4c6 C6  ˜THANTHAKH»&4d5 D5  xNIKHAHIÍe2 E2  iYAMAKK53E3¸XFONGM1 50F0—DIGIT ZER[5*F** 'ON"5"F") (TWR F) 8HRET F+ FFOUR75ýFý* (IVT òFò* 7SIXS éFé) 7EVEµ5áFá+ 8EIGª5ÜFÜ+ )NIQÕFÕ0ANGÐ	j5ØFØÀARACTER KHOMÿ UT
    '\ufffe' ó)

### Encoding table
e _ ò	=codecs.charmap_build(de3 $ ð)
""" Python 'undefined' C< 
� QThis L ñ% will always raise a ValueError exception when beingC ð0used. It is intended for use by the site.py file to switch off
"Ñautomatic stró Po Uni˜ ð coercion.

Writt| òy Marc-Andre Lemburg (mal@l ð.com).

(c) Copyright CNRI, All R €s Reserv¿ ÐNO WARRANTY.
8r
imports’8Â APIs

classJ(¨ 1cs. "):YAdef ³àe(self,input,eK0s='ç Qct'):B rõ r%("³J Ving")^ í^ >Ø ±Incremental‡$erå  Å ñ  ò Ã final=False* ï ‘ Då‘  g  ‘ $‘ ;`Stream’1er(ú, ‹ 5pas3 ORead9  	9  L°ings module‡ 

ä Ãgetregentry(7 creturn¼˜UInfo(nWname=, h !e=Ò 2().  Q   i8: .r=1/ J 	/ Ï/ strwriter=H�# r^# Q# cu-escapehš²# Note: Bin- heº€s C func±sÛ‘result in’W1notú‘# convert}0hem¥‘methods. %Þ.4 á$ =gu±_N_ * Ü*  S0{=	¶ (¼ º.´O)[0]£  ¤£ ÀcrementalDecóoder):
    def decode(self, input, final=False*  . preturn / `cs.uni
 ƒ_escape_G A  N ð.errors)[0]

class StreamWriter(Codec,D 8cs. s Jpass9 ORead9  	9 ð### encodings module API

ö Ãgetregentry(7 
ß ž QInfo(*  cname='ø -ø %', m !e=9 .     ²incremental8 6r=I EÅ /er/ J 	/ DÐ/ suwu=hR # r_# R# ñ)
""" Python 'utf-16' é 0


Ïòten by Marc-Andre Lemburg (mal@l ð.com).

(c) Copyright CNRI, All R ð
s Reserved. NO WARRANTY.
… s
import„p, sys

ê�  ß2s

D# =& ‚.utf_16_ ÿ8(®©Ÿ='strict'E 9 t, True)¬»(å k  ’ƒ__init__Š”  ‡M .C )¡•N� = None
   } 9if J !isK R ¡   oresult„xG & 9   f ú	ys.byteorder == 'little'k  2 J Û #´$leü +  OelseI bI 8ò P c  ™ ÷ 4  „Qresetƒ I Ì <./ C  . p ärgetstatíc !#  ¢ info we réÖto the caller+R# 0: 2ò  is in natural ©õfor this platform� ÷# 2: endianness hasn't been determined yet3 Ð(we're never Æ0ingu )unw ç¾ 0(2 D3elf�r®  õ û6 0)ýs,  H  8k     b 
.  D ÐgÀcoder = codeðcs.utf_16_be_encode

class IncrementalDe  r( ¾cs.Buffered" ó):
    def __init__(self, errors='strict')  - U .K )j  A  a ".d£ � = None
 ‡ b­ _  � Tinput” w, final’ 9if T !isU Ü  r   A(outF ñ	consumed, byteorder) = \ƒ  *  é p$ex” Ž 0‘ 	A &if_ j == -1�  e 	µ *= p #lep 	W ,elY X bX ^ >= 2¯ �raise Uni© E ö("UTF-16 stream does not start with BOM"ü ÷ }return ‘& "  (v �x" =Qreset4 ® 
.7 K  ¥ h …r¥Œgetstatek À# additionalòte info from the base ¯qmust beªe here,| ñ# as it isn't passed along toH ecaller1 �  Bð.º 5[0]D ¼ !we‚ 
z D# 0:ÿáis in natural Z÷ for this platformq 1: )un< * ð2: endianness hasõbeen determined yet3 g(?6, 2�1add Å = int((sys.. Ï•"big") !=r  5 æ+isÞ†)u � „ )sx,bê# €[1] will^¿ignored by X � 65  +� ? &[1h š < F0H ; I 3$= ¿�3d  4   _ ­6 
 el˜6ode`€}Ñ  ½ y½ N ‡ 
½ Àig"
           ð	else codecs.utf_16_be_de $)
1  & :   Rself.' ðr = None

class StreamWriter(H 8cs. )J Ðdef __init__(O 1, s: ó, errors='strict'1  w O  .E 
Ä  c 0.enB ²  T  ‰ Qreset† m ) Z 
r [ , inputà 	9if N !is[2 ­   ‹result =¸j 	d ÿ  9  ^ ú	ys.byteorder == 'little'c  . 	‰ m 2le_p  3 (  I 
bI rreturn ê c _ ( b (	–LRead– 1):
h 4 .:tryL2delÕ/f  ðexcept AttributeEö
; Fpass— @ Kõ(object, consumed, ùU) = \‰  �  #ex
M¦, 0, FalseX&ifW  P*-1Ã ›º ²lj‹ ,elP O ¹
O  :>=2› �raise Uniý ~ƒ("UTF-16Šö
 does not start with BOM"ÿ �mq)

### $ðings module API

dÃgetregentry(tL  Ž @cs.C•UInfo(Ï åname='utf-16', e "e=  u=  ²incremental2 6r=I E!/ J 	/ D)r/ Ãrg=ö,# w # -# Ó)
""" Python í Q-be' 0


- òten by Marc-Andre Lemburg (mal@l ð.com).

(c) Copyright CNRI, All R ð
s Reserved. NO WARRANTY.
ˆ s
importjÔˆ  É2s

BÙÕì9
LÞ
ý‹
< t, True)q¿wàIncrementalEncóoder):
    def encode(self, input, final=False*  . preturn / Ócs.utf_16_be_B <  I ð.errors)[0]

class IncrementalDeC  r( ¾cs.Buffered" | !_b" !_d8 . =‚  k µStreamWritee  W · O  
O LReadO  O „ O  R

###nðings module API

ˆÃgetregentry(S 
q¡CodecInfo(¼ ’õname='utf-16-be', Ã =  ‹ =  i�2 'r=ŽE"r/ J 	/ ß/ s�rA=‰:# w³# À# Ô)
""" Python ð Ale' 0


- òten by Marc-Andre Lemburg (mal@l ð.com).

(c) Copyright CNRI, All R ð
s Reserved. NO WARRANTY.
ˆ s
import†×ˆ  Ì2s

B	l)ï9(50Ÿ='strict' q#le	
< t, True)µ¿o n  …¼ &ä œ ^	p  ¾ ý ù µ	ÇO ¿R O ÞO  6u ClÌ
$32
:"""ŸR, sysn¤#32Ê¡)/32žHƒ__init__ 5 ZëÀlEncoder.__iónit__(self, errors)
    ñ.encoder = None
 Bdef  : ñinput, final=False):*  J 9if J !isK !  % �result = n £cs.utf_32_f ` G ¦ 5[0]b  A  f ‘ys.byteor± ª= 'little'k  . J Û 
u #lex 	a OelseI bI rreturn ò c  ™ (÷ 4  „QresetƒoÌ ÂIncrementalEè ./ C 	 
äŒgetstatec !#  ¢ info we rÒ Öto the caller+ò# 0: stream is in natural ©õfor this platform� ÷# 2: endianness hasn't been determined yet3 ð(we're never writingu )unw ç¾ 0(2 D5elfôª û6 0)ýs,ƒ H  8k     b 
.  D Ð‡w
class e Dey r( ¾cs.Buffered" ( À>__i€“='strict')  U .K äWd£ Ë!_b­ _  í#, |Û’  Ÿ +4 rÙ <
ÄA(out¥consumed,  U) = \· å   é þx” Ž 0‘ 	A &if_ j == -1�  a 	
p #lep 	W ,elY X bX ^ >= 4¯ �raise Uni© Eú„("UTF-32R€does not…Ært with BOM"ü ÷ ä‘& "  € x" ÄU¿  ® 
ŒQpŒ additional"te—Afrom�Rbase ¯ðmust be None here,
  ó# as it isn't passed along to the caller
0 ð state = codecs.BufferedIncrementalDe Qr.get- •(self)[0]D Ã# additionalQ qinfo we‚ 
z :7 ÷ 0: stream is in natural order for this platform: 1: )un< * ð2: endianness hasõbeen determined yet3 0if â ".dø  › FNone¸  ;�return (E, 2)? 1add ò = int((sys.byteÔ Å== "big") !=3  Q  a  €Òcs.utf_32_be_› )u � „ !)
d  deÓ ¾,¦)Ô # ÿ[1] will be ignored by s� ¯ 5  i� «  ? &[1h š¯6= 0¼ 4 5elf33= („ 3d  4   _ ­6 
Delse>o l¢:  el^ ½ 1½ N M ¹    _ ½ 2_p  ã ² 
  ‘

class SÑdWriter‡ u ”�__init__ñ  ó, errors='strict'1  å  /0.enÝAr = w       8cs.k .a 
Qreset† m Q ) •   ã ­ [ , inputà 	 Å É6 r{Fsult³u4 (d ” " ^ #Š'little'ß . × m 2le_p é  /   (  I 
bI Ï reê c _ ( b 	–LRead– &):+å _4 .) ¥ 6try5  ÿ 8delP) ðexcept AttributeEö
;  ¿— õKÀt, errors='s£trict'):
  õ(object, consumed, byteorder) = \*  1 ðcodecs.utf_32_ex_de õ
(input, errors, 0, False)= &ifW f == -1ƒ  Y Rself.M 0 = T g #leg N ,elP O bO  :>=4› �raise Uni– Eâ ö("UTF-32 stream does not start with BOM"ÿ }return mó)

### encodings module API

def getregentry(¶L  Ž @cs.C’UInfo(åname='utf-32', e "e=  u=  ²incremental2 6r=I E± /er/ J 	/ D&/ 9�reader=SFR R # Ewrit# W # Ó)
"""
Python í Q-be'  cimportMi  ^2s

× n2be_ �Î 
á9='sH
’g
< þ , True)

class T(Ù   ¢ (6#, }bfinal=xÂœ B <  I .¾O)[0]ž  Ãž ‡Buffered¦ " ¦ !_b" ºfZk âe  W · O  
O T
O  O „ O  6[ ŸB ²Ð h ¢Ël¢0l¢4X¢€ä œ ¢(ÀcrementalDecðoder):
    _buffer_decode =  Ãcs.utf_32_le ó

class StreamWriter(,  W  en O  
O LReadO  O ž A### [ óings module API

def getregentry(S dreturnï ¡CodecInfo( õname='utf-32-le', h "e=  ¥ =  ²incremental2 6r=I E)r/ J 	/ D§/ s�rA=‰:R # w³# À# Ñ)
""" Python ð 17'  

( ðten by Brian Quinlan (b ð @sweetapp.com).I s
importX 

˜M  �2s


"7_ ¬ö ÿ(input, errors='strict'½ ¬7¨
8 t, True)nxÃ j  >ž s(self, ˜ ³final=False*  4
U˜ > 8  E .Õ O)[0]š  ãš B 'ed¢ " x Â	g ! Öo S ³ ¥	l¬ _  K ÎK  m ¶@7²Ø8²³ò
Marc-Andre Lemburg (mal@l µð
(c) Copyright CNRI, All R ÿ
s Reserved. NO WARRANTY.
í%8í08í„Ü …í[íÀodecs.StreamðWriter):
    encode =  ’cs.utf_8_ ó

class StreamReader((  K  de K  R

###m óings module API

def getregentry(O dreturn˜ ¡CodecInfo(·  » Õname='utf-8', » =  ‡ =  ²incremental2 6r=I Er/ J 	/ D/ s9r9=2R # w“#  # Ò)
""" Python ì a-sig' õ.
This work similar to UTF-8 with the following changes:

* OnŽ/~    a; 
ñd BOM will be prepended. `ten as_ ó
  first three bytes.a #@ing/ a  if3 1 _ are ~  ,/ Bse
 X � €skipped.s
import(h ]s^Ñ ú(input, errors='strict'oà£BOM_UTF8 +Z 	
K B)[0]¯ —  2len# "))‚ e ‚ ¡prefix = 0Í1if ± e[:3] =¡™ ¿ m & # =. 13:]?   R 3 A(outŸconsumed)­
§ q, True)B ”I +j )2DX € ß__init__(self' Ù  i>cs.M .C ½  9  Y .±A= 1
Õ  z "  ,IÓ, final=False¤  B 0if & E …   Å    9¸ ÄA + \ƒ  #  ' Œ”d Â w> JelseŽ 
s L M  Qreset…ù • t / C  Ê ¨ i Œgetstate^ ® 7 œs3 !, ? ˜ 3 " = † ›†‡BufferedÍ " Y  K7 ì U –%!_b¨ _> ê ž¦¶  �  À     if len(Ûinput) < 3:
  òif codecs.BOM_UTF8.startswith(: 6  E ý$# not enough data to decide if this really is a BOM~ H ÿ=> try again on the next call4 íreturn ("", 0)# Oelseµ éself.first = 09 5 1  ½ 1if $|[:3] ==L… ù(output, consumed) = \�  \  Ÿ€utf_8_de ˜þ[3:], errors, final E .w &+30 $  ^ >cs.m i ¯  def reset(()ï H ñBufferedIncrementalDÂ 'r.7 K  ©  E ž!1
  c Œgetstatef   vn 
B Y  q !# C ð[1] must be 0 here, as it isn't passed alongæ ¡ œ%erJ @(P F0], Í )Ê sÊ ,~ 7� @will� ¿ignored by NX Òƒ5  « � Ò   �× ó1]

class StreamWriter(j  Ô  ½é 3 6try5  ²2delZ enw ® ðexcept AttributeE
;  ÆŠ@ R,Äã“='strict'Å  w 3 p& ‰ 	 ©Y )>LRead> y >3 >Hµ >@ >bif lenˆ „#€y/# uÖq/elF;F ‘ t' õ¡ð)
            reóturn (output, consumed+3)
  õ# (else) no BOM present  àself.decode =  ’cs.utf_8_ * !ren #  1(in€ ñ&errors)

### encodings module API

def getregentry():` 
\ ¡CodecInfo(  Ê õname='utf-8-sig', h "e=  ½ =  ²incremental2 6r=I E´ /er/ J 	/ D7/ ástreamreader=S R R # Ewrit# W # ñ)
"""Python 'uu_n!' P - UUåÕtent transferir.

ThisÄB de/á ò s from bytes to	 0.

v òten by Marc-Andre Lemburg (mal@l ò.com). Some details were
adapteda ðuu.py which was ã ` ðLance Ellinghouse and
modified‚ °Jack Jansen ð  Fredrik Lundh.‚

importß s ‘binascii
å 3io & Bï "IO‹>BAPIs�2uu_
¹ò ='strict', files€<data>',Æse=0o666´rassert õD == ? › inD 3 = Š k ˜;out   92 = ; . K  J �7 . 
 ó# Remove newline charò c  Ä )  % =Ü ò.replace('\n','\\n'‡ , r, 4r')‚ 5f š ð(('begin %o %s\n' % (m`v& 0o777_3)).‰'Æ"')‚ €chunk = 2(45 @whilá 2unk5 r �.b2a_uu(@ L  &  P  w‘(b' \nendþ Å Œ V 
ó.getvalue(), lenÉ)K ,K,Jò	0  Å ? = 4ÒFind start of@0ed é< i1es; ^ (� V†if not s)   praise V2E±('Missing " " G A in 6w y ? €if s[:5]QbI'a Tbreak}ƒ· FTrue0 º R or sj :  Œ j  
   :try  15 = }0a2b}s"fexcept" Z as vJ ò# Workaround for broken uu rs%/Àk Lundh
      ónbytes = (((s[0]-32) & 63) * 4 + 5) // 3
0  òdata = binascii.a2b_uu(s[:O )])/ ö#sys.stderr.write("Warning: %s\n" % str(v)8 (  i  •if not s:Z ðraise ValueError('Truncated input > 1')
2 ðreturn (outfile.getv; �(), len(2 ð))

class Codec(c !s. )z `def en b(self,k 0, eƒ £s='strict'.  .z 3uu_8 k 2 Ÿ  W /deW #8 W É ÁIncrementalE· rÖ  µ  Œ « 	ã ³final=False* ß 	 ; .D)[0]Yv Dð �  f  � ä  U s� 4  ; �  pStreamW–!r(é , ‡8cs. ‹ àcharbuffertype >Ü 1 _ReadeL  L 2###bðings module API

	Ãgetregentry(I a¶ Ä QInfo(ø £¥name='uu', à=• 6  
  iK? 'r=Î^/ J 	/ ã/ s‰r==J# r# ¹# ‚_is_textl2ing°! ñ)
"""Python 'zlib_4'î0 -  Å compressionˆr.

ThisB de/rs from C"to	 0.

– òten by Marc-Andre Lemburg (mal@l `.com).˜ ‚

importd s “ 6# t~ òneeds the optional¸ m*0!

B 7s8 H eì�³cassertÐD == Ó<l(O  ¼ *Q )I ® ' _þ% v 0 O ¢S x ø ë . — ¾ÁÌ : Tß X  › /deX !: X �fÙ  æ ƒ__init__� àerrors='strictS'):
  õ
assert errors == 'strict'" Tself.  ) 
 ÷compressobj = zlib. 1()
/ °def encode(S ÷, input, final=False˜ "if ª  ± @c = = `  (Q )m  -   ®return c +8 fflush(0 Jelseo > r s  à Qresetß Ë ? $ðclass IncrementalDe- r( >cs. d  y �__init__| ,¦=Ì)  ð1'deßÎ 	 ô  ô2 I i. ø. Oobj.ú
<  x þ5 $	  2óStreamWriter(Codec,  Ôø	charbuffertype = bytes

L OReadL  L 2###ºðings module API

{Ãgetregentry(I 8¶ Ä QInfo(* †`name='*%', = _   ,"de   i37 'r=,Esr/ J 	/ u/ s�rC=�5# w²# ¿# ‚_is_textÙ 2ingñ! ñ>)
# Copyright (C) 2001-2007 Python Software Foundation
# Author: Barry WarsawL ñntact: email-sig@pG ñ.org

"""A package for parsing, handl
 âand generatingI ñ messages."""

__all__ = [Ã³'base64mimeÕ'�4set žs u @feedŠ $er � o h†  !EatorP      •_from_fil— 	 obinary   /ngT k ø 
Ç hquopriDutil¶ ð)]



# Some convenience routines.  Don't import Parser ¢M‘ó as side-effects
# of/ ¾Àl since thosõe cascadingly import most of the re ð"
# email package.
def message_from_string(s, *arg ò*kws):
    """Parse a ( ’ into a MC ` objec Qdel.
4 ñOptional _class and= ñct are passed to¬ ^ ár constructor.E 1"""  £ Ã  .p‰ rñ 9 $ rreturn  (Æ 5 ~str(s)
ü _bytesû ' Ä /ngvB¼ ô  Ë file(fppRead a & Ó�@ its½_tentsv ?(fp`inary_î b- ’6%ô:""" Routines for manipulating RFC2047 encoded words.

This is currently a�ð
-private API, but will beRqsideredi PpromoU
|`public6 ! iò reb �demand.

<v
# An eŒ ð looks like this:
#
#ã  @=?ch^Ót[*lang]?cte?Ê !!?=1 ø oq `nforma– s about C 0 seb e °module.  He8 t¬ Tone
#°`preferí EMIME8 ðnames (hopefully; you never know when ‡ðing).
# cte (ConŽ° Transfer E’ #  y ðeither 'q' or 'b' (igno W�e).  In
#�Qory o/ `letterê0uld¡uÃ   + in> Ç in practic
€is
# (al£#?)Á Àhappens.  Th#coZ 'a ß b  adêp entrieK :¢CTE tables<QYAGNI/Qnow. ã áis Quoted Prin. ,õ ” bBase64ƒ P meanÈ$ofÃù4 shœ `obviouµ '''Qoî@
# a@dicaq  byCñ  brackets (they0not¶¯qsyntax)2is )#
#) [àuntered in praòtctice.
#
# The general interface for a CTE decoder is that it takes the encoded_string
# as its argument, and returns a tuple (cte_X d; À, defects). “ >
# % „ òe original binary˜ 4was� ` using¡ À
# specifiedQ C.  'i 'N ña list of MessageD† ð instances indicatP Òany
# problemm u1`ed dur"  conversioni �charset'£'lang' are˜  correspond: sAðs extracted from+ ÿ EW, case preserved¹eœ¹ a8’sequence
¸Anput¬ r°0the5_J «Qwhich?Òn ascii-only Ä � EEach;òmust also supply a length functionÃtXÙ ¾£  Y¨ Q !of4Qresulµ¼  K cŸ  õ…main API… sö õ amodule­§", ô @calleÜ €
# referG0d bŒ4w!r,« ‡ G 2addF  appropriat…ñRFC 2047 "chrome" toÏ > dbR `can op= alSputomati¢  §aselect> òshortest possible(�ing.  Se‘bir docÂps belowô
# details.

import re
 ebase64 !in ÜQools
Ë\  E * ó _letters, digit) Temail( òerrors

__all__ = ['“f_q',
  '% . b.  =lenB   ( V T 
 !]
f0QuoÕÁPrintable
#
;@gex GdQò.
_q_byte_subber =  Iö.partial(re.compile(br'=([a-fA-F0-9]{2})').sub lambda m: Y  s.�ò hex(m.group(1).Ð “()))

defŽ 2_q(V1d):l " =Cñed.replace(b'_', b' ')* D Í N P, []
�dict mappž ô$irc  ˆðm
class _QByteMap(9 1):
l òsafe = b'-!*+/' +–_.¶ !('uC') +p N  ÿ P__misEÃ__(self, key s if @ in  .� !      À[key] = chr(? ¬   Oelse/ ú"={:02X}".format< X` 
0Wmap =")`ðIn headers spaces are mðapped to '_'.
_q_byte_map[ord(' ')] = ø

def encode_q(bstring):
    return ''.join(G Äx] for x in 5 L ?lenI lsum(leI )J Ò
#
# Base64
#Y !de¥ "b(® d¥ ²# First tryÈ ðing with validate=True, fix €the padd ¡if needed.ð ô# This will succeed only i#ñd includes no inc ² charactersH  pad_err = î ¯ A % 4g „missing_† Ã= b'==='[:4-; ]s  ‘ else b''= 2try�¡(     b6B.b6420; + z ,#)),H ’[errors.Iæ �P:ŽDefect()¨ &[]F )P ðexcept binascii.EW Ä ô# Since we had correct£0, t“Éis likely anw ¥ w ý #s 
 ÷ The non-alphabet¨ð are ignored as far ’D �goes, but  ð
don't know how many thereO Q.  So† }Bout +M _  ˜0seeãsit work8 · 	à  …
ä  èÖ[False× ; ÛCÆÞË 6 Ï 
 Ó # A# Ad[DmuchÎ dôcould possibly be necessary (extra. :P $is²)ð  3  7  ;! +‹'C G G
F 9  º_; … E ‰ ' ÙÌhpns when¾52ed û 'sµÙgth is 1 moreˆO ñthan a multiple of 4, whic8 
§: L  ô bpo-27397: Justv ¨;› ! s)r'�M  0way_ú€ X /, ÂeLength~3 /_b#Q( & .Š !('ü"')M  $J ðgroups_of_3, leftoveCadivmod8i2, 3@# 4 Úðs out for each 3 ñ`bytes (or nonzero fraction thereof) in.
    return groups_of_3 * 4 + (4 if leftover else 0)


_cte_decoders = {H R'q':  2_q, b b c}

def( Q(ew):* P"""DeQ 0 en ¤d word and  ð(string, charset, la ñdefects) tuple.
O úAn RFC 2047/2243V 0hasb form:1  	#=?[ *Z S?cte?� _| "?=- wC! '' ñ' may be omitted but] oia parts# Tnot b  ‚This fun“0expÃ ò exactly such a u ð (that is, it does K Pchecki ð asyntax/ � Àraise errorsÄ4theN i? Awell Aed),8 sO  0 
û ±ðd first from its Content Transfer E¿0ingT L n0  V `result  £€into uniô0 us  ' ”specifiedîT.  IfP R cte-jdØ Ãsuccessfully¶ Y L  ðaacter Q"a MÀ is added toc `s listÙ  Òunknown octet8 are replac	y' Ý '0 'Ó v s\\uFDFFµT¦ù o  �Ruage a  °Ped.  2 pdefaultÍ ( kPwhichÌ `rarely	 evÉ°ncountered,  qSemptyL� 1"""%_s@cte,~ñ, _ = ew.split('?')3  XR_¦! =õ @set.i‰4('*.  te! ’te.lower(D Q# Recy   ’original 7 bdo CTEã2ingÍb5=¦ .Ëó('ascii', 'surrogateescapeˆ < ,ï8= _êc[cte](& ¥ T< ¢ Œ û Üž 2tryï oª R .Ò(=a ‚except U"EÒB ®’s.append(ð1.UnI PableBD!!("šeYÛ ‡   “"contains_ aE >${}Ä ".9%atª )¬  J Õ |è kLookupç T Ð � $if¶ ]D != Œf-8bit'Q 2 UCuš 3("Uû«J {} Q I 9"inw;«ced as pQrš † ¦�Ðencoders = {
ñ    'q': encode_q,
 b b ƒ}

_cte_) ¢length = {1  D 9lenA   > 3deff ò
(string, charset='utf-8',  ñing=None, lang=''):d A"""E¦  @ å using the CTE< á that produces ñshorter result.
O P" òan RFC 2047/2243J ¡ed word ofC Rform:9  !#=?¼ *¤ R?cte?"d_� "?=- qwhere '' ò' is omitted unlesŸ 'D €' parame¨ ñis given a value.± ôOptional argument@á (defaults to L“) specifi®   !seO #toé à ¶    Ëbinary beforZ]it.  ‡ N 'ÿ 1ingå  ”5cte… Qr forh ' ¦ñshould be used ('q'N àor 'b'); if it7   (X ì )O YwhichöI ú#stë  d sequenceT  t ‚, except� !'q¿ –preferred€ !upP qto fivezßacters longer ÙŸA '')Ù÷P y t DuageÜ#to=Fy inë –Ã1"""F !if‘ òset == 'unknown-8bit'< ´bä=d .Œñe('ascii', 'surrogateescape')^ OelseF b3 ië  0is ½B ~qlen = Nc['q'](§ I ¸ 0 b0 P# Bia ward q.  5î’arbitraryN Z  ¤ = íœ 0- bs @< 5 ü  ‹	~d¼ 4rs[G ¼ !ifÁù  ä� = '*' + V ò return "=?{}{}? 0=".r3at(X"
 Òed)
"""Header- H�ser imple' á ðvarious email-rela„ ~1parG±rules.

TheB  6 Ðmethods defin Š–is moduleb  _  _ 
[ �  PrincipÂ"moºmš ‡ b5322, Æi Â followon
to¡ð822 and primarily a clarifica­“vIt alsoª  s
m  ëæ¡decoding.
!  Ž 0 go=ño considerable trou ñ o maintain backlñcompatibility withN  ¸ Å qe phaseî €le cleann!upè°structure ooqe generà 
9 q.  This¦ñer supports correct,Á 9 € by taggg Ðwhite space
aõs folding white space only when ñ%is allowed in the non-obsolete rule
sets.  Actually,' òparser is even more generousc `acceptƒ ðinput than RFC
5322 mandates,‹ 0low(   ðspirit of Postel's Law,Ç  ch?  ? ñencourages.
Where possible deviations from®  sto òrd are annotated oó ð'defects'
attribute� `tokens¸ tU ce.

Thé ²al structur/ 3he  foTs¯ ñ, and uses its terminology
w½ t  �ò
 direct correspondence.  æ  #‘implementæ ÷ requires a
somewhat different£ €t qused byñformal grammar, new  !s
+ Qmimic) Áclosest exisÖ Æ sQ P à.  Thus, it re(ð helps to have
a copyX2RFCÅChand�Rstudy`is codkI8o€ [$2str, Pat haÃÐready been unû�ed accor5to
u  ÓÏ a  " CthisA  a iþ°e very firsO!epÎ
+ • Rleave, ~  = @stepþ ôa higher level messag+ÙQ
will(2 alÌ Pdetec¥ ó line breakf wat need© `while
3  Z ~  6 `beginn  0end~³each headerÎ0out !ofÓ hT³List object®  ö0a l qsubclasQ
/ > ærecursive dataŠ+ef inal nodes›  ´ S
«T*#al€ s�   { < 2strX ˆse do noC
U ly� ¸x Ô sù
1butÞqinsteadãª
practicalÕacombin�Ê &ruá †s.

All  �Û þ• 'value' ‹ô bproducga
seman‰ `ly meaæAful = L at�K YØp subtreP È. @
allb"te(úà(no matter how³yA - ñthey may contain)c
singlr�, as perZ a~TiPincluüd'CFWS'é 0is 3in
! œa1al s æ Ý´  re‹ aone ex… é o
 � Ó< î`collap!Xinto Í *3Qs: inO   Š ò a 'bare-quoted-¢Y' (a  Á with no lea›€or
trail¦’ )d i“ ¹`appear½0etwì Ò  ` zÀ marks
is prðeserved in the returned value.  Note that" óall Terminal strings quoted
pairs are B @intoT Rir un% V Ps.

AJ ÆokenList andX óobjects also have al ? ð, which attempts to
b% ð"canonical" representation ofŠ ô RFC-compliant form 2subÐ ì ‘
produced6 ðparsed subtree, including minimal useI å  
òing.
Whitespace run"ð
not collapsed.

Comment t
ú �'content'ð Áribute provi�  ³¸ Âfound
betweeÌ†parens (° Âany nested cs ps) withS¦ 9 §¢@'def·¨ ¨àis a
possibly ³1y lö ll6 Ä =  Å  � €le creatf ! B.  Df ð 
may appear on Ø "  ¥/ © Waê bpositev 0of Çr ø
Ý ­ pvailabl÷QroughS'all_5 ä  O  V od.U(For
"ƒnotes x.7 g == x.H ’.)

Each ó ½ !a n j � ¡called a 'à !',,e5 5has £_type'
att#²Qgives¾ ‘name from ñRFC 5322 grammarô6 it6as.
Not)- Bnode¿� Pthere¬ ‰one non-2 \ ¯b¹WÔ: 'ptext'.  A  C ê�of printˆðascii characters.
It. ­Pin plb!ofåsX (cc /•-•)==
(q s.

XXX:Ye3'le2} eÐs.
"""

impor2
 4sys ò urllib   # For  .Ù.
�»L ’hexdigits “operator  ¢itemgetter  Temail ÿ_encoded_words as _ew(  Serrora 	A ð
utils

#
# Useful constanŠpnd funcKðs
#

WSP = set(' \t')
CFWS_LEADER =  | Ã(')
SPECIALS3 ðr'()<>@,:;.\"[]')
ATOM_END" - |G X
DOT_  -a Ó.')
# '.', '"p'(' do f°end phrases_Áorder to supÀBobs-  }
PHRASEˆ h "Ë TŸ 5= ( ì t/?=')) 1 „')
TOKENR < Û A@ (=   WP"*'%"eTRIBUT– 4 D ¼EXTENDED_AT* 
 • ð%')

def quote_stróing(value):
    return '"'+str ö.replace('\\', '\\\\') ðb"', r'\"')+'"'

# Match a RFC 2047 word, looks like =?utf-8?q?someword?=
rfc2047_matcher = re.compile(r'''
   =\?ª  À# literal =?Ã T[^?]* °  # charset 
:  ; : UqQbB];  ÿ'q' or 'b', case insensitiveW 5.*?S  	 ‘# encoded`
  \?=  x P?=
''\ð2e.VERBOSE | re.MULTILINE)


#
# TokenList and its subclasses
#

c & €(list):
¼   t< ±_type = NonÒ ò syntactic_break = Tru ôew_combine_allowed P ódef __init__(self, *args, **kwg í …super().- ' K & òelf.defects = []¶ f 3stre X Ãp'.join(ÇÀx) for x in “ )E ?repF á{}({})'.formatÑ 1.__\Å__.__name__,°  ´  ë m )‚ ‘@property@  Õ �g Ó !x.& 
Ô C if  ] Call_Lc wsum((x.) 
f !),A’j  ¹ ïstartswith_fws_ {elf[0].- G Tas_ewgT 0"""• ù Àall top leve
 ð	kens of this part may be‘�„A."""{ ³9@all(3 .}   D´ }comment Æ q    ˜ƒX ˆ    5 �.extend(+  c )¼ / àAfold9¾, *, policyZ0_re)  _p+S_tree4 1 = § îRpprin·, indent=''Y   0.pp„%   K    —J —4'\nÒ B_pp(L = S   Q õ yield '{}{}/{}(ÜM yU 
Ø S ý% §U£êâif not hasattréh, '_ppW ›   Ä @ + ' à!! invalid ele" UŒ  ; % à                ø'list: {!r}'.format(token))
. Yelse:   ±yield from 5 Ð._pp(indent+'! 'F ú if self.defectsM ³extra = ' D & {‘ 8 Q “ F 'ª ¢ G'{})P ¢ !, 0 ð)


class WhiteSpaceTUList(
 1):
U ‘@property  def value(¤ )Õ ¯return ' '7 �comments: ñ[x.content for x in@a if x.nƒ_type=='J %']Ê ÅUnstructuredÂ 	Ì  �E  zu4 'J oPhrase; p% 'H?ord2 Fworde ACFWSn‚ T
¬ Fcfws? OAtomp Fatom1 2 q Hõencode_as_ew = False!E /dWô G "d-ü  �¡cte = NoneMxcharset Dlang _ÉQuotedStringÅ E ¸  Õq, !-s- ‹iŠ	xÛ º …ª == 'bare-q 
5  9 !x.6F _$ – �res = []î  S § Cïs.append(str(x%re5 à ­ø Ï''.join(res)ý  ­Oppedÿ  î ä
d#ifŠ$ �; ¡IBarey 9 t ó  5~__str__Ý7  "  ã4‰
)F<_ R 
ÚC¡(•
ñ ˆæ ‡ Aum([P  Ï o["("],#  �.96(x)&Àself],
       [")"],
  �], []))
% ñdef quote(self, value):  / "if ö	.token_type == 'comment'*  . ²return str(I H  õ.replace('\\', '\\\\') 9  W  Ÿ'(', r'\(7 )7 #)'‘@propertyt  qcontentÄ €''.join(æ Àx) for x in AS 0sT [= .x ð]

class AddressList(T€ 
 "):º‘2 'a+ b-list'! Ø % e† xÎ W if xú$==h /']d mailboxd usum((x.' uá	T† )Ë‹ Eall_h y� 	+ “ 2
Ã¿º²display_namª—!if{7[0]«¥_group£0elf2 Y HDz 3 | íE[0]]i/elK �invalid-S L ¦ Q á 7 /esÞ 	û&— X â WÑ é 	È BMŽ 8ƒÑ B% Þ[BC B	É ‘Þh J J¶ œ$('w <, 'R4)]
0G2.[,$aif notµ1 or  ªÑ4!= ± d gÀ        retusrn []
  ñ
return self[0].mailboxes
" ‘@property …def all_% (7 !):  P aif notM 1 or  U ó token_type != '? f-list'=  A Ž   	 ð


class Group(Tg bList):¾ x ’= "group" Ø • /esÔ   æ G[2].P  È Q Æ 2f0’ >X Œ$Ìdisplay_name'º™ 80].+ §�NameAddrª'` o-addr'®_ Š bif len _ == 1cENone¸½ 
¢local_partj e M F-1].* Î Comai² H d& D Orout•
 ‹ % B  q__specÑ ) ÙOAnglÚa) Û/ˆ rfor x i­(  Hif xŸ@== '§ -Ð d 0 ¤x�&Œ Aá ‡ Aobs-	‡ ?ddr'Œ Ÿ	Ï	
ì À  Ä J ’ Ð    Oelse= 
Øquote_string(n) + x.Z R ‡ E'<>'AObsR�“'�•�u 2[x.!  } @®Ð== 'domain']
ð

class Mailbox(TokenList):

    t ¢_type = 'm' ' ‘@property* ñdef display_name(self):  J 0if  H[0].U 0= '. f-addr'.  2 ereturn6 ] � ¬local_part M ) K odomainG % C Orout?V s  G__spec¹ ( 
Invalid
i. -)“BNoneÏ •2 = [1 = ð 5 = ³   iÂ D²ÄX '˜óas_ew_allowed = FalsŒ Ý _  Å×Å P''.jo/÷uper().value.split())£ YtAtomh ë¼ 'dot-atom'8 OText< _-textæ ETrueZ ßNoFoldLiteral\ ’no-fold-l. ^ DYPAddrS�– Ý-¸U 
 +™7õ) pK G Sif leO < 3§Ç ¡    ,R[-1].X v -u "a "0]oÓ~  ¡.rstrip()+4 14  2 #.l% ª  §_ Ä‚set = se|.n)š J. 1) >Y ç-DOT_ATOM_ENDSd Ô °lp = quote_¤ !ng0e Jelse£=  ø 0 ”  ¤€ is not Ï
E Ô¡lp + '@' +šÛ ¤   & b@ObsL—P–Aobs-8-Ä
aD
NroPhrase»>ð -name'
    ew_cñombine_allowed = False

    @property ñdef display_name(self):  . ò res = TokenList  öif len(res) == 08 < èturn res.value7 €res[0].tY P_type@ l'cfws'E …s.pop(0)? Jelse%  iff ?[0]T �  � 	Ü ” F[1:]l Z /-1¬ ? « O-1][U ­ =-1]®  F 7:-1° +ret6ô‘ÎKUquote. y   0if †.defects/   3 'Tràö �for x inJ 
B  F Lif xZ ‹d-string 4   $  ~ • ´ ±) != 0 and + 
z  prí ‘post = ''* V   õ 
P"==¢1 orÉ q! 
h  P l /' f 

F g  ç# i  Ï j Apre+
_X. )+ËJ ssuper()Úõ

class LocalPart(3"):xë0 'l) R-part_as_ew±½² V"ñ J"3Î 0elfì+ _a 6 / 0 jê _ê m\ð# Strip whitespace from ‘nt, back,¼Áaround dots.f  RšU[DOT] !laÌ9DOT m_is_tlÙ •4tok—a[0] + Q 
$lif tok ¬  — gcontin  @if (œ ‰  �R  @dot'ð ¼  ;   ? 2U0  Í3D 
0 / ö isinstance(tok,öÐ/ 2f (3  È  T É 
0tokj"= XÇ v.appendR ž ¦	˜ À else:
       öres.append(tok)
 ý  last = res[-1] ‘_is_tl =   ðres = TokenList(? V1:-1]] `returnY õ.value


class DomainLiteral(D 1):
_ tU ¡_type = 'd- "-l. '" òas_ew_allowed = False= ‘@property) Bdef A q(self):  þ � ò ''.join(super()© Ÿ.split())S ,ipO �for x in g f  j Xif x.Ô š= 'ptext'(  , – xˆ 1¿MIMEVersion/bmime-v, -Ámajor = Noneÿ 6min ”ŸParametera p) ^ wsection‡ È kextend `charsel¯'us-ascii'bW |_numbernñ# Because the first b, òattribute (name) eats CFWS  asecond ­ #< ¡ is alwaysE ‚ 0 if  re Eone.7 ¬ ñB[1].ª  /   .? Ÿed else 0é O_ æ @Thisx apart o‰ Ð "handle quot^ jI  Ávs" hack©  œ  ¤” ¤4 ‚strippedÂ  W 9 ÊX ¹ -: /ng`  	¯ f (` 	_bare-e  A   m  ,   Õ - 4  5× .= $ %'' vInvalid¤
 4i0 -K AèE¤	ü¾	Z 
ÆI °.endswith('} #²GCxÄSŒÚ ›À·J V°H | $¾ ! =/&[0v › == 'cfws,	C ¹À   if token.ûtoken_type.endswith(
  ð('quoted-string', 'attribute –extended- 9)):G qreturn o .G ¥pped_value( $ Rself. ð	

class MimeParameters(Tµ qList):
> W Æ ¥ = 'mime-p/ '# òsyntactic_break = False@ ‘@property+ Adef ?  s(Œ Ê ð# The RFC specifically states that the orde)# oI · q is notc  añ# guaranteed and may be re@ Qed byO ötransport layer.  So we hav=±# to assume5  ¥ ò2231 pieces can come in any¤ Ø.  However, wL QoutpuÍ m1 Õ ä ñwe first see a given name, which sé @us a&Åble __str__. kâ = {}  # UsingŸ € preserv õdict from Python 3.7+D 2for\ ®  µ
~ ifz" .-ó'…  §'ï ¦  gcontinª  "ifP 7[0]S 8 !=
‡  7 L  <& =P þ'%()å  ?  Ê 1ameÏ #in§f Ï  s[X i] = []E  ‘.append((Ð.section_numb )„  i V ,{  tsoN {.items(>ñ parts = sorted( `, key=/ ‡getter(0`  ä \_W " =h Z[0][1Å §charset = 0 . 	ï ð# Our arbitrary error recovery—ðto ignore duplicatex p,N pto use 9 Àcñ ihere aI Brfc Š M  ù ðgaps.  This mimicVe² bof get"H ; )ot�c2len…^) > 18i±Þts[1][0] == 0%  i Ê & ¤1].defectsJ_ñs.InvalidHeaderD# Z K   'x R;’3(s)¦+d'2 C   – 4:2 " @# El¼)`*0* waosz`...notDÍ is †differen½ L   #”�P, but�€registerÜ " =tÛzearlier¼õ Õ2³Yi = 0ˆ M ®4.tsºðif section_number != i:
   ÿ$# We could get fancier here and look for a completeH ñduplicate extended parameterK ÿignore the second onM ÿ'seen.  But we're not doing that.  The old code didn't.š !if= Œ .›   ( ñdefects.append(errors.InvalidHeaderD# (t  I   'X fname;  iOd'))L continu.OelseÐ T÷"inconsistent RFC2231ç¯numbering"Í  mi += 1ä rvalue =F .'_ * #if% Æ?tryZ � = urllibo ñse.unquote_to_bytes(& � except Uniz!En  t ñ# source had surrog'qscaped s `.  Whaî} do nowþ  P  ð# is a bit of an open questio51I'mò!sun_is isN  �ðbest choice, but itf w’     i�algorithmnP :`W0, e5ßing='latin-1'kÙ
ç
 )‹  0.deªµ(charset, '‰eˆ„  I óLookupEì 0 `# XXX:éQre sh]�really beIbustom d ]NN €unknown ¼  acO°set to make«@easy _find,M øbecause otherwise _  Y _osilentL failurex ¼   1 =  ‡¯'us-ascii'Šåif utils._has_Â±ƒ ‰ [.vÚ!Un PableBÝÆ Ç F_par 
Ã ¢ = ''.joinú6 
) `yield ,"
tödef __str__(self)Û Ç as = []+  Û  ¡D ð in self.params:
  §if value:
  ñ!params.append('{}={}'.format(name, quote_string(G 9)))I ?els[  L 6 w Ò = '; '.join( # Òreturn ' ' +  4 if
  s Ð ''


class PÈ ð eterizedHeaderVò Ñ(TokenList):
µ ð# Set this false so tha e&ó doesn't wind up on a new line evenJ Òif it and the›  „ ¡s would fiV  re but notJ  * QfirstN .J ðsyntactic_break = F› ± ‘@property+ $def(self)ÓPfor tî Ì in reversed%  õ"if( .. ñ _type == 'mime-jÅ '[  6   ”8 .* s•  %{}”ÏContentType( À R Š 2 'c9 -š 'a Õas_ew_allowed w @main(  LBtext0 4sub Vplain)• ¿Dispositionœ #dA s £ Ï _3 } = None+ÀransferEncodo¾ î (7 #-e8 ’  te0F7bit6YLabel6x h` -l+ k 	�_MsgIDT omsg-idN 
 ‰  ÿ2folØƒ, policyE   Â# message-idæQs may}0be ; "edu / Ñ2str) kS .ë5sep¢MW 1ID(Î s 
�{ VwInvalid? I C i/ -K ¡Hœ € Ñ#
# Terminal &!es¬´instances
#¢( D(str)ÑATrue�§ew_combine’ Ì :  ¾Â__new__(cls,p,©ÿ œ ß¾ = super().8 , + 	ÎR y P Õ.defects = [] 2elfs¨ brepr__- „"{}({})",ƒ !__h __® game__,À P &))e lpprintc  .R P + '/r �ð)

    @propertyñ
    def all_defects(self):   ±return list .( !)
#  > 1_pp ¾, indent=''A ñ	["{}{}/{}({}){}".format(F  i   @ ,  � ÿ.__class__.__name__%  «token_type úuper().__repr__()  ¡'' if not l á ´ else ' {}'¬  D &)]ípop_trailing_wRõ# This terminates the recursion.þ r{BNone] ‘@property#  {ocommen¶[– á__getnewargs__±¦B(str ,SA)


„Â WhiteSpaceTÃ $l(	 /):© Rvalue[ \2' '7  Ò Îstartswith_f<ETrue� V[ ‚ ‹ , âŒ FFals� /EW  )$(@__stÌ ² È5 ''ð_InvalidEwError(e Ñs.HeaderParse D 3"""0 ñ encoded word found while parsing hC Ðs."""


# XXXËñse need to become 8ð*es and used as instances so
# that a program can't changeT @m in  ¯ Q treeL ñscrew
# up otherš e  ñs.  Maybe should have  tests forq Ú, too.
DOT = Gþ
'.', 'dot')
ListSeparator* ,*   $-s% ÿ')
RouteComponentMarke<  @< r+ $-c, !-m- �')

#
# £0r
#b ð  strings accordŠðto RFC822/2047/2
 ±5322 rules.H uâis a stateless0Ðr.  Each get_Ä€functiona 2ept3  s  u2
# …As eiu$a }p or a T‡ 4 oQesent¤  he¥ € object Æ`d
# byàp methoda ¡ n tcontain= 3rem  unƒ ed!áracters
# fromL °input.  Thu¼ , rb cconsumuð next syntactic  ðtruct
# of a given Rš ù !a à A A pluØ ž® Á 0der]  ô© Ï¥ÀFor example,• & �first eleê ;  Â ¦ Cured… Ù‘'phrase',Q1en:ù Y ð, value = get_phðrase(value)
#
# returns the complete ph' Q from ƒstart of Qring D ø, plus any
# characters left in0 Qafter ^ ðis removed.

_wsp_split& P= re.Ž ñile(r'([{}]+)'.format(''.join(WSP))).7 ú
_non_atom_end_matcher J 0"[^J "I @
   k eescapeX  ATOM_ENDS)_ K _ ïprintable_find_  ð\x00-\x20\x7F]").( 2all? _tokenŸ /_TOKEN  Ÿattributee /ŸATTRIBUTEi Ÿextended_r 8ŸEXTENDED_{ ñ
def _validate_xtext( !):ËÁ"""If input mõ contains ASCII non-Å€s, regisrÑa defect."""
L  O+ 1 = a  2  if` _# s•  d¥ .c ôs.append(errors.NonPXD… (| $))_ óutils._has_surrogatesƒ m pUndecodÄSBytesq a  ©   R"Non-0ÓPfoundÔ0heaû`B"))
–Pget_p‘0_to~ : siQ, end §VScan *õ/quoted-pairs until5 C and§2 un)  k .ªâThis function ÏPa run²qcent, c
 ñ-without-comments, ordÀ  -g ,ñ into a single st#by“    @< Þ S.  ItÃ j? ,`remainA S1and� ña flag that is True if…pre werey o  ãW �  Ò  @fragð 2, *s  Æ)= z±1sv¶Q = []’ (� = False ihad_qp pfor pos,¤range(len(~ ) ’ 4if  Ö[pos] == '\\'Ë& x 
    	}    œ  ;®  OelseO 0  8  ?2inu÷   2if � 
J  • -elï %inå
C Ubreak± †6	2§
Î  {=�1+ 1E Àreturn ''.joðTin(vchars), ''.join([fragment[pos:]] + remainder), had_qp

def get_fws(value):
    """FWS = 1*WSP

 ðhThis isn't the RFC definition.  We're using fws to represent tokens where
    folding can be done, but when we are parsO  p S*un*f5 ±has alreadyM Pbeen C 0 so<  do¦ @need† òwatch out for CRLF.Ò 1"""? 1newý 1 =  ‘.lstrip()  Ì ñ= WhiteSpaceTerminal(, R[:len  )- M ’)], 'fws'F `return$, # €Ãencoded_wordM ‰  - � = "=?" ðbet "?"   ' `ed-tex *="ë bew = En Wm ž cif notþ òstartswith('=?')Š  ð
raise errors.HeaderParseE (. '   ’"expectedŸ 1ed ¿  âófound {}".formatñ Š etok, *¬“ò[2:].split('?=', 1/  if[# =º ' ¯ Z…remstr =yº   (( •) > 1 and+ ÿ[0] in hexdigits# 1# €tok.coung') < 2µÑ# The ? after»pCTE was„ºlowed by an©×escape (=XX).¯ +stŸÂ œ Qtok =£ + ¹ˆ!stQ 0if  ½ Ú) Àóew.defects.append({rInvalid‚D# ~w¯s¯y insideÞ "")ždew.cted• ÕÐ6try   d,‹p, lang, ² A = _À  ÙH' +€ ²xcept (ValuEQ, KeyOÂw_ö !Ew  ñ %fX" i'e: '{}'nõ  ;Det =Ê 0ew.Ð ! =×  �0ext� Í `while " Ÿ3extà6WSP 1en,4 4 = ‰ C S  $   $ewH
 �continue¤  . ¦Q_wsp_f@ter(b C 3 v 1 = ‰áI ' È . _~Pate_x8 (  • ®   - [#˜Ä€s should6fol¨ð WS
    if value aó
nd value[0] not in WSP:
  ñew.defects.append(errors.InvalidHeaderD# (6  = à"missing trail	 ñwhitespace after encoded-word"))? ¢return ew,™ ñ

def get_unstructured(µ )¨ 8""" ô = (*([FWS] vchar) *WSP) / obs-+ n )   ñ = *((*LF *CR *(0 ctext)  )G 2FWS­ ?  # c = %d0e øNO-WS-CTL / LF / CR
q   °is control ¬ Ðacters except‹r/CR/LF.> ÿSo, basically, we have printable runs, pluV ±or nulls in� 0theÿ öolete syntax, separated by ³ñ.  Since RFC 2047 uses theK 8obsG  H÷its specification, but requires\ ¡ on eitherL pside of\ # #ðs, I can see no reason to need s¼  ; K Enon-- Ò P from* @! i{ Òy occur, so wå �parse thiBAto xøjtokens8BWSP  ºÄBecause an '‚ É'æP mustq`defini. `stituts re entirˆ ý,‰ ñ'get' routine doesÈG€a remain6 @onlyö  Ò 0d TÃ CList® 1""" a# XXX:·ðwhat about bare CR and LF?  They might signal` ‚ start oÔP# endÕ)anÔ .  YAGNI f�Qow, sfÁour current ¥ #rs’ Àwill never sT õ us strings withž 5or 8rG = UJû (ÓRwhile•^ Ì"if  &"   ë±! =®3fws¥¸  &   Š R> ~  #    Einue< m‡_ew = Tr š .nsS('=?' L   6tryÎ     x 
¶ ’_o¿ ˜_þ0EwE[ ¯ FFalsÈ  x E IBP[M †Nåpfigure Š0how÷PregisQ«B wheâ o  õ# appropriate here._$ 2pash Nelseß  v<_ws�5 xif len(ì^) > 0I  2 8if * Q[-1].›ï_type != 'fws'=  A > ®ÀDefect(
      ÿ"missing whitespace before encoded word"))
B ý have_ws = False( %if# ýand len(unstructured) > 1:6  n 8if * ó[-2].token_type == '¥ -¥ 'F  J 
G €1] = EWWó Só ŸTerminal(‡  A   E ~, 'fws') �.append(¸ + vcontinu6ötok, *remainder = _wsp_splitter(value, 1K 0# S ð in the middle of an atom if ù re is a rfc2047ß÷ #±ch does notº÷" WSP on both sides. The defect will be registeredO  ’ ðnext time through� g loop.* ðThis needs to onlyU pperform‡"heá ó˜ Ó gvalid;J ³otherwise, ?  á itÄ Qan in2 	‡ can cau¿#¦ `parser’  gob@ kfiniteÂ 1if X @_ew èhð _matcher.search)¨òäç.partition('=?f vtP0= V
ºF ' , _“ Pate_x6 (  ;©# Œ µ = ''.join(šF ireturn§â

def get_qp_cw  « ÷ Ar""" ñ = <printable ascii except \ ( )>
Ô !ot’ARFC @ ð, since we are handléð nested comments¶ P  œ`unquot-   ðed-pairs here.  We alloÇ0yth& —  ÍA'()'H ð characters, butfñwe find any ASCII ‹B tha» ¼ …defined û N / „, a NonPDa ·dŠ!toK#'s€ s list.  SM Õ  Õ  `converC 2ir  edµ�ues, whatOÒQed isM @a 'pÅ!' x @.  IÍ ‘is case i5 .a M’, so it'sc M ris ' '.Ú1""" _ ,& 0, _ó > p_to_endmsü ƒ~# / =}  ( ,¼ / $  ö   ‹ È ¦2ent� ÈC"""q @ = q#2 / {På M
pDQUOTE Þ KJ)NyJÀonPrintableDñefect is
    added to the token's d# ðs list.  Any quoted pairs are conver = !irP #un* àvalues, so whap ò returned is a 'ptext'u ñ.  In this case itN ) VJ ¡Terminal.
 1""" D !, m ±, _ = _get_ Ó_to_endchars(" F'"')9 9 = ] (8 ,› * °_validate_x± $  Ñ  6 c `

def „ a.  !):t 1""" Ñ = <matches _ _ "r>Þ ñWe allow any non-ATOM_ENDS in 2 P, but¾a an In¤ aATextD¼1 tos Ö± if we finda T  +qacters.> fmX€non_atomT° W‚if not mì  \ð
raise errors.HeaderParseE (b  '   `"expecNŠ  Ý ófound '{}'".formato p ) ¢= m.group( p" =Q[len(( 1):]p  ÷ 1, ' !÷ d ÷ |÷Rbare_s_string¶ 0"""" -" -" ò = DQUOTE *([FWS] qcontent)   A�= qwithoutÂðleading or trail °white spacegtù)!is7  «p betwee†eb € marks, a  F E IÒpreserved and/ zdecodedC#if“’0] != '"' ý("A'\"'' n
�� = BareQÒS£Ù=14» ê # [[0] =Å <! =Å8 ð “ �.append(E Œ Rwhile4
y >Ÿ  • fin WSPZ n T 
™ #fwk  & %elH ":2Þ '=?¤ $ eµ_ew = FalseÑ   :tryx   Q
| !en\_word 3   ! “)Uù\ú
X N   "w  w c insidå"d „&") 2   ñ :Truð oexceptÞ  { ¡# Collapse¡~§8wo Ö  Ê�at occur'ŸÀ # bare-quotÇed-string.
  òif valid_ew and len(bare_quoted_4 i) > 1:9  D ?if -  ð	[-1].token_type == 'fws'` C  G   t =[-2G îencoded-word')‘ J ÿ1] = EWWhiteSpaceTerminal(‘ 21],Ë )7 Jelseˆ ú ,Vöue = get_qcontent(value= õ �.append(E ) bif notP j ;  tdefectsC ‘errors.InàqHeaderD# 
õ ‘"end of h" ‚ inside ÿ ÿ"")‹  _~return € ó % ‘[1:]

defFcommä 3""" ó = "(" *([FWS] cL")  1")"s %   £ = ctext /Ç ƒ-pair / R 
1 ôWe handle nested ps here,®	? ¢in our qp-] rroutineO"""† O!ue> î¢[0] != '('Ù DSaise ¡š`ParseE³ž@xpecŸ ô
'(' but found '{}'".formaW¤ä C = CW � " =H€ Š Rwhile ³ 6")"³ Ù  Ï fin WSP  I ±ö<fwsñ(elH  H Ò L z!p_®= T ,¾ (o0 d:U "^ P¯S
 ÈHr�Å"""CFWS = (1@?r) / FWSÅ@cfws@‚FWSList(+0in f r_LEADERz  Ëë3)çæ%fwãK4fwsbDø÷P Ó 2""" H@ = [ø 0] <- > Y'! ñ' is an intermediate class defined by thisþpr£  ðe RFC grammar.  ItT &th½Àtring
    wiñthout any attached CFWS.
    """ ñquoted_string = Q S !()# Âif value and
 a[0] inN �_LEADER:*  Y btoken,( Á = get_cfws(C Q  ' 	x �.append(< $  
G Ybare_8 U 	 Q  Æ byreturn œ Õ Q

defCatomÊ G0""" @ = [±“] 1*atext 
l1An % pcould bžú rfc2047 encoded wordï3 0= As iB g „’ATOM_ENDS !ð
raise errors.HeaderParseE ( '   ’"expectedóbut found '{}'".formatb
õ ö.startswith('=?')€ 6try  f ’ h_h` ™ oexceptÁ 
[ ð# XXX: need to figure ¾0how õregister defects whenk  ž ò# appropriate hereù    ¾  T· Felse™ 2 è Ï2%l c  Z@dot_ _>ê á €""" dot- % =aT*("." )i*	M ` = DotGFText)3notû"or	 ,âÕQat a ®B of ¼ Ø  "Ê  è Ï  Rwhile  
Ö À ?in ®   � 	'  $ tb== '.'  &   N 2DOTÇ "   \" =Ñ A[1:] ifã¶[-1] is DOTe g…0end�
r��A'.'+ª )¾ º	ã Ã¾ ô&ðdot-atom-text [CñFWS]

    Any place we can have a dot atom, Ãould instead" ñn rfc2047 encodedO Qword.
 1""" @dot_I Á = DotAtom() ñif value[0] in CFWS_LEADER:   ž btoken,( Á = get_cfws(9 G  ' d �.append(7  f ÷.startswith('=?')e &ry  O ? 
v ä _à ~ ðexcept errors.HeaderParseE 
[ ð# XXX: need to figure out how õregister defects when ž ò# appropriate hereq    ¾   X_text¿ Felse¡ : S sB and»ãK`return²i¹Q

def2´ì 0""" ! =âò / quoted-stringbEither! *or" Q may P P»R.  Weñto peel off this¾ ß` firstæñ	determine which type of —  @  ?À.  Afterward†aspliceN ±the leading~ ð , if any, into  pC ad sub-Ø.Ø SIf neÜ nß aá ñ is found beforeQ ñ next special, aˆ í£ is raisedo AThe   ¦ ed# �  q or a Q„SƒH, asæá¡This means� '-Q' levl àformal grammark Ðnot represent~ n) ½ "a tree;¨ / abecausÉ \ñthat extra layerŽ¢ manipulat# “N  H m6bconfus% Pan it shelpful &§*	 ñ#erß
Ñ2 b = Non¦ 0if @ 3³Á(- '   `"ExpecJ'Ö'½'@S' but?šnothing."�†[0]=='"'‚ $
Û U _•
µ.†SPECIALSO Ñ Ä ½ ò  "í a'{}'".ƒe÷ 
•ë   Jâ !ifÞeÂ ÀÞ B ‚[:0] = [ä]¥dqMÀphrase(valueò):
    """ phrase = 1*word / obs- %  )  1 = ' !*( á/ "." / CFWS)
0 ÄThis means a^ ñcan be a sequence ofH ñ s, periods, andH q in anyM Ðorder as long ñit starts with at least oneQ P.  If? ñthing other thanO  ´ Ðs is detectedv ð ObsoleteHeaderDefect% ðadded to the token':   N ölist.  We also acceptõ :tha­  %ñ followed by a dot;L t6Ðis registeredî ¨an Invalidœ @, siDi¦ ±not supportV O Aeven· oÜ ’ grammar.¥1"""( èA = P!() 2try! üù `, valu'@get_G( 0  ' J �.append(5  !exrerrors.È `ParseE h A dsI 7  («  {   "? a does  &% ¯ "")Ž SwhileÍ  qÆ 1[0]4 æin PHRASE_ENDS› "if2 †[0]=='.'  { z ± 2DOTj      Ø {
Ù  C "$ 'O 'Ð     È # =¨ 51:]Jelse± 	ß =   ²ç + Ò ,   ? Ã  z_LEADER˜  ,   ‹  Lcfwsr +  .e)K á"comment foundBŒout atomu 3 _    Uraise‡  ¦ $creturn.…`

def o£local_part7 ¾ -   =M-§ Ð / quoted-strÔ, 
 _ @ = Ll Pk Ælb = NonÍ Î6 É ! =Æ Ã!ift¹Ñ  #5 ö-
A"expÅ Â $bu¹´'{}'".forma8Ó 	ÿl @dot_GmÂó	\  Ð `   �\  ' `  , �q!= '\\'<J ËÇÀ          raWise
  �token = T aList()  ñif leader is not None:  > 7 ‚[:0] = [) ] ñlocal_part.append(+ U ±value and ( Ô[0]=='\\' or  q ö in PHRASE_ENDS)| Fobs_g ,6 z = get_ V(str(+ 2) +- Ž  È :if 3 .¯ ñ_type == 'invalid-obs-J -Ü 'Ž  F  õ tdefectsý ‚errors.IF HRD# (/ >  "G ` uð	dot-atom, quoted-string,-
’ &")Õ 7els« _ Z ¡ 	�Obsolete¢ $a ¤ ø (contains CFWS)’ € [3
t
6tryU0 .ò .encode('ascii'ë  except Uni E" EpH ™�NonASCIIL·OPart�è Anon-? µ charactersø vreturn Ë ª_

def­ê è0"""™sÑ = word *("." 1"""@
Se = ObsÖ Õó
last_non_ws_was_dot = FalRwhile#£+"ifF îK= '.1 ^Œ ¸ ´  
Õ .Ä] N "Í� repeated™ "9 % s Å2DOTo #   K:Tru_Ô# ="1:% A    I'in3 'el:
ž VU…TerminalX, h  €'misplaci{pecial'Ð ž ¯("Vº outside of
 /cD<entÇ ë ? 	ƒ

Ú H[-1]){!= 'dotå
4 ½)€"missing°� betweens÷ 	B à Ëð , value = get_wÇord(value)
  õlast_non_ws_was_dot = False( ðexcept errors.HeaderParseE :(  W 1if f ú[0] not in CFWS_LEADER,  0 7raij   btoken,F ¼ = get_cfws½ ñobs_local_part.append(= â Jif (% A[0].! ù_type == 'dot' orÃ 5 	0=='� _' and5 	1j !==h )þ 
c „.defectsÅ irInvalidpD# (t "" À leading '.'q /")-£ 
6 /-2Z_trailƒ£82 'i›Q-obs-n-n'žzreturn ` ÐQ

defÓSdtextÔu Qr"""  ó = <printable ascii „€\ [ ]> /_ -- t  8 Œ  ! = ñ	NO-WS-CTL / quoted-pair
1 àWe allow anyth,a 0thel ðluded characters, but if we find8 I ðASCII other than A ÆRFC defined É + „, a NonPß Ø1 isN  adw !toF s 'sJ  ‘ list.  QÌ  Ì òs are converted 9 iÏ"unö Jâs, so what is ¤ ed 0a pŒ o ,@±this case a– V7ÐTerminal.  If  ure were\Ò ès, an Obsolete¾æ ‹ € ï î ­1"""ˆ ¨ JÀ, had_qp = _# p_to_end·0b, '[]'# 9 = Ï ( 1, ' * #if^ š ^ ©ì ª‹Pfoundmó domain-literal"±_ûPate_x�¦ Ç 1µWð_check_for_early_dle", i _i �¯é _ 
8 ¤°"end of inp=Snside‡ ð e 
ª@']',²0S-end'4º BTrueÐget_domain_liñteral(value):
    """ domain-li ñ = [CFWS] "[" *([ rdtext)  3"]"$ 
E  I _I DZ LY !()% 1if � p[0] in k r_LEADER’  – btoken,( ³ = get_cfwsº G  ' 
p �.append(= l 2notH ^ ð
raise errors.HeaderParseE «("expected"S ¿ o!= '['Y û '[' at start ofi % "á  å   ó"but found '{}'".format™ – " =í A[1:]F ðif _check_for_early_dl_(1 ,} µ u kreturn  •\ V^ò Terminal('[', '* b-ù "')¸ 6WSPQËs !G  Ð@Í : ¨ JFP	I¿  ]!]?end6vÚ ]  4endž%V 3andqÎP‘
A
def)ö ÛKåÓ = dot-atom /Û—r / obs-@   1 = 8 Q*("." /)) 2 = øñlbq = NoneX 06 
ü?if ß�  Ù   ì h½ =/
´ O…—… 2if é 1 isÌ  $µ     T @[:0]™- Û  ^ Û+ ®  0À domain, val±ue
    try:	  ñoken, value = get_dot_atom( )+ ðexcept errors.HeaderParseE O 
K #ifn 2and
 ¦[0] == '@'I _raisep ò('Invalid Domain'¥ Aif lš Æ is not NoneS të  [:m " [) ]Ý dE �.append(' Q  « .« ? tdefectsG +‚Obsolete3D$ (v  ~  "@ ´ `a dot-5ò (contains CFWS)")–  5 2if 7 A[0].² Q_typeG@ £  3 0 F:] =< Š Rwhile�î K ê 6DOT™   � 
T Ð PJ[1:]/ ™ N = ! creturn­ P Q

def§’addr_specX )é@"""  - ó = local-part "@"L 
÷ 1"""  / I € = AddrST ‚ � z Q _Q x 
D Ç  !if�J"ore ô!ô‰ .LõK B ú §  § ƒ with noü "Fa 6 ê Ò V#ð Terminal('@', ': ãess-at-symbol'^ 9 ç5 B | 9 Ÿ ’obs_routeV Aobs- 0 =  } ‚-list ":ø « @= *(mw / ",")4€ *("," [ 6] [M"])O O R²As anv ‚ †ñthe appropriate sub- ±s (that is,~ M RthereN Ä 0in L pƒq tree).8 Ôq = ObsR%Ôê<˜[0]==',' ¡!inzs_LEADER_ › Ä Æ
% † $   Ü V@Bcfwss �  '   ² 	    (elu  /,áB ÚListSeparatorn �=Œ"1:	ªžŠ ´   ‘"expectedÄÊó but found '{}'".format° Ô ÊãComponentMarkeÛ l ð domain(value[1:ò])
    obs_route.append(token ò while value and
 ‘[0]==',':? C ÒListSeparatorK  ( I =G 51:]B bif not X  4 Xbreak( E ú[0] in CFWS_LEADER6 Ä ,P Á = get_cfws(= ‘  a  	   "ifG  s W== '@ù    @ RMçComponentMarke 3 ž  bdomain  3[1:œ -   d B È ;ð
raise errors.HeaderParseE ¡("end of h  çpparsing-"a 7 W!= ':g   "expected6 P marka } "Ö ã B"obsw ò but found '{}'".format)” V¤õTerminal(':', 'end-of-Y -� 3er'D `returnï  / ~Q

def6£angle_addr€ hA"""  - @ = [‹`] "<"  ”-spec ">" /h -3 ü  ž  
J   ŠT 
D """HD © @ = A¶ Aµ /Ä7S3h 0 Œ6 or9 8<8Ù    D{ q#. © $<$& T d-startò «ñ# Although it isµðlegal per RFC5322, SMTP uses '<>'ªqcertainÚ ñ# circumstances. £ g>.¥ Ë 	>Ë 4endÉ  C@ tdefects!rInvalid(D# (–  >   W"null†'inÿ"Q ) 8  oŒ lh 2tryY * Š  T_T†5 oexceptåP ] a Qa  ,   ´ .@�ObsoleteA G  ã'  Õ Ð �ification%h �Sç  c �à
             ò6   "expected addr-spec or obs-route but found '{}'".format(value))
   `angle_D Ö.append(token!  !, 8 a = get. _r N 
K I 
#ifA 2and
 ±[0] == '>':?  C d  A[1:] Felse$ g tdefects¸ ñerrors.InvalidHeaderD# (H  b   à"missing trail	 q'>' on [ -"")  ï e V?ñ Terminal('>', '& 8 S-end'< ó æin CFWS_LEADER× f Hcfwsa ¼ k 	‘ 9 ® SreturÇ $ ¶Q

def¹Ãdisplay_name[ ƒ C"""  - ¡ = phrase
;ð
Because this is simply a , ô-rule, we don't ‡ 	Q G ¬ € containyaf ,®‰rather a9  5 BwithD !heB £ent of theD .« 1"""( Î ë B = Dú Nù .X "Øó F E.ext 2[:]G h .’" =¶  [Ê3 � 
¤ S¾ˆ ¡  gC = [E ®]»
 3 M 0 = ü RAddr(¹ a# BothA„optionaly× « _tx  can start � ¢.(ln e 1one ÿ èõ6 „ T ú H  öbif not8    craise úó`ParseE
÷ / 5 Ô (œ Ì Í W!= '<µé ¿PHRASE_ENDS« U/ª  æ Ú .^q£ ³ 2if q ^ ì7NonõÖ P[0][::" [0 #      ‡   ìÅ~ _ 
‚ð0 *¢ H › } 	# ˆ qmailboxˆ Àe):
    """ ðmailbox = name-addr /  á-spec

    """ ÷&# The only way to figure out if we are dealing with aY Sor anJ c 0 isJ €try pars9 ‘each one., £ M­ !() Atry:	  £ ðtoken, value = get_Ñ _g ( 5 ðexcept errors.HeaderParseE P ] a  \ _&a  , e  , _raise� (à  +   ¤"expected óbut found '{}'".format“ õ ôif any(isinstance(x,s rInvalid
bDefect5  n  ‘for x in na.all_d2 &s):˜ .$ @_typ�"'ig - 'Ù  �.append(2 } dreturnä ØQ

defÛN _A í ”, endcharŽ ð""" Read everyth[ upm±one of the 1  Ô = .ô@This›qoutside, [±l grammar. Aœ  T‰ÁList that isê Ð ó ed acts like a 3  , Ã Œ ñ data attributesMNE ‡þ : = „  Swhile2and
 x[0] notñ »&if% æin PHRASE_ENDS$  � ÀV}‚Terminal”A[0],¼  7  ¡'misplaced…Rial')C Ò# =¯ 51:]e Jelse® WCbphrase£ 
Y Û D * Ë ) ` £m¬D_lis�—  – - C = ( d *(","öÑ)) / obs-mbox+ å 	 ô = *([CFWS] ",")@ N [] !/ $ )àPFor täproutine½ goÊï 3PorderAcimprov¸— @handöâ.  We recogniz84endo� ú Ja*e¼$ O á 1�t a ';' ("0groÂdAtor)…ª"sospwe can AK ª{es into4Ó s )…continue�1anyJ `remainG4R õ  also allow  q entrieårbe null k ‚�conditionpH )àppropriately aÃhigher level¦Wn$ =Z ‡ Àand value[0]£ != ';':
  6try   ñtoken, value = get_mailbox( );  .  Ñ_list.append(B ' ðexcept errors.HeaderParseE 
} l y = Nonei "if“ ú[0] in CFWS_LEADERB  • F 
Ä OcfwsÁ  0 bif not` 2 or	 i (',. .  û z ü ,   	0 tdefects3‚Obsolete%D$ ( I  à"empty elementc -Ž.")‡ Nelse/ P ´
2zinvalidþ , Z  D 2if  1 isQ Åo  / s ‚[:0] = [9 ]ì Ö d	 P  	/ hIÛ g	 Y i(el¬W== ',p¦ 
�(þk únö	+ ò,"îèF and5 K!in(
ýÄ# Crap afterMû; treat it as an  .T# The; Ð info will st Êbe available8 !$ =< V:[-1q' . @_typ'’ - '’ + 6$Q O.ext7  )" ® .Ù(Õ/Ç	ž üÚListSeparator'># =)"1:|ireturn˜Oa


def�QgroupÃYA"""  ñÞ /%ð  / obs-group-liCst
  òobs-group-list = 1*([CFWS] ",")  
0 1""" 0 _0 G= aList() Ñif not value:  j 3 ñ.defects.append(errors.InvalidHeaderD# (>  B ‘"end of h" � before X » "")€  , breturn ¨ ,� Q lA a= None "if B and
 p[0] in v_LEADERË @ R Á = get_cfws(ó … 	 Ÿ ñ# This should never h u ñemail parsing, sinceŠ ¡-only is a¶  J   ò# legal alternative toý  U a p, whichE @the Q L HplacW ˜ Iars.( wZÏ% º Ói²µ Ï , r  ’ 2nd(ˆp & ù
 ! ë áf== ';'Ù   g 0Ztoken Ò1box1'qif len(2 S.all_) fes)==0š (   ¹ ^ » ¹ Û 0ext{x A! ¤�Obsolete¥D Áø with empty entriesÔª
ð ¸ ‚[:0] = []Ÿ~ f^+ ã r A
defÆ?  ^2"""9ñ = display-name ":" [0 í _] ";",1 = '#• 
"] _] ‚ Ò E6 oržW!= ':½craise M¡`ParseE_ ("expected5 C at MÂ  Ö F  "Œ  Œ ó but found '{}'".format£ YE q 	 Vñ Terminal(':', '! -o X"-t" Ctor'ÐV# =ú "1:êÈ
³Òa š ‚ ;‚ u  0­[ Â l |À ‚ 6 4Øk s . }!N"HÀelif value[0³] != ';':
  ð
raise errors.HeaderParseE ('  . �"expectedB ñ at end of group but found {}".format(value))G ' �.append(V ñ Terminal(';', '! "-t Ctor'9 E 1 =  A[1:]O "if B and
 ö[0] in CFWS_LEADERç btoken,( ³ = get_cfws¡ Q  ã ƒ ¤ 4 ¼ breturnê F Q

defI daddresL t C"""  Â = mailbox /B 
p õNote that counter-intuitively, anA õcan be either a single !orP `a list‘y Res (ar ñ).  This is why the rÔ Bed AÀ ³ object hasP '¸ þes' attribute which treats� a ‰ alengthN ðone.  When you need to differentiate between ñtwo cases, extractµ û R ƒelement,‘ &is!¸   o.Ô Í.z1"""B a# The «ðl grammar isn't very helpful w¶ 0par} ˜$. ÙN  Šn Â, especially> €allowingn ‚ obsolet{ ps, star¹fw M àsimilarly.  It¹$onN  B�reach oneòP@, <,ï :R ! CknowL wfõ	you've got.  So, we try H 0in æ�  ­ AwithwCmoreL `likelyu  E0two×eÄàld perhaps makÜ0is : ó efficient by lookingO f¤aphraseËtm`branchƒ �based on‡ €next cha1er,t BL Pwould*ñ
a premature optimization.) $ =ú(å2try½ 
0ë1Û2oexcept=L Y ] ³_  * c  , Ë / ÏÃO'{}'Å+ #! :
%_å !* C = (E U *(",H@)) /;- -H Î Ë 6obs ` = *([e] ",")(N [? Qess /*"])`We depˆAfromn@hereÀpcontinu�0to qe until5 1end— !of Áinput, assum2 1he   ä Ô@ntirPQcompoëAf anC © ë À always truK   e:‡ 0ing7!d m2s uÈÀto skip invaðlid addresses to parse  itional va$ áones.

    """ 7 ’_list = AF aList()! Pwhile@ 1ue:  > 6try  Roken,' s = get_Z b(valueL  *    u �.append(tB ' ðexcept errors.HeaderPÖ E 0 as 
„ l% u = None«  p "ifš ú[0] in CFWS_LEADERB  , F 
Ë OcfwsÈ  0 bif not` 2 or	  i n== ','a  5 y  (  	0 tdefects9#‚Obsolete+D$ (M   "R -øþentry with no content")Œ 7els I  ¿
6!inv‚_mailboxA,Y  G 2if 1 isT È@ / r ‚[:0] = [9 ]ð ë 	nè!([F ]ë   c 	: wIå v š ­ �d ‰s(elºQB à ¦ ï"empty element¡ T'j 	 n 	6 Vü"øòF andM!M Ä# Crap afterR ; treat it#4an z …."c# The  Ð info will st Êbe available8 2 =w |j[-1][0„* .©“_type = '• - '• + >#P O.extS Ò9Ò! :  # Must Zú , at this pointb	~´VIðTerminal(',', 'list-s×eparator'))
  �value =  A[1:] òreturn address_list,# ñ


def get_no_fold_literal(C !):A p""" no-  -  ô = "[" *dtext "]")  M £ = NoFoldL] ¶ bif notŠ i  Ë ð
raise errors.HeaderParseE (_  '   �"expectedž óbut found '{}'".formatÕ ~ ä ¯[0] != '['„ ,ð'[' at the start oà 
6' ¼   "§ K�.append(Vêû Terminal('[', '£-† #ì Stoken! =	Ò*n‚ ; KÉ2 orÒX]X.]X?endVY]V4endTY!O_cmsg_idWið"""msg-id = [CFWS] "<" id-left '@' £right  ">"% ”    ( ±= dot-atom-Œc/ obs-F - I . 6 @ 1 A & ÿ
í • = MsgID(%„6and"0in û r_LEADER ^J™CcfwsA–  j 5 n “<“-¸¿
¡ ¶<`L ­!# 	ú.?try6
@dot__?oexceptiT a  ›#aó is same as local-pû‚add-spec§  9   £
ØAobs_; _; £  1   Etdefectsî#‚Obsolete+D$ 
' C #"o' >0 in>G-id"E S © / ­
°(orP
!8  gÀund '{}'".foòrmat(value))
    msg_id.append(token qif not , 2 or	 ±[0] != '@':> B tdefectsJ ñerrors.InvalidHeaderD# (:  > ó
"msg-id with no id-right"   $ ø# Even though there is. @, if µ local partf b# endsa à`>` let's just( ÷se it too and return; Ralong< Bthe å .! "if= + "W== '>" Ä 
hV‚ò Terminal('>', '	W-end'ü  < Y " =k E[1:]€ ° Å,!  o 
@o ôaddress-at-symbolv n P# Par- 6try	=… ô = get_dot_atom_texx  sexcept &a E8T a  e  ó no_fold_literalßg  2 k V as ep  1 	Õ     x  ldomaino  -   ‚2‚Obsoleteù  C   #"o+ 0 inñ8-id$ , ê 
å  0 _raise„
§ /   à"expected dot-Û-ÛP, no-…-… 2Eobs-Ï� F  ÿ" but found '{}'".fo¢¬ º
 } =7elsö¬
ÃÀissing trail	 \'>' o¦e j`æin CFWS_LEADERØ¤ Lcfws¢
‰ 5 óNR

def*³_message_idT | 3"""  ÊÝb=   "M/ S-ID:"³Q CRLF1""" : c_id = 2 2ID(’ 	‹ª 
`Ë � O  ~ S Ž; S %x×  K 9 Í´unstructure s  3 = 2Í F   U   P  ' N 	+" Ve: {!r}>3ex)BçÀ
        # Vó$alue after parsing a valid msg_id should be None.
   if( 5ue:   ñmessage_id.defects.append(errors.In^ qHeaderD# (B  F ð"Unexpected {!r}".format(v° A)))
3 vreturn t ð

#
# XXX: As I begin to add ‘itional h~ ò ð ers, I'm realizówe probably
# have two level of7 ð routines: the get_XXX methods that Ò a token in
#* ²rammar, andL 9  Œòe an entire fieldpp.  So
#\ ô_address_list above¯ Î  ly¶ad š E, asß .  
#)  Â óunstructured.
#

deð Ó_mime_versionˆû@"""  - ô = [CFWS] 1*digit 4"." 
 Î1"""ÖT# The) Àis implicit Ëò he RFC 2045 BNF�óDThis–ó is a bit verbose,ì Ñ factor out aE3intN  Ì é ƒ = MIMEV÷ )¡ bif notŽ ´7 üõ0Mish�RequiredVÓ
"# |  Á  tò number (eg: 1.0)")�  } 
¤« 30[0]? —v_LEADER¹ Ÿ,Ï ! =CcfwsäG  c 	à Ô; † =  O $"E ž"ð but found only õ ,�as = ''Ù Swhileû  �-a!= '.'£  õ!inP EY "+=M 1[0]`  ­ @   "1: ,8 1.is	 &()—	p3L(_major.	j� sk Ä   	‘ ½’Terminal(4 “, 'xtext' 7els%	F ‘ S= int= M	) o x p ™
½¹Ãþ.Îë d Õ uHÖ!if,`.!isR a+ t$ H ð
"Incomplete MIME version;ó found only major number"))
  •if value:   ðmime_version.append(V' ‘Terminal(5 —, 'xtext'Q xreturn B [  S c'.', 'v ¤-separator] r " =¯ A[1:]W À C and ö0] in CFWS_LEADERÜ btoken,( ² = get_cfwsÎ ¬ ; # bif notF \ )ifõ .r!is, ?Nonc	tdefectsñerrors.InvalidHeaderD# (õ  £ ó"Incomplete MIME A;þ­±digits = ''q Rwhileñ 
i mE +³0² ¹ Ì P 8 1.is	 &()c	˜4$’"Expected.Tminor4 C but>Ñ{!r}".format(� 's)í	‘ (4 )7els	F ‘ E= inq ƒ 7	) o x <&dç¿>0cesU n-ã €b afterÑÿä7© ¥A
def7iœ_¥SmeterDî ñ""" Read everything up to the next ';'.
Úñ This is outside# ról grammar.  The AParas   TÏÁList that isP ¸ õ ed acts like a 5 ,Þ ‡ ðdata attributes are ¨— 1"""O ê - =Š (' !=ð  É�[¬¶PHRASE_ENDS$ ( f"� A[0],±  9  ô'misplaced-special6E z  
È  '
bcphrase 	¢ [ß F TÎ + d 
’t
Ð(value):
    ñ"""ttext = <matches _ _ ñr>

    We allow any non-TOKEN_ENDS in 3 ñ, but add defects to the token'sI  ñ list if we findT F Ã characters.x µso register[ 1forP Q*any*> ñprintables even though� ñRFC doesn't excludÏ 0 of !m,J qbecause’ oì  ¼ `spirit*  E R5322.1"""7 ‘m = _non_æ D_end;q(value)& ‘if not m:  Rð
raise errors.HeaderParseE ('  + ’"expectedhgófound '{}'".formato p K¢= m.group( ‘ 1 =  Q[len(( 1):]p  @ = V¸ ‚Terminal# 1, ' 'I °_validate_x?$  Ureturj ’

def get$©  ‚ Á = [CFWS] 1*j  m@The €‘equivalen’( !is•�US-ASCII@sçóept space, ctls, 3ˆtspecial`?tab?
ý� pimpliesF ¾ ›!isìñexplicit about it)che BNFG D<@ = T­"if¨B and
 0[0]D  i r_LEADERD $B ,( ! =mCcfwslß ' m( �.append( ·n ém ¼# Ü !¼ ) 
Ë êÌ È 6BíŽ ³ îAattr)@4""" d = 1*(R’ATTRIBUTEV)‚0 4in X ‰ô%'sI‰I LŒO ÐOfor Œ,P othem, Œ- Á _ibute�L h  â×O{!r}“, –+ ™ œ 4, ' ¢ à)
    return añttrtext, value

def get_attribute( ð):
    """ [CFWS] 1*#  <  
" ñThis version of the BNF makes  ? ñ explicit, and as usual we use aK y Ñ terminal for@ 0act+ !ru` ñcharacters.  The RFC equivalent ofL ¬ i… ftoken = a, with` @subtS Á ‚'*', "'"ª A'%'.Q ñWe include tab in< !ex  d set justÛ Rwe do¿  v .)1"""I  š iiE = Au) "if—%0[0]l  Dr_LEADER™ �Ô É! =ÆCcfwsÁQ  ' q �.append(8 q æATTRIBUTE_ENDSt ð
raise errors.HeaderParseE (t  x ¡"expected q ó but found '{}'".format® � ) 
Ò  ¾  u( b   CÒ CEureturn ” ¿ Z�extendedcË U0""";   ê = 1*(any non-‚»¢ plus '%')X�ðis a special parsing routine so thatmSget ad  OØ°s % escapesÆ a E `le strN `(whichE hdecode$ G ( klater)õ™m = _non_ÄÈ_end_matcherå‚if not m' Q|"q ¡fˆO{!r}ˆ’‚m.group(¡”" =BT[len(+ 1):] @ = VbTÏ) 4, '” -- '^ °_validate_xª 3  i  h[OB	Ë‚ ”Ôqis likeç �3 íQexcepVvallow %¤$s,uðwe can pick up an enCdHJn?Ð# XXX: shouldƒ@haveH E\I  TsQList?{  bnŠšEXTENDED_õ¹û&Nð but found '{}'"ñ.format(value))
    token,  ô = get_extended_attrtex1 0   Ñibute.append(A L #ifH 2and
 ñ[0] in CFWS_LEADER:F z Ccfwsž ' q 	ureturn # È Q

defË ssectionT | ñ """ '*' digits
i AThe ñ2l BNF is more complicated because leading 0s are not allowed.  WeO PcheckQ ` that Áadd a defect) ° also assumF $ y M � betweenP 1the³  I   » �, though  0RFC>  � ñcrystal clear on… .I  è õcaller should already have dealt withç  ».%1"""E UC = S_ÿ  K&or !=¾ ~ úð
raise errors.HeaderParseE p("Expecsi Ôbut found {}"Å‹  N  � îR ¼V	ó Terminal('*', '# ƒ-marker'9 E # =Ô 11:] !if  &or a[0].is§/()ù 'pnumber  {ì =  ")ž Ç ’ as = ''Á RwhileÕ ¦, ½ < +0 “ 7 4  a== '0'e   &0'y.$s¤'rInvalid.)Â    "C  8‚has an i; Ó#0"/ ./ b= int(ž Ò! ë
/) 2, '	 *”; ’“,‘ quoted-str\/Ó
{Av = † (¡ �J`‹ ^5rend of … "b  ï‘er = Noneræ ÖÜ6 ý WÝ¼ ; HonlyH« Ü  ²" é
Ó ¶_1Ô$Felse�:  	dP? !if­$erÓ }P ‚[:0] = [À Œv5r ÁÀ return v, vð
alue

def get_parameter(v ñ!):
    """ attribute [section] ["*"] [CFWS] "=" 5 
4 @The  ñ  is implied by the RFC but not made explicit in! ¡BNF.  ThisK s@ fB tform of& Q from  T "isO ato con+ Ewith  1BNFP °through som| ðtra checks.  We do it this way because ñmakes both errorN õrecovery and working x `result ñparse tree easier.? 1""" @# It,spossibl=Òwould also beH°citly allowSRetwee7˜O  �  n¥'extended-Ã¡' marker (! Q*') ,’Òwe've never sW #atP œ wi‘  ë `e will^ refore ign  T Æ Rilityç YE = Pa)X btoken,9! =„§ „( @ �.append(5 @ !ifGy2 orI ¢[0] == ';'À ÄA tdefectsI Æñs.InvalidHeaderD# %("ª  Mbtains ª N   ¡"name ({})<"no}  ".z#at¦ )¨  1 qreturn Š ó Ü "if: · *· 6tryÄ  E ü > 1ø/ *   l .! ‘ed = Truev     # Z  bexceptí"s. PÈEÿ
™ 2pas¯ 9 —
' _raiseR Â("Incomplete( Œ"C+	 x 	Í VÃæTerminal('*', *  ^ -'© J R=š?1:]5 ZW¢ W!= '=Íü r $foãyF · ¿á =á ! Ø  se 4torÛ Ó löb = NonÃ Ò5  š!inÐv_LEADERÕ‘ LcfwsŽ Œ m¹ 4 Ö˜remainder‚ ŽBto =|"if .w ã  
ª  û"w’# Now foròÀserious hack¸�to handleË’ common i� case of�  P# douŸõquotes around an – ’ K¹!acE(�û P ac“ðd as encoded tha“n't reallK 7 ˜qstring, ? Á— "d_ „ðinner_value = qstrinóg.stripped_value
  @semi –id = Fals õif param.section_number == 0:A  H €if innerI hue and 0[0]4 :"'"6  : 	 'Tr™   Nelse4 ÷token, rest = get_attrtext(† )¢  N "if4  Ÿ  = ˜ 	 0 œ ˜ ?try© �extended² nexceptU IpassÛ �  ½ aif notñ D  ! Þ 6if  
= ñdefects.append(errors.InvalidHeaderD# (©  v €"Quoted Ž1ng ŒT for s’eter is iT *")Î‡  qL 
"  S St in  
Ç  Š Qif t.KP_type¢q'bare-q¢ -V '9  = �t[:] = []á   ™ oto = t! Ybreak 	=7  ápremaindŒF Non³ ~ ¤)Pöƒ–marked as @but á õ ars to have a "®  ƒ   "H
ê@thatØ´non-encodedÜ#if Ÿ ±& =ö 
 ,I K ( #'w"orzí>ì; M 2 orh  § =!= ß %Dndto'œ ƒ     ’Ë!is² Ðuaassert! ~ ä v 5 = "	" breturné B 7$€"Apparensditial-Y-’ 6‹ttribute.2"waû n 4or  !inZ  Ž8 ég 8ð
# Assume the charset/lang~qmissing¨   š    I .7+Mj Šrequired‹ ¤delimitersÍ  840æÀaram, value
     else:

   ÷if token is not Non  " ‚for t in( :      B .D þ_type == 'extended-attrtext'8  < UbreakŒ   tK B 	' ’appendto.	 9(t) õparam.charset = t.value$ 1if  ª[0] != "'"  ðraise errors.HeaderPL E ð("Expected RFC2231 j õ/lang encoding "m  ×  ñ"delimiter, but found {!r}".format(¯ )æ ø Và ó Terminal("'", 'ž -^ 'A Q # =51:]° C and 'ö,$ t = get_¯± U  ´ ? Ó  # ¹J=qº % !if«Â "or€ Ë 1 ÏTÇÅ^Ïif remainderØó# Treat the rest oÀ as bare quoá0strÍ…content.ÏAv = s(ÀRwhile�
NQ £jin WSP   £
K?fwsF(elP  n"^ P ¥ Ö'"', 'DQUOTE'º  �   R  
9    i 
¹ q/¾ v² vƒ G  �c
k  
c ª ` \fassertUl ‹  ä n & =V qreturn ³2 @
def �se_mime_ DeterËú0"""&  am h *( "; !)
a €That BNFÄñ+meant to indicate this routine should only be called afterK f7 !ngÓPhandlÖ þ1lea¯°';'.  Thereo Áno correspon  qrule inM  8 —ls gramma» it? àmore convenienÑQr us K0he •!ofL ! Ý @be t™ ¼ °s its own T+TList. isf  'p”' because it| ðsumes the remaining õ@value, but it
    would never be called to parse a full header.  Instead it is . K 2  J ðything after the non-parame † ô of a specific MIMEg 
O 1""" Umime_= ”s = MimePN 1s()' awhile [ :  Þ 6try  Roken,' f = get[ (= N  ,   } �.append(tG * ñ except errors.H-P@E 0 as 
‰ l% u = None°  s "ifŸ ú[0] in CFWS_LEADERB  , F 
Ð OcfwsË bif not\ J é a ê  u   {return 6 È n== ';'v 2if b  N ž  '  r k Š? ¡ / tdefects7 «rInvalid²D# (Å  z   "�ú	 entry with no content")ƒ NelseÈ 7
®i‚ † ‚ +W   [ ‚[:0] = []Ê Î O   . C-ë  Z	Ã{!r}".formatTH	B and· !K g# Junkp�otherwis&ids Ù.  Mark it as ##   0 wiú av.1 , =:[-1y( . “_type = 'k '[ - ( k ?ext¤ Ò<Ò ` trailý_text á
Ò`# Must�a5ê at this pointƒ¢ÐVæñ Terminal(';', ' ~0-se Gtor'l ä# =k"1:Çê»
def _find_† ÉClistÂ)à €"""Do ouh stc >  ‘ sò$an‹
îàif value[0] in÷  PHRASE_ENDS:
  ðtokenlist.append(ValueTerminal(v ù[0], 'misplaced-special'))K , 1 =  E[1:] Oelsew  ,+ Ò = get_phraser 
Y ¤  $ bif notI c areturn€ , á ð';', 'parameter-se 4torÞ @ °parse_mime_+ 7 s·  õ ‚))

def ' òcontent_type_header+ )­ €""" main  � "/" sub `*( ";"F ™ 1 )
Ï 6The1 0and1 s2 Aare ­ ñs.  Theoretically they couldD ðbe checked against" P offiØ` IANA 3Q + x-T �, but we@ ádon't do that. 1""" c‹ 2= Cø RType(©ârecover = FalsI ½D „.defects—�errors.HCñ MissingRequired³(€ Ú"#  � ˜ ¹—fication"¿0 z H 2try¡ Q Ø­ Ê1 yexcept § P*E¹ L c Ý rInvalidä D Ö …Expected× < Ÿófound {!r}".format¢ ê ]_find¾– �¯ ø ' ’- ñ # XXX: If we retáwant to followa” �l grammar,  sh•B makB# maÛ·€alized T°ñLists here.  Probablysworth i–`2 or&¯[0] != '/'–5¸• µ ^"ifz p  ^Š0þ=ú.£ã.strip().lower	»1ä '/)-½ Y Ü&•U%j‚‹ ²½:rÚª]×;×À   ctype.def÷ects.append(errors.InvalidHeaderDefect(
  ñ"Only parameters are 4 ú after content type, but "A õfound {!r}".format(value)))) ò# The RFC requires that a syntactically i¯ u -u · be treatedP òas text/plain.  Perhaps we should postel this¸  wrobablyP o"do—  ifH ñwere checking the sub’ à å against IANA.K Pdel c& P.main	 , > * ¶_find_mime_€(< ,ƒ&ueAbreturnI A ' íVpõ Terminal(';', 'S 0-se Ctor'’	< ]parse† â C[1:]3 	€ @
def33se_á_disposition_hm:® G""" # Ø`*( ";"I |4 )
-   1 M B = CˆDi (bif not1n  ß= !.dø‚MissingR—dJ"# •É " r #y Æ 6try– StokenÝq = get_ -1 sexcept Á¦ P¥EÓL i â ý�ExpectedÜ ìÝÈŸ ñ ¯+3 Ú9  w 1 = - .»ï.strip().lower*
¸"ifS¯[0] != ';'{;x ÷ ZÇ ¢I2| Ï Õä‚@ 
ˆ ótransfer_encodingl aÃ Žšmechanismt6# WA& Qidate_rs, sinc Òlist is fixed	3ctey ºT› Eš •
A ÜàMissingRequire—dValue(
  õ"Missing content transfer encoding"))2 ñreturn cte_header Atry:	  X €token, vk q = get_ ( K ñ except errors.HJ `ParseE L h ó.defects.append(; rInvalidB D# ß �Expectedà ó but found {!r}".format° ý Oelse˜ � ã Ý  ¹ acte =   .ò .strip().lower(5 bif not6h o\while+ r +'ïtra text after3"if‹ ö[0] in PHRASE_ENDSÈ 4Ž‚Terminaloó	[0], 'misplaced-special'† H   H# =y 51:]~
¨ , z
�bphraser  )   F¥ ? % Žb

#
# ~@ fol/  ð is complex, with lots of rules anŸ rnsÀases.  The
#S 2lowž÷de does its best to obey theH ahandle  coS @
# cU ,èáyou can be sur( ñre are few bugs:)Â @This€ Ðder generally; €onicaliz¸  Ž à goes, preferr¬  ‘  äðngified
# versionò Ceachæ    ‚ntain in / Ðthat supportsÓ  der, inclupD whiS s¡  Ü ¼ ed‘ Qways.Ù bFoldedç°is accumula#pin a si©P list° É Ðs ('lines'), Ã `
# one! ` `should{ 0les¬ àan policy.max_< ð_length ('maxlen')‘ ð
def _steal_trailing_WSP_if_exists(= "s)N�wsp = ''ñ1if  A
 J[-1]  bin WSPB  çF 2  $ Q    " =^   B[:-1eBwsp
»  reù _p¿f_tree( C, *,À B"""RDY Bz< }d¡!orébto RFCì!.
± 1""" ,# f00/N¡ðmeans no limit, ie:cÑinitely long.B ”# =¯ ¶`or sys Asize3 e ñÄ= 'utf-8' if@ Putf8 Ž¢ 'us-asciiµ`b = [''R last_ew = ² Z òwrap_as_ew_blocked = 0 Gant_z DFals� d1 `not_al\ 5 ÐTerminal('', ò"'wrap_as_ew_blocked')
    parts = list(parse_tree Rwhile# :. 2 " = b.pop(0-   !if p is endn ¶not_allowedC  + ’ U -= 1g  $ …continue  tstr = str¬ ty ð.token_type == 'ptext' and set(? Ê) & SPECIALS’ À# Encode if *   õ	ains special characters.“  ¨ `want_e= ˆing = Tr´ *ryh  \ .. !e( 6ingÊ  P  h dset =   o  except Uni« ± ZErrord ðif any(isinstance(x, e( ÷s.UndecodableBytesDefecL ‚  �for x inÖa.all_d- *s)o  / µ å'unknown-8bit'»  % Nelse; ð# If policy.utf8@ùfalse this should really be taken from a_  c 3# '‹ ô' property on thed 4 1 š = 'utf-8µ ß
óz°mime-parame0'õ Q# MimZ  P fold<0(us €RFC2231)	Textraƒ
x_7 _k _k õ, lines, maxlen,Iia:if î  ;Nnot ¯
Ò 0if '  O.hö ¡
a 0= Fê“Ölast_ew = Non A   wú syntactic_break•  )   F ed% U¥  ;(t= s)[:-len .AMep)]›  S  € ±( ÿ "inil Ž  ? �# It fitsš a õ!le´n  3 0if ž Ì 3) >á! - Œ O[-1]   D  Q# But² i‡ úe, so start a new onep?  0newr ð = _steal_trailing_WSP_if_exists(% szC   # XXX whatå ± has no lea#OFWS?% O n ƒ.append(£ } .  3# +o½d  	– u   ‚# Either¶i¶  Kemajor © ©m�we don'tk #†2 it ¤ ð  by itself even&iCm, or iE À # doesn't fû$it on a line by itself.  Either way, fall through
  ó# to unpacking the subparts and wrapp )m.? ð if not hasattr(4 É, 'encode'):,  v a# It's4 úa Terminal, do each piece individuallyo  C  d �s = listq A) +  	n Oelse€ 5a t|  Þ P it aí  » ùd word, possiblyZ  … €# combinùit with previouslyF Îs if allowedÎ ñlast_ew = _fold_as_ew(tstr,Ò³s, maxlen, + ,�  ‘   B.ew_© #e_ƒ ©, charset)H Qwant_ý  Ó y= False" vcontinu aif len¬ C) <=¨ ! -  Ž[s[-1] @ += ç d a# Thisß  is too lo¤ðo fit.  The RFC À 0s u# • break at[ ò# "major syntactic$ Ps", sû÷less we don't consider thisE �to be oneD0eckÙý llŽ  ‡ <Anext¼ŽF 1if µ.‹ _¯ %nd% Í_6+ 1cS0newV Cðsteal_trailing_WSP_if_exists(% sö ¿> !orf0.stø Ñ[_fws(l  š H „.append(} +Í
^ - à6Non<    UQ	MÑ@try L É �Ì
}0new"
J	‚ "ot—CW D»€_blockedß1O  ï u >¤end_ew_not\ 
B¢ 8 êD 9 .µ Ê [¬ 
Ð  VP does‚need CTEÒ‚ing, but e6PnywayFiwe canó #;: it{ � ±s.insert(0,b
ø  ÎŽ'Trx Iô 1# W€ ð't figure out howÜ ó A, itîvgive up“ Ã?= _@ <8·Ú 0olduÐonto the next÷ line either...
    Ñs[-1] += tstr áreturn policy.$ �ep.join( ;) + ñ

def _fold_as_ew(to_encode,€ ñ"s, maxlen, last_ew, ew_combine_allowed, charset):‰ õ """Fold string T R intoX B as i Pd worC T  0 3if Y ö RØ öthe new value for“ ¯or None ifž  ± is False.
ž 0If Te ©already anŽ 0 in$ a ° 1 of ñ s (indicated byP aa non-€ › _) and” €true, den n M Pexist jg† it withI,W 2re-C@.  OÓ Swise,É N zS.  InM0 ca' VsplitS  ‘önecessary so that— Ãd segments f” #in!]1"""z !if=0_ewg2not¡6 à±   =>(L     òget_unstructuredÖ [�F:] +Ó %))?   * " =È  #[:7 ]( &if; 0[0]6WSPœ €# We're Q ¢qthis toþˆpd text,>Xdon't‹ Á #PP lead@ Rblankâ   i_wsp =Š ž  #  2[1:À  " cif (leð ä C) ==¢� '   ñ.append(_steal_trailing_WSP_if_ŽshN$+=Ï  ¸ © D É !'' 	] ¹;in ^@LikeÂÛ íJ f space*  s 	+&-1
 	" :# Cnew_þ 
3
½ÚDelseÒGóô_as = 'utf-8' if
 w±'us-ascii' ? %? ð# The RFC2047 chrome takes up  Óaracters plus:AngthP#’ %U C nam#L C_lenÚ ª  7  )) d+ 1) >*ôðraise errors.HeaderPêE 
žP"max_U z 0gthø�too small( 3h"")Ž Vwhileô€ Pemain’ ¢ : - ç × ‚_- r? -i £ 2  ›3ext5 F<= 0€  R  Ô s)6' 'V  ‚continueÉ   z_Ù
ž ªŸðd_word = _ew.encoóde(to_encode_word, charset= Sas)
  Òexcess = len(  d6 õ) - remaining_space5 cwhile ; E> 0:  V ò# Since the chunk to [ à is guaranteed  fit into l‡ �than 100² {acters,\ ù#shrinking it by one at a time shouldn't take long.A 
: =  Y[:-1]1 ¹ r = _ew. f /jÃlines[-1] +=D‹ ¤ À Ì [Î Ð5:]
5 &ifø 
½q ¶.append(' '* Ä ³new_last_ew30  ¡ )   ° Ptrail>1wsp{ xreturn F ð'if ew_combine_allowed else None

def _fold_mime_parameq(part, r ’, maxlen,$Bing)× ð"""Fold TokenList '7 't ¢'A 0' l 0as f  f .5 Usr 0  deYd0 'of+ ð and values, format�m accordA o H pRFC rul, Qinclu  ug uRFC2231Ì  ¯"he\ ’ cannot b�áexpressed in 'š@ing'Œ 0/or€ ¢ +�  „1too‚• @withD J'ù 1""" à# Special caseß  § Ô: start from 's s� 2 us³ #: ² iff needed®#t 0NotHI! 1G P2s beM2addD Oôlength calculations arq  ‚0unt6 f‚ossibly-x  â© psemicolC °we'll be ad¡ž  I Sname,˜ inj!t.<s 4¢# XXX WhatÈóis ';' puts us over¾®RfirstÍpthrough N „loop?  WíQ splijs header� oVam â t„  ¿TP# but1do  !we‰  €recogniz‚ àearlier or repU� ‚ °, so I'm gos€to ignorI aat bug@€now.  Itb@only7 usë  Ü ¼
*� 	0if  Ü !à.rstrip().endsÍC(';' 1   .  Ÿ5';'l  f Cset e5ing ðerror_handler = 'h &ct< 6tryî f ô&“      ó _required = Fal"" �xcept UnipEÏE‹ 
l I Àng_required ‡= True
  ùif utils._has_surrogates(value):-  8 ý	charset = 'unknown-8bit') Ðerror_handler/ ] jescape2 Oelsem Ftf-84 úif encoding_required@  1ed_É ° = urllib.p¿ }.quote(´ , ±, safe='', Ä !s= Ë )6 0tstÝ ó"{}*={}''{}".format(name, 0,¯ � E ù S 0'{}R 
N ¸ s_string£K ñif len(lines[-1]) +  Q   ª1 < maxlen*1 6 =  €+ ' ' + > 	ó gcontinH#elz  +  i O2 <=j †.append(_ Ã b` ð# We need multiple sections.  ôare allowed to mixnE and½ c# non-C ñ	, but we aren't going to[ 3'llK P themf .P … E = 0 äextra_chrome =þu + "''"& awhile n
‹9 @_lenŒ!enE S ÙCstr(t ) 3àt 
K#if‡ ‘\ :+ 3x  xg€room forô @ leafq blank, Ptrail&¥semicolon,Û  J   #{0 at@ ast one�acter ofH P.  If€_don'tH  ñhave that, we'd be stuck, so in ÿ case fall back toI  öthe RFC standard widthÐ ·   $Y = 78F �splitpoinþ1maxÛ ê7 - b9- 2< ò y’partial =&[:i ]E  � ¿× 8 e Ý 8 Û	w )OÐ  7 ]break½ Ù Y -= 1  zR" {}*TR	0  f c(, 	q
*  œY W Q , +¤ ±¨Î :¨"ifÊå  œ \ ð';'
# Copyright (C) 2002-2007 Python Softwá`Foundaö5 ñntact: email-sig@p0  .org

"""E ð  address parsinòrg code.

Lifted directly from rfc822.py.  This should eventually be rewritten.
"""

__all__ = [
    'mktime_tz',
    'parsedate'," p % 5quo!  ]

import J ð, calendar

SPACE = ' '
EMPTYSTRING u'
COMMA" €, '

# Pl 0 a € ð field
_monthnames¶ °'jan', 'feb 0mar !ap 0may !ju# 3julÄ  Ù  @'aug$ 0sep 0oct 0nov ?dec2  ajanuarZ Dfebr Pmarch6 Papril	  e OjulyO  Qaugusv �septembe¼ Cocto 5nov 2dec v]

_day	!moæ !tum 0wedt 0thu 0fri "sah @un']_1The¥ñzone table does not include the military-  . ð#s defined
# in RFC822, other than Z.  According to$ Q1123,R ðdescription in
# �822 gets! ñsigns wrong, so we can't rely on any such” "
#–  . I  g   recommendP ¡at numeric/  Â ó indicators be usÌ †stead of) c@.

_Ð ;  yÒ{'UT':0, 'UTC	 #GM Z -e Y�AST': -404 !AD 3 Ð # Atlantic (‡  Q|Canada)E EE 58 "'EE R ¬ # Eastern3 C3 63 C3 @ ¬ # Central3 M3 73 M3 @ ­ # Mountaig P4 84 P4 `700   Æ[cificg ˆ}


def Pq(data):* ¤"""Convert3strLažP tupl g lŠunts for±³.T  r=_{  !if2resŠ  _ Cretu]øif res[9] is None&  1= 0I 5 § R(res)ò x  C ó ò¾to extendedñ  ½ last (addiJ°al) element›  º ³` offse×ñ seconds, except if­ /  /€ was spe¸ðed as -0000.  InßRt casƒ v K  ‡g�es a UTCÈ RstampH pexpliciÇödeclaims knowledge o› Vsourc¯,• PopposPo a +¢ _ ~ 1theœ H 1 re ñ QUTC.
%   ö
 –¢  Ö(     =Ÿ‚a.split(³ # žqFWS aft e �a °day-of-week®o!alî seMð  and
    # adjuõst for this.
    if data[0].endswith(',') or ñlower() in _daynames:>  B Ã# There's a    •. Skip it* 4delT  FelseH 4i = a.rfindˆ )  g –if i >= 02   ½ < a[i+1:]7 pif len(# ð) == 3: # RFC 850k Ñe, deprecated2  R VstuffP µ.split('-')# Y * Z   C  r 1 =     +k /a[• 4Ð sv 3À  K  "s.+ƒ iÔ &-1@ 0 ³ ?i >>ö3:] = [s[:i], s[i:]€ 
¤ b  Ý P.appe¢Ñ') # Dummy tz & V) < 5Ÿ ±return None*  # ò ":5s ð[dd, mm, yy, tm, tz�  + 4 ƒmm = mm.“ ‘if mm not¡[month£U : I, dd>  Ó B  & À Œ _p ç.index(mm) + 1› F> 12„mm -= 12! `dd[-1]Ì6',''  ddRd[:-1 
#yy:×9! =>$yyf /yyf wyy = yyf fJ yy–isdigit()— _ z_ z¥_ /tm_ t¯&tm_  UÇ  ª!tmN-@[thh	m!tmo  Œ ts-1'0' #elvA 3° A W, tssF 4 �1 and '.'FVtm[0]E ñ# Some non-compliant MUAs use4 ó	to separate time elementf³ $0]þ .Å  
Á   Å À     
0  Ø   K �ì6try5fint(yy°  &dd `thh =  7thh ; 'mm Õ "ss öexcept ValueError† £ q# Checkàáa yy specifiedÒ1wo-Í   ðmat, then convert it to H # appropriÐKfour< “according6 ò POSIX standard.f2äp# callsy E a t‰  K1but, ñ2822 (which obsoletes 28220# m^   3a 4‘ ðyy. For more information, seeÐ ð  documentation ñfor
    # the time module. Áif yy < 100: , òThe year is between 1969 and 1999 (inclusive)J  9 N F> 68M   ¯yy += 1900d A2000d O2068d Oelse^  ; ^ ó tzoffset = None Ñ = tz.upper()  if tz in _VzonesX E  A[tz]; 
„ 6try9  ï = bint(tzq   úexcept ValueError: Apassb  , ¡ Ì "==útz.startswith('-')@ z ü ±# Convert a  ê  W ó into seconds ; -0500 -> -180­† l  7 < ; ¸ µtzsign = -1Ì  v 4= -© ! 
S/ G F 6 Í T* ( ( Ö//100)*3600 +   %ßB)*60ˆð# Daylight Saving T@flagð ;ðto -1, since DST runknownîðreturn [yy, mm, dd, thh, t ¡tss, 0, 1,G   ó]


def parsedate(dataÃ:"""¨@ str� #to¹¡ tuple."""6 áJ 2_tzM  òif isinstance(t,: i  \¿ Ot[:9Ò °  mk"c @"""TQa 10-š B as : Ved byç  : )lqa POSIX‰UstampÏ 0if 0[9]m ¾h  ¯ Q# No ¸àinfo, so local—  . ñbetter assumption than GMT C ™ x .Ð 0@[:8],B-1,)
‰ e�calendar.o !gm8 , Y $ -À 6“quote(strx§"""PrepareÚpbe used‡!a 2 d !.
¼  d±s backslashbdouble/ ² charactersbE Âpairs.  Thes y  Honly6 ãthat need to bW  ’ ]side –  ô ÁDoes not addX€surround°ž s.³…ö
str.replace('\\', '\\\\') " ð"')


class AddrlistC 0""" 2essm"r + Ôby Ben EscotoIpo under0d wõ Cthis2 àdoes, it helps
0havþ ñcopy of RFC 2822 in˜Pfront 3youb gNote: U �interface¤¡deprecatedÄ0maymRremov  œSfutur›óUse email.utils.ê PList Ü6ead^”  \ð__init__(self, fƒield):
  õ"""Initialize a new instance.
'  `f8 ñ' is an unparsed address header % Å, containing@ ´one or more5 5es. 5""" úself.specials = '()<>@,:;.\"[]'(  po# 0 0LWS8 ; \t.  CR K\r\n F2 z  = !+  *CRX patomendr   ¥ 0 ; ñ
# Note that RFC 2822 now ? ðfies `.' as obs-phrase, meaA7 %it‰ #ƒöobsolete syntax. Y ‚requires9 �we recognÝ6 L @ ò, so allow dots in ‡ ¢ñ  õ.replace('.', '')e 9 " =!
 òcommentlist = []tÐdef gotonext(C 
³€Skip whiópace and extract R (s.V&wsb û A "leë HQ< lenm .° s  2 "if+  [” P.pos]. þf'\n\r'` :   > 0notB 7  ; » w.append  „ n 0   ’  Õ E+= 1q  /el‹ =l»  L U E	Š 3get *()‡ NelseUbreak‘ ò	return EMPTYSTRING.join(ó ) etl  œ@"""PŽ Â\e Re @s a ? ž2 _of th•Sresul¡ F  ?whi?Bad =AgÌ Jess(2^if ad3| U+= adÕ  � b/ ¥"('�j t' b –  ña ( ‘f	a 5 .hÍ §    ÑÙ  0old§5posâ Toldcl4Y ! pg \ "etž  (a  K . w ’  — />=´# Bad emailö technically, no domainìd ¾ í — b(SPACEÉ 1), D C[0])6 [ àÀ.pos] in '.@G':
  ñ# email address is just an Kspec0 0thi' ùn't very efficient since we start over< þself.pos = oldpos ²commentlist& )cl%  §  ” 1 = N 4get )()* creturnI Ñ[(SPACE.join(9 i %),ë 5)]
E Belife afield[7 ¼pos] == ':'H ˆ Bua groupK  p
� h   b ƒlen = le¢  
Ô ƒ Y += 1^ Rwhile®  a<G 
­  s L ‹gotonext<   ý O �  ¡ 2andg  ; H   l  I ¸     YbreakÒ   	4 +ƒ ý_ess()¸<£ 6# Aúña phrase then a route	›   ï† ‹  Ä Hq�Ü )= ­pÂ©) + ' (' +ˆ  _  ?' 'å C 2)',Ô  ½ ))]M Oelse™ 
P Q M 1if Ë c 78"),D =[0]½ g—"in, 5Nials€ f �Ã    i  2 g 
,|c  H 	   þÛvdef geth > )Ï ‰"""Parse· �!(R
Ò-path value).S  <TÎbmethodù�skips all.a stuffÜ – s  E W.45""" (‘L!= '…V • Rexpecë … = FalseX  ÷ E	5 ®  adBU = ''B ,7if � p =  z �etdomainI > Í  A h>4 2 s 8    KÐelif self.fieûld[self.pos] == '@':
  " ] += 1 ùexpectroute = True# Qelif B =fieo :o NelseŸ ‚adlist =f Ùgetaddrspec()Š  Ö ‰ ?posË Ybreak4 0 µgotonext()
 rreturn |  Hdef ~  < )¯ ð"""Parse an RFC 2822 « -¬ E."""] #asÒ "[][ » ‹     Rwhileü  Ù `< len(| .q‚  . ¿preserve_ws®¬	.¬ 3if ­ sand not »[-1].strip(�  …   7 O.pop§  ¯append('.'Ê
ç OFals–"ê  “ Ò"%s"' % quoteo2get *))¯ "in¹†atomends. #  aDê\Š.‰V ãKtom(å P! / Â  8if – 0wñ  
h'wst� ç,>=è2 orM÷×!× ¿òEMPTYSTRING.join(~ t  ''@Ší  Œ 	 § gdomain¦ ý!ifA 

¢# Invalid  #, Á �an emptyIãess instead of# Uing aZ �ð# local part to denote failed Ysing.3 n /  	J# +³ É$Æ 7ó"""Get the complete=   name from> 59ess3s%[]› ^?¤:LWS• Lî  õ g(b L pcomment u 3get yi [i À sdlist.appe÷nd(self.getdomainliteral())
  Qelif * afield[ Épos] == '.':.  9 " ^ += 1 ÿdlist.append('.'o @o  ò
# bpo-34155: Don't parse × ýs with two `@` like” ý# `a@malicious.org@important.com`.3 ùreturn EMPTYSTRING# 6"inNŽatomends@[breakN .se( sJv0getX Ä© b.join(> !)
i @def 	relimiteð, beginchar, end	 ös, allowcomments=True)œ A"""P}Ða header frag+ $ d] À by special T racters.Š  A`x æ' is the start. A for ^ ¡I® 9 ønot looking at an instance of f Athen	  	 ?… Èempty string¯ ® sa sequee -@ableA- � ù  u    :  Ñstops when on¬ PtheseÓ ·encountered‚ AIf `j —Š ônon-zero, embedded RFC 2822 ) B areÒ%ed 1!in`JdÅg5"""0 !&!=B# ê V6 ''õsu = ['']Z Æquote = Fals·ë:posaRwhile\  R< lenã¹¥ ‚ 1if ] 
˜   ‰  k @ ù
± 3 J §   
8„   š Æ C!"ifÇÙ"nd¾ ·(H ø 3getO Q ×   €continue   P# havM�ready advj d Ç @fromaO à 8 # a/\\«  p }L ) [Òô ¶ }` ´òI ^ 
H  |v‚"""Get axe] & ~ 1's ¶.f€    µOÂ('"', '"\r',)
� tð(self):
        ñ2"""Get a parenthesis-delimited fragment from self's field."""
    areturn  E.get@ ñ('(', ')\r', True)
4 @def ( Ðomainliteral(^ !):   U ñ"""Parse an RFC 2822 d2 -3 „ �'[%s]' %� [� ]� KFalsŽ Aatom…  ,  Ÿends=None”  - .Ø  ¸ …OptionalE ð specifies a diffejô set of end token 6%rsò(the default is to useÛ  w  ¤ €).  This  Åused e.g. inE ògetphraselist() since    ðings must not include z ¥`.' (whichM ³is legal inC )s)‡ —  i v = ['']9 f0is Yì 8 9  Ð * =à ZCwhilý ‘pos < len±.’¨ P "ifH  []P.pos]¹ k 
�  5 Ubreak´   Nelse(  B  æ w.append† j )H � V += 1Ô :ôEMPTYSTRING.join(a 
1µ y r ò .` sequeã&of9: s¨AÀ 8a5 qwords, ù@ are3àeeitherU à  ­ ð s or quoted-strUA.  PysF õcanonicalized by squeezing allM @runs continuousŠ `tespac‹ qto one  .6 Žp! €]h<6È>FWS  ™â < /el�n== '"'L Ã 	]1get^*()X\ (\  ¨ 0comØ *g  i iúd ÄÑ Yù  `ñ.c ) dE< ð

class AddressLô   ê C 5X"""An& ± encapsulatª 1  ˆp…dõ" aY %es÷ Î�__init__§ ,#j  ¢ 	‚ .- Ë"if? 
E¶| › '0get   (¶@ Àslist = []

ð    def __len__(self):
   ¡return len á.addresslist)
& = 3add= w, otherD ±# Set union2  X 0newK B = AR ¬List(None)$ t 0 = ¡  5[:]2 ‚for x inƒ & Ò  ~ bif not+ P 
*  . ¬ O –.append(x® *- i¯, in-placeÑ Ló Î  * Ë ?subç‡differenÅ ì
º r j
�¹g+ º2ð ¿+·ý  Ò " .remove‰  * »ugetitem¿Yindex¦QMake  õing, slices, and 'in' workšï f „[@ ð]
"""Policy frame;  äð0the email package.

Allows fine grained feature control of how ? 9 q parsesŸ °emits data.z ó

import abc
froms  oheader   chS ct as _ & s.utils E ñ_has_surrogates

__all__ = [%' "', „Compat32 c ²]


class _8 RBase:ÀLÆObject basicY.' RThis D Ñis useless un 1sub ted.  A  p should"inw' ð attributes with! QaultsÅò	any values that are to bA °managed by ¯Ï ! o» Q.  ThÖÐstructor will) 0n a.pnon-defr i  ` A set‚ Xthese¥ „at instaxÓcreation timev ! s ðbe callable, taking‡ bse samÊ ókeyword argument ; Za new„ �identical  p %ed% d excepÑ 4oseì qchangedF€ C.  Iñ ðs may be added, yield” 1newD ù ÌÐany non-defauñ.lt values from the right hand
    operand overriding those in/ 2lef. * Á.  That is,
B  F öA + B == A(<non-defau} bof B>)/ T„ ñepr of an instance can be used to reconstructˆ aobjectq i9 ‘d only if rQ  á ñ P E å , .š 2"""	 ñ
def __init__(self, **kw)::  ð ø"""Create new Policy, possiblyMSsome si  B ðSee class docstry for a list’èable attributeC  °  K    ; Rname,ð ¾—kw.items(¸  + `if hasR Ü  8 $  ( rsuper(_Ý PBase,p).__set? 0__(; s ) = Felse/    ùraise TypeError(3  !   ‚"{!r} isðvalid keyword argument ð ¯{}".formatI  M ¡  ¹ 1.__pP__.__ 3__)“ð DðÐargs = [ "{}=š t  D ü  x ¡ "  ‘† ddict__œ% ]`returni E({})h 7 ½ À, ', '.join(¥ Í ScloneÞºRh a¼€çwith specifiedr‡ changed½ Ä ù= 1hasˆ7sam­Œ#s  @curr¼Ë,ø RexcepÓ Ào Ps pas in@ AnewpŽ> = 9#ewá· S ×Ô²
×Í 
„ ,FP i 
¬ no€° ¥ ¢o?   ]_ ‰ ,g 1ame]š   ( Ó�ƒ æ', këbmsg = u¥ ¶n ñ ‹Pread-q"¶âJ   +noQ D ³AÝ4msg× Ü «¸ï ñS__addÜÀ, other):
    ò("""Non-default values from right operand override those" qleft.

I ÷)   The object returned is a new instance of the subclass@ 5"""L A ñ* self.clone(**other.__dict__)


def _append_doc(doc, adde !):O ñdoc = doc.rsplit('\n', 1)[0]! 1 & == ., 1, ˜  T  + I & +4 ‘ 3ext‘ ³strings(cls� `if clsÅ Poc__ Z ó .startswith('+'4  `% ) =ô  ¤bases__[0]\ ,i )é ôfor name, attr in# Qw.items(u !if) R ®  :  ¯  ³  n ce 0(c   £   	±  &   g.mro()‚  H    pP= get ( !c,Ï P), '_ 2__'é  3   ifü   N Í WK!ttq ¬Z  F Qbreak]acls


Û’ Policy(_ ¡Base, meta â=abc.ABCMeta):FÁr"""Controlsñhow messages are interpreted�“formattedHDMostcg  8 tnd many pmethodsŒ Šñemail package acceptÒ · Óós as parameters.  Aà ! € containñ!se… N1andP áfunctions that0 @rol ä Pinput-à   3out `renderí  |ÁFor example,TŸ ô 'raise_on_defect'n Ps wheH ‘ot an RFC  Pviola¡ q result"ñ an error being X d= ñ
, while 'max_line_length'O  É e‚maximum !  ŠÖ  7 • Rn a Më 	€serializí O 0AnyŸ!id”Äibute may beœ0denÞ  I »pis crea-¡by passingN  itÐña keyword argument toKÚconstructor. é‰‘mmutable,P 3buté{ 	0can¢ †  Ú� only cer. Ó  r¡changed byO @callo ;Q AD ¸  ‘) z Qs canL @also„ ç€, produc] ™	6  QwhichnJ 1ttry s â!in& (hË-Dwrit.pspecifi4 N  >_¾1SetTãs
Ð ÿ¢ -- If truÿ"n ì€s shouldô ¯"asÅÀs.
           ðDefault: False.

" plinesep  ð-- string contain ñthe value to use as separationL A 
	 ñ between output r 3.  � S '\n'� ˆcte_type@ @-- T ¡of allowed– òent transfer encodingsÔ ?  ÿ7bit  -- ASCII only· 	8/ “Content-To #-Eo !: $ $isš  
ð 5 q.  AlsoË Prols _pdisposiP? ofœ 	ð(RFC invalid) binary data in headers; seeX I 	�documentÅ0 of0 P Ã_fold method @max_¿q_length\³-- maximum  "ofäp, exclu™  '7 _sep',Ž 
uv�serializ• ñ.  None or 0 means noa J 	Pwrapp·wis donepUis 78Ñ ¡ngle_from_Î  !ña flag that, when True escapes F/ Ò  p?the‹ 	DbodyZð message by putt¡ Pa `>'G _frontøÐthem. This is†dŸ  >\ �is being” 	b ed‹ Äa generator.—:ó '· �_factory*!--,Tclassäto create new ‘ �objects.‘ 	Iza!isó,a d¶ ð M‡ • 2"""pòraise_on_defect =áo ¥Aep =g e0= 'À' ÛC= 78 #[ ß =µ “ £def handle• Â(self, obj, § !):_  Lñ"""Based on policy, either Ü 2  Ócall register\  J   
x r œ  $ ƒ À should be aø =1subÓP, but—Ñany case must+ íQExcep¯7  . ä  ­ “ú × TwhichÐh { Ö €ed if itE 2notCd.  $ï!is«.M á #is?  ®°an error, o\1wis ±  ’ 8and¡ &arÖ0pasŸ/to{•. º i40ded0be ¸m`parserñ³at discoverâ$àThe email pack49 aalwaysR  &Dwith½Àinstances.

  C"""
 õ
 if self.raise_on_defect:!  )     7 segister7 S(obj,) !)
+ [def r&  ; (, , p ²"""Record 'q ²' on 'obj'.R  ’ óCalled by handle€  Ï ­ Ê ñ is False.  This method isŸ  M ôpart of the Policy API so that õsubclasses can implement customN ¶ ˜ 1ingw eFault7 ±ation callsy dappendž %ofP  – T °s attribute¯ 3obj] ¢objects us 3 õemail package byP 1defŠ Ü Pget pÕ 0d tï  ðwill always have aÄ  g J Ž ‰with an Å ¯r · Ð .0 ( 1òheader_max_count(2[name)+AturnAðmaximum allowed number)N  s ? 0d ' L rwhen a -  6Aadde`a MessGiB.  I. re %edPvalue= ðnot 0 or None, and¥ @re a �lready a¥   KO  É ¯ µ b equalª"e l ƒ P, a V~ PErrorƒ 	d†pBecause‰  Ìqbehavio(æ à's __setitem__J $toÚ5the� € 7Qe lisD?Ps, it: @easy° Ðcreate duplic
 ( M  ÷ ñout realizing itÞ’Ù“s certain©s^ b€ 7mit‰i�instancesüƒ ävmay be ó™ À programmatiµsy.  (Thy  ë  òfobserv…uparser,M awhich [ faithfully[ Åduce as manyÚ Pas exXÍ m†N  be(d #d.> Ð — æ§p.s–@ for.p %s.^ ´7 6 „Ò@abc.abstractR9  îX�_source_Ÿ À ZlinesÇ1Giv}F# ðep terminated strings constitutü   ,  1ƒa singleØ #, ¾  - (N,;`) tupl�at shouldNstorIQmodel‘‚e input x 8 !re”Utheir¶  ¢ & !ep œ0cha33ersM ! „ inÓ © 
¿ Ÿ0cond J àsurrogateescapt¦inary dataÆÀ"""
        ñ#raise NotImplementedError

    @abc.abstractmethod ñdef header_store_parse(self, name, value):/  K Ã"""Given the< * A and 1 Á provided by µapplicationK âprogram, returR (v ñ that should be ¤ 2d i+ emodel.N 5""" /_fetch7Afromµ 	ò 0º  toé Qed to6 > Z 6Ñis requesting J Øb.  TheÆa passe@–ö	email package may contai¤àsurrogateescapÐÑinary data ifž ±lines were @õ€a BytesPQr¦ � Þ û à4not~ ] any z  s .Ð‰ì ð(Ofoldñ1â…a string« a ¯8`ep cha˜1ersÂ$ iÄ^ ¡  . om×O `accord  +RpolicÈOrols L  †b 	K rj:by ŽL 	X_Þ Ha Ü  Ôö Å!M  *M 
 Ò
@_extend_doc,ñs
class Compat32(PÔ"):ýA"""+§ @Thisrƒticular ûiGÁe backward cG ‚ibility L Q.  ItE "re™e6 ƒehavior o
²version 5.1Ó uG pmangle_‚_ = True®  c¢_sanitize_£`
8# Iê»7s~Ðs, return a HÓeader using
  ñ# the unknown-8bit charset to encode# ƒbytes as …d words.I õif not isinstance(value, str):'  w  # Assume i0 Â already a h¢ iobject3 qreturn S  òif _has_surrogatest o < ] !.Hd ) ,ì #=_õ Õ.UNKNOWN8BIT,i  µ  T `_name= )3 Jelseö ‡ Ã ( 3defó �_source_pzr(self,  WlinesÑ A"""+=  � @The w A is ; d¡Àverything upÆ â‚':' and † Öed unmodifiedÄ P    Q Ðdetermined byÆ0ippT @lead àwhitespace off$˜ `remainmo p first Ì `, join@ Òall subsequen °s together,­ P 3str} �any trailB ƒcarriageÕ 1 orc AfeedÙ…acters.
H 5"""  8,Q( =mö[0].split(':', 1Ô=5 !.l– Ð(' \t') + ''.Û (¸F[1:]? rÄ(z #.rE r\r\n'))« :tor>  ñµ 3are&ûr© š Yfetch±š I” ócontains binary data,òconverted into a · Ì {Â@.  OM4wislÛ  ‹²._sanitize_ðÂCfold¼Ñ  s š :  ”  šÎ     éõalgorithm, which preservesÏPexist,  e¡ breaks inN oRö wraps each resul3  to, P @max_K ø_length.  Non-ASCII°¿ 5CTE’J \”ž u ý j$, ‡[=Truey_E€È°If cte_typeŸù 7bit, non-ascii•ais CTE‚À    encoded ñusing the unknown-8bit charset.  Otherwise% óoriginal source
  ðheader is used, with its existc õline breaks and/or binary data.
K 5""" ð folded = self._ ñ(name, value, sanitize=! õcte_type=='7bit')I preturn A òed.encode('ascii', 'surrogateescape')� Bdef u  _ /, { %):f ªparts = [] ñ.append('%s: ' %I � äif isinstance(Ú 'trZ  g…if _has_­ s, ' + ž    Bh = ´!.H»K ,¸ )  #=_	 Ï.UNKNOWN8BITD  _T= t Oelse¿ ñ# If we have raw µ Iõ in a byte string,( no ideaã a# whatã ² is.  ThereØðno safe way to spli0 /isP ~  . ª Qit's m€-subset,j nš ÿcould do a normalO > v `, but 5 W Qmultið 7theS k g Q   â T's noÜ  0 so= ÿ least harm seems toQ  be2not¦ > e  ð° risk it be\Ÿtoo long.M H5 % Æ6Non‡  6 + r
ñ‡I €# AssumeÈ Ris a <Ê-like objectÑ  v À ç Bif hO t » 
à#pV ð class interpretp L 1 of; € for maxZ`len astj  ’# default0 : 078,* €recommen_ºby RFC 2822¿ ] 9= 0Z "if”@max_� P_lengô IÛ  � 	P  S.? 	c 	hµ m 2sepñ ,=e )6	L z ; # #�''.join(2 ó)


compat32 = C ÿ()
:mod:`email` Package Architecture
= Ã

Overview
- a

The V # pU €consists½Àthree major ˜ ronents:®FMode?#An’ u“   täàrepresents an óemail message, and provides an
  ñAPI for creating, query
  4 Pmodif $ aM !.
> aParser  L 0TakZ ð sequence of characters or byt" ‰ 0duc ` model, 5theL 	¼ ÿ represented by those[ ˜ ŽGenerato› l  Ö ÿ turns it into aµ G.  TŸ ã Ðcan either beL QendedPöhuman consumption (a printablê ö unicode string)'1sui* M �transmissH öover the wire.  IÍ  ðlatter case all data isý€perly enr qd usingI �content g fÔ+ Äings specifi‚ðe relevant RFCs.

Conceptuall£�e package{ ñorganized aroundu �YŸúboth
"external" APIs^0useqapplica_‡programsØ �library,
ó?"inP  @×0Jñ components.
This diviŽiš  „ ü Áa bit fuzzy;é  btdescrib?²is
document½ !is¬²a public, sý1API#  1ows7an ú R
with¡ðal needs to impleb ¡ its own p± Ú T/or g' .

In addiÄ  ;  ðthree major func 'al	,Ý ràÅa third key
*I Óarchitecture::UolicyîâAn object thatÊ ðfies various behavioral set¦ Ã•d carriesI ó UsVC -ì@rollü`method¾QThe P–   framework2/! s[  ; Ó@veni00wayæ S  
«  |  Gƒ@ maks ±it possibleË$  K òbe used in a
very flex. 0ashÿÐwhile leveragS  C Pcommoodš`quiredP ó%,
BûeÑS-like„°s.  For exaA,‹ 
ú
default :rfc:`5322` ³pL0, w„¢so have a  çðmanages
HTTP head& ø # fê  K lidân Q2616`ö ƒCdualV 
‡ s, such as‘À maximum lin6@ngthÙ Ne , Òpalso
beêt+�n  ÞSo mee©"alÙŠ!re� | \
]Mç$
- 
 �ÿ J s 8 )±e :class:`~a.3 ".MØ!`   •ðe model divides ð&a message into the two fundamental parts discussed by' P
RFC:	 ñ header section and Òbody.  The `Md ñ` object acts as a
pseudo-di= Ãary of namedX Qs.  I€ " ðinterface provides
convenien\ ôcess to individualL  ¼  ] æ.  However, al ‘are kept
c pnally iÓ ð ordered list, s*!atè rinformaü 2bou 0  Ì Bthe
"sK  a†original{ïs preserved.

3Plso h4ñ `payload` that holds‹ sA" ¡can
be one� w¹ ñings: data, or aÕ   ¨ | � ñlatter is used
to re±  o` multi%T MIMEÕ ò.  Lists can be nested arbitrarily deeply
in^ ³X  )›a, with©Aterm;ðleaves having non-š
Õ  Ss.


zÌ Lifecycle
- q”general l)  ±s:

    Creì   Aßó c+ 1`a ParsoSor itD ‘instantia#¤s an emptyM ¸‘an applic .Ž qManipul N  ³+   may exami  dr more,³0/orCD D  ±  D bmodifyL
C B >  ½B !is… Abe dŠnl ¦ top levelBB ) Tby sub- ü F	.izü PModel®rTÝ�a unicodeö0binnvstream,x $ mC  ÷1ard˜2

HëðPolicy Control Dur…cs 0

O�frmajor cR Qs exe¸ l q iç`managež ¤]"
d†  {ÈÎx.  MostCs�p't need|Pbe aw`of
thi?A$  es~ nf/©ways: via éPby beþset to
a specific value× Òpgram afr Í Î`alreadÈ Uå.
Similarly, a¥ ?xit¤ “ arializ A
a G 1tort' òretrieved from a �  by¤e0pro¹ ï#e
±° Õ §€ hooks fu‘ll four o pse pathH‚@stor� 3 é Ù³(Ï,Op) tuple¹ r� identifi.¿Ðs during parsðing, and passes them to ò
:meth:`~email.policy.P ðheader_source_parse` 0 Pod of?  * Â  The
result $at* iq ð (name, value) tuple„ Ábe stored inR ðmodel.

When an application program su Res a ¤ W ð (for example, throughV ð
`Message` object `__setitem__` interface)7  e ¬ 23the\ 2are@Pd to
 ; Û :	ï, which
return*?xretriev+(2any¬õ e dict or list
s :Ê k_fetch	 cCobtak $e€ i 0÷ Generator request%ñ during serializTðj Aare
,l Õ 	OfoldÞAa stƒ 0conÝ  Ž ´line breaksòappropriate places.a† 	“cte_type`” d ð%rol determines whether or
not Content Transfer Encod• âis performed o™Ddata¢ v– ßre is
also a ¢ 	ybinary_/ ±„use by gº`s
thatíRduce 7 s outputR 0 Q $ed
$as2  ± ³,
possibly ' �at differú ^B thaä ‘correspon­ðwould be.


Handl"BÍ  Data
-  1

I¿òideal world all mˆ �  Z 0conj  W RFCs, meanh  th�arser c� adecodeQ "inÒ r �ized uni' # L Asendòiginally wrote.  Irµ  á package must ñRbe
abÉè qith badotrmattedó �s, inclu[“ s¦ aië ð
non-ASCII characteráQat ei·°have no ind&ed) 1 seÁ �‡not
vali [; ’.

Since é ž  O ñ*primarily* text»P opl@ions%6   
: 9 8 . €(except ÿàqpayloadtTcoursŒ
%sC… 5 asä¬ )ðUn-decodable binarò4y inside text
data is handled by using the `surrogateescape` error - Ar of' ñASCII
codec.  As with ñbinary filenames 
D òwas introduced to
^ Ã, this allow8 ñmail package to "carry"U j Ï Àreceived
durË 1parÓ ±along until4 ðoutput stage, at which time itðregenerated
in its original form.

T¦  ‰ i>ð † ½ ô,most entirely an implementation detail.  The one
place wher„ ¡visible inµ 0APIš  à"internal" API~ñ  Parser must
do4 È @ncod3of ; in » �, and pasx0at   ™ ó
appropriate Policy methodÄ ‘ › fÏ  usyŒ GQóor
to access header values preserv.¼ €d` bytesì •ll other
k ‘s convertl Ú À  ei* P backpoF 2 or aa safeÕA
(lo0 inä©ÿin some cases).


Backward Compatibility
-  (Àe :class:`~eË!.p@.G.G 432`X�provides´  j (
cj f@versI45.1�] (�.  It doN`is via0
foY ’Ôdfour+1‹ ãòs described above:

»€_source_j�e
    Spl. 3�first linâ } ` colonÂCobtaÊ  ñ, discards any spacesO Vafter< ¢@join£0e rô nD¿ n ‡a%¨I *  ø  # $s,n   ­  Ûep characters¨ ¥.L PTrail9 ÿ •`return?1/oró HfeedM ðare stripped fromÕ N `resultO c & 6ng.c8torbRl   = v C` exactp$s l q applicÖ] Wfetch¿I2O 0con§•�ö#,  LÈ Ü Las aþ:!.Hü—` object,~ƒA setG ð`unknown-8bit`.  OÔ“wise just| }  .
éd= OUses„ a's fol!to š ¢¨rsame waÎ xl|(’or did.

{_P ~ S6 aa @, bu 2_p'ascii'VÚNew AlgorithmM
m] ö legacy behaviorßÀstore_parse
ð"    Same as legacy behavior.

header_fetch_parse
1 òIf the value is already a 1 ñ object, returns it.  Otherwise, K sE P I Pusing B new# er, andG  u `result* e  ¹   D .O ð`surrogateescaped` bytes get ‘ ðed into unicode unknown character  L Ñpoints.

fold 1Useº ¦ ð    “ �algorithmû Aspec©  Ÿ  policy set s© ¨ § `are enƒ &d #``§ q-8bit``® qset for™ Â``cte_type=7" Ror ``. C.  R�¡a string.
7 �At some ê  ÷re will also be a Z 3"``š�for thatJ ä  B �serializeW A ide dx`messago ¢th RFC-likb D °ing, conver4_ any 2Î gŸ � /(Öð glyph.

binary_e * Óf£ Ò© Ñ
tÆBbackËá �­ûä þ) ûEYð`accord1ð)to :rfc:``5335``.
# Copyright (C) 2002-2007 Python Softw#ñFoundation
# Author: Ben GertzfieldN ñntact: email-sig@pI ð .org

"""Base64jÒtent transferƒ ¥ 0peržós 2045-2047.

This module handl?conG Ámethod defin‚ U T 2
ton ÷e arbitrary 8-bit dataSthree Ê  in four 7/ 
ÂsQ  ¿ Ü2as é P.

It¶"us†  8ð MIME standards H0ò	 to attach images, audioŠRtext
¢C³ „  îsB ø G7°provides anÅ`erface0 ýû deS both] / Ód bodies
withØ ñ a.

RFCYmCs a ~ Ú Qinclu	« q informR WBan
`Š qd-word' † 2.  Ë ÕÁis commonly X h ñreal names
in To:, From:, Cc:, etc. ­ \@s we{As SuDl: line:±does not do[ $ ` wrappño¼Qd-of- å MÐsion
necessarò:y for proper internationalized headers; it only does dumb encoding and
de ð.  To deal with the various line wrapp6 ±issues, use& bemail.p ñ
module.
"""

__all__ = [
    'body_r 7e', ’  
!  dstring5 m _7  clength* ò]


from base64 import b64<  uinascii 22a_1 S, a2b ñ

CRLF = '\r\n'
NL àn'
EMPTYSTRING ó('

# See also Charset.py
MISC_LEN = 7



# Helpers
def³_Á Á(bytearray):*‘"""Returnu%   of s whenç"isÛ"edÃÃ .‹ ~÷groups_of_3, leftover = divmod(lent A, 3)w @# 4 ‹ Qs outsceach 3 ð(or nonzero frac‚ ¡ ‘reof) in.E Gn =  A * 4 %if‰ å  ¨ Cn +=  rñ n-#½(òŸ 2, ciÖ='iso-8859-1'<Eõ£e a singlemÛ ñB"[ ç”n a givenZ !.
µ h ` namesì   Âacter set tooŽ# « á.  It defaultsN 6to ° =.  ‡ s0 òined in RFC 2045WÚcif notÓ _OD!""o Ûif isinstanceA3str0 ‡² N ) =] .%#e(
) 6d =^	` ").Ê!("l"6 ž p'=?%s?b T=' % [ ,D%d)Dm p(s, maxŸãlen=76, eol=NLÇ Fr"""øB	ÐEÐ D s will bëèed at, at mosti ð4s (Í1 toa'76 )3c $ofÒ R texts #en² eol, whichõ% O¡"\n".  Setc Bthis ²r\n" if youJ @be uát`result$2 2funŸ�directlyM bin an Ä UsJs7`encvecÜ]8 bmax_un™ ™s * 3 //Ô ¶iÌprange(0ŒAn(s)bB Ã ŠÓ# BAW: should?(]uherit b®0()'ãbµpbehavio  J 0addÝQa newô!to,¸ h?2  enã c ps[i:i +x­ ]Ý s iñP.endsX€(NL) and©f != NL` / p  enc[:-1] +( � Àncvec.appendð(enc)
    return EMPTYSTRING.join! ñvec)



def decode(string):< A"""D â a raw base64 $ ,[ ñing a bytes object.
> ð)This function does not parse a full MIME header value enˆ ad withG u ò+(like =?iso-8859-1?b?bmloISBuaWgh?=) -- please use the higG Ãlevel email.q åclass for that« aality.| 1""" !if» ù \ü (oäelif isinstancP,4U9 Ba2b_ß x.þ �('raw-uni”-escape')a -se‚ I  Øð# For convenience and backwards compatibið @ w/ ³ 0dar$ èÂmodule
body_# =(
  ð!# Copyright (C) 2001-2007 Python Software Foundað
# Author: Ben Gertzfield, Barry Warsaw
\ bntact:Æa-sig@pW ñ.org

__all__ = [µ0'Chk2t', ˜add_alias c$  uc$ r]

from¡ools imporÆctial

 YÍJmime aquopri P / L gerrors rn �_7or8bit´c# Flag¿ yp}fJ/ pings
QPo ô= 1 # Quoted-Printable
BASE64# Q2 # Bç�
SHORTEST Q= 3 #QÓshorter of QPR .¡, but onlyRc³s

# In "=?iñ?q?hello_world?=",V �=?, ?q?,Q ñ@?= add up to 7
RFC2047_CHROME_LEN = 7

DEFAULT_CHARSET = 'us-ascii'
UNKNOWN8BIT pnknown-?''
  'Q“Defaults
R QS = {<p# input
  Ý  «   
 0out#  p4 'ª€':  (QP,<    SNone)Ÿ/ 2/ 3/ 4/ %# Ž Ò5 is Cyrillic  Æ especiallykdò 6 66 AArab4 1lso@¯particular7 77 `Greek,^Awill9 Ámake it readµ Fo 88 oHebrew9 š9/ O10':É—  11˜ OThai– 1Ó01Óð (QP,        QP,  pNone),
 ð'iso-8859-15': (QP,    / 6/ ïwindows-1252':^ €viscii':  � Fus-a1 (¨ ¾   	 ë 0bigä ] � (BASE641  / egb2312� $ %   / oeuc-jp/  & g m@2022) – ‘shift_jis; – 8  ¹L :Î 8  	 g akoi8-rd )  / Î Tutf-8. ¶ (SHORTEST,ý '# ` ó}

# Aliases for other commonly-used nam ðcharacter sets.  Map
# them to ± real ones < òin email.
ALIASES = {Ã¡latin_1': aÎ'à - 	_ä: 2:  	)_3t 3:  	)_4: 4:  	_Ã® 9:  	_²: *10;  
)_7° 1ë  
_Hx í  
*_9x 5´  
W_10':x 6<  @cp94X ô  'ks_c_5601-1987? Beuc_é'ôk  kc $kr2 ¥'³4  }
8@Map  ÿ°ir Unicode  öc strings.
CODEC_MAP
ª }  4_cnƒ 
ü' 3_tw ñ# Hack: We don't want *any* conversion×Ôstuff marked Í �, as all�ð# sorts of garbage might be sentá Qus inæPguise, U7-bitR .K ’Let that x øpass through without¢ tto/from;F tX }P
# Cã ò nience functionÅ‘extending¬  above mappŠ“
def add_º( Ñ, header_enc=m W body doutput8 $ !):ñ a"""Add° properties;ñthe global registry.
= €   i#Pe inpàharacter set, ñ(and must be the canonical name of a
    character set.
 ðOptional header_enc P Abody àis either Char9 aQP for> õquoted-printable,% `BASE64) ö base64 encoding$ €SHORTEST& O  ½ €shortest· ^qp or@ por None7 5 noY 4.  R N Ñis only valid- ä ó.  It describes how message
sH  ‘bodies ineQinputS set are to�ç ñed.  Default is noJ  <ing|poutput_  M !isb   ¯Q that - ¡ should beZ ùin.  Conversions will proceed from ± ,® qUnicode "thI ^  |  ‹ 2wheï emethodßck 0t()Þ Acallò RThe dö – sg S 8s“ _ Û að ¡ BBoth²  –K  õShave Ë  Ð bc entr«‡  W„module's²B-to-- ñmapping; use add_ (£ Bset,S  I)M o%  ¸ [ @ doeéÀt know about’e”bodecs , !'sK �documentaƒ¡±more inform .( 1""" 5if —%==í:  áôraise ValueError('  not allow Uà'Ö “CHARSETS[÷ V] = (/,y *, „p)


defq_alias( ,…)  �"""Add a�ü 4 õ:  Q ±  xá, e.g. latin-1í â, æ	B ƒiso-8859E W�ALIASES[r  ù ^ Ü Þ  è­6mapí 8Qgiven  `1to/�À	…� ÐA F". � .5   , ÿr Python& ò , as appropriatH s¡second arg— ¼  u'(*�built-in,›!to“ØCe() &s Ó A stró ¡s˜CODEC_MAPpc· R


#Ïµnience func&o 3ing[ `s, tak âinto account
#†‘they migh unžÁn-8bit (ie: ?ñ	surrogate-escaped bytes)Û Bode(É Ö"ifTò  == UNKNOWN8BIT ò creturnª .º Åe('ascii', 'y x ŽOelseC Àcodec)



cñ4lass Charset:
    """Map character sets to their email properties.
6 aThis cN ðprovides information aboutC ò	 requirements imposed onY L êfor a specificŠ  .  It also„ h ñ	convenience routines forM  Úrting betweenQ �s, givenœ ð availability of E ñapplicable codecs.  G6 aN ð, it will do its best=N `on how" Šuse thatQ S in a C óRFC-compliant way‡lCertaiã ° must be en¿ ñd with quoted-printÛ ‘or base64c `when u�i€ €headers ) @odier J ƒ çðutright, and are noÎPlowedß ^ ä‚nstances†!isI �module ex5 �p followÝUm›!:
D `input_Þ òË The initialy€�ed.  CommÅRliaseŒ  +  Ì è .¢`official'àñ names (e.g. latin_1— K    M Ö@rtedòiso-8859-1).  Defaul–ã7-bit us-ascii©_ïaing: IÌâ `beforeÂocan be™  –m 0, t’attribute be?? toL yP.QP (ö“$),œq.BASE64' L »ãPing),§a €SHORTEST9Pshortœ/ofO  QP@ v IÆ.  Otherwiseësbe None|Gbodyz‚Same as & ñ , but describes” f ¥ ™ ~ message's m ð, which indeed mayë�differentUÞO – 5 ë.2)is¥X ¦  ‰ Ý 
9outlJSomeƒsš<†_they ˆšô	ñ Jº  2onej/emÉ1conY1theÄ. Tã Bset  	ã /toIM 
]Í  „:¼ PŒ r Python¢§3to v  a` À          inðput_charset to Unicode.  If no conversion  lc is
  ñnecessary, this attribute will be None.
: 1outt õodec: The name of the Pythl @used• … t� G 
„ !to> \ Ð Å 	 ´ O Æ  Ahavee s¯ �value as %inÒ .N 1""" ódef __init__(self, , ¢ ñ=DEFAULT_CHARSET):7  Ü ó	# RFC 2046, $4.1.2 says ¬ðs are not case sensitiv¹ÇWe coerce toO uÚø because its .lower() is locale inL I–‡argumentO  ç“lready a \ p, we le)ðit at that, but ensur@ eI Ñ  ƒ dASCII,V standard (
ÒXXX) requiresf '6try4  pif isin= 9ce(nW, strc /   	% 0.ené•('ascii')ª  * Jelseo   	@   =f y N UexcepÒZErrorY praise e 2s.C/' 
[   † 	 éÎ 0# Sñhñ4putWñ	 after filtering throughçfaliase  Ñ.g ê = ALIASES.getª û¹  # ²`an tryîÁguess which � ˆ 8andŒ0to Ä by™ Õ Mð_map dictionary.  T\ ƒhat firs”lÈuser overridš&ithqhenc, b  �3 = ´ë ,—  $ 	ñ(SHORTEST, BASE64,0)#iŒt
&‹ ~ } é–€s, allowX tÞs~ Yw defauli uheader_œ = r $ Hbody"  :
" 
¬: Ø ,ð a# Now ¨hãBdecsã�one isn't± Šined forjŽ"# a R raWá2witïèœ$asM  µê    �ODEC_MAP! Ãˆ 	 =  B{ " | À              ðself.output_charset)

, Ðdef __repr__(' !):   preturn  7.in< y.lower(C #eqA , otherH  "trb ‚ == str(( M òget_body_encoding7 ™ B"""Rœ ôthe content-transfer-7   used for N   .ú  â  This is ei³  N ðstring `quoted-printable' or `base64' depen› 5 on0 ? e | ,4  itb ùa function in which case you should callM 3 ñwith a single argument,± õMessage object beingF � †ed.  Theƒ q 0theßtH CGTGE~M �header it  to whatev ×s appropriatea§<s "OB" ifZ œê +5QP.s @ y6 nBASE64: pconversyOyFwise/ 5"""u oassertž µ!= SHORTEST. È V== QP² mO''K /elM ß Q G /se* ‚_7or8bit  q
r,  J—acter setõV 'v ö1thaƒnot None1 � -A 
z ±Z/ œ æ � 	F ú Óeõ ,›7ingÀA"""HûZeŠ& by~@vert4€it firstYbytes•e type of‰" (º ¥  ) will be $ dg!is|xset's `Ä Ging`v c:paramÒ ³: A unicode  ¶C �.  It musF• possibler Ä"to¾ 0e t;-1to ð   u¢N	)'sE £ ‰ c‚:Æ:ªªd¨ !, ïRFC 2047 chrom½V " =¾j _ Æor 'us-ascii-û _À %= á,¥ )¿ p# 7bit/?	Rings º ø óunchanged (modulo( ˆsO ç !r_$ e¶ _� (  9 iFðer_module is NonGe:
  Õreturn string  ðencoder_module.hea  ( pbytes, ) 1c)
B Cdef  , Ã_lines(self,k Ö, maxlengths)“ A"""Hf -: # a0 ñ by converting it first to ‚ .{  Ú ð This is similar# `� à()` except tha ef ais fitÆ  K @into© Pimum Å  ³ � as given˜ Çthe argumentˆ c:paramZ p: A uni' P for ; œ õ.  It must be possibleŠ  Ž 3to tã ´ ß 0 us R ù character set'sE boutput°. ¬ ”\: Max÷ ð iterator.  Each eleõ G  ¦ <�ed from ª 7 Ñ will provideü Inexta	K m1.  ÓOeÖ pis used…%an{
€uilt-in Y )()N ðand should neverh‘exhaustede e‹ ì5 	L  noC"un=ò RFC 2047 chromeL +se2™re only aJ Qhint;Psplitß Adoes @bestë7can«a0: LU3 ofdX@s, eœ\with š { 5""" �# See whiÒ ó H$we-6use~  Á@c = Ì.L_ Õor 'us-ascii'\ Ý_¢2= _Á(¼7 8   qg C_get9 rwà9 ³ = partial( ¼ , "Aset=» G £# CalculatŸPumberd 1 S š4]Þù #¯PtribuL o” CLdharsetç  æ R Ápextra =”(Œ `set) +à y·_CHROME_LEN� sNow comMAhardR.  Wej%Bá but we can't �7 onO ÄÁbecause someG iàs are variableª @gth v �I v bd wordˆ  st' ñ on its own.  SopproblemÐ½you have toM ü Š 	 @figumuž!ish #'s‘ ,è  L lè O &onÕ sÉ1is ò Ps two½ � "s:€,2 do2‡know howM °many octetsÉ²pecific sub  Y ÕKsH6 ge‡#ã1to,Rosecond~   t VASCIIÉ Às
        # ñ6those octets will get encoded to.  Unless we try it.  Which seems
    À# inefficien$ ù'In the interest of being correct rather than fast (andO A @hope% t "re¥ ebe few¨ ÷headers in any suchI ñmessage), brute forceÉ %:(' ¥lines = [] €current_ 
 âmaxlen = next( Õgths) - extraD Ðfor character  ustring:!  <i ….append(5 )+ Dthis‘ øEMPTYSTRING.join(H 
7 ƒlength =2’r_module.9_ "(_ø(e ,¼ Jset)O 2if 3 2 > þ 
Ñ  Õ €# This lÚÍ ð doesn't fit so pop i)f.ç  A Î Z.pop(„  # °# Does nothZ U ow`first º?Y  if2  Qs and n Í  m  M sŸNNone� Oelse= ðseparator = (' ' Cs 4 > ''M  t  ×/edñ  =   á1bytÞâX  , ìc€ 	ô (r(T  s J 7ýZ '   <H± ? = ú© ? = ý ñ breturnH
fƒdef _getj ˆr(self, ˆ ) 0if   …_ Ç–== BASE64+  -o ñemail.base64mimey    /elQ /QPM oquopriM ŠSHORTESTS Plen64c¡ à 2
>½  Á UlenqpA • A  T… <Ÿ*qp   c D $  ‘: œ Á 6 l  *Cbody�"""Body-Be a " ° by convert%iD ä1to Þ.e  Â €The typetF  1 (3ð  or quoted-prinó
table) will be based on
  ù	self.body_encoding.  If  õ is None, we assume theE àoutput charset. ta 7bit T „, so re-  > … decodedF �string us  thj @cii % ¡c produces: ƒcorrect 2 WversiÔ #of& entent.a 5""" Tif noB :  creturn]  >if , ë jBASE64C âif isinstance(§ ,R )(  o    =  $!e(m Y_Y)�  8 § `email.Øg64mimeÍz 8 /elÇ *QP› Œ# quoproT ƒ takes a¯ ù, but operates on it as if­ # ñwere a list of byteÞðs.  For a (minimal) historyQ ;whyL @this{pso, seey0nge{ó0cf700464177.  To ,"ly�;e aM  ] acter set,:nèQmust 
áit into pseudo¸ Ps via, M `latin1‘  
r, which~ØA anyB  % a ìlk pointP ôbetween 0 and 255S wis what¨e`expectG	I �QÈß"(''…½iii78 Jelse¤× D.» _asciiº î ±
import bin,  • Z:set zmessage Áerrors
from <  Y ¡

class CoÖ‘Manager:
èÁdef __init__:hIñget_handlers = {}7  Š s    W Gadd_> ^ s, key, Q l 	t[key] =+ ®  S cË S ÷msg, *args, **kwW ) Ç_type = msg.@  ((9if 1 "inº 3 ³ sHK& [H -](¢ % EOmain�  
¡   � (D ™ Àw)
        i÷f '' in self.get_handlers:
  _retur&  õ[''](msg, *args, **kw); ñraise KeyError(content_type)
& –def add_s{ (Œ  , % Skey, ’ )’  ! .2 #s[- 4] =/ _  ) z [ ± :obj¶ ` aif msg9 P_maine ö() == 'multipart'6  /ð# XXX: is this e÷ ñ a good idea or not?  We can remove it later, J   q# but w*  't() ` so do fT )w.; zBType{" ‚ ¥ valid on Ë "¸s" =J_fin£B3  1cclear_3( O )xªh  ê,�W, objâfull_path_for_he= None 0typÞº A Š.__mro__¶ ifn )  p 	Z
)  • UÝ „]}  * pqname =\ p.__qual )__% 0mod ö = getattr(typ, '__module__', ''M Z þ Ó = '.'.join((K !, y 0)) È_ Belse 	~ 5if L J!isKý - =C \ \-x 
b"ifÔ _ -1
[ •`typ.__ ¸0if  z - D y !ifxU † Q �Gìò	)


raw_data_manager = C«M (&  « "Etextå	³s='replace'¨	  =ÁNòpayload(decode=TrueÙycharset+ Sram('  SASCII	ÿ b .P (- ,x"s=˜ )à .r Ë ¼ ('Ô  ',ƒ_ ß ÷ 9non  Îé Ž   V æ  ŽE àô'audio image video application'.split(a ¡Á Z Ã « Ç ð message_contentôB(msg):
    return msg.get_payload(0)
for subtype in 'rfc822 external-body'.split(M ðaw_data_manager.add_W óhandler('message/'+[  ,    ñ _content)


def ûand_fixup_unknown_- Í ó# If we don't understand a 5 Ò ,' ñare supposed to treat it as@# if ð	were application/octet-s0 cm, per/ ðtools.ietf.org/html/rfc2046#sec< ð	-5.2.4.  Feedparser does± ƒdo that,N àso do our best¡ ñfix things up.  Note3  ¦ €is *not*ª `ropria oM Tmodel“/partial pR as Mš° objects, sŽ rey are ÀdL hÐs well.  (Howž �reassembl” ðem is out of scope Qñ this comment :)Q ƒnbytes(‰?)
rW'; Ø  oT�À_prepare_set› `, main,J0heaibmsg['CÈý-Type'] = '/'.join((A )3if I ™ Á ó if not hasattr(  ³[0], 'name't  ,   Amp =Ëapolicy^    = r = [mp. ¦_factory(* qsource_›"([( ]¤  H   Õ%  %
 %s]z 6tryÏ  ; 0 
#  ' @.def�#  ' Sraise8* &[0  $    •œ .8 ’ © ñexcept email.errors.HÙD�  #:exc‡  `ValueE3 “("Invalid“ Õ: {}".format(k  ‘  ’ b.fold(Á= Ã))) from exc‡_finalizžpdisposii`, fileî Ó, cid, params27if ,  «PNone ,7    ~  ÷ 6 �= 'attachÎ'à X C  �"D² )` Q ‘  #sºTram('- ! +†=¡ 4 Åreplace=TrueÎ?cidC	 !ID÷ "ci]#if¨;  >`key, vt rÖs.items(Ý]	À(key, value)óX


# XXX: This is a cleaned-up version of base64mime.body_encode (including a bug
# fix in the calculatD "un6 ð&d_bytes_per_line).  It would be nice to
# drop both t  ­and quopri‰ €in favor¬ ñ!enhanced binascii
# routines that accepted a max… ó_length parameter.
def é _ l(data,4 t):
    Ý  Ó as = [] ö , =H ‘ // 4 * 38 Pfor iJÁrange(0, len� ?), U ‹  �  2 ‹ 0 = ¶ _[i:i+7 ª  6 	Å „.append(HD.b2a
_ @).de!('k1'))¾ ù return ''.join(W 9)

\ótext(string, charset, cte, policyÖ  Î  Y+ .T (1 q).split$ („  Cep =G . : ² ±  í�embedded_ã(. 3): Ë  "epÐ  A) + 	 %epC onormalA Cb'\n6  ?  =  ifò b==NoneP �ò# Use heuristics to decide odb"best"}Aing.M  ;  if` ((60x) OxO| å, default=0) <"‰  R :try   Ž'7bit',   ¡  >  ex‰@ UniDDJ^Errori Ipass< $ifØàcte_type == '8‰ ? ¨  ¨ ò, 'surrogateescape'V · �sniff = 1 [[:10]*  _q…º(L %©latin-1'),ì  u  &.½… Ã% =Ï† 2 #Ðlittle unfair��qp; it iû$es#s,&‰ doesn'tŒ ‡e a_qp) >Í ˜ äå rcte = ' '7els - ) öquoted-printable3  % !ifp û ï/10"xš qØ›]æ;  Y/ =õ'elJ ˆJ —	] i Àata = quoprið	mime.body_encode(normal_ ¡(lines).de ß'latin-1'),
  °policy.max_K �_length)> ñelif cte == 'base64':  [ sdata = • _  ˜(embeddedž /, f &seV ñraise ValueError("Unknown content transfer �ing {}".fbt(cte)½ `return¿  , « ó


def set_text_O °(msg, strin ðubtype="plain", charset='utf-8',P _=None`²disposition' “ filename 2cid
 H L bparams" r header )#Â_prepare_set» 'Î B', s» ,6 Çcte, payload­ 4 (õ ä Ü b, msg.¯B    5E (  Sram('J 'cemail." Ó.ALIASES.get( m¼Åreplace=True| 2['C#-T -E#ping'] =­g‡_finaliz7©,¤P, cid0 …`)
raw_;À_manager.addy€_handlerB,R)jzmessagem ³€="rfc822ot(· 	 · %`/  b$ifK÷wpartialø¢Ñ /, ò is not supported for M’ objects"Ån 	m � O Ain (z³ '7bit', '8 sbinary'$.ð# http://tools.ietf.org/html/rfc2046#sec­ù -5.2.1 mandate.ñ 	  n "À  dXts do �=ª B  # Ì ð
 will get coerced on seri½a¨ 4 ifMActe_­U.  Weš ð# may end up claim)d øhen it isn't needed, but the only negativO òresult of that should be a gateway  P Cs toÂ  
  ®™ 0havŒ ñ to look through} dwhole C V D ÷discover whetherP !orgáit actually haƒ ¶do anythingÒÐ; N  0is ZP else¨^ þV�external-y¤’&Àon-5.2.3 manwdate.
  ùraise ValueError(  ) ð2"message/external-body parts do not support cte={}".format(cte))
E   Ácte = '7bit'f @elif3 ‘ is None:  + ð4# http://tools.ietf.org/html/rfc2046#section-5.2.4 says all future
G   ð# subtypes should be restricted to ’ ö, so assume that&· ó_prepare_set(msg, '#$',m ’, headersÿ ómsg.set_payload([1 ] ð['Content-Transfer-Encoding'] ='‡_finaliz~ pdisposið, filename, cid,¦ð
ams)
raw_data_manager.addÀ ó _handler(email.— ".Mó , µ  "_c¡ q)


def Tbytes  f `, mainu ‘'base64',Ì  Ÿ	 Ê =Ï  2cid
 @ bparams" � )[º¨  	¹¡4== » J  ·  ê P = _e¨"e_Û (   àx_line_length=™policy.ma  j öquoted-printable't ð# XXX: quoprimime.�ƒ r won't � @ new‚ ñ  characters in Ÿ >#öPwe ca9 ûuse it.  This means ®  «÷ignored.  AnotherO 0bugRófix later.  (Note:– 2rs.¼  I ¡broken on © Rends._ó binascii.b2a_qp`Äistext=Falsel ?�tabs=TrueQ  ‘.decode('[ '$ 	„ 	x€Make sur#p reallyÄ ¡only ASCII8÷e early warning here seems%àworth the overpð...if you care write cr own y ¼6 :)žÎ òÎ `in ('8u0, 'N3ry'gH 
ó, 'surrogateescape) Í Î < C?msgÉLpfor typË(~ ,  óarray, memoryviewâ ø2typæ F Ëð)
# Copyright (C) 2001-2006 Python Softw­`Founda~ñ
# Author: Barry WarsawL qntact: ga-sig@pG  ÖT

"""í€s and re>Qd funäñs."""

__all__ = [O'ùB_7orá	 ‘Ð',
    'encodóe_noop',
    'encode_quopri ò]


from base64 import + ²bytes as _b + A 
+ astring, +  ²



def _q A(s):Ž renc = _ - ñ(s, quotetabs=True)+ T# Mus” à spaces, which0 Ipri.G Á) doesn't doA `returnÕ ñ	.replace(b' ', b'=20')

¤ E _
C(msg« A"""E;ñ the message's payload in B>!.
o ðAlso, add an apprpñate Content-Transfer-W  8qheader.? 1""" ó orig = msg.get_n 0(deÆäencdata = str(«(? ¢), 'ascii'J L sL ;  /['£ b'] = ''×3(3ê¿d-printable=m¢9‚/.ä 9z7or8bit:1SetjŒ /À to 7bit or F .:0if í ‚ is None™ +`# Therä$noçñ.  For backwards compatibility we use� < G ?msgR Á '2 ª ð# We play a trickï ñmake this go fast.  If  HËâASCII succeedsý#¡ AknowZ0mUb³ ð, otherwise treat itÍW� 6try  6.u )e(a except Uni¥VError6  q 7els’< Kr› 
_¡Do nothing1ñ># Copyright (C) 2001-2006 Python Software Foundation
# Author: Barry Warsaw
#ãñact: email-sig@pG ‘.org

""" ’ package 1±ion classes” !

 " MlH!(E\6ion— w9 ` for eps� ©	i W RParse\ i _ úP parsmo 	Z HÈY  ^ z  Ç%leS Ù
Bw!ry0 (ª Q ðCouldn't find termñ.inating boundary."""


class MultipartConversionError(Message R, Typ ¦):
    """1 t to a mJ é is prohibitedn qCharsetU 	b W ÂAn illegal c. £ was givenL ð# These are parsÝ òdefects which th !er= @able¥ pwork ar. ç D? \(Valuè RBase -0foré 3  s ”  ódef __init__(self, line=Noneà  ' !if  &@not  T    …super().L  F )w @elf. ! =I Ê0NoBÙ UaryInÖØ Í Œ c"""A mÌ pclaimed% beä Í¥but had noA ubameterý TStartƒ @NotFŽ r ë € !ThZz s? c  ôpnever fH i _Closei /A _  Y  , á  ‰ 4 correspondTci “ ƒ òFirstHeaderLineIsContinuationæ ô t V7a c: Ð� as its fd ! he  � òMisplacedEnvelope� { ´'Unix-from'Z  i
1 in8´middle of a$ [block  vu ßBodySeparator‚ Í P withU1leamÑwhitespace anoñcolon before blank: ˆ ð# XXX: backward compatibility, justÐ c¼1(itOòemitted).
MalformedÇ º o = MisÝ 
qeßInvariantViolw`no sub�ns were z 5lidŠ  ‡ð entTransferEnco]Û ’€n invaliGsntent tA # eB ASset o%  itë•SpUndecodu_Bytes~ }pained b4   that coulQt be U !ed½rþ  ¡_64Padë bbase64Ö ±ed sequenceáaŸct lengthl  Ç_acterÜ o 	 ÝD  ~3in . �alphabet} L› UÐbase64 encodeñhd sequence had invalid length (1 mod 4)"""

# These errors are specific to header parsing.

class HeaderDefect(MessageD ñ):
    """Base c/ cfor a L d( .~  + ódef __init__(self, *args, **kwP  ) …super().- ' 
š Ií H¡  P 2""" � is not #A, meÌ â gives details¬ Ë 6 0MisâRequiredValue( Dß g Aø ðthat must have as u¢Anoned ³NonPrintablV\ ôSCII characters outside the ascii-pI Á range foundl  S| Enon_5 sÈ  , * ø) Jelf. : =  
.  3strún �return ("Ë ±following Aò 6nonÙ sÔ 3 inj1: "^  Œ   ±"{}".format`œ $))<ˆObsoleteÉz# ó uses syntax declared oG Á by RFC 5322rÞÆ ’LocalPart2i l& Ð_part contain°!n-C û a  í  Ðiºðfect only occurs durBtunicodeÓ,þAwhen4# 
 K  0 ð&d from binary.
# Copyright (C) 2004-2006 Python SoftwNFqñation
# Authors: Baxter, Wou¹¡and Warsaw[ ñntact: email-sig@pV ò	.org

"""FeedParser - An) Q feedÀ ˆer.

The ð implements an interfacar incr AallyC  +aY 
`, line×  ð.  This has advantage�Pr cerªq applicý ðs, such as
those reade ä nö off a socket.

é .Þ  ()° {primaryÈ @pushU €new data o!
p.q.  It r\ s ö  0re'Ut; ðmore it can do with$ ` avail’
Y ².  When youÏ1no :    9 Š ~ R ïñ call .close().
@ co™1tesg  ¨  Â  ¨  ð Droot&` objec äVother‚P of t˜ J "er0 atÓ ð will never rais„ % �ing
excep¥ "rnstead, Òit finds some#°unexpected,W ‚adds a 'ÙP' to
² ecurrenµ 2.  éej	qinstancû ¡at live ons
ë B's ._ Às attribute.
ð

__all__ = ['FeedPañrser', 'BytesFeedPa ó
]

import re

from email  gerrors Ä._policybase% ‚compat32' ´collections! Rdeque $io ðStringIO

NLCRE = re.K òile(r'\r\n|\r|\n')" L_bol& (' )( e( %\Z* _crackT ð# RFC 2822 $3.6.8 OpÞ þNal fields.  ftext is %d33-57 / %d59-126, Any character
# except controls, SP, and ":".
header0^(Fžð|[\041-\071\073-\176]*:|[\t ]ðEMPTYSTRING = ''
NL ð$\n'

NeedMoreData = object()



class BufferedSubFˆ# ó):
    """A file-ish> ð that can have new d^ ñloaded into it.
A 1You+ ‘also push÷ ðpop line-matching predicates oA ña stack.  When theO vcurrent/  B  es"    [ ò, a false EOF responsE Ñ(i.e. empty s“)ÉareturnÂ òstead.  This let_ pAÁ adhere to a” °simple abstñ¡ion -- it 0 qs until† Kclos« �message.J 1""" ódef __init__(selfŽ ’0# Ty‘stream ofù 1laso AtialYkË @to tÆ ×h H òSee issue 22233 for why/ Qis a ãj æand not a listH  Ÿ Q._par| $= ä@(newˆA='')Õ u !A  ¹ Tfull,©  + s( U  " =2 (F 2The H  æ-æZcheckN© 1eofYU = []p ±# A flag in† D qwhether` ¡ has been Ç@d ora  0= F—  Ð üR_eof_±rØ,ÉÞù ¥ €.append()K -opJ D È K 0pop÷ † � § „ : p# Don't
Ðget any trailâ •ô  v.seek(0©ƒ  ù  5 sn +R.read )2 NP  @trun2q _Ü †d = True7q ˆ ö  ifÈ0’ ü +  #if X 
  ! q%''P �  Q# PopZ p 2 ofÇš jsœfE/�àG âü $Ðicate.
      ð   line = self._ Ós.popleft()
  ó0# RFC 2046, section 5.1.2 requires us to recognize outer level
F ò # boundaries at any" ÷ of inner nesting.  Do this, but be sure it's– Àin the orderD @most‡ QleastL 5ed.0 qfor atel ¢ reversed(ú ¥eofstack):/  ¶ "if2 (    p# We'reÍ  ‰ ñfalse EOF.  But push¢ l�  D ¶ back first™  J   ‹  ' �s.appendˆ  Œ )   •return ''±   / 
  def unread ê ,ñÊ Q# Let¤ ‚consumer¶ a) ¯ 0int�†e buffer¹ bassert* ñis not NeedMoreData…  ¬ Ù 
&  «  .¥ Gdata¥ @"""PK�some new    — Ñis object."""M s àpartial.write(6 Iqif '\n'¶ "inS yand '\r 
A# Noƒ �completeþ €s, wait cFmore# Œ ™”  @# CrÁ  ›Ñs, preserving� Öep charactersS NÛ fseek(0×   sÒ   sÖH 
 ¨truncate()Ç "If­  Þpelement‡ ‚list doe€end in a: Û ,8 un treat³£# it as a ¶ [à.  We only che="or¹Òhere because °L 0endMBwithÓAmighJ+ ð  that was splitŸ  ¸ `middleÆ ¿#A  +Àsequence (se°gs 1555570 :†1721862)«!if_ Ð  s[-1].ends“ ({â 
r³:  ’&()ã)  . K!s($ ˜H  ) òsl   ìaextendßsC �__iter__�; Ê. p n__next-  „ ‰€!ifàj == ''eð raise StopIterapÚƒ  ] ò



class FeedParserJ ð """A feed-styleRs$Qemail+S Á 4iniÁ ð, _factory=None, *, policy=óGat324"""/ ° is called â€ no argucí © ÁpmessageºI 3Thek ñ  keyword specif0 í¿pcontrol4Anumbâ ×  O a=  tsÌ Úpà's operation. ó The default policy maintains
  õ	backward compatibility.
! 5""" Sself.K =T 
 õ_old_style_factory = False( 5if  …is None:  – #if[ v.messagK /  3 ¤from email4 ’ import MC 	a  2 Ë ˆ =( ;els› : x S q E { 3  f :try  * (t =J  )q  ) þexcept TypeErrorK ñ	# Assume this is an old-¼ ¼	T  X q ä6Truã' ö	input = BufferedSubFile(« ( Õmsgstack = []s  ‡parse =  ëgen().__next__0 Qcur =T 0lasŒ  n ¦headersonl¬# #H ð
-public interface for sup^Ping P¢ Hr's H AflagD —def _set_ (Í )“  .! 1 = OB Afeed6 g, data< Á"""Push more  © ao the ;-r.À_˜a.push(N g ÞQcall_= "()Å   ± „ «   .C  Z   ”ÖStopIteration " Fpassr Qcloseö l  ð  q` all ròn… È ± and return Sroot B objectl ™ó  W ‘3op_c ×£assert not¸âja# LookKÀfinal set of¯6ectž0if p Ñ.get_content_Äõype() == 'multipart' \`  N!   † D 5is_, (S , Pdefec e.4s.MU ÑInvariantViol³D+ î  @ ò‰‚.handle_S ({ ,Ø E§  ñE_newN R ¥ #ifK`
C5msg.Å« Œ0 È ]ˆ  i q ¨ Y._cur¤t  �/digest'± . ©_: 'T†/rfc822'9€ S
N Àself._msgstaóck[-1].attach(msg)
  ÿself._msgstack.append# ›cur = msg; Clast  ðdef _pop_message(b !):  t �retval =  z Fpop(— +if  A  E < “  Â  é l Oelse9 ENone+ rreturn ž 
 Ê |arsegenÇ ó # Create a new í ñ and start by parsing headers.V ¿ 5new%ú - U = []1 Ô# Collect theP €, searchc ñfor a line that doesn't match5 7RFCO C2822H ð or continuation pattern (includ_ �an emptyb )É  w u #in°Zinputt!if7 ú is NeedMoreData%  Yyield$ ²     © ¸  cif notÏ 1RE.õ (˜ x )   ´# If we sawƒ definedB ý /body separator„ p# (i.e.ød P, jusšðrow it away. Otherwis‘eL  p-!ofŒ y `o pushJ b“4 ï ?NLCì  ð 0def8À= errors.Mis•H”TBodySé D* … ?  fâpolicy.handle_Z `._cur,H6ectÌ=   A _p.unread=¦ã Ybreak ¡ < h ¢# Done witì- A, so…„m�Àfigure out w)Fwe'rNö# supposed to see inš¦ìÛ  î#e_{ ( ¤ sVs-onlPis a èõwards compatibility hack, which wasP# nec_$ry¡ Rolderí r3 €could ra…þW  AllH `remainã RsN §0 ar9‘rown into	ý  «¯÷  ã 
à_ 	Õ ›while Tru¨   3 (’ .7X *   f - j ' n  m Z== ''é     Ã   Ô sÅ  Jñcur.set_payload(EMPTYSTRING.join5*s)ÁÛÐif self._cur.÷#get_content_type() == 'message/delivery-status':
  /# (  S ûains blocks of headers separated byN óa blank line.  We'll represent eachG X U as aQ M 0nese ¢ ð object, but the processing iF Ûbit differentK Õthan standardô  * 1�s becauseV  reM °no body for M 
˜ Ws.  A÷ Î s; © subparts.E ªwhile True� ›ñself._input.push_eof_matcher(NLCRE. )R  :  ¯ ¢retval in H ®parsegen()j  4 4if 3 ïs NeedMoreData/  3 Yyield, Š  '    FOinue! ]break Tmsg =½ 3op_ÿ(ï ñ# We need to poppAEOF  erPorder  ú tell if we're a! « #? 0endë `0curJ’ file, nov! BlastÇÅ #E º ñ s ¢ê)opéï AThe .   stream mu‚ `e sitta¤ 0new�B or     1EOF¡P want!8see 
$isÉO, soO  Pfirst51sumI,L Tn tesŸ !xt"w O  ©6 th~ 0's ¹ 2 P	 jVCP.read Y  2 "if£ isá Îp ¼¥ �  0P# Notè ú"so/ Þð go!to/
‹ Z ‰%un A 
ˆereturn#if©Hcur.‰@main\
�Ø  # Ñ&`claimsKbe a¤Cðwhat follows is
      ó# another RFC 2822 message.
#  ùfor retval in self._parsegen():,  1 %if/ îs NeedMoreData+  / Yyield( R  ' �continue Ybreak £ 3op_Ð )()  ereturn #ifÕ €cur.get_k úent_maintype() == 'multipart'É «boundary =H   4if  Š is NoneQ  ï T# The�õ /claims/ to be a Œ õ  but it has notÕ  D   µ# defined av ÿ.  That's a problem which we'll handle byN  ð reading everyth ðuntil the EOF and mark   ƒ? asN  ‹defectivr ¹  Ó = errors.NoBh4InMŠD@ ` > rpolicy.Ï _Q ( P_cur,:ect = ­lines = []³    
^inputÀ H 2if ,  1  +  ¤   v �s.append( ä ñ.set_payload(EMPTYSTRING.join= .s)? C u  # Make sur¡`valid ¦ @ent Fô was specified pxz045:6.4tvif (str® ™#('P à-transfer-enco�ÿ', '8bit')).lower  ¥ 0not»0('7- 5 ¿, 'binary')Ð 9Š!InÝ …ƒContentT” E“ œ?p# Creat_ ÕÐ match predic Ä !es‘`inter-´	Ê#€ as well  ®wend-of-_uÛ.  Don't pushM “this ontot ²put stream  we've scan‰@past* F p1 +blõseparator = '--' +¼ 	@ Rùre = re.compile(%  �'(?P<sep>K ¥re.escape(h @) +
(  0r')6 €end>--)? ‘ws>[ \t]*  � T ê\r\n|\r|\n)?$'7¤capturing_ê [ = TrÒ d z = Falsdclose_Z_seen( À       while‹ True:
  ðline = self._input.read -(). 0if  þ is NeedMoreDataW  f Yyield( P  ' �continue m _== ''c ]break9 ðmo = boundaryre.match(¹ Ò /mo] õ# If we're looking at the end` ,# �done with�  å ð# this multipart. ] ð there was a new¢ c /ofL `e clos“ è ,š ðn we need to initialize K repilogu»  (   empty str^ Ï(see below).B ÿif mo.group('end')M  ³ $e_± q_seen =˜[  3  Wsep =f  'Í 2     ð# We saw an inter-ŽÍA.  W“Ae inŸpreamble?£ €if captu,_+ ?if % § `Accordƒ±to RFC 2046äU last/ œ?ngsž  J   # ¸{Ë +    `  d% =® O[-1]c 
1eolvàNLCRE_eol.searv0astM ­ s 1if B ; &   @ ’ ! = _ q[:-len(E Ž?0))´ ôDcur.U ô = EMPTYSTRING.join( Á ~ = FalsÓ Â   { o%unq Ê h ) R ÙÍ� separatE0wo êÿ s.  Consume anyÔ#§&leK  š ÿs that may be following.  OurJ dÅpretation ofÌÿ BNF grammar does not produc9b# bodyÇ jÆin such doub­ ?iesàQwhileog è  y  ª 1    +   '    €âöÀch(line)
     ¿if not mo:
  ðself._input.unreadline( )9 
_break" ñ # Recurse to pa	 ñhis subpart; the r ï stream pointsM !at1 > �'s first ¢ .3 Ó ñpush_eof_matcher(boundaryre. å âfor retval in Q Ê _gen()R%if7 ïs NeedMoreData3  ‰Yyield0 Ù  +   �continue% œ	ñBecause of RFC 2046,a0newT¡ preceding 0l ð# separator actually belongsý éA ,�/th¶ #w Eviou'ñ's payload (or epilogue if˜ 1pre/ ˜  i° is a multi ).#ifà�last.get__õent_maintype() == 'I 'Í¦ =U  ¬  Ñ&ifà  k b  / �° [ o = Non\ 3 (eld !is� 2 Ì  7  moY ôLCRE_eol.search(u < 8   /if} ' ÿend = len(mo.group(0)Z  7 š [:-end]qOelseö t	Á_ P  Ž ãif isinstance(. ,ß- 9 aA `L $ =O<[:-n)    oR 2 çI.pop…Ù 2  , �message(( B# Se“@ up ´Äÿcleansing, which will§ €# happenX@we'rš– a nested=<²  ‰ 0=curh rñ# I think we must b�  9p/blÔÐassert capturïing_preamble
    Ù.append(line)* ò# We've seen either the EOF o ûend boundary.  If we're stillM ‘capturingE  á, we never saw XstartW :NotÄ ñ# that as a defect and storeC l aed tex(  ¸ ‰payload.˜ 2if - 1:#  =f  = errors.S¤ Bú @NotF D‹ (F > òself.policy.handle_Q ( S_cur,É =  # S.set_Å ô(EMPTYSTRING.join(Q)B Ýepilogue = []Û @for ýB in � ^input Ê #if, ïs NeedMoreData-  1 Yyield, �  '   zcontinuë  – Gcur.Ê   ireturnx #¬¾not process�@then¢ƒmight haL  pwithout.G 9at !..µuis alsoº� � dclose_Z_‚cC ”C5 ”SRpEverythþ pfrom heŽo‘ "4is ¤, •#VPended–Pa new£ -`'ll neÛ�o make sug %he] k isn'tM :NonYÊ>sepZ§  1*''3Oelse2 
0 _‘ / i[WSâ þ	±Any CRLF atÄ�front of A  ¯  ²Ðtechnically pÀ+of‚îŠð .  Also, watch 8 (±an empty st)e ,K  which mean ·lE$PE µPfirstX Dš *[0¿ €ðbolmo = NLCRE_bol.m· (@ s1if 6 u  Q “ e[0] = G Q[len(7 º.group(0)):� 
ÀING.join(epi‡logue)
  ereturn ô6# Otherwise, it's some non-multipart type, so the entire rest of the
_ ñ# file contents becomes7 …payload.z ¥lines = [] @for  õ in self._input:!  i #if$ ês NeedMoreData%  ) Yyield$ 	H  #  ª 6inuÂ    ‚ �s.append( A• ƒcur.set_Ó ñ(EMPTYSTRING.join5 As))
p ðdef _parse_headers(G ,Æ &s)¸ Ò# Passed a li] ~  ?¡at make upLH  0 “±current msgs Æ 2ast( Y = '' _value{"no™  ƒ“enumerateÑ «  a q# Check… HFatio[ % ­0[0]Q Z' \t'F % Unot l² #  ' ±# The first<~ æ qs was a}1inu‹ u.  Thisü  F  Á# is illegalÜ leþAnotedÂdefect, stor - N  «�, and ign3 !it€purposes® ª �   q ° = errors.Fé H2¤LineIsContÚ Dž ˜ž F   cò .policy.handle_a }r._cur,  A Ó
 ^  §A# #   @  æµ  › _Qraw(* È r_sourceS(Ž )Ç   s,]¶ ,v ® ÍƒenvelopeYù, i.e. unix-from  Ñ ÷ine.startswith('From 'Ù a   - no == 0å�Strip of[Ð trailing newc	~  U   ÿmo = NLCRE_eol.search_if mo€  O  h ! =dö[:-len(mo.group(0))¯ ,  ¨» - ,„   N )el(   ‘ os) - 1µ €# Someth(Alook Vike a·1 atØQend -êK¡# probably. nAbody0�push back) L  ¹ Ostop÷9ièp.unread5 9rÁ 3  AelseÀ              ð)# Weirdly placed unix-from line.  Note this as a defect
<  ÿ# and ignore it.% @ Ò = errors.Misz ñ EnvelopeHeaderDg („ )H ¢self._cur.R ’s.append( 5 ‰continueR ±# Split theô 1 on ñcolon separating field name !Zvalueæ ñ
# There will always be a M À, because ifc  ) Basn'| {part ofœ  – ðparser that calls us would have started (  ©  4 Jbodyœ 1i =à ».find(':')
l I– ¬ 4 is	_ " o  ’ ¼ ! h¨ ' {clearlyM ñmalformed, but we mightÐble to salvag^Pe resþ  [ I Ðessage. Track! <W «keep goingí ™f i == 0:N  ³!‚yInvalidxP"MissKæ  õ.."U†‚	— àassert i>0, "_Ç"e_z Qs fed·¡ with no :gpno lead¤ 9WS"N Blast> òM[:i]" ¾@ = [Ò P# DonÁath allo "  s, so hand¼ +3ast{6if ~ 
{+‘set_raw(* rpolicy.± r_source(K § ñ))


class BytesFeedP( )p †"""Like  �àfeed accepts bF B."""@def   (’ c, dataN  1�super()."   ñ.decode('ascii', 'surrogateescape'))
# Copyrôñ0(C) 2001-2010 Python Software Foundation
# Author: Barry WarsawL ñntact: email-sig@pG  .org

"""C esX€generateÔrin text²2a mMÂ object treep__all__"'G@  orÛ Dì d … Ä]

import re
 4sys 5tim �random

AScopy : @deep  $io ’StringIO,ú"IO! d.utils* U_has_‰ðs

UNDERSCORE = '_'
NL	 °\n'  # XXX:Oálonger used byð ÝÁ below.

NLCA ùre.compile(r'\r\n|\r|\n')
fcre = !  ^FC ', �MULTILINEÆÈ>¶ …es outpu³M³ ·T–cbasic ópor writ%heí!to× ð given file objeñct as plain
    text.
 1""" # ò Public interface 
 ðdef __init__(self, outfp, mangle_from_=None £xheaderlen !*,G  �  apolicy! %): ò """Create the generator for message flattening.Ÿ  T � 1 is8 ñoutput file-like objectF qwriting( R uto.  It† Àmust have a 0 §e() methodr ‰Optional ‚ a¢  a ð at, when True (Ò ²default if t ðis not set), escapes FX‘ lines in´ qbody of À `by put× O Pa `>'4 Sfront1 m¿ °’ specifieHálongest length?õ a non-continuedp ó@.  Wñ "a  »  J õr (in characters, with tabsH öexpanded to 8 spaces) than ma© , e �will spliíJ pdefined zH”É class.  SetQ  p @zero bdisabl \g @rappve  The ËPs 78,gqrecomme¿ A(butÑ•required)™ ·by RFC 2822� S ‡ keyword�a.ÉPthat …õrols a number ofe aÊ#tsùJP's opU0ionõDf no] %iss d² =™ £associatedºChe M–cBpass¾&thB³E 8useM Ž¼ -ifT [& •z" =cV b  3 S elseß .2 l  Îb._fp =Ó 4 ) =— 
* �) ¬
) K=– Â ai � 7, s0# J�Qdelegoü Ý
a C_fp.L )^ ‚¾�msg, unix¹q=False,¬<sep“‘r"""Printw sï€tree roo`at msgA 3„  ^d ' Gãáinstance was c"®  Ûb •c¯p¦  Ü“of a UnixA•delimiterŠ RbeforeSfirstJ-æ  ß & ¬ QorigiòôN  ha½m P, a `Ô �dard' one¼ Äcrafted.  ByD Îi1is “ Kbinhibi|	à ,nyp MÀ   Note tható for subobjects, no From_ line is printed.

    ó$sep specifies the characters used to indicate a newR nH  6 ñ
output.  The default valu| Ñdetermined byf epolicy{ dM Awhen" òGenerator instance was created or, if non Å %d,K AfromK m aassoci> Awith 7msg5"""> @# We' q_XXX co‰ !tsm opŸ ÷ing on data that comes directlyN Ž ÿmsg, and _encoded] N ðhas already been� 0ver²(to bytes iJB O)| J 2ins8 õ	into a temporary buffer., G = 5 „if self. 0s N’Helse D !if? wais not0 :   ›L "= 	 s.clone(®= )3 ƒ Àmaxheaderlenñ] @max_Y �_length=Ô Q o  E_NL    9 5sep‘ " Ý*  ( ,NLT ¯EMPTY = ''K ! A a N  Q ²# Because wÅD‘ (below) eõwe recursively process messageƒ #W0parU ¶bY R $us7@ompuµ$ ()‘K ` ðs will automatically get sett UcT  · ˜ „they are» ^0is X¹ƒold_gen_› =š % 6msg% æt :try«ŠW 	 .  ÌE 0	  pif unix
Z  = u  pDget_* (é '   !t 2 I  "   ^Fðnobody ' + time.c ( . .()c ì bwrite(L +H_Ê j ) _* 6msgJ 0finç
  . :0 = †«	+	K ( ®ÔAdef –V, fp)k @"""CHu this g]
øexact same options.creturnò ¶_class__(fpÞ û  ß €_mangle_Ð_2  As, # Use ðting, which we've adjusted
      Âpolicy=self. 0)

. # ð Protected interface - undocumen ";/, 9 ñ Note that we use '_ Ówrite' when w @are   ing is com
 BfromS ñ the source, and J @_fp.6 eM # aO Àbuffer (becaš  _ ø$Bytes subclass has already had a chance to transforž ±data in itsË pe metho0Àcase).  Thiså ³an entirely– ðpragmatic split determined by experil;Qôcould be more general bL �always usI% 80hav ð  $ ´  z !ctWœ )it!edœáinput; but, si' ç @whol t %isÐhack anyway t( òseems good enough.E’def _new_±(÷!):“ � µGý Òtor overridesW ’to return( 5IO.;  “StringIO(ïq aencodem ?, sp < ! sX s-bXy sá {c_linesu  	y jWe hav~z + † endingsf pif not  s0 4ù " ‘ = NLCRE.x( )# 1forI  Þ Z[:-1]V  ™Œ> =  s   6_NL! !if] /s[T " 8 ñ# XXX logic tells mj”s else sh pneeded,œ1¥tests failâ ‘# with it\pÿ  §out it.  ( ls0 °a blank ele—O !ifJ ponly ifw  á R < il0newN.Ó  º X#<j «;5<msg3Scan't� ôÄheaders yet üo  p follow™ ˆscenarioŠ òsay a multipart message inclup£e boundaryþ� somewher' ³  Ñ #"µbody.  We'dØqcalcula5Ve newQ €/before/ùó O Ø "solgwe canù øcorrect Content-Typeà PparamoCú³ @The ­@we dc �is, so aá0makzÓe _handle_*()ý§s simpler,± i6 Pcache sTÙ s`Bo a ò0e÷  JJ Ï Ú 4 " cå s= Àat way, subpóart handlers can
  ð
# Do The Right Thing, and& ÷ still modify the Content-Type: header ifO ¥necessary. õoldfp = self._fp Etry:  ‘ " ÿmunge_cte = None#  P  V Ïnew_buffer()0  Ædispatch(msg  ofinall„ [ ¹ 	N › ­ 	( 3delï 2   �# If we  dW‚cte, copemA�ge againŒare-fix+ 6CTEZ"ifF  -
J msg = deepW 
÷  j¡# PreserveV Ê"orÐ 4CTEâæalready exists€  J  „ “sg.get('cñtransfer-encoding') isÍ
§  A Umsg['Y: E: 6] =å 5[0]H < OelseR ’.replace_Ú › 	,_  ` ?msgJ Hype'= &1]= h# Writ]�s.  Firstüasee ifgîõ object wants toç #¹� that itw Dð	not, we'll do it genericÔ¤àmeth = getattr
P, '_wž 1s',›¾  Ô 7 ´� 
A  V > • „ (8 %    .Š @(sfpC‘value())
ÿ Udef _» 2  , ÁòQ# GetGAš1for ], ”n try to R 
f _ "._%ñ_<maintype>_<sub
 1().w£there's noš#r o µ  7À# full MIME < € y o e J  ÷ï's missing tooN KgBody()  E=8 a_£_á /0sublÍ) ÿ ( ðpecific = UNDERSCORE.join((W t, sub))9@('-'s'ý ” { " S' + sd š  Å ?ain€  ¤„ O ƒ  = !
 ! ^  Ú ., ˜×  5 # v Defaul« â·R ‹ðh, v in msg.raw_it‡ems():
  ±self.write( õpolicy.fold(h, v))/ õ"# A blank line always separates headers from body: Z e Q_NL)
 # a Handl= 0or * ñing types and sub . ; adef _h8 Q_textÀ W, msgã �payload = S.get_ (Ø 3if  Š is None#areturn{  9óif not isinstance(> W, str|  - ðraise TypeError('strÛ 3 ñ expected: %s' %ó P {ië €s_surrognT(msg.Í u ycharsetõ Sram(' 'ü  ¤ 3if     Ü  ( ð# XXX: This copy stuff4 ðan ugly hack to avoid modifyî 5the? J   p# exist �message.$  msg = deepp  ó 
º  H 0delÜÿ['content-transfer-encoding']Y '.s�,	g " 	T[I �   ïÐ_munge_cte = » ¢ 
,£  I  7msgE Vype']© 3if x `angle_†_ÉÄ Àfcre.sub('>F®$',Q N  Œ e_ñs˜€‘# Defaultì ŠrÈ _6 iBody =¤: º�multipar¿ð# The trick herem!to!°e out each ? ˆñly, merge them all“  K±# together,VÐthen make sur0  at5 ÷ boundary we've chosen isn'tL ¡present in5 ]Å0msg—Vs = [‚0sub¯    Â’( “ 	\ 0eli�˜& ™Ð# e.g. a non-• ctHƒse of a “Ñ with no star¬è  Z,õ(u I ! Dª  jF9 k, listÓ„# Scalar§
U  :  j r fo6 r© 
 �Â »_new_buffer× ˆ# zclone(sÞ  g.flatten(Ü`, unix€`=FalseÑ anesep=B ý»   m)�.append(s¨gvalue(à# BAW: What abü‹Qies t Pre wrE d•ðdouble-quotes?
    ô    boundary = msg.get_ 0()
"   eif not- :   ¥# Create a! û that doesn't appear in any of theB émessage texts. 0all ð = self._encoded_NL.join(msg  s®  • Å 7 FmakeÛ U 
4  sE ' 1# I¿ ð%re's a preamble, write it out, with a trailing CRLF
—   !ifk< 1 is]JNoneY#ifó Êmangle_from_#  P I ù= fcre.sub('>From ',k È  8 ;elsq   N   ¾  $ ‰ó t_lines(' 
b ( ' ( 6_NL! t# dash-d -½nsport-padd6A L f'--' +m+'
^ •body-part» y-
F\ B_fp.` mRx.pop(0)³ ð *encapsulation
  þ # --> delimiterÌ *   ¡ 1for _·  0mŠ 
¯ #j 	
l � Þ Ú  o_NL + E > #’ 
I  K 4 Í · .oclose-N ¤ ¶ / 	NÜŸ.epilogueU.I U" ñ  U, f 
2  Ô U' !)
) ðdef _handle_multi&q_signed`í),à# The contentsy-  9 ð	s has to stay unmodifiedw0ordÅao keep|  ¥ #¸ C ð ature intact per RFC1847 2.1, so we disable heaM †wrappingÜÑ# RDM: This i(`enough”  completelycQserve}  ¹ P, butjGhelp,pëepolicy· X á = p.clone(maxf–_length=0Ç6tryD ù B z y5 ofinall9 { Ç ÷_#¿very_statusÎPWe caQCjustr$thc s directlyB ´ Ó's file objecÀ   # becauseó, this will leave an extra newline between the last header
  ±# block and$ õboundary.  Sigh.) ' es = [] õfor part in msg.get_payload():'  k  : ùself._new_buffer()# Ag = # {clone(s �.flatten(r ð, unixfrom=False, î Asep=B :_NL> @text_  £ [value| > 0 = ( r.split(I }encodedQ ±# Strip off8ñunnecessary trailing emptyš 	é !if suz c[-1] =ÿ _t ZEMPTYG KŠ}.append§ b.join(V Z:-1])	OelseS  6 `# Now V A allí ‚ Q withrç @.  T’1has) elovelyý ñ# effect of separat'3ach‡S ÷, but not addingM í’one afteru  ç6one¼Ë�fp.write3Õ 1))
b Ðdef _handle_mØg8 ,éÜØÔc# The . #a h r/rfc822Zðshould be a multiþ‘ sequence«  #B �length 1†ñ e zeroth elementFist V   Mà M  bj§ à ! 0subw @.  E]‘ct that o& ð , stringify it,ÕJ rv it out‘�# Except, Pturns  Ó, when it's aV € instead Qich h÷s* g  ¿Aonly ! HäðParser is used onCë  .ˆmime typE
‚ 4uch˜ðs are generated by, "‡example,� ’Groupwise� `forwar¾¥ unadornedV ÷.  (Issue 7970.)  SoK i¼Pat caN  e just emi„e%Fbody^U=¬.’T Pif isWSance(-  A'stÙ VgtÞ/0)‚h …˜1 8°  Ý7 Ç f#toGð	odule level function; we(á a classmethodà d=#Üð  _compile_re so7 ñcan continue to provide�mm N  =@back V ô atibility by doîð#   _make_boundary = Generñator._make_boundary
    # at the end of ñ$module.  It *is* internal, so we could drop that...L Á@classmethod Jdef t ñ(cls, text=None):( ‰ ô Craft a random §  ˆ f3 ñ is given, ensure~ ³ gchosenM > ñ doesn't appear in0  ‚ µ  | stoken =z .� õrange(sys.maxsize)] [ ñ= ('=' * 15) + (_fmt % N   E'=='6 iÄ  ú ù  � ereturnó 5 >b = 0cou�E = 0) ªwhile TrueY ñcre = cls._compile_re('^--' + re.escape(b° €(--)?$', –MULTILINEù  ª ðif not cre.search(KÈ %   Ubreak   Í P + '.ƒ Cstr(Ñ 
i  U += 1G (
 pè m‡s, flags¤ G 3re.- (% A


Ç° BytesGener<(
 H 3""" `es a b. € versionIòa Message object tree.¹ ñ
Functionally identical toœSbase \ €or excep¤©‘output isx 1and—ôstring.  When surrogates were used inE –to encodeL ,„ �se are de `d backž m Bfor … ›Âhe policy ha– Àcte_type set9 A7bitY ~mõis transformed suchÓ’ “non-ASCII` • ð properly contenY C #erË €d, usingÈ � charsetM Ãunknown-8bit‰0TheË $fp¥qmust acrî Òin its write Ü92"""Î æ x(self, j  S._fp.! .oµ('ascii', '¥Š6'))V ±_new_buffer\ { MÃ¥8IO(5 c  { 
� 4 s… < § �_headerst W, msgy `# This‹Palmos™‘e same ass„,À 6�handling� Æ "# . ps with šêc # 8 0, v¹çmsg.raw_items(•  )  ð kBelf.—ö.fold_binary(h, v)kñ# A blank line always separ91 fr“d6p 0(H._NLJì  e_  HIn ;± “òoriginal source was ˆDjµŠ 2 it­ðout.
        if m÷sg._payload is None:
  ereturn ÷if _has_surrogates(mD ú) and not self.policy.cte_type=='7bit'b "if- Ú_mangle_from_#  � g ø = fcre.sub(">From ", " )²  < � ¬_write_linµ , ;elsÿ ðsuper(BytesGenerator,O à)._handle_text!)
H ò # Default body % r ‚ B =G? : Á@classmethod0 ödef _compile_re(cls, s, flags)#¤C re.- ô(s.encode('ascii')5 ð



_FMT = '[Non-¿ @ (%(¡ô)s) part of message omitted, filename %( a)s]'

· 0 Deq d&(
 ª 3""" Qes a x àrepresentationw ay .“Like the < �or base u ô , except that nÎ  Ã òs are substituteRõwith a format string …    k  @ .‚1""" Š€_init__(ÿ˜, outfp, µ=?  £xheaderlen 3fmt
 !*,Q  – '! ,  1"""ý ù $._‚ )ø pan addiBRal op	 g €argumentàsallowed\ f ðWalks through all4 sŽA  Ifˆ0sub  N  &&ai C  `Ù ',,  n it printb 2e d# qoR • ÒOtherwise, fm¹ ´ñð is used instead±  ¿ºo $. M ‘expanded  3  fo  §keywords (Ù #%( #)sˆ "):Ÿ C÷  	 á  : Full MIME  ã 	›™ Amain&  9 OMain9 3sub8  : Sub-q ¸ q #FiÐ¤ 
adescriT6: D ˜ associatGç ‹ \ v @Cont�•transfer  ‡ , Th@YPvalue‰Ñxfeaning™à1�  é“ 
þ  Q   Â(ifè ÷ 5  w  ._% = ×¯ Ë  ’ð_fmt = fmt

    ódef _dispatch(self, msg):
  °for part in g.walk(   ' ¡maintype =+ Ô.get_content_ %()S  3 4if  ¦ == 'text'v  #   `print(€ U ðpayload(decode=False), file=½ 
d ,elf PmultiN k  ù# Just skip this¯ Œ *as Oelse³  Ž �._fmt % {K  O '2'
 N   :9  ?(),< < @ <   @ 0sub`  ? |  ?  q@name@   Q('[no– % /]'Æ Ædescription'G 2('C<'-D  	? � _ „ ŠencodingË „ ¤Transfer-E) Š  e ‡ }ÅðB


# Helper used by Generator._make_boundary
_width = len(repr(sys.maxsize-1))
_ˆÒ= '%%0%dd' % 4 ú

# Backward compatibility
d / = ñ# Copyright (C) 2002-2007 Python Software F²  îð
# Author: Ben Gertzfield, Barry Warsaw
\ ñntact: email-sig@pW ô.org

"""Header cQ and  €ing funcq aÕ ñ."""

__all__ = [\'A '×'; 1e_hV  q	 Ä]

import re
 …binascii ´ ¥.quoprimim)  abase64 R
fromã ƒ.errors ^ � `ParseE * #  ch ct as _ #
C = . ð

NL = '\n'
SPACE D '
B 3b'  8 ð * 8
EMPTYSTRING ð'
MAXLINELEN = 78
FWS ó \t'

USASCII = v Q('us-`')
UTF[  `tf-8')ŽMˆÌð ed-word strings€³the form =?é ð?q?Hello_World?=
ecr‡0re.Ðíile(r'''
  =\?&ó  # literal =?
  (?P<Z �>[^?]*?) % ðnon-greedy up to Š ‘next ? is 7 ?
  i j i ²€>[qQbB])i áeither a "q" o	 ÿb", case insensitivef Bed>.Ì ð    # non-greedyñ up to the next ?= is þencoded string
  \?=  ð# literal ?=
  ''', re.VERBOSE | ð!MULTILINE)

# Field name regexp, including trail	 ðcolon, but not separat òwhitespace,
# accor; ðo RFC 2822.  Character rangeÖ  from tildeó ðexclamation mark.› ðor use with .match()
fcre =É ó
compile(r'[\041-\176]+:$'Ù ðnd a header embedAÔin a putative Àvalue.  UsedŽ ´check for
## QinjecŸ ”attack.
_T _d •  \n[^ \t]+:‘ ÷

# Helpers
_max_append = email.quoprimime. °



def dek (r 0):
A"""D š a messagÙ A¡out conver·‘charset.
B òReturns a list of (i#, ) p) pairsC @tainú@each+  ®ž dM Tparts © 0setú@None]T non-Ù6  ,O �otherwisež “ower-case	�  ˆ È!of3 º t1setK Áspecified in# } í ³ ` may bu  Q that !or  0con êT2047 P Swords¿ 2r i8 M H� obNq #Anrerrors.$ P¡E o `be rai �when cerz yŽ * æ òoccurs (e.g. a base64@) @xcepÉ!)./ 1""" @# If« iƒ  § ñ , we can just r,	?bchunksO £if hasattr¥B, '_! '° ´F 0[(_§ Š_=yCstr( 0)),ð ±  G  0for& 5ing¶ èÏ.„ ]; ì "no°1 Û 6 :4 noã  ý³ecre.searchë à I  , õ)~  First step@to píI allX inVripleXCformË (9"d_©,Ö @@.  FMn+ (!s,o 2las A# twŒ pts will  ¸ ÷ ÕB = [Æ  oGlinedPsplit 's(Æ "= 0 # ($ )¿  Áfe= True Pwhile"tsæ *   uÅ = f.pop(0O  % 1if V 
;   ?   .l<*p(E  / F v = Fals�   5if @ g -.ã%(()  )n À        if p{arts:
  °charset = p! ý .pop(0).lower()/ �encoding0 +ed/ W áwords.append((e Aed, 	 Sing, § )’ ñ# Now loop over ? ³ and remove ñthat consist of whitespace� Ò# between twol ±ed strings.# Pdropl> A= [] ñfor n, w in enumerate(� )^aif n>1’ Bw[1]	  ä \[n-2] �1][0].is› (G  ¬ƒ 2n-1 Š d‡ ”reversed(+ B 2delA[d]
Á õ# The next step is to decode each
 Õ � by applyôCthe m K óbase64 or quopri transformation. Y  d_M sm anow a UTof thŒ 5 " (ˆ / ö�¤  )s ’)2ed_½9  (ƒ 	¤7  Ú vis None  z *i´ Qan un- !edO‘  %   µ Æ” 
Ã 8 Belifn „ j== 'q'ƒ  ³ ’ = email.cÂmime.header_y 0j  `   # 5D°_2 ’ b’ py |r = leny ð % 4   # Postel's law: add misså 0pad?? Ÿ   2if V 
ü   tÚ ã += '==='[:4 -5 — -   >tryF 	F³FÆ 	œ þexcept binascii.Errorb qraise H–PQ( 2('B i  ÿ e? 'p ³ ;elsy  3 e¸D ’ PAsserŠ� ¥UnexpectedxU: ' + › `£convert alD )QbytesÐ�collapsebñ ecutive runs ofD²# similarly` =\@  ]Alast* `  4! =ŸV  ÷ Ñ¿ Û	.ŸÂif isinstanc¥,à  k N 1 = Ú €'raw-uniw-escape¶6if ª ; =0º  l    Ú 
 # „ 2 !=k  Û  I BØ[  Ð ,7 Àcharset))
    Àlast_word =  
 1    £charset = 
 # Jelif$ …is None:#  N F  \ Ê += BSPACE +m ?els5 	 = S õcollapsed.append((] ,Š !))0 ureturn 7 ð



def make_header(decoded_seq, maxlinelen=Ê ", % R_name Y  Ø  òcontinuation_ws=' ')Ñ"""Create a Hm ò from a sequence of pairs as ® bed by • £ !)
v  ƒ takes a¤ ó value string andQ  " p J t æof the format 	B ,ðt) where 1 is6 h N   Ê  M  %¢acter set.¸ �This func#¶ !oný _those	¿ =l Ðinstance.  OpP 'alµ	°,Ÿ@ arem!inO  ³ ^ Ñ constructor. 1""" 3h =¿( 	u =1,? (   c 	+œ µUfor s~3 in¢Y S #kô" means us-ascii but we can simply pass it on to h:l  I (ifÛ2notY  A  $iss(Übset, Cç E    $ =  1 l  á  ü! h¢ cl´ —ñ  ´ò__init__(self, s�¼  q " -Ñ	§Ð' ', errors='ø$ctã ø çãMIME-compliantm Q that” ñ�ain manyº +s, Q Ùsm ú 4ialP êQ.  If¬,‘
$ 
,  H  Í ”Q  YouŽ  la¨K  ¿n with ,ðmethod calls.  s may bà5byt|€or a UniX�,š0see« œ a ‘ documentF ’Ÿ semantickðserves two purposes:í#ha¥1ame# } D 1arg{ • î  h`t alsoÓD ‰ defaultL Ë¿ rall subytK<@omit
&seO “  { ž€provided ²¸		ž Ðset is used bðoth as s's initial charset and óthe default for
  õsubsequent .append() calls.
% ð(The maximum line length can be specified explicitly via4  / hlen. Fu �plitting — RfirstX ðto a shorter value ( Qccoun¹ 2 5eldž ð&header which isn't included in s, e.g. `Subject') pas)L uname ofN ’ !el< [ _$ 0.  D3maxÛ ` is 78d¦recommende� ·by RFC 2822Qðcontinuation_ws mustJ+ � compliaô  ld*õwhitespace (usually´ `either;  o “hard tab)@willc 0preæhed to ˆ N  Ø þ`errorsç  8 9 `hroughA  .
8.H 5""" %if‘…is None:  Š®•= USASCII óelif not isinstance(. 2, Cå)M   1 )V cself._H $ =�   §=1<_ws0 ¥hunks = [] 1if < Ã ø ˆ x$s,‡ ", t° 'ifM ‹K ’Å= MAXLINELEN‰ k _&  & 7if õj J ' ulen = 0@ ;elsÛa# TakelaseparaùQcolon�Ô&inèC n Blen(~ šR) + 2­Àdef __str__(8 ’"""ReturnŠ  trUc!of S .· D Æ._normalize(‘/ucì Plastc  ž  å =ú Qfor s‰ ú±œ L
ÙB# We,ppreserv|ðaces between encoø öDnon- 6wor” VÓ# boundaries,#Pmeans� us we neíUo add\@when %goÇ O dfrom aÂ  á/us-ascii, or $ 	  ( aJ –â.  Only do thi˜  o@secoÔ7nd ½�
:@# DoÀ iì
… …¶ already haÙÝ "a Á`(trail:aor leašdQ €n transiØ, D 2nexÞ 	ô  â  $= –Ê.UNKNOWN8BIT P àoriginal_bytesû = string.encode('ascii', 'surrogateescape')
  : û = original_bytes.deK lreplacC ½if uchunks:[ …hasspace  ò and self._nonctext(€ >[0]› òif lastcs not in (None, 'us-â )u  ß `if nex9 5 ‡  S ¡ F  J Ü Þ.append(SPACE©  *   u  = ¨ &el˜  ~ œ  ú >� ™ A +-1€ > Ccs =I	Í | Âó	return EMPTYSTRING.join(7 !)
M ð<# Rich comparison operators for equality only.  BAW: does it make sense to
{p# have 9 öxplicitly disable <, <=, >, >=g ?ˆ °def __eq__(šw, otherY# ð may be a Headerk axñ
  Both are fine so coercec   ðourselves to a unia² (of the un½2d h` Àvalue), swap" K AargsÅQdo an± I.* Š! =&å ƒ û Ùû °s, charset=Â , errors='ã7ct'A"""A  ×  É CMIMEÄ .ë  „Optionala ò, if given, should]C€ � instancÒ V 6namMAof aI Ðacter set (whO@willI �converted– ,a V U).  A'j1 of·  (o ðdefault) means that„u  o º  “&th— ÷constructor is usedsB b;GU hpng.  IfçWis a - ² „(i.e. is&0(s,P )w @fals8Ethen° iÄ !e ceing ofL Ü e ,Z#a ” E X`raised¼ &¯ J 0canØ2be =bd with=XÛ s¨ b  º @ing,anM 	 Àhint specify¿  }  R  F 6s iL  / ¬  € @n eiä€ case, w(`produc[ ±an RFC 2822TUliant– œ us+ ( ‘047 rulesÀ Ì 0q2ed 1 -poutput c| ¤  ¾ 0set¥ µ  YP Ðto the
      ð  output codec, a Uni ó	Error will be raised.

  °Optional `e) òs' is passed as the  Á argument to  de_ I �call if sA åa byte string.$ 5"""  if charset1 UNone:  œ  ƒ= self._ $ pelif no> “instance($ 2, CZ )S   1 )V T  s,Ç J Tinput“ $ =Ê .  ƒå or 'us-ascii'a  Û 3if ) § D == M Ê.UNKNOWN8BIT¾  : bs = s.z(^ ö, 'surrogateescape'Ó  8 ;els_  	N 	’ ,õF Ñ# Ensure that  â`s we'réoê@ canf¡ d*š#/òacter set, otherwise an early  ± °   L .{ |#if%? !y?tryŠ 0.en (x Ë9 µ eexcept’9 ˜X ¤ &!=è/  ^ #^    u = UTF8 Mñ unks.append((s,“Rset))àdef _nonctext(5 7, sq"""Trueñåø �!a 5 R åŸof RFC822
ðreturn s.isspace()<Ðs in ('(', ') 7\\'� ~š Aplitñ ð=';, \t', maxlinelen=] ,  ‡sep='\n'Ê Qr"""E’ð a message header into”÷RFC-compliant formatDðThere are many issue¿ `volvedÈ ðconverting a givenU  ¥for use in£ Cmail† ð.  Only certain è XAsetsw preadablF U mostK eH ±clients, anÕÞ žsµob !onb Pa sub™%ofJ á7-bit ASCII, cì 0ustíPtakenëPprope½î o ¨e (withM `Base64æÀquoted-printÂ )õ °s.  In addi§,y reaM 675-ðlength limit on �p‰ d` •field, soH   `-wrapp˜mÞ 0perðPed, e· È € double-�ZŠ’ specifieYƒmaximum µ ùof each generated› à, exclusive of	Ð linesep strióng.  Individual lines may be longer
  €than max$ ðlen if a folding point cannot< ñfound.  The first[ L @will' ñ	shorter by the length of òheader name plus ": "w  O # òwas specified at H@ óconstruction time— ödefault value foê å ¢s determinU z  U 
Ž  Opk ðal splitchars is a str,qcontain õ
haracters which should beN ôgiven extra weight._ tG Áalgorithm duc rnormal ­ K awrappiô1Thi• ðin very rough support�õ	RFC 2822's `higher levelM òsyntactic breaks': ñ  s preceded¯ a  @ are eferredO ¹  ],  Ù a, with ; *2pre= 1 in  or(%inM L´they appear* ‚ô.  Space and tabñPinclu² X O 6 ð to indicate whetŒ Fence» ³°to one over¦ N o9 a !0 R "n  Ù ò Ps do S
Ç  &P  be4 Ù tBdoes= affect Ó€047 encoç  G /s.¹  )ep¶ to±@used	Psepar	·6%of“   Wk isÀ most useful~v typicaa`PythonÁlt±ions, but ii Ž 0set� @\r\n pproduceé ¥-compliant•  Õ  ¸ oqPen ne£.% 5""" bself._KUize() )if	us None:  1D"= J  * 8# AJ �of 0 meanø@n't ²À.  For all p- %§ purposes,K Pchoosòa huge number here ac0she~!atü1mak n@# _VFAt›\ mu¡fimpler2
O== 0	!10 µ fg =y (5ÃGlen,)ö  k A  n@inua”B_ws,^]Ñ�lastcs =Éž Ahass( = !   í$ 3forØ,² etm| Zhunks5if X i  Q 
%  Ó & =a ³Y ’nonctext(›6[0]Ì  <   !if¶ cd @in (h à, 'us-ascii'):/
   ñif not hasspace or charset ÿin (None, 'us-ascii'):J  ] ýformatter.add_transition()3 Oelifk A and‰ Alast¢ } y F ‘ = stringa ò self._nonctext( J[-1]·  > Dcs =· 	Ô By= False @line9 Z a.split 1if  å á ‚feed('',* D[0],� 
® OelseH  L ô
B 1fore 1 in _s[1:]S 	0new¿ Õ  ìÐ.header_encod�!isá f\  < û ­€continua^¡_ws, ' ' +§  .lgIp(),„ K   ú  ( @  så * =m l  fwö / `[:len(
  )-
 D /)]6 Fìfß 0 ê 6] ns) > 1HD¤3if TZhunks= 9 Ò†value = + A_strì 6sepSÒif _embedded_�.search(C Xqraise H.P’rError(":  3 À appears to ]ain "TD"an y  ? ‚: {!r}".´ € « breturnd 
P `def _n™Plize(1° ´# Step 1: N# a the cRô so that all runs of identical¾sh  `ó# get collapsed into a single unicodeÀ.6 l 6= [V ²_â0 = d0  Iunk 4  ö A%ngo  ò "._e 
#ÜC == W  ±t(  Û  @unk.»#ndm{ & { ç5astÐ 9­ i Æ(SPACE.join(‡ )),² )‰  � ,  (b "   & ÷ " ¼ :unk¦ +—x  Ãð



class _ValueFormañtter:
    def __init__(self, headerlen, max òcontinuation_ws, splitchars)H  L  ? "._4 # == f  J ; =  0 »_len = len(8 )9 ¢ ' =¯ & «lines = [] €current_! õ = _Accumulator(!!)
6 D3str@ 3 <sep0new (© preturn  �sep.joinC .v s^ C_str¡X A x � 'NL5 q   5 aend_ofc  Xelf._î G.pop¥ 8if 2 ·!= (' ', ''T à8w.push(*? ü !ifÅ œ 
 V) > 0T Z >if ( ó.is_onlyws() and# M
?  C @  €[-1] += 0 þ ¢  7 OelseM 
�.append(M N j w.reset(± add_transihdB  `ŽŒAfeed> 1, f­qtring, °'etT „# If the s has noõ encoding (i.e. it is an ASCII å #L ’n we mustv  P !at ñ"highest level syntactic break"T ~ð# possible. Note that^ ÷don't have a lot of smarts about fieldH c  x;< jš btry top ð on semi-colons,£ sn comma I ðwhitespace.  Eventually5 ðis should be pluggaº = $iff.A__kis Nonjðaascii_Í(Í  Ø† ;| ð# Otherwise, we're doÙ ei ð a Base64 or a quoted-printÄ G ³ °which meansV’@needX–  HÜaäL îðs.  We can basicN ¤±find enough9`acters_ 0fitT 7theN År q, minus‚ àRFC 2047 chrom·WF@make! ·is trickierM !thw    - "wem#toÔö	at octet boundaries, not© M $   but it's ºP safeÐ /a> X h so atO  :w3G ¥get close.& §!edå ßðcharset.header_eóncode_lines(string, self._maxlengths())
  ð# The first element extends the curr  R ð, but if it's None# nL °nothing morU @t on# 	F ð so start a new Z .D Etry:  ¤ › Ñ A = eß d vs.pop(0Ë úexcept IndexErrorI ê ”re are noK   s,• ¦we're done�  ‚ Vreturæ "if/… q is not
o u÷append_chunk(fws,< º õ Blast` ô 9 ó �was only ³
pá  º 0new) (l  _� c.push( Àontinuation_è Ã B r# Every#2elsŒBfull†! i.vmselves…1for!    	r ¶ "s.xœ ! +N !)
hHdef  Ï )Y 6µ6 2's FŸ Yyielde  -% ~ B2¦while Truel  ŒM  ” :._ccG_lenÃ ±ascii_splity !, o  ]charsÝ ðRFC 2822 header foldÅ�algorithmå`simple‚`princi 1butC ¸ @# co" x#  actice.  LŠq may beZ óed any place where "r M Ðwhite space" ÍÑars by insertž �@sep Ö Pacter{ €front ofwP QFWS. ë§ !ic© Ù AthatÃ2allq ÷
s or tabs qualify as FWS,P Rand wÀ alÑðupposed to prefer
 ÷break at "higher levelG Asynt+ + ðs".  We can't do eit7 Ï €se witho„wntimateK “knowledgeý ‘ structur  dæ€s, whichÆ  doo 8havP  šP.  SoJP best+ 0can˜    =ë   5—specified  š «0s, >0hop?aW ‚ @choo,ny‰ ¥L 0are² Plegalš€.  (This“ Àat least bet1thaVU old ÓÌ…`we wouÉðometimes *introduce*f 0 afQ %a Ë ,*h7b @ bef »  l éd  Q qè§ runs intoê Ssingl	˜.Gðparts = re.split(ó"(["+FWS+"]+)", fws+string)
  Åif parts[0]:    ¥:0] = [''] Oelse+  f.pop(0Y 0forq ,_ ñ  in zip(*[iter(\ Z)]*2)I òself._append_chunk(fwsC !)
‚ Jdef "  5 Ü #, Ý U   ò._current_line.pushV . W  ò ~if len(4 B) >  fmaxlen`  7 ñ## Find the best split point, working backward from, Eend.{ H ñThere might be none, on a long first Å 	9  j chc¥ � Zchars©  e  , i+ _rangeì  .œû_count()-1, 0, -1¨ J   ïif ch.isspace(%  ) Sfws =DŽV[i][0[ +   ifC@ and ~[0]==chÕ 3 Ybreak @prevÝ ‰ _-1][1‹  $=  Œ J ?[-1’ Ž B¤ �continueÁ I E /æ ¤£v /if› ÿ._initial_size > 0y"# ·@will¶óa header, so leave itÆ‘ine by it©å  �  0newç(«  # `if not’  $ ó # We don't use X‘ation_ws i@beca  ºQwhiteÇ– S dafter á â should alwaysû B 
× ;  =' 'e ÷ © ¶ireturnJ Ÿremainderþ_€*(iN }  r"s.}O(str )8 Ðu.reset(ˆ ÷)


class _Accumulator(list):Ñl!__s (, y'=0W©  ) =. ”super()._Z ? K 6
		+E "opLI i¨ cpopped…6[i:W .    U Ë 7  R 1 « ¦'==›À    return (“'', '')
  ñreturn super().pop()
 ñdef __len__(self):  8 5 Àm((len(fws)+	 ð part) for fws,  A in ? ,?  C    é._initial_size~ ?str~ þEMPTYSTRING.join(( † )ò z  ¶ � Qreset÷ , startval=None%if @ is  7 s 9 U = [] U[:] => 	 
"F = 0£‘is_onlywsš ‹ ¥:elf@ Á==0 and (not›r or strA §.isspace()û  ÉR_coun f  @1€)
"""Rep4Qntingr �manipula ðDemail headers via custom objects.

This module provides an implementation of the HeK üRegistry API.
The. ðis designed to flexibly follow RFC5322 rule„ »Eventually a ðwill be a publicr ð, but it isn't yet,
l, Pprobak ðchange some before that happenv à"""
from typesÃ òort MappingProxyType
$ J0imp$ _utils  _error _ƒð_value_parser as½öser

class Address:y_·Ÿð , display_name=fEuser adomain œaddr_spec<�"""Createã) rCb full ï  G  es, W  3An  € can havœ'™ d', a 'š    nd Ÿ e'.  InzAaddi`0to ° 0ifyÉ kB Ö= õ	 separately, they may beO C ivÄgether by usT  ¼ ð keyword *instead of*S K  5 sÄ fBP 0stre #isÇ  „ %itN @mustÈðproperly quoted accord:  to ;a R Úç ’raised ifR not.5¤JçI has<$, Þ ", Z,fÏ ¸ ð attributes, allð which are read-0.  ? M  ÄN ÿ D   ~ I ObothøL ðwithout any Content Transfer EncoV î= ²inputs = ''Øpfilter(L8, (Ï,_)ôÀ  if '\r' inó inputs or '\n' in 7:
  õ>raise ValueError("invalid arguments; address parts cannot contain CR or LF")
Z ñ# This clause with its potential 'x ÷
' may only happen when anI óapplication program creates an A› Àobject using  ³ W_specK ðkeyword.  The email library code¤ ÷elf must always supply usernameN µand domain. !if,y @ is (JNonet%ifP  ŸE 
#  ¢#D Typš Ô  Ó   Rified0� • and/or "�  G  "t V alsoN )")9 °a_s, rest =ú€ser.get_† á (
 
8 !if6 Ñ lIl1ddrT ;O'{}'Ç ¢ "could be¡ pd from > ™".format(Ó   ë Ï Ð ÿ a_s.all_defectsÛ ' 9[0]~ ¨ = * `local_T	& ›$    àself._display_‘8 =  * r  " a  F Ë
 ‘@property 9defd († )preturn  
œ M ‹ I 
% E ¹ C 
# A ïD 0"""   $ (Œ @R Q) por‘aof theô±ess, quoted6WPccord’òto RFC 5322 rules, but`no Conà Transfer Enco9 [&""×Blp =pš s !ifu0par°÷DOT_ATOM_ENDS.isdisjoint(lpÁ « S 6 Æ p_string* ] æ A ¢lp + '@' +¡ + B  /lp= E'<>'+ Q Á †Œ__repr__²+ H"{}(e={!r},l ’  )&ð ±__class__._u5__,§  ü  1 † ,	ª † 3Ü /stÛ   J í  ø€ ñÀr.SPECIALS.i÷sdisjoint(disp):
    ò = parser.quote_string. - 0if , 
> õaddr_spec = '' if self. »=='<>' else X  Œ òreturn "{} <{}>".forma° %, N )5 1 
m 
 °def __eq__( w, otherö ñif not isinstance(" —, Address+ œ áNotImplementedj  k . ²lay_name ==z 
 &an<  @    § Z.user8  4 gdomainj  ø)


class Group:Einit¯ R=NonekQesses 
ð"""Create an object representing  ¨Pess gw .w  à !AnÃ á consists of aV6õfollowed by colon and apAlist7 ¬ues (see»’ terminatB qa semi-I b.  TheO Ais c× q  É1ifyÏ 
— … ó possibly empty Œ M @Rs.  Ao ö can also be used to>• a singleI I0tha¨¯2n aZ€, which ¼ ðonvenient when manipula’N  § !s L  are a comb$0ionK&sh¤individualReÇ %InM  thw zase the$`shouldã 0setâ  SP.  In^€ticular,8 N i#at” a9Kwhosg 0is Y  ÿ  ƒ 7sam9 è ‰,— e4  onÃpd only  
¶( iì e¹!esîÕ6"""Ç  ô_O) =* àµes = tuple( )­  9# )Q‘@propertyT  íx ˆ·(	¡ M { J 
& G  †  __\‚ 1"{}PéX={!r}p  øÜ  ; $!__ØA__._d?__,* ,zÛIµ >str´ ÇF  <x 1len éU :==1{+tr+ 6[0]É c " =¢    Ø w   ¶ƒ   µ¦SPECIALS.iêÀdisp):
       ðdisp = parser.quote_string( ")
' ÿ$  adrstr = ", ".join(str(x) for x in self.addresses;  T' ' +J $if
 Celse o ñreturn "{}:{};".format” ,, !)
. °def __eq__(� ‘, other):  ¾ ñif not isinstance(" w, Group)  - x åNotImplementedK  i . ²lay_name ==x 
 &an<  ^    ¥ &9 9à

# Header ClaMP #

c R Base  €"):0"""  $  ’‘message hH "s.( Õ ñs generic behavior and provides toolsÛ1subV eD $A  â must define a} pmethod 1d 'Xó' that takes an unfoldWbvalue sƒ ð	a dictionary as its argu‹xs.  The" Awill ðcontain one key, 'defects', initialized to„ ó
empty list.  After the caN   ˆ é b �two addi¥ lm "s:B _tree, setg 1theš   0 ob¤ qed from4 1ingz ¨,�'decoded'K (5!of: 3ideÛ  representa›    Bdatap  Õ ; .˜  (T—ais, enp P wordn#e ‚ � 4 sÆ0hav'bnonicaz
w @ 5so  3ed.¬¼– 7¢ is intend˜ucollectÁq, whichí ×À X r  “ sequently š0oseãas appropriate?9 `should,P pinsofaruPpractá P, raiŸ€ny errorƒDÃ A b¾Ã ô Z q3eadv  }Cdard“æ �ers regis�ï v1RFC” `compli¶� issues, òobsolete RFC syntax« ûÑunrecoverableg 1ingN Â  �
 ´0mayØ  ÜËuâ.  In this caså \0n '€'g Î·b   ssÿ-uý0key˜ ¶ …ñ use (usually byï Csett`mÖ ¤ Ì “similarly¬±attributes)… remove allyP Pextra¹s$Qed byŸF‡Pthen “ 0sup[oZ- 1entP XB witÜ`remain± ë Š € ¸jþ âalso make sureªða 'max_count' attribute is defð:ined
    that is either None or 1. XXX: need to better define this API.

D 2"""	 ñdef __new__(cls, name, value):p  0 õkwds = {'defects': []} ¡cls.parse(9  , 0 ) ð
if utils._has_surrogates(' ·['decoded']q u  $ =F �sanitize@ r ¹self = str.Þ q 1 1delµ p   M b.init( **G ß preturn ' U0   S1*, #`_tree,˜ Ió  -  ._c ! =‡
� _> ' =K & ¡$ =b “ ‘@property/  ö i (t ƒ Ê Š = f @ Qtuple #._* )J  y ¡__reduce__#  (¤    ù_reconstruct_header,! 
/  3  Ö  .__class__Zame__7 ) _bases* "tr® 
E ) y cdict__ó @‡ RmethoÀÕ x9Â( NAfoldš  , bWolicyG ‚"""Fold 9  according"p- .L  2TheYôd representation of theF 0is w )edP •ñRFC5322 rules, as modified byH z 2  IX Û E •contains /QescapD tW  � ñbytes are CTE enHe usingI  (  ch�÷t 'unknown-8bit"ú àAny non-ASCII / ’acters in±  @ ¡ n  ; “set utf-8’3mak�"a ú ‡ setting‚  |"ed ä1an “ P-onlyÏ »“possibly $  ulinesepö  ˆ Ã �, and enöswith a . é 0.  � 0strM …includesN  DB 7R   ç': ' separatorÎ  ` R  õ# At some point we¤õput fws here if it wauusource.† ‚ ý1r.H%([!  n K [Label! % Væ�TerminalE.ß 2, 'k - 'ä@ 6':': ksep')]; ]4!if0.Ön c ‚ Àr.append(
    óparser.CFWSList([ ôWhiteSpaceTerminal(' ', 'fws')]))
G ñheader.append(self._E V_tree( sreturn / Âfold(policy= ò)


def _reconstruct_. ñ
(cls_name, bases, value):… Y Ntype) H{}).R (: £


class Uj QuredHÊ !:
V ñmax_count = None = Þ ñr = staticmethod(ô wr.get_uU )O @o + K  ë 3  ´ Ñ c, kwds×  `  !['' N˜'] = cls.‰ Ó  1   5 qdecoded2 Bstr( K  q– ~ Unique( ) 1NIDateF2""" b whose¸ àòists of a single timestamp.2ðProvides an additional attribute, date6 ñ, which is either3 2warµ'   uj ! aj õzone, or a naiveM b if th�  % ­!in Àinput stringn ö-0000.  Also accepts aK 1as 3 .E QThe '¹'Æ  G  o ð normalized form   ß ,C è „means it< 0out˜ !of; 5at_ò o¸  ˆ 2"""bãd `# This\ �used onlyX  ²�ing, not Pcreat
'l` ã %X!if“ w    ô”defects']¤rerrors.™0Mis�RequiredVY(ßH oS     l v!''P    ! �1 =  qr.Token€0 4 ÛG Òif isinstance÷,�2 6 
‘ = utils.c  5_to= m �  &  râ F { ! U^  ­rgI c Ž Ìh > -Ainit_×, *args, **kwû {{ ´ = kw.pop(' '� �super().U O ‘@property  ~ D ‚ u ¢ | Y( IrAddress£s � @…  ¯ ½„ð (value):
      ø  address_list, value = parser.get_! (  3)
  ¢assert not: á, 'this should uhappen'3 ireturnw 
 Á@classmethod 2defˆ C(cls› �, kwds):!  … Òif isinstanceŸ W, str#  ' ó"# We are translating here from the RFC language (ö †/mailboxó N §to our API4 cgroup/: %).¤  3  · !['W™_tree'] =q = cls.a_( rÏ 
{ d is = []` 1forO * i\.� &es4 �   L .¡0d(G¾ ø é.display_name,g  7  "[AG9(mb> o or ''D X €mb.localtB %bdomain> 
Ch 	  D$mbBS.all_ÿJes])E `defect‰ 97F9   5 Jelseƒó # Assume it is B/ˆi stuff{#ifPCsattË, '__iter__'ò Ý M ,	 
1ý  q û (None, [item]) m   5, 'L'Ø  h   ú  B 	Ï 4  … -  ‡·  X ¸ Ð ]Ò Y p   ; !  " Qcoded" ð ', '.join([str(“ () � d ]
8if á®!in±
ù� äý& #de“ )& ÷init(self, *args, **kw   "._¡ ò = tuple(kw.pop(' 'Ð/ Ý0 = �super().w q ’ ‘@property1    b ¢ • ùm # A ‹ D 2if @ "  : ® 
b% 7 Èƒ  f-  sÄ ›  R 1in B p	ú 1 Qes


òs UniqueÿyHeader( "):)Õmax_count = 1? _Singl? ©Ày
    def adãdress(self):
  aif len 1.ad# fes)!=1#  * ðraise ValueError(("v ³ of single > õ header {} is not "m  J   +"a5 ’").format‰ ename))7 preturn º ¤ ñ[0]


class UniqueSˆ AÅ H† (  1):
Z Õmax_count = 1K ²MIMEVersionC .  Æ ò_parser = staticmethod( . r_mime_vU )} @¹ - Ž Adef . a(cls, \ g, kwds­  !['' ’_tree'] =6  q = cls.< ˜ ( KB qdecoded? 2str® C * Ófects'].extenÙ + q.all_de  7 Qmajor_ cNone iÜ 8 Pminor GelseÄ .;  d° 2 O ü . ) c  € g 
ÎV ’X t'{}.{}'†! ‹ "']‡!['q &']ì  » Y  } ó â2iniã×, *args, **kwâä,´ = kw.pop('¬ } * £ (  '& rN Ê & quper().Ÿ ™ º ‘@propertyn È g ¬¼ §_" ?  � ?  " ? A 
$ ØÐParameterizedå	Þñ# Mixin that handles th™ñams dict.  Must be subÀaed andD# a '¾‚A forK „specific!’provided.ç � ý%Æ
­p›sQ" ©!{}o `# The Þb RFCs sy×E  � orderings ¥arbitrary.X  \ 3 sx ñutils._sanitize(¤@.low:
µ  A  C œ3 !  @ m 8 in/£ }D ›Ä cÀgs, **kw):
   òself._params = kw.pop(' 2')
& ñ  super().init(*args, **kw)
# ‘@property Bdef B (` !):  K ñreturn MappingProxyType' ‡ ð)


class Content" €Header(P© ÂeterizedMIME "):‡ PvalueÎ ñser = staticmethod(parser. "_cZ q_type_h\ Ê  ¼ å  º (, ë Ç  å    > `._mainc ÷ = utils._sanitizò „se_tree., tœ?subC + Ê ”c o–
´ RE e D 
$ C ~H 	° ‘ + '/' + ¢ ] 
&²Disposition->db 4B cd´õ¦-~ OÍ" � = cd if ½s None else‡/cd.y  ­	‡ Êò ransferEncoding©½Òmax_count = 1;Ða #_eb 
©@XE îla(cls, p g, kwds  [«@'] =à  l1ls.< |( ÊB qdecoded? 2str’ý* Ófects'].exten½+ q.all_de  » Å ³6?cte®3cte~ ""ctßCø°%teŸMessageID PQ^ &ÚmQ %_iÙô¾r
# The ·À factory #

Caultõ�_map = {êð'subject':        ðUniqueUnstructuredHeader,
) p'date':  > IDate6 resent-= 0 Oorig. /  f osenderž 6 ßSingleAddress¥ F 9 /tot  %x r @ 3 /ccl +@ l b-  Ö †9 ï@ 3 OfromÚ D@ l oreply-v^9 Ïmime-version­  RMIMEV 	Y@contÿ?typ<C :Typ57 ‹dispositu 7 D u òransfer-encoding¹ > T E 	C ¢message-id4 ÷ M (ID5 ’}

class  ¡Registry:
?a"""A hPÃ_factory and # r. B."""1 ñ	def __init__(self, base_d D=Bas3ƒ default À½ 	 Duse_= ¡map=True):¯  % ³"""Create a§ º òthat works with the Policy API.Â  D ³ 1 is' À  A aill be Rlast  !in c| d� =$ P's __\ ªs__ list. n P óused if "name" (see __call__) does not appear • ¨G E ¼ñ rols whether orH  #mÀ mapping of } Es toP ²specializedì  esÍ @copi° An toŠ  h 1W%isM Dd.  The" O  ë§ v ¯   l.^ E= {}O   wl' =“
% ê ( 	 + ;if „~‹ 0.upF(nR_map)q 3pmap_to_q6 bð, cls):
        """Reñ6gister cls as the specialized class for handling "name" headers.

    5""" pself.re] 0ry[2 °.lower()] =m 
+ ðdef __getitem__(7  , / !):!  Y  ›  =  R P.get(' V ,  �default_· )B ðreturn type('_'+cls.__@ ƒ__, (cls@ Cbase= X, {})¦ Icall£ w, valueª ³"""Create a ’ instanceD4  'z �' from 'D 'GB sC  @by c_  †a§uparsingû Ðand represent9 âDfied¦  Z Tombin" ufactoryG o with   Ð  _ ø0 orQE 	ž , › 0pas¯  ' ÷ 1 to µconstructedI ß5's  'orAˆú =†]6ºð>
# Copyright (C) 2001-2006 Python Software Foundation
# Author: Barry Warsaw
L ñntact: email-sig@pG ñ.org

"""VariousŠñs of useful iterators 3gen .Ì 1
__{A = [´'body_line_9 "',  ã�d_subpart Cwalk* ò# Do not include _f€ure() si³Pit's I  ª  Ù`debugg$AAPI.r á]

import sys
Ó3io  ð	StringIO



# This funcG° will becom/dmethodi rMessage
& » o±"""Walk ovee# m3 °tree, yield© Seach $@The O ò is performed in depth-first order. ´ � Ais aõ ¡ ¥ ©u ‰& !if �.is_multiJ(¿  /  Vš  ~  ¤ Øˆ_payload+  / ^ b6 .Æ %()^uese twoc s ºŒâ SInñ.py interface module.obô(msg, decode=Falsù2"""Q e� ë 2s, ~ ‡s
 Û  s ½@-by- — Op#ald # (/ m ®Ðassed through"
1
�`3msg1[� % =#5get�í  NTif isØ(C W, strÝ²
/  µ ×°l@main  €='text',¤  ?Non}	sª¡given MIMExð .

    Use `maið	ntype' as the main MIME  ñ0 to match against; this defaults to
    "text".  Optional `subtY iY T  W  !ifI Öomitted, only‘ Œ "isŒ 1ed., 1""" ñfor subpart in msg.walk():    $if" Ð.get_content_í  [ Q() ==û   7 ;   – is None p 	N Ý M  
L  P TyieldŽ ð



def _structure(msg, fp=k ó, level=0, include_{c=Falseã ô	"""A handy debugging aid"Tif fp¿ “ ñ fp = sys.stdout.Ñtab = ' ' * (} Q * 4) `print(" +fK !ò(), end='', file=fp9 ,if¿ … U •' [%s]' %Y è _Y 	Q LelseC 	! !ifI €is_multi3  Í xpayload*  ³�h ¡œ-+1œð#)
# Copyright (C) 2001-2007 Python Software Founda5ñ
# Author: Barry WarsawL ñntact: email-sig@pG ð.org

"""Basic message object å  Ó6 W pack `model.!â
__all__ = ['MC P', 'Em  Ä]

import re
 $uu
 ó quopri
from io * ôBytesIO, StringIO

# IntraŒ ) s9 §  _ util Xerror Ä._policybasey P ¯, compat32`  pcharsetö_ & ô ._encoded_wordsX  de C_b
C> $= = . °

SEMISPACEG0; 'õ óRegular expression thatÏÀs `special' Œ `actersË`parame ,ð
# existence of whichçpce quotö of*  : “ value.
tc ps = re.óile(r'[ \(\)<>@,;:\\"/\[\]\?=]')

›AplitQ ( u0# S v headerr ‚s.  BAW:*òmay be too simple.  It isn'qð	# strictly RFC 2045 (secQ 5.1)Çð liant, but it c“ses most€ s¢0# fP < ú€wild.  W×ðy eventually need a full fledgedÁ 2ser[±# RDM: we mÄ‚have a Hë Phere;x‘ now justÄ ‚ngify itC €a, sep, O3str;.ŠiÜ E(';'0not. Ó�return a.Ap(),zä  b& MXforma³,Tàquote=True):
 òL   """Convenience function to format and return a key=value pair.

    This will quote the % òif needed or if   Óis true.  If ) @s a
L òthree tuple (charset, language,/ R), itr pbe encoc ’accordingI ò o RFC2231 rulesn ðit contains non-ascii h eactersX �likewiseL e  "	a €, using þ Qutf-8W !seBG ea nullÍ . 1""" i�not None|Alen(%a) > 0:-  *3# A(pis used± ô  õ ’parameter;×s where itemsL /arp	%. Í Ðis a string, © 2a C§N pinstancã:RFC‘ Ì  s q Rnever`d, per¿  â Tif isK ,ó ) ) 1# E4 asF t ’  % 	y += '*' ‘ ’ = utils.8@_rfcGv 3[2]z%[0
 91])G $±'%s=%s' % (r 9 , Jelse¿ :try  ¯ – Ž !('¨'E  "  except Uni ^ErrorM Š ü  H j  
1, 'ÒK', '…  A ú ñ# BAW: Please check thi› 	 n )at) @•it shouldp#ì!ce; t@even7  �™necessaryIzòor tspecials.searchâQÒ H"%s"Î&O ; –ÛI 
6 2 ²€

def _p #(s© a# RDM yñmight be a Header, s½C nowªbify it�s = ';' + "(s¾ ¡plist = []dÑwhile s[:1] =/ T @ Bs[1:*   ÷ end = s.find(';"H    1> 0Îõ	(s.count('"', 0, end) -  '\\ V) % 2{ m B B + 1É  #  ifV ( <.   ˆ  = Pö   f» V[:endÑ ºif '=' in f} çi = f.index('=é J `f[:i].Ñp().lower() +O …+ f[i+1:  k : ~”.append(f? Ñ s3endu$ µ
%!un”Í™¼ #'ðis different than utñ:ils.collapse_rfc2231_value() because it doesn't
    # try to convert the 4   óa unicode.  Message.get_param() andF  s ð
re both currently defined] preturn q ƒtuple inM   Àface of RFC É  t aeters.' áif isinstance(³ !, I !):!  ß d  R[0], 
 `1], ut0cunquot@ A[2]); MelseE 1  ´)



class 7 ¢"""Basic m6‘ object.
_ A 5 isõas something that has a bunch1822J pheaders‰ò! a payload.  It may optionally have an envelope ; F ð(a.k.a. Unix-From or  _& )S f«Ñ i• ñcontainer (i.e. aO �multipartG aì �/rfc822),G ÷°  ÿ `a listà JJ 6¢s, otherwiÀ{ cstringQ4 f°s implement6V  Sð `mapping' interbñ , which assumesu  k e” @exac´bone ocÄ• N @D perâ d.  SomZM òdo in fact appear ñle times (e.g. ReceivedS• for thosK ,™ �you must È ƒ Àexplicit APIR!sespget allhÀbs.  No !ofM  @  ovods are;"edh1"""1 ÷def __init__(self, policy=compat32x   . # =( F  • _@ks = [] Punixf‡k= None 6 @char ¡# Defaults]„ ¢Ï­� ±preamble = ­ pepilogu ‘ kdefectÉ q  YtŠ<typÊ d” _ ò  = 'text/plain')t3strsbF"""RA`entireÜ dmatted“ <, à   Ó  "ç 2as_+ &()€   $ ,�²=False, maxËUlen=0 (¯ ,øOÇ$ ''¹`en truƒ Áeans include÷ ÊÂñN ® ò.  For backward Åùibility reasons, ifá & i*Ñnot specifiedXÏs‹e0, so ²qoverrid¶%ly“ !if+ Àwant a diffe0	{ B.  'R'�ðpassed to the
     ñ6   Generator instance used to serialize the message; if it is not
    pspecifi9 ø
he policy associated withG n !isq %.
L )If* ôobject contains binary data tha‹ … encodedG �accordingÌ @RFC ß adards,` Ònon-compliantO õwill be replaced byO 0uni` ñ "unknown character"  upoints.1 5""" Æfrom email.gqVmport‚. ?s= self. $ifW´is None elsk; õ fp = StringIO() 6g =i E(fp, ¿ pmangle_° _=False* Öxheaderlen=ma 1 È = š �.flatten(î `, unix =	 + òreturn fp.getvalue()7Ñdef __bytes__I %):â B"""R:  È°entire formw dÙa as a C  sË…  ­ 2.ast ‡   " Ï MÄ=Á)£ 1æ ¤Optional '9ò', when true, means includÒõUnix From_ envelopeN ÛB.  '°'ñ3pas IBn?K GOnot 9K  w ˆA Åy
Á e ñ  ~&W } . ‚ l „ úg%5Ïis_multipart(@TrueèpÂconsists of C 0le G (s.q$isOf ó ._payload, list¶#t'# ‰2lin…  ØDset_ÓM UB n.( % =H!gI ? · 
F ; Š 2# PÂ  ·Pipulao#"  ¬ cattach¦ ó f a"""Add~cgiven #  ¢ ltcurrent KThe   ®`alwaysµa[ Ÿ¿ñs after this methoÀ     is callðed.  If you want to set the payload óa scalar object, use
  Cset_, µ() instead. 5""" „if self.0 • is None:"  T 
# 3= [^ ]& ;els4 :tryE I ƒ.append(M )M  * þexcept AttributeErrorQ ’raise Typ! €("AttachÇ önot valid on a message with a m  ô " non-multipart}1")
¨ Wdef gh #@, i==ö , decode=False)¶ €"""Retur� �referenceÏÞ.`  “ Tôówill either be a listþÆ or a string>Vmutat c 4 ,bamodify] $'sê ñ in place.  Optionalû  › 1i rÉ ñs that index intoL ÒË A   `a flag; ±icating wheà  « C – should bÉ \dõ °not, accord@ ~ ñContent-Transfer-Enco! eheaderÅ €(defaultŽ «² ÑWhen True andÖ " .  \%a ,  ³ «±  ‚if this †  'sž ueO ð`quoted-printable'Þ �`base64'Óµ asome o(eØ  is  d,6  =b  Z qmissing € H¯ óhas bogus data (i.e. �  V !uum !ed% )ñ “ J #is‡ed as-isOIý e† is“]cÜsk n•q i ×Q# Her[ alogic YB for† ¡ , â ! ( °email5.0.0  ¸P#   i÷¿U is_m¾ u resultŸ 1# -    -   G ö !    � 	   k- £ %  , J -  = 1   ÷b - (h›
: âelement i (a M|G 	O � eî" (g ¶; á ; ÷ 
; ÷ ( l 1 ˆd (bytes­ BNote$PBarryR1nneÄðfactor out the 'decodóe' case, but that
  ñ# isn't so easy now! ÷ we handle the 8 bit data, which needs to beM ñconverted in both> ó decode and non- Upath.< õif self.is_multipart():   ° 2if < 
   ¦return Non�   qif i is 6 y ‰_payloadr Oelse7 5[i]: ò# For backward compatibility, Use isinstancöthis error messagÅ  # * aead ofMØmore logical .Y testQú 1notþ t| (ù k, lists°raise TypeEŸ p('Expecá - ú, got %s' % typeQ %))\" =ålð	# cte might be a Header,˜1for—·stringify iç  8 R= str| öget('content-transfer-encoding', '')).lower(Ÿ $# ¡ 0may� ªbytes hereQ·(1 ,{ 4ô	if utils._has_surrogates4 /  §bO $ =Š .´ €e('ascii¹ I vescape'¿  B   0if î$ # >tryÐ    … � .L \ð _param('charset—   ¯), 'replac™  ] Ñexcept LookupM‰ !n /el%ý ï lÏ 0UniÜÐ 0# TÞ wogphappen Ó1RFCTliant÷3s (s< =  # Üðaining only ASCII „ p pointsz ³uš v input)ÇK   P# If Ùoîœ !, I B q0 inæ�in a wayœ �guaranteeètOfail{ sCraw-¾ -ìäÆ¤ !if]ú== 'quoted-printable'ƒA cquopriû(¯ 	j~›= 'base64O q# XXX: ÝAis aD£of a hack;Ìñ_b should probabl�zfactoreŽ@# ou«0mew›Ï`I have]qfigured% àwhere yet.
     ô,value, defects = decode_b(b''.join(bpayload.splitlines()))
C   3forD 3 in
 )s:#  ' òself.policy.handle_z ( ‡ 
[ qreturn © Q €elif cten €('x-uuen¸ K', '   ! *')‘ õin_file = BytesIOê 
� <out) 
! :tryZ  ë 2uu.K(h $, I Ê, quiet=TrueJ  9 ð - A.getü (+ þ except uu.Error� b# SomeÐµing problemC l   p æ  ãif isinstance([, strHA  : 
Y ƒdef set_ ÷ ç, charset=Nonef ³"""Set the + 1 to Cgive.b  Ó „OptionalP  s s0 �message's¤Aault# Pacter% a.  Seeª  H  ª “ 2() äetails.# 5""" ¦if hasattr/'˜Î  Z  ¾ì @ is ï Á .*$ =û o  H   h	 hif notÀÇ 2, Cw �  H # $ =$ ( 
y‚‘ .ã . �.output_= $›û R`'asciiÙösurrogateescape'« JelseTU 9
” @˜D æ G ß ß sÑ 1 of¡^Rto a Þ " ¢æ  Äset can be a· µ0, a¯ ý0nam aïA, or¸  ÿ í p.  If i:< pit willd �converted€q !Ifj  Ÿ à,ß ´ `paramev[ Àremoved from+ ˜ ðContent-Type field.  AnythÒ  çŸ pgenerat	 + CThe þ0  3BssumÍ !be‚ d rtext/* Öed with� À 7.inã 6$0 
O 5andh  properly, ¾Ãeeded, when Ú  ï Plain ¦ H  representaùÊ ï ð.  MIME headers (MIMÃE-Version,
  åContent-Type,  õransfer-Encoding) will be added as needed.J 5""" õif charset is None:  y óself.del_param('- .')& _ ! =H 	! ereturn Pif nor “instance(< 2, CŽ )‡  $ =  1 ˆ ª „ 3 t E'MIMZ'ƒ  n 9 
n   Ê.add_header(8 g, '1.0Eif '�?ypeZ 	8 æ, 'text/plain'û ‰ ß = ´.get_output&()?elsÙ<setÙ,R 9/!=4 
\ –_payload : `body_eÅ!e(€$ Å 	høu7ctei  )m Fing(b  e:try²   "ct– 
+ pexcept ’^Error8 °# This 'if'`õfor backward compatibility, it allows unicodeº �   ñ# through even th �that won' ÿrk correctly if thG pmessage’ ˆserializ  l   ¥	‘˜ 3if +  H R    : $ =D .÷
'ascii', 'surrogateescapez A  �U=�- v O
K
÷ E 	^Z#e(e = `Öq, cte)
t@def ¾¤ '(A"""Rg ö( bñ associated with% 	%'s}i  á %¾).^“ #0 ò# MAPPING INTERFACE (partialþ (  Á __len__½ òtotal number of ˆ€s, incluçÏ duplicates.«  1lenb .ÃsC“__getitem† j, nameISGet aw r value.ñ  f -d* ¡is missingx0ead¾ 1rai 2an ¥7ionO ðNote that if the heaóder appeared multiple times, exactly which
  ñoccurrence gets returned is undefined.  Us! �_all() to. E allI ð
the values matching a hea• µfield name.1 5""" v   self.get(* !)
 ðdef __setitem__($ ,K ,p !):&  Î u"""Set ‰ 5 of‚ .M  ' ðNote: this does not overwrite an exist¿ ½ AwithV Qsame Ë t  © S__del¥ p) first(AdeleX yY s²max_count =rpolicy.Ž _ % Ó   5if    l¥ ! =4….lower()Á  ! ›found = 0 ’r k, v inˆ _‚ s^  A Dif kZ A == r '  + l I+= 1m     2if " />=Ï  '  praise VwðError("There may be at most {} ¿  wG  õ"in a message".format(hˆ)N �.(.‹!nd².Å±store_parseÇË	òM U j TC"""DZ6ll ÆsöÇ, if presentD÷?ópception1  A, missing¬Z	2newF es = []ï/foX	T!¾ÿ ²e n(´“ — `‰containsa\¡ ð éFin [÷× ]h Citerd ^  < X/uesyN1 \ AkeyskX A"""RÐq a list!llÍÕ.'s¤s, These willQ@sortnC  orÜFtheyvi Viginao `, or w£Padded! o 1and½�§ duplicate-2Any†"s ] d 7 qre-inse¡ ¡are alwaysš nk ”Ž Üó0[k Ÿ V—Ûû�*C |Ày appeared ión the original
  ñ
message, or were added to/  õand may contain duplicates.K ðAny fields deleted 7 �re-inser  a ·lways appenk eheaderM Flist[ 5""" òreturn [self.policy.= õ_fetch_parse(k, v)5 î P for  A in A _; 1s]
,  def items( !):  = ¨"""Get all2's @ ù  ñ @valu< ñThese will be soi‘0derS y@aredœ ¬¼ Ž Q°±#1get¯ÿ, name, failobj=NoneÃ ³¨.ø ã Like __get“__() but pU À instead of ` B wheÊûô¯is missingÆ ª ! =± v.lower(ü ¥� ° Dif k< " =L 
"  & ¿ ~½ 4 ó "# ñ# "Internal" methods (public API,3‚only intá Ï ‘use by a �ç#tðgenerator, not normal_‚ion codeD#Š  ¤yset_raw÷Ð
ðQStoree‹" _ðmodel without modifÒ7ionÀThis is an "Ñ ù é   Áî å  µ  „¿‰v. ((!,   &))ç @raw_��R *	? ß_pairsà Cµã ?Aiter¡.ï Tcopy(á RòAdditional useful stuffpqget_allR ê a I ­ºds	 ; yd¾	÷²< @/  9  >Að Ê À   If no sucó*h fields exist, failobj is returned (defaults to None).
  5""" µvalues = [] pname =  ….lower() õfor k, v in self._headers:#  f Dif k< " =L 
"  & } �.append(O rpolicy.U Ð_fetch_parse(v )‰ rif not C 
[ ˜  2 
 sdef addÄ ‚ 0, _ù 1, _) @, **� Fams)f Â"""Extended « ’ setting.Y  Þ  G  ”4the% ¸ ’ðadd.  keyword arguments can be used' 1set¨  O ðadditional parameters �a �, with un˜õ cores convertedO ðto dashes.  Normally J ] P willŽ  adè  as° !="…" unlessO   î  l,Ówhich case on\ :keyV u.  If aG } Q ñ
contains non-ASCII characý $it1Çspecified asO ðthree-tuple of (< âset, language,A)² $it¨ › Aenco€ccording¡±RFC2231 rulJ¦Otherwise B  : UusingP  lQutf-8Ò •set and a›  ± '''P–Examples:cGmsg.À'/¡ent-dispos/ ', 'attachbp', file›¦='bud.gif'UP  Ð  ¤ g !('æ  ˆ ÷', FuÃŸballer.ppt'Ñ| A'o Kpart X r Ê w.items( ï  ifsd!    Z áÀk.replace('_-ÿ  . OelseD  _f¬t((Q  7, vT#ifÇ š / ž
b ¢ „insert(0÷ –[ñ] = SEMISPACE.join(= )� Là P>B"""R# a!î  '°first matchxrPfound  # AmessÐ re1i/ Qorderd ”y-noV  waUöund, a KeyError iêoraisedN(" =C " T2i, Ê ¹ Ñzip(range(len~O9)),`Às):
        ð    if k.lower() == _name:
  ñself._headers[i] =  rpolicy. ý_store_parse(k, _value)M Ubreak ;elsq ñ raise KeyError(“ !)
1 # � Use the ðree methods instead of 0 th babove.: G ðdef get_content_type(Ñ )û ‘"""ReturnJ £message's 4  4 .O  *QThe r0 °ed string i. ‘erced to fT caseŸ Aform—  A P`mainU @/sub Q'.  IÈ ²re was no C± b-Type v! i¢ H ª ,· qdefault­ Á as given byþ  þ •) will beI Î ð .  Since accordÙ Óto RFC 2045, q ós always have a ^ O  Ó R thisi - e 1 a ,P`  H dines ai  's × õto be text/plain unless it| aappear id� ñmultipart/digestÖ`ainer,PRwhich«ˆit wouldò r/rfc822Z Ã5"""s @miss+–= object(ë BSget('T-$3', < 2 "if  R © z 0# TZ!sh« ‚Õno parameters—  - t ð.ª+ cŽ ‘ = _splitL (» D)[0]4. #Ðsection 5.2 sPif it€valid, u¹±D 1if u ú.count('/') != 1ì ¿ 'ò'B  F œëfï 0 "enG¤t!isj¿'wtã
˜ Ued by¬  {ù{JÍ /
¶%d B´B?[0]
g	Ø ìs's sub-° P	X ~1	÷ ý`+ '	DMostŸ	4 ùÅ, except forq ~`at arey «s= ¹s¨5uchI 2sub7 ‘Àlt content tó	ype of message/rfc822.
  5""" ñreturn self._default_type
# ydef set (- 0, c& !):'  Y Ã"""Set the `I  ' content , .S  , < ú should be either "text/plain" or "Â õ", although this{ óis not enforced.  The … 	„  + �stored in° H C®  -TAoheader6 
/" =ä  7ó_get_params_preserve;’failobj, d Ev# Like ; t() but A s° € quotingäÆvalues.  BAWŒ#\ ' a@part/  žõpublic interface? @missX ¥= object() h " =)Bget(» #, 4 * 2if - $is ™  ýsb +U = [] Pfor p¦ I!se# (^ 4 T :trye   Pname,� ö = p.split('=', 1®  (    , 0 =  g.stripü      Pval =P " €except V‘^Error‘ õ# Must have been a bare attributeù  o    � ¾ ” 
)'': ( s.append((E )ø # ð  = utils.decodefBams( - ² â¦ #, ÓT=NoneÝ#='-P', un¿ge=TrueÆB"""RŒ ¤ù9's ”‚ ÷eters, as a listX ÷„elementsï½ !ed,  oq2-tuple" Akey/QB paiW K2! o$“ `=' sign]0lefÉand sidn ·  % i¤Ekey,J Qwhile»Hrigh9 . ƒ P.  If& "re¨u 5 inL  h  .  ’u2   `empty Ã#ng¬ ]  R a3udescribs—() methodX„Optionalâ M  m 'B to f* iÀ ½Á :5.  V  U  õto search instead ofD Y 7W E  Z, dÏÄ ø jsùÔ> ñ73if ? $if&
Dec[(k, _Ó Ýð (v)) for k, v i³n params]
  Uelse:   Tretur) 
 �def get_= b(self,I ñ, failobj=None, header='content-type',D  [  Öunquote=True)€ B"""R 2thec ðeter value if found in   Cf CType{ .±  i „Optional£ 1 is6 £object to ê  if  re! 8no V º Ù @, or, 	$ z Æ has no suchº 4.  ˆ L  n  Å Z  � ùsearch instead ofg Ú PÄðkeys are always compared caseJ óensitively.  Theô Œ Yñcan either be a stringî �a 3-tupl~ ° } uwas RFCL õ
2231 encoded.  When it's D ,=€elementsâ  R „  Æ %ofM   ó"form (CHARSET, LANGUAGE, VALUE).  Note that both + E andI 6  å 2be ©‚in which)òyou should considerd  —%beL Ý €ñus-ascii charset.  Youi åusually ignore» .K  ŒK(„ ü r(edŒ  û … item inN   ¨)Yf£d, unless   # !seWFalse\ð If your applicaC  doesn't c¤1whe) s Á  – /0, i< !n X 8 Ý Ö5ntotÆ as follows:Ë Ï1rawo v = msg.�e'foo')u  , ) ð	email.utils.collapse_rfc¦ _t(W )n 5"""N $ifß0notø ý° m Í 	: „for k, v5 %._³ ³s_preserve(6 : [ ò if k.lower() ==W 
† / á    ª _% v; (     B væ  Ç D .s.s í (='kV', re5gl¡language='; aplace=ÏF‚"""Set a;·=I6 àalready existsÕ É½ ásÎWwill 3!re™ ad withÿ2new, 
vK  š ËZðt yet been defined dEthis�pmessage‘  Š Ð set to "textð/plain" and the new parameter #
  õvalue will be appended as per RFC 2045.
1 ðAn alternate header can> Áspecified inw  �argument,z E allM ” sƒ Bquot� ñnecessary unless re — is False–  If charset ‰ ,‡ f e Aencoç °ccording toí ™ ô
2231.  Optional language [ sZ  5231  Å, defaultingM !to- õempty string.  Bothµ  ©d QhouldR- %s.K 5""" Pif noð ‘instance(Í�, tuple)m:5  ÷' C = ( ,¿  )ï$ifål an self[ Ýú.lower() == 'content-type't c ‚ = 'textŸ'• Oelse/  n R.get(n )3 ý   _ä( ,² =4 
Z 9 � 
   ¡ = _formatP V ,†‹  8 Â   N õ SEMISPACE.join(Å  $  [- ,z ]| x G  i_ c rfor old(, Ð  «
Esl?,®  S  !un¯=·)no” ³  ` !if« ˆk	 Y  ; ] Ò C ^    ] 	g7 K ‘ " Óu –¬ ? †qV Z2if 9 !!=ô†
q›if replacÄ » [ _�_,_ Ë / Å 1delƒ [A ]ü  f  " =Y Ãrdef delc(( ,	%
µ¨W=True³‘"""RemoveËRgivenI Rñ completely from$ C4Typ)±$Th • re-written•Q� withoutQ ôo eor itsÉÐ. All values ñwill be quoted as necessary unless re S is
  ó6False.  Optional header specifies an alternative to the Content-Type
L < .] 5""" #if Õ not in self:  C ereturn ånew_ctype = '' „for p, vD Â.get_params(½ = A, unð =ø )o ñif p.lower() != D  
+  ž !ifº – "  &  ¡ = _formatX (³ ,‚)Î  4   OelseR õSEMISPACE.join([n ,Q  U  	� ]Ÿ  õ ‡!!=µ qjR1del" [�]•  ð 5 = » 
& €def set_ð(+  ,  ,5(='q'IW=True† a"""Set¢AmainD € and subP  >Àd .Š  5+ @mustQ€a stringq ;  Ö  "_  ' /Z á", otherwise aÔ  J ÷ValueError is raisedi ñThis method replaces¾ ï   `, keep‰ 0all% e bPeters¤ F T.  Ifo { é0, tq Cleavh …existingL »!'sHm @s is"Þ  E e.t z6(th‡default)ô AQq @ canmxdÊ  n æargument.  Whe% # ,  ò öset, we'll always also add a MIME-VersioM l Àñ# BAW: should we­ etrict?< .!otuú.count('/') == 1Ü B $# ¿Õ Ÿ, you get¹ ]¿ t #'c¤ §'� ªr'mime-v	'² '* ']Œ61.0�{ Ø Ïú � ñ  $øÎ&s mÞT Ý ÐÕ ‰ 	`# SkipWb firstáR; it'’2oldÚh  L × «µ J[1:]i s .Ù! ˜ Å)y  Ìƒfilename»failobj=NonêàReturn the filó!ename associated with the payload if present.

  rThe fil> �is extrac@ Afrom@ õContent-Disposition header'sH `E ó' parameter, and it is unquoted.  If thatD   umissingM  ¶ Q ðthis method falls back to looking for¶ L `• . 5""" ‚ µ = object() Ù Á = self.get_ã $(' 3', A C, 'c/d/'N )ifo7 :n  —W r  Í n Otypeg åreturn failobj‚  ôutils.collapse_rfc2231_value(¢ ’).strip()Q@def �boundary(1,b f=None)ë B"""Rƒ  ð4 Ã#> ÃCTypexD's `6 'ý Ù¼' ;` É  ;	$ 9 $¦½ò # RFC 2046 saysiM ðies may begin but not e£Fn w/Ì\ 
T My).rDset_   
ÿ0Set¬  ;D in xµDto '' 'À is%ð subtly differenX €an delet b	P Á ¡Õ0add+ ’a new oneB { ¢ ‚via add_J …().  TheN Emain�  ce¤ öuêö 	')Ö£0rve¼N porder o:e  0 ä ÷original message*H³ ParseError’ Qraise = 4  has nog =Ps _ _è (:Ì4  ² . 
#zOre w¹ ‹ð we don't know w… l ´ Y#M0set¸qto, so &� an excep  3   eU,s.g?('NK  f%³3newç E= []” ' †p = Fals çÐpk, pv in pargams:
  úif pk.lower() == 'boundary')  4 önewparams.append((. ´, '"%s"' % B )))k  B f] ‰p = True Oelser gpk, pv[ rif not Z 
B õ# The original Content-Type header had no³ ¹ attribute.ž û*# Tack one on the end.  BAW: should we raise an exceptionF ©instead??? Y'’# Replace• xistingë Awith& wnew val�2newes = []œ ófor h, v in self._' 
hIif hDcjOtypeH Kpartj     r kr 
n  '   Aif v²b       j ®k� $ z    	B `'%s=%sä(¥ † +   ñval = SEMISPACE.join(D } v¢ drpolicy.jÐ_store_parse(‹Ual))
¡ s À ] ? ³ m Ñ6 = 2 ` ƒdef get_Í0_ch…  t(8 ö , failobj=None)¡‚"""Retur%3  6qeter ofƒ‹ .v  Ò  ¶rF `ed strÒñis always coerced to ¸‘ case.  I[ …re is no#k  `, or i/ &at	 6  ² ,I ò  _ � %5""") @miss³ –= object(û_ =O _#(' 3', ? 5 %if— $is s 2‘ •Š Pif istSance(c h, tuplµ B ð
# RFC 2231 encoded, so de ð  it, and it betÉö end up as ascii
 M pk $ =º 0[0]uA'us-0 '¤  0 :tryÐ   ó# LookupError will bcd¾e^ æ isn't known tü G   à# Python.  UniÒ U 	 Y text§ K  aains a  ac ƒiõ
 ; pas_byteú B[2].n r('raw-u� †-escape' ?   8   =(Q $, q
2 †À (LookupErroûr, UnicodeError):
  £charset = 
 5[2]% #  õacters must be in us-ascii range7 :tryi [ 0.en‹ $('8 %')4 iexcept® 
D åreturn failobj8 ñ# RFC 2046, $4.1.2 says± ösets are not case sensitiv¬ W ¢ �lower()
` ƒdef get_ ts(self,ƒ W=NoneRB"""R¤ ôa list containing the’ €(s) used@Òthis message.t  ŸQThe rK "edK ñof items describesS ñContent-Type headers'»  G · ø  parameter for t � and allM €subparts™ 5itsG wpayload  AEach� À will eitherPa strð (ñ �value of^ � ` !in! Ì  <  atÂ 1t) ½ (e W E '', î Ñ(defaults to ­2, iŽ  é Q doesehave aL °main MIME tX¤of "text",‚ Ì i? hdefine! Á D one  ‰eF‰ #	V, plu 6  /  RJ $er5p (i.e. ˜ð), so that a non-multi` Ù j¶ st¼g ²Åof length 1.6 5""" / [W .‚#(‡)k &  N Ÿ ‚.walk()]æZ? Pdispoš!oneW $!'s^ ü;  Þ‘it exists® ö¹ ˜Ã FPs can¹Ãð'inline', 'attachment'÷ I `accordètrŸe rfc21834j ! =¥ 4 ('Ç» 
#ifã!is¶	� Ác_d = _splití(t T)[0].Ñ   ÿ 2c_dŠ0# IB ‘¢ ¬R): ..Í ðfrom email.iterators import 0 �


class0bPart(Me"):`  Y �__init__ÛŒ, policy?#if  ø ‰ @ † å� å " ,=  � .’ &)
³ 2as_Ë´ @unixƒ ²=False, maxp1lenÊ ×  ¿`entireemattedÈ4as =°¤Optional '€ °', when tru† 0ean°QcludeFð Unix From_ enveclope
  Âheader.  max ö#len is retained for backward compatibility with thN ð'base Message class, but defaults to None, meaning thatC Æ policy valuP  | ñ	max_line_length controls6 ³  ½ Rimum # B.  'O E' isë `passedƒ ó	the Generator instance u ‘serializec mÏ u; if itN àis not specifiX $heÅ ¥associated# G n š  y .Z 5""" Ç ƒ = self. $ifi !isOD els} ;  if!Ô {:!  	ö=W .s2 ø
return super().as_string(G = ,S =» !)
L Pdef _< 0__(Ù )• c  ï ` > =, ÷.clone(utf8=True)[ Üis_attachmenta 4c_dOPget('Oñent-disposition')¦   �  Faa0if > 	uCc_d.C _C V == '… 'ø ‘find_bodyš ÷, part, preferencelist íJart.Õ ! § ¶ Ðmaintype, sub	 ! =g T.get_®   ·().split('/õ :B È Vtext'£ q %if[ +in½ 
*  . zyield (ä s.index(¢ )	z 8 ~× ˜ �!= 'multi?� 7 e  6 0relš4  j0subN  Ò s@ter_ +s(p � Õ Bfrom�_ÙI ÖÊ  @ ¦ '› ‚ 	
T{ PE R±candidate =6Ž Xstart#qparam(' 
 
� := Y[@id']ma   -  À «Ã     Ubreak  µù »
Á L sjyload(�‚  @s[0]E ‹ i‚  7 ! 
† ÔOw Qe  O ÚU	>à=('related', 'óhtml', 'plain')):
  õ6"""Return best candidate mime part for display as 'body' of message.
N ð"Do a depth first search, starting with self, look  ` 3the2  s P Pmatch$ @eachs  ( òitems in preferencelist, and rÍ  ( 	J  correspondO 0to " ¤  P Á that has a u ð, or None if no % s˜ Dhave* ÿ.  If 'related' is not included© …considerP  � BrootqÀof any multiÅ /\ À encounteredŠa¯J ½  “ BgnorÁsuõ'Content-Disposition: attachment'.E 5"""  Ê_prio = len(u)( Qody =3  Ú ; ,Ø !inúp._find_G(
T ž ¥0if D ! <¢‹ 
!  % ¦  . ƒ      n ! =ˆ  b N== 0[ > Ereak8 d S 
 Ì ÷_types = {('textp,&  I  & ž)%  P 	'- áalternative')}ƒ 0defÊ&r_÷s„!an- ‘ator over4`non-ma~@arts”aªASkip1 e2of ÄAccur´ ;  (/•!,   	ü – â  g F v (unles´Sthey ¹� header)TËA allF Å re L0sub¥’ ‚  ù0ter<õ.  When applied to aH ° ã A  n ¯�s exceptM%3.  ¸%anM Vempty´wv ©/;'or‘ àz ú  íP, sub	 " =ÙRget_cfÆ().split('/'*4if B U != ''tS 7= '¥ '™$ù xpayloadˆ  (x `# Cert»”malformedÃsJÀ  Ø 0set¯`£ 5/*`u ²# but still; Rsinglt ,•�which cas ¦ p.copy()s L Bfail©æAttributeErrorƒ:tryw ÕX T À except Attr×ibuteError:
  ð# payload is not a list, it ùmost probably a string.C ureturn
 õif maintype == 'multipart' and sub Œrelated'” CFor  ð, we treat everything but the ro³ ú s an attachmentŸ 4# T) Àmay be indicx p by 'st› @; ifR 0re'  e or weÙ  7À# can't find0 b named/ ,¨  ™ Pfirstì  ù 1 as,  ® 
� g ó= self.get_param(• ){ "ifg 
- • Êfound = Fals¯   is = []U  ! Afor § !in sb  ' !if  § à('content-id')æÉ 8  < ¢ >Tru¡  ! Oelse? Ã €.append(± 
  G 1if k K §yield from.s I Õ    r zs.pop(0y W $ 	Q I °# OtherwiseÙ@moref£less inverØeC ê�logic in FbodyA Úðis only really workI ô
 edge cases (ex: non-textW5 or§ ó # alternatives)
P send‚ ´agent sets ö¶disposition� Aseena`   # O– Askipúð example of eachKpdidate J ‘  1 ,` 	 % =š_£ _ Ê().split('/'³]if ((H )hs‹_jD  \d+   . ðF.is_¡)()æ % 0in )•  Ñ
¨  h  Ò +in8t  y€def iterA0ts(Å p A"""R¦ ) ' ðator over all immediˆ0subT s£%a º.e  Ž H Qemptyu N  µah7  2   5"""D È d Ñ Ü Dent_‹(M3
4ö Á â  ‹_À"()¤  	Z 
„, *args,À÷_manager=None, **kw-,if(  
 + 
� ¼ M  Æ{policy. þ b Ê 3 
³ � Û 4setã
( = Û Àe, **kw):
    ñif content_manager is None:
!  % ë= self.policy. :  S.set_ (@ ñ , *args, **kw)
8 ódef _make_multipart, ósubtype, disallowed_ Æs, boundary)¹ "if¦ gw P_mainF u() == 'd '7  ó „existinga  ñ K | !()¸  6   �  / =³ C + (C ,C =if € /inD 
µ   ð	raise ValueError("Cannotçùvert {} to {}".format(¾  C   € #, « )« õkeep_headers = []J  µ °for name, v£ 2 in£. 
Ñ !if- .ìór().startswith('H'-'ñ º   € —.append((w Å  / ;elsï  ß E 8if s 
Å p# ThereXV � t�, move it“�the firstk O .P �   1 = ¼ <")(}= ‰œ2 .Y) =£ [ ”._payloadê 	* l   ô – øI1 -  @pu  % 2['C£ˆ-Type'] ¸@/' +1 6 %if w ÿÓ [ ’tparam('A'L“’srelated�1 =\ †Y Ã'< ÿ', ('alternative', 'mixed')x 0 | "@ € q ,r " l ":  f ^ M_addÚfQ_dispXS1if ˜ .‹Ö!E' or    > Ûd() != Œ Ñ 5 qgetattr{  ³ ¡ {/  « . ˆÒ( |   1if U and ý '�osition' ç!inç/ <  b EÀtent-Disposiótion'] = _disp
  ñself.attach(part)
 ðdef add_related(' ñ , *args, **kw):(  F    ._. PmultiF #('9 '5 w €='inline  E 
m ¿alternativeq =  ^ ª e ì Omentd Vmixed^ Ó > R   
× Qcleari 1Ëheaders = []Læpayload = NoneÀ N T_cont¿ V 	°(n, v) for 
 B in «z u  Å	 óif not n.lower().startswith(' ?-')· ð

class EmailMessage(MIMEPh:× 9setÕ 4i"upŽ 0 “Ñ @if 'i P-VersøÏ  ¹ ô  [-  %ð''1.0'
# Copyright (C) 2001-2007 Python Software Foundadð
# Author: Barry Warsaw, Thomas Wouters, AnC �y Baxterl €ntact: e1a-sig@pg ð.org

"""A parser of RFC 2822 and í 7 " miàs."""

__all__e!'P< Q', 'H{ [Bytes 
$ [‹   'Feed.  ó]

from io import StringIO, TextIOWrapper( î S.feedÝ 6 S !, ¡  a 9 ´_policybasep £compat32

‚­ ù Ú�__init__™1, _¨=lR, *, R =G d2"""L ‚â fú"Creates an in-memory object tree representing theÍu, which…0can% ±n be manipu¦ñ
turned over to a Generato  re   = M vtextualƒ Ç á  ˆ O.Ì QThe sÒP must„ ðformatted as a blockA ¤r¡    O2inuu  Ps, opJð
ally preceded by a `Unix-_"' H e.  TheN  ‚ �is terminÃp eitherH  Ø 0end¢   Í o aK `blank ’ ý + Z 1he 8 f²instantiatep$ew‰çQs whe¶yb ?cdË #isV  ñ have a construcÅAhat &akø �zero argu‡ðs.  Default is MessagÓe.Message.

  ôThe policy keyword specifies a ðobject that control •number ofO a= pts of tZ ðarser's operation.  s tdefault` •maintainsI ÷backward compatibility¹ 5"""- âself._class = 	 
 ã =q  Pdef p¢ (A õ
, fp, headersonly=False):J Ò"""Create a mJñ  structure fromõ Ødata in a fill–Reads all' 5  + Á and returns# DrootKq � y P.  Op[(al¾   i¢CflagÑõying whether to stopN      after read  Ã{ or not¿1is %,I @mean; "it[É aentire;&en õ .; Ò@feed”  er = FeedP¨r©ê,Ì=½.á)M (ifÄ ÷] c._set_ã  ô(B ªwhile True> ßP= fp.'V(81925  _  if* ( 
:   Ubreak¦   Ž   (8 Q   ‹.close()Ã"sto, textÈ.aÙ7ingqR™ 1 
‘	ú ™= H‘	M ™ ‘M  õ™�t ” (StringIO(y)zZb)



¤HeÓ g“ �+  <Ž C .!#Ì- (0 ³]  f2 Ø RBytes� :x ƒ__init__š ·*args, **kwÊ 2"""9  ðñ binary RFC 2822¤MIME email|s�˜ô s an in-memory ¶ ree represˆ!ng\	K u, which0can% ñn be manipulated‰  ŸRed ovGPa GenÝoVr& = M  6ualƒ 	 è  kØÌ    input mustƒ aformat�  ÕPblock@ !h   ~ À continuatioó-n lines, optionally preceded by a `Unix-from' header.  The
   ð block is terminated eitherH °the end of  qinput o aJ Qblank‘ %.
 a_classY 2he  ðto instantiate for new message objects wheno yM °must be cre¡ Ê #isV  öhave a constructor that can tak÷ ð	zero arguments.  Defaultª M‰ . € 5""" ñ self.parser = P	 Ò(*args, **kw)Adef & (1 S, fp,ˆÕsonly=False):W A"""CÞ % aË @ure È ÷ data in a binary filew–Reads all. <  + Á and returns# Drootß‰” € C.  OiÅ  4ða flag specifying¿?uto stopN      after read  W‹sY1notÞ6e d˜,,I @mean; "itbÉ `entiretÚÔ  õ .; Éðfp = TextIOWrapper(¥@encoš õ='ascii', errors='surrogateescape')W 6tryÊ `b û, b ï  C !fiÆ
G Ëfp.detach()
WSbytes\Otext^. a S y stringR-
 1 oucture%	*-Ñ Ü%	M - %M  ‰- c0 =  ï.decode('ASCII @str(S 	½ ë0BäH½h  <h8TrugŠ H ™ «¦> z2 Æp  l¿E Ð
"""This willþ ¢2hom9  bpolicyéPhooks  @new
¤ 'ad email6 fea´ s.f ´

import re
 Asys
90 "._k Sbase , P} Õ, Compat32, c
 ²_extend_docP	M TutilsG U_has_Z	( (ðregistry import HeadeõrRegistry as Heade ó
from email.contentmanager import raw_data_ 2 tmessage+ EG M ò

__all__ = [
    'Compat32', c dPolicy M 
 tdefault" Ustric DSMTP %HT ð
]

linesep_splitter = re.~ ðile(r'\n|\r')

@_extend_doc] §ngs
class � (” 1):
Æ A"""+	 ²PROVISIONAL �The API T ñsions enabled by this pò ð are currently provi0 1al.Z ôRefer to the documentation for details.v X ‘dds new hôñ parsing and fold ñlgorithms.  Instead ofy ssimple ,G s° ñstom objects with cu ¡attributesF Qdepenl !onÃ qtype of €field.  -“ a fullyE Š  ø ±s RFCs 2047È C5322û qIn addi.@setts ” ñ listed above that apply toj Aall ãJies,§ O „afollow>p 'alb @utf8ø Ð-- if False (K Ó$) K« QQll be“ B  €serializÍ ¡s ASCII, uâÐencoded words; N 	�any non-H Ò characters i¶Usourc -%‘  @True?eÚ  ¿ µ � 	L ·�will not ­Bain Ù ê @(see!L 	A65329Qmore ”%isŽ XCmat)Y re›_æ Ê ÃQvalueQ a"3%” 	Qcame ‹ R ¨‚of some y  N&ishP 	ñindicates whether or7òa generator should Þ N 	%ç àwhen transform ± ½sback inJ) `stream1mù‘possible d `D=  �none  -- ­< Äuse originalåÜ 	AlongK 
G ó Phave  B+iÔ‡   V  ´€han max_A �_length ÃÚY œ/edÂ 	 AÀ refolded.

  ð	The default is 'long'.

2 àheader_factory ñ%  -- a callable that takes two arguments, 'name' andK =  ä'value', where5 Ris a } p field M L  Æ ºan unfoldedH o ,J `return… òstring-like objectó `represê  ã 	È E.  Ah X€is provi®  QN 	úunderstands some of the RFC5322î otypes.O 	ò(Currently addressqs#T date OhaveJ 	Ðspecial treat ÔÔile all otherJ /arI 
A ÿed as unstructured.  This list will bG 
ð completed befor«°e extension%�marked stÊ".)óñ content_manager± ónÿÑwith at leastõÓmethods: get_@ *	Vand s+ q.  WhenÆB ? orE 	A  �  
…a Messag­!is¬?ed,M 	!it& s„ ×corresponding\ t~M 
@pass: i+:e m‘ Pas ite5rst/P 
 /5any- Às or keyword² @at w< x _ed toê  asëvitionalV `D 	ã#/is. 	ã:data:`~email.< ^P.raw_  L `y2"""�>+0= EH æx ²utf8 = Fals reú“_source =Ó, y1= Hâ¡Registry()& ¥ • < = ¨ � ñ
def __init__(self, **kw):F  ;a# Ensu}àat each new inÂ ce2 feunique¼oE ‘(as opposàq clones`ach shaa #e ¨)òJif 'ô ¶' not in kw§  « Ú¥.__setattrÓ A ,56 E …super()..Œ “max_count6 Þ6E"""+þ   iË Ta¶Q for Ždclass ® Z à attribute fro3m
  ò0the specialized header class that would be used to construct a / N õ of type 'name'. 5""" Âreturn self.? �_factory[6 Á].max_count
4 À# The logic ` òhe next three methods is chosen suchº  it ³possible toP ô(switch a Message object between a Compat32 policy and a sderivedM pfrom th€ 4 + Phave ZÁresults stay8 istent.  T2 ƒallows aK � h`ed witÕ $is…  to“3pas•“a libraryL »Æonly handlesÔ î Ps, orÏrreceive8$an$anâ  convert it/ "usÛ ônewer style by just changing it© @.  I‡— Dalso©@becaN °it postponesðe relatively expensŸ Ãfull rfc5322M ðparse until as late ñPwhen %  “ ¨ôsource, since in man2Ñapplications :Sa fewð s will actually} in9Bted.©3def- _h _|  e(ê",  qlines):Á  ‚E"""+  è ¶ Ü dÏ peverythÄ  up‚ Y1':'•rM°ed unmodifiŽ  Y    P PvalueQ  determined¯`strippT @lead àwhitespace off¾˜ `remain€`first Ì `, join@ Òall subsequen °s together,­ P } �any trailB Pcarri�Õ  Ÿ c @feedZ°racters.  (=N i51samþ»)– 	 a", =–õ[0].split(':', 1)b -  !.l¿ Ð(' \t') + ''.(áF[1:]? Ï (z #.rE ~\r\n'))AItore@> @u – edŠØc inputShas a°ñ pattribuO ndøSmatchž ‰ b ignorµ0se,.P 4is { O &unƒ O$wiEµ#nd= Fare Ó
N òRx rdŒ Sustom„È‘  N5theJ ÐC  InÁpase a V3PError80raici;…containsP  CR´(LF®Ú…`if hasg(… ,‚)(.hÈ.lower() ==  A Z q a~ðif isinstance(value, ÷str) and len(value.splitlines())>1:
  ö(# XXX this error message isn't quite right when we use T N 0(se< ù&sue 22233), but I'm not sure what should happen here.K praise VÂ E™ ‘("Header Õ Qs mayR €contain á ifeed "G ë  �"or carriå õreturn characters")>  Ñ(name, self.h‚ ƒ_factory � 1))
9 Ddef & °etch_parse(> ", J 0 †A"""+<    bIf theä € has a '7 ò' attribute, it is   öed to unmodifiedE`OtherwE R  E   ƒ ‘ with any;7sep… removed˜ ‚are passo  D æ … method,c õresulting customJ 8 i objecÈ `.  Any"ð	rogateescaped bytes get ¬” Ainto.õunicode unknown-Ïr glyph.› _&"" ifa W(,j)› 3 g’Å p# We ca"
ÉP beca "it)ñs on more than \r'&\n­’ = ''.join(ÎAsep_h2terÅ© )¤ _�	 œOfoldŽr 5  Ê0is nAroll˜} re ð_source policy setü Ó4ã D RsiderL beä? $ A' if!@only pit doesïN 1hav9  ØP (hav¬ 8c means=a¦P �øof some sort).  If a � ` needst2be ü Åed accordingP ›³¡converted ¼aŒ !byk	N !he> ~)Â ª 5the˜ Ã·`.  FolÀ   oñ ³— ¥is done byM @callm@its O ˜  § scurrent‰S/Ç  s ^êý0 us[   Ž V 6 5 isˆ  Z7to ’,œ8 ^  reW#edV  F  pep from. N ´kr ðed.  The exception€@ 0ain« •non-asciiJ °binary data¾ nÿPt cas	æË >Ðed regardless‰¸kg`ð, which causes the óbinary data to be CTE encoded
  õusing the unknown-8bit charset.
) 5""" ðreturn self._fold(name, value, re _� b=True)H Gdef  (A ', < %):d E"""+ ±The same asA ð if cte_type is 7bit, except tha 1e r§ "ed˜ 5 isP WbytesÝ IO  Â, non-ASCII Ê Kûis converted back intoZ é  Headers with@ sare not% ed/°gardless of‹M IhL ð  setting, since) rý `no wayä Á€ whether  y P qconsistm  ý0le ó0actµ ‹or multi 
1@utf8| trô¤  s ß d ’  % 0, o‘ @wise Qascii˜ j0uni � renderedñO Hwordµ’ VOed =” y.A0=='@%')� þ@ = 'Á 'o3   q else 'Ç '3 l�2ed.³ (H ÷, 'surrogateescape'A _ 	  Ö GWFalse ³if hasattr(w'I'#  ã˜ # .P €(policy=q ò dmaxlen@õ max_line_lengthÿ  
µsys.maxsize = 2s =ya.split (r Ü1 = . õ_source == 'all' orT  Î   » 1  †long' anÝ/  (�   B len P[0])+  :c)+2 > 	x p   any(1 &x), ‘for x in b f[1:]))è #ifë3 or
 ÓŒ U_has_sÌÄ÷ hƒ_factoryxc''.joiÕ /))è ð ’ + ': ' +4½ (epI  ñ


default = EmailPK�()
# Mak“ # g  uõ…he class 
Æ D
del . Pstricq X ó.clone(raise_on_defecteeSMTP =K + Ù ¿='\r\n')
HT% ,p=None)
` pUTF8 =  Œ  � ð# Copyright (C) 2001-2006 Python Softw$ðFoundation
# Author: Ben Gertzfield
N €ntact: eoa-sig@pI ð.org

"""Quoted-printable content tý8ransfer encoding per RFCs 2045-2047.

This module handles the content tG ðmethod defined inU T 2
ton ô<e US ASCII-like 8-bit data called `quoted-printable'.  It is used to
safelyQ �text tha# ñin a character set similar to¿ 7r † 
, D, buL ´ncludes som§ ,  	ò
at are normally not
allowú ûemail bodies or headers.

Qà  Ú ÷
very space-inefficient fo¥Ðbinary files; Ï 
h ´.base64mime² ; knsteadÑPproviß Àan interface#@e anÈ”code both¿  Õ l
with ­•‘ing.

RFCýCs a " � ia ~W¯0infS0tioš R an
`” pd-word'Wa� 2.  ¦y°is commonly d@bð!real names
in To:/From:/Cc: etc. fields, as well ÐSubject: lineºl @doesô" dW $ ` wrappÓ ¸Qd-of- â €
conversÝ anecessÓ`or pro†Œ naþ calizedê `s; it Ú 
z Edumbl–"deÍ 0o dð ¢ ³qvariousÉ 
¥ pissues,+ K K©Gñ.
"""

__all__ = [
    'body_r 7e', ª	 dlength 
4  dstring" € ]  
_  
a ‘L (un ò]

import re

from {   òascii_letters, digits, hex ñ

CRLF = '\r\n'
NL àn'
EMPTYSTRING  '

# Buildô€f octetsg –Qexpan"ofÁ  â.  Since we'reô@# goXÁto have 256 5 °ese things, ÷s isn't terribly N#
#bò wise.  Remember{ MsKáj `differ�s» 0of ~&
#es Aniti±/Umaps Ufull î ,d pthen ov¨ Ade
#� Z W byte< 0morsAmpacàm.
_QUOPRI_MAP’±'=%02X' % cñc"µrange(256)]0 cHEADER7 E &[:$ OBODY" s
# Safe�§ ³hich need nâü áˆ ¹b'-!*+/' + ^.Ë!(' C') +o :^® Ã ò[c] = chr(c)
# H_´pone oth ðpecial encoding; spacó†es become underscores.
_QUOPRI_HEADER_MAP[ord(' ')] = '_'

# Safe body bytes which need no encoding.
for c in (b' !"#$%&\'()*+,-./0123456789:;<>'
    ùb'?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`'1 ñabcdefghijklmnopqrstuvwxyz{|}~\t'):0 à ABODYÞ c× €chr(c)

Ü óHelpers
def header_check(octetG ñ"""Return True if the " ó should be escaped withL ± quopri."""� rF  � > T) != ¥ … } 1]

— Obody• 3 J “ 8® ‘ (plength(]array-aäted-printable 4 D !.
ð!Note that this does not include any RFC 2047 chrÏ�added byA `š _ Ce()`Y u:param ª Q: An ´ 1 of ’s (a.k.a.Ö1s).Q :±S: The¬ 3 in2 o V M ¢when it isâ K  í:quo 2´ sq )�sum(len(# ) C ž™ Ø  Þ Ó ò_e©
 (  
Ÿ H3ingû N‘@bodiÚ oMÝKô_max_append(L, s, maxlen, extra='u"if¶ósinstance(s, str  š 0s =Á1(s)2 Lµ ! #L.j ¢s.lstrip()+ @elif�‘(L[-1]) + Ss) <=� E  # 2 +=¡ A + sn Gelse% j y!un±#(sº @"""TaÎ  !in	±form =AB to ò ASCII character«value 0xab— ô int(s[1:3], 16)¾ c Œ/­+c)˜¶"e(X_Ÿ!s,Ž ô set='iso-8859-1°p"""Encoat single¸Bline¾ Š Âb(like)çiý[pDefined‹©"5,Í5`Q'-   psimilar3\ Q, butO ñused specificallyîTemail£ `fieldsG Tallowè ðs with mostly 7
ð    bit characters (and some 8 ð) to remain more or less readable in non-RFC
O ñ
2045 aware mail clients.
  i Öset names the{   Qto usT   ñRFC 2046 header.  ItG €defaults� ±iso-8859-1. 1""" ã# Return emptyC ds as a bstring7 cif not' q_bytes:H  Õ rJ !'' ð# Iterate over every 2 °, encoding O ‚ecessarya  Ied =d ó .decode('latin1').translate(_QUOPRI_HEADER_MAP)€ qNow addA %0chr²rto each† �ed chunk ÑAglue.  sG ‚together¡ å `=?%s?q c=' % (´Ý ded)


› °BODY_ENCODE  9 =  ÀMAP[:]
for c)rb'\r\n'Y	* D ò[c] = chr(c)

def body_?( ò	, maxlinelen=76, eol=NL)W @"""E†ðe with quoted-print°p, wrapp¤'atI ‰s¬EK g 5 ofSÒtext will endb ¸eol, which ˜¢"\\n".  Se´1thi°@"\\r  #2youM Pbe us”  ÷`resultv 4 ñfunction directly¾"inÈ=ail°   "beê ped at, í 8ost<ó @ befÞ1the^ Beol & (m	à '76@ ,]Âmaximum valuH Ðpermitted by ª �).  Long ]s2hav¡Q'soft b breaksÆ{ Ð "=" appended�them, so’ ^%d ·Þ Ãbe identical3 p origin 3extRqThe minÔ @is 47 ´ Proom áak› b("=XX"µbfollow	+a å  'bmaller<2genha· VWSError   ë (ifÊ2< 4»Vaise ; '("Ê pmust besleast 4®  ¿!otzK  ƒÎ#ó † specialú a ) ! =E Ö ;)S  _ù€ = '=' +Þå @# le&Qspaces - $ !atí ’Aof a>3 ë 81 =#2- 1p W#d_¬ ![]8 P$ =÷ . 8  ò ¿Ö�ody.split #s(‰ ~#Å1 up¢    € into piü  no longer than¢  B   ‘start = 0�   Dlast @len(Y w) - 1 -E / bwhile 1 À<= laststart7:
  ùstop = start + maxlinelen1' ù!# make sure we don't break up an escape sequence= 0if U [l º- 2] == '='Š  • sappend(. Cart:4 91])S  - ´  ¼ iop - 2! +elv 1v r 
#OelseÒ 0] +Ô 
Ñ ò # handle rest oOó , special case ï ÷ ends in whitespaŒ# 2and‘0-1]+ K' \t�Erooma- lasto“  �1if ( N>= 3ú ‡# It's aŠ Ð character atª @-of-í , ” qwe haveU 	i  m ö# for the three-K ýquoted encoding.; Aq = % Y-M,Ê O== 2Ê qThere'sš ˆ bØ ƒnd a sofŽ  ô [~++ _J	¸ N)# Š Aonly� 	r  % ñ d}	_ R`will bR!e L ¡content onj2subÑt0Ì  ì Á " +v gÝqö 5 "])ð# add back final newX 
qpresentó qif bodyovin CRLFã_ #''U ñreturn eol.join(U0ed_B ò)



# BAW: I'm not!if.i<1was” «`signat5o$ �is functi`ao be
#: ðsame as base64MIME.decode() ori ƒ...
def  — ,© B=NL)Ñ A"""D7 " a‰ñ d-printable str€Lines ar±@para@@withP ,4òch defaults to \\ný1"""A  if– t"ed  T@ Œ!ed+ 2€see comm_#in: ð() above.  Again, we're builÌ ]"thN#ý dË  ± ×   concatena\Â PcouldàÔdone much morN ²efficientlyÜ \bd = ''c rS± pd.split #s(w ø   " =&r” &p(Ö- $ * 6 r  +=y.     ŠBinue‰   Ui = 0$ nn !enkj ¹while i < nj À c = line[i]'
  Éif c != '=':  $ Ídecoded += c i 1 ñ# Otherwise, c == "=".  Are we at the end of ûline?  If so, addO pa soft ' y break.! €elif i+1j n¿ ¢   Ö ‰continueK 1# Dí  R ©n form =AB$ o ‘2 < n and˜ ø[i+1] in hexdigits 2 ¤ c€unquote(î ‰[i:i+3])€  ½ Ô 3 	v0not� À ù, pass literally9 Oelse’ 
õ	G  2‚Þ 1eol6 à# Special caseoðoriginal string did Ç  (Twith ; Qif en’A[-1]$ ‘in '\r\n'uo P.ends: V(eol)â  3 = 
 Q[:-1]– dreturn ñ


# For conveniencea ò(backwards compatibility w/ standard base64 module
body_o x 
 ï Ž “



def _q_match( Å @"""T§ !a   é Qí1 toVðASCII character á value 0xab"""ô 2s =H ‚.group(0n† 1(s)bHeader! ¥ñ
is done a bit differentlyÄ h. ø &(s¿ eaìÐ£ âRFC 2045 MIME D B `Q'öQing.
¹ ñThis function does@pars‘ IfullC û k G nð'd-printable (like =?iso-8859-1?q?Hello_World?=) -- pleº"usB ‚óhigh level email.½  cl~…for that´ a5Ë�ùs.replace('_', ' '’ûre.sub(r'=[a-fA-F0-9]{2}',4á, s, flags=re.ð#)
# Copyright (C) 2001-2010 Python Software Founda\ñ
# Author: Barry WarsawL bntact:ï a-sig@pG ð
.org

"""Miscellaneous ut)@ies.ñ Á
__all__ = [‹ñ'collapse_rfc2231_´"', 0{_params 1  æG   "jataddr Jdate _ 5tim !ge8 Eesse{ ¤make_msgid=  mk4 4_tz �q   ] 	"   6  oŠ ’@ Ä]

import os
 $re
  Ž  ðrandom
import soôcket
import datetime ñurllib.parse

from email._ Saddr ; _quote# ÷AddressList as _ 9  mk• ?_tz„ •  Ä %,  R_tz, ¯   E ã# IntrapackageÂ s„  chó t " C ð

COMMASPACE = ', '
EMPTYSTRING ='
U @CRLF ÿ6\r\n'
TICK = "'"

specialsre = re.compile(r'[][\\()<>@,:;".]')
escape, 0\\"! õ+
def _has_surrogates(s):
    """Return True if s contains 0 -e €d binaryQa."""C ð# This check is based on the fact that unless fre are^ ss, utf8M ò(Python's default encoding) can âe any string. � i] ƒ fastestN cway to� 9forv ðsee issue 11454   �timings.@ 2try' +!s.‰ 1e()   r;QFalse ð except UnicodeE¹ feErrorG 4  op

# How¡ ³deal with a× ‡ðing bytes before han0 it9 ñ the
# applicatiwProughjò 'normal' interface.’sanitize(D0# T \ò{ binto uÖ ° 'unknown' Q.  Ifm 3 	#´ `happen©  beæ -8+ ðy will instead get de2pd, evenˆCtheyK âwere invalid iY {  se\°e source wa³0ppo€@to b5 J  seems like?ðis not a bad thing; aw2ectN t§ ¢registered’original_—=±`'utf-8@'9
F . (= Àreplace')


(qelpers
¿fÖtha(pair,‰Cset=? ÏP"""Th‚verse of 8  ),ò ñs takes a 2-tupl% ¸1orm4¢(realname,ä_> ’ess) and Ì yJP valuÝRitabl Xñan RFC 2822 From, To or Cc header.
p LÒfirst elementº  ir^fl ¼  V•he second* !isF ˜ °ed unmodifi¼   op)$al7 X  õ  Tbacter Z at uOþE  �Vcase  SðASCII safe.  CanŒ!anñ1ancfastr orO aJ-š1obj�phich haž#_ƒ ³ method.  D"ö þ¦Ÿ¼¶0 = 1v  ¸$e  ðMUST (per RFC) bð-e ascii, so raise a UnicodeError if it isn't.
    address.en% !('@ !') �if name:  - 6try     ;   eexcept€ a † 
D  “ úsinstance(charset, str))  T  B = C) 1 ²  #   Î  d_  3 = 6 ‚.header_ ( 
7 òreturn "%s <%s>" % (- K ,/7 7els! | µquotes = ''9  òif specialsre.search„ ç D "E  ´ ‘ = escapeH áub(r'\\\g<0>',±ž  x Õ 0'%s Ù 'Ù d 2 $,  C ;  ³



def get ães(fieldvalues¯B"""RHöa list of (REALNAME, EMAIL) for each A A."""20alláéOMMASPACE.joinj ' R = _AÀŠList(all¸ .¨  ‡ ½ õ_format_timetuple_and_zone(  ,  Ï ñ'%s, %02d %s %04d :  1 %sVš  wÀ['Mon', 'Tue 0Wed 0Thu 0Fri 1Sat Uun'][€ U[6]],I  2 A['Ja_ 0FebC 0Mar !Ap 0May FJun'I P 'Jul 0Aug 0Sep !Oc„ 0Nov 9Dec‹ g1] - 1y � F0],  3 4 5@ [I‹2dat|ð val=None, local[ â=False, usegmt ˜g@s a D  2bing ashñ	fied by RFC 2822, e.g.:
YòFri, 09 Nov 2001 01:08:47 -0000% �Optionalæ 0val>pgiven iu Pfloatr Qpoint%  
 ƒ  acý‚ q  gmÐ f() andà  (), otherw¬”the curreN  isú +d.� ˆ ñag that when True, interprets™ @val,{ Œ Ó Ã 8Àrelative to ƒ _ 6  ¬ ›0eadÇÑUTC, properlyK 0takò daylight savingt  „ œo accountÄ Pargumé Ûb meansÆ  „  -~ ñs written out asw "anéôø, not numeric one (so "GMT"¿  "+Ür"). ThiI ‘is needed‘AHTTP' YAonlyW — =‡?³à# Note: we canŽ 0usež f3 p() beca ¨Phonorî ee› ©Ý #¯€ require' aat day% Qmonthæðs be the English abbñreviations.
    if timeval is None:    =# . !() €if local ¦ or usegmt: �dt = date! .	 @from `stamp(
 Fval,)   ‚zone.utci 7els‘ W ?utcZ C ¬ ¢ Dt.asu Û  ù Ï � = Falseò äreturn format_Ò C(dt,ý o)

def! =M )ƒ @"""TP aý b into  ñ string as specified in RFC 2822.
” #If|  »ö
True, dt must be an awareb @with ñoffset of zero.  InP ðthis case 'GMT' willJ arenderƒ Pstead: Pthe nÐl +0000 requi% !byM 1RFC« 0  TW ðis to support HTTP headers involvð  W ž1"""M 0nowQt„Stuple®iW ½Àif dt.tzinfo Ô ¤ !œþ sD  H óraise ValueError(" op@ñ us a UTCf"v B  Ë" =MÇ /el� w 1 -R'3 ! pdt.strf¼ C("%zs £_¤  +P_and_: `(now, 
 ")
®Òmake_msgid(idu=0�, domain ³R ò , � suitable÷žò compliant Message-ID, e.g:¸ñ6<142480216486.20800.16526388040877946887@nightshade.la.mastaler.com>
O‹ ¼¾  ÐPgivenúaHAusedÂtrengthen thØ¤uniquenessÖm´ e id.  a _ …providesI  Ø>ionF ` after( @ '@'n‘t default JMl9òdefined hostname¨
 Ö ­=0Cb()*100{ó pid = os.getpid*`randin˜ 
  om  
 rbits(64; 4if  A ž ?= '�  E.' +K « úTY \€= socketš Cfqdn¹ Ÿ GA<%d. ¡%s@%s>' % DPpid, Ð Eint,z ÈÞ !Q Pparsew7_toÖ3ataö!*dD‡, tz = _0 0z(d' Ý .tzÙ q  `  ¸	(V I[:6]› * 
,k  Y  á=2  a  Û – w  ðdelta(seconds=tz)ð))


def parseaddr( ¡):
    """ P   ñ into its constituent realname and email- 0essX Ats.
G ÿReturn a tuple of9 P, unlA 0theE Áse fails, inM Äwhich case rX %2-Z ‘('', '').- É  Ã òs = _AddressListñ . qesslist3 aif notÈ s k ] (   ? ð@s[0]


# rfc822.unquote() doesn't properly de-backslash-ify in Python pre-2.3.
—C 6str”qRemove ] ôs from a string.ê pif len(8 F > 1Â  if+ ñ.startswith('"')ºvstr.end 6 ü ðstr[1:-1].replace('\\\\oH\\') " 1"')) C }  <} #>'ï  6   g} S  
xðRFC2231-related functions -Dñ ameter encodingô "de  Pe_rfcG #(s„ @"""D' e:9 AccorC pto RFC / zpYò = s.split(TICK, 2—$ f) <= 2dÎ bNone,  sç 5 ¯Ä ª @, ch¥"t=9 �language Ç Eû Ç ¬¤If neitherZ T nor X ð is given, then s Á Ñed as-is.  IfÀ ›  # 4 A but]N E ]"is¢Ped usn QemptyM è' f� 
ä àqurllib.Õ.(�(s, safe=»>Ding=š “or 'ascii¬%ifö !isŒ-°  Ê  h¼° å€* D A= ''Ò 7Q "%s' S" % (š ,r0, s¬œ�_continuaßð = re.compile(r'^(?P<��>\w+)\*( €um>[0-9] c?)?$',~ r.ASCII)rparams( @  L s 0/ aI, ‘a sequencû¬I@tainêp  » ,[valueÇCnew_X 2= [
 A[0]]Ñ V# Mapï!'sP R to a®  of½> ©AThe i ss are aI 3P …	tinumberºB ,*ca flagG pspecifyâ 1wheTa¡ Àticular segmGQis %-œ"edÔîã Q = {}T  þ&t  ># F[1:]–L ! =ÜÀh('*')
     ñ   value = unquote( 3)
  ömo = rfc2231_continuation.match(name. eif mo:=  D  ! ð, num = mo.group(' †', 'num'?  0 !if- ºis not NoneP  $ N zint(num? « ñparams.setdefaultª Ð, []).append(= , ¦, encoded)N ;els{ Cnew_X C èame, '"%s"' % CK %if?< Ï @for 	(, YKs in3 †.items();  ªY = []qùextended = False �# Sort bye9ber 	† f.sort( r ¢# And now  B allAµ ñ numerical order× yvertingh A# %-pPings 4the‚ü	 segments.  If any of thÈ ­ FQs endˆ @a *,2 n û entire string, aft÷ ¥# decoding| @ and•`catenaÁ ±, must haveV pcharset) Ü ñlanguage specifiers at5 `beginni Ó • .B  enum, s– ð s	 ›$ifA    0# Då pe as "lÓ q-1", so™  Î 0act« Ùin s directly™  G   ¢# represenÖ rpercentÓƒed octet
Û  >   ´# collapse_°Í°treats this© #anM �sequenceO s¿prllib.p–.ÌBEing=õ 
Ó �   6:Trum     :sD  # =þóEMPTYSTRING.joinR
3  ¯¨° ŽTset, K¦" =ª6[ ¦©([  ½Ç )· ô     a M › vreturn 5 _

defÔ ñ, errors='replace',K  }   “fallback_à ³='us-ascii'5 WÃot isinstancéä, tuple) or le¬V != 3˜À V(� r# Whileí² comes to u¾@ uniVçÀ, we need it& £be a bytesL áobject.  We do 0wan®ótes() normal utf-8
rU & ag SaightO ‘interpret°Fà string as chañ"racter bytes.
    charset, language, text = value$ $if' ‘ is None:  @ ö # Issue 17369: + /Q 0 ð, decode_rfc2231 couldn't p N 2thez �, so use  “fallback_¯ ¼  €  < = $ U 1rawí " =õ (Ý  , 'raw-uni” ‘-escape')1 6tryÝ ´return str(I ,‚, errors7 àexcept LookupE F #3  Ànot a known ~ cË n qunquoteª ñ)


#
# datetime does7árovide a local  function yÐCso p% ñ
one.  Code
# adapted from\¡patch in iÉð9527.  This may ± ðbe perfect, but it is
# betOAthan( öhaving it.
#

defž @(dt=:², isdst=-1)"B"""RgÊ  Ë ¶as an awareü �object.
¨óIf called without arguments, JqcurrentS ñ.  Otherwise *dt*F 4 0 sh‘  bRmÒinstance, andõ p converA to?G º °zone accord% q system‰  " pdatabas˜!If�  R Ñ naive (thae°, dt.tzinfo> B#),‹  assumed to¸ "inme U@In tÇ0casÄ ` posit^ ror zeroia for *–‚* causesJ Š!toâ 0prem ± initially ¡ asummers   (H òexample, Daylight SBTime+Pis orÍ  Zp(respec– 0ly)† efh•  ú  0ifiç  im/A� @nega5 Ã  = ˜ Ç 5() ¡to attemptJ Ðto divine whe" Õ /is” ‘1"""P @if dº(“\.	 Enow(  ¬   „.utc).as (; \  B J >g t= €# We havãew  × L5a (8)ÛQtupleSpass #Ö mk§ B tog@ ‘ ê’ hint.  S- Cwill§6ò# seconds since epochÆAtm =1imeŠ ±()[:-1] + (¶,A =´ .i 2(tm Ó  K  ­ . Cime(7 & 	þPdelta| }.:  5 =G ²m.tm_gmtoffG  Š,tz;  Ù(@ ,a9   7 E�AttributeHñCompute UTC offset–@comp*y»ð implied by tm_isdst3.
  ñ# If the values match, use özone name implied by tm_isdstF ôdelta = dt - datetime.	 !(*  gm å(seconds)[:6])ˆ `dst = ! ô.daylight and localtm.t E > 05 ±gmtoff = -(: 1alt± 0if P  elÆ  Š     p  # µ =±  ' Ë ¥ =b %):s  7 tzë æ  5  \ (: ,Ä  tz5G[dstä  � J ¬ ñreturn dt.replace(tzinfo=tz)
# Copyr-ñ.(C) 2001-2006 Python Software Foundation
# Author: Keith DartJ ñntact: email-sig@pE ñ.org

"""Class representing applicX ð/* type MIME documents."""

__all__ = ["  A7 ‚"]

fromw  fÇort encoders  .mÉÄnonmultipart-  R DNonM A


c«   k ( ) ×Û ¯for generaÝ   = Ø  ðdef __init__(self, _data, _subù='octet-stream',L C # _ð = "s.	 ó_base64, *, policy=None, **_paramsÃ  F  Ç �reate an™%.
† ® � is a strÖpcontain  8rawP  /a@ ç  C  / ) C 2ent! `, defa¦Ung to� 
Z rZ `a funcÁñ which will perform«bactual; » 5forc `transpZoî¹Ð œ  yM • €Any addi‹ âal keyword argò o‘passed toš  M  “‘ Ãconstructor,Ñ  ès0 qm into á€eters on Õ Content-TypeJ fheader‹ q   %if… D <
€`raise P éError('InvalidðÑÄ'– ]   N.'d'ÊÑ  ] 	 îö  iÑ.set_payload(Æ� R’)7) AnN�y Baxter-&Oudio''^A1 a']

im¼csndhdr0$io wBytesIO, @GÀ email.mime.ônonmultipart import MIMENonM Ð



_sndhdr_ þ
map = {'au'  : 'basic',
   'wav' :'x-	 # Paiff'# 	 $ c$ ò
}

# There are others in º ñ that don't haveç ð types. :(
# Additional ones to be added G ñ"? midi, mp3, realaudio, wma??
def _whatsnd(data):`"""TryF ñidentify a sound file‡ !.
+ g .E ñ.() has a pretty cruddy interface, unfortunately.  This is whyM Àwe re-do it °.  It wouldÜ `easier— àreverse engine �he Unix '¡ 'N €command  ñ	use the standard 'magic'Ð ñ, as shipped with a modernT .N 1""" `hdr = -a[:512] @fakey ò  = BytesIO(hdr) –or testfnÞ. sm †Sres =&  : $, R D  $ 0if ' ¶is not None@    {return ú².get(res[0]K '  @ *Qclass^A(2OC* ñ for generating P!/*A ° documents..þ cñ _init__(self, _4  B`, _subÕ=� L @_encŠ= "s.	 ò_base64, *, policyB £ **_params¸  Å"""Create an±  v 
¶ Ò 2 £  ŸPa strí pcontain  M2rawO  ­0f tÓ Ü þ  L 0can½ deÉ Jd by‰‚Python `I'y@ule,% n H *P willQ Àautomaticallf0cluûi6 ò Content-Type headerÈ “ Om wise, you ¢ @specè s   #icÞ z 0via ’ ½ rBeter ¬agiven,ˆ4no N  v %beM °guessed, a ´ PError}hraisedœ `a funcb whichpperform¬ � actual 4  ¸5fors QtransDo¹ue imageÍpt takes^A argÚ,h !isêK I:  in` ceAt sh¹ {Ñget_payload()	s %toJ Rchang­2  ñ oÄ 0ed Ü 	b @alsoù2 anH ä å Pfer-EJ "orn: ` @mess %as� 0nec r­–e defaultOAis BŠ¡0AnyŽ �ukeywordCsð paîÛ  Î Š{ ðconstructor, which tuðrns them into parameters on ó  Content-Type
  uheader. 5""" õif _subtype is None:  @  õ= _whatsnd(_audiodata), I `raise ™ ñError('Could not find T c MIME ‘ '^   ñNonMultipart.__init__(self, '> %',Í ’, policy= ,¨  Ô  1**_Qsw  ] ¿.set_payloaú �_encoder‹ ñ>)
# Copyright (C) 2001-2006 Python Software Foundation
# Author: Barry WarsawL ñntact: email-sig@pG ó.org

"""Base class forA�pecializ^  s.òÐ
__all__ = ['P 9 ¢']

importa ./b

from    Âmessage



o E ( ".M# )Bœ  ’Kdef ×P_mainœÙ*Ü ®&, ¸x  L ù"""This constructor adds a#0: az5¤-Version: 04;The7 #  2ataken /Ethe ² Z =J ðarguments.  Addiý(alÉ Ät» c  )
d M †keyword U   ñ   #if ¯  3'  ò" =î•.compat32R ä�F nAc½å = '%s/%s' % ("Ô0 qBadd_þ  %Ñ1', P ó   : ØÉ ']y A1.0'H”YC�ñrepresenting image/*  :C doc ®ŸI1  oimghdrš€sµ¤.mime.nonm2Ç { JÐv (% ÒÚ  ¥ogeneraÜ  hß H=¢¯ f=î .	 Ÿ_base64, ŸCreate an’%.
W_£  >Pa strÎpcontain  ö2rawO  Í a.  If Å  L �can be de/Ad by³„standard`éð' module, then the
     ð(subtype will be automatically included in the Content-T3 €header.
G   ñOtherwise, you can specify<  ”ic image y 1via _ O pparametb  ò_encoder is a function whichÃ qperformS qactual 4 uing forJ Átransport of- – ódata.  It takes one argument,h uis thisK IÐ ‚instance> ùshould use get_payload() and s %toJ achange� 2 1 to Ä  edÃ mb Åalso add anyH § å Pfer-E7 @or o§ ½s` @mess–a× 0nec öry.  The defaultOµis Base64.
z 0AnyŽ i—¥al keywordCÄs are passed{ –base clas{ ´constructoru@turnx…em into  ¤#õ 5ype� ç ¤5""" 4if u PUNone:  Ñ à= imghdr.what() 1, _1 0)5 R `raise >�Error('C'“not guessDMIME!'_   ñNonMultipart.__init__(self, '“ %',× ’, policy= ,©  Þ  1**_[sw  ] .´û š‹ ð)
# Copyright (C) 2001-2006 Python Softw`Founda0ñ
# Author: Barry WarsawL ñntact: email-sig@pG  .org

"""C@  representëÓ0/* 8A docÆ s.Ð
__all__ = ['  Mì¢ge']

fromj 1 im#K  ¤.mime.nonm�,  M ¥Q



ßˆ h (' ){Ë ! ÉKdef F_msgÅ='rfc822', * Êy  E  } ƒreate a ó 1/*  ¯ Cð e  =1 q objectèAmustT$n  ne, or a“rderived

'  ± X& a; u NdŽ  OpH%al µ1ine9Q \  Ì”containedì è‘ ðBis "<0" (ù { 1def; bÜ  �dard, eve0EoughO  s FtermM  HCechnlÿoutdated by RFC 2822)º o d	¾Ày=policy)
    òif not isinstance(_msg, message.M 1):
/  ð	raise TypeError('ArgumenI P 4an Q C of F %')F à# It's conveni: ÷!to use this base class method.  We need to do itK 4 õway or we'll get an exception- Ø à.attach(self, û £ õAnd be sure our default type is set correctlyc  L S.set_/ _/ #('z ñ+/rfc822')
# Copyright (C) 2002-2006 Python Software FoundaÈ ñ# Author: Barry WarsawL ñntact: email-sig@pG ¦.org

"""BUòfor MIME multipart/*Ö ¦ ðs."""

__all__ = ['0 M/ ‚']

fromn a.mime.µaimport]  p R



É	@ (  ! YŸ # ŽÄdef __init__Ç0subt±='mixed', bAÐry=None, _subõ s º P  ƒ*, polic1 !  ƒ*_paramsÀ  6 Ï"""Creates aY%.
M $ByQ?, c9  ½ ‰Õ, with properC €Content-ŠA andx÷-Version headerss  ù   ½ thÚ) £   ˜ Y ,§ eing to} `¡ '_ g_ P  –string.  þ   i7W Ñcalculated asó'edd  Ã ¼ e  a sequenceÃ  Dial Þ ç Ø `payloaEI7@mustÞ «ðterable object, such~ õa list.  You can always¬ >F newu 0to t Ia by us:2he 0 $()Ö@Addiá1al YUetersÁ 	è× ataken ‰5the— “keyword a–ó s (or passed in¢ Â& %).A  ý Ó  ª.f'Þ'R Y8?5, *)ì �# InitialE_� Ø ²Amptyv € I<a superK'�p# imple{ %s_› å assumes that l i£ Û bö #¶ws×B F= []Ò &ifT
* ƒOp in   bZ p€%if¸
T 0  aV(	 UÀon Software óŠFoundation
# Author: Barry Warsaw
# Contact: email-sig@python.org

"""Base class for MIME type messages that are not multipart."""

__all__ = ['MIMENonMu" ‚']

from| ç import errors p.mime.b‡ #  „ ’Base



›   N\ (  $ ):
    É Enon-² 
× .À  < ó	def attach(self, payload[  # ó# The public API prohibits: Bing i ô le subparts to ¨ ¦ K pderived'  types sinc^ð
ne of them are, by definiä, wcontentM  B z Uart/* Sraisen.”°ConversionEˆ(/  › @'CanäA addz  al« Ò 	TA/*')gñpyright (C) 2001-2006 Pl` SoftwB³3 Cl®�represent|btext/*â s¢ documentsè_¨JText „.charset¨C ©2noné%ar,  r ž¹ m ±$ ^2"""Ï  }ogeneraÑ  ° ¹ __ #__»_	`, _sub³='plain', _ß ñ=None, *, policy Œ  T  � €reate a L U%.
8q 0 is·@ str� Ë Sthis Cx object6   9  A e áÉ,þ2aul1o "Ì "G Õ G   `acter É`parame PaddedŽ1the…ent-TypeÇ  header.  T¸ 0defx Áó"us-ascii".  Noteðs a side-effect,O  wd Ðransfer-Encodi Ð will also be­ .; — Žu# If no¾ð was specified, checkÙ Qsee i< re= ¦· Y %# #s ;.` „t, use 'ë �', otherwC  Vutf-8¤ b# XXX:,0canÄ @remoÕoËP#7304•Vfixed8 &ifÊ 0is ‹¿ ì   :try   c .eB&e(¤ )Ú  %   ä' =Ë 	& áexcept Unicode•e	v   . G M  ÿ 'õ ¯Ì.†': uçmt,”  º  C**{'‚  ':Y(Þ Àset)})

    ð>    self.set_payload(_text, _charset)
"""
General functions for HTML manipula .- ó
import re as _re
from html.entities $   5' 
 ó


__all__ = ['escape', 'un ‚]


def  ð(s, quote=True):
Ó  ±   ðReplace special Ò ñacters "&", "<" and ">" toÎ ñ-safe sequences.P �If the opã  2lagv   is true (! ‘default),/  — a2 Q markI � Ó, both doubleL 1(")� Fsing (')¸ aT1lsoO ¢translated¨ ø rs = s.rþ (ë ñ&amp;") # Must be done first!N 6 <!o&lt;") > g "ifÆ ‚ ~
P p'"', "&R %  !\'& D#x27& ñreturn s


# see http://www.w3.org/TR/=€/syntax. Å#tokenizing-wa-referÚ¡

_invalidé0ref° {ë ô0x00: '\ufffd',  # REPLACEMENT CHARACTER- d- r)  Ó ó# CARRIAGE RETURN' 8T @20ac+ ¥# EURO SIG! 1H 0x81  u ”<control>B 2! Pu201a# ô# SINGLE LOW-9 QUOTATION MARK3 33 B01923 õLATIN SMALL LETTER F WITH HOO6 46 0201| # DOUBi 53 "26i ôHORIZONTAL ELLIPSIS” 6+ 0+ EDAGGN$87 | 
% 8% 302cn „MODIFIERÔ ôCIRCUMFLEX ACCENT| 99 3203| ™PER MILLEŠa& 3016& 6@CAPIÐ 8S8ECAROÃb9 B2039Û ¢áEFT-POINTING A¶°cA 9015°z ¤IGATURE OEÑ }!x8¨5eR 7# /# Ì ZÌ  f9 0x8fÊ Z 9Ñ!x9$! Ñ °8D d# LEFTµÿ 9â@ORIGH3 â3201We ±e Þe 3 
Þ—TBULLEU9Ñ"13è sEN DASH£9Ò#14 M ÌdÁ S�DTILDå9¶#12 QTRADEè·9·;ëP µÀ WITH CARON
ñ    0x9b: '\u203a',  # SINGLE RIGHT-POINTING A ó QUOTATION MARK
B cB B0153B ôLATIN SMALL LIGATURE OE/ d/ 0x9d-  q ”<control>! e! Pu017e# )# P ôETTER Z WITH CARON7 f7 87 ’CAPITAL L9 Y9 ñDIAERESIS
}

_invalid_codepoints = {X ²# 0x0001 to
 8 €0x1, 0x2 3 4 5 6 7 !8,, C EC !1F 00xe% f !10 T 1U 1V 1W 1X 1Y 1Z !180 9a A0x1a b c d c "1f( ‰ $7F‰ 9‰ 7… 8… 8… 8… 8… 8… 8… 8… 8… 8…  89i "8ac 10x8… 8… 8… 8… 8d 9d 9d 9d 9d 9d 9d $96L 9h 9h 9h 9é 9d 9d 9d 9d 9é BFDD0é 4FDEé 1fdd� 1fddƒ 1fdd… 1fdd‡ 1fdd‰ 1fdd‹ 1fddñ 1fdd‹ 3fddÕQ0xfdd“ 1fdd• 1fdd— 1fdd™ 1fdd› 1fdd� 1fdd3fde„ $e1é 3fdeˆ eˆ eˆ eˆ eˆ eˆ e3fde„ e�3fdeˆ eˆ eˆ eˆ e'cothers�6 "ff& !ff® #1f  	  2  	  3  	 \ 40x4  	 ( 5  	  6  	  7  	 L 8  	 ( 9  	  a  	  b  	 L c  	 ( d  	  e  	  f  	 L $10 
 fNñ

def _replace_charref(s):g Z¡s.group(1) âif s[0] == '#''  Z£# numeric E .   2 —1] in 'xX3   ònum = int(s[2:].rstrip(';'), 16t  ) Felsen   ; 1; 7  if˜  | 8å sN }return & X[num]Ì ‘0xD800 <=Y Á<= 0xDFFF or ¯> 0x10FFFF` ˆ'\uFFFD'R  É i{ ÙC = µ rchr(numö 
)# named•_html5h _ &[sþ ñ# find the longest matchingg ñ  (as defined by) ‚standard�  ¸Pfor x| órange(len(s)-1, 1, -1z ) Ð    if s[:x] Ëin _html5:
  Tretur õ [s[:x]] + s[x:]- Jelse; 7 0'&'- õ


_charref = _re.compile(r'&(#[0-9]+;?'Q … p'|#[xX]) oa-fA-F/ ò[^\t\n\f <&#;]{1,32};?)')

def unescape(s)¸ 1"""} ðConvert all named and numeric Ä ñacter references (e.g. &gt;, &#62;,J ñ
&x3e;) in the string s to  correspond vunicode` !s.D ñThis function uses= ñrules defined by ñ HTML 5 standard@ Òfor both valiË "in Ë ,í  ¯ qlist ofE Y 7 Š 0in F .entities. 5Ë a0if 0nots~ ï2st  5Ô.sub(_replace �, s)
"""  ˜ } y¡.{ Ñ
__all__ = ['— @', 'Ô 2zPpoint  2   P âdefs']


# map‡y  ,ÜUÎ ÓZ 
M i A = {ç €'AElig': ð0x00c6, # latin capital letqLAE = óigature AE, U+00C6 ISOlat1^ Qacute_ ^ 1^ a with 0 L 1L AcircK  L 2L  0 cumflexQ 2Q Ggrav� 0Q 0   k 0k Elpha¼ !39\greekfa* E $39E ¹= ?0c5¨  0 o above­  $ g ;0C5¬ Gtild3o 0 L 3L 2umlº ´4L “diaeresisP 4P 3BetG P !39HAbetaD 2392ŒRCcediŽ @7Œ CŒ0 lF :0C7Š 3ChiÙ Š aN Š 2chi‰ "A7‰ aDagger> Q0x202�double d  0    s 3pub7 $elý Q0x039Lr d*  D  &  D Bgrk3E 1ETHy    · /0dô1ETHC +0DÌE¤F H9HEH0 L  C9�  À  'Ecirc':  óB  0x00ca, # latin capital letter E with circumflex, U+00CA ISOlat1
    'Egrave': Q 8Q 0 L 8L �psilon':L 0395L \greek� e* G B395
‹  ta;   o0x0397? #ta; 7; 3uml< b; 	‘diaeresisH :0CBÊ CGamm� ‹ 3P Ê g* E 0393E Bgrk3• WIacut[dE • I¬0 L 00CDL l§IÈâ á eL  0 	øEQ ÈR Q cQ 0 � CL oº.9L .%ioº9%ºf< %	ºFŒ HKappº!Œ k* Ñ 239A� RLambd> É G= l* > =ø!MuWÈ[F #muB C€ VNtild2/d1N20 D :0D1	N† ~† n† D† ROEligÃ o0x0152†  ¡igature OE~ 3152~ 2D ÌE  _dA×OÊ 0 L !0DHüOÌK ô/d4�  ôL  0 ü#D4� ôOÌR � á 	Q 0 � é L 2meg2 � /3aüo* E 03A9‘ 2WOmicr9¬o* G #9FmVslashÐ Ä!�stroke =:!O P d +0DäOsl äÙ	0 L 5÷ Ù
ü/d6Ùü*D6P 1Phi™  €aP G1phi“ !3AC ŠPB Ï0“ C B 0… B 2rimÃa 0x203ú€double p ñ = seconds = inche… +  J Btech×%Ps�  Žàa8, # greek caðpital letter psi, U+03A8 ISOgrk3
    'Rho':
 ù  0x03a1, # greek caC 3rhoC 1; aScaron> `0x0160; \latin; qS with 0 D 0160‡ Clat2L AigmaK ‡ 3L ‡ s* E 03A3E Ì UTHORNE 00deE ‘ * E 00DEE 3latÖ 2TauC 4E Š 1tauC 23A4Å GThetÅ /98;  * = 9‘aUacuteƒ `0x00daE Å UV0 L :0DAÌ QUcircK  V?0dbL  0 cumflexQ BQ Ggrav� 9Q 0 L 9L Bpsil@z5L iu* G 03A5G õBUumlã ä cG 0	‘diaeresisP 00DCP  #XiN  9E— xS9B’ Y’F Âd’ YÂDŽ YÞ !17SÞ L 
Þ !17^hZ¢ .0396œ Þ Azeta"2396ßaØ e+Œ EsmallaÖ *E1Ö ah! † 00e2† J  . –,E2O 2O b³­ ñ accent = spacing  Ø 00B4G 3diaß Gelig• • Ie =  ¢igature aeY  E6Y Sa[  e)9. d Ç!a  g Dºpalefsymh Q0x213Q  ð symbol = first transfinite”PdinalS  4 C NEW7lphÎbï+
¶  (  ? 103Bè
0ampŽ  _ ù 2S‘ampersand4 !02-3numv &nd3 A2227ñogical and = wedgj   jDtech> Â ½1222jDangl0 3Camso0 3rin2  ¡ e3	ÜxÁ . ] abov'  " Ø E¨$syQ0x224Êðalmost equal to = a' qtotic tp +  å Camsrµ Ftild…e,µ Àsmall letterð a with tilde, U+00E3 ISOlat1
    'auml': ô 0x00e4, # latin small letterJ “diaeresisN 4N RbdquoO `0x201eN ðdouble low-9 quotation markF ‚201E NEW� BbetaA  � 03b2B Zgreek�  (  > @03B2„ Cgrk3B QrvbarD  Ò  a6B Óbroken bar =  €vertical K 00A6K 3numJ &ul1202Œ `bulletF 4lac• Qcirclb '  E 2pubE 1capŒ �   0x2229� �intersec	P= cap�    < Ctech= Bcedi„  Ì  e7= ž cè.  laL @00E7L ê ‹  L  b8L  Óla = spacing  D  B8D 3dia� 2entB  �!0a’cent sign3 A�D3chi2  3 !3cÂ Ð 1chi@ !3C· Ï [B Q0x02cÏ„modifierž % �umflex ac‘ L !2CÐ‹BlubsL `0x2663bÇ€club suiÙrshamroc�!661D 2ongC Ï 45D ðapproximately equal to„ @2245CÓ5opyA 100a‰copyrighI99 I2rarÖ y !1by ó downwards arrow1orn"ft  aÁrriage returªF21B5w*cu¦a×  un¨D= cuŸA“ Ì QurrenÎ  Sa=c (cy'Ë $dAÊ Ë dˆË 0Ò D!1D„3amsˆRdagge g 20®  1 0020© µd;q 9q j 9j ª eí ¾"0bi eÀß Bn 5 lÄQ0x03b 3 .SBdelt¬!3B!õQdiamsX ± !66õª  1ond­í *66æadivide=  •fr  sÎ©Fi¶ Veacut7 e˜k ee.  € 100E©ieŽ€ 5eLJ  . ¼O eO Ggrav™ ¸O . J ¾J 3mpt| ‹0Ce ! sÓCnull  g@eterJ 1220ÅBamso	4ems0 �0Q!emE0Jƒ*en2 ;)en2 :2 Qpsilo^G® G e(  © ð03B5 ISOgrk3
   ð 'equiv':    0x2261, # identical to, U+ � ISOtech
+ B'eta5  7 @03b77 ðgreek small letter etaA @03B7A Dgrk3A hA 00f0A \latinA hA 00F0A Clat1A 3umlB o0x00ebA ò  with diaeresisN ,EBN %roN @20acN �euro sign4 ƒ20AC NEW~ Bxist1  7 030 pthere e g @2203g 7Bfnof6 p 0x01927 ö f® ð hook = function Alori‰  7 V Boral� Lqfor all» !20=ˆ Qrac12Š  = bdˆ ¢vulgar frau €one half~   W @00BD‰ 2num : &14V EV @quar=m  \ C\ 3\ e² cthree G s¸ 
 b Eb sE 
0044b  Ó ‚AslasŠF2044Cgamm
Q0x03b ( w !3B
!ge2 W ¾ 65x øgreater-than or equŽ5º Ïg‹Å1003	C Æ:003ö ChArr€ Q0x21dö ðleft right double arrowÀ @21D4} Bamsaö)haB 9B ; 9; Qearts B0x26û pblack h ° suit = val‘!ne‚ !66ÿ 3pub� TellipF 0026A±horizontal   si¡dot leaderP 0026Ò P Riacut• e¥Üi¬.  I 100E¤Qicirc™  ï!0e˜J  . cumflexO «O 5exc¢200a¬€nverted  1ama®BmarkD  A1Ü £WigravÜ £’ . I E�� $maº 91� ¼@capiðI = imaginary partQ 1211š BamsoÇTinfin-1221- 1ity3 !21ø%inù ;2sintegraú2é3 oº±9-± %ioº9B°Ciqueü  bfB i†  ³ ƒ© = turned   Í @00BFX šsþ  0208W  element of4 @22084 Î Œ ÏÀesis, U+00EFð ISOlat1
    'kappa': ñ0x03ba, # greek small letter ( €, U+03BAC Bgrk3C BlArrB p 0x21d0C ðleftwards double arrowA @21D0A CtechA Bambd… „ bA „  l(  D @03BBD … 6ang… 0329D  … ð
-pointing angle bracket =
  L @2329L � 2quoM Q0x00a� 
L Õ S ðquotation mark = ,  x �guillemetn 100Aº 4numý 	>9>7979 Dceil¦ D2308ò    ñ Ð= apl upstile}  &  ë Camsc~ dë E201cE â 
Ü E 001CE ‰ e†     2264D ñss-than or equal to? 0264? oBflooBQ0x230ƒC  Ç HdownÉ …É Qowast‰ `0x2217… òasterisk operator� +17� !oz9 Á "5c� Rozeng7!5Cn 3pub6'rm1 000em  ² ‘-to-right
n ó00E NEW RFC 2070B $sayQ0x203¯!siOI >¶‡3·” proposedY X  �&01^ J  18ÑH#03Ñ@signÛ :003	2macÇ 	@00af  �on = spac– ð overline = APL  !ba£@00AF’ 2diaÖ Rmdashs /1c0em   ‹ 1201U¢GmicrÃ!b5‹    ¿  B5e ÷ Rmiddoû  ÷bC  Ple do2ñGeorgian comma = G)$  Œ 100B`X 5nus½ 2212Œ 5nusŒ @2212Œ "mu2 ”103b„ !mut !3B‹BnablS !20Í   ú0ack�¢ differencè!20º † Cnbspˆ  a��no-breakÒ ¾2non  ß çN :00A±n®N Å3(enÅ3ÅnY~ tPg µ ie ;1220¿ñcontains as membei1220Ž= = 100ax5not«100AkßRnotinr  z0Ë 2 @an eøPnt of¦1220³n 2sub; ¦8Ø< f subse: 8àBamsnRntild  š f1MZlatin¸ðn with tilde, U+00ðF1 ISOlat1
    'nu':	 ð   0x03bd, # greek small letter nu, U+03BD@ Bgrk3@ aoacuteD `0x00f3@ Zlatin@ qo with . J 00F3J Š QocircI  Š ?0f4J  . cumflexO 4O EeligO .15™ ¡igature oeB $15‘ 2Û GgravÛ 2‘ . J ;0F2Œ 2linI p 0x203eJ @over ° = spacing  Ascor‘ ƒ203E NEW� EmegaÏ 03c9C ¨ o( † 03C9† «`micronE ëfC ( E 'BF„ @plus?  ,@2295A  ˆ@led  Ð = direct sum@  %  … CamsbÈ rA p@2228D ò logical or = veÿ 0228; Dtech; #df=  k aa; ðfeminine ordinal indicator€ @00AAE 5numD mD bD Qmascu‹E BE QslashG  ‰ fÄ ô¯stroke, = M ­ Fò Btild9i qE ]. J 5÷ 	J "me¼`0x2297<»QtimeszÀctor productI  *  I À1umlú  @00f6I “ �diaeresisN @00F6N — 3parÕôbN ð pilcrow sign = $ Qgraph H BH ÖEpart• 1220ª  ðial differential>     † YRpermiÖ Ÿ0Ô •per millew M20309 px a ðup tack = orthogo– toÊ @erpeŸ1ulaŸ122A¨‹ #hiQ  !3cç 0phiÌ 103C
åp@ A Ì A @ Ó @ v� d� �pi symboF<03Dz Alusm^ z 10b1F‘lus-minusG   'or É !0B™ÓBoundŠ  ûa¿p I 4 A²4 2rim.g  0 = … tç2feeÝ!03¨~#rot  A !20"Tn-ary Á ‡ @220F$8pro1T  Corti Á 1221N� s¿ £cZ¾s¿2¿6quo
1002Àquotation maðrk = APL quote, U+0022 ISOnum
    'rArr': ð 0x21d2, # rightwards double arrowA 121DA CtechB BadicC `0x221aB ð square root = r# qal signE 021A† E "ngD  ‡ !32E ‡ ð-pointing angle brackeV 1ketM -32M 2quoN `0x00bb’ M Ø T  �ation ma4-  z rguillemp @00BB½ CaC9C<9<: Dceil© E2309©   2ingá  09q Camscsdá F201d8 Ø 
Ò F 001DF } #ea|  s011cE ðblackletter capital RÂñ eal part symbolR 011CR Camso˜ eÅ y aeS ¡registered M  Rtradev@00AEW © Bfloo¥V0x230Ï  Œ !30•$h Œ 03c1Œ Ãgreek small æ 0rhoA @03C1v Cgrk3Í "lm› A @200fA �-to-left¸  = ó200F NEW RFC 2070B $sa¨Q0x203Õ!sisI bÜ¶3Ý” proposedZ Y  ¼'019` K 1GX*sbE Ÿ Qlow-97ê  1Aê ‡ ascaron&Q0x016dZlatindqs with .  F  +  mClat2J 1dotH m02c5mÀdot operator7 @22C57 Camsb7 &ec7 @00a77 1secÌQ77 ù #hyl  !0a?ðsoft hyphen = discreG 3ary  ƒ :00AFRsigmaN `0x03c3‚ g ( B 03C3Ž i fD C @C  2finD#maI NI ²!23ÒUtildeGƒ = varie’±= similar t1223Ó™cspades� @2660à &  B sui‡0660Ø $puœ!ub7  Ó8× �subset ofÂ 1228Â n 3ube5  L 86n 4 • or equal®  86s @ 	1‘ n-ÄAsummÌz 1îJ#upy  R!28ÈYsuper° »p #p17  ñbˆ6 Ècript one =  Adigi  ˆ ;00B”8up2Q 5 ‡ Q ?twoQ  àquared, U+00B2ð ISOnum
    'sup3': ù 0x00b3, # superscript three = Fdigi Ücubed, U+00B3] e] F2287] ðet of or equal toA  #  A CtechŸ BzligC  Ÿ  dfB ôlatin small letter sharp s = ess-z�  DFO Blat1O 2tauM  î 03c4O ZgreekO 0tau� @03C4A Cgrk3A Qhere4D Q0x223A t @fore4    4 Ä Qtheta3 u /b8u  (  C @03B8C 	w qtasym':C /d1C 	r symbolJ dD1 NEW½ AinspŠ `0x2009F  thL2pac¾ 0009{ 4pub4 1orn3  z 00fe4 � ¡thorn withx 00FEG z3ild`0x02dcH Ãt 6 02DC6 3dia} Fimes} d@ñmultiplication sign= 00D7= Ú6trar @2122r  U mark9   	9 BuArru R 0x21mðupwards double arroww @21D1> 3amsµ Ruacutë  ³ fax 2 u. .  J @00FAJ 4)ua‰ 9ö‰ ‚ 9‚ ù RucircÁ � b�  . cumflex† B† GgravÐ 6Ð . J KÐ "ml— ~!0a	€diaeresi¼…spacing  H ARupsihI Q0x03dÙÅ  "loˆZ hook2*  G  E  c5%E –Y( ‰ 03C5—%uuÒ jÕ× FíUweierŸ!11†ð capital P = powò`et = W4 €strass p¥ 1211.BamsoE xiå â!3bÂê   xi@ 103Bºå y¢D å d*å  yÐD/á #yeJ t"yeÄb = yua ‰ !0An×ymˆ m
z” Ø03b6Ö   ( � 03B6Î 1zwj Î 1200ðzero width joiner< @200Dz’ RFC 2070™4zwnB �>A Inon-E CE ð}


# maps the HTML5 named characðreferences to the eñ0quivalent Unicode character(s)
html5 = {
    'Aacute': '\xc1',
 a e , ;-  . Rbreve Uu0102]  3 c. F223e d f E ee\u033G SAcirc¥ u  e * H %xc a+  , &b4‡ #utã x 2Acy? Vu0410,  3 SAElig­ 6+ e e * X %xc a+  , "af Fu206¿"fr †U0001d50Ç  1~TAgravµ a e , c %xc -  . ralefsym Uu2135þ Oleph  SAlpha 5039Ø a b CAmacò  €‘ 
 0 Samalg` 52a3l0AMP¡&  )mp 1AMP6 ! 
 %AnÄ%a5¨a 5227^ 'nd &a5'ndF c0 Cslop†Wu2a58 v‰ \ a æ &22%ngD &9a5ngl 
/ %ms� &22Fdngmsda©729a�  b” 79a9”  6 (9a¯   l ;9ab6   '9al ;9ad6 %9aïa½ ~%9aTangrtº *21 vÔ (2bM Frtvb¹ 9ƒ sä&22|3ngsf 'xcûDgzarÌ5237ç SAogon– '01Ò
 J 3Aop3ž 5– pc 62240 p) &a6pœ&a7`£&24Ý%pi &24Ù0posZ 3"'"’µApplyFunctiñ Ý`approx4 :'\u§   &eq } DArin|"a e * B — +  , svc%49®a bÈTAssigÊ6225�*¿<sym�À   'asympeq;ñ	': '\u224d',
    'Atilde 4xc3 a e , ;-  . 3uml+ 4X  e CAuml= c a * ‚awconint. Eu223› 'aw 4a11q …backcong3 (4c sepsilon H03f6 Sprime H2035 4sim %23N o Usimeq c •Backslash 1n DBarv 6ae7i 5rve‚ '2bL Drwed2 %30I *ba ´   gM &30 5brkK b t f S3BcyI '04„ 3šCdquo. E201eô Tecaus 2vB Á  b Empty[69b0g 3psif 	øSernou 5212/B 5lliœ 	 #ta4 F0392e  b &13VTetwee�6226| "fr^ wU0001d5¼ %1f| Rigcap7 Fu22c~ digcirc )5e3 u3 ^ebigodox&a0GVigopl°&a0áuigotime0(a0„ 6sqcl aÂSigstað 7u26ì Õigtriangledow(5b" \ (5bÈ u® q8bigkcÇ 6wed9&2cý TkarowI%90Ÿ¦blacklozen8 59eb›  UsquarÎ95aa é ] &5bª  >   
	E$ 5lef»5$ Frigh% 'b8� n&42JElk12� òFlk14 F7lk3 H %oc` &58x nf=\u20e”UnequiÐ;261  N¦e�n %31ÀBBopf¬ X%39ø  5³ L &2aš Fotto 2wtiÍ  zcã Roxbox€ Gu29c| 4xDL &553oxD*Fu25587oxd0 “ ðxdl;': '\u2510',
õ	    'boxDR;': '\u2554',
 r 3 d0 2 0 '0c HG 0 h 0 %HD '66/ &Hd ¦ h0 50 h0 2Ž UH 90 &Hu 7 h0 8 0 3� TminusK 729f3 (pl e Ftime5 a$ULM 755d3 &Ul à u0 b0 u0 1È UÎa0 UÎ5(u0 H u0 1V§ 1_ v 0DV-6Ö V.6Ö v0 ¾ v0 3H 6ÔV6� v0 	¿ 0 2î 6ÆV5v0 5v0 1À Tprime9%03ïDBrev 602d— Avbarõ&xaer _  5Bsc� 1K †U0001d4b6BsemiH Fu204ð 4sim &23ÍsÖ '2c of\9DsolbC %9cubsolhsu &7c#ulF Fu202ÜTulletK 	 $mp &24”DumpE )aa {&22ì dBumpeq1 I  TCacutK 5010˜c h&Caª dÚ c 2ºUcapan%a4µucapbrcuJ (a44 M %a4y9cap2 ’ UcapdoV%a4õCapitalDifferential¸%14È6capf29\ufe7car²4�Scaronj502c� eCayleyP %12Zch %a4 CK 1Æc 2 BedilJz &cc e�  © x-  . 2irc Eu010Ð)cc ­eCconin|%23|5ccuVÀ2a4c',
    'óccupssm;': '\u2a50',
    'Cdot D010a c b AedilE 9xb8 D  C+ -la rcemptyv Vu29b2H "nt\ a + x tCenterD¹ 8xb7C %er¼  2CfrH Uu212d0  †U0001d523Hcy1 6042a h 4 3eck/ E2713` heckmar 3Chi2 703aJ  c i¾ &5cŽ4ircC 52c6u Sirceq 8225F ´clearrowlef÷621b÷$ir" Grigh# 	u Uledas ,29 c™ ;229^ Uddashž 9ŒC| ÖXu2299Ó BledR7 ;xae S Eu24c—P TMinus %29% (Pl 5V  GTime; GER &9cì4ire 
uEfnin.%a1ddcirmid4 4aef€ Vcirscó%9cô	ClockwiseContourIntegralE 4232E õCloseCurlyDoubleQuot¡ &01x( " ~5lub	&66ò   %uiÛ  VColon• < :¨   ™ 4a74 c +25 â "mms,F 2mma£ @ p� (01 f¶ 1K†complemeÆ26 6lex+%10„Econgi 4`  ¥Fu2a6�Xongrui 6Ÿ (CoH&22/ %2" $pf¡ 	¸  }5proµ2Î Co "ucl8\u2 3OPYÛV<opy BCOPY� )xa)  s%11b0Cou)Ç6rarJ b¦ECros÷ao 7z #scG 5%49gc >2subÞ Fu2acÔ6subd5csu»&adK7sup/ ð2',
    'ctdot;'ò: '\u22ef',
    'cudarrl;' :938 r 5 %ep 72de $sc0 '2dd 5lar1 61b61   p3 493d %Cu 42d3 c '2a Ebrca1 %a4Ä FCupC %24` 9cup2 “ pf (a4f 4dot« (28K oÝ 'a4&%ps/ †2a\ufe00´ r7 m9 793c wlyeqpred|r 7suc ‚drlyveeW *2c9 Gwedg 8 1ren7xa4Š 2renL 
 ¥vearrowlef*	ïr! Grigh" þ ¥ 2wedq Fu22c  ewconinK 5232¥ w 1 TylctyL %32ÈUDaggeÉ%022 d ÅddalethK 1;DÜaI AÖ �E 9í5das\ %01u TDashv/ %ae• /  &2aG dbkarow2 %90=Ddbla-602d	CcaroßEu010+d J $DcQ6041’  3 $DD‹ 1,dÝ%14‹dyI	3c¤uDDotrahM '913 Totseq| %a7t2degábd2deg) x %De%%20= RDelta, Eu039æ d b Empty¨&9b¡ 6fis&97]f•vU0001d5} d ³#Ha5 Eu296“6dhaë&1c$h±cDó DiacriticalAcut"xÏ ! DD02d9n	! GubleH uuk BGravk `G  BTild \A 5dia6%2cqeDiamon  1  
5suiY&66—5iamÙ	 — %xa€ÇDifferentialøL FgammA…Ddisi„522f“#di=%xf…bdivideÅ ð ;': '\xf7',
   ñ 'divideontimes;': '\u22c7',
     ?onx  CDJcy E04020 j 5 Slcorn0 E231e0 Ulcrop %0d Qollar $ ADopf ¤\U0001d53b d $55 2Dot5 4xa8 d Tu02d9 5Dot- Tu20dc RdoteqE Yu2250 L D2251 �DotEqual6 Fminuo3˜ 'pl $14P •dotsquareQ al Õdoublebarwedg! 4306= D! ×ContourIntegrš *2f( 1B ”DownArrow… :1d3< KLeft" .D  " LRigh' ê ' %TeÍ ,ae  0ongK 	m %7fJF & q ;7faº ?ong'  f# :1d2J # ¼ 2x– )Up¶ %1dÊ  i Ð ˆ “VerticalB% ·2$ ©9©?wnaÅ,do 
8 ¸ s )91W  Þ f– DBrevÖ5031ú  z   š %1c¦  £harpoonlefÓEu21c‚ " ra¥c¡ wn6£RVectocF\u29× ~ & <Tee$ ¹$ 
! %1bÁ
! 45˜!wn‹ j  •% k c< k G " 	l Ê % 	•QQwnTee½4a9 Wdrbkaô%91Ò*dr×´ *dr×J3DscrÃ&494  b{SV0P'ds 5 ow&9fmSstroká '01Æ  X(dtÜf #riH 625bÁ 3tri Eu25b+Cduarõ 6u216duh½&96H Twangl%629aÃ Zñ 01 z 5 7igr{ ð7ff',
    'Eacute'ñ: '\xc9',
    'eacute' e E ; -  . beaster Tu2a6e] cEcaron D011a e b iI 4256 SEcircŽ E  e * r %xc e@  , EecolŸ F2255o y- Tu042d &ec 4 CDDot. D2a77. %Ed 5011Ê e. 4251. e. E $eeZ &14 fD 2D #Ef;”U0001d508 e 24 $ega %a9.SEgravcE  e , E x-  . 2egs Fu2a9&gsÿ 52a9] &el. œUlemens2ç elinterc &3e4lK 5113l, %a9þ*el� E CEmaccFu011E
 _ 4mpt36220a   'seÃ  E ¥SmallSquarÿ&5f# # vW < OVery@ a@ Dsp13@ 5004Vmsp14 • Femsp ß 3ENG 5014=$enS6014u nC :5Eog�6011ù
 ü2opft ä%3c¾  >4epa·622d× Epars%9eÙ Feplu7¥2psi~ Eu03bH FEpsiH'03J 4 DepsiÄ503fL &eqª'u2/eq­Seqsim— 5224\•eqslantgtü s 6lesé ¸ EEqua'a7ž #ua3=x, ETild¬	„ 6uesè'5f6 uilibriu» &1cÌ%qu6226�  $DDí &a71+qvÎµ 5rar9ÎrGþ%EsåD2130² e 2É e,%25/ E•%a7] e (3EtaÕ 5039pe b 2ETH
dm 2eth f 2ETHR ðxd0',
    'eth;'ñ: '\xf0',
    'Euml' $cb e e  ( ;)  * Beuro Uu20acU 1xcl ! 1ist d\u2203 oExists  ´expectation &13Ê µxponentialE $47V e e  Ôfallingdotseq  4252? 3Fcy D0424 f 4 Eemale %64£ cffiligH &fbó )ff 1 l c 2FfrG •U0001d509“  2X} 12 õFilledSmallSquarº %5f¾$ OVery( $aaL $fj° %fj %laç666d + U\ufb0jEfltnþ%5b§ Bfnofô Eu019/ 3Fop 3b  5RForAl�}r?ora k 522d‰Tforkv %ad‡“Fouriertr� Fu213Ë epartin&a0´ Rrac12ib g x 3 Fu215ë F 4F Åf / *xb 5  F 5¢ 0 6 Ý I 8 &  2‘ 'Grac2d 6d 3ª e a *xb F Ï x 3‘ 	Ü 42 8b 5Ü ÂGrac5K 	„7 – sK05row©&32²#sc½
 É%4bWTgacut—501f¢RGamma'Eu039 g b 0 d1 d(1  ö 3gap/ 52a8¶VGbrev‘ 1g fpTGcedi&&01SGcircc 6011’ 
 ‘ Gs1Ù g 3 4Gdod5012ä ær 2–g7%26Zgæ 5226w$gEÊ 62a8² e &2d¼OB &eqfn Gqsla7Zea c>52aa¢6gesü Ð2a80',
    'gòesdoto;': '\u2a82',
    'g l 4  ˜2db\ufe00 %es6 96 2Gfr •U0001d50a3  24 g3 Uu22d9/  &6b  + 5ime« 4137. CGJcyZ D0403 'gj 5 C %27C 3glaB E2aa5B %lE 9L%lj aÝ Egnap 8napprox ^ &26&ne, 8Š ?neq  	E 4sim0 %2eç BGopf ·%3eb  5} 2rav• `. ¶GreaterEquaO69 5LesA%2dã# KFullF ® e * ¸ Eu2aaŠ 	b Ô YSlantc %a7ö $ BTildâ U\u227,9Gscç4| g 7u21þyI Egsima %a8€   A%a9x GTÄ>o)gt !GT !Gt  ¼ D % Dgtcc' %aaeCgtciä Fu2a7¹2tdoB  W d0 5lPa1 %99ôegtques3 6a7c¾ r6 rO 7u/tr� OreqlUYgtreq (a8‡ 	7 *?gtr·xvertneqd!(vnÆ
 SHacekt502cDUhairs.0>3hal 4xbd#UhamilX%10CGHARDã2¼Ghard 4 Al%1d¼'ha ä  %94�  wÙ 521a« "Ha¨ ^¼ b,410f DHcir�&01"h \UheartF6i "uiw 9\u2 6llif2tdhercon¿ %2b|H» Ó8h 42— µHilbertSpacÝ uhksearo)9: Jhksw ž oŽf4Uhomthè $23À'hookleftarrøow;': '\u21a9',
    'hookrightarr! a! EHopf8 $0d h ‡U0001d55S Drbar4 40154 äHorizontalLine! 5500! %sc8 410b h l &4b‡ TslashK 410f4 cHstrok D0126 h 7 €HumpDown 8 H224e VEqual m Uhybul 40435 dhyphen2 %01ê aIacute�%xcÎ i e , E -  . "ic Eu206ˆ SIcircn Ò i e * B %xc +  , y Tu0418ô &ic 3 DIdot- &13E. *'ie 3ARiexclÇ %a1p   [ x f¶$d4, &If`1B  _5-TIgrav§cF i e , ‰ c -  . "ii Eu214%Tiiiin'62a0E  %22Uiinfi`'9d1 5otab 2œSIJlig E0132Ó j 9m- &2105Ima¨5012+i ÀEimagï
H uginaryIe Gmagl'1= P 5par)S Dimat6013ã%mo%2bôSimped} 501bisImplies 621d)n&20¸Fncarâ 0H 	Ÿ&21P ·%ti3 &9dÓ)no+Ã I&22é r7ntcªb£fntegerÚ 2  r6 2O /erQ ¶Intersectioc/Ttlarh‰62a1|Tntpro~52a3Ô ÕInvisibleCommÆÏ! 6Tim¦%06w 'IO@0C'io 5 5Iog½ 6012¦
 ïIü4Ði 5{I’5039’i b biquestb’  ¯x àIscr;': '\u211ö0',
    'iscr;': '\U0001d4be "in Xu2208 5dot (f5 E 9 s 4 v 3  { v 4062- cItildeF 6012©  � TIukcy1 4406J i 5 AIuml#6xcf,  e  ( W )  * RJcirc Eu013j ZJ° 1È j 3 )JfÑ450d´ j %27 Dmath� %23 BJopf 55413  $5b JTaÉ j b>GJserÑ öj 5áJ°0F	 5 RKappaÏ Tu039a° k b ˆ503f5dKcedilJ %13*k IKÚ 1a  3 K§0’k ìTkgree®5013$'KHd 2ˆ'kh 4 Ki%0c!j5 K4•k 6 a? csClAarØEu21d-VLacutþl 2 tlaemptyØ529b!TlagraF5211Ï WLambd;ël b CLang!727e}  ¦Tlangd/ %99e  lÞ 727e1 p/ %a8¿“LaplacetrµuÄ RlaquoÇa§  J x Ll9(lAƒ›	. 	 b[ Gu21eeErrbf%91Hlarr ¹  %hkL aì  l
1Â   p¢(29TrrsimL %97u 3 t3 %1aý%lawab 5Ata7291S
 ­ ©72aaÝ %te†aad\ufe0FB^9)lb ”Elbbr*&77Å àbrace;': '{',
ô    'lbrack;': '[',
 !ke h\u298b 6sld f u d cLcaron 5013 l e2 Fedil2  c c2 5lce1 F2308 !ubH { 1Lcy W\u041Y  3 3dca- D2936C Tldquo &01…   r Ð eldrdha 6967K 8rus 4} $shL 51b22 E &26’ ¬4264*  LeftAngleBà$et8 %7e# Drrow 8190? a d Jleft 
8 A8 Bò *1e–   QRight) } cÑ a &taØ%1a ¹ tCeiling> ö  ODoubû  b $ §wnTeeVectož1JDown! ?1c3! ñ 8959$ 6Floa 430a  H¤harpoondow$621b$3eft" $upë &1bt0eftF Žs! cb è k 9‘rŒC B d!  _ !  B 
! … m" Ë $ ð1eftg Zsquig� aÏ 
”%94m " &Tea®:Teetaè 9 Y 5­•threetimeÂ %2cÂ A 0riatH2º +cD" DEqua922b¦ .Up–)95·/UpÙ À i *Upê )1bˆ  ª 59? ” ^  	= ½%lEµa[e '2duqKÛ7leq gUqslanê%a78l²
 $cc` %aaß WlesdoG  ý%a8u G%a8x8lesÛ U\ufe0‹  œ 96 usapprox¡ &859s¢ '2desseqgt‰ 	Mð sseqqgtr;': '\uø2a8b',
    'LessEqualGreater;': '\u22da# AFull'   (66  > 7 flessgtX   {   S 4aa1S  5 4sim 4272  1 YSlantŽ 8a7d! _Tilde=  dlfisht 497c5 Ulfloo¤ &30ü f –U0001d50f3 
 %29 gb 2í 4lgE &a9è #HaF Eu296å Tlhard/ %1bÜ   u ¿ Tharul %96¿ Tlhblk 4584£ CLJcy 6040º j 5 L[ 42d8C l p 5larÑ 61c7- Fcorn^431e £Lleftarrow‘ &21{lò 
%96·Tlltri1 %5fñ TLmidoâ6013¯
 $40€ Tlmous2 ;23b 5achJ 4nap %a8*�lnapprox &26Fn^ &a8/6neqC 	  	E ,e{5oanŒ&7e/o¦f_5obr.7H ˜LongLeftA¦47f5C   Æ&7få ?ong   	@  ` LRighe ý e r% 	07ÿlj % J  % dmapstod%7f g ˆ U ! _ ?ong! B AloopÁ  ƒ &1aÜ  F ! ¤ l@  '98H"pf ®$43£+lo 5öBplus8 Gu2a2 Ftime 3?Flowa4'21[#wbÒ_{ PLowerß	?%191! t'19Az  %5cìelozeng@
 	Fu29eYpœ (œ Ulparlý&990r#c¼rÉb#rh_ V\u21cv   Ä`rá%00'lrÚ&2b_ Esaqu²&03?&scs1D Àd4c1',
    'ÿLsh;': '\u21b0',
    'l $im- 6272- 4ime 8a8d g f !qb [ !uo i\u2018 r a cLstrok D0141 l ¥  LTæ <( t !LTL  !Lt U\u226u l % Dltcc' 6aa6[ %ci´ 6a79 "doB  W d0 5hre@62cb1 Dimesb '2cJ 5larc '97K Equese 'a7L $riJ 65c3c &ri{ (b4 f0 FVltrPaz 9z Wurdsh 478uru 65 „vertneqqj †268\ufe0ˆ?vnE @macrÆ5\xa\  1 	 lå %64Í #maÒU\u272t   %es1  2Map\ Tu2905,m 1UmapstÔ DdownL 71a7L estolefÄ%1a•S u„ '1a„ 5rke˜55aeQ Tcommaj %a2D3Mcy F041c/  3 &da&01‘ 'DDÒ3ò¶measuredangy%22¥¥MediumSpacf%05Ã…Mellintr€%13°#Mfå †U0001d51¶ 2Ž h‡2jBicro>bG  x d Eu222‹ Cmidak*?(idüfž Aiddos7\xb„   \ 	 &nu÷1°Binus: B92m ¤ 3@ ub 6u2aM3 (Plh Ú %lcd%adC3mld}Eu202Å?mnpG FodelÈ å3MopÜÆ4R 5Ê” %21« 5Msc” 'm b &4cEFstpo– 3` M'6039ú b 7ltiö&2bqu Enabl†%20TNacut5014Ù n "5nanT02200dÝ n‹%24ë5napEða70\u0338',
    'ónapid;': '\u224b\u0338',
    'napos G0149 Cprox (22 4tur 666e2 _tural g E21155 1bsp› 8xa0 F 	 2ump  Æ eÆ Vbumpe f %ca< 4a43i cNcaron6 D0147 n .TNcediã 6014È  6K 3ongc (22c dongdot <a6d´ u´ 2P 3Ncy3 D041d n 3 Cdash. 5201ø n*6vTearhk. 5924\ 5eArð&1d%'ea 9 $owJ 1 ñ :250ñ õNegativeMediumSpac§ 400bŽ & _Thick% n$ VeryThi( dnequivÎ %26ŠUnesea%92%Unesim1 ,42ç ³stedGreater - 6è  ' @Less ! a	4wLiÊn UnexisU'20Æ  ƒ #NfÅ •U0001d511M  2ž 6ngE“ 7á %ng¸&27L 5geq3 
  6K UqslanÑ ,a7ù%geÔ  Gz,d9¦ ¥7ÉGm †26b\u20dòg f&#gtAFu226 'Gt6vhTcDhTa pk&af’ iT#%ni52fc§ &isfGnÜC 'NJQ0- j 5 lÎ €lÎ 90 d2&02{lU6¯lU´wLeftarrnc~  ƒ  : Lrigh? sOleft"  •lÓ• 7leqÓÉ ÓùlÓ  Þ}L–ð22d8\u0338',
    õ'nlsim;': '\u2274',
    'nLt …6a\u20d2 l e %ri4 )ea e c 5Ltv  d E0338 5mid 2— tNoBreak 40601 1Non singSpacq 'xa! $pf8 41158 $no –U0001d55f t%xa´ %Noû %ae n 
* …Congruen3 %26D”NotCupCap“ 426dx õNotDoubleVerticalBar' '26' HElem` (09 Equal8 * tE CTild'xu2242\u�•NotExistsB 0†vtGreate— 66$No f ? '71œ ? JFull& -67‡ ,  P /6b* 6Les¶ 7D BSlanN ?a7eN 
'79°NotHumpDown J .24J    
ç *4fo UnotinC Ç d__u22f59  E: /f9  %va  Z %vb $f7Ÿt &vc r¶LeftTriangl<í8Not" ¹+9có + 
 \' Ð6q 
9 7ðt	óÎ 7c@  %  ‡$ 1dj* .3cNested�  y .aa0  Ÿ   * 1y Fnotnx0•(niû ûSL û”vPrecede[8l 	�.aaõ) T(2eQ }ReverseãÇ NotRigh� bË# �*d0H, 	É (2e
¶SquareSubseÜ8ë ( O 	' pð Q 9¡ 
* S 3ö œ 2ÂÀ  'NotSubsetöEqual;': '\u2288',
    'NotSucceeds 1  	A �ab0\u033G YSlant. /2eQ UTildet /7fQ  eperset$ ‰83\u20d2ž $ 
p '89# 
h 4‹  
; ,44; KFull$ 7$ I ¨ 4 µVerticalBar! 2e (np 6X   Falle²2 s 0afd(e5; 3*02Wenpolin  'a1Š   &80N 6rcu¦e  +aa½Unprecî 	N Deceq 8 5rAr† 51cf† 'ra )9b i ;933í  7 wn ;19d –Rightarro$ t  z 4triZ '2e’ 5tri52ed« s¨ %28„9nsc_ F m#sc&…U0001d4aqn &c3‚ uhortmid· ‡s ?paru5sim8 DEnsim¨ 2< è	 � 	Vsqsubc eýn p é %ub¬ 8áDsubE ;ac5	g  Insub„2o„  Õ\ 
w c •8 pDnsupÌ &28ý7supä 6ä 1% M 	ä h  ä qvupseteq¬ cw %tg¯%27:  Nt’&xdù f , ñ -  . Bntlg Eu227¤Åntrianglelef52ea!  í -ec" rc ÿC ! D 	#Nu8 5039 n b s# Sumero? 62115ums$00ŸÀ'nvap;': '\uö224d\u20d2',
    'nVDash;': '\u22af d e v2 d 
2 c %geb +65� 1vgt > AHarr f\u2904N Uinfin dš (lA3 å 'vl� 4i l� < &ri8 b8 rn 3¡ )rt9 ò 4sim¿ ;23cw Twarhk &92W wo 51d6o w(*19 $owJ 	 6nea[$27K aOacute%xdy o f , ^ -  . 2oase e$9bq 5ociˆ 429a SOcirc‡ ø ,  f * n d +  , y Eu0415&oc 3 	Ë9ädOdblacG 4150³ o 1 #iv0 F2a38 o9 Dsold0 %9bDSOElig 5015Û)oe Ÿ'of[%9b×#Ofq†U0001d51J  2| 4ogoo502d½TOgrav.G  f , À x~o-  . o ùcJ'hb¶%b54hN603aJ&ina2Ùl.bs)ol00 Rcross£ Eu29bÿ Eolin0;O½  COmaczFu014\
 iCmegav 	× 	 cï VOmicr§%39òo 7omik9Uominuò 2RBOopf“ =44  6ú (op¶löpenCurlyDoubleQuotN1 O' ! IBperp–  Ÿ8oplÅ .O†62a51 &22Z r+ùr6%a5±EordeF '13[ Cdero8*u2 fåa‡#rd+ x m) °#rdöx &igk !2bŸÀ   'oror;': ò'\u2a56',
    'orslope;':  7 v b S 44c8 BOscr ”U0001d4aa o Tu2134 aOslashu %xdH o f , ` -  . Bosol Fu229E Stildeq 5‡ o f O E %xd -  	. 2mes Fu2a3A'ti +29 a4 �COuml¥  o f  ( s %xd  )  * Covba�Tu233dû VOverB 903e 5rac-3d 2ketj Fu23bÖÕverParenthesià 43dc\ pr %22ZBparaö bÍ   c x 6lleá	D 2sim2 Wu2af3s s1 %af5parÄ 4202/ „PartialDJ  #cy D041f1 p 3 Bercn` %* QeriodC . %miŸ 7030 p+ V\u22a+dertenk 40311 #Pfç„&51 23PhiJ 603a{ c &03Rphmmaé \ãv 5honC%60CPs î  c etchforî %2dk'pi� ¤ Elanc/ &10� hí &21� TplankL 23 uÂ+bsplusacigFu2a2í Dlusb^ %29í  3 	2 h  %do3 1Ú Tlusdu aâ5lusQ%a7J sPlusMin® 5\xb d #mnZ a - B2VEustw¬ %a2ÊpqG €PoincareX® &10Sointi Œ1ÜBPopf— Uu2119w Ú6Ë Boundà aŒ  H x P·bÎp %27³5praz&abì 5rcuÑ &27Ñ "rEm Fu2ab… r, &aa‡4rec- 	r „ecapprox 	x ”eccurlyeq ~ fPreced€V  àEqual;': '\u2aüaf',
    'PrecedesSlantEqual;': '\u227c% VTilde  e  pE q a^   unapprox (b97 6neq9 )b5 4sim6 82e8  7‡ EPrimŸ 60332 	 2 sc '11™ 4nap a± &nE ­ n‘ « $od0 '20t_oduct  „profalar %32Ý   5linà '31È eofsurf6 1û oÉ 421dú ¤Proportion4 >237 < epropto8  —VprureW%b0i #scê ”U0001d4ab p cn3Psi} 603a c Euncs%00 )Qfz 4514z q ‚5qin´%a05Qopz511aH  Ý %56°)qp©5zQö af q %c6j –uaternionÌ0ëHquat¹ 18 "esÑ ?K Eeste‘%25´@QUOT"+ )ot  " ™	# 
 CrAaryEu21dï5racÙ”23d\u0331j TRacut 5015«r #Qradicz  È”„raemptyv %9b)DRang '7e™  !ErangÚ%99Ú  ª 729a‘ 5ngl '7eI 0quoG7\xbu #qua R;aE(rARŠ  ¡ &rrÛ'97¢ 4rrb*1e fY&92y 5arre9nGrarr1 1Â  %hkd a+  l¦1õ  p:)94– m%97 &t3 î L  %1aú  w– 99WrAtaiJ ‹*ra È #ti¸Eu223i raj%alF''RB×&91^	 <(rb0 çErbbr\&77Þ b\À'}',
    'rbñrack;': ']',
    'rbrke h\u298c 6sld e u $90 cRcaron D0158 r 9 fRcedil2 6 r 7 1 5230J ArcubH }* 1Rcy U\u042¤ r 4 3dca- 6293m edldhar 6o Ddquo 401du r 1 	 $sh0 41b30 R|&11|$ea2 'in1 bF …realparta 
L s © %ec/ %5a 0REG6\xað,eg 2REGS 
'  ÕReverseElemeno %20¹ ! ¢quilibriumD Lu21c% >UpE' 596fEfishe %97Ô Urfloo”3~ f g †U0001d52b H4y 5har)81c1 '&1cmEharuá%96ø$RhS703aG  ] #ov,503f- °RightAngleBìe%7e¼$ CrrowA D2192µ  a d r^ 
 : A: B'91e5Z   ALeft	 € cMc &taé&1a2 ! tCeiling@ À ODoub Ø% –wnTeeVect%957% 
" %1c" ÷ *95÷ F‚Q¤harpoondow<2F ð # $upò O ! Aleft™ìT " G $ |Š  G 8 Qsquig# ‹ 93%Te£*2a,:TeeøañL� ~ •threetimeÃ %2cÃ C 0riaÿž 2l )T  ­d›	C 6Equˆ*2bÒjUpDown%94+I /UpÑ  
¯ *UpC %1bxC   ¯ 5-# ! ð  ÀctorBar;': 'ö\u2953',
    'ring;': '\u02da £singdotseq '226 Dlarr 51c47 7lha c m. 500f Tmoust :3b1 Oache Dnmid 5aee5 %oaË G27ed ¬ f0 4brkH 67e70 pÄ 4986 DRopf/ '11_  †U0001d56\Toplus4 'a2{ Ftime &35e †undImpli 4970 r› ) gD&99‹eppolin 5a124 r¾9 ´Rrightarrowµ 41db drsaquo %03,6Rscô10  %4cc4RshH 1ö !qb- ]‰ ˆ 1¿ UrsquoŠ 0 EthreK&2c—	‡%2cÓ Artriu V\u25bb 6triH b¶ / 55b8ª GtrilK %9c¥RuleDelayeÌ&9f½7uluJ&96S x˜ %11M TSacut™ 5015È s �)sbD1 $Sc_ %ab's &27B 6cap,   cScaron 5016»s íDsccu¼ 5227Y3scEG 52ab%sc, %ab] cScedil/ 5015s |DScir× 7015ì 	 Ž nð 17scn§ -Uscnsiô%2eC,sc—/(sc3 7« yÚ '427 4 %doò%2c¡BsdotFY\u22a/ P6¿ Eearh&92I 'eAMd÷(seS9 O !ctx%xa3sec¾ 	 mŒ;WGsesw£2]Vetmins'21Ò $tm—2 xs Eu273/ #SfI¼5I  3…Usfrowd %32pEshar,&66ÙFHCHcÆÈ 7hch 4á S0 f	.  ðShortDownArrow;': '\u2ô193',
    'ShortLeftArrow;': '\u2190! s! 4mid %22<  †parallel  5; \ LRigh] 2" +Up| 1 1shy‘ 7xad j  RSigma Fu03a  	 c f1 c� s1 v m E223cŒ Timdot 7a6a e '24x ?meq g 7a9eF %gE a’%imn&a96iml/ '9fG nŽ 6 Eplusa '24 Drarr &97!l %¦SmallCirclj %18P   fsetminp &21Š Tmashpo &a31emeparsî &9e¤ “&miƒ 3«m¨a¨%mt° &aaØ6mteuac\ufe0cSOFTcy® 60427 7oft 4 Â /3olbA 629cÔ Eolbaw%33Ã3Sop¯†U0001d54Ã  6O 6padÈ %66Â s %ui
 ‚ %22ËEsqca¢2? ,:293,Gsqcu7 ›   7 47 5Sqrœ &21ì 5qsu8%28s É&29@  &seL 4 7set‘
8 · 9Gqsupi   i @ i 8 u%5a· USquarg  s 2 ÄIntersectionW ¬% 8Sub©  BEqua´7\u2Q$ ph Wî 
! G ÷ & )Un¨ 3uarð7u25¯/qu ­&19f #scË6&4a[ c­ ©?¦s\'st° %2cØ&StÎ  / Ÿ%60.   ß &60{0traDUepsilÙ=03f" 3phiX 803d ðns;': '\xaf',
  ÷  'Sub;': '\u22d0',
    's '82 4dot/ 7abd E 'c5 e 8286 H 'c3 6mulb 'c1 nc b d a Dplus~ 7abf Drarr 4979 USubse} 
 	TseteqM 
å   ai _Equal: nV × gsetneqW 4simR 4ac7Ù 7subÑ(ad¡5sup2 d‰$cc '27b „ccapprox 6ab8f wcccurlyº 7#uSucceed’V  	%ab�  YSlant% 2` FTild7÷&cc™ ^ \succnÕ q)ccobÇ7ccnq%2eJ T  ‡ vSuchThaf0]%Su¼'21ù $ngƒ'66® !p1Í'xbŒ "p1+ 
 2) Þ$p2)  3) $p3)  SH'2d¾ ^%28, 8sup &beC)pdª]pÿ„pí8ñ(peb $c4b YSuperÍ–  
b	U 5hso²(7cch· ‰ lmî:supësëc» Gsupní J 	ëc9pë 	— 	š¶ß9u22ÿ  z‡—8 Ÿ  9 Ô ((acð	RÁ9sup³„ Twarhk� '92 Aï&1d¶wš*19 $owJ 	 6nwa:2xBzlig'dr  F x #TaptØFtargw%31¹ 2Tau? Eu03at Ø5tbrü %3b- dTcaronF ð164',
    'tcaronö
;': '\u0165',
    'Tcedil 2 t 3 4Tcy/ '42/  4 3dot- D20dbC dtelrec &31Ž "fr •U0001d5173  %31 Rhere47 Tu2234 T Ofore  t STheta4 D0398P t b 5sym3 dœ ?tav “ickapprox 7224R TicksiR D223c… •ThickSpacÖ ”05f\u200a# dthinspW 4009 JThin;  Ethka4 	‹ ‰ AHORNP4xdeb Rthorn f T* � +  , 5ildÚ ÷ t 602d  DEquaÃ6224ª  KFull! o ! T ‰ u…BimesÌ d‡  - x b Uu22a0 / #baÕ7u2a·  d4 'a34 n4522dK $oe•6292+o¶aûFtopbz6336F 6pci� fªBTopf� {4® >rtopfork9 Fu2ad…'os¯ ƒUtprimá0­DRADEH 1X&ra	 UianglK %5bÖ"tr DdownR 55bf 5lefh%5c5>   $eq@ &2b\@  5�= Frigh] bÿ <   ^ ½ 4(5e[ í 2r Tminus© %a3ƒvTripleD‚  6 £ sË&9c€7rit»&a3 erpeziu®%3e 3TscmV&4a‡ cƒ (TSc¼s 4 7TSH 0— 'sh 5 TTstro³5016I t õ5wixÎ&26“`wohead*Tarrow„%19üt# ð
$ %cUacutej¾u f , i xn-  . àrr;': '\u219f'ô,
    'uArr;': '\u21d1' a 9 uUarroci2 49492 SUbrcyJ D040e u 5 dUbreve1 716c1 	 d QUcirc« 4xdb u f * [ +  , ¶ &23W  4 d$c5. bUdblac[ Tu0170 u IFudhaF6cufishtJ 5297 #Uf/ •U0001d518d  $32 cUgrave2©u f , y %xd -  . (uH¾  Bharl- Tu21bf‰ (uh8bÕ Tuhblk0 &587Tlcorn &31 e*u2 5rop4 0} Dltri %5f8DUmacI E016a­ 
 U2umlKaC #umî x cUnderB_U  4racò523d¢  %keû&3b^ R ´ParenthesisÌ &3d5nio0%2c‘U 5Plu4 %28}5Uog4 50176u L 2opf{ ƒ4— %66ù bpArrow9 7u21LpM } 4 N _U\u291¹ Uk ADown& t ©p 9i[pdown–  u  < ´Equilibriumz 9Ùµpharpoonlefå#  6rig1,pÇŠpperLeftô 9‚@perRV " 7¤s!503dP'up D  hâ / VUpsilR'3a:
 L EUpTe22  
¯  2upu!Ö&1c“r;#u ; 	;#Dringë 1Í
 É)urkF$Usj;&4bë c‰5tdo+%2f3 TUtild66016ü  € u— À'\u25b5',
  ð	  'utrif;': '\u25b4',
   Duarr 41c8 AUuml. 4xdc u f  ( ? )  * ruwangle Tu29a7X evangrt 9] £varepsilon F03f56 frkappa 0 snothing 82208 3phi 903d  6N cpropto4 E221d A>	K U9b $rhG E03f1G farsigmÌ (c2 …ubsetneq� x8a\ufe0ñ s% & ?acb&  pK % K cK Fthet± dÌ 1triì5lef×(2bÓ " Grigh# 3ö 5VbaA4aeb (vB ­  v4ae9/ 3Vcy 6041  3 SVDash. 522as )Vd \ v0 Œ 
0 `   la %ae_%Ve&2cF 2] 'ee%2b¦ 7vee$5advellipv 42ee 7VerJ %01� v |- ¥
+  	) Gical§&22Õ0ert 2Linó 8 …Separatoü%75ü V> BTild? U\u224ÅVeryThinSpac  %00#VfV †U0001d51Ë 3² Dvltr2ÂEnsubVu82\u20dëFvnsut*83 3Vop‰‰ 4N 6$ ƒr �r¢ º 9Vscï &4b[ cGTsubnEg A  \2†8sup> 4  > y Vv"| %2a¹evzigzaË%99 SWcirc2 5017Õw €7wedõ4a5fáFWedgš cTw 2Ž %25KUweierü%11¾Wd1Å w 3Ç W4¿w 6j w À\u2118',
   ð 'wr;': '\u2240',
    Oeath  3Wsc0 •U0001d4b24  $cc ExcapM c2 Txcirc 65ef/ u/ 3 Edtri/ $bd )Xf“ 451b x %35 3hAr6 Vu27fa a 7 Xy D039e x b lZ 8- lZ Š m&7f34nisì &2fÒ Dodot %a0±BXopf ˜&54N %69” Eoplug 6a01 BtimeQ Fu2a0³rÞ J rÞ 6I XbÏ cÒFxsqc%a0O *xu± 4h )xue %veÇ &2cà Gwedg HaYacute%xd� y f , %-  . 2Acy Eu042ž'ya µY5017y  YF 2.y 4 "ená a…2yenœ x Y=1œy 3Ÿ 'YIr 0ž 'yi 5 Yš5ˆy 6£Y8by c—'YUƒ 2 'yu 4 "ml$fªBYuml%Eu017Øy x, Z1. (z Ö SZcaro… ` fz ¤ Zº 1Tz 3 Z65017
z àSzeetrOEu212ì ÕZeroWidthSpac?%00Q DZetaö %39z b ZH	e z ÊÆ HÝ 1G 'zh Œ8zig•1ÏZ] y >z z 6Ø Yb;z c23zwj6200Ñ'wn  uñ}

# maps the Unicode  �point to ðHTML entity name
# " 2 J = {K 1 I Àe character
÷# (or a character reference if the ¡is outside ð*Latin-1 range)
entitydefs = {}

for (name, codepoint) in  2 Ö.items():
   * 2& [& 1] =8 % k [&   Echr(- a)

del0 | Ð
"""A parser �  HTML and X
 ñ."""

# This file is based on sgmllib.py, but0API$ Áslightly dif< t.H ñ*XXX There should be a way to distinguish between PCDATA (¢ 7d
#zqdata --v ó normal case), R5 §replaceabl²4
# : AonlyQ ñ Aìs €d tags aµ ‘pecial)
# g (	Y /en:  Ô.


import re
 p_markupXÃ

from html ( ðunescape


__all__ = ['ŸP¸ '][ðRegular expressions u© Ö ?±ing

intereh_5ð= re.compile('[&<]')
in Zlete   �&[a-zA-Z#& à<ref& (' B][-.1 †0-9]*)[^ 0')
;>  P#(?:[1 `+|[xX] ãa-fA-F]+)[^0-9 û')

starttagopen† <… œ')
piclosÎ >„ oomment  pr'--\s*% Ð# Note:
#  1)0you;0nge�find/attr	 � rememberÕÔupdate locate¬ 0oo;O 2O oand/orC $he»@willN    ð"lode, so don't do it.
# see http://www.w3.org/TR/pð 5/tokenization. P#tag-Yc-state÷B  �B 0tag#š_tolerant²&r'8ô^\t\n\r\f />\x00]*)(?:\s|/(?!>))*')
rO ñr'((?<=[\'"\s/])[^\s/>]  =>V ”\s*=+\s*'0 ð\'[^\']*\'|"[^"]*"|(?!B  ? �>\s]*))?Ž ä— rU%  ž[ë  ö@   #\³0
   Â *   @# op½ðal whitespace before -TibuteQ S  � 6  8 5†  ñ # value indicatorY *  (?:'[^']*'  ‘# LITA-en‹dE ; $  �7   ; :  ¿%'"¾ 3  ð# bare value
      c   )
  3\s*
   ô# possibly followed by a spaceD ò)?(?:\s|/(?!>))*  _)?
  d 
w ò# trailing whitea ð""", re.VERBOSE)
endendtag = ð+compile('>')
# the HTML 5 spec, section 8.1.2.2, doesn't aÍ Æ ñs between
# </ andH  d ðname, so maybe this should be fixed’ ztagfind“ òr'</\s*([a-zA-Z][-.
 °0-9:_]*)\s*¶ �


class¹ òParser(_markupbase. aBase):Y@"""Fn Atags® bother 3  ñcall handler fun1s.
? RUsageJ  z8p =z ¶p.feed(data 1...E : ‚.close()X bStart • #re . �  ØRself.—  _s. �tag() orS  èP(); e“ î 8by ' " R.  ThŽ ¯ Ð� áis passed fromÛpf1 to �derived †‹ ?by ´  \ r() with9 ðata as argument (€ & F 0may&ñ'split up in arbitrary chunks).  If convert_charrefs isB 0Truu e  ð acter referencew e: °ed automati¹ yÛ E  correspond„hUnicodR (ñV Á �() is noB rlonger É $in¼ !, y1wis¥ Ty arekBB _ ‘entityrefû	Ð ç  dastringE pcontainÆ  Ñ  ÚAvely‹ ©Æd or numeric( ¡t©Ä2"""ºóCDATA_CONTENT_ELEMENTS = ("script", "style"ìÐdef __init__(Ý D, *,�Ç=Àµ 1Ñ"""Initialize©RresetWƒinstance¦ 0  V k€efault),Ï%9 L  œ
#u#ed- )s6 M  :     þ .L ú - =Š 1 ù : N   
1R" P  Los¡ll unproceà ¹.œ 0raw Z = ''… @lastæk= '??? €interesto'=  z_normalK cc ²_elem = Non�  Ë.ð … q  , P 
rõ1eed ±Ç1Cø¥€as oftenþðyou want, with as ó	little or as much text
  õas you want (may include '\n').( 5""" ù self.rawdata =   +  
+ ±goahead(0)
  def close(; !):  � ñ"""Handle any bufferedR .� V 1V °__starttag_â v = Noner :get" ~  ñReturn full source of X Ù tag: '<...>'Ž r5  Ì .… ~ Pset_cB_modù g, elemÿ B %   ! =! ….lower()&' òinteresting = re.compile(r'</\s*%s\s*>' %ŸV ,- I4Š<earœ – 
o  z_normal� n 	†0# I¶ ‚nal -- hê  ›!fa¢ðreasonable.  May leaveƒ!tee B# anó$ to be processed by a subsequent call.  If 'end' isB €true, foà‡  F1allj � `if folyV ¢EOF marker 7 ŽW, end3}  çUi = 0 ƒn = len(5 è¶while i < n#@ fÕñ onvert_charrefs3not  Z_I
>  B j4ÁÆ.find('<', i|  %   Žif j < 0C   à# if we can't I ð the next <, either! aare at 5endû  D  #£ 0 �e's more¨ �RomingÈ ^ °latter is TÇM – Apassy #tox_€ in case£ 2hava‘  C# a b@ cut4 @halfÐ �end.  Try‹Ïdetermine if• @this¹  Ç x 0befê Ã ed†pby look f´nK a& nearÙ 1endú se{ Y it's¾Pa spaÊ2r ;ÀÛ  gampposrÌþ('&', max(i, n-34)  B Cif (B @>= 0Œ µ  ,  ž	­ä[\s;]').search", Q )U ?  ðbreak  # wait tillÇ@get Ê c òŠ  ÿ
YNelseäTmatchâõ®  i)‰ <Ã&r 1if I `  Ï  Œ  .gè    œ   i	 ÍëÀ              cbreak
 	 Yj = n ™if i < j:  5 óif self.convert_charrefs and not ždata_elemB  F C phandle_+ Ð(unescape(raw }[i:j])) OelseS 	J 	I 2i =§ êupdatepos(i, jn n== n: :Óstartswith = i . 
n &f  Ž('<', i)Ä  Y V Ôtagopen.match3 Ù # < + letterc  S  kÙ aparse_w Ztag(iÛ  + $elq Ç Q("</"f Y ?endW ?!--Y comment± ?X /piS !S ÿhtml_declarationa ¾(i + 1) < nö ‹>"<"± *  àN ¥½ J �if k < 0’ !ifË?end   B X    ¦ pfind('>ô¹  1 �  " S GS  5 W  &  [ T  X  ok += 1Ô Ø(+ e G ,k, = À [ ·^[i:k]ƒ8k) Y/&#Uâ3 = CòY1if 5 –bname =" í.group()[2:-1]I  ý ƒ (C 
Ï  *    '| _.end($ 7wV�';', k-1ð  U    Y ?k -GÒ	«s G   ðcontinue
             ¯   else:
   ÿif ";" in rawdata[i:]:  # bail by consuming &#C  V Àself.handle_F (N _i+2])9 Ai = = ÿupdatepos(i, i+23 YbreakM þelif startswith('&', i)î ñmatch = entityref. ª  5 	Y  × 1if % N   bname =" �.group(1· â € (@ 0 kW Oend($ iif notû ;', k-1ý   ¯    Y ]k - 1ë   �k€ �continueJ 2ß = incompletej.#e`) will™ýtain at least 2 chars‘ Û ›f end andK )==ú=  A  :Ú .“ ( Ÿif k <= i4 #    O nm ‰Oi + a#nV 9 † =(X O < n´ #i1theC0of  qbuffer,R€can't be“_fusedƒ  # ¡° some other/ ostruct0 5T?"&"‹/$, õassert 0, "interesting.search() lied"Ó #6Fwhil+iŽixFÎ Hcî Z_elem� é  ponvert_îOrefs>  ðS„unescapej[i:n])fK ònðŸnf L @  �
G0# Ihó%nal -- parse html declarations, return length or -1 &ƒterminat›ð# See w3.org/TR/M ‘5/tokenizO . ‡#markup-g ¢-open-statÎJ Balso˜ _,  V_C 2bas0 3def)  a . ( †õ  .  Îˆ 0[i:kð == '<!', ('unexpeÿcted call to '
  õ'parse_html_declaration()')D õif rawdata[i:i+4] == '<!--':%  p ö$# this case is actually already handled in goahead(f  A Âreturn self.™ –comment(i) +el‘ 3‘ [� O ¡marked_secæ V 	£9].lower()ï {doctyped ù# find the closing >tgtpos =C./ –('>', i+9Ö  ÿ 3if . J= -1\   Ð )-1a .[Ã(­1+2:P ]g G  +L Jelset ) a �gbogus_•Š á# Internal -- *  *  * #, K ólength or -1 if not terminatedM ð
see http://www.w3.org/TR/¦‘5/tokeniz¨. #l -l a-stateK 2defŽ _" ¸  Ñ 0, i– vport=1)ø =" =† O  ƒdassertÍ 2]Ñÿ('<!', '</'), ('unexpe–$ j   žÚ 	•U2î1if ( O�K Ue ƒ  ,.^ˆ ‡[i+2:pos_W  u A+ 1
7aproces.Pinstr‹û?end
Ó0pi(œ ?, i¾-Î?½µ ÎV_pi()U match = pió„e.searchx ÙG2) #ê8 
_1ˆAj = ) g.start" ï ‹$pio †' j…B (enbl j—â s ?tag� ; – ¹ $__" ²_text = Non¨ h0end6wò check_for_whole; H_tag	3if 6 ?< 0W † d ¸Ü§ 6 2[i:O ]@ Q R# Nowc $ñ between i+1 and j into a tag Uattrs•  U = [] ÿ  =1  .¡_tolerant. ùà, i+1)
       ó' assert match, 'unexpected call to parse_starttag()'
  2k =9 e.end() €self.las0 e = tag) çgroup(1).lower4 õwhile k < endpos:N  m ñm = attrfind_tolerant.µ ¶(rawdata, k‚  4 Šif not mJ   Ybreak`  \ ±name, rest,l Pvalue¹ .µ o, 2, 3e  6 h  V F INones Felifh À[:1] == '\'' ; ©[-1:] or \>  Ç >  "=  ˜ i Y1:-1]e ¡ F •unescape(O 
'  Ps.app)%  np)8 b^› cend = ÷2[k:1w].stripS ifLêin (">", "/>")Ì ñlineno, offset = ¿ggetposN  r¢if "\n" in% _Z_textX  1 \ 3 = 	 +8 p.count([ 
ÿ  C — Alen(› v ) :   -q Iq  NelseÆ ƒ 	 /+ Œ ¥ } ® phandle_£«$[i´
ï `returnµ5posJ Ç «swith('/>'Ãð# XHTML-style emptyvq: <span(!="ŠE" />Z ¤ ä0endç2tag—s¤ â > ;  k  if• =þCDATA_CONTENT_ELEMENTS~d Pset_cD–_mode(tag— 
7Þ ð# Internal -- checkËôsee if we have a complete ½ &; N J Por -17 $in/ . 2def[ “_for_whol'_ · 7, iª²b K   ädlocate� eíi ,ifåj· l&  c 0nexáz ^[j:j+ó% ^= ">"�Uj + 1º  [  n^ O= "/9  $if².ß Ì �7, j% L  m 2m  ! Q "P ð# buffer boundary
   ¬return -1
 ý# else bogus input# �if j > i:  M [ j  X 3 
Ji + ‘ Þif next == ""< �# end of¨ Š å T ýin ("abcdefghijklmnopqrstuvwxyz=/"Â  ß   ÿ"ABCDEFGHIJKLMNOPQRSTUVWXYZ")§ ð in or before attribute value, ½we have theƒ ð# '/' from a '/>'=ing) ý »0 
·³+ 
¯ñ!raise AssertionError("we should not get here!")
± ð# Internal -- parseÐ Stag, f â`r -1 ièrcomplet2def5 ÷ _endtag(self, i„ rawdata =  . }  Êa°   q[i:i+2]où	</", "unexpected call toq #pmatch =¾ Œ ƒ.search([ ¥, i+1) # >|  ‰1ot : 
5û ¹rgtpos =- e.end()H A { �tagfind. {  y ¯</ + tag +„ "if2c?�_elem isÆJNone°  J_phandle_3 ~ 1[i:½ ]±  /   ç  Î    # Æ   ð name: w3.org/TR/html5/tokenizaj. P#tag-, C-sta J       =  [ �_tolerant**+2¨ ¥D ù #ž @end-¢ Oopen¢   ¦ )if†3†^'</>'s  0 =9i+3;  ¶  5 ¬n_èª_comment(iý 0tagù ! =‡D÷ .group(1).lower‡ ` ð# consume and ignãõother stuff betweenÛ( 7the“H ¤Note: thiswô100% correct, since we might0‚ings lik J   @# </ù lñ=">">, but looking for > after thaì ¶Ycovera`# mostu · QcasesÅ  is much si¡
4 â$ =á.ƒQ('>',l XÔ
§SU(’
( Öf "+1ZÀ    elem = móatch.group(1).lower() # script or style
  õif self.cdata_elem is not None:(  / 1if ! ,!=4 
(  , U phandle_[ @(raw ©[i:gtpos])[  3 qreturn  
 I pendtag(… ? ! bclear_Å Vmode(  W ð0# Overridable -- finish processing of start+end tag: <tag.../>
¬ Cdef Þ ( š  Œ ,0 †, attrs)  .3  Ê 4tag* ñ 	Btag)» R ­  y G ž  k  € › Opass_ ] ö ï T òcharacter referenc–½  # Bref(¼ Onameb oentity_   a ( Ñ  ±   ± |commentS  V %¼declarationZ   W ?ecl­ .instrucb $pi` ?ata`  ðˆunknown_� 0  ò r"""JSON (JavaSÓPObjec¯tã ð) <http://json.org>ÒÇa subset of
= ð	syntax (ECMA-262 3rd ediË ð) used as a lightwe  ×ð
interchange format.

:mod:`x ð` exposes an API familiar toW  rsc0theºÓndard libraryE Òmarshal` and X ðpickle` modules.  ItÛ ôderived from a
version` ðexternally maintained simpleª x €.

Encodþ basic PythH `Òhierarchies::.°>>> import J ]    ñ.dumps(['foo', {'bar': ('baz',]£, 1.0, 2)}ô'["foo", {"bar": ["baz", null. E]}]'j gprint(p  "\C \? ) 7 …'\u1234'4  "1 	\- \) ³{"c": 0, "b a ó}, sort_keys=Truez !{" / ? }Š å$ioxðStringIO
    >>> ö(io = StringIO()
    >>> json.dump(['streaming API'], io) ³io.getvalue? 9'["2 õ	"]'

Compact encoding::
l aimports  õ
mydict = {'4': 5, '6': 7}" ¢ ’s([1,2,3,4 ò	], separators=(',', ':')³ ', Ð{"4":5,"6":7}¡ ÏPretty print  ( („ ¨ ó, sort_keys=True, indent=4Š {Ê  p ‹ 6 5, Q6": 7 R}

De2_ JSON7ñobj = ['foo', {'bar': ['baz', None, 1.0, 2]}]b í÷loads('["foo", {"bar":["baz", null; ‘') == objD  à 	 M 0"\\O  \\L 4 ' ax08ar'4 	= ƒfrom io ™)  ] 
¯j æ + œ Õ p(io)[0]± ËW €  
Specializç j Ý Sect dzñdef as_complex(dct):` 0...åd if '_  ª__' in dct%  * wreturn J `['realz²dct['imag']ê ^ 5 4dctu  		Ws('{"ƒ A": tš"_ p": 1, "] b": 2}'‘a Æobject_hook=è … R(1+2j  q ÅtdecimalÊD • ó1.1', parse_float=. e  ('' e ³d ³, e—N(obj· isinstance  ,š) »P[obj.T,F.SmMñraise TypeError(f'O_  of type {B ò__class__.__name__} 4H  t  �f'is not,A serÓRable'::...ƒ ãús(2 + 1j, default=; 0'[29B1.0]…  ëe /EØ?er(B .R i Q r''.joinZY Jiter] ^  @

UsÙ¯ Qtool ¤ñthe shell to validate and p-æú $ echo '{"G ñ":"obj"}' | python -mÄ.a fã3  4  ÉT � 1.2:3.4P 
PExpecž  property  UQlosedSðouble quotes: line 1 column 3 (char 2)
"""
__vñ	ersion__ = '2.0.9'
__all Ò[
    'dump', s	 Dload 2s',& °JSONDecoder  EErro #En" 0
]
j Quthorm ò'Bob Ippolito <bob@redivi.com>'

from .dc † import g 'r, t 2 es 2 † 
E  “ Ôcs

_default_3 =S . (è âskipkeys=Falseü óensure_ascii=Tru çcheck_circular —allow_nan £indent=Non> §separators ¡  p)

def  Û(obj, fp, *, ¤     œ  ò  3 cl„  ¦  ¢  @ 	¦ g sort_3q **kw):Nñ
"""Serialize ``obj`` as ayñ formatted stream to ``fp`` (aA ð``.write()``-supñing file-like object).
0 TIf `` ð
`` is true then ``dict`` ® ñ
 that are not basic typesH ò (``str``, ``int	 Cfloa Bbool  Ò±``) will be�1pedF ð instead of rais¹ �a ``TypeÂ(``· Ç» f„½ 0the&Pings 7ten/1canr ðcontain non-ASCII characters ifK µy appear inQ 7 Bed iH ¬÷. Otherwise, all such S  @Qescap; Ö0str¦ Û 
�Ý I¢ referenceÆØ Dfor ¥ r¨r and a G   ›F `resultù aƒOverflowŒ© (or worseN.· %it…  ØDValuÙ1 tos sÿ2out	 ngM  v5 ‚s (``nanS2inf	 -
 )I ® ct complia!oÒwçpecification, |uz1theI ñJavaScript equivalent� 2NaNx ‚Infinity - 	-arðnegative integer,pnŸ ¡array elemo "an#¿P memb£ « F�pretty-prJ bd with±u £ level. An³Ú   d0—@onlyòert newlines. ``³bhe mosT1actG ‘representJÇsa ed�`` should¸ Xe(item_" ,p 1)``g Ãtuple.  The R “ 0``(`p, ': ')^2f *ö *  ¿ B1  3 0 Ðotherwise.  Tñ\o get the most compact JSON representation,
    you should specify ``(',', ':')`` to eliminate whitespace.
@ ð``default(obj)`` is a funcd T that` ñreturn a serializable versionM óof obj or raise TypeError. The j r simply$ s% 
E àIf *sort_keys*� ctrue (> Ð: ``False``),)n ¡ output ofD !di¿ àaries will be U “ed by keyÿ ðTo use a custom ``jòEncoder`` subclass (e.g. one�overrides} s 3``.¢ (G`method}.`e addiV¥al types),´qit withJ  ýð``cls`` kwarg; otherwS¡  isÁ dÏ 1"""C ¢# cached eÊ  Àif (not skip\0 an!  sure_ascii *  Yàcheck_circular   allow_nan )  ls¥N R iindent ™separator* B 8	3 ©  p   Ekw):7 Aiterƒ3= _C _ð .  Ø4 Gelse> 6f cº  ü Als =t
@    X t Dcls(K=	 F, enQ= ° E   
_= ,k=u", Z= 
O b= 
# #= ,e=
 , **kw)?1# cgqaccelerNõith writelines in somñ s of Python, atEò# a debuggability cos �for chunkH i™1fp.k ($ Ð)


def dumpsäE, *,Û="�jTrue, j= š  –m  "=Ù| c @ \ a� ]Ò C"""SGre ``obj«awó formatted ``str``á If Á®pthen ``ø 6 ey™aat are9Rbasicv­ (W �, ``int``	 Cfloa Bbool  ò 6``)FakippedF pinsteadç ñ…ing a ``÷
· » fÈÅbñvalue can contain non-ASCIIw €characteOf�€y appear9tstrings;  ed a4. OIcN Wsuch S  3Rescap;   U …
HÐ >’referencex ïà Àner types wiñLll be skipped and a circular reference will
    result in an ``OverflowError`` (or worse).
0 ñIf ``allow_nan`` is false, then it\  … ”a ``ValueM !toC ðserialize out of range ``float`` v5 Qs (``c �, ``inf``	 -
 B) inL Ðtrict compliaÚ  of‰ ð JSON specification, insteads Pusing) F ñJavaScript equivalent� 2NaNx ‚Infinity - )PindenÃ ó
is a non-negative integer'Ÿ ¡array elemo 1andŽ åobject membersO�pretty-prJ  d with tha¼ u ² level. An † L   ñ 0H @onlyòert newlines. ``NoneÍrthe mosT1actG ‘representJò a ed›ñseparators`` should Xe(item_" V, key 1)``g ñtuple.  The defaš€s ``(',  @: ')§ 2f *å *€¿ B1 0 �otherwis\ Po getû	ç 1
è ,• 4youÎ ï y‘ ` � óto eliminate whitespace'#``Ë A(obj¾  @func–Ã.”return a #²able versioðòof obj or raise Typ_.5bsimply$ s% 
Ò ÑIf *sort_keysBctrue (¨ P: ``FÓ3``)¯ Aoutp°D !di¿ Farie£ U Ped byßÿ `To use†€ustom ``ü`Encodebòsubclass (e.g. one�overrides«s 3``.¢ (G•method to.`e addiV£al types),y™!thJ  Ï @``cl©ukwarg; #¡  isÁ dÏ 1"""C ¢# cached eÊ  qif (not \€Àensure_ascii *  {echeck_�¬Y
)  lsç ¤  à	 Z	* k 8	3 © X   Ekw):7 �_? _ì . Ð, Fif c¤ @   =Zð. V Acls(   ± 2=	 (, 8= — 6 
B= %, §=
   .=?K A= ,†= , ã8=
 E Y**kw)%

=!deó D  D�ect_hook=á,à  Vpairs °)


def det ‚ðing(b):
    bstartswöith = b.startswith
    if b ý((codecs.BOM_UTF32_BE,  QLE)):@  D ñ return 'utf-32' X /16X  ?16_X /16X 
š 8• t8-sig'
™ ¶len(b) >= 4Å ¶if not b[0]  Þ @# 00 0--   æ 1-beO  "   & !XX# 1- -& ,16& * '�„[1] elseC2-beî  Z ™ 1™  XX™ Ÿ s L32-l™ &  Ÿ & /16&  # ¿ L ¿ #le¿ ›2] or b[3Ç lÇ Selif vF== 2aÝ v Ž ± p‹ 1žß ã‘# default y ó8'


def load(fp, *, cls=None, object_hook ²parse_float S  æ #in   econsta Q XpairsW C**kwûó*"""Deserialize ``fp`` (a ``.read()``-supporting file-like® ± containingœ óa JSON document) to a Python3 .Y#``Ÿ  ð ð`` is an optional func ð that will be called �2 thºÓresult of anyd ° literal deóÑ âdict``). The r…�value of½ “ v Àused insteadh  th*O  N ’is featur‘ 0can¬ 6 €to imples custom” �rs (e.g.1à-RPC class hinj)'Æ-L_ �¡rdered lis`ƒ  . @0D @) r%``¼FP &ThJ FV.  If{ NO  R0lso�Pined,2) 	¤ ãtakes priority{„To use a¸ ``ÜDRqr`` sub³°, specify iª#thi Qcls``Š ð kwarg; otherwis>
K  isk !d.. 1""" _ -Cs(fp�,   ::cls9U* H ,7 Gðparse_int,
     ú   parse_constant= ý, object_pairs_hook= õ, **kw)


def loads(s, *, cls=NoneG A  i Rfloat$ #
   #in ¢ ? † E ‹ :L ð"""Deserialize ``s`` (a	 Àtr``, ``byte #or ‘array`` i!ceI ócontaining a JSON document) to a Python,!.
5 #``£  ô  R ðs an optional func ò that will be called with th~ Óresult of anyd ò  literal decodeÖ ÿdict``). The return value of“ v Ausedò 0eadh  th.O  N ’is featur‘ 0can¬ 6 €to imples custom” �rs (e.g.1ü-RPC class hinting)'b-L_ �¡rdered lis`ƒ  . @0D Ó) %``¼ 8FP &ThJ FV.  If{ NO ðis also defined,2) 	¤ åtakes priority{j„  if specifiN ”q string‚ �of everyä H  #bePd. By  aÂtÿ ñis equivalent toH : �(num_strÁ,is!òuse another datatype orrG 'orŠ €’decimal.D yþ ?intü 0iÍ  ’ú ?intø 8eintegezWð êõ  on> Zb@llow	æs: -Infinity, 
 ANaN.1 óë1raiÌQ exce² if invalidÁqnumbersC °are encount®½1To u ``™Dqr`` subp,Ó0y igX� ``cls``` qkwarg; Zwš K  isk dÑ 1"""6  ² sî@anceï ºx Ç Kp.startsÍ¦('\ufeff')#  ' º òError("Unexpected UTF-8 BOM (Z0 us€Áutf-8-sig)",‘  O  Qs, 0)( Ðelse:
       ð if not isinstance(s, (bytes,  §array)):
  òraise TypeError(f'the JSON object must be strH Fs orQ 9, 'Q \   f'– õ	{s.__class__.__name__}'); ñ#s = s.decode(detect_encoding(s), 'surrogatepass')
; óif (cls is None and¸ X_hook 0 “ °   parse_in0:  Ifloa :  !coe	' y ]pairs �'kwòreturn _default_ý rs7if á ½  =©D5r¦ $if† ÿ  ~ : Bkw['Ü¥ H'] =5 H 
Î N 
+ T  Z gT % N  
H ÅF 	7intD :intB ÍG 	( L  Q Ñ—cls(**kw)Êù"""Implementation of½ó
"""
import re

from json  ²scanner
tryÊ" _# Àstring as c_3  ‘
except Ia éE % ! =	à

__all__ = ['	`7',  E ð	']

FLAGS = re.VERBOSE | ƒMULTILIN áDOTALL

NaN = cæ('nan')
PosInf ™inf')
Neg - !

F<Š R(ValuÃbb"""Sub- 6of   ` with æafollow00ddi–âal properties:cðmsg: The unformatted e-� messageý2doc'  3P docuì0 be` ½d( 2pos( °start index‘doc whereœ 5 Rfaile5 blineno8     correspon q to pos_ 4col) ocolumn+ ,  t ò# Note that this / ¦†is used n: ðdef __init__(self, msg,÷ ,‹ „ ]  ¯ @no = â.count('\n', 0* A + 1T  - ¾   =C ! -2 Zrfind2 . àerrmsg = '%s: i C %d ÷ ñ%d (char %d)' % (¡  % 0no,%   #pof } #.Ü i � *  ò .{ 5msg�   Èí 
  poâ¦E � ! =¾ *no4  �yðreduce__(self):
    ñ    return self.__class__, ( Bmsg, 3doc
 ðpos)


_CONSTANTS = {
K ò'-Infinity': NegInf,  6Pos 0NaN+ ö<aN,
}


STRINGCHUNK = re.compile(r'(.*?)(["\\\x00-\x1f])', FLAGS)
BACKSLASH� À"': '"', '\\  \\ / #/'˜ b  \b f f n n r r t !t'« ðdef _decode_uXXXX(s, :ñ òesc = s[pos + 1: !5] òif len(esc) == 4 and esc[1] not in 'xX'J  X6try   ´0intF Q, 16)Z   úexcept ValueError; Apass, ñmsg = "Invalid \\Ç  ˆ Aape"# ±raise JSONDê O (î  

	Ðpy_scanstring	Pend,  rct=Truen ž D_b=B«W, _m=ór.match)° ±"""Scan theJ ¡ng s for a‘  �. End is' €index of À �characterS@s af  Q ðquote that started4 	Y A âUnescapes all ) ~ -€ sequenc' 1nd 6s�K âon attempt to :S an i€ .ang. If]  ctÖ @Fals¨ ¡en literalL …control à Ps are¤ @owedí  å R 
3 Ræ“s a tuple&ˆ ds !ng‰ ; Jf  Y <JAend N2.""5¢chunks = [î@_app& "=  . – €begin =   1- 1 rwhile 1 37 S = _m[ì"ifU  ,FNone5  9 ‰Õ¿ "Untermina÷%iqt", s, š i  ¡ Á V.end(  ŒTent, U 4or * ggroups- �# ContenÝ : óains zero or more us”å Ù  ÷ H 
ñ k(Z 6ent¥ 3# Tó  or, ä Ó omTng, ab > 	^¾#§ ða backslash denot8L,anr follow6» )=¢
Å Ubreakë Helif["!=Ï! U  È*ctJ   #çÝ ¶ %r at" % (™ ,; E   H P{0!r}K w.formatO N ›Z:end3 ;elsÜ “ ï¸ 
6  $  ð Einue0Ðtry:
        ð    esc = s[end]
   õexcept IndexError:   ñraise JSONDecode# ð("Unterminated string start	 Iat",E  I  õs, begin) from None6 à# If not a uniy  ¾ öape sequence, must be in the lookup tablH  if8 z != 'u'Ú :try  ¢ Öchar = _b[esc%  )1Key< õmsg = "Invalid \\escape: {0!r}".format(esc)è  Y   gºmsg, s, end3 …end += 1H Jelse’ 0uniÉ d¶_uXXXX(K 5K  � Àif 0xd800 <=�  ¢0xdbff andC:… ¬ 2] == '\\` H Ouni2† J + 1Õ  1 y cy 2z :fffß  -   ç Ð0x10000 + ((( -À °) << 10) |  !2  Nc00)|  O Ô 9= 60chrD 9 €_append(   ñreturn ''.join(chunks)Áñ



# Use speedup if avail°CscanGG= c_ Wor py ÷ 

WHITESPACE = re.compile(r'[ \t\n\r]*', FLAGS). ƒ_STR = '% q'


defÜñObject(s_and_end,Ô@ct, Š !_opo% s_hook,  Rpairs 	3€   memo=ÕV, _w=µ `.match s  � )ã¦ ª� [ k B = [— ‚1 =  .‘/ À# Backwards "‘atibility !if  1 isxy   ¶ Q = {}'   a_get =/ ±.setdefault Ñøa slice to prevenNÜ beå!d,®“followingI ±check will ' a a mor.¢cific Valu~ : ñ0cis empØ @next� > è¥140# N„ælly we expect 3 Q= '"'� &if  <"< fin _ws> B CD= _wn.#    s 	K¦  " ’# TrivialÜ oœ   „  ~}    ¡ ì R “
²  2 Presulè8 ([
Á 2 ì9 ã Ó£  # : N    #ifÐ 9˜ C —  }‘ y. Œ À
        eli÷f nextchar != '"':
  ùraise JSONDecodeError(#  . ñ-"Expecting property name enclosed in double quotes", s, end)M �end += 1 ¦while True� 1key/ â = scanstring(C  ,  "ctK  � ñ key = memo_get(= 6key! ð8# To skip some function call overhead we optimize the fast paths where
l   #  ' { ñseparator is ": " or just ":".ä  6 ‘if s[end:þ 1 1]ƒ:ƒ  C= _wí f).end(Ê I  * Ð¿Û':' delimiter¥ A  Ž ©Æ 6try§ # × ]õ:_ws  " E    ;  .  ? L + 1Áexcept Index´
… _pass
Â XvalueoT_once�8 e ‘StopIteraBjas erro vq n1rr. ¦) from Nonh�pairs_app×, �à=n]À  Li?in ¯p K   m -’9 %''¢  ê
n° [== '}.Vbreak@ l0  á,0 ›/',F - 1t § !�Ü 
ð¨ ÿ H· ˜_â ¢if object_@hookÙ1notžìŽresult =0 (; 2rreturn 1 j& x = dict3 ƒ } < ¬  ) C r & q A
defÛñArray(s_and_end,bóð, _w=WHITESPACE.match s R_STR)� ¤M × ¤Rs = [}ü“jû] ð# Look-ahead forñ trivial empty array
    if nextchar == ']':   ñreturn values, end + 1 @_app = .  ¦while TrueK 6try  \ U T Â= scan_once(g )H  ' úexcept StopIteration as errP òraise JSONDecodeError("Expecting¨ 0", b 1rr.€ µ) from Noner Ú (!  %p s[end:þ E+ 1]" Jjin _ws¢  1 C= _wä  Kf).end(î  ò i  I #+=‰ 3 z Ä   Ubreak¨ (el0 W!= ',ô 0 LÓ',' delimiterTfnd - 1Ì ò"if:/]  x Ù     ;  &  ? aOQIndex"
£Qpass
)û‡


classd’r(object)F ‚"""Simpl‡ñ <http://json.org> dšrb ðPerforms the follow§atranslès)4   ²by default:A *+-    +Í |´  # ‚| Python  |* *+=    T ü > „  | dict  T  ‰  ¨ 	˜=  T ?lisT .0str@V S| str  ¨ Ànumber (int)¨ +in§  T 'Êreal) | floaV T Dtrueæ  ¨  •  
 T FfalsU 9| F T #@null:  |’  ¨ ËðIt also understands ``NaN``, ``Infinity vand ``- 1 asD ðtheir correspondH!``™"``Rñs, which is outsideÒ Šb spec.®2"""	 `def __| Â__(self, *, M`_hook=��, parse_l  ’  2int . 0conê  À strict=True7,
  õ	object_pairs_hook=None):% S"""``&    õ!``, if specified, will be called with the resultI âof every JSON R õ decoded and its return valueY uused inJ �place off ð
given ``dict``.  This can“ : õto provide customI ñdeserializations (e.g. to support¬ õ-RPC class hinting).
D C#É "5 ofN "Wð an ordered listw ÷ e>M F?of ¤ – %pinsteadR  ¼PM W`featurë	_“implementa×5rs.? I† Gà is also definIy ’…`` takesL ‰priority†¼parse_float€£estringY 
£L  #beÑ Pd. By° `ault ti is equivalÿ %toL > ¯(num_str).—ñ	use another datatype or Ì rK !or‰ T ¦’decimal.D 
”B ?_in5?int
&?int<tinteger
 oconsta$onUz‚llowing *æs: -Infinity, 
 6NaNë*�1raiì` excepm ErinvalidÝfnumberæ°are encountñíL ‘  ò G°false (true  H0def¥ ),%•n controlÙ pcharactD¿aë is+ ` rngs.  C<  4 � _ @ext ´ @thos¼&th2  æ@s inŽ ¶ 0-31 rangeŒ`includjñ``'\\t'`` (tab),   n'Ö r  1 F0'``|5"""ä Sself.N s# =vè
' 0I" =€L � 0  .   Vor inò� Z Š]  ú
or _CONSTANTS.__getitem__q  �Act =‰cd å Ý ë  Àhook
       ñ self.parse_object = JSONO #
  ' Sarray& A % Òstring = scan 
' šmemo = {}  / S_once; �ner.make_ @ner(‰ 1)

6 ¡def decode ñ, s, _w=WHITESPACE.match):.  Ê ð """Return the Python representation of ``s`` (a	 Õtr`` instanceI pcontainä a0² document).� o 2 €obj, endÙ  tDraw_½ õ, idx=_w(s, 0).end()): 5  3end   !ifW ‡!= len(sî  ƒ Qraise¢ D*ñError("Extra data"7 X R r#2objË  h¯ 1elf5  µ 0p 2"""e  P fromM
VQbeginDEwith = c) and ” �a 2-tuple§Ä< Ì :  & ƒindex in„ Qwhere¶ C'ed»óThis can be used tolÝ "a æ• that may“ `have epQneousu1 at (ent 5"""6 6try· É@ * 57idx0âxcept StopIterÖjas errS @pectÛSvalue!1rr. )Í6Non�£ �
"""Imple !of„ En®r! Å
import re

í (c_json  e2 R_baseaÏ_ascii as c_ "
eIb òù 2 1 = Ñ ‰ ƒ } w ýè rr  m ' h ó"
ESCAPE = re.compile(r'[\x00-\x1f\\"\b\f\n\r\t]')1 l_ASCII7 ú([\\"]|[^\ -~])')
HAS_UTF8* ba 8a 'ffT 0DCTòÒ'\\': '\\\\', " " "\b b f f n n r r t °t',
}
for i”range(0x2Í'ð_DCT.setdefault(chr(i),§ óu{0:04x}'.format(i°#; ð%04x' % (i,))

INFINITY = float('inf')

v.pyäãÍ2ýDof aä<ÏÀ"""
    def óreplace(match):
  ñreturn ESCAPE_DCT[" ¡.group(0)]* & S'"' +, S.sub(V þ, s) + '"'


encode_basestring = (c_ ^or py )


def ƒ_ascii(sÁ B"""RÀ òan ASCII-only JSON representation of a Python ˜ 
Û 1"""  s Ï %Js = 3  C6tryM  +QsD  ú except KeyError: ¥n = ord(s)^  4 êif n < 0x100003    q ú'\\u{0:04x}'.format(nJ  . #/ º%04x' % (n,) Nelsei ù# surrogate pair¦  \ Dn -=¨  0s1  ú
d800 | ((n >> 10) & 0x3ff‚  O "s22 c2 n* Ô  1bs1, s2g 1 Ð_@Ö‹ Üë á " ç �)

class³E:†r(objectä¡Extensible' ò <http://json.org> ]Tr forä@dataé‚uctures.îðSupports the follow¢r òs and types by default:: .+-  +|ƒ  Å |º  1  |* .+=  T Edict? 	 "| ·   T § -¨ ³list, tupleE s| array T !5str> 	 |‡ f ü ¨ •int, floau| numbek PT 4Truõ ˜ ) t T JFalsU 9| f T :NonS  ü #llµ øw@To eSó
d this to recognize otherYbs, sub  ±implement aH 3``.$ò()`` method with anI  Rthat uñs a serializableJ É ¿Á``o`` if posô,” ñwise it should callÅQsuper¤ J ¤ ð ation (to raiseñ
 ``TypeError``).

    """ ñitem_separator = ', ' :key : ñ)def __init__(self, *, skipkeys=False, ensure_ascii=True,V  |   âcheck_circular! £ allow_nan Wsort_U 	B Õindent=None, Â s bdefaul %):9 °"""Construcï ófor JSONEncoder, with sensible E s4 ¸ %Ifê R is fí pthen it %a nµ to attempt� ej ping of Ú ð that are not str, int, float or à U.  IfC j n Y` such ÊsJ asimply¨ :ped½ — A tš¡ the outpuÃ  guaranteedÂ  be— ~ robjects*�all incomÒ ð
non-ASCII characters esca… 	Â … F† Ïcan contain X 
Õ 
M	× Àn lists, dic ±and custom ‹/edÚ  all be V 0ed %©ð  references dur÷ G  	 %toK àprevent an inf+ðe recursion (which would cause) �Overflow©%).L pOtherwiT"noëš Ê takes placeG
bNaN, I� 0y, - 1 wiö w × Qed ast ð.  This behavior[  ²ð JSON specificatß –compliantòbYpconsistiómost JavaScript based˜!rs¡ !dešs$it· r a Valuæ ¶¿ » LÅ[ É n
!of5pionarieò
" žPed byÉ0; t‘is useful6aregresôRtests™  gÿEqerializE s  …ðompared on a day-to-day,iÔ  Ñ a5€negativeR egß¨n Uarray† relementsâP membÂò  pretty-printed  ¾ E  �level.  Aü £   ñ0¯÷only insert newlineà ñ Ä  ”! PÑact represent"
ó‚(ed1 shcb`(!Ò,¶ )Ç Qtupleï � (Â, ': ') if *ï *  ``µ  ``²H 0(',3 0 oÄ X Qo geti	ß —
ä A4youÎ ë $y ` !')Wð
liminate whitespace.

     ð2If specified, default is a function that gets called for objects
E   % ð4can't otherwise be serialized.  It should return a JSON encodable
 L p   vers| cof then ` or raY õa ``TypeError``.
9 6""" ôself.skipkeys =  . ! ø ensure_ascii =  
) úcheck_circular =  
- Åallow_nan =  
# Tsort_›  
# ’indent = 	  Ðif separators°•not None:#  Jà Uitem_. !,  6key  N A Celifx b e = ','G (ifX¨ ~=0 É%deA (» F, o)æ �"""Implem'Ðthis method i^Òsubclass suchÉ#it}¼a¦ „m æ```o``,x ûsŒdbase it a#ì ?(to¢)£pFor exaB ò, to support arbitrary iteÚp, you c3d { '` like ü "::3 û  ; "   6tryP   ‡ 0bleeter(o)… # uexcept ŒI 6pasn; +ls® Tlist(„ { V# Let’èD. B¢ Ã n  ‰Eˆ3er.F oV _§ ‹Y A(f'O µ‘ype {o.__˜ Ö__.__name__} J  Pf'is " � 	•"')„  Ò.e� sI"""RXñstring represent­ Ÿ ÷a Python data structure¥â>>> from json.s r÷ ª Ÿ ,O 1  #()5 ö	({"foo": ["bar", "baz"]}Ñ'" 'ó  w0# Tç!isˆ±extremely sõ cases and benchmarks.¦  ÒÀsinstance(o,ü N l [8lf.d "   6_mG+eìD > î @does\ JôÀtor directlyJð''.join() becauseü ð # exceptions aró%en't as detailed.  The list call should be roughly
  ñ%# equivalent to the PySequence_Fast that ''.join() wL 5do.E õchunks = self.iterencode(o, _one_shot=True)4 òif not isinstance(F 0, (¸ ¥, tuple)):2  ² $ ! =Ü 2 T ereturn« - !)
B Gdef š  ª ),   WFalsep A"""EÇ ñgiven object and yield each stringg  ¥ àrepresentation™¢available.�  & ÖFor example::   Afor ½ ‚ in JSONˆ 8r()]2big� ´  >   Ómysocket.writ[	  5"""® "if·êcheck_circularw`markerâ%{}9 Oelse' ENone) b Êensure_ascii9 _0Br = 
 R_baseW0 M v = 	X  €floatstr˜ allow_nan=. ,j  )  _Ð=< !._ ð__, _inf=INFINITY, _neg - •0# C` Ûò specials.  Note`ðthis type of tes© processor• #€Ñ/or platform-R ¡fic, so do@  s which do�depend onÍN `intern‘ / ù šif o != o­  Étext = 'NaN'N !el6 !==!9 �Infinity> PA -B • ¯ ½'(o	  Št ùraise ValueError(ó  D   @"Out½arange 0  v4 Qs areî Ìÿ  compliant: " +K  r;(o)© Æ  |
ªEif (e u c_make!is| 	“ °    É 0ind0is ( ½_9+ =_ -,W”default, �  q nŽ Ôkey_separator1 =tem Ÿsort_keysI Askip � ä4P 	î L ð ,?str± ú Àsort_keys,
   ôself.skipkeys, _one_shot)
( øreturn _iterencode(o, 0)

def _make `markerK ¢default, _7 �r, _inden •floatstr,h Ñ_key_separato, 9tem @sort&  ] ³  K ð## HACK: hand-optimized byteÁ !; Ó õglobals into localsŽ ¶ValueError= b Pdict=  Ò =  Wid=id gnt=int µsinstance=i  Plist=  Istr=8atuple= & 0_in^ m ’.__repr__ 1):
å $ifŽñ is not None and Ž (µQstr):=   „ = ' ' *N ^ 2_Ä 0(lsúscurrent? g_levelW !if€ 6lstk  o ¥yield '[]'‚   ž 3if �Ö 
J ! pid = id• ì R C Tid inO 
C  ( fraise á("Circular ref,ºe detected"d ƒ "s[ •id] = lstÇ 0bufX[ì ¯
– _[U += 1Y  ¹ snewline� h T\n' +Á ËI 	D ¨! =©: + b 	9  Ú /+=" JelseÔ 
K ! =¦	R ‹ ( Æfirst = True €or valueçp1if 6 
�  @ v = FalsN   ¿    ó %= § €   7if jŽ *, h '    M +R(2 
\DelifØ s/Ã L V'nulli k 
C  5C OtrueC 	+D fOE   7int1 ±   ð # Subclasses ofÖ/Žå may override Ù but we still•N ‚want to ½q them a-Regers\   ú JSON. One examplN PithinF  ðý	dard library is IntEnum.ˆ ªÕõ* à):
             ð# see comment above for int
   ùyield buf + _floatstr(value)- Yelse:  G ?  Òif isinstanceQ þ, (list, tuple))O  S ðchunks = _iterencode_8 E À_current_ind Zlevel­  H /elƒ Odictz  0 z + ” Ü ] rRfrom N z£if newline» is not Non»CU -= 1N  ¯ l @'\n'o? * > 9 5 %]' ¯if markers’ 4del% [- Aid]
C 9def’Odct,‰ Ý jot dctk£ &{}¤  ï areturnt   · « š = id(dctˆC Tid iná 
�  k praise VvñError("Circular refºe detected"d ƒ s6  =ò Ç í ì iP<�ä, +"q/= - ý ãitem_separatorù +ØÛ  > ß 
ˆ ! µ
) ! =0  Q � - Åfirst = True  \šsort_keysé Y  Ø  e-. &()Ñ± # Ó/ m  ÕQkey, ° b. w 	‰/ 7str& õ   Epass[   À# JavaScript*Áweakly typedQûthese, so it makes sense toI òalso allow them.  Many Þr7 ùem to do something like this.N ÙÓ »Õ  
 1Aint/.  0_¶ i	i  0key’1  6key® ! Ž  & !is

} "   v= 'true„  ; /Fa`< f = Às None:
      ×key = 'null'
 ù elif isinstance(key, int):'  3 ð# see comment for( ý/float in _make_iterencode@ „ p_intstri )# Š ž_skipkeys zcontinuX Nelse+ ðraise TypeError(f'S Á must be strä !, ½ ú, bool or None, ! ú  úf'not {key.__class__.__name__}'Ø Žif first§   = Fals× ùyield item_separatorC! _€c   ?keyA 
`value,/ L l , 
ù Ñ 1 is\F ˜= ?Truç = Jtrue´
z _{ f}?  ‡ 2 -Å k G Ž »� G_  ¨’ u<ß(list, tuple)®   Z—chunks = =_8 (| à, _current_ind Zlevel% H ö)?dicÎ 2 z  0 z b ] !Rfrom ° ó£if newline h š È
ñCU -= 1N  ¯ l t'\n' + U *�9 5 }E¯if markers’ 4del% [- Aid]
U 8def/(oä 
}oµ§ oA9o« 96 ¡1 ™1 
•1 � 2 ‰3 Îo�}À int/float i÷n _make_iterencode
  õyield _intstr(o) õelif isinstance(o, float):#  G ñ# see comment for int/* / i| - ~ Û(list, tuple)† Æ Wfrom é _2  ¹ À_current_ind _levelë 
<dicê d  * d *se:ûif markers is not Non$  b% xid = id¢    I  ids0 sm  (   ñraise ValueError("Circular ref"¶e detected"# <   ] [ yid] = oÌo = _default® C> { ç 04delY§ £ hreturn"ð
"""JSON token scanner â
import re
tryM`Sjson  Z6 R as cl ‘
except IK pI 
' ! =úè

__all__ = ['Z ò']

NUMBER_RE = re.compile(Ø ñ'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]? !',2 Ð(re.VERBOSE |P ƒMULTILIN ùDOTALL))

def py× t(contex ó parse_object =  . t  ]array'  & mstring'  ( Àmatch_numberA. #  . 	“   � zf  & .inØ 7int" !co&'  , #W_hookt  & _pairs,  2 0memuy  
  ¼_Œ _oÂ ÿ wng, idx?Þ d  pnextchaV2 Q[idx]Q   ÔGndexÓ    aàStopIteration(q  = âœ  , 6if m R= '"'    °¬Œ ( Å ` + 1,  &ctª¸	W {W 	(X )Y 0 Ž  R", > § ž , Œ› 	[› 	š ‚ \ À == 'n' and ÷string[idx:idx + 4] == 'null':
  Óreturn None, - ! Ñelif nextcharB t' and a Otruea ?Trua fa 5Â Ofalsb F Ä %5
Å òm = match_number(½ * )& ±if m is not
&ðinteger, frac, expU †.groups(F  Y!if& 0 or( 
H    óres = parse_float(^ @ + (`  : 0'')  i jor '')d OelseZ %inX 
; ñ§res, m.end¿ ðN�3�?NaNïß  constant(') )sE + 3vq Iq 8q �Infinityv . { 8{ -{ 9{ -N 
zQò / } 9} Àò	raise StopIteration(idx)ÈÙdef scan_onceÁŒ 6try iÛ_9 Œ kfinall< ³memo.clear(ƒ ç M a

make] ‰ner = c_ Yor py ñ
r"""Command-line tool to validate\òpretty-print JSON

Usage::ð$ echo '{"json":"obj"}' | python -m  .^ æ {  3  4  } T � 1.2:3.4P 
ñ$Expecting property name enclosed in double quotes: ï Á1 column 3 (Rñ2)

"""
import argF  Æ  `sys


bmain()ë�prog = 'ú  'Ù pdescripOò  = ('A simple cˆ™  �‘rface for=‚ module F  ; '³¢ objects.'}×  %ã  .ArgumentP r(É = ', ³ = I c.add_aB ñ('infile', nargs='?',ý ³  Utype=† ÿFileType(encoding="utf-8")B qhelp='a› y  Â%beÅdÀÅ/ed� ÿdefault=sys.stdinè 0outp é À            ð$    type=argparse.FileType('w', encoding="utf-8"),
3  ðhelp='write the output of infile to   'F ñdefault=sys.stdout)r � ô$r.add_argument('--sort-keys', action='store_true', P _Falsew ½  N ¼ !diV ÿaries alphabetically by key'¡ 
ñ no-ensure-ascii’ Bst=' _ 
¼ f­ %® ðdisable escapingkÿnon-ASCII characters¡ Ÿjson-lineC3¨0 inû us–  `JSON Le ¡ format. '×Ið'Use with --no-indent or --compactKçproduce valid a x.ö �group = ˜ @@mutuÀ±_exclusive_& (É i† ¿¡"4,9?intW¨âseparate itemsÚ 1newtp and us2Ÿis number 'of spacesG ” aöî ¼ =tabQconstÏ  ŽJ r. 0='\2 Õ äO'tabÄ 	Ê 2?Noná |Ärather than É�
·» ¤	ˆ `uppres}ql white†  V£ion (most e )Š  opsû =As()
t Adump A = {  �'_T#: F . ì'5%  " 	å(  . }~ %ifp Í :  – ¬ [x @] = È# @ors'' ‚',', ':'÷ [Ù œ#as¦,ƒ 0out¬4 as·Ž 6try  Ÿ »  Q_Ý
#  ' 0obj’($ p.loads(* )Ï 
 3 in‰ � 5   OelseO (Ï :), ? pfor obj^ àobjs:
          ðjson.dump(obj, outfile, ** s_args)
,  & ¶.write('\n'$ ùexcept ValueError as e:D ò raise SystemExit(e)


if __name__ == '__main__'= 2try	  ‡   (u q —BrokenPipv &xc2 Qsys.el ðxc.errno)
from enum import IntEnum

__allˆ ö ['HTTPStatus']

class  (4 )k 0""" ! s1 ñ codes and reason phrases
V % � òthe following RFCs are all observed:<  *" ð 7231: Hypertext Transfer Protocol (“ `/1.1),G ±oletes 2616‡ K ñ6585: Additionalè  § CÌ 1 ð3229: Delta encod· !in8 + Q4918: ù Extensions for WebDAV› ;518? ‘5842: Binc B #toA 1 û	7238: Permanent Redirect' R2295:40par) @Cont pNegotia
 Ó r2774: Aï Ö « Frameworkl 0772_0 Wa to Reƒü Legal ObstaclesB ?540ì0VerZ# 2ö2&äC2324C   T0°Coffee Pot û 9rol:ŒCPCP/1.0H F8297ý Í  ÔpIndicatLHintÈ €8470: Us  ©Early Datag1"""ý !de°ew__(cls, v[,J�, descrip§3=''‡ ï Ûobj = int.__n? Í Qobj._S 2_ =\ a  ²# =q ” _ .| ( =Š & ¢return objV �# informW!al( ðCONTINUE = 100, '‡ñinue', 'Request received, please cont% D ðSWITCHING_PROTOCOLS = (101, 'Switchl1s',7  É   # ƒto new p=ó; obey Upgrade headerð¡PROCESSING»  2, 'ProcesØ'a  EARLY_HINT� b103, 'ñ'0suc8 4 aOK = 2
(OKpfulfillPdocum¦.sn qCREATED?  ù pCreatedD D1 c S, URLl> RACCEP? 0(20Î  AcÍ A ™ *‘a ,+ ¼  `•£s off-line+ðNON_AUTHORITATIVE_INFORMATIONª6203“ö'Non-Authoritative I7 Ï †  @Fcachs _Z1ENTà4, 'No Contentñ0', 'Request fulfilled, nothing follows'
    RESET_CONTENT = 205> °set ContentO ðClear input form s furthe O yPARTIALQ ¸6, 'PartialS  cf 
— ÁMULTI_STATUS– ó 7, 'Multi-Statu¾ ñALREADY_REPORTED+ ò8, 'Already Reportedž RIM_US& 2– PIM Us Ñ# redirection †  PLE_CHOICEŠ D(300‹ Ñple Choices',1  Rñ 'Object has several resources -- see URI list')8 ð	MOVED_PERMANENTLY = (301j ÿoved Permanentlyk  m$ p$ g @FOUN$°302, 'FoundÝ± F ½temporarilyF ¬ ðSEE_OTHER = 303, 'See O
M î âMethod and URLù L ¡NOT_MODIFI–ø(304, 'Not Modifiedî rDocumen[ónot changed since given timeVƒUSE_PROXNÉ5, 'Use ProxFàYou must use p Q spec€ € in Locaõ  to access thisÖo €TEMPORAR�PDIRECP0(30»TV ’dÙ �.(8_REi  ù)# RÍi 0 P# clirQerror ¡BAD_REQUESß 4CBad ro   r‰ò syntax or unsup—! mA¢UNAUTHORIZ4ªUnauthoriz0No Â dission«+ °sschemes_ qPAYMENT¾ $IRc  
1PayX Ã .irg  ÎPchargI
_ �FORBIDDEN¼4˜Forbidden e š  ¼ 
¸ @will¯S help¾  +À%(4(Å›~Næ`matcheª3URIL pMETHOD_S TALLOW "¬ „A(
Sº± is invalidg ’CCEPTABLE ~c ˜cceptable#  àPavail  †�preferrei $ma;á_9«ENTICATIONã7�ý“ AuthentiØ “ø ›, be withý(Qbefor5sceedingb"s_TIMEOU*   k  þxTimeoutö   Âód out; try again later] aCONFLI_ð409, 'Conflict', 'Reqñuest conflict'
    GONE = (410, 'Gone',   ñ)'URI no longer exists and has been permanently removed')A ò LENGTH_REQUIREDe ø1, 'Length Requiredp òClient must specify Content-7 ] ôPRECONDITION_FAILa ú2, 'Precondition Faile 	 óin headers is falsec  ¹ óEST_ENTITY_TOO_LARG.@3, 'Â  Rù Entity Too LargB �is too l  ` 2URI] 2ONG%4\ -‚Y 8ong*  U   T óUNSUPPORTED_MEDIA_TYP² ÿ
5, 'Unsupported Media Typ° —body in u1 jformatóED_RANGE_NOT_SATISFIABLs 6K-ùed Range Not Satisfiabl„ �Cannot s  Wq¹r8  }EXPECTAÿ¿7, 'Expectaþ  !`could q #bet iÅ²IM_A_TEAPOTœø8, 'I\'m a Teapot•ÐServer refuseòð brew coffee because itk1a t@ .Ò €MISDIREC»r 23€Misdirec¸Ix  !isÇ  Oõ to produce a responÚ�UNPROCESSªàP = 42=‘UnprocessG ¿+ALOCKg 42þbLocked ‚±_DEPENDENCYO  È² Dependency1  NBEARL)  › åCEarl! xUPGRADE?0426Ãfpgrade?m	 ?s2²	ó AyÄThe origin sÅŸ‚s the reƒVto be<#al½ Ï AMANY¯ BESTS»@9, 'Ø AMany± Hests¹ w AuserPsû &m/ s s†4’óa given amount of time ("rate limiting")™   ÅÒHEADER_FIELDSoÌ.31§! H FieldsÛ ½ -Ãis unwilling{ C	<ÿss Ø fi =are)qUNAVAIL­òFOR_LEGAL_REASONi5Â qUnavail¿ýFor Legal Reason}À @deny¾ "acº o½ ¢ `resourP0s as0nce…1a lg Pdeman–#Maerrors ðINTERNAL_SERVER_ERROR/ 50‚“Internal LE: 3  got itself!@trouE ŒðIMPLEMENTED = (501, 'óNot Implemented',
  ñ'Server does not support this operation')2 øBAD_GATEWAY = (502, 'Bad GatewayY ñInvalid responses from another sx c/proxy^ òSERVICE_UNAVAILABLEf 13, ¨ ø ice Unavailablen 3TheS @ canÉ óprocess the request due to a high load{ Õ ‚_TIMEOUTw C4, 'Ù Œ Timeouts gø { 1didEõreceive a timelyo òHTTP_VERSION_NOT_SUPPORTEDz @5, '$ � Version ÁSš
¿Cí tfulfillé g ñ)VARIANT_ALSO_NEGOTIATES = 506, 'Variant Also Negotiates'ìðINSUFFICIENT_STORAG�ò507, 'Insufficient Storage7 ¢LOOP_DETECÎ ð508, 'Loop Detec`  ÷ aEXTENDö `510, 'è ‚ExtendedP ðNETWORK_AUTHENTICAT5aREQUIR: G(511ÑñNetwork AuthenticÁz Requir= 5!clÄ Qneeds7 ,cgain nT  acSp')
r"""¡S/1.1 C ðlibrary

<intro stuff gYshere>
<ú  €, too>

E `Connecg. ðthrough a number of "st›ó", which define when a‚ õ
may legally makem ƒor fetch™ó for a particular
/ 0. Tádiagram detailQ1se � p transi» 1s:
×R(null.1  | J  | è (! v! AIdle	 2 3putˆ .  Ê½est-started9 0( pÄðader() )*  endhe sK 4entH /\_ 	& ? T| getù•() raises<  + =(  O &| SError7 v  JuUnread-a 0 i#[R–--8 ]k | T  ê| .R !() |“Î  È  ©   Äö*-uê � 4 Ê/� 	 /  ¶ |  P/  «Í  º  �¾  & �Req-sentÊ  2    |hð .read()
         /v
  ðRequest-sent

This diagram pre òs the following rules:
  -- a second rG ô" may not be started until {response-headers-read}G  Ó [object] canI xretrievK ´ B ðthere is no differentiation between an unv  n ¢body and a#®partially ( �

Note: t$°enforcementv ¡applied by-¡HTTPConnec� ¢class. Thef    R  @ doe½ #t Z g óstate machine, whichD  ims Às sophisticamqclientsˆpaccelerB  Â£/ý H Ñpipeline. Cau¯ `shouldÃõ taken, though: Q   S Ÿ sI 0bey
  Ñabove patternŒ  ® áy knowledge of)tserver'C c4ô-close behavior for certainlós. For example, it‰ ð
is impossible to tell whe%w b will i  ¶ ~ I QUNTIL1 4 ½@ havž eŽ 2ad;®@mean.`at furn I {sÕ�placed in  4he ‡/iW 0Tn thaÛ  § 4½ 0NOT¨ Ä ”Æ Á.

Logical SHò !__Â 4 __ì (
- $      ‚---
Idle  ‡_CS_IDLE UNone
�=     7 °REQ_STARTED 
7  �  
 7 3ENT 7 U-ò    7 ¥ <, _·>± -ê-^	O  C ± C ?ent@ 5   C ½ C P"""

õú rt email.parser tmessage Dhttp $io
 r  dsocket BcollÐòs.abc
from urllibm u rt �split

#éMv !, “ _B1(),y Ò  /ð tus code constaÈPare
#& Ï!on›@omitì sYðicity
__all__ = ["R a1",  ‘#",˜ê PExcepþ . 3Not-  ed !Un‰‹Protocol?  òTransferEncoding9  Ÿ &«edFileMode? @IncoÁQteReao  InvalidURLD ƒImproper’ 1ionÍF À   "CannotSeðndRequest", "CannotSendHeader öResponseNotReady",
  à"BadStatusLine0   pTooLong ðRemoteDisconnected [errorJ ri ñs"]

HTTP_PORT = 80 S ó443

_UNKNOWN = ' S'

# g ðion states
_CS_IDLE* QIdle' °REQ_STARTED ‡-started$  EN„ '! Pent'
j ð0hack to maintain backwards compatibility
globals().update(http.â :Ð.__members__)Z �another b ‘# Mappingô u� 0des� õofficial W3C names
hÿ
 = {v: v.phrase for v in    .values()}© ðmaximal line length when call� @read °().
_MAXLINˆQ65536 ÐHEADERS = 100S y« /l a ABNF 4ö&://tools.ietf.org/html/rfc7230#section-3.2)
#
# VCHAR¬ó= %x21-7E
# obs-text   ‘80-FF
# hû±-field   = 
 -=ƒ ":" OWS   SOWS
# %  T u= token + O #*(- ‘content /Ž efold )1  € óvchar [ 1*( SP / HTAB )L  ]?  p e  ó   r  ­  å LCRLF\ "
#  ;« Roleteô C ?ing) Rsee S’` 3.2.4ÞO P= 1*tØ ” 
  �"!" / "# $ % & ' .*"~ A/ "+ - . ^ _ ` | ~A ÞDIGIT / ALPHAb R; anyañ, except delimitersÏ xtdefinedWÃñ5234#appendix-B.10±he patterns AbothR and Vqare mor‚iQ±than RFC
#  iRallowI ­¢_is_legal__ÓP= re.ÖÐile(rb'[^:\s] ðr\n]*').fullmatch
B )ilD ¨ E ã\n(?![ \t])|\r Ð\n])').search`These % ac\ ï Anot Ì  ed within P@ URL00hs.³1SeeÌsvG398693W0the?  ; ±0A p¤ q ƒ ðPrevents CVE-2019-9740.  Inclu¤ è8rolá Àsuch as \r\nE ñWe don't restrict- Às above \x7f. BputrÊ1() ‰1s uõ€ASCII.
_k ðains_disallowed_uóLrl_pchar_re = re.compile('[\x00-\x20\x7f]')
# Arguably only these _should_ allowed:
#  _is_ $_ud se ðr"^[/!$&'()*+,;=:@%a-zA-Z0-9._~-]+$"x ðWe are more lenient for assumed real world À ñ	atibility purposes.

# T°  î aactersT Cnot ª ð within HTTP method names
# to prevy óhttp header injection.
_contains_disR _F c1_0
# è �lways set`ô  Content-Lengthw  ü ~a ðs because some
# servâ ñwill otherwise respondé ñ! a 411
_METHODS_EXPECTING_BODY = {'PATCH', 'POST ñ	UT'}


def _encode(data,( =' ð'):
    """Call  ., ñ"latin-1") but show a better error message."""G 2tryP  T oreturnS /  except Uni� E£ EY  asb L a) (H  n   2err½ Ming,  obÿ ^start :end ð "%s (%.20r) is Œrvalid L(‚. Use %sƒ ²e('utf-8')  ¡   À"if you wantª‚send it véd in UTF-8." %Ä (ß‘.title(),X[ò À :
 Bend]Þñ)) from None


class+M²t(email.À P# XXX�:uã„ of thiskQis inŸ  # d.Å@.CGI’ðRequestHandler.  Mayb!ve* ð 	 rG @that	Àdoesn't need!rbe part‚ áe public API. ¥ sAPI hasF ònever been defined so» cû {šbackwards„E Aissuˆ ± @âgetallmatchingPcs(selfp«p"""Find¨dlines > „ a given ×
z  o ÀLook through#A lisý v d and fb [ M 4 ñ  (9 `their þ@inua C U).  Ak 2the " iX ™ Ð1ed,’Ñout interpretI @.  I%eÙ  É'‚occur, a1 L Remptyo 4is Z B 9 ðs multiple times,[â # Rrence#L DCaseª`imports!inV.}É ¤  ˜! =<.-•r() + ':'| 0n =â™) …lst = []  hi 0   u ë Cc.keys(} z   !if‚Ð[:n].lower() «== name:
  yhit = 1 ÿelif not line[:1].isspace()A 0A nif hit, °lst.append([ )5 ó%return lst

def parse_headers(fp, _class=HTTPMessageŒ @"""P. ó s only RFC2822 < ñ from a file pointer.
x aemail < ñr wants to see strings rather than bytes.9 àBut a TextIOWrÐ ñ r around self.rm  would buffC roo manyG F ™ !thn Beam, ð which we later need— rread as% ‡  So'   G rcorrect" e here,1 h, for ñ ƒ "toi1""" ;A= []  wh>7Tru@ À` = fp.‚   Ö(_MAXLINE + 1Ûbif lenð4 > % 
òraise LineTooLong("† ƒ"N  sFk $ )n HEADERSq  NòException("got moreò$%dE1" %¸ J Ž  q óine in (b'\r\n', b' '¢rQbreakQhbÄ = b''.join(µ ò.decode('iso-8859-1'q $Æ.!"r.¾( ) Cstr(h A)


? ñ ÑResponse(io.BŸpedIOBasRŸ P# SeeJñ 2616 sec 19.6 and A1945 6XsdetailsFS# The†ä�ocket obj£Fare ß oÖ|  32.2¤notes an eµ� pMIME-en8dÁ átext following¶ b2047. ž ±asic statusb )  DC  acsª â  ¡�__init__(òñ, sock, debuglevel=0, method=None, url
 P# If ºr‘p includâ ó  content-length‰,ñ¥  Z’# make su¸tS ð client doesn't £Ú7the? òspecified number of¿ . ¢ iG ÷, it will block untilF  É @serví`imes o&’nd closes– Ponneclˆ!isQ E hMbn if aK_ñ() is done (with\   size) whe¦F  “0.fp3 Ped orÑ€.  So, nç6lf.^ 'by@ =qs unlesº ¡y know wha_ y ÂRdoingµ ˆv =.• G("rbÀ& (' =5ƒ % _@# =Iµ j bËY2is &ðed via urllib.  TÃhe clients
  ÷)# of http and urllib expect different attributes for theA £headers.  
 Ñ is used hereX ƒsupportsa ˆ.  msg i‡ ñprovided as a backwards compatibility layer„  ´ … Ø %.
 Tself.’ !=   v f= None( `# fromÔ À Status-Line¶the responsð H òversion = _UNKNOWN # HTTP-V 
† sX . $ #m ;Cod] Jreas\ A # R g-Phras½ Ž ychunked` ßCis "! q" beingœ?¢ " ]_leftF @# byù áto read in cur; 
N mlengthJ  ” €# number`X /inj­will_closeO p# conn "  " `at end[ ·™ Pdef _¸ _Š(7!):  • lñQ= str @.fp..   õ(_MAXLINE + 1), "iso-8859-1")A pif len(1 D) > 4 b  f `raise ]’TooLong("�  8 
N  ¡ ú .debuglevel > 0M òprint("reply:", repr€ 	– 1not^ 
= Ñ# Presumably,úbserverGd  \0ectæVbefor¥ Ì `# sendMua valid¿. ( ô “RemoteDisU Bed(" °½dÎr ‰without"L  P  "} E:tryõ ´", u 3h p.split(6, 2Dúexcept ValueErrorU f  ¡ j ! =ƒ	b 1b  2   ÷"÷ ‚  ; ƒ# empty y úause next test to fail  > 6 '= z 0if < p.starts— ("è'/"? E ±©_æ(á 2Badc ®ˆ3The�P codeGÓa three-digit;}Ú0 =  
‡ $ifa „< 100 or Z> 999Ü × ¸     ŸA dreturn¼Ÿ  ÁQbegin { Ñ è!is· ÇÍ À       # we'ðve already started  ÷ing the response
  ureturn
 #3 þ until we get a non-100C µwhile True:C  ^ €version,‰ @tus,V Àson = self._˜ ™_status(): #if4 Ê != CONTINUE]  a Ybreak9 a# skipê ±header from »  F ¿   N ° 0fp.² úline(_MAXLINE + 1»  6 pif len(= D) > - Á  - óraise LineTooLong("»  j "^  W ! =é k.strip= U aif not$ v ;7 ›ïdebuglevel > 0B Tprint¬ 1:",m )EI @code¬  ðê  ó¸) 2rea	 Ù 3if Oò in ("HTTP/1.0",  Z0.9")ª  # Some ser; Ò might still ò  "6 õ	, treat it as 1.0 anyway¡  ¥  G iÁ%10 &elœ .sUswith£ – J £1   # use Ô !1 64for Çx where x>=1x spJóUnknownProtocol(µ šds� �Ãmsg = parse_ (ª 'fp:  ˜ .  	 ¸ €hdr, val¬F S {.items(¨ `Nphdr + "Y7val„ P# are–$usÕõchunked-style of transfer encoding?7dtr_enc÷ ˜ Tget("6 -6 }iU : Band E Ó.lower() == "„ "ƒý  ! =$Š  ÷   ¶_left = Non�,elä1 ¦ed = Falset0# wÞ épconnect¯�close at1end"%heÉ^  C _4 úb_check (‹ doŠ havö  Content-LengthV ð# NOTE: RFC 2616, S4.4, #3 saysB Æignore this k&isX7¤ lc / $ 	Ücœ # 
Ù  Ù5 â´
Î:try ÃC  =  
¹ÿexcept ValueErrorI 	 h   ’Àlf.length < ÿ0:  # ignore nonsensical negative lengths
   Rself.! u = None' Uelse:  < -    ó# does the body have a fixed‚ µ? (of zero)7 øif (status == NO_CONTENT or  ÕT_MODIFIED or>  • d100 <=- P< 200=   º # 1xx codeþ É p_methodx "HEAD")î 	%0
v A# ifé ñ%connection remains open, and we aren't using chunked K £a content-†àwas not provid1 ûthen assume that| M µWILL close.  b P ô Qwill_!  ¤ $  -$ © ! A ¥ !is,2c b= True9¢def _check€ (O @  L0 =  à.headers.get(" e"7* @versZ== 11¿Ð# An HTTP/1.1NSxy isH@d to3y±j unles#Â# explicitlySdT 0 ifºn'! "SA" in w.lower(Þ  1   breturn    CFals0  d# SomeÅ À0 implementatsdÐsupport for psNÛ#’ A#s,Œàrules differenQa,.±� ‘For older† �, Keep-AlW—indicatesw m ./if× kI aI xòAt least Akamai ( es a "C‰:¢ "" I,`which d8!se
@be s"by\YlientÁ  †ë¹ ð   ÔfProxy-³ –æ netscape hack{ py pG   Ý
8  ˆ"±  ¢² £otherwise,?@ it è_@ õ �_© ô$fpò%fpE Ø 	Ž1fp.e"()Ÿ P  1 k:try	0sup�? c # set³ud" flag} kfinallA À*fpY  " } .Òã Ÿ }# These³1areª(ñ enefit of io.BuŽ!dRý…ð# XXX This class should probably beð@ revised to act more like
    # the "raw stream" that BufferedReader expects.

5 ñdef flush(self):J   ‚super(). ) 0if * 6.fp, 0 eelf.fp0 1  ^ Œreadablea ñ
"""Always returns True""":  S   ­ Š# End ofå rmethods#  r �isclosedr   c 1 if*âconnection is 3 .€  # NOTE: it! ‚possibleUòwe will not ever callJ …(). ThisÍ #Ò ñ   case occurs whenG _4  f ÀTRUE, length ²None, and wæ G L  [0 up ûàlast byte, but½   p 6it.‡ 
 � IMPLIES: Í † `FALSE,&nÔ ­ ž ALWAYS b‘ à Òlled, meaning? ’)Ô  6ful˜ ì[ &  ú Ô ë Ð`, amt= ­•: 
�^ 2b""R  E4 _@ª == "HEAD"; ’ _2( F Z !am4  « 
S q# Amoun" ðgiven, implement us6 ï Einto® l 1b =ßšarray(amt‹ 2n =n= *(b! ¬ ðmemoryview(b)[:n].to6sÛ Oelseµ  × ¹ À (unbounded v ò) so we must check’ Ð	Í #Õ^vchunked› í Ÿ 
�  ! Î B _} Call_. /()M ˆ $ T sC0fp.S     >tryž   N Q_safe¤ Ã.‡ 
� 1 °except IncooteRead\  o— N   Frais§    4… I = 0˜ 	Y  2   #Ú ñiything; ’| Š .  Ç÷ 7, b³0"""Þ ¿alen(b)Þ s 2  é! b*]  èenumber{ !of-  H&adR Ê$ N/fpý^ 0»  î 2 2X  ª
Þ‡ „=Àto_chunked(bC)

  õif self.length is not None:$  + ¸if len(b) >1 
%  ) ñ# clip the read to ù"end of response"^  9 ÷b = memoryview(b)[0:› ]´ q# we doª  use _safe_n À() here beca õ
this may be a .will_close~ ñ# connection, and® @user T `ing moU  ytes than I  T ‡providedO Ñ(for example, A Õin 1k chunks). 2n =M2fp.k Fto(b  !ifä n˜ bl # Ideally,ðwould raise Inco~ 0teR�!ifÓ ‚content-éƒ  zð# wasn't satisfied, but it might break V ©atibility.B ¨Z_P(Ä /elcE Ÿ Y -= nb $ 
 È  † ‚return nEAdef 0a_next_—`_size(C )Z !# C Í * Á * Q fromY6filOKlineÕ  Ö(_MAXLINE + 1U "  X% €  Ö ÕÑLineTooLong("± ‡ "M 0 = J ˜.find(b"; Šf i >= 0[  / 6 Â[:i] # stripç µ-extensionsŠ:tryB X@int(M F, 16’ úexcept ValueError<  *1oseE 5…ð as protocol synchronišFon i‹  #* ¥bably lost§    Ê.  Vþand_discard_trailer ©‘*  * 4 upíõ CRLF terminator˜ 0###Ñ e:³ sh´ w„have anyJ %s!2 ›while Tru� mh ñ l )  pâ  v V . ˜  
Þ  ð# a vanishingly small number siRªEOF withouÂB @sendB „ˆ  "    	  î  ‹ó in (b'\r\n', b' 'ã @   D E $geOleftRg�_( òRa newJ %wecessar9# 8   =�1 at, ó rcurrent+ Q, neeSÅ& i1M ÂD No A Àchunk, shoulãd read next.
  ó0# This function returns non-zero or None if the last chunk has
F ` # bee> &ad\ ' Ö_left = self. � Sif noS , Ä: # Can be 0~ .  p "if� .   i¬ t¤ :'  + ±# We are at¾ Send o? ’, discardN M end@ µ `_safe_<±(2)  # tossO KCRLF[  $æ 	L >try� ' Å e _¡_ isize()K þexcept ValueErrorY ú	raise IncompleteRead(b''I 
GN== 0J #ð²: 1*("0") [2p-extens6 ] 	¨  ? :S_and_p‹_trailerÙ  1 B# we¦ñeverything; closeqo"file"h ' __connZ  PŒ Ñ	E © 	#  ) rü ·
 Adef ¹2all·0ed(Q )Pgassertáed != _UNKNOWNH   vÖU = [] ;¦while True`  <   ¶ rB_get– ³  
/isK _ Ubreakš     µ b.appenù .2’ ) :  &I = 0^ r‘b''.join(j G 
é
P )ÈBinto3É?, bÌ ¹total_bytesÙ ömvb = memoryview(bÒ íy}Ç ( ¹ çif len(mvb) <=
†/ n–S m@ 	ù1 !PO - n5 ¹ N + n½ Stemp_ŽFvb[:[ ~‰ º D Ã2 Y .n:P V? +=É  ú 0Â ùÀncompleteReañd(bytes(b[0:total_ ñ]))

    def _safe_read(self, amt):  # ñ"""Read the number of G ² requested.O  0 óThis function should be used when <amt>B "! "" µpresent for~  — qing. If‚ x ðare truly not available (due to EOF),0 n M ¡IncompleteÒ Qexcep¦ 0can� £ �to detect; • problem.D 5""" pdata = 6@.fp.¬ (=! pif len(( 0) <YX ,jraise — . …-< )R preturn R s
ÂCintoÆbÄwSame asîA, bum ¹ @ing > ¨ a buffer.ê Qamt =Ì bŒ nü  ? (  Oif nö Ùr(b[:n])þ nj ö nó  ³ 1ê Jn=-1í ßð	with at most one underlyê Ðsystem call. \bat lea) m ” 3 isCed, ‰ Ïthat instead$if A N "or û_method == "HEAD"âbhM chunked0 …Æ#1_( (BC `length”  :˜ Pand (©‚0 or n >§ * X ±ó *Presul#‡ 1�  r )  t nÈ : Æ_close_conn(ÿ/el¿ E  œ " -±r M Ã QOpeekPP# Hav5tÚ enj�s IOBaseô`line()x –0 mož0hanu"#ñ �ea time Û  fp–’*Q ð )Ž0fp.'  Ç¯  l ã ñ  " z, limit€Ñ W # Fallback}’Í ¡ ` whichw!s Æ  ) v À [ Õó fuper()ÓÜ 9Ø _!is}± Y (/ 1 < G K	" >T e’ O  Õ e 	” Vàlimit:
         ðself._close_conn()
   Qelif   õlength is not None:&  * % Ö-= len(resultM rreturn  
> ðdef _read1_chunked(I F, n)_ ò
# Strictly speaking, _get4 ð_left() may cause more than one _ ,n  ¨ P# but tÌ �ok, sinc/  ó to satisfy the – ¥ protocol.I  | " =#“ , "ifI / !is@¦ or n == 0ë  ¢ r'8b''@  vp(0 <= n ~ ) > 8n =l `# if në €negativew `largern- o  2Õ 0fp. 61(nÉ £.‚  ð&ad%  x !ot~à öaise IncompleteRead(b"";  x 'Bpeekò&˜:tryþ 77kexcept+
O +`b'' # "õ doesn't worry about¾â‘Z 5eof< h ãis allowed to ˆ zð requested.  Jus	  VK Sentirgö, and truncate what we getvh ‚0fp.ò (S6)[: ]<afileno[/L % )7 ‘getheader: ð, name, default=N A'''Rºsã ‘ value of F ° matching *J "*.j  ¶I( ö re are multiple0 @ !s,M Z s* Hð combined into aÓpgle strn ñseparated by commasjjspaces† ,nov  <cfound,å3s **L & i 6! 0šspecifiedn  , Ü  Ð ° unknown, r$ð
s http.client.ResponseNot2yJ '+W mÜ _  R ø> £ .t@all(¿)ý 	‰ãif isinstance(7 ,‰/  Åvhasattr §'__iter__'N  F d ;els|) ”', '.join\ Ëàs(self):
     ó"   """Return list of (header, value) tuples."""
  ‚if self.* ¥s is None:!  ( õ	raise ResponseNotReady()% rx (O ¡.items())
+ ñ8# We override IOBase.__iter__ so that it doesn't check for closed-ness
L Ddef ; t )´ �  Š y FD óompatibility with old-style urllib rå "s.:  g Linfoc 2'''mÐs an instanceuñthe class mimetools.Message containingÄ  \Pmeta-b òrmation associated£  P 3URL�  3 PWhen  `method´PHTTP, 4se Ë±are those rŸUed byx  @ �server at: 8 Á ðretrieved HTML p½ x(includ½ ôContent-Length and  _Type)µ F´ a2 E ¿ … will be° Ñpresent if (a¨¡now usual)¿ Í @passê –ack a filC l¦ %inæ  ttPe FTP% ó Õal request. A~ Ö )$er¢  š  UØMIME type canÂ 0gue› `local-· ,’ Surnedq sr †Ö “a Date reˆ 1ing D ý	's last-modified time, aØ |0giv?  ; @ siz+ 6nd £ Õ< Í1 a Ý J @ !'s�. See alÝµ qdescripñ!of° .w module(5'''v rÌ	µªg l¬h „real URLë Ül `In som½1sesS ] _ð redirects a cli’¥to another¥  °1 ThV±open() funcï õhandles this transparently, but inG ‰ º Àcaller needsºkQwhichÐ  }“ 5wasE ²  þ!o.– '#) A©  u9bto getÊiF  Ý s �œ2url%  Bgetcode™g`tatus . Awas ù° ä £,ã !orµ  !  Ý`is notœW ´ s} "

¿ 9 QConne¸:Î á_http_vsn = 11‚  €_str = '9 R/1.1'3 ° _W =PMB Òdefault_port   Q_PORT Pauto_E r  ðdebuglevel = 0

    ñ@staticmethod
    def _is_textIO(stream):    ð"""Test whether a file-like object is a @   o  rbinary J .I  óreturn isinstancex a, io.TŠ aBase)
2 µ ò
get_content_length(body, Þ 
Ä ƒGet the 1 -1 ‘ based on  > .s  ú %If  ã âNone, we set Cx !-Lx s: 0 fory Ñs that expectÁ  N  a _ ñ (RFC 7230, Section 3.3.2). We also`  « 
d  a M #nym * i¦ ax ˆYbytes§sand notÂ™"if§ 0is ð  Ã p# do anÚ °licit check™ X  1 õ here to distinguish¶ D  between unI •   ™but empty. #ifç ú.upper() in _METHODS_EXPECTING_BODY¬  l f0S Oelse+  Ã £if hasattrYg'read'Y f #[   † 
[ :try…  \âes it implemen°ñbuffer protocol (Ø ,  qarray,  ))?æ ñ mv = memoryviewÀ )" — @mv.nL s úexcept TypeError¨ Ipass"Ä á,€"k 3lenˆ l  Žð
_init__(self, host, port=( õ, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,e  … ãsource_addressN çblocksize=8192º  ~ .l $ =v V  
R : =  
- j 5 =  
#  Ó ! ={
 _K= [] Ÿ_response9 _ò  ‹_CS_IDLE? -< ptunnel_‚! 
 �! 
Æheaders = {}>á.^ !, O H )FPelf._à    (	  Ò5 ‘_validate¨ T ( `# ThisÅ�stored asÈ}� variabl¹–allow uni»p# tests×preplace¨±with a suit< kmockup^0creš Cconnî $¸  Bset_|Ï  QÄ´‘"""Set up6 ]àport for HTTP óCONNECT tunnelling.

  úIn a connection that uses HTTP < ðing, the host passed to Q àconstructor isK òd as a proxy serverg òrelays all communica… oO  n xendpoinr R`set_Ñ à`. This done bb �nding anÃ J Ë srequest¸ 
— 0wheeçis established;v ðmethod must be called before„ O …has been˜ ] ð	e headers argument shoul^ p a mappç ‚of extrai 3 uto sende Awith� ." 6"""Õif self.sock:#  3óraise RuntimeError("Can't set upfH for7&")h e È_U,x  cport = 1get$   (-   )  $if3
´ 
f U=, ? Oelse9 s.clear(Å Ydef _™  m ,!!, Ÿ S !if  ;Nonl 1i =6 ¦.rfind(':'Ù  yj  0]')  Ð# ipv6 addres¼¥have [...]Þ  ) †if i > j“     >try    Ã a = intsj[i+1:]š  ' ²except ValuN  ¢2ostF ð == "": # http://foo.com:/ 
 /È  r  ¡  w�.default_ 1 ãG   ÜñInvalidURL("nonnumericº‘: '%s'" %ªÆ  ›­:[:i‚�  ° çÄ <B and  0](6'[' "-1 .]'€— V1:-1]‡qreturn â¶  ß j°debuglevel(i!,  )e   .& " =" F Ò? 8 zT = b"›Q%s:%dÏ€/1.0\r\nr(Ñp T ÿ.encode("ascii")I ª&3= [� ¦ ¹  0, vÏ3 in�p_ ‡s.items(Í  D ¢append(f"{ A}: {O }Ñ ¯ �latin-1")ž .C !b"2   P# Makû�a singleë!()}ð instead of one peró line encourages
  ÷+# the host OS to use a more optimal packet size instead ofC ôpotentially emitting a series of smalH %s.: õself.send(b"".join(headers))% Cdel  
 ±response = E  q_class( Ñsock, method= _ \ à(version, code- ”ssage) = R ö ._read_status()ƒ !if5 á != http.HTTPS& E.OK:ª  h} fclose(|   ðraise OSError(f"Tunnel connection failed: {¡ Q} {me¢ ¦.strip()}"Q ªwhile True~ ûÑ 0fp.Ó   Ö(_MAXLINE + 1J  › pif len(& D) > ) 
[  ) Ä ÒLineTooLong("¯t   - aif not J ð# for sites which EOF without (X trrc ] Ybreak  Å  ùó in (b'\r\n', b' .')„ D E Áîdebuglevel > 0; rprint('ý 1:',æ 0.deº#(): de7ß¦ƒ B"""Cù ˆ—õand port specified in __init__."""® §  ÷†_create_Q(-  2ƒ .þ,<  h "),Sstimeout æsource_address+7  s @.set @opt( óet.IPPROTO_TCP,  ÀTCP_NODELAY,s� "ifw !_t_• 
dk  ‰OY  M  ßÿ Z ­  >verB_î \…_CS_IDLE¦ ;try• 4ockn ã *  _ Ô :ock2    ­ ./ y = None6 ! Cock.2Q   #  € it manui0...Ü öre may be other refÝ0fin+ 
€ Ù¶ $__ 	† %if
@ Ÿ  ¹9 Æ Y Ê = ´ Í}j, data¹`Send ` '°0ser«¢ ` ``` caný  a ð ng object, a byH vn array! L “file-like � that supAs a /#()Kô , or an iterabl6 Ö ’]   -í!isî
P" šauto_open oÅB;elsï 1 ”À NotConnectecd()

  õif self.debuglevel > 0:   ' õprint("send:", repr(data))' ’if hasatt ª, "read") J n r `Ing a N v()able"u  * ‚encode =Æ ¢_is_textIO¡    + 3if . 2and0 ö 	 3 ú 7 °ing file us «iso-8859-1’  wh% 1ù  M  3€block =  .Õ ~ JsizeÝ  6 aif not1 & X  & Ybreakî   ò 5  … T ‘  .í ?e("á  Z ¶ Psock.1allpA 
Ã ereturnš :tryŒ I D úexcept TypeError> Ñif isinstanceƒ ð, collections.abc.Iter9);  Æ �for d in^  #    �  ! Nelse; Vraise¶  ("lõ should be a bytes-like object "& X  ƒ"or an iÒ ò , got %r" % typ)ÝÀdef _output(Å 7, sò"""Add a line of * ö to the current request buffer.7ÁAssumes that2 H õdoes *not* end with \\r\\n.Ü &""è  ˜ #._] ˆappend(sÀ  "_  ÁÇ  Î WË ¯SýO v É ] O€ a  @KG;Tru^ Ih! = JFBá ß…  :QyieldmÂ O© —
®ómessage_body=None,¾ç_chunked=False@"""SwÁ#ly»%edÌ ®Qclear¸}‹  tA‡shSextraÁ0  +   (A © @ mayß specified,8  ðV  ed    Y0ext—(b"", b""uñmsg = b"\r\n".join#R¨àdel self._buffser[:]
  õ self.send(msg)
 öif message_body is not None:&  E ù# create a consistent interface toJ b  < ¸if hasattr(n ©, 'read'):.  2 ò# Let file-like take precedence over byt .  ThisF   Ð Peeded  àallow the curr¿ ÿposition of mmap'edE   ‡ sA b‰ n÷ ­o account.2 ‘chunks = v_ä  Iable); Nelse
>try #@this²`solely¡ Pcheck	 Ksee Ü	l  A   Á# implementsÿbuffer API.  it /would/ be easierG ‘to capturx  PyObject_C‘ BT Ÿwas expose Œ žto PythonT ! ¯memoryviewF ) ÿexcept TypeErrorAZ C Ä:ite¶
µ ,   s  * Vraiseœ (("0 shp oaàs "w O  !"ozp or an ¾  w�, got %rH [% typ¯û ´ ” #O� e=.anxE 0canò passed directly�Þsocket methodþ A Ç	2, & Afor * 2 in	 s3!if(   G "ifòïdebuglevel > 0,  0 òprint('Zero length} ž ignored'p 7 Šcontinue   ¡if encode_¦ bed and” ÿ _http_vsn == 11• #€ "edG ?ingw] ¡ = f'{len( ¢):X}\r\n'.‚ ²('ascii') +U / \L  · A+ b'< " A·e 
ó ï )R# endš  _ransfÝ � 0b'0¤   '?ð def putrequest(, ,Žý, url, skip_host=False,á "  $  ac²_<2ing/ @"""S± #a n  å Êrserver.À    `method'ó! specifies an HTTP request method, e.g. 'GET'.
  W`url'< ôthe object beingE e@ ¸/index.htmlH ó0skip_host' if True does not add automatically a 'Host:' header
� ! `H ÿ accept_encodingS nÕ Q   'AC #-EC j E"""
2 #µ ða prior response has been completöthen forget about itO¥if self.__E <and Å.isclosed():ƒ  < y= None
¨ ðn certain cases, we canhÀissue anotheÇ ÿöon this connection° # ¶occurs when‘ `#   1)_ Pare iF °e process oé n�$ a$õ.   (_CS_REQ_STARTED)à  O !2). _0to sdeviousE uÐsignalled thab™ is goingO a   to K ¹â E upo·ò A  3)/ {sÎ %pr‹ ¢ AhaveÂ¬read, thus† ƒ�determineM‡�point (2)Ä Jtrue'7ENT$Y  if•  z E› ‡  enœ5can;wat willß
P ‹ G  8  ï Apassy€e socketd7theK Ü@(effSð vely meaning, "ø eï +no¸ w"), andL y Âopen a new o; Äis madeÛ _Note:Âfexistsç ³*can* startp a Y  ‰`   We ø XPallowÐo begin fetch v"toN7newá O g ò, however, untilàw¬q— S d�state == uFIDLE½ v N& % šP Jelse9 qraise CURSendRI(Q )• ’validate_o( ' 0# SO 3 ä for use laterbOFphasve 9 =Ô„ `url =  eor '/'Þ 8 � ‡path(url˜ ›q = '%s  C' % Á ,U ,ÂÇhttp_vsn_strB d coutput%»#e_\ ( )5 ÇU  É*11Š1# IÔ@some·Sndard4às for better H÷TTP/1.1 compliance

  ùif not skip_host:  ) ó# this header is issued *only* for Hf <  òconnections. more specifically,\ ¿means it isC   h u ñwhen the client uses ?new;   ™ C‚ ð() class. backwards-#atO ~ Ôwill be usingê ¤0 and thosŠ �s may be…   0 < Gò
themselves. we should NOTé F ÿ t twice; some web servers (such as Apache) barfC  =°y see two HòÛsû IfŸ ñneed a non-standard port,include»˜v  9Q.  Ifª`requesì2 goïrough a proxy,D  1but<  ¢" oH ±actual URL,Ã   F  _ .ç ½netloc = ''6 þ
if url.startswith('http')) 2Rnil, P ",   @il =I ®split(url)‡  ‹Š [ ?try x 9 0_enÇ € ý.encode("ascii")Û  8  except Uni, E2 _Errork #Oidnaj ‚self.put ('{', ¹ ¡ Oelseˆ 1if P _tunnelº á   =2  1  Ü 1   1 ¦  K |   C  )  ` t     & 
 `  J0 =  E \ g ýâ ô# As per RFC 273, IPv6 address °be wrapped k? []M Ê us–sÅÄ5"ifïfind(':') >= 0Z eá ab'[' +? ó o+ b']'g  ¹# =:€default_ m È„  ¢ tÀhost_enc = hÿ
ost_enc.decode("ascii")
  óself.putheader('Host', "%s:%s" % (hS ™, port))
L ð# note: we are assuming that clients will( û attempt to set theseO ¨ � ðs since *this* library must deal withF D àconsequences. C ² also means¡ @when@ @ supÞ ?ingK z 1ieså pupdatedÆ ðrecognize other forms,S  X /isN  šó should be changed (removed or c ,).nðwe only want a Content-EncodxÓof "identity"?‹we don't� ô # e< ðs such as x-gzipˆ ©x-deflate.= !ifÏ¡skip_accepu‚ :)  ÎcA1 ³ D', '² '^rwe can e õ "chunked" TransferG ’s, but noŠzPNOTE: 2TE ]P implÓ*Q*\ 	Á #¾  TE± ˆ ° pif TE iLp_ 0d i
eu "itÅ`appear# av  Ùsnection: 
�— 3Con0  Ÿ (TEš Jelse—á# For HTTP/1.0• r server¬Çse "not ë "¡ Bpass›@def rPode_ro0st(4#,  ){ r# ASCII‡öhelps prevent CVE-2019-9740ì dreturnK .«1e('Öã ‚ @vali–s_methodƒ  ‚ C"""V* 2 a  P nameºC putµ 6.""ñ #¦ Chttp�B inj¡ómatch = _contains_disallowed˜ ò_pchar_re.search(ƒ  1if G 5 Cõraise ValueError(t    "f"N  23't †  0rolh¢racters. {* F!r} è H   ñf"(found at least {˜ Ó.group()!r})"®
�Cpath?url|?urltPŽ m=urlj � 7g	!InMŸURL(f"URLO?urlL P U' …U  
VÀValidate a hñ
ost so it doesn't contain órol characters."""
  õ
# Prevent CVE-2019-18348." “match = _R ðs_disallowed_url_p[ õ_re.search(host)? 1if B :  z ÿ
raise InvalidURL(f"URL ca»   {^ F!r} Ã  P  ñf"(found at least {‡ ñ .group()!r})")
• òdef putheader(self,  ¦, *values)¿ P"""SeY ƒ request, ò line to the server.`  � ö For example: h.o ö'Accept', 'text/html'?¬0if � ö.__state != _CS_REQ_STARTED¦  t e`Cannot³ Há ö  " ´if hasattr(ñ ‡'encode'ò  *  # =í .& Š('ascii'S ânot _is_legal_: S_namee [ § VhsError('l  ; s %r' % B ',)r ¢‚ = list( A±for i, one_ Ô in enumerate. 
87 /,  Y fs[i] =i #wlatin-1Õ 4 ÷elif isinstance(j ;int# 1 e 6str1 )j � 8 !if�)il�N ÿ ?[i]p  —C ˜  ›ó = b'\r\n\t'.joinw ¤#]± + b': ' + W ¥ Ë þcoutput
 Ã2endI sÄòmessage_body=None, *, ºç_chunked=Falseÿ €"""IndicaAthatÏlA] ç has been s;õ°This method) !dsM 7
6 ø   The optional ¼  Pargumq °can be usedrdpass a4  ð ð associated withz H ‚ äf	=f•“, 5ENTq Jelsed^œ  è  W Ssend_ñÇ
Öì  �a, url,(Ü@s={}$¸  ‰   
^ 4 `P a coâ%te
åhá ¤ +ž ˆsð ð)

    def _sendó._request(self, method, url, body, headers, encode_chunked):
  ó# Honor explicitly V ðed Host: and Accept-EG Ding:Z .I k ô_names = frozenset(k.lower() for k in= )= @skip6 %{} –if 'host'1 ] ¼  Ã :  [' _/ Y] = 1F a¼ ?ingQ : _: \ ]  wC.put1(� **” 5s)
/ ## Žñing will happen if HTTP/1.1 is used{geitherF òthe caller passesP Þ�=True or ) —followingA ö conditions holdQø# 1. content-length has not been&7setS !2.n  v ½ Qa fil„ Ñiterable, butI Pa strŸ §bytes-likeI µ3. Transfern„ ?NOT„ 1 byz m ?
Ê '~ ~Mb# only§B • ý 1setÉ•backwards½  �ð# compatibility, assumë �pclient ‹&Ãlready handl$ N  ±¾ e  Ü t%�ß  < #Ó 
@ canå °be automatiNùy determined, fallœ M  2 to3"edŠ°  + § £v = Falsù #   š _}!= dZ_get_ (kôI D   $ifÈK vis Noneí '  #ifïì)  1 "if– ïdebuglevel > 0Y  0   �print('Un 1\á size of %r' %‡ Ï  C   F ë— *   <2put›-('YC', '”'u ?els/Y C3L3 ',â(°)` X × Ù  9¦hdr, value‡s.items(Ðø  : „ Óif isinstanceL;strI à# RFC 2616 Sec2ñ 3.7.1 says that text default¨a¶  ‹ # @char<oz †o-8859-1? -  Ó2 = p– ' žÀ self.endheaúders(body, encode_chunked= ñ)

    def getresponse(self):   ´"""Get the # Q from rserver.I  . !If ñHTTPConnection is in õ
correct state, returns anp Àinstance of G R˜ 0 or Àwhatever objI #isE Ued byF ¯ ú _class variable® ða request has not been sentr Àif a previouj $ , k 4 ¤ handled, ± €NotReadyþ —raised.   A WÒindicates thascEàshould be closj 7the8ft will  q beforewc  Å  tŽ @When  ‹ o (ish ð underlying socket× ‰ .? 6"""## =6ior; fbtcompletÈ ö forget about itU 0if “5.__Æ <and 2.isŽ (¼ ’< o= None§ pexists,€n it mus ¶ õ  (otherwise, weP# canqread th 6ò's header to determin x-Æ O –behavior) 
  ±/e:iÂ  ^Œbut was d Ý (th½ Ü anñwere made independ ê!is¤ë› ¡ siÍUa newk s$irèð we open a whole* G ·  
 b@mean5Ke prnAd onL2twovsÜa#   1)8_x:P t :0resšnÐc )�  p	 DioperatBl® ˆ Ð2) persistentˆ e5 ¿�retained œpwe awai)s€ 	ü  us{¶become truef#G p¥ð != _CS_REQ_SENTTQ ý ìW1.__T z . n ëdebuglevel > 0R =öVÙZ  �, K ,Õ  k  rmethod=Ü  tOelse• %L Y š :tryY   ¸ ó v.begin(™   ð except Connecti«onError:
  Íself.close() Yraise ñassert response.will_? É != _UNKNOWN3 b ù__state = _CS_IDLE
% /ifT ¯ ð# this effectively p”  s the conn Qon to © 	m  – ¹ ø Oelsex �remember� ú, so we can tell when it is complet8s $__“ % =ó 
freturn  <   jexceptœ M Ã¿B
try5 ²import ssl
L ! I  M
Åclass HTTPSC\(  )]  ¢  "T�5 Qallowömunication via SSL."ò �default_› =l V_PORT# ò# XXX Should key_file and cert ðbe deprecated in favour ofVtext?Q Ðdef __init__(
€, host, … e=None,h  j  P ÿ ÿ timeout=socket._GLOBAL_DEFAULT_TIMEOUT,= âsource_addressg 4 *,¿  ; `check_Ã Bname* ÷  blocksize=8192¦ « QsuperÉÙ , %). R ,Ü ½  T  
Ú B !Ì 
 
®Eif (pis not È7 or%
 L:   O ÔO F ò U�warningsU  .	 $("¥ ,— Ê	Ãm are "L  p  "ñä, use a custom3¯ instead."tD;BionWÉ :, 2b .¾ % = 	¥ % +& =å 	' i• ] ¨Dà 0con¶  =°”._create_.chttps_$ Â B ð	# enable PHA for TLS 1.3# s if avail) 	   B ¤ ð.post_handshake_auth¸ ¼  @ œ = Z= Tru!I`verify7ý . P_mode`Ùssl.CERT_NONE²  ® 
Bàis None:
       ú
check_hostname = context. 
2 Z  if  ù and not will_verify:3  ? ûraise ValueError("F ´needs a SSL‡ } with "L  P 	 ó"either CERT_OPTIONAL o ©REQUIRED")J °if key_file+ Acert ¼ Qload_( achain(  @ ,J 
c  ¥  # ' %@key / ù means the user wants to authenticate.­ J ôenable TLS 1.3 PHA implicitly even for customFsJ  Äêð post_handshake_‚ 1 isÐNNone Š = i= True½ cself._5 f	$  “ 
Ž† 
	S ¯ b 	K 
j 0defPnect(C )à @"Con Œ € on a gi[Æ(SSL) port."S  ’super().c? *() 0if m �._tunnelq
y E Qerver Ž5 È  0 ?elsŸ sF  Ì 
• ] csock =ž ¡`.wrap_ e%. ,|  €  Œ = &ó__all__.append("HTTPS‰Ðion")

class  ¥Exception(
 ÄQ# Sub) e[õat define an __init__ must call ? . á #9 "€args.  O`±wise, str()íR fail^Dpass¨ 3Not¿ 9ed(µ « - ¯InvalidURL+ ÿ UnknownProtocol0  áÑ â“, version|  ¶Ù $ = ß 4   Ü „ ÿTransferEncodingŒ ç  Un©ÿ ementedFileMode6 ßIncompleteReaLñ  ðpartial, expected=Ê - þ 3 = 
 
 Y % =d ! � arepr__~u < à ‰¥', %i moreb 2' %©B s  ³ 
C '! Ðreturn '%s(%iÿ bytes read%s)' % (self.__class__.__name__,
  2lenE Ápartial), e)> ó__str__ = object. !

n ð ImproperConnectionState(HTTPExcep !):L Dpass8 ÿCannotSendRequest(J < 
oHeader; ÿResponseNotReady; 0BadÛ _usLinà Ádef __init__Oc, lineÂ  ‹aif not      ( € = repr( }  Üaargs =8 Õ  -  [   TooLong‡§ H_typ¬ 	Â.Ø ó"got more than %d–Awhen›qing %s"ø Ç  
²% (_MAXLINE3Œ )Ò ¢RemoteDiscf6ed(pÉResetError, ¤xï  £*pos, **kw$  ž 	< ð "’{ 0 b ð

# for backwards compatibility
e» 9 = pP
r""" Ð cookie handlU K ð	web clients.

This modul' ó"s (now fairly distant) origins in Gisle Aas' Perl; 
n 1::Co ðs, from the libwww-p+ ðlibrary.

Docstrings,Ð mŒ ³ and debug   o tŸ Ðcode refer toW €
attribuË of ï €system a-  -/ ,B  Ø ðinguish
them cleañ · vPython 4 @.

C€ diagram$t¼rt BSDDB÷ 1JarÄ  ÷ aMSIE* å`es areº
x · ad with¹ o  j@dard2 &Q, but: ‘availableVÿ
http://wwwsearch.sf.net/):
0¡ O____& /É! \ ) \' EFileE !  	(  D 4|  G 
 ¦\
 MozillaI V| LWP { g  S 
   
¦  0---ƒSBase + Ò , ²  & , -  ,  X ó

e ,|/  C ö Á

"""

__all+"[' 3', 
 6Jar `Policy rDefault.  l '·ÀokieJar', 'LñWPCookieJar', 'LoadErro vMozilla! Ä]

import os
 Dcopy „datetime r
  ãurllib.parse,  trequest: åthreading as _  ðhttp.client  # only for the default HTTP ­ ó 
from calendar Â  ’ ðgm

debug = False N °set to True PenablW @bugg’ 1viai "lo pmodule
 �er = NoneX 1f _] ñ(*args):
    if not     areturn! rglobal N  3  4 È   1ing*  K   ‡  	 ò ing.getLogger("7ðQjar")5 | q .™ ² °


DEFAULT_MÂ_PORT = str(J �. ð)
MISSING_FILENAME_TEX3 ñ("a filename wasÑsupplied (nor  ¿n! "Ÿ  Ô  ó"instance initialised with one)")€ó
warn_unhandled_exception(Ž�# There a ò  few catch-all - ò: statements in this ò,s¤ #7  ðinput that's bad4 €unexpect£  ays.  Warn3anyA n Aions� PcaughH Aere.# ï@io, Ö ñ ings, traceback# òf = io.StringIO(à$ `.print(£2, f!  ms f)Svalue8 f .	 <ð bug!\n%s" % msg,'ðcklevel=2)


# Date/gÿ  conversion
# - 9ð


EPOCH_YEAR = 1970
def _x Sgm(ttêðyear, month, mday, hou ñin, sec = tt[:6]KPif ((4 F >= c ²) and (1 <=L  	 )12 0day !31 N  À (0  t   !24   0min (59  ” c<= 61)Ã  F ­Þ ` Felse$  äð

DAYS = ["Mon", "Tue 0Wed 0Thu 0Fri 1Sat ¢un"]
MONTH; !Ja; 0Feb 0Mar !Ap 0May QJun",Œ  ¦ `  "Jul 0Aug 0Sep !Oca 0Nov 5Dech P_LOWEÂ0[]
É© <‡ ":  ' �.append(% ƒ.lower()ó €2isoz(t=<A"""Rd  aÀ ª�represent  7  o  seconds si]¡epoch, t.
Û !Ifø@funcE0 isVl×àithout an argu.Ñ, it will use8 qcurrentK  p V 0TheIRmat oa Á$edª óis like "YYYY-MM-DD hh:mm:ssZw	Î 0Unipðal Time (UTC, aka GMT).  An example òof this format is:

    1994-11-24 08:49:37Z 1"""" 0if 0 a None:  8 ådt = datetime.	 �utcnow()( ?els2 @fromG rstamp(t= òreturn "%04d-%02  
 : aZ" % (m • ñ .year, dt.month
 1day 3hou Qinute Ðsecond)

def „ À2netscape(t=ò )ó B"""R‘ ða string represent  ; B in P òs since epoch, t.RI„ñ2e function is called without an argument, it will use the currentî  p V 4TheÖå1e rª $edª `is likE ÷òWed, DD-Mon-YYYY HH:MM:SS GMT®  u!s,õ@-%s-  ° 
ñDAYS[dt.weekday()]êQMONTH A-1],O=+
ñ
UTC_ZONES = {"GMT":h, "UTC  Z p}

TIME? ò_RE = re.compile(r"^([-+])?(\d\d?):	 P)?$",) aASCII)¬poffset_;B_tz_”3(tz° ! =˜ ã  Çz£¾ Ú û . 0+ 
¸Gm = ³ p.searchk -  @ Fif mN   R ò3600 * int(m.group(2)â (    >  3¿    K 	 <+ 6R 3R š1) == '-'   ] P 2= -
 Ï <  k ]2q(Dðmon, yr, hr, min,õ%, {Ayr =ð "yrè vif yr >.vMAXYEAR’ u  p|Á# translate ªñ  name to number« #  `s star3Òth 1 (Januaryƒ 6tryn bmon = ñ_LOWER.index(mon.lower())+1d öexcept ValueErrorG ø# maybe it's already a¡  e	z   i "onŸ   j   #    �if 1 <= S V<= 12ž    j 1monÌ   
Û  Y '  Ø ðke sure clock ele’Ñs are defined+ Pif hrÇ º: "= C Ôiâ  mit 6sec7    8 S 3day?#da½hQhQM BiBD   Bsec)EÐif yr < 1000:#
  õ# find "obvious" year ðcur_yr = time.local
 ( . e())[0]0 Cm = 4 U% 100 vtmp = yZ V Dyr +0 5- m.  G um - tmp õ if abs(m) > 50:  È ¦if m > 0: W ~  $ Felse  -ž E Ñ# convert UTCé ñ tuple to seconds since epoch (not' ázone-adjusted)L Pt = _ðgm((yr, mon, day, h 0in,T q, tz))
3 €if t is V FNoneÚ "# ] m a using  x € string,¥ 0getQolute! ¯ d    h zi 
e   ¥tz = "UTC".  ’tz.upper(Ý  + Poffseæ 	 ’_from_tz_� 6(tz+ 2if % u preturn Ž v  j# -8  ( ñt

STRICT_DATE_RE = re.compile(C âr"^[SMTWF][a-z ò, (\d\d) ([JFMASOND # ") ó !r"& *  : ) p GMT$",s ïASCII)
WEEKDAYŠ ñ(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat) b*,?\s*W 7I |^ ¯LOOSE_HTTPð 
1""^ú ¬  ?)¢ #w ò    (?:\s+|[-\/]¢I(\w+0 0  #®$th4 5 d5 1&(?¼s :e ô	# separator before clockl À mµ # hour:min" #?:  )?ã  # optionalQ ¥*   !  * 	t 1\s*3 · ð([-+]?\d{2,4}|(?![APap][Mm]\b)[A-ZXA+) #h ‰C 4   N !)? U \k\” !# B° representaÈ 5 ofT ± in parens.M 	_ 2$""1X1�def http2~b(text)ŽA"""Rks`  \ Ö – sed by ai.�J ` value×£an integer!  Ï  ¶0ed w�he formatå 0str! óunrecognized, thº¡is outsideú   (Õble range, or4  †¦  Y  H[ P.  If+ O ¦ ð@taint B ,þ£is assumedÐ T™  #  ; ‘ F ðmay be numerical (like "-0800"¢ €"+0100") a�  ¤R 3  {Ò, "GMT", "BST? õEST").  Currently, onlyÏ G ’ Às equivalent ÏS(zeroPÀ) are known ÷to the function.

    T ò  loosely parses/ òollowing formats:8 ðWed, 09 Feb 1994 22:23:32 GMTY £   -- HTTP: o õuesday, 08-Feb-94 14:15:299 ß-- old rfc850B } D Ÿ-- brokenE ¹ À 
¾ Ñ (no weekday)Ë Â @   $--‚ >F Æ  A  Ï M ”  Î½àr ignores lead¿�and trail ²whitespace.±time may beI cabsent$!Ifñyear is given with only 2 digits,& `À will select W ócentury that makeZ ƒclosest ¨Ãcurrent dateˆ 1"""F °# fast exit\Ð strictly con â   !ng/ òm = STRICT_DATE_RE.search(textÍQif m:.  rÒg = m.groups(!   õmon = MONTHS_LOWER.index(g[1].lower()) + 1J òtt = (int(g[2]), mon,  E0]),)  `   3) $ 4 @floaA 65])� €return _ºbgm(tt)™ð# No, we need soØ2essÕSing..N¡# clean up…  0 =   .l>pú   ¡ = WEEKDAY>aub("",, �, 1)  # Uê$ss#Œ  tz2 ¤ ñ  zone specifierµ¡ôyr, hr, min, sec, tz = [None]*7V ¨r regexp­Ã  é`LOOSE_wí — @not Z ùŠ Felse> “ S  0badŸ2mat¸  P_str2(n d)

ISOÆ á = re.compile(ï Qr"""^
 r(\d{4})D  # W  ‘   [-\/]? m(\d\d?. �numerical¤!th+ 9 0day- &(?
á (?:\s+|[-:Tt]!ðseparator before clock9 3   “ !:?	 › ¤# hour:min$ #?:   ] �.\d*)?))?j opÒaopconds (î1fraê!al6 +  %# = ‘ 0\s*w Ô a([-+]?:A:?(:
 )Pq   |Z|z¶ Y  # ãô0 (Zn`"zero d°dian", i.e.õž 3   t @)?$"^`re.X |öò  ASCII)
def iso= —)r AspQ http$ à, but parses tð$he ISO 8601 formats:

    1994-02-03 14:15:29 -0100 ,--7 4  /  ü-- zone is optional5 ( 	 Ë-- only date. T— 2 õ-- Use T as separator7 Å0203T141529Z3  	 Î scompact	<  +  	¡ / 1""" ¡# clean up ptext =  ’.lstrip()j@# tzBtime# specifier ) !ngA ðday, mon, yr, hr, min, sec,A ¤= [None]*7V òloose regexp parsB0m =½ð_DATE_RE.search(™ )i @if m� @not S :  ú ð# XXX there's an extra bit of  Ä æÐI'm ignoring 1 G: isI a  this4 Pright •ng to do?(  ê ó ý ô ò , _ = m.groups(¾ Felse² areturnÇ t  # badÚd  P_str2» (h r  { q Á)


# HeaderRing
# - 9ñ

def unmatched( )Ò B"""RÑ    ‡ ~@re.M3 „ object.‡ start, end, " r.span(0/f .n![:4 )]+ ð	end:]

HEADER_TOKEN_RE =  0re.<ôile(r"^\s*([^=\s;,]+)")8 °QUOTED_VALU}= = 8 ô=\s*\"([^\"\\]*(?:\\. V)*)\"O H  „ /  O  M  Š *Š _ESCAP„ @\\(.(  ‡qsplit_hñs_words( cvalues˜Pr"""Pa    ± into a lis£  �s containAkey,+ r pairs.º€The func$¡ knows howð
eal with ",", ";" and "="ò@well aquotedà] ps after' E.  A� Tspace(Ðed tokens areU0sedM iØyN 8wer0  by‚ µ I(  _x 3pasG „argumentþ £s multiple,,n l  † Ytreat‡  ƒ da sing; Â €by comma˜ Tf@meanlags^�is usefulö  —ÅRfield7 ÿ @follˆ R °syntax (BNF&@from¼ £ HTTP/1.1 Ã caÆá, but we relaxM  th Qquire3for�)º  MsÚ  2= #� D "    1= (È  |Ï ñameter) *( [";"] Àen | parametqer))

  Qtoken
  ó= 1*<any CHAR except CTLs or separators>A  A �"(" | ") < > #@"6 ,  A| ",$ ; : \ $<"l . 
 @| "/$ !"[ ] ? =l 
{$ } tSP | HTÑquoted-stringh ó= ( <"> *(qdtext | % apair ) )Ú # 9  != ODTEXTO4<">Ô J 0 1"\"~“  tRmeter! ó	   = attribute "=" value‚  / != ç  ,     Ø ý  òEach header is represented by a list of key/[  rs.  The™ a for a bsimple� ‘ (not par@ a
 aç )i ñNone.  Syntactically incorrectM – ps will L ànecessarily beQ òsed as you would want.Ú @Thisj ðeasier to describe with some exa² "s:4 ¢>>> split_} ò%_words(['foo="bar"; port="80,81"; discard, bar=baz']+0[[(5 Ð', 'bar'), (':   <  ? 0', a)], [(1 8 Qz')]]™  ²ø/html; charset="iso-8859-1"� + n  ” 5  — 7 w ùr'Basic realm="\"foo\bar\"r % n 0  l  1  Oj â """Òaassertð³isinstance(�‚bs, strg¢result = [( ‹ è 3 inÖ_4 :e  Qorig_$  =   ÙK  , 0whiÏ6ext@   ðm = HEADER_TOKEN_RE.search(S œ  )   Jif m?    ( ê = unmatched(m6  $ þname = m.group(1" ‰ ÏQUOTED_VALUE� 
 Z ” 3  #ëÉ
 "  ¨  , g­ ' >RESCAP¯ ’ub(r"\1",� ì NelseH U ÿ  5 "un¦x  0 	 , + 3  .rœ.p(ý  + À    # no valÿue, a lone token
  Ívalue = None% ñpairs.append((name, 1 ))), ùelif text.lstrip().startswith(","):0  Œ ý$# concatenated headers, as per RFC 2616 section 4.2D  s * =z M[1:]) 1if Ì „: resultÔ  
Ì  œ  J = [J OelseÉ �skip junkx @non_ A, nr	 ñ_chars = re.subn(r"^[=\s;]*", "",Í ’ kassertF m> 0, (u  Â r"split_Vó_words bug: '%s', _%s" %? `(orig__‘ ,?÷ i  $ 4 = é N rcreturn’ò

HEADER_JOIN_ESCAPE_RE*ùcompile(r"([\"\\])")
def joinå c(listsoñ"""Do the inverse (almost) of !co  `d,>by 9!.
Ö PTakesU0ist@ j  	 D(key(± and produc3 csingleäM FÂ.  AttributeX�s are quo“if needed� ?>>>ñ  @[[("…�/plain",ÊQ), ("k etXâiso-8859-1")]]_'6 #; , '="* 'ª v O], [x ,x y 1""" Ä 4�3forg1in †•Jattr¹ . rk, v in6 -  À if Qs not:
 "    ±Pearch³ƒ\w+$", vi '  Ov = Ï ôq(r"\\\1? Á  # escape "5\ó L    P ­'"%s"' % v# �k = "%s=Ð  (î ã <    ók 0if  :™êP"; ".[( õ® N ˜!)
Šø_º s(Z3'"'  œ  , Ä»5 2endC3 2:-1¥   O ’ ƒparse_ns &s(  ¡"""Ad-hoc ,  r ,2Net‘ðprotocol cookie-«s�…The old 2 )  F 0mat a Set-C? A can €instanceÿ2taišQan un=Pd ","¬ ·ð	expires field, so we havÕ± use this aÄ à
    parser inñNstead of split_header_words.

    XXX This may not make the best possible effort to parse all& AcrapI òthat Netscape Cookie q ñs contain.  Ronald Tschalar's HTTPClientH p_ ðr is probably better, so could do wors¨ Ñan following „ !ifH tÕ óever gives any troubleû ±Currently, - ñis also used forê  W ¡RFC 2109 cÖ ;1"""j ðknown_attrs = ("expires", "domain
 @path �secure",:  � %# j N (•¦turn up in_‰ o, too)K r"versio{ 0ort{ ’max-age")ú±result = []B  ò #ns$ n  !s:!  ª 1paiæ 4   j 0_seM RFalsea   #aW: The§Adoeslðstrictly adhere tos} ËUempty| Q# namÊ`d valu  re legal (³àformer will onX áppear once and P ñbe overwritten if multiple occcf ’present)..'isG 0mosÅ ðto deal with backwardüÅmpatibility.7  o0ii,e amò ¥enumerate(y.·f(';'))„ Xrparam => .H#p(Ø    �key, sep,-+ Úpartition('=';Ÿkey = keyP !if´:key‹  l ®if ii == 0    Ubreakû     Oelse0  07inuI 0 #v!owœ�a distincÌ  "Sween ¦ì=
 ymissing€  L ‰together Pval =3 @sep ® K Non• û !û #lcQjlower(o Ò Pif lcýD�&lc[ @    if´ }õC #»0 anhÔ˜ S   if	 Œ  ü Z  0 8Š¾_quotes(való , �3ITrueƒ # 'elØ eR~ #_Svert ( A datM seconds si]epochi  m è ­http2time(ò A)  #( 9yinvalidv D‘.append((§ *¿1if % 
ð i�p
   Ê ð pairs.append(("÷version", "0"))
  ñresult.append(pairs)
" rreturn ! ð


IPV4_RE = re.compile(r"\.\d+$", ñ	ASCII)
def is_HDN(text):P B"""RS €True if  ñ is a host domain name."""5 S# XXX
 ðThis may well be wrong.  Which RFCM ð HDN defined in,h ƒany (forH ñ the purposes of: c2965)?" 1For% ó+current implementation, what about IPv6?  Remember to lookI ³ at other ul FAalso� Áchange this.6 3if % x.searchE º™TFalse2 KR== ""m( 	@[0] + 0." è dext[-1 ? x  ¾
ä±¿_match(A, Bê* # Aä-3 #es Ð B, accordingB Ë ‘.ŠqA and Bü-be-sÇ ÃIP addresses7 F P, sec¹2 1:Q Ho hPs canKÁspecified ei°fas an V  d  a ]bstring¬ÐSometimes we care on¤  b � with anƒ.  (Such+ ±isons SHALLÈñbe case-insensitive.)  ® 1A's3B:bB's ifÜ  ú0 * À"ir,ˆ · "s  -­ ™equal; or> AJï ‚0hasW € form NBRere N- ‘non-emptyÌ ‡ "  ´ t I, B C A.B',Y "B'C _ *)o,K 0x.yx!.Y �but not  .Ä0Not[a]7 m  + aˆ muÖqve operàp: a.b.cV € ½; 2es  $, q  N redey½€ ëAE B $Y1es,Uðonly relevant part›"thã#ÔiÇ!of2 ˜   algorithmÝ  “ kdirectï¶ÂA = A.lower(YB = B @if A&B  ß!ifqêAý  *¢r rrfind(Bs @if ia  -1 0l #,!esb Fhaveu"orr å pä ¬~ © €B.starts’O("."± 
3 Ü _B[1:]/ 	ñ ƒliberal_A  Ÿ@ 	Ïsort-of-like¤ žð accepting/block8ýÀ"""
    if IóPV4_RE.search(text):
  Áreturn False  óTrue

def user_domain_match(A, BC ò"""For blocking/accepting 2 1s.
V óA and B may be host" ô names or IP addresse7 3"""? ±= A.lower() YB = B ñ
if not (liberal_is_HDN(A){  #B)Á  –if A == B  y# equal˜ |     +     P±initial_dot³ âstartswith("."Í 8if '  +RA.end' l_ ž  õ > Ï – 7  ¦ ð
cut_port_re = re.compile(r":\d+$", aASCII)€request_Ç( PB"""RS -% ó	, as defined by RFC 2965àVariation from ": £ Áed value is ÿñcased, for convenient– µ carisonV =1url× ´ Ó.get_full_urlL ¢ ñ = urllib.parse.url	 �(url)[1]c "ifºV== ""-@ ñ b òheader("Host", "")�# remove p”, if presÃ I ��.sub("",x 2, 10 ™Ceff_‡ �„a tuple ¾¦£effective F  £)VAÉ@, exú— both are®9 �Berhn�£  Oq1req( Q.find3 Ü!-1Ö ñIà0 � %r ’+ ".local]r°i  , 0 üT_path+Y €"""Path w…onent of6?URIó—p)˜ Qsplit˜$ œ ’ = escapeª : . 0&  .€#/"Í  &�# fix bad€ñ 2396 absoluteURIk  '  E � = "/" +   D Š:;ort:æ" . D 2i =Óê5':'½ fi >= 0q =- R[i+1:ž ž 6try'   @int(/ L   ©VWZError1 ñ_debug("nonnumeric¬�: '%s'", M  Q ü 2NonBFelseT  } ñ = DEFAULT_HTTP_PORTó ;  $ ð

# Characters iniñto A-Z, a-z, 0-9, '_', '.',p'-' thaRðn't
# need to be escð%aped to form a valid HTTP URL (RFCs 2396 and 1738).
 ð_PATH_SAFE = "%/;:@&=+$,!~*'()"
ESCAPED_CHAR_R% ÷re.compile(r"%([0-9a-fA-F] ð)")
def uppercase_esc¤ ñ_char(match):
    return "%%%s" %  ¡.group(1).B (N D `_path( B A"""E^ r any iný  i •acters in,U  — R all W Qs."""’ õ# There's no knowing what T a encod Ras us}`creatersI pcontain) #%-h ð, but since we haveºqpick on * Ë L  ò ‚  s,= 5 ðUTF-8, as recommendedõ Ãthe HTML 4.0E Òspecification�ð"# http://www.w3.org/TR/REC-html40/appendix/notes. ƒ#h-B.2.1W @And 4ð, kind of: draft-fiel(€-uri-rfc„cbis-03: (; "in/ Z IRI £  ø -duerst-iri-05)< w �for new UA òchemes: RFC 27180 @ñ= urllib.parse.quoteL,#	4 U.sub(D	Û , g = Ú  
dreach(ùB"""Rü ¡ of host hË¢defined byÇ €965, sec¸A 1.
BThe = R? aA ¤name H is E ²as follows:9 …   *  If R   - 5  6‰ qdomain O 2of ^ ;A,8 @has 9 €1A.B' &  A & €no embed¤ (tVÿis, interior) dots> B> �at least*H �dot, or Bõ  ‡ 0strt�"local".- m Athen­ ;"ofø #.BV¯Otherwise,,  H+ 2>>>� (">1acm"$'. '‚ .  *  ) Ç U  ']´Ói = h.find(".U ’if i >= 0è ü  #a( ð[:i]  # this line7AonlyÄ �Bshowó2a iÍ ? b> Qi+1:]Ñ    z bz  °f is_HDN(h)4" (�  ¨Sb == �Å 3   rQ"."+bd  hCóis_third_party(requestD  4 ù	2V3.3.6ýò An unverifiable transa^ isa1rd-i Y Qtfu -k  ´ .PU doe3"t 9-Ê=¤ ž¶ -8 OªN horigin’ m ß  o ðreq_host = request_hðost(request)
    if not domain_match! ¢_host, rea  1 ±.origin_req 1)):C  G ±return True Melse óFalse


class Cooki% s"""HTTP !.
D RThis , ñrepresents both Netscape and RFC 2965 cR s? òis deliberately a very simple] ñ.  It just holds attributes !'sŽ ópossible to construct± à instances thaNón't comply with theŸ M  . @dardb “Jar.make_Å   iL óe factory function forv J òobjects -- it dealsr H ð parsing, supplying defaults,>E pnormali)  ß  ­ rav •used in t”#. ‡ ‚Policy i'brespon* « Pcheckv @them] °see whetherñ
y should be accepted from™  ß[ ed=  š cserveråBNotet  €port mayM 1µ ñe headers, but unspecified ("Port"o #ra— !an Q=80",r0exa2 );1 acase, y sis Noneš 2"""Çðdef __init__(self,„ñsion, name, value,‚  L  V \ _° '  ¼,Ä+   | ial_dot?  `path,  f 
_secur¦ expiresZ  discard  ocommenŽ  O_url8  ?res5 �rfc2109=a7  "):‹ Z$if c ü µ: �= int(ver¢$7 é 
7  7 cfloat( )>  Í ;  n  y4r   >5 v praise V ‘Error("if9  /  J   mÈb8Vlse")ø  z.× $ =ï u  �! =–
 ¢ 6  Š 
 Ø =•  à #  - $# "e Nfas perØ"seûU3.3.38 ² ü# =ëv.lower(y% { /  V â# Sigh.  We nevHknow´m c givenaA z-G` had a) `itial ‡ 6 0ord…o followð K !(ar«ðin draft errata).  Need1oM ,!$DÑK À    # value.#
  þself.domain_initial_dot =  
5 ppath =   £_specified#  
- ’secure = 	 
 £expires = 
 
 `discarb 
 
 `commenË 
  s_url = #   
' £rfc2109 = 
 
  B_resd €py.copy( )& ð
def has_nonstandard_attr(w…, name):P areturn @ in $ ._ "  L ?getL 	ß, default=NonZ  R P.get( 3 )e se Hvalu^ W [S A] = # 2is_Âdú ,ow¤  if now is ½ : p= time. (¡  ·1if G #.e ais not8 [) and  <=M i E mATrueú  VFalse½ q__str__s E "if¢Fport¶ ep = ""R aelse:  1:"+) 0   @limi> rc + p +\ 5ath, q \ r ô B Å  ƒ# ³= "%s=%s" %  ,[ # T© k H Ÿ  = " ?ñ"<Cookie %s for %s>n  , b !, ã ___repP 0argê%[]d  Q  I  Ð("version", "   b %",1  ·  "i &   / ~ 1 
 3 # " #I   G   E § ù 1 Ï  Ñ  š  ¥~ ¡ 
 m` = get
 Ãw	Ž  |‡.append(4 h , ¯(? &))0	2  òh- /º2 V5 d7 ia%s(%s)]_ °_class__.__¨ @__, $`.join(Ÿ Q))


%  ¥bPolicy.ñ"""Defines which cÈs+á accepted fromQ† Òed to server.!ô May also modifyG Ð, though this¬óprobably a bad ideaB rThe sub© DÀ°  Ô¨ t) FR rulesrNetscapÆ ý„RFC 2965Œ ð -- override that ifñ you want a customized policy.

    """ ñdef set_ok(self, cookie, request):' 3 óReturn true if (and only if): ó should be accepted from server  P óCurrently, pre-expiredG ñs never get this far -- the C£ 5Jar› õclass deletes suchG  itØ w ú  ƒ òraise NotImplementedError()' rõ "B[ Ted to Ÿ rdomain_K ¦  ÈAfalsÉõs¼0notÀS “ed, givenS Z .}	² ,V TrueAMpath    ž A X œ 
3rDefaultRP!( ÿ5""""s„óstandard rules forï@ing =  ].(5D²ÿStrictNoDots = 1  n* G = 2 òRFC2965Match = 4i+ ·Liberal = 02 k 2 = %  z | r S  ý‚__init__T  9 ‚blocked_Üs=None, allow = �netscape=0P, rfcÙ  =F—,/    u109_as_: p + Rhide_y2P s‚» &  } ó 965_unverifiabl¸ ~ Y *ns. Ø / F=”Ì	 1  » ¡¯ial_dollarÈ 0ns_5  '+ þecure_protocols=("https", "wss")ó ) À"""Construct0rguZ^õbe passed as keyword a&  P, L   Àñ4 =  … !  $ =G <+  
7 H8 =  
) “Á9 =  + ± 	#9  G eÀrifiable = sótrict_ns_unverifiable
  eself.s$ œdomain =  1 ùset_initial_dollar=  I 	Mpath?   5 ð ecure_protocols3  
2 ²if blocked_Ý ås is not None:(  _/ ‹= tuple( ); ?elsI )()™ _allow™ ) “  “ Ê  ; =  Ž -de$(A )õ	"""Return the sequence o9  ]R(as a2U)."""&r@  Y .d%  ‡  0h‹ ,Å
œ ?Set™ 	Œ …  V� ´ Ÿ $isº – ö � ;for« O in p ^ |sif user¥r_match(_ ý o  :   ]6TruÛ VFalseéÈ Q é M, orYB ò6 à sò ” ,¬
¥ òG ™ ½  Æ 	û,ifY Q ´ ! w(sis_not_Q ù öð #ifB( ‘ /isÆ 	ø    ˜
> ˜
 s˜
: ²  s   Œ  ­	#ok�cookie, ri'stY RðIf you override .>òok(), be sure to call this method.  If it ‡ Š ¬ f)°, so should] ûr subclass (assuming Pwantsi fbe mor€CÒ about which Ø . ‚accept).š € Û ð_debug(" - checkw = ƒ %s=%s",L U.name ðvalue)

        asseórt cookie.name is not None

  ñfor n in "version",  ifiability  @   @path Qdomai+ eport":O  V 0fn_0 ë = "set_ok_"+n" ó = getattr(self, 5 )( !if² 2fn(È ª, request)r  v ·return Falsß  3Tru Cdef – ñ � b $ifG2  J F
… 2# VB  `alwaysj ù to 0 by parse_ns_headers if it's a Netscapeý #v ð, so this must be a±ãvalid RFC 2965, .B ñ_debug("   Set-C¤2 without Î  †ù ibute (%s=%s)",G  ^$  b  Û, Zvalue´rˆ;  ë `.u q> 0 andà @.rfcÉ 
TÂ ê ÿs are switched off"ˆ .elÍ,==‹ n�Œ °Œ #)›�¡a.unver; l(ód is_third_party(( @Ÿ›sstrict_¢_d 
# ï³y -y ©Ÿ during "j G  "l � transact¦
í . P
y  õ
á /nsÜ #Ü Uñ A ¦8Q# Try†€stop serž µtœ%V0à€designedÍ¥hack other¼#< òthat know both VåÆV1 protocols£3if ØŒ— ²àinitial_dollar· €  æ` ù `.startkh("$")î¢€illegal 6 " (7  Å '$'): '%s'"î & 
xƒ
t ˜ A˜� / ª_specifiedm@req_  $ =ð_path(request)
   öif ((cookie.version > 0 or
% 
 ( ð== 0 and self.strict_ns_set_path)) H 2not2  $ ¤_return_ok^   Í, request)):@ °_debug("   , ð attribute %s is ` ´a prefix ofK - "J Ø "G S%s", 
  „ È 9 µ e False  QTrue
 @def  ok_domain()e ` ä ã i1 Ôlf.is_blockedA 
  �in user D V-listÛ ) )¡   º 
Ï Œ Ÿnot_allow� $ ’” H ” (¢Ç ¦_specifiedD Õ óreq_host, erhn = eff_S ( 
U $ = 	+î"  ç" ( û.count(".") >= 2³ ž ÿ(# XXX This should probably be compared with the Konquer“ B# (kqjar.cpprù Mozilla implementations, but it's aÕ • ílosing battle.! Ci = ã Qrfindã & j&  j, 0, ik s Pif j EC:  #\ ß like .foo.ba„ e   tlde m[i+1:]†  ^ s' _j+1:i(  Ò0ld.Þðr() in ("co", "ac 0com 0edu 0org _net",w p   "gov% 0mil  inA"aerV 0biz !ca OcoopJ 1inf5 0jobŸP"mobi> Qmuseu˜ @name p^ ’ QtraveŽ 2eu"%€len(tld)‚2? ? ™_co.ukg  ‘ôry-code second levelépQ~ š  #ifH p.starts-’Ê ƒundotted…<:Oelse? 	aembeddd kts = (u .2 0ñ !if´
D  XÎ != ".local"Ÿ sAnon-'  ðcontains no embedded dot",
  }domain) Éreturn False ùif cookie.version == 0:$  k óif (not erhn.endswith(o M and2  6 3 Rstart5 O".")2  e P("."+j )k .))œ  j ð_debug("   effective request-host %s (even º � added "¶  P ñ   "initial dot) does� 2endC /%sˆ C  Á #, #i r–(—m> 0 orG ò(self.strict_ns_o 1 &  DÏRFC2965Match@!ifÙ ;  _m' (½ s(7^ -^ x Yi>rS\oNoDots> ]�_prefix =s_ d[:-len!]¸ P ( : P.find÷o) >= 0 ñIPV4_RE.search(reqr œ  ‡ q  « c%s forŸ  contains añÛ I º ¤ ÷QTrue
ñ def set_ok_portÔ,˜,S Æùµ / ª_specified¨    – C ^ 
% ifh ! Š is NoneN  KR :"80=?els2 1str¬ “ 
|  ˆCp inò ." §.split(","ø  „   >try�   Zint(p]   ÿexcept ValueError> *@bad ‡  Å¿numeric)", a   e Öc  @if pZB� Qbreak 4   V© Í­ A(%s)ËPfoundR K	Q  U  Œ jx=Ø  
Ã ?_okÁ&""=öIf you override .G ð), be sure to call thóis method.  If it
  û!returns false, so should your subclass (assuming …wants toP ðbe more strict about which cookie.  v 5).
8 5""" ò# Path has already been checked by .path_G ÷_ok(), and domainI Pblock· Adone9 # ; .0 ¢_debug(" -l  9 ¶ ƒ %s=%s",Å U.name fvalue)Ì ñfor n in "version",  ifiability `secure
 `expire^ P"port ¦ %":›  ¯0fn_x E = "ú 6_"+ð % ó = getattr(self, 8 )M ¢if not fn(â ª, request)u  T n   F$E  BTrueû 3defÙC_ok_û ƒ d $ifT2 A > 0Í Ÿ  Á Š.rfc2965˜ ¬`  RFC ! I 0s a�Êwitched off"û º 
Ï .elŠ ,==‹ �netscapeŒ N! Œ *¡ [KaÚa.unver; !lecó is_third_party(( ¢žê_¥_d 
& J¶y -y Â@ dur|L    I  �"transactj
ê & M
î  ò
Û /nsÖ #Ö Oë 8r1¯.1 *Q.type92in $Çª_protocolsôðM [ £ with non- ` ªæ eNç 2is_5 d5 [._nowÈ Á 2 ± 0 ôy Q‹… / 
e@req_ $ =Äð_port(request)
   öif req_port is None:
 
 " i= "80"  ðfor p in cookie.J ¾.split(",")M uif p ==w "  u Ybreaki ?els›   _debug("  Q Puest ‚ ó %s does not match   )",]  s  í ,2 Ò ). Åreturn False  QTrue
  de` * ô _ok_domain(self^ ,· * ‚ ðhost, erhn = eff_reqÞ _ ( – Z $ =´  „  Ø 2if  A and ì.startswith(".¯2dot' ƒ = "." +E Û  W ”3 < … ò# strict check of non-& ¹ ¢s: Mozilla¿±this, MSIE5 5n't} Cif (upversionW0â $  ¥ p.{ 3_ns†0 & ˆ!.D”S™ 2Non )E  Hm ±  _specified, 1 !=´Í ‚ ¥D  q6 unD U ä Ÿ ¯ ºng-compare t T Ä   "equal toD† " * •ª#ifs.=!> < � _:(†,\ Ú ”effectiveŽ -«Y nameŽ[ -[ Ø ƒRFC 2965¢ { B %s"� Î è     ç '==è  õ+à R).endÃì €â k‹NetscapeÀ ÅÖ óÂ Ö   r�
l> _ 1_okü/l•# Liberal•p.  Thisðhere as an optimizatg…to avoid€# havingŒ�load lotsá ºõfiles unless necessary.E  ‘÷iCtqÎ` Í+ € M  } I  " E   A € 2 N oS e$   Å  "×À(dotdomain) ÷or erhn.endswith(dotdomain)):
  ò#_debug("   request * ö
 %s does not match cookie  *",L X “req_host,* )& Õreturn False
 òif self.is_blocked(‡ ° ¯    § ±is in user = o-list" ±  ~ Ÿnot_allow‚  '† A † 3Tru’def path_ @_ok(&, ,±#¤- checkingµ G B=%s"< “ ­  $ =O _ ()    len = len(   if= 9 1 ==ž 
gÀ  Ú uPelif h 8 b.start®] E and4 v Õu"/") or{ [8 Clen: 0+1]Ž  ' # K � d < Sú L -ÿ>0H× ¹ó	vals_sorted_by_key(adictŒ rkeys = !  . "()X¤ 3map Pget, " 0)

` ódeepvalues(mappingZ ó	"""Iterates over nested & °, depth-fir¤#in„ @ ordBye A."""b ? = Ï  Q ° pfor objŠ4 ( # =ö ƒ  6try%   ‘obj.items{   úexcept AttributeError5 7pas0 :lse } 	~ ] ·yield from M2objÒ  # #if a
Z ? ðobj


# Used as second parameter to ÷â.get() method, ñstinguish absent
#+  �— @one Á@ a N Z‘.
class A4 !:  C£#Ja$ó"""Collection of HTTP"s.qYou mayè @need› ñknow about this q Q: tryšsurllib.$à.build_opener(b † °Processor). a(url).@  ]	 ±non_word_re�â.compile(r"\W"‡_quote!  ƒ([\"\\])' rstrict_/  ƒ\.?[^.]*/ ( 
% /tsK  b^\.+")>_magic$ R#LWP-
Ðs-(\d+\.\d+)"¸c.ASCIIC  Í„__init__à`olicy=ôÕ�p 1 is�À  policy = DóefaultCookiePolicy()
  qself._p 2 = 	 
 c< ý
s_lock = _threading.RLockO 0 R = {}L sdef seti (v ,m +):n „ �  A _X ³_for_domainJ  —, requestS 3 U = []h pif not † ü .C ²_return_ok( T  ;( U ô	_debug("Checking %s for ‚ 2to 5 2", \ †$ £_by_path =œ  [0 Á  X ) $in` < g.keys( ® ñ  @ ï   í  C …continueE  Us| lname =Ž [W ¸  4  ¼ Ø  ¾  B m.valueÀ  8 Ä Q ®R Á 	 D ¤!  ?  ¬? "’ .  û   O Ïit's a matchG  ` ’s.append( n ‰ =3	òÝó éA"""R¾¤ a list ofR c to be€ ed ¥server."""Ò– s, ¯ ¯3) k 0extê 	1 ¹T ±c_attrsn -9 `ibutes| Ýölike ['foo="bar"; $Path="/"', ...], ÕThe $Version g õ  is also added when appropriate (currently onlyˆ…once perÏ.j °#Y ã€in order÷ðmost specific (ie. long ’e firstq Fð.sort(key=lambda a: len(a.4 )¬¶verse=True)”   ö ion_set = False  S s  S
 s }#. Y  Ò ¿u header¹ + ;XXX àWhat should itû²if multiple¥ öISet-Y Zs havã€#  diffe©‘ Ûs themselves?{ pAnswer:"  reAno a Â; was suppos„ beç ftled bÿÕ ð RFC 2965 errata, but tÙ �may neverNiear...… ð version = cooki·e.version
  sif not  Y_set:   +  } = True# $ifC N > 0C  G òattrs.append("$VŽ d=%s" %> ))
[ ð# quote cookie value ³ ‹ecessary. (Ì òfor Netscape protocol, which already has any` sG ö intact, due to the poorly-specifiedc C� ™: syntax)L Rif ((¾ .¾ sq™None) and/  'ùself.non_word_re.searchF : 4 r)so != P GM ³ub(r"\\\1",W™ 
¸ OelseS Ñ ±3addX -ñ`ibutesEò be returned in 6y header#ifA ™ @ is .�  ` Q” OnameË 	< 3"%s‡f G ,p)O ê¾ Upath_0¿  í	‡ ä'$Path="%s"' % G 
ƒ  9 g ÿdomain.startswith("."  6 , $ =\  	~ '    º NX* Ï_initial_dot½ :   / • – 1 2 = : O[1:]— 1Dý 3= .	@portR Û V Ž ¿p = "$Port"† ~ P åR ep + ('­ Z B ²  4 	ì pH   €‚def add_T _V(û—, request}A"""A§Srrect‹:Œ ¬3 “ (urllib. ".RK ’ object).}  ¬ 3TheH 2H pis also˜ óed unless policy.hide­ 2�GtrueN &""x�_debug("ß "6 é .P ö s_lock.acquire(% Ftry:±  µ 7 “ S_now / �int(time. '()‚ > ls4  S_for_1( : ¹8 _ €s¶  j "ifìD $otãD.hasüð"Cookie"):
        ùrequest.add_unredirected_header(
.  ù"Cookie", "; ".join(attrs))
5 ù # if necessary, advertise that we know RFC 2965< ðif (self._policy.rfc% ™ and not  ahide_c— 2" 	K  »  2 ñ 4hasä Ë ]2")):4 Bfor T 3 in
 s'  _ #if  ß.version != 1,  0 ‹ |˜ R, '$VS m="1"')¦  O   Vbreak€zfinallyƒ 4Ô ÷ s_lock.release(»& Óclear_expired[s& Õdef _normaliz q_tuples·!, G_setZò"""Return list of 3 Ã containing W 3sedS@ infk Vtion.á ` u is theS  [ s\ ðkey,value pairs extraâU fromI < BSet-ÖF or  "2 sy Tæ ± are name, d ó, standard, rest, whe#  ’& 6 5the} ŒI & L  Ü Pa dicý 8ary) ¸ t P -Áibutes (disc— Psecur° P", Þsó …max-age,I Ádomain, pathš Qport)
  ß ™ $ %ofO  ­ ì œ U5""", ( NV = []ö€boolean_á Ss = "Þ  �à H ˜* #("›"å  8 " M - " ,  $ ?ort1 pcomment*  Gurl"yq¶ &inG
Êz# =)5 '[0/ Ý x# BuildF%of®< –$ (Vï—L Œtof othe%	C   )à= RNote:w`y timeGñûto seconds since epoch.  V0‡ $Às should havU1e E±sÖ ,º#V1 sO G ÃMax-Age, but‡ ²V1 includes®4109J \ (andO ½ %V0$ ðmay be a mish-mash¡�Netscapeœ v109), w 8‘accept eio(™ sprefer ­ )).‚ ðmax_age_set = False

    õbad_cookie = False

 ù   standard = {} Nrest Âfor k, v in X ¹_attrs[1:]:@  f ílc = k.lower() ð# don't lose case distinction k íunknown fieldsA Pif lc‹ RvalueŠ 3 or rboolean �  ¡ ok = lcX kW 	B @ andù os NoneP ## 3 -ñibute is present, but has no º �  œ þ# (like "discard", rather than "port=80"X > �v = True[ 1if Ü úÉ ¢only first¤  Á ½significantX  u ocontinu ¿== "domain"u /if` e ó_debug("   missing¡  1`  w H 	+ &   _breakñ Ò# RFC 2965 se·_3.3.3-  “v˜ #expires$¿max_age_setH ´ ó# Prefer max-age to Z XMozilla? C Î  ¬&§or invalid·š "9 p  "Ùp: treatþpas sess4“õÔ 0|a ª ?try› _int(v{€except VÓ_ErrorJ  _×(non-numeric)meFXvconvertNRMax-A¶ÿseconds since epoch&ð# XXX Strictly you're supposed bfollowe ?616F Ñ  age-calculaŠârules.  Rememb�st zero ¨ K �is a requN toá ÌQ (oldQCnew)-Ÿ, though.N  «"(ÂÀ  v = self._›now + v
  ó	if (k in value_attrs) or sboolean :?  N  C ßv is None and&  * Pk notm ø("port", "commen ourl"))k  E ò_debug("   missing¼ € for %s Ã ¿ibute" % k)� ÿbad_cookie = True* Oreak ßstandard[k] =^ OelseÊ Drest6 	[ 6if š < ™continue
5 È ò_tuples.append((name,$, «  , { &))A yreturn D  Cdef $T_from h  (self, tupS Wquest¶#q  vdict of m -¬sD (st, &th’#µ  B Ethemû á   =š Ç  6…domain =ƒ b.get(" –", Absent.Mpath.   , >ort, áX }expires/  ^ æ õ# set the easy defaults  nversioÜ  !",™Û 3if   o ’ ¹
k:try  D6 c= int( X  # €except VM^ErrorF o t ´  # invalid“ ƒ, ignore�å PsecurªÈÀ †", FalseŒ  # (discardä AalsoE3if i  œ2 %J f ½Í z O_url4  þ±ý ù † !if  Ï  ÊÓ  … Z!= ""„ ? ¯_specifiedü "   = escape_ ( ^×   	U �¦   # Q = re+W  Z  ) 1i =½ «.rfind("/"  šf i != -1Ù < ÜN== 0!  % Q# NetÝ  ð  parts company éÆ reality her† <  Î   I[:i]ê  $ #     3 â Z[:i+1< bif lenp Ã f = "/"Ï
Æ„  à_specified = dóomain is not Absent
  ö,# but first we have to remember whether it starts with a doE db õ_initial_dot = Falseh 3if & ¥specified:  Œ  
D Rbool( .  ~ e("."))> [  ã ß 
[ ñreq_host, erhn = eff_request ( T ’  / 5rhnn AelifI— 
z $ r = "."+ 
J ö# set default porQ  _)M "  ð Ó
z !ifR  # JNone  Þ ð # Port attr pre, ha)u value:Ÿ 2X .Æ  L   ð# Cookie should then only be ^ Â back on thaï E Ö #= �_ œ?elsÔ   0 	76Truƒ ¦    &  e ñ.sub(r"\s+", "",Ú d A# No% 	7$. û =canî 1any3 
í „  ›õexpires and discardu4if  #isÓ
ã != d  ø  M 9 = Ù7 Ê<= self._nowY 0# E™ ày date in pastgµ >�delete cú .  This can't b�#B D@ó Policy, because7 	R s]*reR:try©  ï Ä SclearFÆ, path, nameê + þ except KeyErrorL Epass� 2 �_debug("3ingð ,éR='%s'p   u  )",I  M #  7 2 ¢ breturnÐ@  <�(version_ !  ö ,Ú#  ™	I, Ñð 0 Ë D �  @ Þ  osecureJ » ö comment O_url# Rrest)ÍRdef _þps_from_g`s_set(“,@ ,í)r: †_tuples Šƒrmalized[ ! (\ ~  .Ðcookies = []
  ófor tup in cookie_tuples:
!   ’ = self._ T_from 6 é(tup, request)B #if` : ’s.append(M . TreturŽ !s
F ódef _process_rfc2109z  s(” ,V )¹ ( ñ as_ns = getattr0 ¸._policy, '' æetscape', None” 8if ' As is" m  '
# S= not1m .! 1965Ó  1  }ÿ €z8Ú.version == 1x  K G b ¥109 = Truei  "   È H  & €# treat fXS as N ½rather thank I ¤as RFC29655 ) ¾ ã & 0øKmakeì†responselÉ B"""RBsˆ�nce of CÜð objects extracted Ä P   E."""§ #8½ -@pibutes ¼ARFC Ü 6and•protocolsD `header„j f.info(a1_hd' 1 â.get_all("Set-Ä f2", []: /ns5 4  2U._nowÚ �int(time. 2())� Ò¨ 0 Ùn*2(  Q Pif (()Z Í  P  Ý E) orM ‡ 2   - B -  _ § 3 ­ a d � ±ó[]  # no relevant5 ÍÆ: quick exit 6try¼ N  ,¦ m €is_set( 8 bsplit_l x_words(ô ),; �except E :ion‰ ò_warn_unhandled_. 7ion· y ¡ V = []Ø 9if  j
c ý  P #2| Úu¾  ,   $ns–“ 4 ? `parse_¬ ¥( ?drs1 0 5 " 9 , 	½ )[]Ý  ö: Ÿ S a# Look <Às (from Set-÷Cookie headers) that match
  ñ# corresponding RFC 2965 c@ Âs (from Set-R 2S .I ‚For eachf ¬, keep theT ± and ignore ‹NetscapeO � % (’ ò	section 9.1).  Actually,` 5109´ ,arM ù bundled in withx 7 ûfor this purpose, which is› úreasonable behaviour`if rfcI:<  z½lookup = {}  ƒ ù $in™ C G "[(/ ƒ.domain,4 U.path íname)] = None
u qdef no_Cing_º B(ns_] ", ´ = )‘ ekey = 5 ’  •   ˜ Ž  Ü preturn R 0not¶z - L ¿s = filter(Ë  ,— *s)'if Ù †s.extendG ® + _  T3setA´_if_ok(self•—, requestNƒ"""Set aÅõ if policy says it's OK to do so.""" \ .o õs_lock.acquire()% :tryã 6 e ‚._now =   �int(time. .()<- A  ñ #ok’á  Ü  6  . 42 ")
< " 0finÝ® 4 ä `releasä å 
w	qh,�out check±whether or �ù t should be setzc4š Š  Å ç ”#if B‚ rn c: c[c   ÓEMc2 =' ‘  • _  �] T2: c2_   ] 3] 
& 	\ $c3B  Û B ° % ×(dextracRsÜ» ¬OE5 Q!s Í4 ±where allowÎQgivenN 	é‹_debug("Š P: %s"î Epse.info+ m  #

D DmakeN(Å « ð ):
            ð    if self._policy.set_ok(cookie, request):
-  ò_debug(" setting 7 c: %s", ): t  l 2 p , zfinallyw 5 _2 ñs_lock.release()
g  def clear(, ó, domain=None, path Aname Ù @"""C; S some½ "s.X  ù PInvokå òthis method without arguments will„   a
 Ias.  If£  K ågiven a single= d, only{ q belongr co thatÏ c %beO qremovedd  \ 5twoW s‹sS µe specifiedM  &× )inu Oare i 6hreÂ us, thenM $thJS   s  †—D andÞ %ish }ð Raises KeyError·€no match!h exist´5"""Œ !ifq € is not 
_Bif (1 $    a) or (!is2 0 É  r› a Valueœ (r    "Z  é Q tmust be°oõ # a 1 by° " L 3del±ô "s[Y  ][V  ][T]‚ Aelifø Ò ö B  #  õ 
 t â Ù °  Ø  « Ø 
Ò ± Ô %G *seé  1.]R = {}~S„_session$ c¡"""Discardù. Î•BNote[ u.save()QPon't   B õ  anyway, unlessË òyou ask otherwisebs]ô a true ignore_d  ®Þ*	h`acquirh   +trž3forí 1 in¤
a 5 #if# .‹ #  ' � È6.òÉ.A  ó%:-�_expiredç. × çáYou probably d×�need to cG+: G  nUneverç�sent backA  9PserveŸñrovided you're uù�DefaultCPÜð),
        this mó.ethod is called by CookieJar itself every so often, and the
  ’.save() mM `won't  ¡ expired cS õ	s anyway (unless you askI �otherwise‡ òpassing a true ignore_R Õs argument).
? 5"""  ¹ #._x õ _lock.acquire()% Etry:  Í °now = time. +   3forÊ @ in b 
>  $ #if# 3.is­ nd(now)+  /  E r.clear(¬ „.domain,F Epath Fname¾ kfinallÂ Q 
ø `releasø ì Ðdef __iter__(/ › ñreturn deepvalues! H)lB >lenA B"""RD €number oVntain.©Qi = 0™  c  " Ui + 1& § i� ?repÑ U = []9 _ �r.append(B †)fl Ó"<%s[%s]>" % °_class__.__šù__, ", ".join(r)./stž ,$st#� 5ð	
# derives from OSError %ñbackwards-compatibility with Python 2.4.0
Q Load> (F 0): Á
  EFileX(
 {5""" ò that can be loadedŸ  v U±d to a fileIÝ“Cinit”,!  —À=None, delayP á=False, policy ‡  �›”  lYe NOTŽ @the ^ dh � until eiÁ   .k Q() or   [  .rIt)vÄ€ iJar.__Û » ¤!if†  �  Ë@not õ 
s 1" p= os.fsZ( L  . % =Y Ç ! N… = bool( ö ®+�Ítdiscard’ ã 
›CSaves b   ra@€NotImple#ešš � É š 6 š O£ ˜   ¨¤!ifW€5is Î‹* =& › d belse: VÄ—ð	MISSING_FILENAME_TEXT)

  ówith open(filename) as f:
!  ôself._really_load(f, 1 õ, ignore_discard ‘expires)
L °def revert(O @ a=None,$ m  
T l=FalseZ  )¬ ð"""Clear all cookies and re¶  Áfrom a savedÈ .¤  { ñRaises LoadError (or OS 3) iÅ õsion is not successful; theÊ ñobject's state will0  be alteredO Çthis happens‡ 5"""I !if¥  ž t  0ô  ´ 0if T.“ &  š * < =& `  C pelse: rý a Valueñ ó(MISSING_FILENAME_TEXTÒ 7 w _kõ _lock.acquire()` Ftry:a 7 Bold_°= copy.deep	 .Q C  5 	l U = {}b   f  	  4  üàE¯@ dexcept 
v ( ` ¯ 5 = Ù 	›  * [0finN
R 	N N`releasN 

C3lwpo R_str(zð"""Return string representat°Aof C0 inªC LWP%s format†@Actu£ ,+   Yòextended a bit -- see module doc| E ÇSh = [® .É,y  .vm) u("path"!   
  fdomain"  !)]t$ifZ @port± 
!h.h@d((" B   )n@ ø ath_specified: >  0", e< ?ort<  < Ï É_initial_dot|  ?dotA isecure5  1 ª	2  "š Ç ô time2isoz(floatå@ -))y	n  ¡ jcommen Å p  I_urlt  =urlD  , )çÔkeys = sortedÞ `_rest. (p Pfor kY  ×5 k,—	A 0[k]¸) @"ver`"1  0 rêðjoin_header_words([h])

classáòðJar(FileCookieJa±r):
    """ òThe LWPCookieJar saves a sequence of "Set-# ‘3" lines.> 
 ñis the format used by ñlibwww-perl library, not knownK ð2to be compatible with any browser, but which is easy to read and
Ö ò doesn't lose inŠ ñion about RFC 2965 cï 1s.
{ òAdditional methods óas_lwp_str(ignore_discard=True,  bexpire ):  ^[ Gdef G Eself8 M sb « Ù ”"""Return» ! a¥Qtring£ë\\n"-separated³dheaderð  Q ¼ „  A
Ï ²s: see docsd ‚for File@Jar.*ï  Q  ó     °now = time. !()  er = []  U Œ@ in ž +   !if&­  6 .À 
6  : …continuek   
O e¸sü O 2is_ Wd(now€ >   W ˜r.append(€: %s" % B^ I )×ó"\n".join(r+[""]I @ h(æ, filename=Non�V=Fals É s Ë %ifG  H J 
?!ifŠ.m  &  ¬* < =& 	ióelse: raise ValueError(MISSING_FILENAME_TEXTê  ^óTopen(| `, "w")íf¥ p# ThereÿQlly i÷ anÌ £Ss 2.0�<éthis indicates± `# that¬ reð YextraB1in q °(domain_dot:F  port_spec)ª°le still be§Ý‚, I hopeW   Óf.write("#LWP�†s-2.0\n"B*  '.qi¸{)| fÄ_really_loadnq: l J ž magic = f.› - iÑ§ ) ±_re.search( © Ø °msg = ("%r ÜÇlook like a ™c (LWP)ñ Þ C  "W •   H
E°BLoad¯3msg! D Õü_) =v:ƒ Ñboolean_attrsÐ (�", "path5  _%",a  € 	 q"secure1 ”vrm Àversion",
    Ð"port", "path Ÿdomain",
. ¿   "expires" acommenV  eurl")
S Etry:  h zwhile 1   Ðline = f.read )()9  $ 0if  ß == "": break% 1not) þ.startswith(header)y  Y �continueM o M E[lenF ‡].strip(ë  H   òfor data in split_{ €_words([S ]ˆ  name, valu F =[0]•  f ßstandard = {}" Orest  ¦ k£ ßboolean_attrsp ®[k] = Fals- ( X 0, v[ À ?1:]V €if k is ±ONone*  \ Ïlc = k.lower  #   ?elsI  p 9 D ð# don't lose case distinction å ïunknown fieldsI `if (lcÖgD) or 	€ ’   ok = lcl 	Ó R  if« s �: v = Tr  +  z
vŽ "elÞnÐú á[ â ý¡ ¢ Dh = o O.get% U = h(— Bdisc�3h(" "+ 4if Y û- ³= iso2time( ` ÚÞ 
· ø' Ø  �_specifie› ‡/".>  Ü÷Cookie(h("version"), « Ë   "h(æ ),² ñ� /"): ª ",  6 Å I  ?dotJ  „  b„ 1athN : osecure, Ø À              –discard,
 
 Ïh("comment")- ?url0 _rest)‚ ãif not ignore_­ s and c. :9  Å �continue! 
Z sexpiresZ 2is_ od(now)b $öself.set_cookie(cã êexcept OSError` Frais³ * E1 :ion, ò_warn_unhandled_. Fion(l  
T Q Loadq ñ ("invalid Set-CŸ ÿ3 format file %r: %r" %< S   (, òname, line))


class Mozilla[ …Jar(File RA"""
` ðWARNING: you may want to backup Âr browser's Psª  if # u4Rthis „ tto save/ ð.  I *think* it works, but there h- Abeen” pbugs in b past!« T` Õdiffers from Ü T only9 S it  sÒ ’ 1andd DloadŸ    ØN aÜ 7.  o AusesŽ \‚/Netscap,`S.txt'Ës.  lynx|  ¹  ° b, too.Õ ÅDon't expect�  ª @d wh4the€° is running³  be¡qiced byÕ , ”(in fact,ð on unix will overwriteÃr®!ifO  `changeý mA Cdisk™ 5it'� ; €Windows,R ñ  probably can'tO  Ö s at allC ° Ü )0Noty a%Æ { áÎ õdowngrade RFC2965K!to| ±  onô 3ingm àIn particular,ð + � version âport number in‚   ris lostž@toge×Y with' ‚about wh  orÀ€ Path, PZ  …DB wer_qspecifiæ˜ 9W2 (orI‘) header,­ h "thP Ôdomain as set.CHTTP= ‚ started¿ ø
a dot (yes, I'm aware somM ®c êsF D  Ý  8 ! dó�-- trust Ã1you§creally" Šâknow any more D l(Dough+–  usMce same<çy¤} `slight ^3entseÜ Ç	!usŽ4he j L ˆð by default (Mozillña can cope with that).

    """ ñ(magic_re = re.compile("#( Netscape)? HTTP Cookie File")< €header =M 5\
#2 0 ñ
# http://curl.haxx.se/rfc/cV ð'_spec.html
# This is a generated file!  Do not edit.

Ä ‰ ðdef _really_load(self,  õilename, ignore_discard ‘expires):I  °now = time. "()1  -â = f.readline(
  !ifœ  { .) ±_re.search( d  0 õraise LoadError(�     �"%r doesW ¶look like ahrformat Ds%=" %I  = Ê 6tryò  m zwhile 1    æ ó      2if '  v: break6 "   ý%# last field may be absent, so keep any trailing tabÌ k P.endsÕs("\n"):€  _[:-1] ðskip comments and blanWÀnes XXX what{o$ for?} (é â.strip().startˆ í("#", "$")) or;  ;   =, %   ŽcontinueÅ ‚domain,  7òified, path, secure, e× , ø`, valuã\˜  s œ ƒplit("\tá   Z D = (
 = "TRUE,  ž  6  @ !if¸ $“ “ #öò.txt regards 'Set-©€: foo' aHceü #!nor ‘, whereas°.8 5jara !itR K 0 R v.,  —" =˜! < o = Non Óinitial_dot =�/".– cassert. ; fP t 3� = False¯ $ifo K /""±e’Ó  Ä œ_ = Trý�# assumeìÁ Ois fš 3c =·)(0,Å Œ  s,ì ( 
ÒŒOB 
´V( 
r# 
_Ð,
             ›discard,
  ONone! +={})a ãif not ignore_ˆ s and c. :5  — �continue 
R sexpiresR 2is_ od(now)Z õself.set_cookie(c)
~ êexcept OSErrorY Frais¨ * E1 :ion, ò_warn_unhandled_. Jion(<T Q Loadq ò("invalid Netscape format ¬ õs file %r: %r" %¸  K (, ³name, line)ç �def save(,Q  % =Ât=False, us w%ifG @ is J 
0if n .’  &  0* < =& 	Þ belse: 0RValue1óMISSING_FILENAME_TEXTê  —with openš"w") as f¥ bf.writz.header­°now = time. Ë3for¦1 inÉ 
_  Ž i'Œ,?W 1+#ifÙ ’.secure:  ™ = "TRUE"© è ­& OFALS'  Y Ðdomain.starts´ÿ("."): initial_dotn + s eS!is»‹É Í ) b= str(‰.> 
!.  ¨H "2vÝ !’ #�ñs.txt regards 'Set-Cñ`: foo'äa+ ’  # k@ no ò , whereas http.é 5jara !itR K 0 R Ç .,  m  Î A9 # =¸ .- F `  >  / =  ' e  P   B ²"\t".join([ú .Ä,´,Æ Opathv
 S 0#, \,–� 2])+‡ À            ð8   "\n")
####
# Copyright 2000 by Timothy O'Malley <timo@alum.mit.edu>
;   PAll RJ °s Reserved
' ñ0Permission to use, copy, modify, and distribute this software
# àits documentatK ñ for any purpose& ñ)without fee is hereby
# granted, provided that the above� ðnotice appear in all
#! 1iese ; BbothE  Ë 
; n_ Eis pø =
# X ªsupportingÙ e    žname of
#— T 0 beRdª pdvertisS °or publicitppertain &tol H!ofp Dðspecific, written
# priY Ø .à0ð4DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
# SOFTWARE, INCLUDING 9 xIMPLIEDA ðOF MERCHANTABILITY
# AND FITNESSC À NO EVENT SHG Ÿ ÑBE LIABLE FOR@ �Y SPECIAL@ ðDIRECT OR CONSEQUENTIAL DAMAGES 4ANY ð
# WHATSOEVER RESULTÁ ðFROM LOSS OF USE, DATA= �PROFITS,: ðETHER IN AN ACTION0 ðCONTRACT, NEGLIGENCE; O. pTORTIOU;3 `, ARISv 0OUT@ OS RCONNET y0THEŠ  õ �PERFORMAZ F‹‰×ñ
# Id: Cookie.py,v 2.29+ð/08/23 05:28:49 %� Exp
#  G_  µ€a Python@ule è 	PhandlÁpof HTTPg c˜ Us as 7 0dic ñary.  See RFC 2109J !moSr informJ3on I ù ð  The original idea¸Streat
r k   c§@from— ðDave Mitchell (davem@magnet.com)­ñ1995, when he releas˜ ò¡ first ver6Rof ns£ 1.py¥  ž°
r"""
Here' •sample sekPshow  wY’module.
A  moS, !isJonly•0.

…Basics
- D

ImÆðis easy...

   >>> q http i' hs

Most {àtime you start;cl ìa2 S 3C = @s.Siò >q()

OncI 'Ò C  edX r¶, ð can add values just@Öif it were
a Ùy î ôC["fig"] = "newton"	‚C["sugar Vwafer �.output(). R'Set-Ó b: fig=J H\r\n N =I B'

Nµ5€printablYðpresentation of ða Cookie is the
appropriate format r a Set-+ ô : header.  This: ð default behavio àYou can change` ; ñ and printed
attributes by using+ ñ.output() function

   >>> C = c¸ ‚s.Simple› %()" þ["rocky"] = "road" b["path# /P & ž $(C… ó "="h 1:")j   k =f s; Path=N s M  ò Ss=[],W õ

The load() method of ¾„extractsð from a string.  In a
CGI script, you would us›$isX 3to O ‡sR  #ÿHTTP_COOKIE environment variable.§.Ô ñ"chips=ahoy; vienna=finger"hô‹ '�> H\r\n 	L 'Fðis darn-tootin smart about identify‘x
withinZÐEscaped quota¦ñ marks, nested semicolons,÷ðother
such trickeries do not conf�/itF ñ&'keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";'N `¤ CU T S R ¡

Each ele!ofE)ð also supports allÅÔthe RFC 2109
) ð.  Here's an exaí¡ which setµsG:b["oreoµdoublestuffC! 	, 5 U =P !diÐ5ary)àhas a 'value' ",ì PgivesµQ
backT+ ` assoc¯ d œ ?keyBtwix1nonú l ç AC["t" .u  ×') Z‹P expe’Athatë; As shv³be standard¦°s.
Just to  Yure, R binvokeó str() buil¶ to:Pvert
Nj  H  F!en Ps are@ ŠO-sty½�["number:7 I2C["w h"sevenJ4 L/7'=    D $ 
\ ,=7‘ =H À

Finis.
"""ò

#
# Import our required modules
#
i $re
 dstring òtypes

__all__ = ["CookieError", "Base   TSimpl ð]

_nulljoin = ''.
 °
_semispace   %;    Ç ÷Define an exception visible to ExternalÛ bclass œ ¯ $(E: ð):
    pass


# These quoting routines conform` ðthe RFC2109 specifica… ð, which in
# turn references 6 °character dÃ i5 as fromQ P068. � õy provide
# a two-way” ö
algorithm.  Any non-text _ ÷	is translated
# into a 4# @sequš ð: a forward-slash followed by¶  Ì ðhree-digit octal >�valent of& Z – ñ '\' or '"' is
#¾ ðed with a precedb ( x ´.
# BecauseT  ö ð
browsers really handle co{Ðs (as opposedœAwhat± £ñ says) we also encode "," and ";".Pó™are taken‘* î ¢  ,Ò  _LegalChars  rahe lis ‹sTdon'tq0 "'6 #_T¥"or € hash-taÊ�for fast: ˆ(#
w "= Ÿ°.ascii_lett&+ d®òs + "!#$%&'*+-.^_`|~:"
_UnescapedÃ =Ñ ø+ ' ()/<=>?@[]{}'

© ñ= {n: '\\%03o' % nAÁ    º ñn in set(range(256)) - ›map(ord, ‡ 8))}i ‘.update({_ �ord('"')z 6"', #\\ à\\',
})

_is_l¡ð	_key = re.compile('[%s]+¶ 2re.(Vð)).fullmatch

def _
Se(str)³r"""Quote ak ? ¶Cin a™‘ header.
¨ I#±Â does not neµ¡be double-m  d,QPn jus7I1theJ C ð.  Otherwise, surround6 “ #inS R sÆ F (†"\)Á&al¿!s.# 1"""  ifS  ß@NoneÒ	^ ú!re® 1str= Belse_  ¦.£(`0) +5P


_OkJPattÄÒr"\\[0-3][0-7 A")
_•. s[\\].")Ð!un¹ "#  `re are¬9any?n#an Pre ca) b†yEB  Se„ (TL1len‰ M < 2)F7 `[0] != …dstr[-1 ; Ð
    # We havðe to assume that we must decod ðis string.
    # Down6 cwork.
 PRemov/ Ae "s Pstr =; d[1:-1]) ñCheck for special sequences.  Examples:C #q ·\012 --> \n 1"   "  Qi = 0
 Án = len(str) �res = [] òwhile 0 <= i < nm  l ðo_match = _OctalPatt.searchL 2, iO  , q, _Quote, 	tif not _ 1and C :O  ¡# Neither � !edµ    res.append’ F[i:]“  $ Ubreak2 f# elseá ¥j = k = -1# $if˜ '  I  + ± †.start(0j 4if ½ I  5  \  5 	 (’or k < j)%# Tk';k+1!  -Uk + 2À * Å  %# Ÿ j~ Ÿ qchr(intÎÖj+1:j+4], 8))n ‘  ° Qj + 4° ð(return _nulljoin(res)

# The _getdate() routine is used·ñset the expiration time in ùcookie's HTTP
# header.  By default,b Š s< iurrentP ñ appropriate
# "v 0es"0mat � a Set-Cy p  Ê `one op¤ €al argum_ °is an
# offÍ �from now,Ã `secondKRFor eOD, an. ðof -3600 means "c Ñhour
# ago". C[ ð may be a floating point number.
#

_weekdaynamec°'Mon', 'Tue 0Wed 0Thu 0Fri 1Sat Äun']

_month@ QNone,ä ö 1'JaT 0Feb8 0Mar !Ap 0May NJun'8  ul 0Aug 0Sep !Oc~ 0Nov 0Dec… 6defÖ§future=0, Ý =ê %, µ =À )B‘T€mport gm ,Û Qnow = (æCyearT ó, day, hh, mm, ss, wd, y, z =K (A "+ ¨ B ñ"%s, %02d %3s %4d :  ‘ GMT" % \ˆ _' (ç C[wd]ƒ ã [
 2], § › ó)


class Morsel(dictR"""A  óto hold ONE (key, value) pairCRIn a }±, each such"  ‡ have severóttributes, so thisk i}íAkeep›a2 à associated wiñ:th the appropriate key,value pair.
    This class also includes a coded_v1 ñattribute, which is used to holdL  p ñ
network representation ofŽ ~ y 1"""5 ð# RFC 2109 lists( 5se q Ps as K Srved:3 `  pathÀ £   comment …  domain* pmax-age Qsecur
 ƒ  versio' - ÿFor historical reasons,“  "re/™ rexpiresR  e°is an exteny ö  from MicrosoftÚ ‚httponly<  B 0dicM’ary provi§rmappingP  ƒ“lowercase<  variant onÉ P left· + Qtradi` l9 pformatt] < RrightÀ_û A = {1  b"ÿ U"  :  ,   ¸"*    WPath" Ê= C×  Ú ? A: "Dç ê? xMax-Age  ÿ? S y"› ˆHttpOnly! 3` V@  �samesiteA PSameS à !}
`_flags3'Ž D', 'y '% òdef __init__(self) 7Ò# Set defaultf   & ‚._key =  k cÌb= None�  < 	S y±  ! 0for<3 in\ û—  '  Ÿ£.__setitem» ,: R, "")q @�2ertß ê <keyå Treturm ?key; ä = 
" ? E 
( K  · _é GK, VªaK = K.�%()L�if not KMöraise CookieError("Invalid¢¶ %r" % (K,)a †� ¾ 3setDú ¦@val=Æ S?keyÊ    Î Ì  ¤Î 
Õ ´ [–%eqzgmorselÍ }²isinstance(# <, M+  Ñ} €NotImpleeeê (œ .__x 6 an.  2   	�"= € .f1  j=/   ^  À self._codedò_value == morsel._coded ò)

    __ne__ = object.  ñ def copy(self):0  4 N A = MW %() Âdict.update(& !, = "  0.__+ $__-  %  P creturn¿ • b  5 !, å sŸ •data = {}u qfor key, @ in | (8 w.items(@  ã Pkey =4 g.lowerã    if @ notN  ‡ ¦._reserved' *   ðraise CookieError("Invalid attribute %r" % (¦ )  ?  Ï p[key] =ì Õ  Å ? , * × »3isR” "KeÄ7, Kè ]Kã Ì r1set,ù H%, MT R 
ô'Attempt to set a X y O %r'& !if‹Ð_is_legal_keyJ˜  In  !Il1 \  gÐ# It's a good) Õ, so save it.' 7 lÀ2 E ©SzÁ__getstate__ƒÖ Â{n  ç a'key':w.
, ‹    " “ (  . }¦ s¦ !, ´ ­ ð " [ª ]Ÿ ! ’ " =? ![' '% � +  &']› Toutpu¾ qòs=None, header="Set-ž':"° ]a"%s %s�1 Ò!.OW qString(W )|R__strT$ ‹ o__reprÈ‘'<%s: %s>å€_class__™_ame__ z  ö?js_ò Ü õ# Print javascript†÷ %"" <# Æ type="text/9 &">( õ!-- begin hiding ¡document.c¥ = \"%s\";" c// end8 7 --V /  !""�!‡ ø.replace('"', r'\"'!	2  D ,‡	$ÀBuild up ourˆ&ul'#º ¦result = [¦0appÎ =6 . 	 ¤À# First, theT=çU pairX 4 S("%s=€ ­ ."Ýðà à    # Now add ó	any defined attributes
  !if ¥s is None:  !  1 õs = self._reserved# Aitem aorted(&  5())% ñfor key, value in # 
i #if Z== ""  ‰ …continueV    ifY @ notV ¬ :  m ñ	expires" and isinstance(® n, int)U òappend("%s=%s" % ü "ã[key], _getdatM ) ¿ #elÁ  ‡ max-age‡ 'd‡ Ë } 	comment} ?str(?quo#inc^flagsp  IŽ?str‡ù såC ÑJ‡õ# Return the result r ñ_semispacejoin(r% !)
' p__class( Q__ =  ðmethod(types.GenericAlias)


#
# Pattern ^áfinding cookie ðThis used to be strict pars*  ba o· qRFC2109  ð068
# specifications.  I have since discovera ñhat MSIE 3.0x doesn't
# followñcharacter rules outl’iƒ 1oseo  f cAs a
#K,= µ ; Óhere are lessØ ò8.
#

_LegalKeyChars  = r"\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\="
B V§D "=  U Á+ r'\[\]'
_Cm‡ñ= re.compile(r"""ß0\s*] @# Op^�al whites%Ä at start ofÒ A €(?P<key>   4# S5 ±group 'key'† o[""" +Ë  ð"""]+?   # Any wordu °at least onf hH )w   A# En@ € (%   : :õare mayÛBbe a.‡ O\s*=Y
Á# Equal Sign2  ;?val;  =2val=þ"(?:[^\\"]|\\.)*"Â >adoubleíd—!ng} |1  A# or, �\w{3},\s[¸ \s-]{9,11} ±d:]{8}\sGMT°  žqal case"Èàttr
    |       	P# or
! ð[""" + _LegalValueChars + r"""]*$ ñ  # Any word or empty stringE )&  ò# End of group 'val': ?5  x 8  optional v£ G A #\s£ H ¹ `number€ qspaces.; �(\s+|;|$¾ ´ áing either at > À, semicolon,2EOSP ð """, re.ASCII | qVERBOSEb #  ð8may be removed if safe.


# At long last, here is the cookie class.  Us� Bthis  ' ðalmost just like
# us' Qa dicC‘ry.  See : Âmodule's docÑ  fâñxample usage.
#
u a BaseC† (O !):Hã"""A container�  F Pa setvÁMorsels."""
3 2defÊÐ_decode(self, T  Î�"""real_ó , ( d   =+ $ue> qSTRING)[  : ð Called prior to‡ tD"'s@ Q from\unetworkB  representa5À.  The VALUEg Ž– R readF EHTTP? bheader ‘ sOverridu1funŒ › amodify„ Pbehav² #ofì© B  ;    `returnÃ 3S en+S%> ì R) ! ³%ryU!be­ssignedFE€strval =ÉF(valí `! ,  6valfƒ__init__b§input=None¼1if  " µ   æa.load( )T 3setQ 0keyHúc ñ"""Private methodº?setë@Mõ �elf.get(n ¡&() M.‘  …,  ë¥.__setitem= Må # J
Ù D­� style aAmentE M   g�sinstanceÅBue, Í Q  * w# allowI  ™³constructed7 qs (e.g.L†picklingê  J î 	Ë ñJelse s3, cy „3 _v 
o 4]«B Zðoutput(self, attrs=Nóone, header="Set-Cookie:", sep="\015\012"):
  õ"""Return a string suitable for HTTP."""1 µresult = [] ñitems = sorted(self. 5())%  N ákey, value in # ‹  ’ ^ �.append(* Ô.output(attrsà X r¿ ’sep.join(C !)
y ¢__str__ = F  Ádef __repr__® lÛ ElÖ ±'%s=%s' % ( ˆ ë ñ )Ý ‘'<%s: %s>6 `ñ__class__.__name__, _space#l) ì 2js_ÿ í !, KW=Noneù 
¯JavaScriptlÎ È .Q_nullr­
2loa š, rawdataaLoad c7fs from (pN Qmably±_COOKIE) ork ¿2 Ðdictionary.  S  WV $ E 'd'B ú	is equivalent to calling'Bmap(Ý`.__setJ Ád.keys(), d.Ls‚Çãif isinstance(, Ó mPparseM4ing/ ÜJelse¢ !# 9 ñupdate() wouldn'tÐ Ç our custom À  x /¥ Z
p  3  r r[key] =eQ $ý	Ð  9 ü ‚, patt=_\wPatternPi = 0k 	 °# Our startéUpoint{ Æn = len(str)6 °# Length oft5ing1 š  d_Ó T![]6 0# P‚‘d (type, :ã•) triplesB  morsel_see} °False   # A6 =5 ò pair was previously encountered+ z õTYPE_ATTRIBUTE = 1h  pKEYVALU 26 ±# We first Ð £ the whole^ö ð  and reject it –&t'Ê  # syntacti€y invaliñhis helps avoid some  esU inT 5ion® #÷eacks). úwhile 0 <= i < nT0# SÔ  l!ngaÀ C  $qmatch ==.  ï6, i" ' qif not ! 
j   „# No mor"    Vbreakd  Ðkey, value = ùmatch.group("key"),  wval")
  3i =# zend(0)
 ùf key[0] == "$":  G þif not morsel_seen$  ( ý## We ignore attributes which pertain to the cookiek G ðmechanism as a whole, such ¿"$Version".@ úSee RFC 2965. (Does anyone care? t   ~continu• ðparsed_items.appFñ(TYPE_ATTRIBUTE,Dº1:], value)c 1elifÑ.lower() in MO®._reservedTxsInvalidV stringmreturn "if¸ Ž is None�  "Å _flags5  9 BM, Tr= A   ?els˜   /#  0 	e Ä “_unquote(   m Yqp rKEYVALUuq, self.Q o_decodx  õ Ã! =l	
ý ZRR 5# Té“ ò ª¦, apply itÄ1M =| ©  „# curren{Z afor tptp Q1
‹Pif tpß
µ
%  s €assert M¨ šv  !   ‚M[key] =2	 AV ƒ Â	=  \ ¯rval, cval`  # ï¶__set(key, 3 
h ,  S 0 ² ñ


class SimpleC‚C(Bas )1"""— & “ supportsÈsˆÃÔs.  When sett| è˜a usingøðdictionary assignmà@nota ,œ ‡ Qcalls; pbuiltinƒ  ()H@conv¯h @to a  ping.  VŠsF ðreceived from HTTP are keptË 1sŒ#deW Jp* bõ ó)$ eD !en›D  stÄ  =º  4È^ Àstrval, _quoðte(strval)
"""HTTP server classes.

Note: Base  ðRequestHandler doesn't implement any ) " r* q; see
S!   A Qfor s D ðations of GET, HEAD and POST,

 ?CGIL  CGI script¼ !It¢ Ð, however, op] Fallyp ° À/1.1 persistÈ `connec- As,
aŽ v con 0.3_s on � /
- 
b

Thisf‰ sñ ë BÈs to cgi-binÜ ñf the os.fork() fun° À is not presÊ P(e.g.© ðWindows),
subprocess.Popen()5 ñ#used as a fallback, with slightly altered semanticdÁn all cases,“ Ï É Z  inT1iony€naive --8 
'Às are executa ôPynchronously.

SECURITY WARNING: DON'T USE THIS CODE UNLESS YOU ARE INSIDE A FIREWALL
-- it mayj ð arbitrary Python code or external programë  Â that status- 0200ä lPprior°Ê 0ionÇa$»S, so
¢@ canª¨send otherY `s such‘ö302 (redirect).

XXX To do:

- log,Àeven later (8óapture byte count)2 puser-ag"aheadery†  °ñresting goodies
- § Qerrors ðto separate fileCñ


# See also:
#
#]P WorkM oGroup  ÿT. Berners-Lee
# INTERNET-DRAFTF ' ñ#R. T. Fielding
# <draft-ietf-http-v10-spec-00.txt>7  üH. Frystyk Nielsen
# Expires September 8, 1995>  TMarch/ .PURL: ‘ p://www.dÀuci.edu/pub/± /  /Á N 1and Network‡!R7¾ ·0Comå~s: 2616Ý  ðet al
# Obsolete> ?068,  @Junebñ9
# Category: Standards Trackù OÐfaqs.org/rfcs  » P.html¹1LogÊEs
# ¿H PHere'0quoï1romëANCSA¯Ád docs about  'Amat.C P| The   8ðas follows. Each lin«nŠ xP:
# | ð host rfc931 authÃó
 [DD/Mon/YYYY:hh:mm:ss] "Y " ddd bbbbC ð 
# |        hosò	t: Either the DNS name o ÁIP number of! óremote client
# |  ñrfc931: Any information returned by identd f] ¨is person,G N @ - o• Xwise.  Ðauthuser: If 	 q sent a i\  $ Qentic‚ ,¸ +  Ú n  p xDD: Dayƒ ñMon: Month (calendar5)& ¨YYYY: Year Ñhh: hour (24-	 *¥ ùmachine's timezoneS ¸mm: minutesT ©ss: second ôrequest: The first lineÉSHTTP $ 2 asG!by-Þ	xAddd: ¹status codeÜ >ú
server, - if not availablÄBbbbbM WtotalbBbyte‹ § *R ‘including�  Å Ï/1.0 header*{  +  ð  You can determ ´  ôfile accessed through%ò .
#
# (Actually²ðlatter is only trueü �you know¥ ‘ configur•Q
# at  ê	 Œðwas made!)

__version__ = "0.6" 1all  [
/"S{�", "Threa"
 @Base R’Handler",C _Simpl  _ "CGI9 ä]

import copy @dateÔ  ´email.utils Fhtml 2tp.p $io
 …mimetype: o
 ”posixpath, eselect hr  úocket # For gethostbyaddr()$ ¬ yp Ó Äurllib.parse+ ócontextlib
from functools $‚partial
 Dhttp  ]SVð*


# Default error message template
DEFAULT_ERROR_MESSAGEò""\
<!DOCTYPE HTML PUBLIC "-//W3C//DTD ‘4.01//EN"þE ’ ð://www.w3.org/TR/ªð4/strict.dtd">
< >8 <v  C `<meta H �-equiv="C€nt-Type"`tent=")[ 0;chD‡t=utf-8"K qtitle>E¢response</ | /} W<body= -h1: 'h1  p  Ä@: %( Y)d</p$ Mz ! …<)s.% ¢  A q explanÞ 4   q)s - %( (in? "</´ <k>
"""
Û�CONTENT_Ï/= 6�

class G!(sðÌB.TCP1):
;àallow_reuse_adð,dress = 1    # Seems to make sense in testing environment

2 ñdef server_bind(self):    """OverridM '  a „store th • name."""= bsocket^ Q.TCPSh . o 1 Ðhost, port = Š , !adç E[:2]-    {  3 q �.getfqdn(O )0 c   ó


class ThreadingHTT« (Â ! vMixIn, ( 1�daemon_t(  ”ETrue` @Base3 êRequestHandlerc jStream" "):ª0"""? " r@ " hA a base Ã .) ¡The followòÑxplanation ofµ ñ& guÚ°you throughÑ3Àcode as well ðto expose any misunderstan4ñs I may have aboutE ± @(so b  don't need? m m  i ñto figure out I'm wrongE 3:-)Ú O ó HyperText Transfer Protocol) is an extensible p 1 onN 0toppa relia" su  tM  ð (e.g. TCP/IP).  QG D  recognizes7qee partP W ßµð1. One line identify– 7É0typUad path` €2. An opµ`al set³ ðRFC-822-style hea€0 30 Adata“ . Q and   ar¸ñparated by a blank« o ø Qfirst  ƒ ·  haþ  k"rmi °<command> <Ë ²> <version>  fwhere &  ¬p (case-©ðitive) keyword suchyÁGET or POST,î ] > 0strOpcontain  z r informõ1forhoD  ž “ should bÏT nP/1.0"  ;1".…  enÂ@d us  "AURL    ‚scheme ( á%xx to signifyJ  2 ò	ASCII character with hex$xx ’‚specificÞ  Ša©-s ÝcCRLF b• Òcompatibilityo  ˆ Àwidest rangeð€clients ñammends³ Âcs alsoˆò LF.  Similarly, whitespac€%he¹ G 0is { � dbly (a¹‘multiple E  s between »  on— E  Ê4 Ptrailv~ ;›  qoutput,Ú s út™b9Bpairù ”but most vgrok LF»³s just fineF!IfI)?Q(i.e.TÀsion> is lefò+t out) then this is assumed to be an HTTP
    0.9 request;/ ðform has no optional headers and data part E ðthe reply consists of just‡ 1 !.
* T* g !of!  Ž ñ 1.x protocol again† Qthreeo "s:D ñ1. One line givingE Ñresponse codem V2. AnÄ 0set— ÔRFC-822-styleÙ 0 03.    à j A† ,^ ñ	are separated by a blank˜ 	î —  ×  e i ´<version> <Ç  Æ  rstring>/ fwhere 5 !is¤ >N 0 ("Z”/1.0" or  A1"),ñ m  )” 3-digit ˆ O€ indicatl¡success orD pfailureZL,Í ¾ ‹’@ ò human-readable * € explainp 2whaG
’ Umeansh�is server*"seØ‹  œ Äœ  qcalls a‰ @funcî� specific. 7 G ótype (<command>).  S+ BallySaN  SPAM willsThandl( method do_$ (I QIf no‡ Ssuch " !exL … Þ @send†f error¥ toA ò client.  If it D , 0is ñ ped withà„argument[“ hfNote t€ÛP nameÊ0casÒnsitive (i.e.ö  &Aspam�  )€differenWE %s)»•e various:Pdetai˜ còtored in instanc/  ,µ "- ó P_addrš E IP   xb (host´bport);ó #- àa, path<O Ê  Œµbroken-down´  ŽC i %a¹ òof email.message.M á (or a derived5`class)Ot y X 0 in:a­s Arfil–!a 
 °object openh a N po¯Roned Wo  stÏŽõQinput¾ Vtl wb .
 l 0wri*âð
IT IS IMPORTANT TO ADHERE
 ò
THE PROTOCOL FOR WRITING!Ž �1firH ¾ À ` Pten mab¢ g ‰ . ÉnÛ €follow 04moròŠsÜn»"thHbactual	p(if any´ �  † ™ ;¡ „ Qs dep®o‰  Á\c execu8  Þ;çPmost [@s, wÄ �1 isÍ �returned¸  ðhould be at least oð ne header line of the form

    Content-type: < a>/<sub
 $ Swhere U and   ð should be registered MIME @ !s,d óe.g. "text/html" or rplain".g 2"""	 ð0# The Python system version, truncated to its first component.
× Csys_3 B = "L @/" +P . ¸.split()[0]y ô server software{ ð .  You may want Òoverride thisy ¼  `ñat is multiple whitespace-separÃ cstring'"# iReach   B ³s name[/¿ ]r ¯ î �BaseHTTPð _ "__å ãerror_message_ª ò= DEFAULT_ERROR_MESSAGE¿1 c)_Ø / ÂCONTENT_TYPEf ÷ default requestKñThis only affects responses up until~ #±Spoint  ÁQ ÕÀis parsed, s@ maiZ Çdecides whatL ðclient gets backW ð n sending a mal%ed·  f m²# Most web x$s ä 0to uñ 0.9, i.e. don'tY ‘ a status†K 8 _Ë § ¯ H C/0.92defá , q(self):Ô  î@"""P% a³ £(internal)^ (  Wo º0sto¶idlf.rawh  ø ;€uresultsr  1 `comman} elf.path, ¡ .k Ú 5andA ! šs¢ ¡Return Tru¥â success, Fals Ãfailure; on  Ò, any relevanë ï êXð has already beeï !nt�  … <   ¤ Þ ñ = None  # set in casPf !on(� 8
ê =" =,
F ñclose_connection =*% f    X !tr)Òÿ , 'iso-8859-1')> L  .rŽwp('\r\n1  ( $ = ‚ X Zwords z$ qif len(+ f) == 0Þ ‹ra  
6 P>= 3:¡`Enough¡`determù„protocolxz  H Q1 = � I[-1]  :try�  5 Vif noÓÁstartswith('À'¡ 0  Àraise ValueEZ	j  % Dbase4…_number 0:‹'/', 1)[©  ? àversion_numberû = base_version_number.split(".")
  ÿ*# RFC 2145 section 3.1 says there can be only one "." andJ  �  - major  r minor ‚ `s MUSTG ¯treated asA ÿ   separate integers;* ó- HTTP/2.4 is a lower ù T than! Ï13, which inK p   turnH F > O12.3€ ÆLeading zeroá ýignored by recipients.x sif len(° ©}) != 2:-  ´ýraise ValueError% 
K   =@` _[0]), *1]†except (o q, Index{ )¢ °self.send_e� (ž  Ã  ±ÿStatus.BAD_REQUEST,, Å"Bad requestÖt(%r)" % 
´  b !reÉYFalseW $if5 k¡ >= (1, 1)­À „protocol? $ "µ _/1.1"õ £close_conn?/=  O2, 0L0 ¢ ÿ_VERSION_NOT_SUPPORTED[qInvalid A (%s\@ hH·G=e 
”±if not 2 <=`words) 3hQ Y	 þ U	Qtsyntax P± Jlineì Pñcommand, path = ¼ H[:2]Þ  Ý =) =ÔÕ 9 =Tru·n  Z'GET' õN #	 % ' , + 1 E/0.9…Etype2– 
. < 2¢ 3 !,  <   �# Examine„� headers©`look fc& Ct0dir~&vei:try+w K �= http.clŸs.parse_ () _rfile@ ç  
q_class=H €MessageC .`„ ÿLineTooLong as err¿  æÀ        HTTPûStatus.REQUEST_HEADER_FIELDS_TOO_LARGE,
  þ "Line too long"! ™str(err)); Åreturn False ñ	except http.client.HTTPE µion as err:1  Œ ùself.send_error(  !  C Þ &ÿToo many headersá 	y î ( ±conntype = Å c ö.get('Connection', ""P 4if 9 ÿ.lower() == 'close'  _4 P g = TruvPlif (   � 	T õ keep-alive' andº  W µ Ðprotocol_vers¤@>= "so/1.1")� 
a# ExamW$hey € ð look for an Expect dir× vÐ  U4 Q!(e4 ü à"100-continue"~ þ  8 request7bif notprhandle_± [_100(d œ^ üÌ Ndef O  ‹S ð
"""Decide what to do with„"Q*: -É!.
f  � rIf the ÔB is ¿ Ping a< # Ciõ response, we mustD  d| leither=  e finalH u beforeF @waitw  E “ ‡ð body. The default¦ “to alwaysO 	» ð. You can behave differently (p vexample#0rejÃÓunauthorized ‘ Ðs) by overrid± ·this methodYT ƒ should îð (possibly after .5ing„2) o,  ë] seØ c F Åœ 5"""  U¥Ç€se_only()œ†CONTINUEê5  ÙP&s( { Èe ÌCone_F(C 
ÍH@  a single ‚ u½  Ìðnormally don't need •'e “@; se  ä1ass“  ù°__doc__ strÅ 0infX  Úp on howU ˆ‘ specific— F Ðcommands such1GET‚GPOSTµ r?try| 4rawð line = self.rfi÷le.readline(65537)
  ðif len(self.raw_request/ @) > 2 )6:2  = / + _ = ''& 
�_version* command" úsend_error(HTTPStatus.REQUEST_URI_TOO_LONGå  ³ ireturn¤ rif not Í 
ü ó Òclose_connectÎ ITrueV m Tparsek.()m Q# An é ÿ code has been sent, just exity PmnameUbdo_' +ï l	@ qhasattr!, > ¢  5�	J    ¥ÿNOT_IMPLEMENTED,0 ù"Unsupported method (%r)" %· Þ@ ]= getÑ 	 * (V á ðwfile.flush() #actually‡ó d the response = almuy done.e úexcept socket.timeout as eû0#a ? À or a write - àd out.  Discary 6is …g  s· 3log'""R¥H �: %r", eî  ÞrGt ¡def handle-&A"""H £ multiple Ys*Áecessary."""K » „ 
& v 7_onF" VwhileÚR 
s0O P  ã æ . ,“0, mÃ ñge=None, explain 
	PSend ØTlog a×qreply.
e  ý ÆArguments arP*l :! 0an O<    …3 digits *¨ p: a sim‹ op¼Pal 1 è t—son phras¶S   ú*( HTAB / SP / VCHAR / %x80-FF L 1 ú   defaults to short entry matching@ çµ O µ adetailYssageY  „Blong\ A ƒ   o ~AThisÕs¢Û€(so it mu`be calŽ ¥before anyv foutput­ñgenerated), logsò Ö,5finN²ô a piece of HTMLZ2@  T û GuserÇ  Nð
        try:
    ôshortmsg, longmsg = self.responses[code]
2 õexcept KeyError:  ! N q'???',  - úif message is NoneI  $= S ; explain;  =Ò : Ø Plog_eº  ("Ù E %d,‹ P%s",   )= Tsend_(* ðheader('Connection	…close')
[ 3# M@bodyÖ öomitted for cases described in+ñ#  - RFC7230: 3.3. 1xx, 204(No Content), 3 ¦t ModifiedØ C õ1: 6.3.6. 205(ResetC ­ £ =³ 1if µ >= 200 and   )ù not in (HTTPStatus.NO_CONTENT,0  4  0 _RESET3 æNOT_MODIFIED)): _ ‘# HTML en  ùto prevent Cross Site Scripting attacks© ö# (see bug #1100201Z c c‚  =) 1lf.z_Þ¹_format % {V  9 '” "':Ž B ó ': html.escape( î, quote=False)['#>  
> 	{ }Ý ä .Hp('UTF-8é`replacë Ò  †I"§r-Type",)[ Z_type| F  e íð-Length', str(len(§ &))? ;  É€ 's(‹"if ðcommand != 'HEAD'Ô J 
CL ²wfile.writem Û deM 1 . a=ü˜´"""Add the h ¨ 1 to  �s buffer˜ 0log ¬:  E.Ž  PAlso {Ó two standard` `s withH õ server softwareX qversiont  ¢ @curr0Gdateg 5"""3  ó Á.log_request(Œ ’ VQ_only& …
1('S«  î µ¡ Œ_string(õi : DDate8  Á W_time: Ã ÄŸ  Ö É?SenÊ ã .&w%_È ŠTTP/0.9'zB ð!if@ wàself.responses?:
   ýmessage = self.responses[code][0]6 OelseL )''7 ð if not hasattr(j þ, '_headers_buffer')V  * .( J = [– & ù
.append(("%s %d %s\r\n" %™ “ ð.protocol_version, #, $P)).en (D  L ñ'latin-1', 'strict'))
/ ƒdef sendÎ r ÷, keyword, valueò """Send a MIME +s to the "s 9A."""c  ‚ if ÉTquestË ê != 'HTTP/0.9'ižh·  »    ¯:­+ (!ƒj H $if[þ.lower() == 'connection‚
. Klose)  ] pc _Q y = TrueÒ BelifÚ	X Ÿkeep-aliv] VFalseKJsK;  *ñblank line ending@Ss>-ÕË}!b"u)1 Tflush6 (#
  , Ú /ifD @ ñ.wfile.write(b"".join4Z)©  ¤ ¥}Ð  Ñalog_rejR 2 ='-', size
 À ó"""Log an accepted > .Ú ^òThis is called by7š'(), ú°isinstance(¨ , ògStatus†  e   ! =à.ùÓ   3 Ø öp('"%s" F5s','  + 	 8 Î  pQ, str‡ )   d DerroÈformat, *arg¯ 5. þ *dwhen aR@ canu€be fulfiMU.  ByÃ ñdefault it passes÷ 0 onn ¥  	yÑArguments are8 Ïsame as for 6 AXXX µ �should god  ¨‘separate ä  A è  æ¶ ha 
8HœÀmessage(selfó, format, *args):
  õ"""Log an arbitrary message.
& õ'This is used by all other logging functions.  Override? õit if you have specific= iwishesp ð
e first argument, FORMAT,‡ aÏ A str} Vor thp Á a to bef ped.  If& < …contains­ ñany % escapes requie °parameters,G ¦y should bx Ù ö ed as subsequenÅ ös (it's just lik: ‹printf!)0cli@ °ip and curr õ
date/time are prefixed toÄ ?eveÈ6"""Õõsys.stderr.write("%s - - [%s] %s\n" %S 0 â(self.address_Š?(),1  1 @log_Á _Á 7 »%¹)¿ ´def versionC  ] 
Ø`Return¬Ð server softw4< @.Ù r6  O .7 _. r+ ' ' +È 4sys ” Ù  G  , ë ¯stamp=None¦ àñ 8 ¯0ted
 $ ažy header¼ &ifk  ( n ë â  R Š ! =+ . %()µþ Âemail.utils. Ú (- > ,
‡gmt=True”Ý ô  [  á 4matë [	â ?nowº ôyear, month, day, hh, mm, ss, x, y, z< Plocals F(nowþ ðs = "%02d/%3s/%04d  : U" % (- Q  n  æ . Qname[
 2], — ‹ m ks>pweekday< ð  = ['Mon', 'Tue 0Wed 0Thu 0Fri 1Sat Bun']E u C  ýŽ 1'JaZ 0Feb> 0Mar !Ap 0May OJun';  ul 0Aug 0Sep !Oc‡ 0Nov 4DecŽ  ¥ %í3 ÷k- s_( #[0ý ó# Essentially static class variablelT# The@" oñ
HTTP protocol we support.„ p# Set t0to , @/1.1a enZ a automs ‚keepalivÝR , b? 0Œ2# MqC­ dƒto parseæž	' r= http..S  à# hack to mainñtain backwards compatibility
    responses = {   õv: (v.phrase, v.description)% òfor v in HTTPStatus.__members__.values(1 ð}


class Simple4 ÿRequestHandler(Bas  1):
r 2""": o " r< " h= ð with GET and HEADì bmands.@ ð This serves fil ñ
rom the current directoryE ¡any of its€ 4sub  ðies.  The MIME type W ò is determined bgqcallingo p.guess_7 •() method¥ eÅ ç ðs are identical except tha eñ ¦ 0 a omitsn ð actual contentsÓ  ô  ¬ u 2"""#Ãr_version = r ¬d/" + _ !__n Pexten, ñs_map = _encoding ‰_default[ð '.gz': 'applicaSq/gzip',S  ~<'.Z" Éoctet-stream* <bz2, yx-bzip2' xt Cx-xz# }ÿ ö
def __init__(self, *args,�=None, **PEgs):´ &if& @ is )   Ö >Óy = os.getcwd    r .% ufspath( L. uuper().± « › Ô ado_GETÒ ±  P ! ar9. `   Af = – ˆsend_hea¯ Jif fá :try  D @ @copyq2(f,Q w Í  ) ofinallB  ™f.close()Ò  ãÓ   $Ô )}   Ü 
R¢Common cod‘	 õ •"nd¬�A  Êa z$erÉ 8 qReturn b n�either aÚõ object (which has to be copied³!to!`output‘1 by  ­‚er unles™ @comm� 1wasl¬  Amust`  ¨ ó
F dš õll circumstances), or‹  .,K³ HcaseD  Ã @nothB1furì Sto doÂ ¹ 5 ¼ translate_ 3.
 ~ ç � Ž  if¡ % p.isdir( é o @part4ÿurllib.parse.urlsplitf  5 qif not < … P.ends»K('/'b  1 B# reýÐ browser - do0bas@ly wðapache does
             ð"self.send_response(HTTPStatus.MOVED_PERMANENTLY)
5  Ñnew_parts = (	 R[0], 
 1
 �2] + '/',A M 7 37 /4]r õurl = urllib.parse.urlunsplit(” = ð ðheader("Location", 8 ?url6  %5 .s(# ¹return Noneã áfor index in "
 w.html", )":4  * ð = os.path.join(
 ,O ‚ %if- qexists(D )\  `  K " =L }  ! Ybreak NelseM ù Yálist_directory¯ ¨ �ctype = * `guess_ & €# check 8ótrailing "/" which should u õ404. See Issue17324² ¢# The testL Ðhis was added�  ç_httpserver.py< ôHowever, some OS platforms accept a Ÿ `Slash [ † filenam#Ÿ òdiscussion on python-dev and¼ ÷ 34711 regardingŠ Þ  , Prejec®5 ofm gs with‘   s’ D 0if îP.ends* K("/"”XerrorðNOT_FOUND, "File noRFund"Ü 1”	:try2fÓ$peËF'rb'F !exZ0OSE… 
9 ¢ =£  Ë±os.fstat(f.Ô6o()¨  î ð# Use browser cache ifossibl , ðif ("If-Modified-Since"…× V“  4   ö <  Wq-Match"‚"inI< Ð > ­# compare { x@timeG la# Úm  � ( d    im1 email.util±°rsedate_to_  k (R  =   [ì ( *Q(Type-0, Ie ƒOverflow BValu' '  ‚ Ð# ignore ill-æ@ed v5 sµ >pas  ^ ñif ims.tzinfo is%
Þ '   # obsolete¹2matß0no GŸzone, cf.š  D !# Õð://tools.ietf.org/html/rfc7231#se�ction-7.1 /
  ðims = ims.replace(tzinfo=datetime. Ÿzone.utc)H !ifA 9 O is < :<  — õ# compare to UTC@ ð of last modificaÓ G  * _* % =C .Œ @fromÌ ostamp(F  ‘ afs.st_. ,J  = 	 < ñ# remove microseconds, like in If-MÍ �ed-Since‰ 	Ï  ¨` O=0)
H iD<íŒ Ã ÿself.send_response(HTTPStatus.NOT_MODIFIED D   H  G �headers(/ f.close& ºreturn Noneô n ¶ *OK} . � ð("Content-type", c 4 ÿLength", str(fs[6]); ELast-",¿¡  ½_x‡_string(šb m7fh jexcept	‚Craislðdef list_directory(¨ v, path)M �"""HelperÒ¥produce a 6 E ö	ing (absent index.html).×RìPvalueXñ	either a file object, orQ (ind$Vng ané ³rror).  In A ¢case, the ý s } ‰ P, mak™ &thš‘interface3 Ásame as for o D (· 5"""~ 6try  ?` = os.
 Adir(<1 ˜@ OSE¸ 
<  l™e Å§^FOUND[à"No permission£ ‹ ž"¼;r Â    1 ÷.sort(key=lambda a: a.lower(�er = []à pdisplayñ = urllib.parse.unquoted.! Ì  �  (ös='surrogatepass'à n�UnicodeDe y ¤  Ÿ X 
1  Ø‡.escape( !, ß f=False< Ðenc = sys.getê°systemencod* £title = 'D�Ày listing foór %s' % displaypath
  òr.append('<!DOCTYPE HTML PUBLIC "-//W3C//DTD µ4.01//EN" 'F M õ  '"http://www.w3.org/TR/html4/strict.dtd">')= ƒ  ( �>\n<head# Pmeta e ÿ-equiv="Content-Type” c" a="textŒ à; charset=%s">?enc’ ¢title>%s</
 B\n</ž 1 %  7 AbodyÉ 1< !h1e 0  hr. (ulõ õfor name in list:2 oAfull P= os.Ô`.join(
 ,8 ™  0 ý3 Clink   	Z 1# A0 / ƒ ñdirectories or @ �symbolic I s? %if‘ disdir(ª )Á •  Š i + "/"Q  )  g  =Û &  	w  / x @x ‘# Note: aé d to a yQÁs with @ and(  /Ç çÀli><a href="� _a></li>T à   % (urllib.p·p.quote(æ  ,h  / ÿerrors='surrogatepass')C  ’‡.escape(C!, ƒ †=False))kæ 0/ulÕÛ/€7>\nâencoded = '\n'Ç2r). f(enc, ° Œ > ö f = io.BytesIO(‹ pf.writeA  _  fseek(0 ÿself.send_response(HTTPStatus.OK*  5er(€t€/, e9 % cr H õLength", str(lenÀ f>  ¯ = sö ‘return f
àdef translate_(<  ,  ‘D"""T' ð a /-separated PATHùàthe local filex‚ syntax.k  tþComponents that mean special thingsK q system°  E °(e.g. driveqo t õs) are ignored.  (XXX They shouldG öprobably be diagnosed.)­ &""ðð# abandon query ý VmeterÜ 2! =9ö.split('?',1)[0]t ;ath$ #$ p# Don'tGÀget explicit§õiling slash when normalizing. Issue17324p 1tra4 _4 ž ðrstrip().endswitƒh('/')
  Etry:   ðpath = urllib.parse.unquote( ÷, errors='surrogatepassS ðexcept UnicodeDe E4 i ¤  w € = posix P.norm	 ‘ ( Pwords) šath.splitì   Ñfilter(None,  D  W õ = self.directory!1for1 1 in sÓ `if os.C  < Pname(_ ') 7 ²(os.curdir,-   )H  ˆõ # Ignore components that are not a simple file/¬  w ±  J   ‰continue  © " =† qth.joinRúif trailing_slash® G e+= '/'_ preturn  
 €def copy­ (^ð, source, output ñ"""Copy all data between twoò ’ objects.`  å ø	The SOURCE argument is a0 ` open Èqreadingž  > ð(or anything with a $ õ() method) and the DESTINATION? r @writ] 6(or7 r  $ es Þ @only• "soÄ `overriÇ ö this would be to changñ ¸  block size’pperhaps, õ	replace newlines by CRLF§  --t’e howeverŠs  X °default ser 0use¬%is?  �  ÎbbinaryÑwas wellâ 5"""2 tshutil.3Oobj(0 ü \£guess_type^ {
PG# À ' 3 of‚ A7bPATH (? V)* RáRvaluee0strÝ!ofc Pform h @/sub ,Û @usab· pà MIME Content-( w headerk  ×bò Ù ation lookkÆ's extensionn p­ ¦tw  |.' �s_map, us» aapplicZ Õ/octet-streamL aM‹ ;&itx€permissiá 5(if: Pslow)j ² q inside(Ü�to make æAter ÎPbase,é  êï1extÁ	»0extø  
Ç³(  U[ext]Ë  P =€ .lower(m J	 , _ = mime!!s. ìæ› "if:Ù Àturn guess
   ðZreturn 'application/octet-stream'


# Utilities for CGIHTTPRequestHandler

def _url_collapse_path(path):
o @"""
 ÀGiven a URL $ ñ, remove extra '/'s and '.'  ‚ element c_ K òany '..' reference% Ø Ds a / dK !.
7 4ImpS ðsomething akin to RFC-2396 5.2 step 6 áparse relativeN !s.N QThe u#ày of this funcN° is limitedE pis_cgi s !odå QhelpsG pprevent‹  • ó security attacks¼ R³0s: w  reconstitua ñURL, which will always start with ^I õaises: IndexError if too mWQoccur;  h÷ @ Ïò# Query component should not be involved-ñA_, q5 =I`.parti0R('?')Àath = urllib! ¢se.unquoteUË�# Similar_0os.` t.split( @norm 7 à) but specific6 1URLr #Œ ò semantics rather than local opera£Vystem- Þ _Í #s Ú ‹ #'/Ö Ehead! ![]x  U 4 1 in‚   R[:-1]9 51if $ !==ñ   V ‹.pop() #ÖAmore8 Í QpriorP { D $elc  |l !l 'k qappend(H  µC "thÂ 9 Atail  s¬  �  }( ;    & Y     † )'' ý   ù  B Felse® C 2 ''¢"ifì& •?'.join((< "))@ B À� = ('/' +#5 ô 5), A Œú_= 2"/"6 R b rS+1 ò



nobody = Noneã b_uid()Ò ð"""Internal routineVBget - d's uid/cglobal …#if P  i’ @ % 6try ¡import pwd �except I Ê+ J !-1* 	F ^  “Òwd.getpwnam(' B')[2Ÿ^ ;Key[ ) ñ  = 1 + max(x[2]#xËV Rall()”Ž : 
R“executablØ¼ q"""TestO " d file.KN ‘os.accessáô, os.X_OK)


class²ÀRequestHandlðer(SimpleHTTPRequestHandler):

    """Co# 0te & ò server with GET, HEAD and POST commands.? 1GET % ôlso support running CGI script4 9TheL ± is *only* ­ ¯mented for=  2"""z ñ# Determine platform specificsÜ ð
have_fork = hasattr(os, ' $')H ðMake rfile unbuffered -- we need to read one lp  ‚then pask  # the rest. ða subprocess, soJ ¥can't use c ainput.« Ârbufsize = 0˜ pdef do_uq(self):) ´S¦" aHrÚ“ " @ThisW VU 3 Y  0if t ‡.is_cgi(|    2run — Felse¥ ) µsend_error(+      rýStatus.NOT_IMPLEMENTED,, Q"Can Ñ   g["Î 6q Ohead8 �Version oá 0nd_' U that¸U %""† breturn40 �.Ã ‘ ‚•@"""T{rwhetherˆ ðpath corresponds2aR/R¿ as TrueÏqupdatesÕ�cgi_info @PibuteJ  ïUtuple"Q(dir,$) .„  ŸEires
†    … pFalse oÉ Gwise§ ÐIf any exceptÆ¢is raised,ª 0allþ Áhould assumeÝ¤  8.• �was rejeck¡as invalidþ ÷ act accordingly‚  »vdefaultWaŒ dtests ‚ ånormalized url„  bbeginsf W!ofÂ `stringŽ Ä |¢directoriek ,(‚ð  next characteró�a '/' orP 0endë Ž [ )Í  ò M   ¡collapsed_Ÿ t= _url_  N=)Ì ¤dir_sep = + A Æ.find('/', 1.  whd4 1> 0n;not> #[:$ 3] iU	
g. † 	# +Ž 3if  J > 0R  m, tailU � ,· O E+1:]" ]v Â G&= ^ 	'  …  
 I ð = ['/cgi-bin', '/htbin']

 ó   def is_executable(self, path):
  ñ	"""Test whether argument( v is an D • file."""@ Xretur# (a 
! „ opython€ %! P? y script} ðhead, tail = os.{ “.splitext‰ è  ©  - ð.lower() in (".py",  6w")¸ qrun_cgi¶ 
0ESe a CGI— `dir, rV = u‘.cgi_info ‘  © á = dir + '/' +0   1i =�õ.find('/', len(dir)+1)' Æwhile i >= 0Ó a @next^ G E[:i]5  ¡  ‹ b[i+1:]ü     oD Å  translate_3 (b �  5 %if‡eisdir(F C )   'N  , 	  š 	¯  .  + Jelse  Vbreakä  # \ßõplicit query string, if present.�  š C, _,+ =¶ã.partition('?'C r à# dissect the & a after ódirectory name into aN &w ñ# a possible addm !al#à, to be storedÓ–PATH_INFO¸  = ¼ P·/ifA¹Ç =  F 6[i:Pn<  F, ''|! ø 
 ø   t J…!  I 	Ñ 5notˆcexists‰ K ŠÜµsend_error(}  Â  ýHTTPStatus.NOT_FOUND,& ‡"No suchƒ (%r)" %Õ
¦  Z “K 8if ¹  is® ¹ 3ŸFORBIDDEN¹  Å ï ‚ qa plainíÅ 4spy­4is_û¼
"ifÁhave_fork orJispy¿«ÔY  )× `0 Û	 % ß& * "*í B ñò÷&# Reference: http://hoohoo.ncsa.uiuc.edu/cgi/env.html> PXXX Muðof the followingó could be prepared ahead of time!
  ð env = copy.deep	 È(os.environ)( ÿ['SERVER_SOFTWARE'] = self.version_string(7 7NAM3 rserver. Z_namel òGATEWAY_INTERFAC; š'CGI/1.1'- ™ †PROTOCOL™ “protocol_¢ 7 2ORT3 1tr(Ð – � KportÓ âREQUEST_METHOD=  	ucommandg ðuqrest = urllib.parse.unquote( Y ‘PATH_INFOT ? N Qenv['" —TRANSLATE| ò translate_path(< _ vSCRIPT_‹Ycript~•if query:w  +{ ÁQUERY_STRING  ) ( $ ±REMOTE_ADDR# Põclient_address[0]4 ÔauthorizationO «™ers.get("" "Ð 9if  
° 	 * =+ g.split§ â yif len(9 j) == 2Z , mõ base64, binasciiÖ  $   ‚AUTH_TYPÂ	` 
 0   Ø ¡[0].lower(Ž ~"basic"”  < t·   	z Á[1].encode('Ì 'jA  I 0.de? [bytesF-.\L  E „ „except (w°.Error, Uni‚  )! o Opass� Oelse7 ö 	 R/':7a ¨  EW2USEW	~ Gc# XXX / UIDENTì "if®_û'content-type') is Non‚ vCONTENTÊÚL _K _K ]WP [˜ 0olength)2 # ‰y:gthÝ	† aLENGTH²@ 6referers  
l  m  £HTTP_REFERÆ+ l !acÚV\Rall(' V', ()žÇ ð HTTP_ACCEPT'] =ó ','.join(accept)
  öua = self.headers.get('user-agent', eif ua:;  B õenv['HTTP_USER_AGENT'] = ua( ýco = filter(None,p ö_all('cookie', [])u  £_str = ', È &co# 6if &   aCOOKIEœ - ¤ Á# XXX Other Ï #* # ñSince we're setting the env in ÷parent, provide emptyC ð values to overr#  previouslyU  " 3 Pfor k^ à('QUERY_STRING	°REMOTE_HOST õCONTENT_LENGTH',C  ¨ ª",   �REFERER')Mõ.setdefault(k, "")
h Fàsend_response(KöStatus.OK, "Script output follows"ÊC cflush_(a ñdecoded_query =  °.replace('+' '1 #ifkŠave_forkÐ  # Unix --  Õ as we shouldÕ  9‘args = [s¾ ]  if '=' not¥	¢ 
m I ‰.append(+  ' Pnobodá 	 Z_uid(" (awfile..Á() # Always  q beforeÙ 9ing³ �pid = os.ö Y 0if  N!= 0¿ 1# Pß	N  ± ppid, st%±os.waitpid( 0¹  . ú# throw away additional data [see bug #427345n ? @whil€plect.se !([r]@ ^0)[0]Ç  E !if³7 {.read(1ò +  ]breakû @exit–R û sðD_to_ N(sts4if ! ¤ � òlog_error(f"CGI „:  x {E }H´ ireturnµ [# Chiá>tryƒ   Y  os • Û  exe@ OSEº [  F Ipass™   �os.dup2(û Ï.Ôono(), K 	0 2ile0 1™ ¢os.execve(H ]  , à,Æ
1 Æ ¾ � Óserver.handle¢ srequeståßclient_addres 1os.'G(127¹Jelsey d# Non-°Ëuse subproceGðimport subprocess
     ôcmdline = [scriptfile]
   öif self.is_python(* )):+ / þnterp = sys.executable( 1f i+ ð.lower().endswith("w9 "]   a ò# On Windows, use —  4 S, not E w  B x # =� t[:-5] + :-4: 3 (> `, '-u'7  	j aif '='� Žin query*9 �.append(& )G xólog_message("command: %s", subprocess.list2R ( )N t… bnbytesz(length6 òexcept (TypeError, Valu £ Q 0Ë ¯ TPopen¨ ,*  o gstdin=ð OPIPE8 ?out9 #?err9  Ÿenv = envÕ 
ihãó  == "post" and _>> 0Q@datay ®rÉb.read(3 
m OelseA :Non°ñ	# throw away additional q ú[see bug #427345=PwhileAÁect.select([Ø¢ “_sock], [ ^0)[0]š !ifM9 .recv(1‡  BYbreak‡ðstdout, stderr = p.o€unicate(Ð 
(q wLbwrite(B 
%  ºQ ¸ @  Âe;T('%s'~ 
D "p.” .close(  ?out PstatuÂºp.returncod¿   %   R"CGI ßc exit ] 0%#xoj 
› I÷ ¹Y óed OK")


def _get_best_family(*addressÙ@infoâ  ,`et.get    (ß3 Stype=3 ¶SOCK_STREAM! Tflags" “AI_PASSIVWç �  , L ð, proto, canonname, _  Œ Ð = next(iter(™ s}“ H 0 ù ótest(HandlerClass=BaseHTTPRequest ´ T Serv-  Thá0ing2  * ® Pcol=" Ð/1.0", port=8ð000, bind=None):
    """Test the HTTP requ ñ handler class.
- ÂThis runs an. ñserver on port 8000 (orO  “argument)C 1"""K S9 C] ðaddress_family,  Ã = _get_best (¼ ,i )� H¤ F ôprotocol_version =  r Wwith w (g (, D ¢) as httpd !Bhostu " = °.socket.get
 ¡name()[:2]g  4 @url_8 p = f'[{ à}]' if ':' in  Q else
 8 eprint(  K  f"³ 2ingp2on O   {d"} S /   0f"(Ä D://{‰ "}:* f/) .../ )l 6tryô  F  C !d.à–_forever(/ ú	except KeyboardInterruptD Ð 4"\n( $ i) ö received, exiting."_  � @sys.  (0)

if __jò__ == '__main__'q  im	’ argparse 5r = #.A�P% Ï ' T.add_­õ('--cgi', action='store_true',4 ¦  �help='RunF3CGIm'× g  Ôÿ
', '-b', metavar='ADDRESSl  m ñSpecify alternateàA_ess '« ¶ â'[default: allœofaces]´ ‘directory¹ Cd', H 0=os_cwd()'» Eive Y º µ vcurrent6 · 
 !Ñ`Ò  Ò¯, type=intÕ �nargs='?S ³ š  ‹ r Ê  U  È°.C ¥sŠ ifÜRs.cgi Ø¹_¹` = CGIÙRØï �8 îpartial(SimpleC  †   Ï=È . ¾ð
# ensure dual-stack is noÓñsabled; ref #38907³ Õ PDualS0  Àer(Threading¦  ß‡ 1ef È r_nW(self  # `# supp… Ú @EwhenC š AIPv4†  3   S´contextlib.E !(E;ionh  5   CsC+opö (    `õet.IPPROTO_IPV6,  ÂV6_V6ONLY, 0e 4   ðreturn super().serverñ_bind()

    test(
   âHandlerClass=h  _c ,$ DServ# ’DualStack %  port=args.
   {   
  ñ:)
# This directory is a Python package.
#
# XML-RPC CLIENT LIBRARY
# $Id$" %an% óclient interface forV N ð6the marshalling and response parser code can also be used to
# implemc — ss^  Notes:
# tÝ pversionÛ adesignF £ work with™ Ò 2.1 or newerH 0His J õ
1999-01-14 fl  Created
#  5 ðhanged dateTime to¸ ¨ localtime3 63 ñAdded Binary/base64 elß �, defaultG PRPC2 è )icF 9F °Fixed array} aC ð (from Skip Montanaroù¹ '21@ · pconstrue, etc.¸ A2-022 ¸ Ÿ ²Qing, 
 ýe empty sequencesD !10D ¶ rproblemŽ: sÀ 26-2J ÁSpeed improv<´s, pluggablSps/trans€s (0.9.8
¡2000-11-28” CÃpboolean{`check µòtruth value of its argument
# 2001-02-2&"Àencoding/UniÔd/SafeT‰ ˆ patches> °compare sup¸  Ž swrapperÃ s9/1.0b1É D1-03É 0Mak8 &re[Ptuple
µa singletonz 23-2LÄDon't requirËkparamsVæNicholas Rileyƒ $6-à olÝõ
in _xmlrpclib accelerator× (Å 2B 8ØUBase < ð
.Error on built-in ExceptáêÆPaul PrescodP A9-03ÞfAllow 1subg YÂoverride get…9Ò @Lazyg0ortÀurllib, cgi,§  à D(20x# s—%up‰ B10-0q€Remove c” inÏ©òmemo cache when doneDthem� G ÿUse faster escape method (80% dumps … ÄCMore% ¸microtuningf ÊK!im‡Pexpat( 0,ªøGuido van Rossumû r10 sm  „@long#s{b¤sá"as  ifqy0't ›Gflow› !17M ATest`1intHX 0 0 (añs…öon 64-bit systemsœ 21-1 P`repr()— ¤t double�cSFelixA 2v"17aðvoid buffered read when poö6ssible (from James Rucker)
# 2002-04-07 fl  Added pythondoc comments
* '16* ö__str__ methods to datetime/binary wrapperC G5-15C ó error constants¨ ö Andrew Kuchling« 26-2« ÑMerged with P± Ä CVS versionÛ W10-22n ñbasic authentication (based on code )³Phillip Eby} @3-01M !sm(ò support for the bool type| @3-02¬ ógvr Remove apply call3{024 S ö
Use cStringIO if availablP ~4-25 ak 5nilu 6_.gn%  •€.struct_ 2 ð	7-12 gp  Correct marshaly• of Fault² �10-31 mvl-@ mulG$llV q4-08-20' ÄBump minimum& $ed´° :12.1> ò14-12-02 ch/dokoË ¡workaroundrð gzip bomb vulnerability
#
# Copyright (c) 1999-èÿ by Secret Labs AB.- áFredrik Lundh.[ Rinfo@ üware.com
# http://www. O
# - 0ñ
# The XML-RPC client interface isŸ ú ù Y ñBy obtaining, us Aand/¼ð pying this soft  i:ð associated docuT{ñ, you agree that ð	have read, understood,
#S P will— Jü {afollow„ Aerms) Pcondiß!s:Â `Permis lñuse, copy, modify,5 �distribut� Î 
# its Ë –±any purposeP  ¢ bout fe£ð hereby granted, provitþ  Ì  ab+ › ÃQnotic<`ears iÛaBpies· = BbothE= "ndžp9
# Z 4 in� H¦aA !até›name of
#N 	 ^ or_ P be u[ in adverti: ) apublic²C per[ ›„ ›!ofs VQðspecific, writtePpriorM è²ðRSECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
# TO THIS SOFTWARE, INCLUDING 9 xIMPLIEDA ñOF MERCHANT-
# ABILITY€ ð	FITNESS.  IN NO EVENT SHJ ¯ 'OR® ð
# BE LIABLE FOR ANY SPECIAL’ ðDIRECT OR CONSEQUENTIAõL DAMAGES OR ANY
# ðWHATSOEVER RESULTING FROM LOSS OF USE, DATA= ðPROFITS,
# WHETHER IN AN ACTION0 ðCONTRACT, NEGLIGENCE; O. £TORTIOUS
#3 `, ARISv 0OUT@ OS RCONNET €WITH THEŠ  I ÐPERFORMANCE
#2 ÿTHIS SOFTWARE.
# - 0õf

"""
An XML-RPC client interface for Python.

The marshalling and response parser code can also be used to
implementm õservers.

Exported exceptions:

  Error  ¡Base class˜ ­ e% Ãs
  Protocol6 óIndicates an HTTP p!  3 R
  Re½ 2 ‡ broken ß Õckage
  Fault”  g Hf$ "pa4 à ½ eÝ Sÿ PProxyN ðRepresents a logical connec0 toÈ a < $�MultiCallE ð  Executor of boxcared xmlrpc request,‚DateTime5 $ d qwrapper`ð an ISO 8601 strò@or t6 “tuple or
@  Qlocal$  E�ger value¿ Ägenerate a "q @.isoa "J ë @ �
  Binar+n b Sdata ¶  e8Gt åóparams chunk from aä aì Pucturí8UnmQ  Œ$L Pincom,`XML evOBmess<PTransìÃ g Handl¡t aðg  SafeF B /S C �ronstant�g(none)Œ1funŠ  Bgetpâ» 0CreÊiB  cenôthe fastest availableŽ& attachçØuh ;áobject
  dumpsq  pConvert}AarguN‹# aš” Z Gy E (orçP, if É emethodÚo•1 isÏŸ).
  load› r  ÿ etúÞ "edd0pluèg œ  name (None‘ Cnot !).³ N¤ort base64 4sys  ‚
� j  1 imy  decimal D F Rhttp.g qurllib.C 2xml $rsG Texpat2 Rerrno+ $io" ÁBytesIO
try:ÿ ž Rgzip
! I± œ$   1 = ð#python can be buÿilt without zlib/gzip support

# - 0ÿ2
# Internal stuff

def escape(s):
    s = s.replace("&", "&amp;")  <  3lt; hreturnB >" `gt;",)Ë ô,used in User-Agent header sent
__version__ = '%d.%d' % sys. €info[:2]O òxmlrpc integer limits
MAXINT =  2**31-1
MIN -  ; T0ñ2-
# Error constants (from Dan Libby's specification at
# http://x¾ ð-epi.sourceforge.net/5 ñs/rfc.fault_codes.phpF°Ranges of e Ðs
PARSE_ERRORÇø   = -32700
SERVER  ó 600
APPLICATION   56 SYSTEM S  Õ400
TRANSPORT  ƒ300

# Sî š äNOT_WELLFORMED3 2  ž PUNSUPM   uNCODING½ ³1
INVALID_E T_CHARÜ 2 aXMLRPC§ û  à pMETHOD_ƒ RFOUND! | &60] ' bPARAMS]  60] dTERNAL´ 	> 3ì C5@xcepñs

##
# Base class for all kindñ³client-sidec2.

, ‹$(EN Ó;"""P C > 1"""ÛQ__strwsobject. ” 0IndÃò
es an HTTP-level protocolO à.  This is raiìaby the2 €
# trans×¡ layer, if rserver @c Ù ÷ð	 other than 200
# (OK).
*ó@param url The target URL.
#  1errG  !  ¹ ª [ 
& 1msgF % wmessage( ®s)  @ dicÃ5ary�P˜ ª”PJ˜ ¦à__init__(self,ï ,Æ  × 	 Cmsg,HÊ ®y .= )ì   K .9=P 
 3=f   , :msg  I
  Æ CreprÆ 
 Š ö! ()     2"<%þÙ%s: %s %s>" %# 1.__þÔ__.__name__, Ü 
 Ï  6msg	 n  V P–À broken XML-]Ðresponse packëep[ is
#÷çunmarshalling ôÀhe XML-RPC róesponse is
# malformed.

class R  aError( ó):
    """Indicates a broken r0 Á package."""/ ·pass

##
# 7 þ n XML-RPC fault? ò  This exception¨ ñraised by the unmarshalling layer, if _ ˜ pcontainî au }string.k Ðcan also be up aé ô, to
# generate K o @messþ 
ð b@paramm ‹Code Theø ˆcode.
# + S— -  ° £F:›dšödef __init__(self,«  ‹ “, **extra .? )ð   M .Ù÷ =X #  d  %  '   Crepr   ñreturn "<%s %s: %r>" % Ç 1.__¬Á__.__name__,Q  ›  
³ &,  ’ o)

# - 0ô
# Special valueõBackwards compatibility

boolean = B
   UµWrapper for\ƒDateTimeb âpconvertÍt Ñ O "atò$byM  žQ<p>
#‘³  !‘be given AdateT robject, ±0 in“ 
#¤ ómat "yyyymmddThh:mm:ss"1 q9-item J ¢tuple (as íø!
# `.local' ò()), or an integerõ 9 7 2  Ô  Œw<Buses! X C to 2^ Ato a,  ‹  £ .ì  \  k ,#²n ISO 8601 *:,
# j  ç  a ì  .
�ôIssue #13305: differentu jÐs across platï¤s
_day0 = Á@(1,  Q)
if  P.strfm ò('%Y') == '0001':¬ ¡# Mac OS Xe¶0iso× _d 1at(¾ _ ÿ"%Y%m%dT%H:%M:%S")
el† 4‡ # Linux� .4‚  "seøÙ 9â.zfill(17)
delh1


c o6Òif isinstanceP,´$  �+/ _�Ð

    if not ðisinstance(value, (tuple, time.struct_ S)):
  1if . V == 0    ?  8 %()7 	 Qlocal!  !)
' ñ return "%04d%02 T	 : 2" %~ ò[:6]

class DateTime� 4""" ñ wrapper for an ISO 8601 string or«  ö 1 or† œ ‚ integerq ó  to generate 'ds @.isoR ‘' XML-RPCC Õ . 2"""Ý òdef __init__(self,X *=0\•7str#  h ? .e " =F l   3els    	- ]_strfy œ ó make_comparable£ Hothe~ 7if ¡  ,€¦ 6 = } ¢  ” Ao = = Æ  /ela  n µ a _œ�_format(q ‘l n È 
Â rhasattrr 0, "¼ d"Â " 2
)" í ¬ � E åNotImplemented sHs, o§l¥6[ M  + e .4, ] Šif o is | K  O � 
# B  ;s <  eEt U   d=¡ gA}>  A}>A/eqâ|=¡ Ž âÖ²    Ap	 Lêó, "%Y%m%dT%H:%M:%S"ý!##ö`# Get ñ/; ÞK! @d  æ% O, aså .Øàstr__(self):
   ðreturn self.value

 Ðdef __repr__( !):   3 ñ"<%s %r at %#x>" % * ÷.__class__.__name__,` A, id( &))k adecode g, datao  ~ › q = str(  w.strip(D 'enD 7outC Áout.write("<å õ><dateTime.iso8601>")á / |  ="</G "</a a\n")

G $ Btime¹ H"# ó ó xml element contents into a D¤  ö qucture.¤ b % =  (�  .X l . ¯ ’ I_typ— , ²  ep» ð, "%Y%m%dT%H:%M:%Sã ñ##
# Wrapper for binaryÆø.  This can be used to transport any kind
# of: ñ over XML-RPC, using BASE64 éPing.
{ a@paramo � An 8-bit1 1  Q0ain earbitr™ !

¤! B­ ”?"""È 6"""­c__init¯W=Noneq"if‘ 0is  `  <   Àa = b""   Jelse% òif not isinstanc§ , (bytes,  garray)w  K   ñ
raise TypeError("expected7  s ¦1yte@ ,h U%s" %�  D   º ß 1  %  ß  ¨ ‡ð   # Make a copyë2theŒ !u l=   q!##! Å# Get buffer(! @½B% j, as a.\ ž?_stä o˜ À, "latin-1")Ó 5XXXŒ(?!S %eqWother£(ifÔ ,†&  L 1 =  .    ê š # =' …  # £^   Q  §Sase646 Us´J oœXbP >ÿ «   B dn  n � F€) dŸ Ÿ('ascii')+ 3"</| ƒ ”Ú h� N‹I# =µ|ÄWRAPPERS = (Üý_

# - 0 
#7„ parsersèðExpatParser:
    #ð> fast expat parser for Python 2.0 and later.
    def __init__(self, target):
    cself._O =X =g !.Pg ÐCreate(None,  )_ ? tV # =_  W õ.StartElementHandler,  .s 2 ?End0 <end. ÝCharacterDataa Edata2 ¡encoding =É  Â T.xml(# ë $  KCfeedG T )E4(" •, False)
C QcloseD > 6tryK  U78 = �D   üexcept AttributeErrorA &ss0 :lse 3del[ ÷ , x ö# get rid of circular referenceZ  Ž 4 õ ñ b"", True) # enA  	_

# - 0ð
# XML-RPC marshallÌ ÷(un �code

##1     t@param î† Default  \ð8-bit strings.  TheV )  
#ÿ ‘ value isOó (interpreted as UTF-8).
# @see dumps

class MÂ e½å"""Generate ané § äs chunk from aó [ � ructure.g­' a` ‘ instance0€each setÞ] aeters,=1use8Qthe "® ñ
" method to convert your } “(represenð ra tuple /toÈ  JPo wrië  x°response, p³Fj¿  È ñ ead.  You may p— � Iuse · BodulÎ �functionÿ Âthis purpose'2""";A# byD pway, ifé À don't underE°d what's go{±on in here,92# t Ãperfectly okš D�~=VÒ, allow_none=:¸‘memo = {}l  € ‹Ñ _ % =×
: q ' =~ ‚dispatchr 9  Ã Ä,þsÌ�out = [].  ¡ å˜= out.app¾ I å_ 6 Pif isî ¶(dsN(ul¼ ` #?- C   } 1("<bB>\n"™     s 1({' cCode':Ñ . Ö -  1 S3  }6  ‹ 
  A("</n 
Ÿ eµÀ          # ÷parameter block
  û*# FIXME: the xml-rpc specification allows us to leave outF  ? �entire <p "s>n 0 if\ ¡re are no   Ž +s.D û'however, changing this may break older code (includingE ð old versions ofÔ ârpclib.py), soU `is bet{left asG ñ
is for now.  See @XMLRPC3 ±more inform$I. /FA twrite("I\n")   \ Év in values:  Ÿ	A >@  # �dump(v, + 
_    A("</qC 
  s! öresult = "".join(outc rreturn % 
¼ adef __“ Rself,Ù � à 6try  § @f = 2 ñ .dispatch[type(!)]\  ' ú except KeyErrorD r# checkkõis object can be marshalled as a structure]  a âif not hasattr€ Ú, '__dict__')s  3 ¡raise Type” P("canD q $ %Š Ws" % × J G ¾ qclass i« 2ub- ¡of a basicI ,¼ ð# because we don't know how´� Qthese? îR(e.g. wsw 
©  µ Æ _¹ 	 &ž).__mro__" ü1ype1 	åo.keys(T  X6ðXXX(twouters): usÝ ð"_arbitrary_instance"0key »a quick-fixe âhe p3yk merge,Mð should probablyuafixed (jneatlyíö—   f(@W{ y__nil ' ˜å K .×V_none  ~²None unlessD  °wenabledëdÎ’><nil/></ ' 
÷ ] T)] = Ñ ã Oboolã s  1 Cean>n  á " … í and "1" or "0$ 4"</@ ¶ Š¸  " ²   ³ Olong³ "if.� > MAXINT�   �< MININT£ƒOverflow}@int &ðeds XML-RPC limitsC")
  ýwrite("<value><int> �str(int($ .))= /7 !</  3>\nA ñdispatch[int] = dump_long
~ ñ# backward compatible ) >int4 2defG Ñdouble(self, x !, Ë !):C  Þ  Û 3 Þ DreprÛ < /6 Ý Ffloaß / á ­ ounicod® ’, escape= ½ nstring½ 8 ¿ 8 ¿ 5strœ¨ ¾ _bytesjfbase64	 � enBd =  . ] ÁW! @d.de: �('ascii'~R >å f ç  ê¢  [array% & u" 
ci = id�>  ý €if i in ¯V.memo¥  ó$raise TypeError("cannot marshal recursive sequencesc > U  [i¾ 2NonF   J" =x  __ ” Ü j><data¹Pfor v½ ¥
¹  Q $(vz[ /N #</\  ¡ "elž  1[i]D —PtupleÕ  i _G 
! 6lis|  ! ³ostruct´ zÃL¯dictionariÆ@ï Á'k,Äw.items(m ŠjmemberC    0if ”ûisinstance(k, strG  + Ðô Ðy key must be> 7ingË = ˆ ‘name>%s</	 S\n" %-'(k 3  ‡   N /×  7A B d¢
 Ú ¡G ?datetimþ;‹ e‡ÞeTime.iso8601ùQ_strfX 3 K  ~E À01></value>\ôn")
    dispatch[datetime] = dump_ 
( "ef ñinstance(self, value, write):+  W õ# check for special wrappers% "if? ö.__class__ in WRAPPERSM  Q  n .f " =n G   ‡ b.encodš Þ     Fdel B : Jelseg „# store æ ú attributes as a struct (really?g c =' (— „__dict__'€ yXDateTy| 
' eBinaryž	% ô# XXX(twouters): using "_arbitrary_0 "Ç 0key ±a quick-fixl #¯ð the p3yk merge, this should probably be fixed m.qneatly.E Ø ~ À ð
##
# XML-RPC unmarshaller.
 Á@see loads

&' U$ ¾5""" 5 anN ð	response, based on incom‘XML event¶ ð#messages (start, data, end).  Call close() to get '‘resultingD  3  Bure.8€Note tha1 ò&is reader is fairly tolerant, and gladly accepts bogu/ d ðwithout complainÏ ‚(but not4  )�2"""Š #b ð
again, if you don't underÖ°d what's goT /a here,á #É ó 's perfectly okè Ãdef __init__5useE@=Falˆ  0bui5b_types :D q = None{  Å «stack = [] _marks 41  �1 = › M Ÿethodname† j $š= "utf-8"A  êBnd =v_µ . 
) _k0 =  	!1 or $ ?   byŸ<  ù ›½ Bk”# return (a tuple(0taræmt #ifÑ  ¼ Æ ¡ ¢  Z !._ƒ“ ±  sraise R‰fError(5
P ¯== "fault"D F 2(**k R6[0]L Ì Ã ‚.w)2getÑ  Ù$ @ _ ' > ##2` handlÊ  `1xmlP  3�coding, RHalon_ ? K  2÷ # FIXME: assertG ’ == 1 ???”  x ®z Atag,°sÖ ð	# prepare to handle this£ element
  åif ':' in tag:   Ptag = õ .split(':')[-1]%  if å == "array" or zstruct"S òself._marks.append(len( ustack))_  ‰data = [w  ‘value andu 0notÇ  Šdispatch~ ñraise ResponseError("unknowÿ ` %r" %M … j 1= (1= " 1")
­ @def § È v, text)z ‘ _  ó ! ;   % ,z 9 ó	# call the appropriate eð qhandler‚ ¯&ry<   @f = X .F[tagG¡except Key

< T _ ˜return # B?�  # t“   — c¦  2 ª 
 ! ‹  f d"".joiv ™)É#¾ ù# accelerator support¯_RR Atag,÷$# %  Z  ¬ ý 
§É™w˜½’ decoders hC= {}  ef(S_nil ¤O åƒONoneò0¹c ”["nil"] =^ 
o bbooleaZi%/0Ž GFals� (el9 19 9Tru8 &seï  zÿ4TypûCbad ³  Ñ )    _ < = 6 
 
?int| % ›�%i1v iÈž/i2 	4 	8 	/nt ©biginteger% 9‰odoubleofloat([ {  } Àh["float"] =ñ end_double

    def ñbigdecimal(self, data):$  (   “.append(D) # )# ¡_value = 0 ¦dispatch["a K"] =t 
Œ ostringˆ 1if ‹ –_encoding£  §  “ ! =½ q.decodeG ./ ¯ Ò  7  É ž Å  í Kname" ð
 # struct keys are always JingsQarray¼ ‹cmark =  fs.pop(À a# map B ñs to Python lists©  *F`stack[E :–[ ]2 ào ô  
Ò þ Ó *C Ô ¶dictionarieÛ   U = {}» Uitems4õ # ñfor i in range(0, len(9 G), 2 > c [ 0[i]: ,+10m @ = [: $ Tð U 
Vobase64VW gBinary!   ü.N¦e("ascii")Lpšuse_bytesqK 1 =  .L RLa V  bÔ ÷  
÷ rdateTimÞ"n D = D& z  û  	ë  a Otimeî _ `_type(÷ H Ý ø  =  ½ ….iso8601ê  
ì ³ âò# if we stumble upon a�õ
 element with no internal¡## ós, treat it as a“ 1 "“ 
ö  ^ù 7 î  
ë oparamsì a pB = "* "› a   ‘ ‹  
c _faultb ) a  `  
_ �methodNa›CrÀ._p  p÷ £0Àe = "methodNðame" # no params
    dispatch["methodN& †] = end_ ñ

## Multicall support
#

class _ QCallMG :] ð# some lesser magic to store I `s made a^  B s objectB Pfor b¢ ¡ execution ñdef __init__(self,R Â_list, name)…  æ    0.__s ! & =- N %  ; ! =B  i ugetattrl  & a mreturn™ y Ä, "%s.%s" %   K ² )r ­ Û W*argsp Ñ Š.append(T 5 )¤£‚Iterator 2""" ôes over the results of a møp. Excep„Qs are® �raised in5 AponsÐ�xmlrpc faG Q."""
- M	¶k Ý    =W  E A ugetitemŽi>   1 = "E 1[i]~  æ€if type(' B) == '{}B  ' Ö   F¿ + !['Ë €Code'], >  ‚String']¼ < /ele ,[]e 6M 0£ Belseœ N   Ž ñValueError("unexpectedÁ  §2"úV `"""serëS-> anp  uÇ¢to boxcar ý(s|5 Ñshould be a SH SProxyG ., Qs can*  ddª o]‰Ñ using normal¢u Ò syntax e.g.:U â =/(—  _p… …( Œ.add(2,3 ðget_address("Guido- j#Tohe« J ^ ¿ ©¢ Badd_u#, a & =A(‰ 	Î )É"__ Ù ». ±  . üR = []/m4rep·V r{È"<%s at %#x>”ÖP__.__ža__, id\())\ 6 f 	Z Ð þ¶ ¤marshalledÇ[7 * H  , ø ÿ 6  M C"{'… 
1' :	2, '4   ^ }­  H KN!or0.º….system.R(€  Z?# - 0ð
# convenience functionðs

FastMarshaller =  EPars 8Unm  òNone

##
# Create a p0 õobject, and connect it to an uG ó.ing instance.
# This function picks the fastest available XMLl  .
� ¢return A (‚ ,f òer) tuple.

def get% ð(use_datetime=False,  Òbuiltin_types ¦):
    """? C) ->† 
p 
, nä ? ofÐ ‘ 1‘attach itF 4_B.  R÷ Rboth  !s.6 1""" (ifÇ � ÖÉØ  Ü .ifý   " $mk.5 = :'n  $   ñmkbytes = base64.decode ) #elq T l -w_binarya /seT 1 
» O ctargetBs(True, @ü &, -  Eult)i îK c(_ $ (elº  9 = u  ¨:= Ã   	Õh  ñ 	"
/§  ? 
«   6 _ExpatÞ  ¬( ", ß Iò onvert a Python¹¶ or a FaultLâXML-RPC packet@æPdumps�ams, **opU°s)
# @paramºVams Ad 
b  ’B@key. ômethodname If given, cø �Call requ­Pfor
#  t×"  A Y respons] R" ë ] I¶‚d with aÌ ,fôp must bœósingleton (that is,¡ "it' úcontain exactly one element)µ Pencod¿3The|  * åPA str( [   Ecd data–
°. -=g",  & r  _³  allow_non×¾ r 3 [,]Â� ½‰`n argu\Œˆ D(or ¶ 2, i 
Í  � 0 is€2d).‚ pIn addi¶ 9 ½ èã foé  UD Ps canî ‰ ¥as keywordÉ !s:b À     methodnóame: the method name for a ãCall packet

  - presponsA Õrue to create< R! @ .@ ñIf this option is used with a tuple,–  … must be? ö$a singleton (i.e. it can contain only one element).¼ ‚encoding÷ Ú   � (default” bUTF-8): ñAll byte strings in¡ @data €ucture a `ssumed0use& ¹ j –.  UnicodS = ÀutomaticallyÐ qverted,C ò where necessaryP2"""£ Passer¹ ñinstance(params, (G0, FÚ �)), "argu[t2 or$  C "x Tif is V N :"  
A = 1 CelifL1O andR § )R Ò 3lenu •) == 1, "J 3 Æ eif notà\ ò†= "utf-81 æFastMarshaller3 Jm =  (F )ë *se/ G + Ã, allow_none]E”= m.dumpsì Ö%if½ % !¬ f õxmlheader = "<?xml version='1.0'> À='%s'?>\n" %²‘ ¼ V H !# : ,7´  # �ðdard XML-RPC wrapp9) oÌ #:  +  Z (   £     ""<ˆ@Callí 	4  sName>",— … R, "</:  :\n"X  „ 
 1 k Vë ³ï  ,ƒ"a ƒ2strWÄ  … ? = 	… 
Á  N 
 Ó 5 ~  _× épreturn O 3 #  Qas is;  €"".join(' °)

##
# Conà5 an)'ñto a Python object.  7e+ 
s ”presents <�conditionHpis func ` raise( ¿Q exce… .
‘ @3Ë A•  , given as± P8-bitIƒing.
# @è ALŒ0ing1 unÚ d\ ,w 
#a0 (N¹¸Ø )a 2seeŸ±

def loadsO,?ò _datetime=False Òbuiltin_types à):
    """dataý6 -> unmarshalled data, method name

    Convert an XML-RPC packet to A s plus aG A  K ò (None if not present).b lIf the^ #re'  O ðfault condition, this func g Praise, F, Pexcep . 1""" øp, u = getparser(use_datetime=  ,  Ñbuiltin_types  	 )U `.feed(A bclose( “return u. r, u.getj ð()

##
# Encode a string us  @gzip `tent e'   ðsuch as specified byL 
#· , -S Ping: C P
# in" Ð HTTP header,C �described! �RFC 1952
• a@param: !un€ 2C
# @á  ¨ 	 A
defw _ ":40"""0 † ™ Ô T " º ex 	?as Á  Âü~ o „   7ñ NotImplementedError„ ³f = BytesIOÍAwithÔ ð.GzipFile(mode="wb", fileobj=f, comÁ�slevel=1)e6gzfz ’gzf.writep Jf @valuC/DeŒ:TheÅb# @key=Rmax_dÂ �Maximum bW D ¡(20 MiB deí)€° negative
#­Ðs for unlimit2 X ;ingŠ§ "VXã �…!is˜ correctly l!d.R 5 1maxðped payload length xVeded
ýá æ&, 
¢=20971520)0"""›	E É (½ e
r
> « )2tryþ  ß  'if#± < 0: # no îü  &  [dÒszf.read§! Jelsea   7  ˜B + 1¹ +  ÐQpt OS2
K <P‚("invaliL"E 
Ñ q>= 0 an/(‡ 7) >ô c _ xv Ib _ÐReturn a decoý|ded file-like object for the gzip encoding
# as described in RFC 1952.
#
# @param response A stream supporting a read() method
# @return a ‡ Athatˆ @deco© Ãdata can be H òfrom

class GzipD+ R… (Ã . sFile ifÔ $lsí ¯):
    """‚ "o |  ¹ sØ qed withŸ  d E mÕ ,(k . õdef __init__(self,<•  . ##rË „ doesn'tO³ tell() and @ ‘quired byc A þ  aif not
ý  '   õ
raise NotImplementedError;  § ä.io = BytesIO(Ÿ .‘)+  z.é ¡mode="rb",~Cobj=[ !)
B  Qclose:tryµ 
h 4 H  × kfinall7 o .1 )


# - 0ô
# request dispatcher¢!_M"Á ó# some magic to bind an XML-RPC#  0an  qserver.Ø #£s "nested"1 °s (e.g. exaÆâs.getStateNameŸ ]‘psend, n# ž  9$ __ 0 =  |   1 ! =8  Z ugetattr× & Ãròá.f Ä, "%s.%s" %   = š ¾ Ecalla ^*argsb À 
N / 0

#·àStandard trans© O Œñover HTTP.
# <p>
# YouŒÖcreate customE �s by subL  ûCthis£,µ0
# V  ri]“ selected" $s.3T– — """Handles+ ’ s caction-¶ 12"""Uð	# client identifier (mayPŒ 2denfpuser_ag. ò= "Python-xmlrpc/¡³__version___ åif true, we'll ¢G >paccept_ _O !c= TrueK Ò if positive,= eQ  us0  >  ' ±it exceeds d‘threshold’#ì!e LRmany ðs will get confused, so only use it\ ƒyou knowK F AtheyúAsuch ö* Ô %e_Š ‘ = None # @= doÉ& ñ 9	ðuse_datetime=False,š ã_builtin_types v  Z ×*, headers=()ð self._use_datetóime = use_datetime
  `self._ Óbuiltin_types/ 	 4 ðconnection = (None,  )( `headerR Slist( & cextra_ a = []
H "## ð Send a complete request, and parse th ssponse.7 TRetry- 0 ifC gached À shas dis #ed= C ñ@param host Target %   dandler" RPRC h ) ¹ Õ_body XML-RPC¡   0 õverbose Debugging flag% €return PDd reÿ ½ 4def[ (ê,º ,š , � #, k �=False):C  ()#rF@onceKcI•gone cold? çfor i in (0, 1X  \ 6tryi     Õ  ³ ƒ.single_7(‡Á ] M ÷except http.client.RemoteDó„ Nif i  Q FraisB  c ÎOSError as e;  Q ñ  or e.errno not ×.ECONNRESET,  …ABORTED,M o  	< KPIPEj6 ¿ Q   ` t'%l issueÕj  } ë “_v0 = x _.sendê( þ! =êW @.get  (iþsp.status == 200´– $ =!Ò  Ö   °Œ_w  	 )Ì * *ZFaulto — $   ( E¼:ion, ð #All unexpected1€ors leav|™)in« À# a strange ù òe, so we clear itV €   ý [close=« [ ¢#We got an‰ † G   #luard any Q dataÀQ  ô &ioµ ¦2getû("content-length", ""è rW.read¶ a �Protocol¦(À  ¡  W% +	 Q  0 us2 sp^ :son•Qdict(+ ® :s()v")

ÖbCreateÀr~ñ@U�A 2-tuplÙ@taina3 >ñan unmarshaller.d À def getpars³er(self):
  õ# get parser and unmarshaller& `return+ * à(use_datetime=S (._ ,: g   ' ×builtin_types? 	 !)
E "## ñ Get authorization info from hosÅ Camet· 0# H ðmay be a string, or a (1 ö, x509-dict) tuple; if+ x ñ it is checked f@ �"user:pw@H " Amat,@ƒa "Basic> ‘Authentic³ €" headerR Qaddedq ²ppropriate.6  c @paraÝ Í ð descriptor (URLÌ   É É )I # @ºAA 3-ã ñ containing (actual>s, extra  sÁ#· &] c.  The$ î  sfields kRNone.¼0def4_&_®~,q "):$  c F A= {}ù   Óif isinstance®À » (  Z ÿ =W U  ,k ¡ = urllib.¾p._splitÃZ i O  ÿ6uth   I C ðunquote_to_bytes(% )¿ 7 ×base64.encode, 0.de �("utf-8"< q"".join] .µ B()) ³ùrid of whitespace} Í_mYs = [  Ÿ  ("›M#",¸A " +h
’  3 ]E Jelse%q ]Š„¬	) »* éóConnect to serverÍ~ #0Tar¿ Z % òcn HTTPM  /bobjectm  šbmake_cm :ionœ ð   #½ €an exist84  ¿�possible‘is allows­ A  † ã/1.1 keep-alivç  2if >T  † Ò = == :[0]xŸ E &[1­p# creat Œ   `Da@ dÃ cŽ ,Œ À  ¨ 7getë 5 D¡  ¯à, http.client.Ÿ ±(x C ë « A0leaÍŽy cachedò - Usƒ°n the eventSÓsocket errors* a  5Qclose+Š ë ,f ^A òì
Ì$ (N ,  	 G D .“ ÆASendÀ request.
  ð  #
    # @param host H ódescriptor (URL  û, x509 info) tuple).C óandler Target RPC h ñ(a path relative tor )B ðrequest_body The XML-H    
3 Ñdebug Enable  rging if … is true« ñreturn An HTTPConnection.
X “def send_r a(self,¬ ,Î #,  ¨ ,i !):@  TcU 0 = @ f.make_ (mû  0 theaders- _ += d_extra f â x  L e Q.set_vlevel(1q iä ðlf.accept_gzip_encod:@and  X 3put w("POST"Sskip_W R V=True}  ¦ â ±.append(("AŠ #-E… @", "„ &")8 Oelse”  A u ÀContent-Typer ˆtext/xmlv 5 ÂUser-Agent", `user_a ® ÷IB (š#,  œ / c• 	/ oo4 ÊX Â#ÙDSendªr �This funûñ provides a useful hook for subclassingz] 6} X httpO è^ãñlist of key,value pairsk  �¨ Ë d�0�u J ¶  _ t val inR !  ™ C B.put_ (6 )~ I ‚FeÅM _&, õ 
Â»0#opQally ÀTe theF ?1if Œ.$  _thresholdoÅnot None and2  6  † 2 h< len(Û ):  ¦  M Í Â"ÓI	Š n ! =ïe‰ 	o `Length=tr(Ï ¶ 2endxst }@Pars�TsponsÇÍ ]´file Streamš"@rç"Re8 ±Àe and targetô method.

    def parse_response(self,  !):(  , e# read ô  data from http1 R, andT 7 it= ÑCheck for new3 K òobject, otherwise it is a file  .M ¶if hasattr(w ·'getheader'µ  ¹ %ifj .% ö("Content-Encoding", "") == "gzip"ú  E   ôstream = GzipDecodedR8Š )§  3 OelseI 5 4 0 u , - pp, u = ² Ù É2r()Û ~  wh?1� ¸"= X .ÔZ(1024¸ aif notä
>  W Ubreak†   "if† _verboò Ðprint("body:"_0pr(‰ )w bp.feed Ç  ^ {!is— 
› Ò fclose(X $p. ³ †return u ñ##
# Standard transport class¶òXML-RPC over HTTPS.

 TSafeT3 (
 ‡Ò"""Handles an: a �action to _ ¢server."""  ¢ƒ__init__œðuse_datetime=False,  Óbuiltin_types ó  ¦ 2*, 'ps=(), csxt=None±  ' …super().{  a u  ,c  A    ' 
•  > ¦  Ñð¸ $ =Â /ò	# FIXME: mostly untested  M¡make_conneTGhostÿ  rGelf.) Ø '  "ƒ  :[0]Œb( "1]Š  dË F¡.client, "bC§ "�  <  ra&ùNotImplementedError(� "your versj!ofxe Á doesn't supìs "h£# create a¶6“ÿ!a ¥descriptorƒ # Pmay bG àstring, or a (6 õ, x509-dict) tuple= c  Ccextra_5 ú_+ Q_infoU Ã = ¸ =’ ,.ø k(y ˆ  o ,V �P, **(Ä  Õ '{}Ð	
oôÓ proxy.  Thisy�establish=€ virtualò¾/
#?‚
# <p>
#L Àclass is avaó
ilable as ServerProxy and ó	.  New code should
# use / ø, to avoid confusion.
#
# @def* ð(uri, **options)# Ðparam uri TheA 0nec ñ  point on the sž .1 2key4 Ætransport A  ðfactory, compatiß @withG ç
#    standard5 Zclass^ �encoding— …default  òused for 8-bit strings` (. šis UTF-8)Z ð	verbose Use a true valueG!en�`debugg~ `outputA °   (printed* Æ " d Tsee T!

× � :
0"""p#[,ˆè] -> a logical„ Ù“n XML-RPC…
D  A  isU0 ´ ¡, given as8 òscheme://host/target.S   Ö ¡implementa always supñx r"http" R Q.  Ifb ¤SSL socket/ s is avaìô(Python 2.0), it also+ ¥ Z #s"˜ !Ifç ¬ Q part!—¡lash prece, N ñre both omitted,• q"/RPC2"Š cssumed]  õ afollowîu can be:Ð keyword argu"s:3 Îû:N~  ' »:Í grequesÑµb :Allä@ pasý!toI ™" p8rKß  £1use  *… . 2"""e  'à__init__(self,,¡e=None, Ib=Falseh ê  aWS_none#  º‰_datetim Óbuiltin_types- £ L  	 Ð*, headers=()aQntext� )Z & ó # establish a "V">.ü 3 1getO5urlx ð
p = urllib.parse.urlsplitG)' Rif p.‘ not in (Á1",  's"ž  o óraise OSError("unW%edë–protocol"h  ˜0.__¸µ = p.netloc‡  oandler»  "un½  ["™ ¦", *p[2:]]b !ifÁ 
J Y » 
 3 = YL&if7 o :
D 1$==$
$  l hË FSafeW   ñextra_kwargs = {"co ":í #}& 8 Oelsen 	j 
X 	3 = ¼ F(useñ Àetime,
       ýuse_builtin_types= /,
?  ƒheaders= 1 õ **extra_kwargs)a õself.__transport =  
& µencoding =  ¬or 'utf-8'. £verbose = 
 ! �allow_non$  w Àdef __close(¥ ,):? ¨ .& )9 qrequest; ÷, methodname, paramsO ƒ# call a& ò on the remote server[  |Y ’ = dumps(O 
c =¹ 4.__ §þ 4  !).@ N ó 'xmlcharrefreplace'ª Pspons]ˆ 2Æ (T 1 & Jhostª  jandler J 
 ñÌ  	m © ’if len(re° f) == 1ï ›  4 =  8[0]–Eturn  Carepr__	õ!re1 
ù"<%s for %s%s>" %² C .”€ass__.__QD__,   9 -j Ç õ ™ dgetattœ  , N ¢ t# magic–¥dispatcher• Ä !_MÞŸ ‘P 
¤# note: toìÞñobject with a non-standard? Q, usep #\Cult ¶ (@, "sV ge-python-Æ 2")(f; î  d‡ , ø ë ð """A workaround§ ±get special. dibutesœS•QProxyc  \!  Ç Àout interfer«Û  ÐN#__Á %__: 5""" !ifo  ƒ"W"‰8ò" < (el>  SB 
& F ¡raise Attrô uError(" 0 %rÍ  f*P" % (M),)[enh1 ½ ›Cexit- 1, *ºõ  - õ ‰ò)

# compatibility

Œ2 = 	 •O
# - 0ð 
# test code

i `!__ ¢__main__":Î ‚# simple4 Ñprogram (fromÒrXML-RPCXƒfication8s# localïÁ, available ? ²Lib/xmlrpc/ù".pz þ ÀrverProxy("hñttp://localhost:8000")

    try:	   öprint(server.currentTime.getC 1())3 üexcept Error as vJ £"ERROR", vn �multi = M CCallm P   l XData( xpow(2,9 radd(1,2 	Æ ñfor response in W &()� ë ' F Ð Ñr"""XML-RPC S2ôs.

This module can be used to create simple ; mBs
by! bing a  ð and either install òfunctions, a
class ðnce, or by extend- Qthe Ss bXMLRPC« 7 Q.

It§ Halso¬ Ghand¥ prequesth ð a CGI
environment usi 2CGIb R- HC rqe Doc* ¬ !esr a that
	ð pydoc-style docuw a ßÄ d”HTTP
GET ² !. ’5 ðs dynamically generated
ba¬0on 6g‡ðmethods registered with* ¥  ê ðA list of possiblþòage patterns follows:

1. IÔ j #:
L / =µ 5(("Ä0", Æ#))1 .˜ _M O(pow õlambda x,y: x+y, 'add'1 xÖ_forever()

2¯ %anp":
J‚ MyFuncsd÷def __init__(self| # make all' h6sysp availa:Àthrough sys.Õ Q_namex À`import   j .N = Š  ”M¿Ž  P! t»( 1 so H Gtem.B n p# knowsv�advertise 4  .- areturnƒ_public_# ’ E + \-  ß    ['û 3' +O  Ù7  ø • M  !)]N  ÿ  ; “, x, y): Œ    *  R*  + _x + y›0�introspe¾©%s(vÅîCnce(X r“!r. š3šžó custom dispatchI¶7ath³ R)@must/@pres ™?sys+qto workk Û„[uv, 'pow'³AHelp,¸ 	G� À system.methƒodHelp
  •# to work õif method == 'add':  5 õreturn "add(2,3) => 5"# *elA ?powA Ñpow(x, y[, z]G hnumberL *se} ó# By convention, Ž Uempty„  § ù# string if no help is available- F "{ ódef _dispatch(self,–, params)– î  í *= { ,m9 S[0] +‚ 7[1]G 'óraise ValueError('badÄ ñ')

server = SimpleXMLRPCS ó(("localhost", 8000))1 ð.register_introspec†A_fun	 /s(* Æstance(Math(K ƒ ÿ_forever()

4. Subclass—  2:

  G ª ½ ˜Á6tryÎ:°We are forcBóthe 'export_' prefix onP`s that1 ‘F 1caljð through XML-RPCrp÷ `nt potÊ�al securiÅ‰problems\  p£ = getattr¢¢ +š )5 ò except Attribut
ö 3E) Sion('@"%s"9pnot sup^ed' %d l†* ® (ü”  ¡Q Gc Á A”Wx + y² ª	_ç5. CGI script:Q 2CGI ÁRequestHandl“D rõ É  ðE(powéh/ "_r= ð()
"""

# Written by Brian Quinlan (b ð@sweetapp.com).
# BasedWfcode w? ðFredrik Lundh.

from xmlrpc.client im˜ð Fault, dumps, loads, gzip_enV   de H Rhttp.é F  ‰ JHTTP/ Dools- rpartial !in £signature
  Fhtml y  bsocket�  $ys o
 R Tpydoc! ¥traceback
Ôy cfcntl
I- � = None

œð resolve_dotted_f8`(obj,  t, allow" £names=TrueÂ?"""E ¡a, 'b.c.d'ö!a. 
Rz Bs a } n }  e  =Ðan object.  Rê+aná ûðany attribute in ðthe chain starts with a '_'.

    If % ð#optional allow_dotted_names argument is false, dot Qe notG ðsupported and th+ 0uncU ð operates similar to getattr(obj, 
 !).H 2"""˜ /if‹  :$  ·  3 1s =; ±.split('.')  Nelse* [3 ]] �for i in? s, Rif i.* )V('_')  x ñraise AttributeError(v    €'attemptê áaccess privater ; ­ "%s"' % i? Ç  M 
Ë   Yobj =?i/ ðreturn obj

def list_public_methodsnÐ A"""R1 1s a+ 7 ofœ àstrings, found* %‘specified² ðobject, which repres&wcallablë sÖ¥ €[member ˆ Qin diÏ  ì   ifh *   q� .  ˆ (lE ò))]

class SimpleXMLRPCDispatcherö¢"""Mix-in , dthat d% ós XML-RPC requestsTTÿ2 pis used	…register6 –‘ handlersÅ > en1 i  ¡7m. V ¢doesn't ne[ !be= �instancedK¢ectly when‚ )byë ÂServer but iÃvcan be E 	<   ’MultiPath.C z á zã__init__(self,Çbnone=F>áencoding=None,A µ òuse_builtin_types9 » #  Z P.func%{}C  Â 0 = a 
 à Ž  >í  
% ¡ 5 =  ªor 'utf-8', ­   =q
Á w _¦ & 0‚ÿ ¾NEs an´ 6Prespo„oiŸ AvOnly onï ÿ llÉƒt a timeÖ 7 .Å et0 haK_µÞt� 86 @willp §"ed™ e t �  `3 "anz Š ñ its parameters } Btupl
 " Ee.g..™ Ò('add',(2,3))˜ . Ú  n�uhave a K  ˜ Ú ì Uå bsearch­€find a mi<ingE rand, ifz$, B '2. MËp beginn@  ª "'_šÀ    are consóidered private and will not be called by
  õSimpleXMLRPCServer.
 ±If a registW õfunction matches an XML-RPC request, then itE € |  instead of* ^   Jance� `the opv ðal allow_dotted_namƒ ârgument is truô 5the€ W Q does	Àhave a _dispÉ ƒ method,  Y @ ñcontaining dots are supportedbðresolved, as long unone ofG  È  Y @ seg° Às start withH7'_'ù  žö
*** SECURITY WARNING: ***¡ ' PEnablž  b ! =s<µs intrudersš  E ðto access your module's global variablobnd mayN 	C Y � to execu�órbitrary code on` Æachine.  Onl� Š ƒuse thisõ 3 ÷	a secure, closed network06"""Uself.÷$=  ¯ ! + =× 	aW 5def«_(H $,  a=None,> %):q C"""RG5s a2  *prespond Ksà TGaø0canÛuÁto set a Uniq + † 1fort± .  ? }  ö# decorator factor¡&if¼ 0is ñ å  = áreturn partial!.A8$ œ )_ ; !if; ÈX  , % =} !._þ%__Â  ‹.Ù  s[, ]- c ž  '  Q 	Û ÅAospeç± sÉ Ð x»	@ P txesystem³  ¨ 9spañðsee http://xmlrpc.usefulinc.com/doc/res©ed.htmlN  Ã ¢.update({'~ a.listMðQs' : *  _ ,K  › F 2œSignatureJ  N OHelpI   }+	¯PmultiÕ« < §? in¦ Cwww.ª ÿiscuss/msgReader$1208œ“ è ð_marshaled_dispatch(óself, data, dispatch_method = None, path C):
  C"""D1 ães an XML-RPC > ñfrom marshalled (XML)j %.
E 
4 Us are‡ 1ed D ?theH F `using ( _Ä † 1and õresult is returned asA §  õ. For backwards compatibility, a£ A ñfunction can be provide  Ðargument (seeO  %in@ ó SimpleXMLRPCRequestHandler.do_POST) but overridï ? Pexist |ñ through subclas!is	æpreferred mean‡of changF L•behavior.q 6"""Å6try tparams,„€= loads([ð, use_builtin_types=„. )a  T õ# generate responseŽ    %if–Àais notÅ
   0 E , =8 (E ø Ç )g OelseM 
Í ‡L 
e# wrapÏ ` in a ¬ªleton tuplä ´ ( ,    × Fumps( Ž! 9=1,Ù  	 ¢allow_none¡ `, enco…  Š �except Fat@as f	 
7ˆ © $ &, g ]  ° † 7  ” 
… ’# report ±  Á ö© to server#1exc²,/ b_value �tb = sys." Vinfo(w  T!  	l  "   Cð (1, "%s:%s" % (f  :} ˆ /))
f
Ð kfinallõ ® �# Break d‹ence cycÅ ( Â & =K L xÿr²(.Õ !e(j ó	ing, 'xmlcharrefreplace'C0defž‘tem_listMÞs@ 
Ðxsystem.% ð) => ['add', 'subtract ¦multiple']ª Rª @s a D 1 ofsPPs supmQed by d.M- Q= set¤ .]†s.keys()‰1if Pinstakï4# I$  ŸÐimplement _li÷stMethod to return a list of
  1# m) s ðif hasattr(self.instance, '_F ] Is'):7  X O z |= set? .= 9())= ”# if the m  ƒ Ã a _dispatchª  $ Kn we= ðdon't have enough informationsprovide> #of^ 
pelif noX �  9ƒ_public_&
´ssorted(. !)
¶ £def systemG ‘SignatureO ,Ê W_name¡2"""6 .O 6 ñ'add') => [double, int ]s  ÙRGs@° describing‘$ s„ " oÆe @. In  ¹  F 0abo¢@xamph  ð3add³   takes two� öegers as argumentœ3and× � µ † result.² óThis server does NOT supportBF."""A ò# See http://xmlrpc.usefulinc.com/doc/sysí †sig.htmlA Ç'sN„ 2ed'+ ÒOHelpÍ1 ÈK"AddH‡togetherß Ò0strÉpcontain 1doct?0forÆ” specifie±
/f = NonŸi[‘A in SZfuncs?@ ! [ ; ]E—% ,iZ z 
U 3# I½` can ix M = : «Phelp ï a”u  ¾	ª  O _ 	µ .ƒ äé c ú 	í fý&:try‰ @  (  =°Àolve_dotted_niibute(†  3  	F,/ r [- \ Tallow™  H{Œ  
µ  ±except AttrØ _ErrorBpass 9 ð# Note that we areÛPcheck›  9Ø ð actually
        # bóe a callable object of some kind
  õif method is None:  " •return "" ?els$ Òpydoc.getdoc(T !)
7 ðdef system_multi™ a(self,¤ f_list)x 2""". .. 2[{'S ò!Name': 'add', 'params': [2, 2]}, ...]) => \
[[4] ˆ  Ñ ¡Allows the| áer to package p ±ple XML-RPC# ñ s into a singleÒ  J †request.\ õ!See http://www.xmlrpc.com/discuss/msgReader$1208K 6"""F Åresults = []" 1for� 1 in 43 �  q_name =% [4L  - 8(  &']†  % :tryc   ð
# XXX A marshalling error› ñany response will failnVentir> K   #u 2. I¢ on�!re§õy should fix this. @   2�.append([[£._dispatchŒ", ê 9)])F ðexcept Fault as f	 ü i 	C  ‰   !{'= rCode' :J . ,4  4 kString6  }8 Å ¶  exc_type, 
 Cvalu @tb =™. Zinfo(Q  Ï    ( 1 + °"%s:%s" % (¢ Ä ) I Ç ofinallÏ  / ÷# Break reference cycê $  ‰ & =N O C¬>+] œ «,‚�ÃC"""DÇ šî}  Jð s are forwardedãõa registered function that® m.g  F +edn  \¦uno suchI D Qexist¸ ]  Ç llZ	Œ  }Ž †instanceqif avai¾ã !IfJ;  u has a XR /  ˆ å íœb  ped with- â  ) £ Rk( a6"tsJPeters2Wa tup4Te.g. Ú �¹S(2,3) ZÚ Àdoes not havÖä {Ðthen the instó"ance will be searched to find a matching method
  °and, if fou
 B …called.
( M7 €s beginnI ñwith an '_' are considered private and” F 0not  ^ „ F """j Etry:1  "  # 0 F theÆ aregistm ‰function4   € = self. "s[ø ]& ú except KeyErrors Fpass* :lse  0punc is Ò ;Non!  · preturn ~ •(*params)T ! aaise Eˆ Rion('£ T "%s"[ Ãsupported' %»)+"ifâ Ainst‘ ±if hasattr(2 €, '_disp*')æ  ¤ |`) `Š 1 on–M 	Þ  > 	r .G (ð $, 	@ z ` $'sy ‰directly2 9 ƒ  ð = resolve_dotted_	iibute(B  1   	± ,# ¼  ? Tallowp FnameQ c   
‘AAttr› —  5 	›  eŸ  £ ) ¤ (§× r¤&úclass SimpleXMLRPCRequestHandler(BaseHTTP „2"""; ¢ XML-RPC r> " h?  ` ¡S `s all S T POST2 s‡€attempts`decode»2m a—f !s.˜1# CÏ 8P list –ñaccessible path components;G # ,3!is@  ›àult in a 404 e�€ @rpc_R ós = ('/', '/RPC2'5#if�A, en× ðresponses larger tha¨!isé"po« š 3 ð_threshold = 1400 #aÅ rmon MTUpú#Override form Stream¼@: fu�Puffer‘of outputm #‚no Nagleá Ñwbufsize = -1% �disable_n% ó_algorithm = True‹ P a reÊÖ  a gzip AcÒ -E1ingO 0aepú!rn.šPile(rÚ þ à\s* ([^\s;]+)  * Ä#content-codi  	  (;= qC =
 ñ ([0-9\.]+))? #q¥ 	1  ð""", re.VERBOSE | ðIGNORECASE)

    def acócept_encodings(self):
  er = {} Pae = # ð.headers.get("AcF #-EF e", "")5 ÷for e in ae.split(","d  k Tmatch\ ¡aepattern. &(eL  , 1if  ¦     2v = Š.group(39 # õfloat(v) if v else 1.0°  '   !r[g L u1)] = v& ‘return r
 üdef is_rpc_path_validM"if<& sÂ R _ E  3 0 k  ›  ´ 
= e# If .* ð is empty, just assume all [ µs are legalT  X ƒ FTrueØ |do_POSTÎ ð"""Handles the HTTP ( ’ request.B  W 0Att� ás to interpret� 6 õs as XML-RPC calls,¢ Qwhichº �forwardedR  ~ áserver's _dispMpmethod ~h¨ Eing.K 6"""Ÿ Á# Check thatÌ  # B
!bif notÃìÑ¹ªeport_404(Šh‚ <tryÏG"ð rguments by rea£† body ofg b A# We* P thisBQchunkzõ avoid straining < �# socket.f ¡(); aroundû10 or 15Mb mark, some platformsH Pbegin—öhave problems (bug #792570)ˆ | Amax_¦ @_sizaq10*1024 	^    B_remÁ   =M—�ú["content-length"]xiL = []T jwhile Z 
Œ ¤ 	  Jmin(1 *, Å 
v A  =RrfilekY 4 q# “  V YbreakÏ   ‘L.append(: X 
¼ Ë -= len(L[-1/ödata = b''.join(L)³ i   ìsdecode_ý_ˆ(# 
‚ 0if   `NNoneÙ rZú#response has been sent‚ ð# In previous versionsÑSimpleXMLRPCS,	3ð# could be overridden;Càclass, insteadZ +in? k Dper. To «�tain back³ö s compatibilityÝ P2# c‰Po seeŸQa subƒ  Ð åDand ò– RusingÔ if+ð sent.
         ÿ!   response = self.server._marshaled_dispatch(
   àdata, getattr(C 5, '4 ’', None),] MpathF ) �except E õ+ion as e: # This should only happen if the module is buggyP  ¯ ð	# internal error, report\ RHTTP ñ  	:  Ì d.send_$i(500)
% ñ # Send informatµ About˜ Ð   Éif requested@ eif has< Cz ù	traceback_header') and \D  ç   ± À? :8 4 #nda E("X-· –", str(e)£ h   ™ 1 =   ¡ .__exc(/  O 3 ð.encode('ASCII', 'E óslashreplace'),  P · X  F "",— «4 úContent-length", "0"l 4  sÛ JelseP- x121 0 $ R $("… @typeƒ ‹text/xmlŠ "ifC8 _thresholdö1notg
�  s tif len(� ?) >F :  > #q  ac™_| úings().get("gzip", 05 ;   Oif qY   ?try  ! µ 0 = h ~ eÌ Ì 5  hEy0ingl X hA   	ð NotImplementedEFº Ipassž Ž { 	«uC Š «  ¨wfile.writ'Š `def des_‰"_cþ´ È)× A#sup' # ù% oÈV  z  ,Øs!d -%  u÷identity").lowerT&ifk E== "+ ™  s preturn ³ ‡ ;  ¸ "7 rL  / _!(X 
Ò	Š
d501, "@ %r ²bUed" %÷ x _Valuexo  0400o  ¨ô1ingCð content")
      —  else:
  ô'self.send_response(501, "encoding %r not supported" %  )L H ûheader("Content-length", "0"0  w / As()
L `def rej `_404 (X )³ 1# R! 0 a # Qerror<  ×  0 Ð 6404x æ ÿ = b'No such page'C  œ Ë @typeÉ ¬text/plainÒ J7 „str(len(… &))™ ¹ 
 Ð    ¶wfile.write@ 4±log_request4ñ , code='-', siz
 Hó"""Selectively log an accepted J B."""c  ‡ 1if Š ²server.logRq s ƒBaseHTTP RHandl0 ¢  ž ñ)

class SimpleXMLRPCSh s(socketu 2TCP ,¯ › 	 D £Dispatcherý  ù d “ XML-RPC Z è <  ñ that allows functions and a single instance— Cto b ‘lled to hYñ s. The default ‘ PmentaZ C €attempts< dÅ — Acall 7the‘ *or‡ ” � 0in + ë ‘ Override __ °method inhegd‰ Ifrom—S œ PchangI Áis behavior.9 <9ò_reuse_address = Truetð# Warning: this is for debugg‚ò	purposes only! Never set/ !toL 1 inw q# produ¤�, as will”   S �out sensiq inform}@ (ex$ioO  ç stack tracµÅtails) when . °s are raiseC2sid#=qdo_POST¹ _œ _d Rback_Fs = Fals+ ƒ__init__ç R,Xl=ÇG
s 8 É=–,ëa_none=} ,ñ_=NoneD  `bind_a  S3ateJ  ô€builtin_>sQ � ·Sƒ   =Žµ s" ( Ó ƒ. ¥º ´ -, † w^W <ddre-, õ $)
È’MultiPath„´(Ä  	1"""2 Epathæ" T’specializ©)ofZ. »sÙðuser to create
  ñp  multiple Dispatcher instances and assign them to different
    HTTP request paths.  This makes it possible to run two or moreC ð'virtual XML-RPC servers' atv ± same port.0 ÃMake sure th" r� ñ Handler accepts= p” P in q£ 2ionE 1"""M ô	def __init__(self, addr,Ô S é=SimpleXMLRPCRn ,H   3log$ ÿs=True, allow_none=False, encoding=NoneD  `bind_a sctivateJ òuse_builtin_typesQ 5):
ˆ ¬ SL.ã ', · ² �  ê 	 Ð -, º -, µ )­  t%.d|js = {} =' =J
% € % =[ fr'utf-8' íFadd_o ó %&,  *):]   s[, 7] =. , hreturn   w ?getw k ? r Â –_marshaleÉ Ç FdataÇ ¡_method = cž u 6tryí  Ï¿response = Š .� é  ?  ‹ ,„ ü ex¨
 @# reì² low level ' €ion back„"	t w# (each}á should have hdkir own= d sŸ  Ë 1excg,† Q_valu0ys. ©info()[:2]O T J Xidumps(3  "   ðFault(1, "%s:%s" % (j  ë„ /))–=» Î S
ï  ƒ ©  .J eg ú	ing, 'xmlcharrefreplace'O kfinalla d ¡# Break reL�ce cycleû  Ö%xc€ Ñ, 7¬ ¿

class CGI¯(ô2"""  1Ur for™ Õ` passeIProughg .M�  êkúÑ )  ’ Í ² Ôi ]zÀ
    def hanódle_xmlrpc(self, request_text):
  ô"""Handle a single XML-RPC2 E"""
/ °response = W ù._marshaled_dispatch(j ; ðprint('Content-Type: Ž e/xml')c ( ôLength: %d' % len(„ )4  ÿsys.stdout.flush( Æbuffer.writeV ‰ E * L # Qdef h;A_getfX„HTTP GETY.ñ"Default implementation indicates an error because‚  Ã­õuses the POST method.& 	Ä0codÀ5400  ðmessage, explain = Base² R8%$r.} s[G ]Ã  õ = http.server.DEFAULT_ERROR_MESSAGE % \|  Æ {   '\ @' :  , ¬    " Å  "  	C } ´  0.enu ~('utf-8—`Status�0 %s’(/ #, ‹ ”ð4 !ÆCONTENT_TYPE´ 
}_=None*ÕE õ passed through a CGI postéÓPIf noÃà data is given@n it õread from stdin. The resultingJ … ó1is ‰ Š o< àout along withc � correct :J headers�$ifœ ¢  "K and&°os.environ.rð'REQUEST_METHOD', 8 ¦) == 'GET'å c¯°^Jelse, #FBõnormally available‹Bé  h :tryM   lÅ0 = Ç ôdLENGTHÇ    A àexcept (ValueE
 , B M ,   q )-1ž m² {“#= 0in.>(_ )þ t b{F )


# - 9ð
# Self documenting XML-RPCó  Server.

class ãHTMLDoc(pydoc. ±):
    """C+ ñused to generate .  . ñ document for a se A"""
C ñdef markup(self, text, escape=None, funcs={}, ™ e `method Ž ’ óMark up some plainT °given a cone ° of symbols» @look£ .—  L EEach- ñdictionary maps object name? banchor .Þ  B   Ê # =Ó @ or é . m Åresults = [] ‚here = 0+ N ð'# XXX Note that this regular expression does not allowØ E theY à# hyperlinking
`arbitrß  strings be Ú2as nA ú c. Only bs with 8@sistC ÷of word charactersG Æand '.'s are• &ed‡ðpattern = re.compile(r'\b((http| õs|ftp)://\S+[\w/]|'d  7 ÿ r'RFC[- ]?(\d+)2 ?PEP2 Öõ\.)?((?:\w|\.)+))\b')¡ rwhile 1Sª ƒmatch = þ €.search(¹ , @  3 !ifî6 u: break`    @starWQnd = & j.span(F …‚.append(£t [s :F 6]))� \ ñall, scheme, rfc, pep,æAdot,v kgroupsx #if@ 
 ] 5url<÷(all).replace('"', '&quot;N 5   Ì ú'<a href="%s">%s</a>' % (url, url)@elifÍ ’ 'wð
://www.rfc-editor.org/rfc `%d.txtd zint(rfca ¤ Ž ¬ ?pep¬ apython¨ €dev/peps d-%04d/­ ?pep­ K Çþ[end:end+1] == '('À Å9 y ¹(	 ,|&## ? ?dotg ') �.<strong,    v 
OelseT S  < » Î«  j ó%ndÂ
E . :“ P  ó return ''.join(; ³ nð
docroutine(self, object, þname, mod=None,
  òfuncs={}, classe bmethod !cl> %):? ð"""Produce HTML documentation for a X  2or N Å object."""
K ðanchor = (cl and cl.__¸ ð__ or '') + '-' +  9 –note = ''L Atitl !<a, ó="%s"><strong>%s</ •</a>' % (N  Âself.escape(— 8),   € &))p Âif callable(Ü $ R õargspec = str(signatur- ) Felse_
; g'(...)ç Äif isinstancL , tuple€ Ÿ 0[0]T— ~  p ³docstring =¨![1- %""( ¦ 6 Äpydoc.getdoc,rdecl = £#+ ƒ A + (É úkJgrey—ñ   '<font face="helvetica, arial"Ú ! Ô O ¥!do€ Üjmarkup^ Â ë¡preformat,Âs,Æs¶[    ¿ �'<dd><tt� qtt></dd’ 5docCâreturn '<dl><d,  Al>\n– ,,Ul0def pserver(' ­   )©, package_ˆ± Z¹¢n XML-RPC p 
¯¥fdict = {}Ó  ïÔkey, value in){.items(”B P[key]¾#Ù5keyO  �$ P  &   3 P�   _ ß» «@headp R<big> 	 /  ‰J Ÿ Presul ‡.W @ing( Q, '#f ' s7799ee'Ã Ö  )=QŠ¸[ ‰ uÌ H   ws µ 
n­ ¶ Q+ '<p pl . Ü Õcontents = [] ½_Í kborted( säž A ‹ q q.appendÛÁ.docroutine(!, ^ P!s=)n Ù #= 	 +``bigsec
î"'MØ¢¬f `eeaa77 t'.join(š J¼j !

/ -ò RPCDocGeneratorã 3"""  es½ gÛBThis‰` is de4Áed as mix-in#¡should not¥ðbe constructed directly.
  ñ  """

    def __init__(self):   õ# setup variables used for HTML documentation6  E ñ
.server_name = 'XML-RPC S ( D9 ': 	\ E = \&  š b"This e ð exports the following method Qrough ‡ "N ¥protocol."f Æ OtitlÇ <  PBset_œ _; X,¯  fa"""Set  V3 1 of “generated> 
tÆ ² † ð   ¡
Ÿ   ž   ˜ ´ h � H =Ñ #› 	
¤ 	 ­ 	# @ str º &centire‚ .F
D ² 	 » «i_html_% ¾ 
¨ . 	P) => F 
Qy ¿ nz  úG%s— 5 0 us	�introspecº # ¼ L pinstallç!un as and  0nceQð at do not imple ­D “_dispatch…÷. Alternatively,M Öcan choose toO K  ï R_get_ÏB_argÌ(  M)h  C yprovide� 1arg¨Æ in$ b ê 5the w OHelpq ¡ help text)F k 
vÍ fs = {}Ø ¯ &B in å²ystem_listMæ(]Æf
9 Vfuncsà *   d  á1lf.% [ ? ]É  - Belif‡ 1 isONone] �_info = [%  ,  @] # ÏJpec,‡	p  t ¡if hasattrJ.z ?, '' D   Õ  Œ 4[0]ñ N .L 	øš n  <� 1�  B 
† ‡ ) eTtuple2  í ð)
              ð  if method_info != (None,  O):
   1 ( =: ) ÿelif not hasattr(self.instance, '_dispatch'g ?try€  “ „ ð resolve_dotted_k mibute(’  7  
• 3 z __name0 )& ±except Attr¯ _Errorï ~  ­X OelseC 6 ²; ñassert 0, "CouldÐCfindúA in BÀfunctions an& = "\ž {" 	 illed"
0 ° "s[ l]¾ + ödocumenter = ServerHTMLDoc(v% a¡ 4 =  qer.docs6 -ç - � ,° Ü 
 2 t „ ; ÷ sc 
)hreturnÙ òpage(html.escape}¿ utitle),0 • ÿ)

class DocXMLRPCRequestHandler(Simple ¿¡"""XML-RPC	ó " rM " hN  l .Ã b ô s all HTTP POST2 Rò
attempts to decode them a$x f sY +GEX i<0preZ P x }:for'. #""°¡def do_GETb
 4"""Ø 2theØ  ¢  * I„ ) Es as”  � Æˆ  ? 	hŸ    £     À# Check that8å path is legalJ °¸pis_rpc_) w_valid(Ü  T & §report_404p  ’ß ‚sponse =0Ä  .generate_«_Ê P().ené†('utf-8'Ñ{ rsend_reW O(200  ðheader("Content-type", "text/t "6 ôlength", str(len(w +))?  ” t s° ¶wfile.write@ tÄ8(  n 6”BDocGO#or¬’ ð  documentation ñserver.

    Adds the ability to !  ð r documentation  - 2cap0 1iesG óof SimpleXMLRPCSc  b 2"""k òdef __init__(self, addr, requestHandler=DocF R ,i  R  3log$ ÿs=True, allow_none=False, encoding=NoneD  `bind_a sctivateJ òuse_builtin_typesQ %):‡ ñ  ß ', ¶ �  Ý 	 Õ Ï -, ¹ M Ø )Ñ vÙDocGenerator.Ñ ò )

class DocCGI/ �½O(    Ÿ U „ r3"""d û for XML-RPC data and¨Sñs passed throughë 9CGI”hxA_get–p  t #„HTTP GET±C * �Interpret‚ ) Ds as5 s¿ cr�  ? 	e. §  $ °response = =".g¥ye_html_B 1().÷¢e('utf-8')‚ G ðprint('Content-Type: text/H ') ôLength: %d' % len(‘ )4  ÿsys.stdout.flush( Æbuffer.writeV E * L # WÁ‹×   }* 0

iÅòname__ == '__main__'`import—Retimex60Exa" 2ice/  v  Á |getData�  ²return '42'N   R §currentTimO    @s°qcmethod&    m C: (0 "   t 1datÆ .	 Cnow(MOwithõ ð(("localhost", 8000)) ó÷  à.register_funcdG(pow'J& ÷lambda x,y: x+y, 'add¿_ šinstance(‡$()5pdotted_ÛN… •multicallµ sÚ9è%ngª5on  % ² 8 ð It is advisables¢run this eCœ ƒðin a secure, cloî†network.] À try:
        qserver. ±_forever()
 õ   except KeyboardInterrupt:"  * ”print("\n( $ i) ö received, exiting."_  = @sys. ö(0)
# pysqlite2/__init__.py: the ð* package.
#
# Copyright (C) 2005 Gerhard HÃ¤ring <gh@ghae A.de>8 õThis file is part ofd [ # rsoftwar' ñ>rovided 'as-is', without any express or implied
# warranty.  In no event willÖ ñauthors be held liable forT àdamages
# arisÍ Afrom: 0use³ tÈ ¥ ¸  PermissionÜ g€ Ped toR 0one
  = 	: r ðpurpose,
# includu òcommercial applications, anY `lter iðd redistribute it
# freely, subject�  Ò`follow`  re1 cU :ŸÝ1. The originè � must not8Pmisre{¥ented; you   
#d@clai5!at QwroteD_ 5al A1 If$ !J Àin a productþ À acknowledgmØ!inX " P docu /’ would beK ð appreciated but« Ñ ðrequired.
# 2. AZÐed source verØsá ð
be plainly marked as such› d$  T s 
* -  be �@
# 3† isjpice may  upremovedía£ š 	¬ aion.

 Þ€3.dbapi2(Yort *ú ø¢DB-API 2.0WAface#ú/4-ÿÿÿÿÀisrepresenteð'd as being the original software.
# 3. This notice may ô6 be removed or altered from any source distribution.

import datetime  `collec0 qs.abc

S “_sqlite3 B ð$*

paramstyle = "qmark"

threadsafety = 1

apilevel& �2.0"

Dat4 † .	 Y

Tim •  ustamp =· 1  @def O °FromTicks(t Ñ):
    return!  (*1 `.local
 ( p[:3])

G  € G 
 ! G 83:6H ² M & R Q óversion_info = tuple([int(x) for x in & â.split(".")])
²_ B 
- 
I `
BinarÎ»memoryview
'ó.Sequence.register(RowZ ð_adapters_and_conver (¯ †# _C(val Ìñval.isoformat()
è
9 ß= 7" "@ � {  •  \ .	 °(*map(int, “ zob"-"))U   7 î
˜  J `part, "  
 ) =P  £  þ   ñ year, month, da‘„ I º‰  : ] @_fulˆ . 5.")- õhours, minutes, seconds = ò @ P 5[0]H 6:")I yif len(- b) == 2ž š   Vmicrof  Ý³'{:0<6.6}'.ê	F °[1].decode(o E   Oelse[ 
0/ ,  va	 7 Z Ó 	 (e/,  "¸ ö tBval
n þ(u &, òE 0  ¥ 4   8 Ê@er("k 3",  Ü-  K ¥2  <)

™ Çð

# Clean up namespace_/l(> ‘)
# Mimic
�3º ñ$sole shell's .dump command
# Author: Paul Kippes <k Àp@gmail.com>™ ðEvery identifier9ðsql is quoted basN1n ab 3ent$ ð ite
# documentaò "SQLite adds new keywords„ 91 toØð when it
# takes on new feð*atures. So to prevent your code from being broken by
# fu8 à enhancements,6 ñB should normally quote any identifier that
# is an English language word, even ifU ñ%do not have to."

def _iterdump(connection):
    """ aReturng  - @atorç @the 9 A of   atabase in’  SQL text fÆ 1t.
L @Used= `producÔ  ) H �.  Useful0 s¶ Áan in-memoryN ds ðfor later restoraÇ ±.  This fun× W²t be calledH óirectly but instead  ¼ à C � method,  » 1().H  2	 Vcu = Q‘.cursor() òyield('BEGIN TRANSACTION;')%À# sqlite_masÔ PtableO Qtainsm 5²CREATE stat= k – 5q =Ì ØñSELECT "name", "typ 2sqlñ % iFROM "ˆ   ! QWHERE" á" NOT NULL ANDã  !   \ Q == 'Å ' ƒORDER BY‹   G >  schema_resN²u.execute(qH õV _Ê  , È ,; ‚< £.fetchall(Ø [ 6if ;   ë ’sequence' ,   ´yDELETE 2 "À ,   /elb Otat1_ bANALYZV Y 	Ó.startswith('Ã 'è  Œ …continue`#±¢E: Virtual
� support%AimplT! G #Ô 9sqlt …ØVIRTUAL TABLE� #; ql" =j ¯°.replace("'„2''"Õ / 4 rÀ"INSERT INTOÛ(ïú1tblT ÷,rootpage,sql)"\ñ  W  ÓsVALUES(Žc,'{0}' ²0,'{1}');".³(@ É ,  Ò F'"))Ï OelseNT{0};'m  ³   ­ q# BuildÏfinsertéè„each row@currvk¡  _;„–'"', '""'µ us'PRAGMAÃµinfo("{0}")Â l acolumnˆ  ÌR[str(/  I A[1])Ô   Ã S¼]Ô ÐÇ'"’  åS{1})'¬ ª >;""Û lw  K%à  ñ ",".join("""'||Œð ("{0}")||'""".fðormat(col.replace('"', '""')) for col in Óumn_names))
  ö	query_res = cu.execute(q"  D 0rowD - :@  G âyield("{0};".f’ ‘row[0]))
* ð# Now when the type is 'index¯ ñtrigger', or 'view'9 qq = """  k €SELECT "Ç @", "J   6sql% öFROM "sqlite_master  F QWHERE" å" NOT NULL ANDg  % \ _ IN (¨ ¥ '¦ schema_R N ½ ,A, sqž6 ¶.fetchall()fb'b'b4sql_ ð&COMMIT;')
# Copyright 2001-2019 by Vinay Sajip. All R$ ñ>s Reserved.
#
# Permission to use, copy, modify, and distribute this software ðits
# documentatK  û ±any purpose( ¡without feñhereby granted,
# provided that=Qabove� à Ðnotice appear¦0all 1iesc  9 r
# bothE  Ë 
; n_ Fis pø V Ú
# supportingÙ  g    Þ8 ofk�
# not beLd¤ pdvertisM Àor publicityƒ @tain &todPion
#V  ?j>ðspecific, written priW Ð ðD.
# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
# 9 xIMPLIEDA ðOF MERCHANTABILITYZ� FITNESS.PëNO EVENT SHALLš ð
BE LIABLE FOR ANY SPECIAL~ 0DIRÿñOR CONSEQUENTIAL DAMAGES OR
#4  ñWHATSOEVER RESULTING  ðLOSS OF USE, DATA OR PROFITS, WHETHEN ÀIN AN ACTION0 ðCONTRACT, NEGLIGENCE; O0 “ TORTIOUS1 `, ARISt POUT
#@  ORRCONNET r0THEŠ  I �PERFORMAX F‚0.

h@Logg"qpackageçñ	Python. Based on PEP 2820comˆs¡òreto in
comp.lang.p; &

57(C)96#
T( simply 'im," lª '† ‘log away!Å 
# ðsys, os, time, io, re, traceback, war s, weakref�@llecWÀs.abc

from ‘3ng Y �Template F¦¥ter as Str ñ


__all__ = ['BASIC_�T¨•Buffering1   €CRITICAL PDEBUG	 xERROR',TB'FAT& ‘FileHandlôS'Filt
 ™  C " DINFOM À      'LogReæcord', 'Logger
 RAdapt `NOTSET �NullHandl &
  u'Stream ` 'WARN3   0ING ÀaddLevelName ÙbasicConfig',N ð captureWarnings- €critical Qdebug	 QisablM [errorG �exception, 2fat> 9get‡   ý  [ClassP @infoK !lo~ ”makeLogReD2setG= « 'shutdownI 1war”   !inM y L pFactoryk S  	, lastResort0 draiseEø ð%s']

import threading

__author__  = "Vinay Sajip <v  _s ó	@red-dove.com>"
__status7 `produc_ðB"
# The following module attributes are no longer updated.
__version__ = "0.5.1.2l  !  j £ ÿ07 February 2010"

#- 7ô
#   MiscellaneousÂ Odatak ;@
#
#IðrtTime is used as the base when calculatO   re @ve t7 Çof events
#
N = .# 0()
k p ¥to see if &Ps duro hã 	 ðshould be
#propagµ<
#
U a= Truep ÷ If you don't wanz A0rma41 inñ plog, se& ñis to zero
#
logT²/s ^ Àmultiprocess´ d M> l g È P� eÊ »7-¼Ñ #�ed stuff¶;Ð#
# Default lÅRs and p names,Ïðse can be replaced with any positiveîð
# of values hav¹�correspon¥T .Wr%‘a pseudo-~ ", •�, which
#Ø°only reallyŒ  reUða lower limit foroƒr-defineÁ 3s. ºÖ A
# l¶”initializÍ { p so tha¹pey will6 ° all messag ¤_
# atv ñ
#

CRITICAL = 50
FAT  Ã
ERROR = 40
JB = 3 3 =  ó
INFO = 20
DEBUG = 10
¨ a= 0

_7 To|Ð = {
    CRIT°ICAL: 'CRIT ñ ',
    ERROR: '  £WARNING: '
  pINFO: '  @DEBU(   ’NOTSET: '	 ñ',
}
_nameToLevel = {{ ‹ $: – • ‘'FATAL':   ¢ :²     0':  7ING =ING ¸  :  * · !:   ¶ ": 	  ¾ �
def get¿ `Name(lÉ !):Ç 1""" ñ)Return the textual or numeric representation of logging L ! ' 1'.
L !IfH  p is one3  \ ¢predefined: 5s (=
ð ã )V Pn youÏ   ° correspondŒ ¡string. If% Ahave� †associatu Pwith Ö@s us; 5add  Z 
 " K D ù  æ rB&eda@[value® (to‘is passedÁ 0in,• A ï œ?is Š - oªt  p Š Ñ l €no matchW/ 3or � 9 k  d 'Šb %s' %&
_ ù·ñ-# See Issues #22386, #27937 and #29220 for why it's this waym ¡result = _¯ To"C.get&% 3if ( ²is not None@ � p# 1 . (= ;V 0¤" " 
äÄ¾ ,? Ó ïA» # (' ÓÇT-i'ð ed when convertß3As to40 du€€ messageu0mat) .´á_acquireLock() @try:J�#unlikelyT àcause an excepyQ, but‘Ânever know..^  ? Ä[� 6] =k (  ÙÑ(   , ( vfinallyæt_releas· ó
if hasattr(sys, '_getframe'mbcurren  ˆ µambda: sys., ñ(3)
else: #pragma: no cover‡  ½H (\  Ç 7"""·{ p object|2áaller's stack $ .‰ D  zi     traise Es … 6 ýÛ òexc_info()[2].tb_u ðf_back

#
# _srcfileØ$usY@walkV (¯ À to check whò)en we've got the first
# caller stack frame, by skipping `s whos5 ñlename is that of this
# module's source. Ih órefore should contain� L D B #
#D ñ file.
#
# Ordinarily we wM `use __$ a__ forŠ Ã, but frozenR Ðs don't alway« 7hav: Aset,? ðsome reason (see Issue #21736). Thus, !geÛ !
#¡ ñfrom a handy code objecŠ   ñfunction defined #is£ �.
# (TherAÔno particular‘  à @pick“ðaddLevelName.)
#

_src	ù = os.path.normcase(.  __� Q__.co: ½ U)

# B ¢is only us¦ Dconj½ Ñwith sys._get, ()» ñ
To provide compatibility 1 àolder versions3µPython, sety ç
# to None if a  lánot available;éð value will prevenÎQfindCÒ ()@m be3æòd. You can also doJ °if you want„ Pavoid� °he overhead¶ UfetchM �r informa× , � [ when» &
#¹ `.
#if Ì åhasattr(sys, 'í …'):
#   ! =Ñ


def _checkû (l0):
. Òif isinstance S, int  # Qrv = 4 2 ‚elif str- 3) = P  1 "if/ ¯ @in _*!To} &  * praise VŽâError("UnknownA r: %r" % )~ 6  ‘ U [ž ]! Felsee a CType` … ™  anè �eger or a idÙ ?ingy  ßreturn rv

#- 7´ÐThread-relate„ ?ufff ; 	P_lockŸðto serialize accessÁ°shared data~ucturess‘This need6 €be an RLa @beca_ TñConfig() creates anÉ0figW ±
#Handlers, ñso might arbitrarK �  “s. Since 5 ,1updZ Tthe
#¾ i1 @ _Wb &it± qacquireM P. But=c² €uring,
#í  6 alˆ !y Sbeen H `d - soà €.
#The söñ argument applie7bLogger‘Manager.l @Dict¾´1= t"Aing.e#()Ö€  y(³1"""	Aã a-' Ñ    ˜À data.

    óThis should be released with _ ñ Lock().
    """ ‘if _lock:    û .acquire()

defC - C Rm ð the module-level X  I ãd by calling _ ‘ Ä  ‘ ð
# Prevent a held loggY r `from b   �a child  ( ð).

if not hasattr(os, 'register_at_fork'):  # Windows anF RiendsD
5 q_reinitF¢(instance)2 _@passV ìno-op when os.{ Q does¢ ²exist.
elseE ô# A collection of f sï$a Á Œ ” method (ÿ �Handler)ô@# to4 �Qed inÉ5`after óing.  The weakref avoids us keepingN £discarded g   Ralive=¤ 0_\ Tset =f €.WeakSet÷ >s"
o§  L 2tryR    “ 	F.addÏD lfinallH ¬ß
- ¹ Of c£ÿ 's((Rfor h¨ ”6 _/
Æ 5 .2 B é #‚A was� 0par`ebeforeË B   dB is ” pializedO un sed statñ 7 ç š  (€ =Â,…  R  _1in_Z"=_ Í 	oJ =Bo)


#- 72
# Yž recordd ;0
clxALogR^ s(objectpÊ%A ! µ  represent w be[ ± 2ed.á: Ðs are created9 àry time somethB !is»0ed.[yÚ±contain allŠqinformaí`pertin™!to �   J I mF 	>  as in´ain msgÕ²args, which³ qombinedF  us© °str(msg) % .  äÙ †  message fi�!of ÇÙ I  ø  also includes Ÿ  su€ s M2 �F²  ð source line wheð,re the logging call was made, and any exception
    informa R to b? 1ed. 1""" ódef __init__(self, name, level, path aineno,6  `   msg, args,‚ _x à, func=None, s  @**kw+ %):H Š  P ÅInitialize aî ðrecord with interest W á Ô  B N  ct = time. %()s  è .Ö ! =î 
 •msg = msg #
 ° The follow„ °statement a `s pass €of a dic×ary as a soleK @argu< ð, so that you can do somethK 8lik6 ö.debug("a %(a)d b %(b)s", {'a':1, 'b':2}÷ ö# Suggested by Stefan BehnelBP# Notp!att1out}�test forëø[0], we get a problem becaus­ 0durÃ Š ¶6 K ‘to see if^ °arg is presNuE+A'if ¶ =R:'. I7  ev.  bee   edF °e.g. 'Value 7%d'K  .u  ­ edÑ { fails g  š @n no÷ 0matÀ I ðis done. For exampl8éogger.warning(†  , 0) wouldÅK 	& · instead ofÅ (0'£ s  €use case,  Î  x‘, this shu 0notaz »\ ðIssue #21172: a requüq NPrelax0 is¯ §ance check\ °to hasattr(·4ð'__getitem__'). However¨ Àe docs on st6J @` still:mˆ sÑp a mappþ `object÷ ¸ $irñ à# Thus, while Premov7  MË ø, it does now looÝ  
Qcolleãss.abc.M„ `ratherÓ n,úqbefore,j1if À1len a) == 1 �  ?r ä ç  âqh Prgs =ñEs[0]aZ 
 
.@getLQName( { F  Bno =A
J M% =X! 6try ¬ O Cfile{ 0os.@ A.bas (   ‚ 7 ”module = 5 �splitextã.V )>Ñ (TypeError, B ‚Attribut X¬ › Þ š ¡"Unknown m¬ Ž' ð exc_info = exc_cinfo
  òself.exc_text = None ð# used to cache t �raceback / 
E `stack_] @ = s 
  ’lineno = 	 
 °funcName =  
 Êcreated = ct úmsecs = (ct - int(ct)) * 1000+ •relativeCM (ü ] Í- _startTimeB åif logThreads:Y  )E t 2 = 	 ÿ ing.get_ident()0 ñ 4 ‚current_ u().name> õ	else: # pragma: no cover! �  Î ~ 	# `if notì ÿ Multiprocessingx 0 Z ½ ‹ 
2 b'MainPu '-  mpU ys.modules_:('m¥ 'j�if mp isÓ  ç 
¹ .ð# Errors may occur 6 
W 2 haD ùfinished loading¢ O  ye‰@e.g.I öa custom import hook causes third-party codç I   #{›run when ë c callsX ç. See issue 82ù G   þ # for an exampll >try : Þ
¥4mp.¨ © 9   �except E oion: #¼
 4   Epass\{P`es and‘úattr(os, 'getpid')Á ¹ A = o27pidŽ“
‰ Ádef __repr__7n ùreturn '<LogRecord: %s, q"%s">'%; Õ!, ¡ �levelno,e  û    @pathþ) = Fmsg)˜ ¡getMessage_ š 5"""Y R¦  Åm. Uthis ¹ .V  … 0 ð after merging any4¥r-supplied~ áarguments withK† .$ ® 0msgð!trÓ .ñ  –   "if<;arg‹6   %# ` ¨ðmsg

#
#   Determine which classv us Ðen instantiatà Qlog râts.
#
_lñ–Factory =K 

45set]% "(f- ¨ö 1Set  †  beNd 
Š a£Œ µs:param @ 1: A#0ablË Ðich will be cñalled to instantiate
    a log record. 1""" Áglobal _logR qFactory  C = f  ›
def getL9 1():< a ¤Return the;  ¡ Çbe used when® ?ing¬ T rL — 
� EmakeŽ [(dict‹ uMake a $ ñ whose attributes are defined byµ  specified R qionary,Ž ðThis function isÒ õ ful for convertÐ g
 Pevent†¡eived overI €a socket6 "neO `(whichV s5 Gas a� h) intoÌ I ÷*ceãNrv =ár(None,  p"", 0,  $()   )X Prv.__ÿ ’__.update_ •rv


#- 7ð
#   Formatter class£%ndusq ;e_str_fr U= Str� i()
del 1


– ñ PercentStyle(obje{sdefaultW ñ = '%(message)s'# yasctime#  # bsearchF # E `validaŠ!_p1ôn = re.compile(r'%\(\w+\)[#0+ -]*(\*|\d+)?(\. ð)?[diouxefgcrsa%]',E 1I)
ª  óô__init__(self, fmf h  P._fmt)amt or  
M �usesTimeM ® H é<  O Q.find% .÷ _f) >= 0Q Q B"""V"eÖPinputªñmat, ensure it matches$ �correct s×Ï ž bif notÚ q 4ionx.š ®  ½ Ø  > ñraise ValueError("InF � P '%s' 	 ~ 6 % Q ,{ 
UH[0])§È5  Ä ú‰ a  %˜ éTJ 2tryñ Ü   
[ N(zM $ ¡except Key[ as eF &'Š IQfield„ƒfound in¾  : <E% e)œÄž«
H ]{¢}\s	!  ! ú! 'G@fmt_I”Ð^(.?[<>=^])?[–ò?#?0?(\d+|{\w+})?[,_]¢ ð)?[bcdefgnosx%]?$', re.I)
ð0    field_spec = re.compile(r'^(\d+|\w+)(\.\w+|\[[^]]+\])*$')

? ðdef _format(self, record):
   preturn  c._fmt./ "**+ —.__dict__S �validateT L C"""V ² the input Q á, ensure it is ãcorrect string( t …style"""¦ •s = set() 6tryÊ  Î bfor _,7`name, <ó, conversion in _str‚ter.parsÌ Ñ  S   &ifS 
q     bif notG­ µq.match(  � [   =   ñraise ValueError('inhz  ? p/expresÇ r: %r' %    N  z Ws.add… ?& (if!8and  × �in 'rsa'ü » w°  ± !if® �  v ”8fmtK ÏF‡ 1badR Tifier‚ B gexceptxZ as eè Y ›[@: %sŒeÓ N "no×sÇ�
class S$�TemplateS �(Percent sdefaultÝñ  = '${message}'õ yasctime"  " bsearchD " E Xq_init__S, fmt„  V» O  = 2 or
  L / dtpl = ä X ‘ÍrusesTim®p 1fmt!lf2 Y ÞØcind('$Ê p') >= 0™  µ    & € ’ú wpattern¿ . ‹ ¦ Ã ²m•0 —.finditer 
A°d = m.groupš K`if d[':d']9   † ' ¸ # "elD _braceE ( F  § P(0) =ŒA ]¡bare \'$\'c†allowed'o m7 ÿ Ü´ƒ4ÿ tpl.substitute(8ð	
BASIC_FORMAT = "%(level¦U)s:%(	 Àmessage)s"

ò#_STYLES = {
    '%': (PercentStyle, BASIC_FORMAT),' {' „StrForma) ã'{levelname}:{ ”message}'; $; ³ingTemplatei ('$A $B (${C ’}

class z Áter(object):š 1"""  ñ instances are used to convert a LogRecor jtext.
B Bs ne5 ‰know how6  isM àstructed. Theyk E ð responsible for*  w 9ingD ðto (usually) a str" ‘which canK ñ'be interpreted by either a human or an external system� V base2O €allows a— @mattq x Ðto be specifiÓ ñ	If none is supplied, theI s&ó-dependent default value, "%(Àe)s", "ÎQ", orB "ã ",e  ¥†'Th¹   › õinitialized withÆ 
:Pmakesò1 ofi  À€ledge ofÀ üñattributes - e.g.  	Ì ¡ mentionedM habove d 3 €fact tha oCr's � and arguJ �Apre-O fJ ÚHinto@ ¦ ±. CurrentlyŠ æ 1fulJ Ë (inI  –� describB:ê %(¬ )s 5Nam&€logger (  '�channel)n "%(õo@ „Numeric 1 "  i"Â(DEBUG, INFOW}  ú	WARNING, ERROR, CRITICAL~ 5ame€ OText{ "|  � ~ " "€  + ‚  	 „ "… JpathDTFull  oñsource file where&Nú  ôcall was issued (if available‚  T ‚ 0ile @ por· … ‘ l v%(modul9A   M  9 _ : „lineno)d¤ 2  SÜ   ~ numberã  Ë M C 
 ã 0unc—éQ FuncÛ  è M µ%(created)fN 1Timonnï S. p (time. (R> 	 breturnÙ& P%(asc6 ”  @ual   w ³ XmsecsLÈ Millisecond†Athe ² 1ion` A “relativeCü !d ô Fin mI s� Àe LogRecord ïwas created,
  ñrelative to the time	 ð logging module M oloadedK ñ(typically at application startup] )@ ¦%(thread)d˜ T ú ID (if available1 bName)s5 1 Oname3 wprocesse P e emessagb ò   The result of record.getM* ñ(), computed just asâ £ 
  aB “ is emittPA"""
7 ±converter =/`.local–  ödef __init__(self, fmt=None, date ð style='%', vali q=True):j  ›  w     ’Initializ `format‰ ò with specified  ’ strings.— A 
qeither H  L e, or aœ @defavð
as described above. AllowŠ ˜ ¶ dÿ    ¸  » q O  y  op�!al* õfmt argument. If Bis o›Å, you get anI ñ
ISO8601-like (or RFC 3339 )� aUse a Žp parameV1of ›0'{'ø 0'$'ƒay that} uwant to~ puse oneŒ"%-‹òting, :meth:`str. ”` (``{}``“  ( 5 orK a:class3 Óing.Template`Â /  in† r õÜ õ.. versionchanged:: 3.2d �   AddedS!``&``.* ‹#if/ænot in _STYLES¸ oðraise ValueError('Sñ  m…b&õ: %s' % ','.join(q  D  j ‚.keys())| &  k!._À $ =‘ [ †][0](fmt- %ifr
´ F .”&()C   š"=  b U._fmt¹   Î( 
 E 5_1_ñ = '%Y-%m-%d %H:%M:%S'N . Hmsec. us,%03d'S ÿCTimetÆ
rXaReturnŽ  Ÿ  Ã •ó ZALogR`3 ass  VGtextsPThis íÐod should be x �3rom; s() by a  sQwhichù  Ò ZstQmake Xf/ d o 0canl –overridde2in n1terU pprovide B any¨°fic requirevP, but” ð basic behaviour& ïFs: i¥(R ‚)% DÀ,
        itð is used with time.strf	 ñ
() to format the creation' 0 of #
  ñ record. Otherwise, an ISO8601-like (or RFC 3339 )^ … .N ðThe resulting str ñis returned. This func’ `uses aÊ år-configurableQ * Ÿto converÔ õto a tuple. By default,F  `.local
 $()>;*�change t™ ó or a particularé 5terL Âinstance, seŒ '™ Ðer' attributeZ aé §fhe samÞ Ásignature asž	¥ "or "gm¶ S. To ®  it› E all™ òQters, ðexample if you want0 P logg— U s§ ö be shown in GMT7á  inI! Fi–ter class5"""œ ¥ct = self.,(zž5ed), µif datefmt:  ­2s =é' F, ct? Oelse9 Š &__=
J  u "if· - Cmsec- 
e  -  ¢ 	[ . s % (s, õ   s´ 1 s
ñ 0defÁ€matExcep)(W V, ei)v `…C andk›´specified eI 2 inë  a|¥.{  Æ ¢ð   iCBmentB@just®s©  . õtraceback.print_j (ß ª ¡sio = io.S'IO( ¥tb = ei[2]_ ð# See issues #9427, #1553375. Comœ Red ou6now‚p#if get”A÷'fullstack', FalseQ#Ð - ð (tb.tb_frame.f_ï ¦, file=sioè Pei[0]ÀÀ[1], tb, NonC? ?·io.getvalueˆsio.clos  ›Ö[-1:] == "\n" É N F[:-1Mg €ATime²PCheckF L=c¾ L F\åÅN „  u_style.… )… bMessagž <¦ L    \P Súì !, Ù_R ª `method0€provided«�an extensú Bpoin}pealizedü ‘ "ofu „	xpe inputÿas aBaBÀurned from a£ call to
  õ2:func:`traceback.print_stack`, but with the last trailing newlineJ •removed.
 ñThe base implementation just returnsY õvalue passed in.B 5""" 1  š R_infoi õ
def format(self, record):9 E F* u “specified2 ‹ as textÁ O ð's attribute dicÈ €ary is uµ  < õ he operand to a€ 0str0¥ t '  C Â which yieldæ 2ed 6 cBeforeë F  “‹ õ, a couple of preparatory stepsŽ €are carrù Pout. ¦wmessageä !of%þ  ç …computedI  usË ALogRqR.getMG R(). I@ õ Ñ  /ê H ðtime (as determined byÎ «2 sTime(),ÿ  & iÖ  ×exr ½ `event ` �  reË Qexcep G ;Eion,‘  it% H Bted é  E; 0() ébappendz  �I·}M.$ # =y	:†  f ÐR.usesð Ò ¼M 0ascá " =. ¦ 0 ! , …datefmt)_ s2 º5 ' $if¥ 1excv
† q# CacheoDG±void conver³€it multi¦ · Á Ó p# (it's1 Æstant anywayŽ  % Pif no? æ.–  µ
–  ( Ê ! 
ï Ç'  l 
ú d þif s[-1:] != "\n"ƒ d! + y œ  }  a $ | î
_ ~ 1_1Sï(� t —‘ s

#
#  5sdefault”0teróðuse when no otherLkC
#
_7 Š 6 %=  ð ()

class Buffe8 cobjectÙXA qsuitabl%  ¤€a numberä s¡E  Dƒ__init__F Ûƒfmt=Nones  º2   ODRally á  µP × Ûpwill beÅŸFeachï”ndividualm p 3if – 
È $ =$ C Ðelse:
         ðself.linefmt = _defaultFormatter

& Qdef f pHeader(7 ±, records):%  ) 5""" ÁReturn the h6 p stringJ  ”specifiedI .< H rH ,""Œ OFootŒ f6 Œ =Vü 0 an3³result as a¬ Gv = vtif len(›F > 0Ÿ £r1 Prv + Å.×6 ˆ 1 3for¡3 in
 sT  ' X T` � )Y 2 Š ÕŠ orv

#- 7ñ
#   Filter classesŠŸfunctionsn ;
d q s(object?ó� pinstanc� àre used to per'Á arbitrary f¼  Wrof LogR”.-bLoggerÓ PHandl `can opÞ @ally\ ‘  u #toZ ²Ž Žódesired. The base( >ñ only allows events which areK ðbelow a certain pointY (l¯ ó hierarchy. For example, al I òinitialized with "A.B" will� € U Qd by 
 "rs* ,F  5 A.C", D.C.D ñ D" etc. but not  B !B.h  !IfE ‹  Ì Sempty»,’ � Pare pjdÒù e __L #__Osname=''" f-   I÷  ”  P 1 of‚ž¢, togetherK1itsÙ  H ’children,[uhave itÞì �ahrough[ ”u. If noI } 5is ÷ ow ry "nt w é ©?  =  S  Qlen =ö  )ú Nˆ LÄK²Determine i¥ ñ0 is€"beEdièUs Tru? m … should 6 À, or False onFwiseó ñIf deemed appropriate,RP 0mayM 2mod8win-placD 7"ifãn!ð= 0:
            Óreturn True
  ñ	elif self.name == record :'  . ? 2 e.find(P C, 0,^ Ÿlen) != 0U FFals• j (Y [T @len]¥ ò".")

class Filterer(object)a 1"""¾ rA base + ðfor loggers and handl ò
which allows them to shar• Ácommon code.V ^ Ádef __init__÷ ~  0$    Initialize^ ¡ list of f» sm ±be an empty h  < H 6 Q= []
�  ‡ 2add
ˆ ,\ � 1Add‰ “specified/  Š Dthis† ‚if not (‰ 2 inä ss  ¿ ³ s.append9 )½ oremoveÀ R0 Ã _from Å ± À @ »   	¿ § ¿ I y¶ÁãDetermine if am1 is—ðable by consulting“æ b "s.3 ™ °The default@  to, !ow. ƒ  Í!beZ ted; anyæ�can veto= M / 7the• ñ then dropped. R@Ùs a zero valuÇ N iÒ; °, else non-: Å ö.. versionchanged:: 3.2æ @   A–º Y �just call3s¦Jrv =í ÿfïò if hasattr(f, 'w'Í .   re£R = f.% ®) &  ø 
P  < 5 • # assumeÕ Á - will raisf9not[ …L d   þ 
W {   UbreakL rÖ rv

#- 7b
#   H`~etŸfunctionso ;%
_Íð = weakref.WeakV§!Dit °ary()  #map2  ûZ sM L© h ¡@ddedT'"8 2be d^ reÔeb `order  þ0d

¬_. cRef(wrd-âah ³ reference á÷e internal cleanup9G À# This functðBion can be called during module teardown, when globals are
    # set to None. It M GalsoR ófrom another thread. So we need toL ðpre-emptively grab th% vcessary °nd check if# Ay'reƒ ,J ôto prevent race conditions and failuresí ðinterpreter shutò .K óacquire, release, handlers = _ sLock, _#  ( AListJ 3if / ƒ -  + !s:)  X* %() 6try  # …if wr in‘ 
  # X ¦.remove(wrP kfinallT • Ò()

def _addHï CRef(O )i 1"""� TAdd a… 0 to� Qðnal cleanup list usZòa weak referenceiO Tÿ 	û _†  X€.append(P Vref.r¥ � õ À )ý ù ¸ ú cclass 8 ›(Filtererö  € instancKÀispatch loggè sñspecific destina‰!.
?…The baseB ñ. Acts as a placeholder which definesj‰ L vTface.¿ sÝ opr  ï° use Formatì¾ Ato f I arecord€ °desired. Byx tault, n. E #s á 0ed;‘0thix "seŽ Ãp'raw' mÇ ge× dl’mined by p .  !isE*ed“ó_init__(self, level=NOTSET¢ ùM  “Initializ1ô   -xiö`y sett´ ¬  Ú Ø K  ;" Ô0to ³y«  & } >(._¸ ‰ ,  Æ �._name =Ál  ß  iíLí ( B ³ F  # Ÿ ´ 7 �  É NU (for±%on
m  ¤    p.create K ã  ¶1getå ¶¨qreturn : !  3 s3  , #9 &  l 	*  'if]  œñ l (   5del&s[” ]” &  ! =– 	 !if " /  x [Ê 1] =˜ < • 8 ™   > Ä = property(Z,ÃC)D� · @À   """
     ò:   Acquire a thread lock for serializing access to the underlying I/O.
   B"""

 q  self.L =Z µing.RLock()& ð
_register_at_fork_reinit_: (D !)
- Kdef $  :  v  . r .) D aï < º  ê 3I/O¾ ë &ifî � 
“ x ‹ release‹ 	R# u‹ 6x ‹ �setLevelŒ 0, l )Ë 1Set� @logg, ò of this handler. D ÿ	 must be an int or a strHÁ | ’ = _check– d ¯ cformat­ orecord® F* ± ¢specified 2 .Y §@If aóòmatter is set, use it. Otherwise  vdefault5 † : " omoduleé 1È 6terk � Rfmt =S" ` Oelse/ _“ ò 5ter2 ²return fmt.O (Q?emiO�Do whatev&at takeËactually logm(t uT0pversions€intendedeöbe implemented by subclasses and soß !ai V NotI5 OErrohr2 /  ('	µƒ 'p  ¢ R'by H° 'h¹‘ConditionW—  VÅXAEmisTódepends on filters which may have been adu ` ¡ 8AWrapÒã$ e^ òeLa with äs¶ /e5 of9 ` Å! R� š efk ®   pïd = nN ‰ b%rvBû óºZif rvHÄ 're£ 2 :try,   0  š]   !fi»7 g r	2 rv— ð5setÎ4?fmtê˜ã ÇŠ•<À   """
     ð   self.formatter = fmt

    def flush($ !):   5""" òEnsure all logging output has beenD 2ed.V  A ðThis version does noth< õand is intended to be implemented by| µsubclasses. œ Bpassu  Ë _closeË 	ñ	Tidy up any resources usu Ï the handlerÊ xremoves+ � from anÒ ´rnal map ofK %s,º _^ €s, which} 4for/ õ lookup by name. SH ‚should e™`that tp²gets called– ²overridden )D omethodW0#geS ñe module data lock, as we're updatÑö shared structure¬Ö_acquireLock(} @try:&�#unlikelyPraiseIöexception, but you never know..^  C "ifà_. ] Ë. 5in tÝ 7   6del [7 ]%zfinally; t_releasÔ -  ~ÝQError„�, recordWHj  e0 s‘occur durX�n emit()Ó’À !be% ø‹ rW )enS1 is±   €encounte¼t A If —E“s´Vfalse×° s 8ñsilently ignored. iŽ  at@ 0mos   waï�   fc�system - -  £ Î 0illH0 ca‘Dbout@%inH  Ç©F ,° y 5 Bmoreª esl in applicaqN bPYou cmP, how… ÖRplacesÕwith a customÄ!if¶FwishL 3Theîw? ë`proces‡0is ÔPed inØìJ i¢õys.stderr:  # see issue 13807, ÷t, v, tb = sys.exc_info¯& r   0 f Ó.write('--- L&Ûv ---\n'ü 8   õtraceback.print_F(‘ q, None,– f F ‚ C©ostack:x `# Walk & P framÏc untilÞ [$ofñì º   @# so1to ¿ P  { Ïvcontext± 2   k �= tb.tb_ 	‹ $ qwhile ( Ð°os.path.dirä À.f_code.co_fprame) ==N À              á__path__[0]):
  �frame =  }.f_back) "if  C Ptrace8 Ñ.print_stack(Q ý, file=sys.stderr)\ OelseX ñ# couldn't find the right b “ ý, for some reasona  ñ � ñ.write('Logged from¤ ÿ %s, line %s\n' % (J  N 	 precord.è cname,   L >no)ñ ý$# Issue 18671: output logging message and argumentsŠ ?try4é MQ }: %r\n'J 	Ì  $'Az :Ø Omsg,F N 	 F Oargs ñexcept RecursionError:  # See i8_36272‚ ]raise T E[ ?ion9¡Unable to ×žU€ - possiV pformattòeä `.\nUsed N wQ abov© Fhelp,Y R 
©5#OS‚ý#pragma: no coverg@passê5# s«I5971) ~finallyƒÑdel t, v, tb
3 ÷def __repr__(selfÁÀlevel = getL AName$ . Ë ñreturn '<%s (%s)>Ù N Ð.__class__.__¹C__, > 
 ó  StreamHandler( † 1"""¦ 2A h   4 awhich dsÔôðs, appropriately¹ "edPato a st P. Notsat this] Âdoes not clo-0 2, a$ÿ@out wÑ may be used.¹  Á 	 àterminator = '# Cinit,l S=None ð I     �Initializ¼ e.Ñ! fF " iÊ ³specified, ¼ 0err ª  8 e ‰7.__ž óic  ¬ 
ma' =o ð  f ! ‹¼  Qflushfþ F!  esÅæ k [ Á g †acquire(¹ Ô Ê Celf.’  qhasattr†  1, "š ð "):
             ðself.stream.flush()
   …finally:   1 ¡release()
 �def emit( –, record)8 1"""(  @ cEmit a$ .@   ðIf a formatter is specified, it sused to& E theG  B   T  1 Àthen written9  2 ì õ with a trailing newline.  If¬ Âexception in›  ”s present™  •ted using@ ötraceback.print_P ¢and appendÓ š ‚ Ü ª M ôhas an 'encoding' attributeˆ !Ðdetermine howù  doR K `output x  ®+trÿ`msg = è.ö (î?  ‡» )  	! ð# issue 35046: merg	2wo - .¶Ées into one.> $ (’ +’ ö FatorÅ�  åÞ�ô RecursionError:  # SeeŸ I6272{ Uraise D E(ów ahandle] +@  5AsetS|:Ù :@SetsÇ 3 HY 3r's3Ï7q value,m  � #ifH—differentbReturn` 3oldT A, ifs ™   was chang•for Non` fwasn't°N#ifX  �DX 
7Šresult =^ Oelse( J í  ñ  `acquir«   Ø  0 '     ¯  Ø¶	n .: 2    rr î  �__repr__
Àlevel = getL AName$ . ñBname(   # ¸ 0, ' V', ''0 à#  bpo-36015: ! p can ben5intå  =Â( B !if7 
ž # u += ' 'B ó ò'<%s %s(%s)>' % ¤ À__class__.__= 1__,W #, á !

! S Fileý(.r"A |"r 8 Qwhich#esD ³@loggÈsG¢disk filesÈR  Cinit ,&  ® Ä, mode='a', ¢=ð, delay=False, efs ¯  a    Op­&he e  30useÄa¨Ö Ë  Å ¯  F R 1# Imð #27493: add supóport for Path objects to be passed in
  ôfilename = os.fspath( )' ð#keep the absolutL ð	th, otherwise derived cle ös which use thisJ ñmay come a cropper when] ö	current directory change? ©self.baseF¹  · ?.ab¿ 6 0modç   Ž  ´encoding =  ! Prrors 	 
 �delay =   "if :  qÃ#We don't opó ð
stream, but we still need³@call
E ð Handler constru) -  set level,ÿùmatter, lock etc.D C  .__init__(	ï ¬   .ž u = NoneB JelseÙ SÆ V !, J _ò A())
F ’def closey M 1"""!  ‚ C! s  ˆ Ä ' _ †acquire(Ä 6tryW  O    "ifŸ a 
1      9     ~ Wflush|    kfinallŒ    { ( =‰  !  o 2 	–'   ²if hasattr(1 1, "t/")è  5   . ., Õ Í ñ# Issue #19523: º¡unconditio= toØ `# prevô3a hØBleakT} is set; 
t®  ®  # p.releas/W  �¡  hO³¦ ‡ ,Q with¨P(origñ ) hE andT¾RReturò`result}v�  †{ r1 C ¢ 	a p ,m =' Ï,V  Z  eÎ*  žAemit��, recordcEmit a$ .Þ a !IfÖ r was no÷ped beca'á' qspecifiŸ ; ³ ç,8‘it beforeg = šQsuper~0's ¿ qL
ò ] F
=» ˜\
~ o 
.
YT_reprdi ¬p = getL·2Nam. k þñ'<%s %s (%s)>' % q ð.__class__.__nameó,__, self.baseFilename, level)


class _StderrHandler(Stream ¡):
    """ RThis 6 ©is like a 1 Á using sys.sW ñ, but always usesI ‡whatever)  [ ñurrently set to rather than the value ofE e R at hÀ ñ construction time.- Ã Ðdef __init__(s=NOTSETñ õ   ¡Initialize‡ l Z    ^   ;.f !)
� ‘@property  “ sv‘ ƒ greturn%ü


_defaultLastResort =Ä©WARNING)
l% : O

#- 7Â
#   Manager&¡es and fun�so ;ÀóPlaceHolder(objectB•! € instanc™  re�2d i[¹ 0logÀ �hierarchy‡Atake« „pp ò of nodes for which no = ùs have been defined. <M �intendedC   @rnal” Q only:°not as partr  ’ublic APIæ  Fsa�  œ-   ÔAwithÙ“specifiedÊ 0 beÏra childƒ 1is hs…  P \  Y.~ ƒMap = { � ’ : None }
 ¶ aappendü,' ´ ?Add¨ ?as ¥ $ifn  h"in-· ü Û   
Ó [Ï 1] =Ð 1

#ÿ“Determine-!to×Cwhen‚@tiatZm `s.
#

AsetL�Cœ (k `S"heb žbÉ_  aÈ 2 ashould‚�P) suc
#at„ 3� argument¤‘required,¡"thz") ` b call Ì )w Ê 1if á 3 !=* si` q 1subE,)  ™  òraise TypeError("XØPderivf1romBing.™ ": Ø C  +  0.__"__¿ ‚global _d ©×  " =; ÖgÖ½ Ræ Ýê Ôu E +Ð_loggerClass
ñ
class Manager(object):
    """ ôThere is [under normal circumstances] just oneL 2 in q, whichK ñholds the hierarchy of loggers.$ w ódef __init__(self, rootnode¡ ¥   ¡Initializec mÕ Q with  ?  @  t  … x Œ �  K …    | .< =‚ ª  ºdisable = 0 úemittedNoHandlerWarning = False- Ž ŸDict = {} C®^= Non= ãRecordFactory % F ‘@property  Y² XNqreturn ò _$ 
5 @ q.setter I h, valuž	I ò  = _checkLevel(, ^  J AgetL• X, namK ’SGet a6ß‘specified; ‘ (channel €), creat}!it¾  ¾ñif it doesn't yet exist. This9  øõ a dot-separated0EicalK  ¯ ó, such as "a", "a.b ò .c" or similar.ö  ‚ ÐIf a PlaceHol^� aed forµÖ Q[i.e. /€ 0didÄ ? 0 bu!Pchildì ä €id], repk  õ %edI X ± and fix upn rparent/S `refereøÜP poin to- K m  ô’er to now*   €v$rvÃ '  ”if not isZ(t'trÃ * ôraise TypeError('A- 2   m«Õbe a string')² Ö_acquireLock( 2try ^    Œ Same i-5 ¼
(  , Ê 
& [‰ ]w  '    �ß 8rv,å  0   }ph = rvL   { P.| AGor _ )Iî  :  4rv.H=h Þ — / p_fixupC¤¯ren(ph, rv… 0 Pˆ,s(+ Oelse{ &ü ™ J üÖø + ô Ä kfinallf|_releasŽ¦"rvG =s=áò 0, k.6CÀ     Set theò4 class to be used when instantiating a logger with this Manager.
   B"""

 a  if kW A!= L: :  $ Áif not issub€ (/ ,- ).  2 óraise TypeError("‘  G Áderived from© Cing.w  •  G  +¬ ¥.__name__)« Rself.i CÏ =+ 
" ð	def setLogRecordFactory(6 2, f Ë !tSet the& ! rf ƒ…  Ñ ‹
 Ž  Ä 	¤ $ =z Ë Ó_fixupParentsÅ aý Å ¡Ensure thaÍ Ñre are eitherˆðers or placehold 1allú 5wayÁ ¹ “specified?    qroot of9 “ ¯ hierarchy‚ Ë3 = Á . o @i =  ¦.rfind("."ó•rv = None. ñwhile (i > 0) and»*rv¤csubstrY E[:i]@  ¢3if !  °4in –zgerDictL  2 ! [? P] = PNHN(ß ¿  ; NelseQ \obj =x W 	­  D Rif isoce(obj› 0 7=objI �  3 Passer
g ß 
×  4   ¯obj.appendÿ Þ¦, 0, i - 1R ‚ÇÈ | sÎ h!.p\ = rv9ƒChildren:4ph,}>c= ä21 phW“connectedœ 4  len = len( (°for c in phFÇgerMap.keys(Ø  ˜@#Theù�means ...  ïc7…p.startsH6(nmh  B 9if ,  [:Œ blen] !²×šB   Z    Ã±clear_cacheÁÜ ·C' †+   Ñ”s(  Õ‚ DCallXÑlevel changesÙ6madm m 8 Ö_acquireLock(+ u f  p ­  u m.value�
ÐÀlogger, Loggker):
  õlogger._cache.clear()& Ÿself.root! ÿ_releaseLock()

#- 7a
#   L  ÿ classes and functionsn ;
d q u(Filter31"""óInstances of the/   ð represent a single `áing channel. AH " ‘" indicatä P areab pan appl òion. Exactly how anJ  , À" is defined Qup to  ? ô developer. SinceC $ pcan hav �y number‰ \reas,Î s© ± identified‘ öby a unique string. AÅ  3 0as h ðbe nested (e.g. î 1reaF ðof "input procesOð" might include sub-þ òs "read CSV files", J 3XLS >+ ƒGnumeric `). To ñr for this natural¤ Aing,N È@ nam« re organizyRnto a ðpace hierarchy where l�5L ñseparated by periods, much likeÀöJava or Python packaged A. SoM !in0 i¡Ô given above,~7 F#beb"ó qe upperN ª ,1‡@.csvW Hxls" 6gnuF  —@ !s.L Tü  Qôo arbitrary limit¦Pdepthh  29 uÐdef __init__(“,É ,Pw=NOTSETÜ8  ë’InitializO wser withªÇ Pan opT"alU º  A M .Ž / ! =¢ Æ  E  µ .  = _checkL( A 0parCj= NoneC û propagate = Tru Úhandlers = []9 û disabled = Fals9 þa = {}
8  r2set¤  ½ le1Set} ^ íÖ  ÏH   tZp must ba@ intÜa(r | 9BmanaÍ ÇÕ  • ‚ Ò SdebugAðmsg, *args, **kw
 Þ °Log 'msg % & '>òseverity 'DEBUG'.: l ÁTo pass exceV€ informabB, usŒpkeywordU  umò@exc_* a ˆ N àa true value, )j [Ù Ã"Houston, weÄÐ %s", "thornyó	 problem", exc_info=1)
  5""" õif self.isEnabledFor(DEBUG):%  8 & B_log ð, msg, args, **kw
 !)
3 @def t (4 ) *  * ] Ž ¡Log 'msg %Z ò' with severity 'INFO'.f  • pTo passæ aeptionx 0rma ð, use the keywordT Pument0 ` ´  N ÷a true value, e.gj qlogger.× ÿ"Houston, we have a %s", "interesting„- ë ƒ  YX ‚warning…?WARNINGˆjÝ ‹�bit of aˆ-î ‹  Ž‹Û  s.	 p("The ' ö	' method is deprecated, Ì Ä"ô0 óing' instead", D3 BionW6, 2 «r  3Û²Z_errorÍ Ý_ERRORVjÙ T_majorQ-ç O M2excï… ñ TrÆ›q´Convenience_@for î Ä1an ‘ ( 6w f.?ìOOM� 	 `�criticalÞ  Ï @�CRITICALfjß i�disasterÇÀ self.isEnab÷ledFor(CRITICAL):
  •self._log! ð, msg, args, **kw
 !)
6 òfatal = critical @def B  L s, levelE *< F | 1"""R  ‹ ¡Log 'msg %v ñ' with the integer severity '^ "'.y  = ð
To pass exception informa Q, useJ pkeyworda Pument0 _* m ‹ ÷a true value, e.gj plogger.ê † õ, "We have a %s", "mysterious problem",j 5=1)h ÿ óif not isinstance(_ ;int®”if raiseEí sR   ! Á TypeError("N   must be a!V"�  8 OelseN  Ueturn¸ 0if æs.isEnab[a ª & X Æ ?°findCaller(: q, stack¡c=False M '=1m JAFindî> ‘ frame of c^ ð  so that we cany esourceè ðfile name, line number and func\ .2 ˆ f#aurrent„ (jð#On some versions  ÙIronPython, c8 ! r€•s None ifo #4 ¡ isn't runÌP -X:Fú s� pif f isï J 
è ¯ …f.f_backa Qorig_   whfbŽO > 1P  c5 E-= 1Y fG † ) ð rv = "(unknown ¦h)", 0,     6= ¿ ÷hasattr(f, "f_code"N ¦ Pco =   >    p  ô = os.path.normcase(co.co_" ñ 8  2ile; `= _src) 
ï  ) pŠ    vcontinu¥  sÄ=Ö	¬  ªDj  siæ ·io.StringIO¤ X   Àsio.write('SK   (most recA Qª last):\n'ñ  > PtraceSq.print_ý w û N=sio3 Í  y 1get†˜   Û  ÷ Î[-1] == '\n'â  „ Q ‰nfo[:-1]$# {o.closei kÖ, Bno, ò Õ!, i 
Ñ FbreaOÈ6 rvô£makeRecordôK Up, fn, lg Ž1exc,Æ !  ˜=ñð , extra=None, sÓinfo=None):
  5""" ó2A factory method which can be overridden in subclasses to create
T õ	 specialized LogRecords.i u trv = _l& F‚ ð(name, level, fn, lno, msg, args, exc_Ñ u, func,\ „ 	 s* )$ ðif extra is not  : pfor keyê * 
  " Cif (" õ["message", "asctime"]) or# ·rv.__dict__} H  ðraise KeyError("Attempt^ z€write %r’ S0" %¦ Ù M o r[key] =ñ  ¡return rv
 1def‰U(self|s D ‚3tra Qstack�k=False� Í'=1 ALow-" ô logging routine†c6s aRñ  and then callsÅ  0all ñ handlers of thisZ  erS & rž�8! =!_ ºif _srcfileó#IronPython doesn't track  ñframes, so findCaller úEs anb  Å ñ#exception on some versionÐ k @. Weg �p it here_ JthatO 1 Ñ1use6ingû  x :tryÖ   �l  ).Ê (ç!,  Ñ
Ÿ× a Valueëð: # pragma: no cî	» � Ð = "(unknown ‡h)", 0, 0unc;)ÝOelsek 	è g "[š
Gæif isinstance(¾TBaseEë ö   * v = (typ; )‚j 
 0.__r eb�_z1lifïˆ Htupl |   € Dsys. (\ A1 = BmakeñH.Éë u 	 s êÊ,…† } ×(’ )×  $ #,  Ÿ‡ ”3 0rs 2theÕCfiedA ._  « T]4qis used7 uunpickl3 s; 0eiv ö rom a socket, a¾Ówell as thoseZ@d loä y.þ3ger+`filter-¦is appliedÏð"""
        if (ònot self.disabled) and ÷filter(record):
  4 ÄcallHandlers' 
' sdef add (. g, hdlrG 1""",  V òAdd the specified hX õ to this logger.2 > å_acquireLock()# :tryµ 0if ð (‰ 2 inæ i sš  ’    · .  q.append= d kfinallh t_releas� ‘  oremoveR/ Ofrom:
@Ò )3hass'‡ãhSee ifñ „ has any*Òs configured.† ° öLoop through all/ 9forP  ø°its parents!1the½ I �ñ hierarchy. Return Truœ a[ ö was found, else False»pStop seF Ping u  eY ³ whenever aöQ with¦"propagate<Ðattribute set0czero iƒ ñ  - that will beF Elast[ Ehichå ²is checked äe existence ofâ sÍ ¥1c =TO Brv =þ  zwhile cYEif ci
  {G  gF     Ybreak ä%c.*P 6  §(  Ð "c.e rö"rvd Ø	 5-, 5(cPass a$  ² ˜ 4Gvantdt ÅHIt ºõoutput a one-off error“ pmessage¾ Ïsys.stderr. ÜJ Yä ÜJ ä4oseä `s are ³ ( E  Ÿ ÷ ÆX ÌE = 0 Æ 2FÏ	O  5+ 1W  Š   #if±.levelno >=? ª 5  { E�   Àpropagate:
   €c = None °#break out
  Yelse:    9 vc.paren/ ú if (found == 0)6 Úif lastResort  Q ÷if record.levelno >=1  7  ; W ‚.handle(J )¶  elc ñaiseExceptions and not self.manager.emittedNoHN ŽrWarning} òsys.stderr.write("No ƒ Ârs could be ¹for logger"˜  Â  Ò" \"%s\"\n" %ž JnameÒ  6 ¹ � = True
w ðdef getEffectiveLn(G °&""¤ ”Get the e2  ¡ Ð CthisÕ ._  ” ×Loop through # nBits 7As inZ ± hierarchy,©  J qlookingl ¡a non-zeror   ‰ r. ReturK `first Ñu.J Ò p =X" Qwhile[ *erë º¹…r� X % W Ç  ÷# =^ 7? bNOTSETG ¦ÁisEnabledFor¡,z¨)Isle< ;(! ' %'?› !ifA.dist 
¢ CFalsG × ?try'  M�._cache[t ]s e{‹ KeyErrohÚ_acquireLock(ëk  € ´ ¸¼ 9 Ö
�  2   4is_
« 2 = ç  ,   " R ( 0    ² 5™
: 
 kfinallŒ + _releasQÒ» xƒgetChildtosuffixu a×ò
 which is a descendant to˜7one$T:+ ðconvenience method, suc:"at–  Ì  ]�ing.getL�p('abc') ¯ ¦'def.ghi')6 i–e same as N .B  ÁIt's useful,MÂexample, wheuÏ0is «ud usingù __ ð__ rather than a literal strÞ / œ@root_±
à¨Á = '.'.join(Áð .name, suffix))#
  ñreturn self.manager.getLogger(suffix)
/ Ðdef __repr__(1 !):  J €level = ;   AName$  M  EffectiveL 5())7 ~ ò'<%s %s (%s)>' % ; ò__class__.__name__,©   !, t œ Nducež ñ# In general, only the root lê ð will not be accessible via its r .· ¬# However,H 1's ´ A has9 1own5™ v methodJ !if3„ õ  j A) is�  fe iÕimport pickle‘   Sraise  .P  £ingError('å 3canã @ -d'‹ ÁŽ ,… � R,)


Ø 4Roo$1"""Ž AVÇ óthat different to any other€�, except + I áit must have a' 2ingõ@ andz re)Ðñone instance of it inI  ê’hierarchyz­ ÒCinit4Ut+  b Initialize} “ qer with  *  "U"g  4 @ 19.__r 2 z 
k6h T 6«B)

_åC32 = m · ãAdapter(objectR ¢ BAn a  4 fo˜Às which makeÑp easierÃñspecify contextualoáinformation in% ¸boutput r , €}Sextra¢  ô  4     ˆ¶ ‰*!er#Âa dict-like ô Ï }  J ‡providesÅ  Á Q. Thi õ
structor signature allowsK ¡easy stackï f�sòs, if so desired.è „ ”You can e&ðly pass keyword arguments as shR inr|  foŒ  x †example:_ ‘ R(some,&÷ (p1=v1, p2="v2"¥{ ‘.i! =Ý%er‡  ¹1 =  ‡ pdef proUËß, msg, kwargsäP0  ç g  Ý qmessageÛ 4 edt%to“  = @call·oinsertñŽižH ’manipulatûŠ  itô ’ Ás or both. R`H  �=  ÅÐ modified (orù)ª ÷ suit your needs3Nb@lly, 2'llÓ &  8 poverridª 0is vÀ in a
      ó$  LoggerAdapter subclass for your specific needs.
  5""" ñkwargs["extra"] = self. % Âreturn msg, 1 
 # ò Boilerplate convenience methods&   def debug(g ,S *ƒ B, **\ !):+  ­ ª PDelegb aB ñ
 call to the underlying lî  u ¯.log(DEBUG Ü  ª Oinfo© ) n B © *OINFO¨ owarninT+D ­ *oWARNINX l X * Pings.	 p("The ' '\ö is deprecated, Ù?#us0 óing' instead", D3 BionW<E, 2)w' g  Uö£$_errorÍ Î!n C y*_ERROR'Ÿexception¯  @exc_­_=TrueŒ%n V Â =“ 	 — €�criticalÔ  QE Ã *�CRITICALˆ � c, level0 ?log° @, afeaddingÞ¡contextualŸ0rmaÃ from this aR 0OanceL"if+ÑisEnabledFor(Ñ Á †AÛ_‡process( ~ 4   ©0ger X )	‹  C b‘ „"Isð 2" eÇ @È ! ' %'?;>  g  £  ª 	€ < )� @setLï© å1SetÖÁ"ed)à on the underlãying logger.
  5""" Sself.!  setLevel(l !)
% òdef getEffective"  7 !):!  U R ”Get the e2  O A for ounderl™ preturn i   ‡ ¤ ÀhasHandlers(5 ž oSee if‰ £ has any hI 3š  } ” A_log� ,ð, msg, args, exc_info=None 3tra Rstack _FalseÌ BLow-\ólog implementation, proxied to allow nestedŸ adaptersä Í ò ö| ,  à 	 ì 	 ø 	 
B  ex 
  # w‘@propertyt  ½qmanagerˆIÆ * ø@ .setterO h, valuŸ z¯A " =& W   Oname�  ' C  Õ Œ__repr__9 Ê( =8» °  =ÏÆNz 2 .\ )9 ,ñ'<%s %s (%s)>' % ~ Ð.__class__.__¦ 3__,e. üñ )

root = RootL“¢(WARNING)
 ."    FMÉ, _)

#- 7±
# ConfigurE Ù e`d funcZss ;
ÏRbasic{ P(**kw6¬[1Do & ) c¢ V Ç ìrsystem.*EThis¸   does noth(  j­p alreadþsr ¡ed, unless@pkeywordÏuxÐ *force* is s¢o ``True``e It aÂ ñ	venience method intended&�use by sÒ� scriptsŠ àto do one-shotI ­o×
upackageðe default behaviour� óto create a StreamGñ which writes to� ±sys.stderr,ä a±  ma"0 usY ûÃBASIC_FORMAT! ` striný!ndJ 1addFl § ; ‘º àA number of op‚<al |ð	s may be specified, whicñh can alter
    the default behaviour.
 ñ)filename  Specifies that a FileHandler be created, usingU s3 dK  k  U €, ratherR £n a StreamT .5  + ;mod€ !e  qto openl  ) P, if 	 ² ?is � (( F Uis un* D, it“s to 'a')Œ PormatÃ 1Useu 6 " f 0strý  foÔ 2e h? `datefm@ ?   S/timeI 2 Pstylep S If a  d ß  u ’ i² – y¢ DB  {type ofJ ð	(possible values '%', '{ 0$',. H "%-ð òting, :meth:`str. Á` and :class Ûing.Template`L -n%nQlevel¶ 0SetÌ Ò root logger  !to ñ 2ied = M A osi Þ�initializ?e‚[ Note¯ ýñ
this argument is incompatFdwith 'ˆ0' -—KbothK âare present, '” 'N bgnoredÈ D s ê !, „ `should€an iteraÇ¤of already–z T Á, which willE @dded o* T. AnyÏM i�ClistO Õdoes not have¹Äter assignedr K   € L 6 [ j ²is function!Eforc&€keyword L2ð as true, any exis¾Ô sŠ [ttach| ¸qremovedé@closù\befor0Pcarry1out­�configuraÂ  • ¢ b´  o� msô PencodV 	P toge=  ƒa.6 qis passß i  zpâB, caÙ it!@be u@ 'wh€, iG ŸÉ`errors‘&Ifš´ “ É±  Fµ ± =j1extg.d Î© O3¢ ” ó`backslashreplace`S U òqt you cÁ[ 0y aÞ4eam¸M G(Q,– )o @ !  Â,  ðmode in. Howeverñ6, it should be
    remembered that StreamHandler does not close its s! p (sinceP 4mayM ôusing sys.stdout or ôerr), whereas Filed [ s\ ˜ £when the h‹ "is… 1d.
! ñ.. versionchanged:: 3.2 a   AddÓ ÿe ``style`` parameterC 
3C † sF ð A ``ValueError`` i.Äw thrown forL ÷incompatible arguments (e.g. ``_ pspecifi½ Äogether withI Ò``filename``/ pmode``,m    W I t^ % ùH ’ s/``W
8y šOforcš9C ðencoding`` and ``eŒ	©!s.9 1""" # ¤óead safety in case someone mistakenly calls9 óbasicConfig() from multipleQ * á_acquireLock()= Atry:	  vø ñ  = kwargs.pop(' ‚', False4  + à .  h', Non0 ÿ .  ö', 'backslashreplace'j  if²&ce§  € Pfor h Troot.:[:]'  + " TremovÝ&(h_  "   !h.ò  qif len(? a j) == 0d  
Ý " "\    ž ,
U % "Å"ê –O"n @  D fraise 2("'S 'I 'I '� W2be ” B  
"Á º"\;els» Q ?if Û  ?or Ú 2?or Ù @ñ$ '¸'é $ifsÓo, , 0 M4    W", 'a0 /    8”�if 'b'in F #  H ¹! =Ñ+   8h =;(Î ,Z ,4 À            Ô    encoding=	 ’, errors=  )
&  ]else:  " òstream = kwargs.pop(" ~", NoneN  8 Qh = S< ‚Handler(5 . h  ys = [h]…  df z datefmt{ ]styleª šyle", '%'z 2if 0 înot in _STYLESÀraise ValueEE1('Sh ùmust be one of: %s' % ','.join(È   r Š.keys())Ÿ ù Pformaø 7 [¾ K][1]9 amt = F. �ter(fs, d 0 , @or hý ƒþ Rif h.| ater isó(  Þ Wh.setz *mto  $ „root.addh# [levelÃ ñ1if   —  Ç Ž› s @setL\ (1 
u #ifÝ<  œc = ', ×Œ  (³ß -ô	Unrecognised argument(s)1 J � vfinally… ÿ_releaseLock()

#- 7ò
# Utility functions at moduleW�.
# Basic— ð delegate everything to the b� logger.¦ ;‘
def getL] p(name=Nt&1"""hƒReturn a… Q withš  specified ; p, creatº ñit if necessary.
H QIf no+  S= 2, ra í  ô…  P "ot> o+�instance· ’, str) an‹ 1 ==7.˜ Í  L h  Q‘  ÿ P.manad
!)
&@crit«p(msg, *­B, **±)c « pLog a mü "ge.s× Ñ'CRITICAL' onE Ž ZA. If î¤ 0has6D , 0  b9€Config())ãadd a console . | aH Âpre-defined r. µ î n(Ž .?  s)H0Ý  @	v > / `

fataw( R-O._ERRORLA has² $nosLÀandler with ñ
a pre-defined
    format. 1""" ñif len(root.handlers) == 0:   8 ÑbasicConfig() / ðerror(msg, *args, **kw
 ù)

def exception% ×exc_info=True4 p ˜ ðLog a message with severity 'ERROR' on the � ‚ logger,* y ­  m  ù qion. If4 / „ has no ù ), ë ò is called to adF”a console7 t aok0	 CywarningAf2WARNING4 7	  P ~<
=:	C  s.	 p("The ' `' func¹ Âdeprecated, 4 3"us. óing' instead", D/ BionW½2, 26 \ Í³  ¬³ 	OINFOê¸4Odebu"/ODEBU ¹7¿log(level, Ä^p'msg % â'õ wintegerŸV � 8 ƒkL ~é(*PrdisableTª=CRITICAL)GD% A all³1ingcNs ofBšand below´ ñ“.manager.w ð = level
    root.÷#manager._clear_cache()

def shutdown(handlerList=_ ¡):
    """ ÀPerform any O ñ!nup actions in the logging system (e.g. flushingE ¡buffers).
 ðShould be called at applicaY a exit.* † `for wrq ˆreversedÀ 3[:]¶  º ð#errors might occur, A ðexample, if files ar¾ Ackedn > àwe just ignoreá m1  raiseExcep£ Ås is not set; 2try< H   …h = wr()"   Jif h'   <     €h.acquirÁ   !h.je & oh.clos< eË P (OSE/q, Value LH   2# I`SwhichfË'usH 2  £# because hÁs have been ¡ Fd buI8   ò # references to� ¸°still arounA	d 9   #W   MpassA kfinallÓ6 yh.relea[S4: #< « yt¡, as we're�t/ †	u ;if f(! 	6 ñ#else, swallow

#Let's try ando  j � automatisNy onÀ..
import atƒ
 ¤.register(<”)

# NullÐq

class HX( MÉ0Thiý{A doeF "0. I· €intendedë0be S  Pavoidüû 4"Noz 4s cLf
 é ‘ñ
er XXX" one-off warning. ‚ iïï 1ant ãlibrary code, ßa Qntain  � ðlog events. If a¦ r™  of¤  I à � configun,,( œ LL �produced;s  "is: b ñeveloper simply need(±instantiateO a�`add it^  ÅPtop-lN Ï;er Ì ‚module oé zpackage¥ _áÓ(self, record :€"""Stub.–  3 Oemit1 ¡createLock7 `  w Â.lock = Noneo e Ó_at_fork_reinp 9 B
# W& ÛAtegr�3

_=cs_show c _  ñ(message, category,oÂname, lineno =¤   ‘   .I®Ament‡  ‘f s¡ðredirects to loggingò8, which will first
    check to see if the file parameter is None. If a ñis specified, itV P €delegateS  L óoriginal warnings implementation of show Á. Otherwise,P \ F calD s.format4 A and� A logÁ Ðresulting str Ato aO 3 s+ äger named "py. Á" with level& Áing.WARNING.D 1""" %if1not$:  XDif _S _á  N.  2 / ñ(message, category,u  ¸ ‚, lineno  )� Felse‹ 5s =~
:^  f X  § 0log9a= getL (?* 0if ê 1 –.handlers˜ N R.addH  T(Null )M F Só("%s", s)

def captureWc( )l °I)  …ø true, redirect _¼ t  >rpackageþ
F õFalse, ensure thatkA ared  edY U ¨0but etheir *adestinst Â oglobalYQ iã û  cŠ	 Ø*  . †AÌs  5   š's.! 8 = ü0 
œ� 	 =¡ h  q  �   Ú  c ð
# Copyright 2001-2019 by Vinay Sajip. All R$ ðs Reserved.
#
# PermissÐ@to uÑcopy, modify,£ diŽ buhB ofÃe ¦its
# docuâfor any purpos(  �Pout f¯ðs hereby granted,
# providl � ƒ`above � à ñnotice appear inüacopies‹  Ær
# bothÒ; @nd tÃ pø V ‘
# supporˆ	Ù  g ® Ì k!
#: beLd¤ pdvertis�ðor publicity pertai[ KdPion
#V  sj>½àc, written priW Ð ðD.
# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
# 9 xIMPLIEDA û"OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALLš ðBE LIABLE FOR ANY SPECIAL, INDIRECT OR õCONSEQUENTIAL DAMAGES OR
# ANY ð\WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
# IN AN ACTION OF CONTRACT, NEGLIGENCE OR O0 “ TORTIOUS1 `, ARISt POUT
#p  ORS RCONNET €WITH THEŠ „ qERFORMAX ðF THIS SOFTWARE.

"""
Configuration func	 ñ
s for the logging package ôPython. The core ð
is based on PEP 282 and commentsR preto in �p.lang.pO ,* ðinfluenced
by Apache's† ð'4j system.

Copyright (C) 2001-2019 Vinay Sajip. All R% ðs Reserved.

To use, simply 'importa  ç '… ‘log away!"
# Terrno i
 !  ”.handlers $re
 estruct y# ”threading ñtraceback

from socketË #r – T5 @TCPSå òr, StreamRequestH‰ ñ&


DEFAULT_LOGGING_CONFIG_PORT = 9030

RESET_ERROR = ó  .Eb q

#
#  ù`follow@code� "leåa© ‘ listener5¡on-the-flyC 9recz$of„.e _? Ahold< ü �object do ¦j  ;6 ò= None

def fileêð(fname, defaults=% ð, disable_existing_Èð ers=True):
    /  @ReadÊ±  Ê «"a o ÑParser-format‡ !.
M òThis can be called several times G �n applicŸ4, at`an endËrO  àability to sel!D ðvarious pre-canne�õPs (ifÐ I ðdeveloper provides a mechanism\ ppresent2 ` choic# Snd loachosenN 	!). GÁ# p(Ôif isinstance°' H.Raw_  œQcp = ãl Belse½ 	I F ();  1 ¤if hasattr‡ '£Wline'u  + 0cp. _j- G 
† . ) q $ö ters = _create_ B(cp) Ñ# critical se¯@  ²òing._acquireLock(… 6trys_clearEé#s(]  ž $#  1 adëpmselvesÿg â 3     ¿ ¿4ll_ @(cp,0matâ —  5 _*  X 1ers) 6 ˜A gfinallÜ  E dreleasð	_resolve(name):
    """Rò esolve a dotted name to a global object."""
     = ±.split('.') Sused  Rpop(0 @foun °__import__(*  ar n inQ :G  f  ! 1 =  •+ '.' + n 6try+  / c �getattr( 2, nd  " úexcept AttributeErrorE    <   R ? = b qreturn % ò

def _strip_spaces(alist)o , �map(str.( ", " < ócreate_formatters(cp> A"""C S and L ) ¦fq w = cp[" ‘]["keys"]K±if not len(0 c  ï Y !{})  1 =  ö2","^ + =ò  ! Ç 4 = R 0or ˜  ú+  { Asect…&= » a_%s" %3 ’  ) !fsá T.get(5 ,4 ò", raw=True, fallback=None•  A dB datefmtC ?stl… _styleA #'%/ ƒ Ôc = logging.F(â cclass_4cp[æ ]ô " † M 1if  2 Q   h "_rì(% fÇ `(fs, d 7stl ™  s[´]
¤ &  ¨
ÁÒinstall_handlÀ,½' iB"""I) Í4 ËhË É. `  ù £ w 1 =  É É ~ Ç@ixup‡ã[] #for inter-) ± references/ !    õW ¤ Ú0ion…0p["% 3lerõ  ± Ñ k3 = 2 [! 6fmt )¡G", "1H] Qeval( s, vars(¤)	 ˆ Q(RR, Nam]… 0 N  ^† P 0argI× ¸   g", '()3  1 = £   ¢  kw   V '{}V  X  Z Ah = ¿  (*c B, **2 Ï #h.· ¾þ  if "level"ì  #  µ [0 à % `h.setLI (0 x "ifÐmo /   3 cÀer(formatter“s[fmt])
  ð if issubclass(k ò, logging.handlers.MemoryH %):>  E òtarget = section.get(" V", ""m  / rif len(  ‚): #the   p ù may not be loaded yet, so keep for later...‹  ` ófixups.append((h,] )‡ g  s[	 Q] = hF „#now all‡ Ds ar� !, X p inter-8 äler referencesŠ  ›  s 2 in2 s-ah.setT.(B $s[Œereturn{ r

def _'  _existing_™Ders( t, child •, disable2 ¬1"""ã ôWhen (re)configuringî,}  àers which wereÎ  §�previousL C aõA but/ ·0in . Inew % ñ. There's no pointI @deleÞ  5 ñm as other threads÷continue to holdz  Qthem;L cand by Ý   ¢, you stopc  do 1anyë  é
= ãHowever, don'tE ecÁren of named7 @ers,­ áthat's probabl¸M �what was3nÄ by À user. Also,n4ow ÎX  Ó aNOT beJ ÔDd if” à’ is false	è0roo’ / ß   K  Ÿ0logÐu   . Per = / ’.manager. ‘Dict[log]G  h ÈJ 	ƒO % ¢sinstance(O c³PlaceHolder¬ 8  .  8QLevel>  Ñ fNOTSETÒ0 7frs = [² % ò propagate = Trul $ JelseÇ ‡ ‰=ˆ°ç $ll�4(cpV .@ ½ñ `"""Cre‰  ¾C  Òt#LeG ¥R firsE@llisóBcp["¯ ¢s"]["keys""  “.split(",ž 0 = F ñ (_strip_spaces( > �.remove("ƒ @ ü6 = � _  }    _ Y  Ö  �q Pif "lê"£U Œ j[, c  »7log- I $ øhS  y ×6[:]\  Ú è"(h= hv _Y 
1en(' Ó Œ   ] ? p! 
o7 y  % º   ²    ñ 5add² ¢Ú)×Ð#and now the ò+others...
    #we don't want to lose the existing loggers,1 asince F ð threads may have pointersI Ctheme K Qis seg ¿contain allj Àand as we gok Aoughš ònew configuration we� õremove any which are+ aed. AtB 3endÏ æwhat's left in‹ !is)  ® $ofe Z @were2  +…previousk – 8but2  Œ !nog  5 Æ -,ò= list(root.manager.‹ÂDict.keys())a 1The. Q need~°be sorted s= atH2can0 Àavoid disablãTchildæ â of explicitly1 Ename! „. With ab  ¨ Ò it is easier4 qto findH	a 
é .¨ (É ¡We'll keep7 Z � 
Œa ‰ W_ 0ren» 	« T hereí& _Dbs = []H 1now—uu  ™5one$0for íl‘ :6  >1secb= cp["Y `_%s" %1 ^  ( Sqn = - `["qual¥ "! –propagate( •.getint(" Ò", fallback=10 ] w   =s @ging9 L³6(qn' Pif qnÄ aÇ  F 5i =ý`.index> à + 1 # start wõ ºÒentry after qR C    prefixed =n U+ ".".  0fleDlen(, ¤  " Dnum_£  Õ 4en( 
) ¨while i < 3 
Ö  Q iÎ?`[i][:pƒ T] == � 4  8 	.u.append‹ :[i]Ž  2 ii += 1ð » .š T   if "level"—
Œ  [0 9 w P.setLN (5 ž  ¿hb ( »handlers[:]m 5ª H& &(hI @ � B¸Õ % [0 h>Î ‹ 
0if + )   1 =  ¦.split(","¡   ñ = _strip_spaces( 
)  c"inR 
m  L Ì 5add s[º 1])
Û !#DHwoH0. T~R's no@ delÖg8  " âM @inueHhS ¢references;  ¹ 'byÂ L ‘, you stoÈ@m doÜð any logging.
  òz  #However, don't disable children of named loggers, as that's
    #probably not what was intended by the user.
    #for log in existing:  P g ò = root.manager. –Dict[log]/  if™ 2 in² _) &s:" U €.level =2 ¿ging.NOTSET+ Çhandlers = [o M Öpropagate = 1D DelifF#_eà — tdI _~ ? (P ,î ,q ó )


def _clearE‡ HÕ "() @"""C  ¥ and close’ ƒ Qrs"""Ý  Y 4œ 1rs.[ )() œshutdown(/ rList[:]. 5del„P ! Ð


IDENTIFIERðe.compile('^[a-z_] ä0-9_]*$', re.Iî Óvalid_ident(sä Fm = R ‚.match(sˆ 0if µm Üñ	raise ValueError('Not a Z � Python a Óifier: %r' % P óreturn True


class ConvertingMixin(object� g"""For$ ÐXXX's, this m0  F ñ	provides common functionŸ‚ îcl ð_with_key(self, key,Â  ue/`place=¤ … ø €esult = 2 Ð.configurator  Á  (v8 2 1#IfÙt "edb ð is different, save ñ‘next time­  A &if2  †rƒ ‹$ !re± 
    ª Q[key]& ¿ [   ‚if type(W )"(Œ J,x ~,@  D  ? WTuple?) m 0.paþ NV % Pkey =œ! ?  
 ÖÍ‡. l  ­ºy>|g
# TheÂ2XXX,Àes are wrappÁô around standardÅpcontainÒ!
#ãthey serve to Ø‘ any suit}sL0the# C .Œ  
# sversion òts base dicts, listsl  Ash Stheir® Ðd
# equivalen1 ñwhereas strings which Ä# ad o aformatù ¹ eM  ap¦ðriately.
#
# Each wrapper ú*should have a configurator attribute holding the actual
#,  to use for ÷version.

class ConvertingDict(dict, óMixin):
    """AC  0  , ñionary wrapper."""
, ó
def __getitem__(self, keyL  P qvalue =H .- L  , preturn G ".c³ ñ _with_key(key, N )~ 6getv ï, default=None„ 3 )… (?pop… 3 … þ, replace=False)ð�List(lisð , 	ê ™é A é?1oidx=-1Þ y 	( P
(L#pTuple(t %- 6*B 7t# Can'tõ1 a 7  entry.Â=WBaseCˆs(objectr ý 0The'®Rbase LPwhich��ines some�0ful  ¡s­  L ¶ ð&CONVERT_PATTERN = re.compile(r'^(?P<prefix>[a-z]+):// 0suf S.*)$'OWORDI Â\s*(\w+)\s*'/DOw .\.0 _INDEX` [2 '\]g ?IGIi %d+À —_ÿqers = {% v€'ext' :  $ &', 1cfg ;cfg }5ó# We might want 8ña different one, e.g. importliba  òer = staticmethod(__ #__‚.EinitØC É äWfig =‹ . v -  t=,Ú  v sresolveŽsp  k K   R& € stringsã@s usgƒstandardF and�– RyntaxÊ W c 0namõ£s.split('.n ( àused = name.pocp(0)
  Etry:   öfound = self.importer(used5 ( êr frag in nameF  "  4 ‘ += '.' +, 	i  # ~     † �getattr( ,E 
‡  - þexcept AttributeError�  + Ö  $   p ? = € qreturn 0 ß ‘ I>Ž  Pe, tbdõys.exc_info()[1:]C  … ‚v = ValuÑ ú('Cannot resolve %r: %s' % (s, e)Ðv.__cause__,  átraceback__ = ƒ 	n �raise v
 ðdef ext_convert(80, v� )Z³"""Default )  er for the? ñ:// protocol."""[  Ú 6 V .Ï (]  ?cfg )?cfg Bst =Ï ” m‘ õöWORD_PATTERN.match(rest_»if m is Non÷D´¤"Unable to"b %r" %| S <elsK e¤  z ‹[m.end()¦úconfig[m.groups()[0]J�#print d,=tó  ‹Qwhile Ø    ?DOT
 -    G    ­ d£ 	 %     Š _INDEXŒ  7 �  Ydx = 7	 $  0if |²LDIGI7idx6  :idx›#  & 1!   €n = int(” à # try as numbŸöirst (most likely† =  » n¹  5 õ2Typ° *  W ¹ ! =± _ J£'£' \  ‘'%r at %r„Àa‹#° õ should be empty_ r>döq< C* Jsbðan appropriate type. dicts, lists and t³uples are
  ñ"replaced by their converting alternatives. String? µ checked toJ `see ifE ƒy have aK ð sion format and  5ted3 5do.K 5""" õif not isinstance(value, C¨ QDict)[ & d :N  ö @ + =A W )* õ.configurator = self& /el  ?Lis  l    A   HTA\Ù  ) St/ šrhasattr  Ï, '_fields')Ö w 7 w"š °str): # strqY py3kÒ mÀÿ.CONVERT_PATTERN.matchŒ Jif mÉ  °d = m.groupa(À  " Âprefix = d[' )']‹  % keW.›_ bs.get(? n, Nonei %ifMr©  f 5suf‹  ‹   ) x a = getÖ î,b €  9 · & =' (h . qreturn ) 
!de¹ Z•e_custom(n 7fig@C"""C…øe an object with a user-supplied factory.Dcœ Æfig.pop('()'› Á§callable(cy  Ý  =  ˜ p.resolv! Á   [props] ,.'«0# C/“õvalid identifiersL PkwargM 0{k:Jafig[k]5 Ck in  0D _D E(k)}B `result� 2(**O 	ç ® 
$’for name,› h & {.items( ó sm ,> m ï$ ð1as_=èc ð"""Utility funct8Pwhichü  ” s /Qs to H sæ/if&  1 c  Â w " =C ôº $ €

class `€ X(Base a s `e loggI us  a -´ionary-likeÉ°to describe@Ñv2ion `  	<M‚  ß P"""DoG  6ð figuration."""
#
  âconfig = self.  òif 'version' not in # :$  H ó raise ValueError("dictionary doesn't specify a S %")E #ifX [p o] != 1h ´UnsupportedW ~: %s" %Q o Ãncremental =) v.pop('i †', False7 õ EMPTY_DICT = {}¾ ölogging._acquireLock(7 :tryÇ 7if h 
  O†handlersœ Tget(' 6', Š g  :   €for name­3 d  * "if) ÚÇ 6  : ñC'No 7 Õ found with '$ 6  
'´ a%r'  %— Ú  @ OelseÎ   k   ¤ -= î [� ]± 
> _$ =ó s< @leven
D .Ú g', Nono¸  1if - * h P.setL{ (ñ Scheck   )j I �except E ion as  3 “Unable toj4ure9! ] ' } from e± è = <2 ji
KBure_I (_,w#er1_, Truò{w‹ vrKroot¬  Ñ0if   Z/ F ( I^ u Gz/')¶Ô0dis8€_existin¤xª g$s'À_clearExistiû ngHandlers()

  ý*# Do formatters first - they don't refer to anything elseJ E æ= config.get(' ï', EMPTY_DICT)B – name in 5 :(  Ã ?try   = [P ’] = self.– Eure_" (^  E  G si Ô  F �except E �ion as e¾ ð	raise ValueError('UnableƒÂ / '¹ ‚a %r' %e~) from Èá# Next, do fil�, either– D Z 2 7: ¢  (¨ & È…« ÅwÆhÿÖÐ¾D andîK  5As E 6canoó `, sort;_ keysI   Eóllow a deterministic order of9}urationB † 
N OdÉ�red = []\ 1for ~ È 4ed(X )v < p ] r	 >0 .Ê! =£ ¼  (   , Ž$ =›1 —åif 'target not©qed yet'6ïtr(e.__cause__6 ¨   Ž€.append(à x .  s†    7"? ] '9 UP# Now8äany that were é 0 r% ä à
Ó åÀigure_handleÿr(handlers[name])
  ( .' 0 =  , T 3 = = 1 �except E Ÿion as e:+  › ôraise ValueError('Unable to configureq / 'H  L 	 a'%r' %Ù �) from e
> ð# Next, do loggers - they refer… ì ßs and filtersI  Ðwe don't want8 @loseK ” existingb ,† �since oths ðhreads may have poinu  U ^them.@ c Qis se ¿contain all‚  Ý ñas we go through¾ 5newˆ atÐ.we� õremove any which are7 aed. AtN ?endÿ  æwhat's left in¯ !is5  Ò $of?} r @were> Åthe previousƒ º ?but>  ° !no  A ö uaroot =– @ing. ] ˜p= list(% ’.manager.q¾Dict.keys()­A#The: ` needs°be sorted s© at´=can| Ð#avoid disablQchild°  çÞof explicitly=  - „. With az  Ì Þ it is easier@ qto findÀ	y I%.Ø ( ¡We'll keepO ~ ¿ 
X…  Ûƒ aren ofÛ ~ here..– 2 _¤ns = []` 1nowou™  5OonesO I Õc.get(' Þ', EMPTY_DICT1forµ  Þ2 PiÝ  ( U)  )5i =jp.index(õò) + 1 # look afte| ý  C   ƒprefixedDo + ".". @flen64en(: ñ  X   Dnum_É 5  5 ¨while i < ?  i iN`[i][:p§ @] ==Jß @  D 	1„.append(¯ /[i‹ > oi += 18H .iª. À            �  try:
  òself.configure_logger(name,   s[ /])C �except E �ion as en õraise ValueError('Unable to … x / 'r È p'%r' % © �) from e
> A#Dism sany oldh þs. There's no point deletingD @themå ðother threads mayÀ AtinuÌ h_ ®referencesG �and by d’ @ing X ¡, you stop 0 do  ®  ŠNing.I ãHowever, don'tQ Ñe children ofí ,½ _that'–  ñprobably not what was intende± �the userŠ  0forR€ in exis?	#¿ Î òer = root.manager. žDict[log]ë  ; $ifd â °si  2 W €.level => gJoNOTSETe 7 Ïhandlers = [“ . ÿpropagate = True_ Delif©_+] ,/ed\ _¬ R (c , ,ž  m  { [ )] À And finallyŽ Ãás-ern  ý  =7�fig.get(' ~', Noneo!ifO ë ³ ä f ( d  K ÓB o Ñ·'Î š   b
 -  ÕÓ_releaseLock(¥3defd à formatter(ù, )O D"""C5 a 0 Võa dictionary."""Õpif '()'ýÈR ¶ eactoryï[- 0] #`  P 8 x DÉ
2á�result = Í Ærcustom(Š 
æf B Typ‚² Rif "'þ !'"—in str(te. Ü  Ü P#Name†òparameter changedR0fmtýj V ¡Retry with³ â&  ðThis is so that code can beû used with older Python versions
  ý#(e.g. by Django)" òconfig['fmt'] =  ß.pop('format'5 !()4 }factory\ âresult = self.Z ²ure_custom( ^ Yelse:E  fm> ( E.get“ f, None;  ÷ d. @dateÙ / Vstyleñ ^  [', '%õ Lcnam- dclass'[ 	¸ qif not 6 
Ò  © Ñc = logging.Fc9ter@ 
8 ‘_resolve(\ ))
7 ð# A TypeError would be rai7€if "valiÁ" key is pas nV"a ôËter callablec ‘that doesã hacceptY ¼as a parame× Dif '‚ C' inmp:  # ifÝðr hasn't mentioned it, the defaN@willÖ :fin›  #rpc(fmt, !, ×,n [ƒ ]AvS rreturn - –3defs  ôpfilter(
Š )A"""C‰bure a - ° from a dicuary."""� N(()H 	 s }!ó    ö Öí  / c#Badd_ð s 3er,s)4Add 5 to.$er0€list of  s3Pfor fyc s� 2:try   * rer.addF× Q"['  \s'][fOxE {ion as à a žR Valu¸@('UnwÜ ë ’ %r' % f)å ec_handld. P e|q_copy =Š· µ P�restoringX@case{e‚�T`5terF   &if‰
”¥F
l[Â1ter¡& ]š  l e¡ ¨)6set° ) '_  c  'Ï’ ×* QlevelžÀnfig.pop('leÓvel', None)
  ófilters = config.pop(' . £if '()' in/ :I  P cG 6()'j  ! úif not callable(c)A  $  E °self.resolv% 	e pfactoryk  JelseJ Pcname$ Ö [class’ k : = r  = 
º ð#Special case for handler which refG•to anothe  ¤  Ü �if issubŠ (| £, logging.Q ’s.MemoryH` i) and\F  J 'target‹ $ :try    $thò õ$['| 4'][ a -]]|  C ÊÖisinstance(thË ¼   @ f ‚.update( ò_copy)  # restorhdZred cfg‹  O óraise TypeError(nuC ;yet  =   ‚ [8 }'] = tho �except E {ion as y M   ’ DValu“  Unô‚ to set _F'l  E  c'%r' %}® ‰) from eE /eloDSMTP±mmailhosoC-  EX`as_tupð‹&['# 
f³ _ysLogµ address#
´ , ³ " 
² ŽÎ�LpropV.PPkwarg' 4{k:Õ!k]_keõ if valid_ident(k)}h ä“result = š 2(**f ¸ Æ. ÆtÇÑif "'stream'"GŸin str(te´ í”  ¶à#The argument P‚ changed«Astrmc 
; áRetry with old= ." õThis is so that code can be used= úer Python versionsI ö (e.g. by Django$ Ä 8[m #
2 } ifßjmatter= r.setFor! $(f
 h €if level  M ÐI àLevel(logging.Ð_checkLevel(l C))
  µif filters:   “self.add_ „(result,. 	B Kprop@ ñfor name, value in & Š.items()n r Utattri > m rreturn � 
² @def © �handlers(» ¤, logger,  r e"""Add S to a0 P from aist ofÃ Qs."""k  §  Ù hÏ Y 
Ê :try  4 Œ  OH¥ ¤ ”.config['J V'][h]ì  : �except E Žion as ea praise VjÑError('UnableÛ ë ’ %r' % h)ç eArcommon_© _™ ¥ I ú, incremental=FalseZ)‚Perform 8 @uratÀ ’which is r  ¡ Ñroot and non- ‡ %s.L �Â# =X a.get(' v', NoneA1if   o 1not 
<i C.setogging.2 M 
T õ#Remove any existinglÒ  ÝK‡ :[:]S  - $ r] Ghí  $ A  ! 4 %if� u  K ·_C (‡ W
Ò K€ C  ~ " }  )À K3ureÃ¼D‚ºC�\ure a‹0Pa dicÆ9ary! =E @AgetL€(‚ ¥Pú© lC ,Ö	¬ ?  B[agatea c!ifw5 0is º %
m} .G & =6 d ¥b\  > */erX* VR = P
ÈïÂClass = Dict  ª@or

X( (é ì4"""- eË  ä us %H p M bure()
r ð!listen(port=DEFAULT_LOGGING_CONFIG_PORT, verify=Í• �ðStart up a socketð8 server on the specified port, and listen for new
    configurations.

 ñThese will be sent as a file suitableG Ñprocessing by  CQ 1()._ `Return< ÐThread object¥ òwhich you can call start() to É × ,O  Å 
8 ðjoin() when appropriate. TD (opC e H QstopL0ing¬  1Use/ ð``verify`` argum 2to  ñ any bytes received across< AwireM öfrom a client. If’°, it should`a˜ SÜ X 1s aJ  ^&le‹ -i ƒ *ofÂ_ data™ J ‘network -… r¦ð either ``None``,ˆpindicat aty I “passed in
cÌ 0notÐ ( y ®ç Ódiscarded, orÛ  Å @ str@ü iG#n b  tot ä Ámachinery as� ¤normal. No© WÚ ²transformed² `, e.g.´¡decryptingK  ; – s‚ "inÊ2"""bclass çâStreamHandler( sRequest !):W  V B      D`a logg	�" rI .w  6 �It expectQ completelyÍD  ƒGuses›� pto insty"itå  e § Qdef hÞ W(selfÍ *   Õ  €º   DEachÕ 3 isË  edgpbe a 4-zð length, packed u µ  I pstruct.  ñ(">L", n), followá4ù Ý  ? Updi`grunt %
4  D 6tryÙ    pconn = *.  ecU	» ' `hunk =Õ�n.recv(4)%  if (c, n) == 4p  M 1slet 'un< =[0]]  9  ® ‘  V ”  7  wh4len›  < - �  1 h  +ö  8 ' -ç r "ifRß.^y@ o ª| ’	@ ¾ 2if ­ 5is d B   #iÂ ³üD ú ÿ .decode("utf-8"ë  6 Z    imÑð json
              ûd =json.loads(chunk)
$ 	 ÿ
assert isinstance(d, dict7  " �Config(d* �except E Oion:‹ 
Á#Apply new c[ Ÿuration.
7 
ÿfile = io.StringIOø ?tryŽ  & [ æ   é  - í  2 ÿtraceback.print_exc(d ÿif self.server.read¿ + K.setZ ® ÎOSError as eþ
if e.errno != RESET_ERROR+  Ð Rraise­bclass <ðSocketReceiver(Th¿ qingTCPSÐ )O 5"""íáA simple TCP sE ã-based logging'# r[ .;  G  òallow_reuse_address = 1©  ¸ Ðdef __init__(=Ð, host='local õ', port=DEFAULT_LOGGING_CONFIG_PORT,p  S  àhandler=None, ú y Rverif  9 ".Ÿ (• ” 3), d 
;$Û._acquireLock ë ©.abort = 0À > oreleas> `timeou@ 1@ [ î " =ö  2 = 	 
�êá_until_stopped›+ im˜ 9ectc Ø  wh.Anot   y x  Ãrd, wr, ex =W ‘.select([Õ ‰._no()]ø L  _[], [3 u g
â _ ^if rdÆ   9 |_reques & é' ' .f3	m # J 3Ú’r_close()ö/$(t!.	"):%  e « ¢rcvr, hdlr,P*bsuper(c ,Ú&f)V
Y: W  ¼9cvrë   n ! =u  ’=1 ìõ Õ  [ 5@Even»M À def run(selWf):
  ñ	server = self.rcvr(port=  
 ’, handler Yhdlr,B M  Rready0  1 Sverif2  )d "if   ‘ Z == 0Å  x ± Ì  Õ .Ü ¹_address[1]T 1 Ÿ Z.set(q ùglobal _listener: ûlogging._acquireLock@ 9 Ž B oreleasB ½ Ä ñ_until_stopped()
M �return SÂó(ConfigSocketReceiver,  btreamHÈ , F$, hP
def [ Lì Cing($1"""i ’Stop the Bing ž ó which was created with a call to2 1().I Q ^V6tryñ&if—  u¡.abort = 1w       q = None gfinall` ˆ 
œð# Copyright 2001-2016 by Vinay Sajip. All R$ As Re%ðd.
#
# Permissionñ use, copy, modify, and distribute this software ðits
# documentatK âfor any purpos(  ‚ñout fee is hereby granted,
# provided thatØQabove� à ðnotice appear in Îacopies‹  9 r
# bothE  Ë 
; n_ Fis pø V `
# sup� R	Ù  g   xname ofká
# not be used¤ pdvertisM Àor publicityƒ @tain &todPion
#V  Új>ðspecific, written priW Ð ðD.
# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
# 9 xIMPLIEDA û"OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALLš ð
BE LIABLE FOR ANY SPECIAL~ ñDIRECT OR CONSEQUENTIAL DAMAGES OR
#4  ðWHATSOEVER RESULTING FROM LOSS OF USE, DATAV ð PROFITS, WHETHEN ÀIN AN ACTION0 ðCONTRACT, NEGLIGENCE; O0 “ TORTIOUS1 `, ARISt POUT
#@  ORRCONNET r0THEŠ  I �PERFORMAX F‚0.

—@AddiS$alð s ^ � package  Python. Th9%re Pis
ba“¡on PEP 28240com¸sÑ@reto³²comp.lang.pO &

e7(C)if0
ToÀ, simply 'im\ð  logging.handleðrs' and log away!
"""

import ó&ging, socket, os, pickle, struct, time, re
from stat ? áST_DEV, ST_INO TMTIME_ Tqueue ”threading õ2copy

#
# Some constants...
#

DEFAULT_TCP_LOGGING_PORT    = 9020# /UD# 1# =HTT$ F 2# ?SOA# �3
SYSLOG_h ƒ  ‡  T= 514"  ­ " ò
_MIDNIGHT = 24 * 60 ð- # number of seconds in a day

class BaseRotatingHandler(log¿S.File 0):
–  å   6  A Rfor h9 €s that rO eñ files at a certain point.N òNot meant to be iªôiated directly.  Instead, use ­ � M �or Timed   n ¼ Ánamer = None: ° o  ñdef __init__(self,Ì  < À, mode, encox=I À, delay=Fals Qrrors : 6‚   õUse the specified`  Rqstreamea Œ•  8 D ¨ .µ 
=º L  P  ß 	 ã é ,E e )4  Q.Œ ! =M
 q % =d! O   	 
  ²Cemit®orecord}0Emi“$ .@  	aOutput˜  ™ ¦ È¡, catering¢ñrollover as describedŠ  J cin doR# "()‚  À2tryW    i¨•lf.should? Œ Ì  ,   Hh €   "3 �except E :ion› k èEv(• = }G@ion_- )Š€default_ Ä 	aModifyx=  ´aDR whenY7ing²òThis is provided so…†a customW0cane* 	E #e ¦  ƒPlemenpon call×0e 'À Àr' attribute¢ "thC o¡r, if it's<  abó@pass8 Ki  O 5 toait. Ifc Uisn'tI ( (A !isÃ!),4  O L ÷s returned unchangedñ d:paramô šF: Th N æ q  äðfile.
        ""3"
  õif not callable(self.namer):%  , ðresult = default_% " Oelse0 R (; )< rreturn a 
 ’def rotat‘ ç, source, dest™ &""Ê BWhen5 Bing,
 òe the current log.`  Ñ 4TheÌ ñ  implementations; '† ðor' attribute of ¨  H ñhandler, if it's>  L�, passing/ Â A andÅ P argur Es toL Qit. I_ p Fisn'¢  (Ó J§ is None),d N 0s sÚ @y re®Ad to(  F!inì c:param©  :  wA filA `. Thisu �normallyO Ebaseu   ; õ, e.g. 'test.log'1 w  ” 1:  w     | B o   Awhat˜ ¾ #is  ˆ E.1'.I O‚ q ñ# Issue 18940: A´ A may[ðhave been created)PdelayIFTrue�  N òif os.path.exists(È u  + 2os.Ú#  Ð –�Æ 5 €
class Rw‚ingFileHÛT(Base  Ž 2 @ forggöpo a set1 ñs, which switches from one1¶ ¡`next wÑ íÀ E A rea< Óa certain sizCŽ  ?�__init__Ò,b  ñ, mode='a', maxBytes=0, backupCount=0,Œ  b �encoding=o hñlay=False, errors  7 �   BOpen“�pecified‘ ‚use it aqhstreamH¢$By²ð°grows indefò áely. You can so Åy particularÚ `valuesœŽ  .Qallowº l åto rollover atL ó a predetermined’ R3 aoccursÙeC Ý2log•is nearly 5 inL alength&« ris >= 1ó	system will successively�L 1news as withæ Psame | ,” à) R, but- ¥extensionsO ð".1", ".2" etc. appendev ÙpFor exak,E aw ‹5M  (  s � pof "app@÷", you would get D , ˜ Àapp.log.2", ó... through to "app.log.5". The file being
  pwritten/ •is always9 ð" - when it getsA pled up, •is closedN °and renamedR � @1",   ifC eb . ' u2" etc.O €exist, tƒ �they are` 52",µ +.3F årespectively.
] ðIf maxBytes is zero, rollover ne foccurs‘ 5"""@ å# If rotation/9 ‘is wanted#ðdoesn't make sense·use anotherO Pmode.U ðfor example 'w' were Ä 0ifiX  if"re ‡multipleO aruns o& ñ  calling applic² Wñ logs from previous 8 xwould bP Rlost v – 3is Z ” @beca× 0theU ç F ‡ truncat*�# on eachp ai•E> 0:Ð  ¯ !e = 'a' QBaseR„ñ	ngHandler.__init__(self,Š  ’ , @ ´, encoding=	 ,N  e  adelay= ’, errors= )A  r .V=a
! çbackupCount =  �sdef doRŠÆ )	ƒEDo a³õ, as described in 	)a? 1if ± fstreamc   .å(æ   f = Non+W Ù  Ì äi¥ Qrangeå .1 §- 1, 0, -1ü  y   Rsfn =¼ �_Ü ç´("%s.%d" % V QseFil–J, i)È  O dO &Ø G  _i + 1‹  ±if os.path.ý_s(sfn  l , d,  0  os.remove(( » # F]sfn, ( *
3&banz + ".1"q¶ ‹ ® i ù9u ¶ bif not,¼çRv_open()Œ sh	�‡, recordšY�Determine0H  Tˆ@Basi Qy, se2  D su«eO i Kd ï KÐexceed
      ó  the size limit we have.
  5""" óif self.stream is None:*  ö# delay was set..O  % D =R }_open()j ÎmaxBytes > 0h p  # areµ Õrolling over?G  n âmsg = "%s\n" %o Öformat(recordv  / � ù).seek(0, 2)  #due to non-posix-compliant Windows feature 
4ó.tell() + len(msg) >ë :?  “ …return 1  ô0

class TimedRotatingFileHandler(Base  )` × � for loggDÃto a file, rU '1log Ð at certain t{ ™ ±intervals.
 àIf backupCount- > 0, when ® ª  ødone, no more than8 K  Œ sêakept -Ž ¢oldest one rdeletedkß Ðdef __init__(Û,Â Bname‹ d='h', ¼ 8=1,} 1=0,€  … �encoding=ü,ê´=False, utc  at–% E  Qrrors ‘ ` ¯ .¾ U'a', � 	 ±   Z   = 2, e�   /.¯=¶g.upper¥! ä==õ ' Putc = 
 &2 = 	   # Calculatge real6k Ã0ichFAjust—number ofL ×seconds betwe€s.  Also¥=  i Á suffix usedü M aˆ PoccurE �Current '/ò' events supporteds „r# S - S� U ·M - Minutes ˆH - Hour xD - Day pmidnigh Y ¤ R �W{0-6} -Ä ) Eon aÏ`day; 0� Vonday: 
 � Case of1ñ �specifier‹`not imú €ant; low�!r ?F cas!²# will work¸ $2 Lv == 'S'A ! Q³` = 1 # çª + Í öY-%m-%d_%H-%M-%SÜ. ó	extMatch = r"^\d{4}-\d{2 _  –(\.\w+)?$M -elÅ MÅ #60Æ  miÆ v Ã À}_\d{2}-\d{2Ó}(\.\w+)?$"
  õelif self.when == 'H':  &  ð interval = 60 * ®# one hour/ ösuffix = "%Y-%m-%d_%Hv W ó	extMatch = r"^\d{4}-\d{2 _ · [D' orË �MIDNIGHTÒ R* 24 × ?dayÖ Ó Í ÿ.startswith('W')�» 3* 7¿ IweekÀ qif len(Ì êj) != 2\  –ðraise ValueError("You must specify a day for f öly rollover from 0 to 6 (0 is Monday): %s" %ž)� ™ Š[1] < '0Î  K> '6É² qInvalid§ µ ?ied± — ” ö dayOfWeek = intB:[1]Æ / ù#4*se­©÷ �´ñ  ‰¿ �’e.compileô  ¦, re.ASCIIÿ < o =è *9>õ# multiply by units requested‹ p# The fWð
wing line added because t! ðilename passed in coul% ' aM òpath object (see Issue #27493), but² TbaseFU õwill be a stringQ #fiw è 6 % `if os.z „.exists(7 Ñ0t =* Fstat# ¥[ST_MTIME]Q ,el :  ’Ptime. +()’
A+ ¤ Ò@uteR[qver(t)
b Ldef   1 ×, currentTimeº &""×�Work out”s  ‘  Ad on † .x  ÁL Presul® w " +žP9 ±# If we are„ +ˆ°at midnight§,… Š J  ¢Öalready known• `# What^ @needÓafigureé pis WHENQ V nextà÷is.  In other words,° oif you± 
§ Ayour?\   1ÔQ  » R @want¥ <  t»  �àday clock at móidnight, not now.  So, we
  ð# have to fudge the rolloverAt value in order' Ptrigg …he first/ T "atI  } ± time.  Aft7 2at, ÷egular interval will take care ofQ — �est.  Not§ c ò is code doesn't9 õabout leap seconds. :)M öif self.when == 'MIDNIGHT' or õ.startswith('W'):A  :A# Th} Puld b� 0ne , B les• ð, but I wanted it>‰be clearM ’ :utcf  j 2t =B gmIÆ(currentTimeÔ  ) Oelse? _localB [ @Houru 9[3]§  aMinute! 4! Su! 5! 1Day 6 a# r is€number o«ÂÐ left betweenÊB and+  exƒitation° Wa- [ ?Non# Ôrotate_ts = _	J [8 !((Tk  .hBb* 60 +Q m; )* 	a  À  E ¼))
)  ™x 4- (µs 	©")  	G  l & ®
KŽif r < 0O1# R.“ SPbefor�#e Q  Ð(for example k€ #Î  AtM Q13:45Ú!itå�14:15), % oion isH  �tomorrow. ?r +Ô�J  ‰+ 1) % 7Q Presul�é  ƒ: + Ì€# If we Â H@ing Lð on a certain day, addZ Ûð©days until| #ìž`ðoffset by 1 since} 0jusPlcula| c  ûS g Y Bday õr.  TherÆ @thre“:ses`# Case*0TheÓ  á ô ð  ÊRoday;ä  -pase, do�KhingŽ M  2)z M `furthe/² 6€(i.e., tl #å  Ü Ñ2 (Wednesday)f­ o–p 6 (Sun" @.  D�+to© Q B   nzŽ ¿ðsimply 6 - 2 - 1,Q3–53è ’behind us8 } ê “ ðis day 5 (Saturd÷ay) and rollover is on day 3 (Thursday).
  # yDays to? ÿ6 - 5 + 3, or 4.  In this case, it's theS �number of… €s left iA ñe current week (1) pluK  5 R K F 3nexC Puntil‹ À  ù -(3ð ðThe calculations describedœ 2DÐ3) above need`have aÈ l addedFT¡is becauseŠ B 9timq p takes î  o midnight© X÷ ‘day, i.e.P PstartN th™  xt� 
‰ Ñif self.when.0 ¹swith('W'):]  ø "=‹pDay # 06mMonday/ iÈ2 !=d ždayOfWeekY  ] . <-  1 ¼daysToWait b   -ë ‘  6 Oelse�   	T  Î ó +“ O + 1\ CnewRMA• §result + (X �* (60 *  O24))K bif noty ?utc² ßstNow = t[-1]L Ù DstAt�  . �ime.localp(º )J 
 ¨t H!= dW ¥  ‚ Ò d< à:  # DST kicksISbefor§’`, so w Uïdeduct an hourì  n    y¯nd = -3600/ 
 4  � Ÿbows out � ?addš ™ 	™1 +=N/ndÍ o)= 5 + rreturn & 
 ¤def should(‡, record1"""2   ÆDetermine if?H r occur._  - J  & Ð€used, asÖðare just comparing Œ‘s, but it4 …eeded so}  Ìðmethod signatures L   6sam]´  �@int(b . (ycif t >E}*AtÐ?ú 0ì  KñgetFilesToDeleteME ¸ f7  8d9  �[  �RM(Âspecific tha"‚earlier r, whicha vð glob.glob().
    €    """
   ÐdirName, base
 ð = os.path.split(self. •Filename)= 1fil4 s5 ƒlistdir(T ( µresult = []< †prefix =y F+ ".™ ²plen = len(+ O Dfor { 5 in %s:^  Û %if  [:O R] == M 
*  . 2suf� Z [3 :±  %   1if  extMatch.m (@ )Y  4 „.append(`Djoin-,¬ )é !if > 2) <y ºbackupCountn ( 
gOelse& f.sort(k ¦ 2 = I  [:} =) -} creturn7 
…ádef doRolloverE	‚So a r) ;Ðòthis case, a date/time stamp is G‘ed to the: ™y  É Awhen W ! h4 ñs.  However, you want)  õ O 0be J  d d5theS �start of. Âinterval, no@ PcurreL qime.  I( !re®  ±  c²,R t¥ pwe have{ `get a D g U5ingÝ 0s, ³ € ¶m and remov¡  	€one with% ‚ oldest ˜.w {Ëjstream'ä k.close-  f = Non‹  # Ì  ‘ ¸0tha%¡is sequencËqrted atË `make iÿ †TimeTuplM Z  p = int(U . (+�dstNow =  `.local
 (? F)[-1´ �Ä $$Atäß4(:utc% c ¯ y  gm &(tY� " 	5 ® 8  È@dstT&Ö 4 	Ä  $ 3if ü  !=
  1 
¥ 	&    Õaddend = 3600÷     Ã     8 -9 ê 	2 + > + dfò•ptation_™ ’B	‡ 0- +¯  ™   ‹ P.strf	 M ,2\O%if§exists(dfnÁ ` 2os.„ ‡ À eh < , H , Y"ÓJ > 0¥ ‹sZ 0get‰«sToDelete(– 
š ðs)
        if notç self.delay:
   ‚stream =& u_open()' ÔnewRolloverAt% tcompute Æ(currentTime: jwhile @ 7<= , 
� 
* =: +Ÿ …interval  ó#If DST changes and midnight or weekly rÄ õ, adjust for this.J Aif (ðwhen == 'MIDNIGHT'I  ñ.startswith('W'))t 2not¢ :utcØ TdstAt+Ð = time.local
 (÷ U)[-1]’  ªÀif dstNow !=
 K 
f ,  ‡ 0 A:  #àkicks in befor’'xt@so w ùed to deduct an hourŠ  b   íaddend = -3600# Pelse:(  … �bows out… ?add‚ � 	QB += ± © ÉÔ	2 ÷

class WatchedFileHandler(logging. )†1"""` 2A h, `0  Xñ a file, which w\ Qs the < óto see if it hasÓd4  leÁ°use. This c¡@appeÖ�cause ofF @usag ð programs such asPasyslog°�logrotate_ ¡ch performD  $  ¯  " 3ionv Ü  , †Andedæ  } ±under Unix,B á  Ý Qsince	’last emit“!(A	
€s device•¤inode have..�IF,d 2oldV õ Kalosed,	� 	Pget a@ 7 !.
å Š@ is |€appropriY c±Windows, be±C 8  r Ÿ á O €be movedì £renamed - XB  4 I s —Ð exclusive loý-Þ  so"re¬ Q needC  ¨ %¾ò. Furthermore, ST_INO7 Át supported ¾ C Â ñ; stat always returns zero* po valueB0basì án a suggestion¼ p2¢ by Chad J#’Schroeder …Ádef __init__Ò,U >ñ, mode='a', encoding=None, b=FalseÄÀ aerrors+ ó  ‰.z   _   M    	 ¤ ª E À       error³s=errors)
  ¡self.dev, 
 Êino = -1, -1$ á_statstream()
 Hdef   B !):  ^ "ifT 5    °sres = os.fX (; .) –.fileno()¥ 2 ©  G ¤[ST_DEV],  FINO]¢ áreopenIfNeededj ¥ 5"""± R* P log „ Q if n5 .N  ‡ `Checks Óthe underlyin2 ðhas changed, and( %ita °has, close > Bold ô , ©   `to get A scurrent6 . Æ r# Reducc  � ð
ce of race conditions by z'¼ Åby path onlyT a# onceš Qthen ©/ ‘our new fà 0we aAed a  ?Ö   ð # See issue #14632: Thanks to John Mulligan forô æ problem reporD#’ Vpatch` :try`#Ý H Lâ 0, cÀ ô  g •existenceõ  ã Gœ !1`.baseF˜6ame˜pexcept  �NotFoundE`
Œ P 6Nonh ’# comparejbsystem´ �with that¶ kM) VhandlG  ¢!otù1 or 2 !=8dev   :ino¬ 
´€ is not » 
(  (€# we hav$£  è™ean it up_ ; 	ïVlush(U     $ 4$ ! =§ "  lIl€21742: _¢æ () might fail= m   #Å Æ6nq Š ô ¢ info from¨/fdá 	 ˆ„ Ä G^Aemit��, recordºcEmit a$ ®/If£spbefore w t%&thl�  °&it=z²S oØ€logging..HÇ r.i 
à ó 


class Socket) (=  } "A ª"r < Àwhich writesÏ x Às, in picklekqmat, toÁaX ú s b. The   kïLVacros] Rcalls!Ifwàpeer resets it€ attemptI @madeK U�nnect on7 Pnext N M   ­ Õ @is s"is|on ALogR! 'sg ð	ribute dictionary
    (_ñ%_dict__), so that the receiver does not need to have# ðlogging module
    installed in order2 yprocess5 qevent.
6 ¢To unpicklY yrecord Š  i  enX ‘to a LogR& A, us6 J Emake ¡ function. 2"""o ñdef __init__(self, host, port):-  Í  1     ¢InitializeÇ ñhandler with a specificI P addrð 1andT ç  H AWhenðattribute *closeOnError* is set7�True - ifa pocket e$ ¡ qoccurs,P s!  > �ilently X  d † tw ¢reopened oƒ EnextL ÍBcall0 ¯ " ".Hû .C)I  Q.P! =
  c! = !if  ú FNone� ‚ O QR ?els. (ˆ Øo R  /0 = p 
 5�r = FalsÛ� œretryTime@ #J �# Exponen4ö backoff parametersa4 — \ µStart = 1.0R  �Max = 30 ÆFactor = 2.0í S ïŸtimeout=1î1A fI ðy method which allows subclassqo defin‚g preci/€type of m Ó`hey wa÷ M  `1if æ #it  
PresulU Ñ.create_conneíã .2$, ë  ¨=[ b ( €.AF_UNIX& ‹Æ.SOCK_STREAMU  Ô G C.sett ( 
' :tryÚ < Î 	Ë 
> ‘except OS6I  [õ()  # Issue 19182V s   (ra·rreturn È FjH=0Try¾/ » ¨ ÄOan e  H— aa max À€. ThanksW ñRobert Olson forýåoriginal patchH Ã(SF #815911)Ãàhas been sligh&"reì&ed–—Rnow =‡  È(ˆ‚# Eitherª !isS,ÿ4!caŸ%is– #é cQfirstZ #Ã after a disG, or8 ö	we've waited long enough¹ D<’ 
"Ðattempt = Tru3e
  Uelse:   õattempt = (now >= self.retryTime). 3if - 
B :try  W E Ssock Q ¶makeSocket(S  *   . s õ = None # next time, no delay before trying�  F îexcept OSError” ñ#Creation failed, so set the ~ l @ and Iurn.`  d +if 1 is® o  / Ù dPeriodn ]Startb £ I   M 
` *Ÿ mFactora  K 	Ç ; >; ?MaxÑ  = ˆ 
=Maxr 1  R0 = j+o ‚ 
9  dec0nd(6 F, s)‰ 1"""#  … ñ	Send a pickled string toÍ y2et.Q  . ‘This funcÿðallows for partial sends which can happen whenR w pnetworköFbusy!œ ^ ‡  *  ÎÆ  �  Ü  .c�# <  Š !be`ð either because we haven't reached¨  ¸%ry® #<} yet, o; 8 	ÿVried,J ðbut are still unableovconnect	ý 
õ ).ƒZall(s Ö� #pragma:Ncoveá@o.closepbk  #!weüXcall �ˆR £ ÐP}©orecord®* s£ )   in binaryˆð
mat with a length prefix,�…‘returns iôd:   transmissÙRacrosg  ß   o  ¡Rei = ± •.exc_infof Zif eiº`# justïg/ raceback t HintoM  &.. ~ Tdummyþrformat(� îð# See issue #14436: If msg¾Aargs‚€objects,M¶y may not båq# avail¢o¿ Ÿ 0eiv"pend. So@bconverÿ e  % d #ð aZ`, savez!as’  %0zap… 7 ï  å4dicà 0.__ &__é †d['msg']…˜getMessag®0d['‘ (  Cš 4d['¶ ð# Issue #25685: deló!ete 'message' if present: redundant with 'msg'
  ed.pop(9 u, None) ÷s = pickle.dumps(d, 1 ölen = struct.pack(">L", len(s)) €return s0 A+ s
a ñdef handleError(self, record):#  ¦ 5""" H/ P an e3 ò during logging.X  5 A" Ìhas occurred/ õ Most likely cause -k ð*connection lost. Close the socket so that we can retry on# F µnext event. Ñ 0if ÷  .c] !On	B and  i 	 Ø -   2 (c	 ! =É    #š !to\Ö  ˜ Etime– Jelsel Vu/r.¬w ÏOemitÈaEmit a� 'rd·PlsC °writes it tt‚÷ in binary formad IfD Vre is. Áð , silently drop1  ÄeH Òwas a problemJJ Ñre-establisheÀ Y ®S ÿ:tryt qäBmake(Q  Ò$ fsend(s�except E ;ion[ 9elfÄX Y  ¾…¿Þ Õ� wacquire¢í 0ock? ™  &‰  Þ    :ockÄ   ^  / å	6 ! ?ockÑð E lfinall– ¢ `releasÑ ó 
class Datagram !(S BíAê"r < cwhich Ø˜ òSs, invØA, to¢ 3a du �T  The. V 0is ú û oQ LogR\"'sL ±ttribute diè H0(__ E__),à èôreceiver does not need— 2havÊ ðmodule installedÒ PorderÁbprocesG1 #™ RTo unv”¨4 at 0eivö enX Fto aÜ  , Æ"thØ E÷ A funè p› ú�__init__ýÃ, host, portÇ W0   ’InitializìÝb¡a specificI P addrð  × T 5	>.‘ # „ àself.closeOnErñror = False

    def makeSocket(self):   5""" òThe factory method of 8 õHandler is here overridden to createI qa UDP sq å (SOCK_DGRAM).# x 0if – P.porta FNone¢  ¦ ƒfamily =T ….AF_UNIXN ?els2 EINET2 sM ¨ (d ,c ¶ 5 †return sYAsendS?, sVðSend a pickled string5ak O  è ðThis function no longer allows for partial z õs which can happen«  whš he networkXabusy -œõdoes not guarantee delivery andG  Z  0 paAPs out�sequenceÔ ] | Ôó9c%()w   ; .ç Rto(s,#óaddress)

class SysLog�“(logging. ‘k3A hÅ< < a Zsmatted D ƒ records©QyslogŸ ñserver. Based on Sam Rushing's s* c modul“ò!http://www.nightmare.com/squirl/python-ext/misc/C 1.pyp €Contribuœ óby Nicolas Untz (after‚minor reÂ dqchangesG ãhave been made‰  Ð# from <linux�   blog.h>‰?# = 2n ñpriorities/facil ð are encoded into a single 32-bit quantity, w…M ñthe bottom 3 bitsI   g py (0-7)Ù  itop 28+ K � 1 ñbig number). Both< S 5iesO 5   3mapJ ðroughly one-to-oneJýAs inM êÀd(8) source ý 0.  I @mappÍi6 2clu! t*#il#. Ÿ a(these‚ordered)i�LOG_EMERGrA = 0 @  # ¾0tem°runusablÔ 2 QALERT* 1= 1 2 a«ò	must be taken immediatelÄ @ 2CRI? F = 2@ c�cal condi÷° 3 3ERR) 3= 3
 P#  erä0  `WARNIN× 6= 40 @warnB2  `NOTICE+ 0= 5  Õ önormal but significant£ m ¢ BINFO7 2= 6	  G0infB  Î %al- @DEBU� V  = 7- ðdebug-level messa³5  # � yBKERNB ¿À     #  kernð	el messages
    LOG_USER R  = 1	 ÿ #  random user-lev: BMAIL1 2= 2	  : µmail systeme `DAEMON$ 0= 3    + & v daemon“ BAUTH% 2= 4	 . þecurity/authorizationÒ `SYSLOG8 0= 5 m ú ð	 generated internally by´ Elogdµ #LPF = 6H qline pr< B subÅ 6 BNEWS- 2= 7	  ½ Ïnetwork news6  BUUCP- 2= 8	  6  d "CRM ´9. SclockN�  M@PRIV, "10- O#  sM¥ (private)I #FT¢  )*0#   Á* N* 0#   Ì �SECURITY  Å#  Log auditV �CONSOLE ) ) 6ler) 3SOL!3= 1Ó#  Scheduling#± (Solaris)
e ð#  other codes throughC Àreserved for'!te6  DQLOCAL\3= 1+ D7 PlocalP
6 I3= 1+6 U3= 1+6 ^3= 136 k1= 2à ·	Ø x1= 2à 6 <1= 2à 6 <1= 2à 6 	{@prioG¡_names = {   "aI ":  ØfALERT, Bcrit ;<CRI oical": Rdebug=  [ WDEBUG[ Gemer IEMER "rr< µ8ERR< 3rro  [    Â   Ö#  DEPRECATEDÉ CinfoP  2 GINFOP anotice    gNOTICE  Qpanic é ¬  n |p Bwarn1 2 €WARNING,4 ¢  2 !in „ 2 Ã }´�facilityÍ3uthu  i  G  É  I è& "  /& bconsol5Œ% $roâ m  …" %k Ç$ 5ftp! k 7FTP! %keIg GKERN" #lp   ð   LOG_LPR,
    °    "mail":  ¡LOG_MAIL,
  " Knews" HNEWS" 'tp!  D 7NTP! ƒsecurity&  ! ˆSECURITY& Ñolaris-cron":G xSOLCRON% SyslogI  % WYSLOG$ Euser" $ HUSER" (uc³  ‘ 8UUC³ elocal0F  " gLOCAL0F $ 1$ 1$ 2$ 2$ 3$ 3$ 4$ 4$ 5$ 5$ 6$ 6$ 7$ 7$ !}
!ò4#The map below appears to be trivially lowercasing the key. HoweverT Ð#there's more@ Ñit than meets5 áeye - in some |8es,\ “ ðgives unexpected results. See SF #1524081:M  � sTurkishT ‘ q"INFO".» Á() != "info"e @prioÑ_ü 1= {  2ò"DEBUG" : "debug"N  Q   H  bWARNIN6 iwarnin8 QERRORS XerrorS �CRITICAL ‚critical£ ¢ñdef __init__(self, address=('E�host', SF¦_UDP_PORT)   ½  �facility=Rö socktype=None):"†  8 òInitialize a handler.@ f’ ñ is specified as a string, a UNIXo  et( Àused. To log0a{ Õ ! s(²d, "SysLogHx (ý `"/dev/K`)" can±T H 4If ñ  q 6not� ,y   8 1 IfŸ  5 isG 	Ñ  /ñet.SOCK_DGRAM or6  pSTREAM,üo cL aocket c Ewillµ “ For UnixM as, youØ Calso¹ &y & Š H 0of ¼,£which caseH ª q •, falling› @backˆ X 
Í .$ "ƒlogging.˜.¤) ³.µ$ =*S  §=²
!  • í =Ø   b Ôif isinstance ,zÐ ©l @unixO •et = Truej  # 1# Sx± server may¤Ðnavailable duÒ š fsation,N ðC's openlog() func&  ÔÒignores conne  sE ð	Moreover, we ignore thes÷e errors while logging, so it not worse
  °# to ignore% ©also here.& Itry:  B ùself._connect_unixsocket(address)2  except OSE¤ N Epass1 Jelse# m d k = FalÌ 0if ‚ »type is NonE ¶ 1ock" =- Õet.SOCK_DGRAM€  ) Óhost, port = Ó 	!  ä  F 0get% Vinfo(; 0, 0€s 
!if“ F 
ë  } Traise-'("] ú returns an empty list"\  for res in s` &af— ð, proto, _, sa =3 	é  ‘ 3errì ! =Z" $ ;  ”< 0et.  $� 
Ã  :   Õ=n´nSTREAMÝ  7    k . ?(sa` ]breakÍ 
® as excj =excE  „ ¿  � �” )   ± Zlose(­  ifÛE 39errˆ 8 X eÇ 	    
& Odef á U ,)@use_c  B  ò ! Q  å 9if ( ª	" 
ö
ª ‹ T r � ({ ¹et.AF_UNIX,w `¸S > ÛÓ#2`workedNU set = `to they  d   	
+ =& >) 
‰k	A Oet.c6
d !iss…#� ñr didn't specify falling backå Efailž  †   |	 Á·	. § ¦*Æ † Ê  [ Î - Ò, C p  ð Ö ) Ú	   I Þ $ àraise

    defó encodePriority(self, facility, p C):
  5""" E> E the4 E and7 õ. You can pass in strings orE Õintegers - if! 1are5 9ed,` `_namesf A ¥  ðmapping dictionari0 ðre used to convertW Em toH ‰ . ì æif isinstance(#7str % 0 = P.   [ ]g 
[ Ï ,[  [  [  [ ureturn ° … << 3) |£
† ‘def closeu C! s7 socket)ô ‘acquire()_  6tryE  ( I | -    òlogging.Handler.$  6 ( ofinallY `releas� ‚  á ;mapéŸlevelNameò cMap a ‰  .  € FPa keyÓ þyˆF mappThis is1ful2 `wo sce›ò os: when customd  s þQbeing½   ½,÷A phe case; Bre yep't do a7ÅaightforwardC °by lowercas( À ã  õbecause of locale-I öspecific issues (see SF #1524081)ý @Œ Â.1 +Aget(] ‹Â, "warning")� ident = ''	 ’# prependÓÁall messages§  ap ò0_nul = True   # some old syslog daemons expect a NUL terminator  ;Aemit�, record10EmiG $ .@  ± 3The9  
pformattÛ .t sä "to^ž ¡server. IfÓ  H PexcepÖ2 inF 0ionS 0preB @, it @NOT   © àK H —™4msg`d (Ð w ‹  ¬Aelf.ž
Ú  E " V + msÏ # B ¬G –+= '\000'P ? r# We neÔª G ý é e, maybe tŽEwillL dchange]ffutureÇ $  ³ †r<%d>' %Ü@ ð,c  C  §Ï . y)„“   .Š Š('utf-8'( 2# Mð is a string. Co÷nvert to bytes as required by RFC 5424
  ÿ
msg = msg.encode('utf-8')&  `prio +- 	 ùif self.unixsocket:   n >try   : 6 š.send(msg|  & ïexcept OSErrorJ nclose(H  L r –_connect_µ ( address; ­ 
$el ' €type ==  Þet.SOCK_DGRAMÂ } (   to
,Z• OelseH 0allI Ð KER:ionC ‡ ahandlekñ(record)

class SMTPH £r(logging. )J 1"""þ"A G "r : `which Û As anI ó email for each Q q event.F N Ádef __init__© , <  host, from#@, to ±s, subject,E  ö ðcredentials=NonecCcure ³timeout=5.0Ñ  : ‡   0Ini> tize theæ %.
k ! Ñinstance with3  ° @ andª ° 0ess®$nd· K qline of6 -ð. To specify a non-^ BdardS�port, us� H ()  p) tuplev0mat ^ N` argum€j H @auth=wcation L s0ppl• ð(username, passw@u H  ó =A y ›  Í pof a se©E âprotocol (TLS)m R in am Û 7 ` …his willK ponly be8d when ê ò are supplied. Thep M  Z  M `eitheríRempty& @, orË £ingle-valu?  ;M ù skeyfile< 27 s-2  fK Àcertificate O @. (T
!is®e– œò`starttls` method)“ #A ( p°seconds can÷ ž5ied� 5 q 7E(the– àdefault is oneä(onk {!r.ãTif isw(ÚP, (li/ð )Þ Ò ù+   3 !0ailD· ~3  (  V0lf.Q B  , vH 
¬ ¯ hÀame, self.paóssword = credentials
  Uelse:   õself.username = None!  ´fromaddr =  ! ðif isinstance(to( zs, str)g  C = [ ]E f  3 = 
 
 £subject = 
  @ecur¿ s	 
 `timeou< 
 
  ‚def getSZ († ‡, record½ 1""".  ,ÔDetermine the‰ A for bemail.\  . õ	If you want to specify a9 lJ ƒwhich isz `-depen¸,w poverridv ¥is method. ¡ preturn Ë .()  ì Oemitæ cEmit a� Ð aFormatë &± and send iâ æ @ied oessees¬ :try#áimport smtplib·  G   x `ƒmessage . EuM 	3   5 Vutilsš S l =+ D   
A `f not  
¨ > ¬ ©.SMTP_PORTB  Ê  ±% €.p Qhost,^ #, —=¸ )K hmsg = í (! €['From']s  Õ 5 …I A['To& ‚','.join• wW  "4 £ 6
5  ADate2 ‚`.localá ¾ ².set_conten¦!.fp(b 
c "ifº¹¢"  a Î Þ,  Ò ­[.ehlo›       ¡starttls(*\ 
š  ,   0 P  4log{Æ ,Õ "paÄ
Y 5  n_O(msg#  GquitÄ �except E :ionþ Ç ´handleErrornñ

class NTEventLogH% £r(logging. *…"A M "r @ Þ ¶ 0s eJ s )1NT [ Á Log. Adds aª°registry en ^?Y°pplication µ0. I«@ dll " iïòprovided, win32service.pyd (—  nóains some basic \Š Ðplaceholders)B�used. Not‹�at use of8se . ’ will makKByourÿ Ð logs big, as9  æ 4irex p sourcem qheld in% 2logETðslimmer logs, you have ñ'to pass in the name of your own DLL
    which contains, ðmessage definitions8 Ä want to useW ¡event log.M 1""" `def __= À__(self, app„ P, dll	 `=None,; Ðtype="Applican 1"):F  Ÿ ùlogging.Handler.V )' 6try4  8 øimport win32evtlogutil, =  0  ¥ .¤ $ =® # x_welu =H  Y 	) dif noté 
˜  l ñ = os.path.split).a –.__file__â  9   =  ?[0]4 Vjoin(3 A, r'+Êservice.pyd'H !2 $ =Ý 	ø # 0logÑ$ =Û# ã óAddSourceToRegistry(�% Œ #efi º åþ.EVENTLOG_ERROR_TYPE�  8 ymap = {  `q˜DEBUG   :ë_ ±INFORMATIONe ,I  *  Y I .WARNING’  Ž ×  C �CRITICALÑ C }�except I ZError!ðprint("The Python WÄq extensŒƒfor NT (­", †%"\e  p "Ö)Ù1ear ÿto be available."e «0 = ­
_  ÛBgetM$!ID¶‡, record¹ ‡ RReturˆ\0ID Ç  ›¾ A 1. I¤  are usingzrz  J  ºC  s, ð could do this by hav7  Z 1msg ed·5theH  Per be+ ðan ID rather than a� @matt 0str‚` Then,ùFhereð3you…  Pa dicÅ ary lookup| 9get[…ID. This‘ 0verÝ! r+Cs 1,ši”Sbase ú  ® "in˜ ±ƒ &|Q ) 1¾E·�CategoryÂ¯c=  )Ú Àg  … ‚Override™i×CpspecifyÂ�P 2ies !È ?s 0ç Àn 0

    defó getEventType(self, record):
  5""" ÀReturn the e8 ‘ type for ; %.
/ ðOverride this if you want to specify Qr ownL @s. T, Åversion doesO Àa mapping us  ‡ ‘handler's? õmap attribute, which is set up inL  __init__()Œ Ãa dictionary6 „containst sç ÅDEBUG, INFO,L òWARNING, ERROR and CRITICAL. Iö 3are¶ 2youð `levels U willO °either needœ oEømethod or place a suitableÃ é %.w èrè .ãƒmap.get(âº Ano, ! 0def$ )ø�def emitOcEmit as8€Determin9Óe message ID,v�categoryk‰ <eã1log—@ i¹#NTF ?logþ "ifÙ V_welu	 :try   Bid =2 BgetM® #ID-)a +   7cat0 €CÑ 4  a5 Tµ’e 4msg0 Tforma¼* Äë b.Repor¿ñ.appname, id, cat,fz, [msg]K �except E >ion'i °UErrorí " 8Bclosˆ€PCleanÊQL r9ÒYou can remov>papplicaÝ Ì Q from`registF1s a„  ž–source of&ô entries. However,Ì!doÛ,Åqnot be ™ íeŽ ­2s a÷“intended ›E LogŽ ±Viewer - itsX jaccessÏ  toØ  G 1DLLý ð#š :SSFromR%2 0log˜’logging.H•.ÐÃ

class HTTP (/ ôˆ"A 2 ÅSsends*‘a Web ser�:aGET orý âPOST semanticsÿ a  r Ñ Ò, host, url, i`="GET"éöcure=False, credentials=None B  ?1ext Ù   |   0IniC "izÐinstance with¾Ž  ÁÁrequest URL,õ  ¢ ç  O («  "ö "—u Ðlogging.Handlóer.__init__(self)
  ’method = 	 v.upper(  #if õ	 not in ["GET", "POST"]:J  Q òraise ValueError("W ñ must be GET or < 	e  ^ ñsecure and context isx ONonej 3 ùparameter only makes sense "­  ± 	 b"with † f=True"£  6€.host =  J  šurl = url ý ]
 h # =q 
 çcredentials =  ' '=1
  ñdef mapLogRecordô1, r )I&""ñ	Default implementation oJ Ãping the logG Á into a dictu  K1tha´qsent as3 ðCGI data. OverwriteHµyour class.? öContributed by Franz Glasner& ¶ creturn“ 0.__Ž &__�getConnecÍ  ¿,vÖget a HTTP[S]A .Y  ê  Ì ðride when a custom‡m  »ðrequired, for exa\5 ifñ Pthere* a proxyå öimport http.clienq#ifÉ Õ ž cô  ¯8 .Ó SÑ (;=Ì û;els}_ 
^ H ¬= N ­Cemitž¥
0Emi™$ ŽASendm 1 to  Web server�ña percent-encoded¼eionary’]:tryW‰Åurllib.parse9  w NÑ!lf,
  
” 4  Ž2lf.1 S Z™_   UvŽ B.urlÝ N.)` A4lf.«!= à
ø  n ÷if (url.find('?') >= 0@ %  ™sep = '&'  M    4 ?4   ñ+ "%c%s" % (sep,Y
Ñ Ph.puty"esSÛ ,Ÿ
+ Q# sup[�multipleÛ s øö ne IP address..š ¬ `# needg€strip op`Aal :O AfromK €, if pre	i˜2ostO'":j ` Aif i`ˆ 0= I[:i]V @# SeOðsue #30904: putre÷quest call above already adds this header
  û# on Python 3.x. Rh.put7 é("Host", host)( ù
if self.method == "POST":&  v 	P íContent-type",,  0  ú"application/x-www-form-urlencoded"“  9 m úlength", str(len(data))> Ñ ¾credentialsÌ Ýimport base64¾ âs = ('%s:%s' % O ").¸ Š('utf-8'€  ¾  A £'Basic ' +g C.b649 Ðs).strip().de('asciiK  	‘'AuthorizLJ', s{ Rh.endò*s( çAsend[è 
S ð h.getresponse()ø õ#can't do anything with the resultl�except E :ion¤“ñhandleError(record)

class BufferingH$ £r(logging. )O ‚"""
  A J "r = qwhich bC #s :  b ós in memory. Whenever each
 # 0 is˜Qed toÚ J �, a check  @made gsee if& ó should
  be flushed. If it ,. n  ()M bexpectp òdo what's neededõè ð   def __init__(D£, capacity ¦.   0Ini#0izew )¶Ü R sizek  5 A ?y. 1 � .Œ % =— ! n Q= []
  Ñ 2F,Ô «Ò Sa	Î hC itsõ?]  Ë ¼Returns truªPis upÅ· 0. TŠCacan be¦  I  overridden3 òimplement customÏ ¯strategiesPr‘  ßC) >=‰ÑÅ  "OemitcEmit aÇ.@  ¼ aAppend3[’xÐ) tells us toU"llÓ  ()ï uprocess ðÌå Ù !.a} á �   ±† � ø ) L â"()Ó     / ¸O°¦®—behaviour.ðversion just zap¦e_ _emptyý àacquire()
    �    try:
	  õself.buffer.clear()  ofinall1 ¡release()
-  def close(O )b 1"""!  n C! Ò the handler.=   ñThis version just flushes and chains to> Óparent class'w %).g s î [ ç “logging.H¬ ß !

| s Memory! !(BD3ing � Aö ¹ r which y#s n Ñ records in m^  , periodicŠå ¿ 0ingm„a targetb 0. F= # ð occurs whenever3 t K ±is full, or$ ` an ev^àof a certain s< 0ity' ò greater is seenxå  �__init__², capacity,ÒcLevel=ï s.ERROR,¿ a=None,˜   ð !On?S=TrueZ ! y   ¡Initializeç eQ with la size, lŒ 2 atŒy p  =qshould Dˆ³an optional´ Ã0Noty  O uithout ˜!beO àet either hereM�via setT¿&()ý a] nano useðhnyone!>Ae ``¸ (€`` argumËPis ``8õ`` for backward compatibilityÿ ‘reasons -$Áold behaviouõ thâ 1hen e"is‰dZL s g ’1ed,_1 if> ²  ‡ñhasn't been exceeded no³P M" r. To pr´Pthis,PÂto ``False``³ 2>¿.È ë.Ã Õ' =â² % Ÿ=5 ñ# See Issue #26559¡@why Ì B hasUadded7 T y î{   ŒÂ�aBQCheckƒ ¹  ¨a™ - Á} ö por highÎ S  W±return (len‚ kQ) >= È Ó)h \ä  H   (± .%%no7 ‚ ƒK [ Xí 1Set…�Ê "}¥ ‡   ×  ` p.acquir    pb ÿ_ñ CÐ KFor 7ð , flushing meanós just sending the buffered
  ¡records to   target, if ðre is one. Override …you wantE !diV ånt behaviour.
 BThe g   U ðalso cleared by thj •peration.= 5""" åself.acquire() Etry:  × 1if + Í 
    4for‘ "in+ +  / L ‚.handle(Ï ƒ  '   + L .Ý § kfinall« 1 `releasÓ Ç  def close( )• QFlush¨ðappropriately configured, setÆ  ã�None and _   q  º µ  l af… 0OnCN §  O    ¾ .# Ù E |   Z Ö  = Õ ¸     BéAingH²'r.R	- — B e ›Ã
class QueueU “(logging. ¬<TÔ2r†qs eventn0a qJ p. Typicñ, it would be used together² ðwith a multiprocess×‘  Ý³centralise ˜   pfile inÆ 6 N 4(inM - q applic‚r), so a« Qvoid I Pwritee0ten©K tbetween_ #esý  co5Ps new‡ àPython 3.2, bu 2is Z0canù ñcopy pasted intoc Quser K  ½Ause ƒearlier V ‚versions? ‡=  Q�__init__T,|¯ í ,     RInitiHáan instance, uo F0pasžÁc  8 D �. 8dG " =” 7 ² !en ± rfn E+ # a×€ •  }ábase implementß _ñs put_nowait. You mayÙ 8"ovñß ¢hmethod ,  �óblocking, timeouts or customÛ  �   
‹ ®  Ô .§ y–  &bprepar+,ÿ ØP+ s' L e Ã *×object return™÷ sx  « ždkPformaõ€to mergeƒ… message[   @argu­!s,¯ðremoves unpickleabÕ‘tems fromG "À
        in-“place.

  õYou might want to override this method if you$ uconvertF  the recordB ða dict or JSON string, õsend a modified copyE 7of H Ñwhile leaving õoriginal intact.9 5""" ð# The format operation gets traceback textG o¶ P.exc_ H !(i� ¡re's excepI €data), aÈ  ls@ Qturns¡ v 7tedF ð message. We can( Cn us^tA “   â @ Ásg + args, ag #se±âbe unpickleablc a” 0zapO F  ß Ainfo¸    ì ¥ attribute\ ÷ y are no longerB `needed@ ,ð
not None, will typically  7be — E ²msg = self.*(3)" ñ# bpo-35726: make!3 of§]°void affectñother handlers icf chain"i ! =P .v| # .°e = msg™  Â     ! =4  n{ �  Xø ¯�def emit(C, %):q cEmit a$ ïQWriteGU LogR³ yÀqueue, prepa²0 itIÌ kOfirsw6try‰  [ ¤ 1.enT ± .X eyö]$ EdI  ßTError@  


class Q· ó Listener(objectTÊ. Ðimplements an erSPthreaálI à which watchesh5@s be ad6 Qto a ì  ˜2movdm0T pass  ) I  h  ÙÚ rb ² processing»À ”_sentineldC  �__init__c,ƒ *V  Ž cspect_ Ã_level=False% ®i   ¢Initialise"°stance withV P ¾ñ  ã �  < f s¿   Z 5 =« 9  > % =Ð
! _§ `   =  re™ é ? =  Q!de‘ @_blockD* V ù 1 re§Qit, o!G ÆÀ  –Ubase �™uQget. Š%aydˆO �QpimeoutshBwork²ðcustom queue impó lementations.
  5""" ñreturn self.queue.get(block)
&  def start(% !):  J G S! â the listener.>  ) BThisC ñs up a background thread to monitorE Š E form  LogRecords, oprocesÓ  § #._Y S= t =f Qing.Tp ‚(target=+ z )m ÷ t.daemon = True 	qprepare1, r£ $P+ # a'  à ` handl™ /Âmethod just ¤s“passed-inE õ. You may want to­  override tP ¡if you neetðdo any custom marshal�  {qmanipulF1 of‡ é € before • Ping i�   × /er¢Ñ Â ù  f5 KH6eJl6@loop4Yrough• ` offer± Athem Ð <"to™e5 Š" =7D F3forF 3r icã &rsF !bif notN ƒrespect_* j_level/  3 ¢  Oelse1 	¨ .Y Tno >=¦   L 3if j R ¢ . (W _XÑMõ¡s, and ask£g ±to deal witßmó°runs on a s«Óate, internalæ Th0“ðwill terminate ifßAseesJ Ðntinel objectß ü·M !q.$ dàhas_task_done Š¥sattr(q, ' 'TQwhile•
�:try  ½’y !de{ (ÒQ  (   #ifv ¬ 2_seå Y 1 	½ &  * %q.Ê (y  " Ubreak    �ö]   ?if † ‚ qexcept _.EmptG ž Ÿ  ¦!en. ß	úRis usp< Ð_x	¾§e base impÂ F Ís put_nowaitû óÀide this
     ð.method if you want to use timeouts or work with custom queue
A   õimplementations. 5""" Qself.8 Á.put_nowait( ±_sentinel)
/ �def stop !):  h O òStop the listener.<  ( ‘This asks! `thread× àterminate, and  n † qs for iû Vdo soÂ ”Note that#Àdon't call tg `before>�r applicp exits,d r)ðmay be some records still left on0 ]‘, which wp Æbe processed� I!enaP%()<  __.join ðV = None
"""wsgiref -- a WSGI (PEP 3333) Reference Library

Current Contents:

* util -- Miscellaneousa�ful func3�ðwrappers

* headers| PManag0dsponse & Candl' ²base classeÐû server/gateway ¥ ? s _)  k "a  ¡ BaseHTTPSD �supports ? €validate:  Cion Ç 5 àits between an#ì "a v  
 ™ñdetect errors in either

To-DoHDcgi_Ë a-- Runˆ  Q �s under C¢ðpending a deploy—  standard)·  J ¤ J  : 4appI  ì * `routerß ðmiddleware componñ hŒð s URL traversalG   P� Ù€
from .u@ imzb FileW%ð
, guess_scheme, is_hop_by ; D> HS#

 `sys, o¤ñime

__all__ = [5'´ HÕ ar', 'S-    7CGI  D 8IIS   '‹ñ_environ'
]

# Weekday“month namÄ „ d/� §òmatting; always English!
_wH  =  Å °"Mon", "Tue 0Wed 0Thu 0Fri 1Sat aun"]
_} ?  ð, # Dummy so we canº0 1-m!d 1 P numb¶ z 1"Ja 0Febc 0Mar !Ap 0May QJun",)8  ul 0Aug 0Sep !Oc© 0Nov pDec"]

'pformat_#_#( Sstamp8Ryear,ª ñ, day, hh, mm, ss, wd, y, z =ð0.gm@ E ž ñ	return "%s, %02d %3s %4d :  ‘ GMT" % (5  Ó ”C[wd]‚ j[C2], § › C ñ)

_is_request = { À'SCRIPT_NAMEš�PATH_INFO ÀQUERY_STRING ðREQUEST_METHOD', 'AUTH_TYPöE',
    'CONTENT_TYPE', `LENGTH PHTTPS	 ·REMOTE_USER ñ!IDENT',
}.__contains__

def _needs_transcode(k):w ðreturn _is_request(k) or k.startswith('{ /_'  0SSL \M  È Jor (< €REDIRECT( ?andŒ  b[9:]))ª Óread_environ(¥ ƒ"""Read  Ðment, fixing š Ñ variables"""Š òenc = sys.getfilesystemencoding()& s& ñ'surrogateescape' 2try" Õ 1''.; ãe('utf-8', escE öxcept LookupError8 ea creplacY Å a = {}
k ø# Take the basicè ð from native-uni½C os.F Ã. Attempt toL afix upN ¢ that comeP  k 9ô0 to ³pensate forM  ) tbytes->} "deD@ steg  at will al»Ñy have taken ö .K fSh, v in¿ Titemsç ji¬E  !   ±# On win32,è 3 is-Bly U/û. Different serversN Ó �õ 0 uscd? BingsÕ  Œ   !ifkÑplatform == 'Ÿ ' (   ¨software =ñget('SERVER_SOFTWAR¢').lower()+ B  2IIS	Ï‘2be Ù  d as UTF-8	 Ilong  P #  íPinputFsa valid8 sðnce. Otherwise i( J  u = U } ¼Ðpage (mbcs), ]t no wayÁ Ž  ð# detect this ha ó ppened. Because  !is	¿more likely™  ¾ , ‡ ƒ  é 1inh�ly unrelIQ (an " Ostri1S ha� ys to be2ƒ0not !asT 8å   à# always recreƒ 7’original �Å
| ?  €W	¶Pmicroqc-iis/'N 2  [v = và").´ ß('iso-8859-1'„òApache mod_cgi writes² 5-as³£(as if ISON �) direct¨ !toÍ¿@. Nog  ification Ô.ed/ela­ 
OpasshòPython 3's http.F@.CGIvR“stHandlert
c o#Nð the urllib.unquûote default of UTF-8, amongst other
  �# issues. melif (  @ ÿsoftware.startswith('simplehttp/')7 ôand 'python/3' in I / -):  y ò	v = v.encode('utf-8').de Ýiso-8859-1')
@ R# Forÿ  servers, guess that they have written bytes toK  ñthe environ using stdio3 ð
-oriented interfaces, end' /upN   A € € system Ï _ page–/seßenc, 'replace#‘# RecoverÄ ¡s from uniŒ ë ,ì ùurrogate escapesÔ ñ# where available (Põj 3.1+)Ô /elÐ 	èÌ ?escé¥ 0[k]&“ dreturnªò


class BaseHandlerL‘"""Manage† invocationGÂa WSGI appli 2"""_¢# Configur. ðparameters; can OÂride per-sub~ !or �instance© Pwsgi_“ u b= (1,0D ÷multithread = Tru5  @procÉ òrun_once = False· rorigin_Q  ^ð# We are transmitt²Àdirect to clØ°  ç° ð = "1.0"   # VersÅ Tòshould be used for responsÂ ƒ _p = NoneG 0Str} @name…) 0‚, if anyÐ S# os_þ2 isl ¹to supply c¤Ø ¿$OSBmentE# byC°it's a copyƒ C'os.e @' as ðimport time, but youù##ÿ@thisï@e.g.$ òr __init__ methodÆ  = ìÔ (Î o±llaborator N|'Àfile_wrapperòCileW ß!seÈd`to disŸ® �headers_U B = H  8  `# mustÎa  R-likeŠ ŒpError h_ ÂQ(alsoñé÷ traceback_limit¢Print enti›'  ‘òself.get_stderr(J e� p_status›P500 IŠQnal Sú ¥ "ú /  ÷ = [('Content-Type','text/plain')]4 £body = b"AQ L ð occurred.  Pleaseƒ taE±he administÅ.J StP@vari” s (don't m× "seâ Ü àresult = None
÷
    headers_sent = False
 b = Non Ebyte* !0
' ñdef run(self, application):   K Ø"""Invoke the$ 5"""%  # Note to K ²: don't mov6 ÷close()!  Asynchronous servers shouldn'tP Scall 8 ð from finish_responO µ, so if you* ¸anywhere buN  » ðdouble-error branch + ,A ¿'ll break a¢ 'by› ±prematurelyx Cing.Ú Ó ²must return¾ 'h‰)' withoœ  å 0ingÊ t�   might sti” €e output\Õiterate over.‘ 6try® ² ƒõ.setup_environ(). ! Presul6÷	.5 ,Ìe.startvI  ˜l àexcept (ConnecX€AbortedE„Ã, BrokenPipe ) QReset ‹ ¼ ±# We expect‘0cliý!to‹op ’ abruptly…2tim J   #W  O  ¹È 
ev 8 zqhandle_hy
I  8 ñ # If we get an ;  H   0, jVõgive up already!§  J   †  Ve   òraise   # ...and leIcactualÁ  figure it&.
/
X k ¡`"""Set�  qHm ð for one request<¸ Renv =m3  $osÂW.copyÏ  y ò .add_cgi_vars()¤  ä ðenv['wsgi.input']   f ˆget_stdi4 ~s5 
4 7err† 5  È4ion6 5  „ _ ï ž ƒrun_once6 5  6  ’url_schem8 6 Ô    ämultithread'] `   n   `procesn 9  }"ifË# ñfile_wrapper is not’
G0 )']§  n rorigin_R Ø" �_softwarew  'ÿdefault('SERVER_SOFTWARE',C )ú 0 qnd any »�ble data,ºn± 5 ±  3' á ð
Subclasses intended for uóse in asynchronous servers will
  õ-want to redefine this method, such that it sets up callbacksE ðin the event loopR Áiterate over �data, and  E @ ð'self.close()' oncˆ €e responË µs finished.6 5""" Etry:  Û Pif no´ ölf.result_is_file() or Bsend 
A  E @for ¶  K£ J )  - ! `write(4 )� ! Ç –_content(& jexcept[ s# Call " ogY bl‘turned byaùWSGI application‚ #Å ²case of an p 6ionQ ¥ ±if hasattr(Ñ ò 1, '… *')¡  2 ' Ã	y Uraise JelseD ‘# We onlyYí vwhen no¨ A is L €d, becautY  ‹ #Ü ©€ status,CÂult, headers€àenviron fields�JNone	ð# See bpo-29183 Êmore details. #A()

• ádef get_schemeN>P"""Re¿ºBURL ( ¸ being usedàr, XguessR .Ë u 4set`_length}  ’Compute C‰!-L)  @switöð o chunked encod– ¸if possible� }Áblocks = len| ƒîó (TypeError,Attribut áNotImplemented# > í6pas‚W2if ‡ :==1q = °*['d'] = s¦bytes_sent¾  B   –î  ‘# XXX Try->coriginŠ0cli5gis 1.1:ƒcleanup_¤ Fó"""Make any necessaryå€ changesÍ‚defaults“ ¥ ÁSubclasses c te’ öÔto add other : èó<if 6SÝ 3lf.· 
yuž )ž  1dstart_øö ,ÌU  ,exc_info=¶
'A !)'Va/¢as specifi3€PEP 3333Ø Ä ifr_ 
½ å M1if Õ š '
7  &   Q# Re-¿  ali  ep© v¡ jŽ  :  = ü E[0]( ð1]).with_traceback(çexc_info[2])
  ‰finally:    2 p = None   õ# avoid dangling circular refE ñ	elif self.headers is notK 
l óraise AssertionError("H7 õ already set!")
a \ ’status = 	 
 y =ˆ s_class( B  K  µ ò_convert_string_type(# A, "Sw "= a½ C len% S)>=4,( õ must be at least 4 characters"µ E f å[:3].isdigit()t „ messageT �gin w/3-( _ codeP 3]==" "J óhave a space afterM ž Êif __debug__Àófor name, val in \
&  ; & b
 ! #, üU e B    f Ô§6valD _valueE  m ’�is_hop_by (ƒ 5),\ø  r  Ãf"Hop-by-hopé @, '{6 ¡}: {val}',é†allowed"³breturnŽRwrite Odef É  ãU¦ue, title)TB"""C¤`/check}0ue ©6.""!if (	)†6strG  Û ˜ " ø –  7 D"{0}ˆ" og ñ str (got {1})".format(½ c, repr‰ <Ô àsend_preamble(ÿ 
ñ òTransmit version/,ò/date/server, viac_d+() W ‚.origin_4 
¸÷client_is_modern(Œ  ÿ   L h ñ('HTTP/%s %s\r\n' % Ä c.http_³ ,3 ¸ P)).en´æ('iso-8859-1') c   ‘if 'Date'YiCg 3 g š 	¶   (V :± °_Q`_time( . /()¯ ^ Ä ” sñ_software and 'S¼ß $(? È k nJelseF E"('öf ]  Ü� R g, dataNB"""' ð)' callable as specified by PEP 3333ÏV  ÆÇ ö(V  áðbytes, \
            ó"write() argument must be a bytes instance"

  õif not self.status:  # õraise AssertionError(j ö
before start_response()")a (elc Êheaders_senti 2# BM ðthe first output, send  sstored E 	¨ Á æ \ À = len(data)Ç þ# make sure we know content-lengthN  w _l %()  Jelse» | +} 	Ó# XXX check C{ L{   aà óruncate if too many· ØEten?ƒ q _ eã  ‚flush()
} 1defCPfile(; )¿ ð"""Platform-specific ) Ò transmissionH  Hü Override this method in subclasses to support p[ ¨ c ñ.  It is only called he applica€%'sC ðreturn iterable ('Ü �.result')L %anó5 of: ) Pwsgi_ˆ ¦_wrapper'.è Tß sshould p ±a true valu¬qit was ƒ µto actuallym HtÁj dbÿ-like object using a2‚approach)” Gfals• bnormal 7Ž 8 Pbe usaðnstead.  An excep. @ can7üdÑ0ind�eH Ithat#÷ttempted, but failedVYNOTE:;�  ð —
v<' i¸’ç'æü  DiB goL Œ� v direct¼ Ú1 of™ ." 5""" ÷Fan  # No¦
§by default‚sfinish_uˆ !Enžß - ð  have both beenÍt£ aO[Lzero€A At bysE (so !# þÔHEAD requests3ðsatisfied properly¿ve #3839D G ®î C.set3*('o', "0";  
)¢ ŸXpass ~+ifü½ ubshort? 7Oclos4C ) Eaeeded)¼–reset allƒBvars\   S3€may wantk‘also drop_ 0cliÉ`connecœ¥À       try:
  ÷if hasattr(self.result,'close'):
,  & .% %()$ zfinally5 1 1 =  theaders Ustatu åenviron = None\  } = ù bytes_sent = 0;R  qFalse

= “def send_v è Ù Ã"""Transmit # ò to the client, viag ±_write()"""\ • ucleanupd ´ X Ÿ 6TruÙ bif not` òorigin_server or ‡ ·_is_modern(¾ ‚ ã ‡preamble”! ¼ ?.– '))*  l Afile( n ,que if 'Ù / ô' is an instance o  Pwsgi_J ˜_wrapper';  - dtreturn 0 !is3  t and isz ± Å/ ß K Æ á + Ã can accept ¨ r ;Í ¤  Q .Äð['SERVER_PROTOCOL'].u÷() != 'HTTP/0.9'�`log_exp 1ionÏ š,exc_info¨ 1Log¥' ¡' tuple in E2log 	ðSubclasses may overrideð�retarget< `output�õchange its format.•ý +trööfrom traceback import printß K  œ dstderrBget_ ÌC (D  H U[0],  1 =2],7 ¸± ‚_limit, ƒ 	- Û n ! g.flushª 
� ÛW  Ÿ²handle_erro‡ê@curró$ ,ö ò   °#to³ ¡ˆpossible§å b4ys.™ &()Ý —î¿Ý’ _’ À,Îæstart_responseq N ƒefinish" Vð# XXX else: attempt advsPd recÐ±y technique³P HTMLÊRtext? t§ #, ¶ ö	£ ó ð"""WSGI mini-app9icreate‰f  Ñ pBy defaSÀ this just u� a'† Y3',  p'¦ t Pbody'ÿ pributes„ Pgener† $an�page.  ItÂà
        be ovó.erridden in a subclass to dynamically generate diagnostics,
  ðchoose an appropri+ õ!message for the user's preferred language, etc.
O ðNote, however, that it's not recommended fromµ õecurity perspective toP ˆspit out½  á qany old™ P; ideë ñ , you should haJ ' dM �omething k 0ialJ Xenabl o õput, which is why we don'tš `includ:uy here! 5""" ÷start_response(self.error_status, õheaders[:],sys.exc_info())O ‡return [6 bbody]
‚ð# Pure abstract ï øods; *must* be ov64"esA ’def _writ« u,data): B"""O@ et>  Gpbuffer 1 6@send bclient^  sIÃokay if this¥ P actuÅ¡ transmitsz Q Õ; BaseHandler� �just sepaÝ!s ¶ Ð and flush opöAions� õgreater efficiencyI Awhenl qunderly!Vystem• õhas such a distinction.D ôðraise NotImplementedEôd¤ _`force U ž  ofLSent '®0)' îÇi
ðis a no-op (i.e.,ŠH ‰Ü  v �ô &Ÿget_stdin÷ ðAsuit¦Ï'wsgi.input's ?err€ .Ás� Ïadd_cgi_varsƒ ð insert CGI varis}'onvironŒ 
" SišQ(]�3""" Â1's mòinitialized with streams, e‡  ìTàh¸ iÀ tóor synchronous HTTP/1.0 origin server° ÝN s žtentire fÁ3givÚ�correct :s°Uã"::– 3\ Jr = !
 % óinp,out,err,env, multithread=False Åprocess=TrueB Ëm �.run(app)Ï'  _l!__(,6  ð out,stderr,envicron,
  ñmultithread=True,  Ñprocess=False- !):  7 Ñself.stdin =   2out =out 2err :err úbase_env = environ  Qwsgi_¡ ³ " =¯  , Í -  
/ �def get_Ç (Ú é preturn  ð 4 ?err5  ä j Ìadd_cgi_vars8 f ö q.update# .)~ C_wri Y,data´ 1sul}¦Bout./ * Œ  ÆQif re, ¤is None or q== len(1 ø 6 E ñfrom warnings import "   ð ("SimpleHandlerL– ñ	) should not do partial ´ &s"«  ÂDeprecationWv )j Phile Å
³  Æ 0 =  [ò %:]5  U "if| :ata:   Ybreak/ D  Âb.  Ya_flushÆ¢é0std! Ä  7 a * ó


class BaseCGIQ(_"):)ð"""CGI-like systems using input/out ôerror streams and{‚ mappingN cUsage:[  hÍ, =� ö inp,out,err,envÝ 2 ƒ.run(appÐSThis   Þ i© ñeful for gateway protocols Ó �ReadyExec´ sÿ
FastCGI, that have usableñ $anô 2men°ü ð.  It's also the �¦  œ „ñ, which just uses“ 0sysîsin, os.Þ,² r so on.]ó The constructoro ðakes keyword arguž 7s ''K j  Üp' (defaÜpng to '- ! 'Ô'ë pectively)$ qcontrolN  ë �configurnP sent&   Rappli†!ñ	 sets 'origin_server' toK o q (to en�•�)rassumes¼'é (‚_once' iNK .V 2""";	u 1 = $ ( (3% ×bd invo× @ via5½/®   ¼ $Î‡ z )Ê 	òðe difference between t	 b 
° # i‚it alway i .#ofð, àmultithread' oðHf 'False', and
    'wsgi.multiprocess' of 'True'.  It does not take any initialization
H ð$parameters, but always uses 'sys.stdin', 'os.enviro Ñand friends.
‘ ñIf you need to overridex ˜of these n ñuse BaseCGIHandlerH �instead. 2"""^  î À_run_once = ç " A# Doå fallow ¥  … óleak between requests in Google App EngineL  × aother Z€-run CGIò  cases.  This iZò easily testableµ ñ# See http://bugs.python.org/issue7250r 3os_TR = {}ì ñdef __init__(self):-  ¯
1.' !  %  4 %, ½u.buffer <out Ierr,C Dread› 2(), th =‹ |=� € Ö)


class IISß(½ Ö ñ"""CGI-based invoc�à with workaroun orO ’ path bug,�h?  should be° M € prefere4 toÊjò when deploying o‘Microsoftj  ‚ pout hav$ 0setÆ� config pñ	PathInfo option (IIS>=7)Lpor metaÚ 
. ñForScriptMappings8 2<7)@ õ Gô6Ñ# By default,À ñgives a PATH_INFO that duplicatesÏ áSCRIPT_NAME at¹ # °front, causÿ òproblems for WSGI apI 0ionK pat wishx„implemenO ‚routing.<¯Qtrips!Fsuch™ dåX#Ì 0canØ|"urdpc¶the correctê Ìtª À #esØ "anÞ0bug"re3  TRANSLATEDÙ0wro¬ ALuckÝ F @variâ$ iK brarelyj 7pguarant!by(@. OnÄ  <7, though r0set á @onlyæ ñmade on a vhost level, affec- Ball É sHÞ mO`, many€which bró@expoi!toäþ 2bug„a# For ASreasoÂ  0alm• SneverC"ed¯ Œ‘fix. (Eve3 7› .qs it be— „  reU ±still no UIaBit.)âR# The% ano way   •@coden@tellÎ¸ ƒ �Ówas set, so aˆ  seƒ4te …¨£is providey„	² = %b  ¸¢#= ' a.get('i „ J'  , À . ðSCRIPT_NAME', ''3)
  ñif (path+'/').startswith(script :.  5 ðenviron['PATH_INFO'] = E C[len9 5):]6 õ	BaseCGIHandler.__init__(!  W õself, sys.stdin.buffer <out Ierr,C š ó, multithread=False Åprocess=True: ðP)
"""Manage HTTP Response Headers

Much of this module is red-handedly pilfered from email.messW ð4in the stdlib,
so portions are Copyright (C) 2001,2002 Python Softw( `Founda8 ð, and were
written by Barry Warsaw.Ö ð

# Regular expressioŒ ðat matches `special' characters in parame ,½ À
# existenceðwhich force quoting  ç :   value.
imï S re
tm ñ)s = re.compile(r'[ \(\)<>@,;:\\"/\[\]\?=]')

def _format[ ( ,^ a=None,ƒ Be=1)«¡"""Conveni¯ @func60 to² 1mat?Ñreturn a key=« q pair.
TìBwill\  r Ð if needed or  ÿ  trî  Í1"""E $if4 `s not ­ |  )s R) > 0¶  9 #ifo 5or -‚.search(1 -  1  " =g ö.replace('\\', '\\\\') –"', r'\"'  D 	°'%s="%s"' %3ramd. Jelse€ < /%s: 
6 2 Å„


classk\ �ra colle¾"of r h  mn)]P# & ò  4 = 
 &if ¬ » & [Ëƒif type(7 ) ÙBlist½  _   óraise TypeError("N° must be a 5  5Rname/Évtuples"r Ç #._o ° ð  g Êif __debug__� €for k, vÍ@ 
!  ? _ c-¡rt_string_â k„  )   - "v)5‚N  ; N† ¨‚rt/checkÆb.Ö u   v$t6strG  # V" „AAssen	‰ vsws•¶ P   "� ò str (got {0})".�S(repr•)p_len__(ô tB"""Rr %Àtotal numberg ¢€, includO©duplicatesê  B b 	‚ ssetitem† ð, name, val):
     ð"""Set the value of a header."""
%   ådel self[name]   "._0 •s.append(  9 (# ðconvert_string_type(K !),W /._! qval)))
P ñ def __delitem__W ,B :   l ø
"""Delete all occurrences× Ò, if present.\  < ðDoes *not* raise an exception3  $é È is missing.|   — / =Ù  ! •.lower())7 *d ós[:] = [kv for kv inQ !  ” Tkv[0]I @ != Y ]Õ 1?get1GÿSfirstú y 'R 'R  '°Return None� € insteadv L9ingNv›Note thatM  Jñared multiple times,ª« Õexactly whichDõq gets r°  ed´ð undefined.  Use! €all() to  5H  Ù qs matchÄ Qfieldl u ¯2getéD–„containsÈL )Éi5trui„message > 	¬  1notº
Œ @get_ |,‡ `a listÑ Z $   '!d ßðThese will be sortŠn¹ Porder
 %y îi ciginalp•„ Àr were added»AthissÔance, and may&õ duplicates.  AnyN ­ 1s d2d8 qre-inse§ ad Qlways  nn e— RIf no@s ex/@withâ a given^,’sKmptyG u UH  o[kv[1]? ==o ]g�,default=û
«CC, orü # 'L 'í 0 �.k,M ·Dif k(é 
   $ 7v! ­ Akeys
³,¤s$Kl%Ànstance, andó may contain duplicates.
  ñAny fields deleted and re-inser õre always appended to the headerM Flist[ 5""" òreturn [k for k, v in self._E 1s]
. °def values( !):  ® B"""RG  a j s of all… 5 .F  0 ñThese will be soÍ !in¹ Porder
 yÔ @ared‘  Ô toriginaX   s p, or wedÁis instance,=t|vtOitems1Getf ª0 (ªuDŒq» ·Ö'[:ØŒ__repr__Ú±"%s(%r)" % " ú.__class__.__name__,4)î 4O__st[  ’"""str() d sô 0matÜÒps, compÿõ  with end line,þ€suitable< ÿ direct HTTP transmission.ó ð'\r\n'.join(["%s: %sâ k—	 ‰+['','']Þ _bytes; ä  x÷).encode('iso-8859-1'H ¡setdefaultb,V,Åiéfirst matchingj	'@ ''F '‘  Ifl„re is no<  1 $d 8 ”add a new ~ $ # €m i lbsult =@get(D )> Qif re# vis NoneV «  :².å(!�._convert^‚ing_type]  C   G 1 &))‘  / ’¸ª ;els� ' À _ ð3add:© !, "1, _l º, **_paramsÙ2ExtÂú‡ settingÂH  µò õðadd.  keyword arguments cane"us5setÒ padditioR‘ Qeters>a ,}°underscores» ~%edO ðto dashes.  Normallyi ] À will be addóed as key="value" unless
   ð is None, in which case only theA õ will be added.
B †Example: ö6h.add_header('content-disposition', 'attachment', filename='bud.gif')O �Note that¼  ik ö!e corresponding 'email.message' method, this doeð ñ*not* handle '(charset, language, â)' tuples: all •s must beû ¡strings or?. 5""" ¥parts = [] Aif _g  y1not> :  ›  ò= self._convert_r b_type(# )7 m }.append! €for k, væú _params.items()} /k x 	ks  ifR A
G  È 	‘ Àk.replace('_:-')L NelseD v� 
vC u q_formatð (‚  7, v† o¼sI( … ·Ñ), "; ".join(ò ò)))
"""BaseHTTPServerÅi. øs[ðPython WSGI protocol (PEP 3333)

TÄÂis both an epr of how9 0can›[ ðed, and a basis ú‘running
s& À web applica“ðs on a local machi@suchA@mighúð  done when testO �or debuggˆ(anT  .  It has äÑbeen reviewed’ ò	security issues,
however¼ òwe strongly recommendCñyou use a "real"Í sd for
produc×  ' e.

For8u#B, seI'�_Æñ	__=="__main__"' block at§ |  of ð
module.  See also  ë% B doc~Âother API in‘@ion.$Ã

from http.Ä eimportS �RequestHµ6r, R
* 4sys €urllib.pØZ ‚wsgiref.õ3rs 5 S	V + @platž # p�_)  ³+ñ

__version__ = "0.2"
__all  ['Íó æ  
Ã   €demo_app Rmake_ü R']


 e  c  D R W/" + � G
sys* ² a() + ": Csys.½ ÷.split()[0]
softwareJ … ‡+ ' ' + o ’


class š J(X)N h  Òs ñ‘def closet˜:try”r_Üð.log_request(
     ñself.status.split(' ',1)[0],  ¸bytes_sent
9 ) …finally:  ' ðSimpleHandler.close(O ò)



class WSGIServer(HTTP 1):
H v"""Base a that V ñments the PythonJ Â protocol"""C òapplication = None Qdef sx R_bind— ¾ ¸"""Override' ‘ to storey @ ` name.q  ó   ° .# c Ø  %  ø.setup_environ()›   , )� ã# Set up base >  ] Senv =º4aseb X = {}% ô ['SERVER_NAME']4 ¶  Ù 
. òGATEWAY_INTERFAC4 š'CGI/1.1'- [ BPORT[ !trgFportAûenv['REMOTE_HOST']='Q ïCONTENT_LENGTH!  fSCRIPTÍ &''Rqget_app‚ Lbreturn+,8 s8 ," D  Ÿ. 7 =  
ìsRequest(ß
  ˆBversÀ"/s/" + __ &__²  ê î \ .Ck.copy(“ÆrROTOCOLÊ 0rÊ ‚ ürSOFTWAR''w 5 æREQUEST_METHODj ucommandb ƒif '?' i·Fpath \  d,queryÒ  Û?ÛM Oelse> ,M a ­‘PATH_INFOª ðurllib.parse.unquote(w ë, 'iso-8859-1'^ÁQUERY_STRINGG ¶ Ì i DhostÄ çaddress_string¨1if ( !ósclient_0 :[0]à ½ 	j! =A ŒAADDRš ¿[ « iQñlf.headers.get('content-type') isƒ�  Ü7TYP.L _K _K ý Àà P 
[˜ ]Å dlengthr Ë # É2if  × ³# =, s …for k, vÐv gitems(h ðk=k.replace('-','_').upper(); v=v.p! 6 ðif k in env:
       †continue 
 p# skip # öent length, type,etc.
+ ù  if 'HTTP_'+k in env:!  - Eenv[&  ] += ','+v ù # comma-separate multiple headersN Oelse` 5= v5 Qretur— 
 ödef get_stderr(self)Q . Bsys.! 5 lhandle1 A"""H   a single ² request"""B  ë  l S.raw_ rline =  �file.read q(65537)±  :  if†| A @) > . 6Å  2 U …  R U = ''P " �_version& ¡/nd æsend_error(414µ  e Pbif notó Tparse‘(): # An I ù code has been sent, just exitÇ b §¢r = Serverž)r(5  s,Œ w )   ©environ(),K ® thºf=False • .ù_ ý )õ  # backpointer for loggingo 6 B.runsâ .ž  app())



áPdemo_ µ ó ,start_responseññfrom io import StringIOp `stdoutF (Î ðprint("Hello world!", >=3 '  hò corted(š `.items»   ö 0k,vHhÐt ßk,'=',repr(v)s  
ã ð("200 OK", [('Content-Type','text/plain; ch‡¢t=utf-8')]À V" [Ô  b value().enœ!("0 3")]rRmake_�k`host, YP, appI �²_class=WSGI #, × R¸»
¯ð"""Create a new D  s ð  listening on `| p` and `� `NP`app`� i7  }–  ((9 µ )˜ 7 A.set^2app / ò


if __name__ == '__main__'ÕXwith 2¤'', 8000, º¢) as httpd3 µ 2a = p.socket˜ 
  j   ( 0"` �Ðon", sa[0], " 1 B..."È  > ¡webbrowser   p.open('  €://local;:Ä –/xyz?abc'S  ( "d.èñ ó2D one1b, thençñ"""Miscellaneousòð-related UtilitiesÔ
¶ ðposixpath

__all__ = [
    'Fið
leWrapper', 'guess_scheme ð application_uri rrequest ð
    'shift_path_info& õsetup_testing_defaults',
]


class Fi{ :H 3"""‹ ð to convert file-like objects Ñiterables"""
= ñdef __init__(self,:  9 ò , blksize=8192)m  ¹  ' .`  & % =1 Q ! = $ =G  ´if hasattr(F ‡,'close'f I  g . ¿ tgetitemÂ 7keyH õ import warnings†  .	 (  w "dU's __a ú method ignores 'key' parameter. "I AUse uùtor protocol instead.",. RDepre6W® 
  Åstacklevel=29 )
 ydata = žQ.readØ.�0 0if 3 Ø û areturn Y øraise IndexError{ Ý xtF  ‹ - 4nexg-  … ¸ HPStopIø Ž 

ñ¯ƒ(environ‘ B"""R!a ' ô for whether 'wsgi.urlìò should be 'http' or
 !s'@ i X3if i ø.get("HTTPS") in ('yes','on','1GZ P Felse²! 'Ü {ß Gthe , ð
's base URI (no PATH_INFOÑ ÔQUERY_STRING)Ò Turl =Õ [b]+'://ð from urllib.par•Rquote"!'!X_HOST t +u % ]n
. ÒSERVER_NAME']v 
›Æ  4 ==Ðw6 Y ú PORT'] != '443'0  4 ‘ V':' +:	> Ç  , 
Ë   ")['4 r /80q $r š �3©r'SCRIPT5)ò'/', encoding='latin1'W�2url�õV ý, include_query=True| �Sfull A  —@, opÃCallyD @ing + J z stringŸâ z… ® — t�ð = quote(environ.ð:get('PATH_INFO',''), safe='/;=,', encoding='latin1')
    if not environ.gH áSCRIPT_NAME'):'  + ñurl += path_info[1:] Oelse' # úif include_query andu ÏQUERY_STRINGv  T'?' +2 )['. † õreturn url

def shift_® "(eã Ñ @"""S! Õ a name from AG to ", ] qing it
Ò ðIf there are no remain"  s Æ segments inW H a None.G sNote: '� ð' is modified in-place; use a copy±€you need¦ AkeepI Æthe originalr 8 orÉ .¼ u 7wheœ  z ójust a '/', this÷ As ''±ñappends a trailing{ 0'/'‹ 	1ñeven though empty86ñ rmally ignored,N  K ³ doesn't no.  en¨ @.  T© ii‘tentionalH �behavior,œ ðensure that an applica. � can tellÏñ difference betweenL 2'/xa'/x/' :ptraversò¢to objectsÕ1"""7  
+$ =»biª, ‰3 Q|4¿$ gparts �“.split('/Ú& ð[1:-1] = [p for p• Aif pæ‚p != '.'Wg t "[1 1delÔ_ È sscript_7 Øö Öø 
0 Pposix› .ï 	 (! P+'/'+Z ¼ .›Awith?# 7 =  [´ | Z  ) Z  +=7 õ (['ñ  €T x ) A]   K `.join(a)\ Ð# Special cas:X/.' oÈ0¤get strippZ`# becaLPwe doU! ú€last ele¶6 ofCª #xð±'s only oneÿ ÿð  left.  Instead@ 1fix3hisB ñabove, we fix it ?"so–S getsî!izæA nK ¶  ‹ beZ&  Ë†ame=='.'Ú=C ËS  -þetup_testing_defaults4gUpdate° qP triv“8 fM ’ purposesÀ®Àadds various@`ameteroaquired@ SWSGI,6 J’HTTP_HOST'àSERVER_NAME, SöjERVER_PORT, REQUEST_METHOD, SCRIPT_NAME, PATH_INFO,
    and all of the wsgi.* variables.  It only supplies default valuesG ðdoes not replace any existing set ·s for thesef 
Œ ñThis routine is intended to make it easierE  unit tests¾ AWSGIF rserversÚ °pplicationsF ò
set up dummy environmentsè Áshould *not*L ðbe used by actual g  c Gor ab p, sinceÞ P dataÄ Qfake!L 2"""ç x C.setK2('SÀ £á','127.0.0.1'); 2 ÿPROTOCOL','HTTP/1.0')h  $ s_HOST',U [| ]q 
Vd','GETk Gif 'f ' $incŒ'z :å  Ž” 
¾3','- d 4,'/ž V é (¿ion', (1,0)ü . Ïrun_once', 0+ ¿multithread. rprocess/ ñfrom io import StringIO, BytesIO% Ü einput'- (Þ Perror h 2 óurl_scheme',guess (” )ˆ$if!['I9 Ÿ]=='http' ßP', '8äl] s^ 0443:á

_hoppish = {mp'connecO ‡ �keep-alivà'proxy-authentu"e' AorizŽ ? t7 atrailezô'transfer-encodingB ðupgrade'
}.__contains__

def is© 0_by Ò(header_name)Uð """Return true ¬% '¦0an ò/1.1 "Hop-by-Hop" )  » orG  h  l `.lower4ð# (c) 2005 Ian Bick  i º ñributors; writtenÌpPaste ( ://pythonp Ð.org)
# Licen‹AundeAb MIT l #: : àwww.opensource= /# cs/mit- ².php
# AlsoC Fced Z dApachet U, 2.0b ^ a4 32.0\ ± cto PSF^ ca Cont` Agree€
b Middleware«QcheckaobedieYo\„àpecification.
ð
Some of the things õs checks:

* Signatur( ðBapplication and start_response (including that
  keyword arguments are not used).f pEnviron } H  -  €is a dic{ �ary (and H  a subclassN  7 �That allÚ €requiredŠ } !in ev ô: REQUEST_METHOD,
    SERVER_NAME, óPORT, wsgi.version Sinput berrorsE + ³multithread#  sprocess ¥run_once

Ä ñHTTP_CONTENT_TYPEt	 tLENGTH UÜ ¿ à ô (these headers should appear as d N !ndC   { ]ðWarns if QUERY_STRING is missing,P  Sñ cgi module actsQ PunpreÅQably ­ ‡at case.÷ ðCGI-style variablesÂ ñat don't contain a .) have\ ð(non-unicode) str†gvalues\ �» ¶ ha tuplu"  url_scheme% ¡'http' or 
 ps' (@@: �this too‚  rev rctive?)t . 
e ?  ÀRknownQ AprobR  )"aSCRIPT›‘PATH_INFO	Pempty® žr with /� ¡t least onÙN :or M 8setz *–@posiõ ˆ integer0 \ !is±t'/' (it†kbe '',Ç ¢V   )/'ÿ £r0 ha¶¢e methods d  Qline,  
 sb Q ‡__iter__Q ·R Ãflush, write Q  º0The0tusÎav,¢ ³`space,& 2rtsŒ$an* $ È -  J ð in range (> 100ý !* ¼ HÇ}`list (I	,hûanother kind of
  sequenceP Titems
]  R  ÙBngs.õ  atBr³no 'status'`¬0is ã æ�CGI, but— ›in
  WSGI† y 
ä1newn Ï°colons, endV _ t-, or
 r€ charactæ 	¶s below 037¼ ±Content-TypÃ PgivenÓ /  báent (CGI often¢a
  defaul… # BtypeÝ  Ô A doeæÝ ?no r 1whe‹Iw ^ 
 ` \…exc_infoc2 too˜*ð tuple or None.
ü<
* That all calls to the writer are with strings, and no other methods
  on7 ¤accessed.
e ðwsgi.input is used properly:

  - .read()  Ž "ed} òexactly one argument1 ½ Ãit returns a©   S dline, 
 Æ  __ã #__= : s; b.close� 1not""ed! N+`provid# Xó `errorsÕ ô k!()Z.  ¯ sw Ý  ¢ ¦	¢ –°e response Cator‹Z0is û | ð	 (it should be a list ofzSingleGs; a
    ò will work, but perform horribly).Uu ³.__next__()›Ø ¦´  \ ¦  õed over until start_ç  ha¯c  beenÑ0 (tÑcan signal eißPa serJ áor applicationÙ Õ
¸ .·ð(doesn't raise excepB À, only printsR òsys.stderr, because we* `know i8 N ^ AwhenvaobjectE ðis garbage collected).
"""
__all__ = ['validî ']


imporE
 4sys @warnúó

header_re = re.compile(r'^[a-zA-Z] ó0-9\-_]*$')
bad_9 _value?  ò[\000-\037]')

class WSGIW{ ( !):â  Ë  ZRSFd inÃ!to8 °-spec-relatBF ö = ó	
def assert_(cond, *args` !ifñ  q  m ÀA5 @ionEÒ(6 
P bcheck_&a_type(ï v, title[     ç7strf Æ : ì w   • �"{0} mustŠ1of \ ð str (got {1})".g1at(†  #pr} "))¹ 
(â)   / j Wj  e÷ tw=am#  ) +R, thi{rmiddlewR o 2B forG  OPliancç� a numberZqlevels.÷ WThis J  `¯amodifyPreque•rain anyC 2way…”b:an Ü0 if1 ñ thing seems off@ (Æº �a failure7ÿ‚ Wq, whichC z "be  ed= ù0 --A 0re'v@ way ¤ z ‚1at ¸bpoint)  ±c  ä‚lint_app©ð, **kw):
        asseó rt_(len(args) == 2, "Two arguments required")
  @asse: ÷not kw, "No keyword9 Yallow8 ð
environ, start_response =6 %s
` ccheck_. ( )  ñ# We use this to 1 õ if the application returns withoutb ›# calling‹ :" 
£ _ ved = []‰ ;defA  _wrapper(*Sv, **kw)V  A>
xI or  E3, (Ž  8   ð"Invalid number of;ª�: %s" % Í6,))° : v ´ < cstatus§9[0]— eheader 1 +ifÖ 
 ^ „exc_info` 2B Oelse5 
FNone“ R  ³Btus(½ 
! º ( # Ãcontent_typeJ /, 0 Ì (	 ¶ š Gù £ Prted.30nd(Ê 
† Às WriteWZ
D i)h 0ð['wsgi.input'] = I
 E % | 
 aerrorsE E E & ‹ €iteratorÛ–Ò<‡ µH 0is Á )U and  ™!= False,œ+"TCmust5 an? ,<@only ·empty list"Ë 3p (	 " ¬Iô %* î È#edB > ù lint_app

classµ:æ uð __init__(self, ê_êl  ÿ' =" E CreadA ®< y	’1™Fv = ` .J D €C ;¶v) is bytesE ó v’ Oline– ?<= – N š 8s› $ ˆ  $5 Ã:" > ’=f0qine in $ 
$	~   C �À)
        reñturn lines

    def __iter__(self):   vwhile 1    < 0 = + P.read %()4  # aif notf 
<    reƒ 	0 Qyield/ ” \close‘ òassert_(0, "input.' a) mustu öbe called")

class ErrorWrapper:b c__initö €, wsgi_e+ sç  ( =$ H Bwritª (, ; ­ ætype(s) is str*[ .D )V \flush 3 ! 2 D  Žs7 W, seqÊ 1forc0 in 
™Y A (B V a   L Û  ˆ‰W*‰Œ rs  ‚ 'r‰$ 3 __úÑŒ[bytesŽR %(s;ßPartialIteratE M . ¾  À  Â   Â ? õ# We want to make sure¸ [ û %edWf ¹ .d    e, Noneì , *E ÷check_start_response¼ ¹�originali |    / ] 0 =  (œ 
  ; ´¡•d = FalseH › ? =  …S Y - 4nexEö "  2  %d,   ì "s Ir after Ð "æ @v = e 
½  1if cvc q Û
á� %&, z |qed non-8 ùtring (%r)" % (v,)k Í ó  … }  T| ; 
òThe application }‘s and we n!ed at± òover its body, but% “A has"†yet been( r  ¥ ! =/Á’ & vº¦	P  Í ¤6Tru£ if” Aattr5 .%1, 'T 'P  ¨ T . c(¼ð__del__(self):
     ÷	   if not self.closed:
  ùsys.stderr.write(  ) ò"Iterator garbage collected without being ` %")C ‡assert_(~ , \ $ó
def check_environ( )Ú u Etype † is dict ""E> @ment  &Ðof the right @ T: %r E  *   %)"Ä 0% (' " 4), Œ !)
% ÷for key in ['REQUEST_METHOD', 'SERVER_NAME VPORT'ª  )  Ð'wsgi.version/  Uinput oerrors= µmultithread3  oproces9 ¢run_once']e � ià ú 
¸ 	f@miss(€required Q¯" % (key,)6ñHTTP_CONTENT_TYP*	 oLENGTH›  Ù$in™Ÿ ashould/Ahave†key: %s ó ú P"(use …instead)Â  Ó D[5:]Ê ñif 'QUERY_STRING'_ � N�warnings.	 
†	B ¬!in¡ DWSGIÜ  ¡; Qcgi '� ¯   Ð'module will ¾  ù€argv wheK °is variablec ¬,G ò so application pú are more likely'f ¤ Wß á7c.keys(Ã ±  : .'9 „	Ì p# ExtenÀ, we don't c…  ab�1its¿	6 …continue ÀÂ`[key]):strÆ Ë&al- %s/  f€a stringÔp (value 0 Ù ì¡ 9w > ,§ 
² Vtuple´ "/ ÝQbe a ) B (%r¸‚[T  Ž ° € 
' Àurl_scheme']¥`('httpU  <s')‰ 1 € unknown 9Y îé1­  "']r' ’(   ) þP# @@:)Àse need fillš2out’$ifU·]Ã¥@'GETû 1HEA×1POS pOPTIONS QPATCH	 U QDELETËgTRACE'ú 
""U; KJÀron['REQUESTÇ_METHOD'],
  ÑWSGIWarning)
 ñassert_(not environ.get('SCRIPT_NAME')+ H $or* [& ö].startswith('/')| "N ‘ doesn't .  . Ÿ /: %r" %Y € « ŸPATH_INFO© $ § 	& ¥ / "']£ $ifÂ EõCONTENT_LENGTH'):IÍ Cint(x+['/ v]) >= 0G ‚š"Invalid - A
  ¡ | ?if ë£ 'ç 4 iná – xOne of è5or : ö  are required ( "–  Ù   ú
"should at least be '/' iZ ¢is empty)"wMI|‹ P') !=I µ 	’0canm S; it ˆ qinstead‡ v', and ± "Æ / A ò	")

def check_input(wsgi €for attrR‘['read',  Hline s ®__iter__'] 0hasJ d ,[ €\ „ .� U (%r)ã�have the5 †ibute %sç  < .% ^ 	æ berrors%  è PflushÐ Awritæ 	  ó sÛ X Ü ! Ý &? ` 	Þ rstatus( Ù  # =ç³string_type( A, "S8 ¥Â# Implicitly5 ð that we can turnzò into an integerïm p_code =9ñtus.split(None, 1)[0]K3len‰ 7 h) == 3 œ  S Bs mulôthree charactersV€ r Pint =« 	k 	ˆ * e>= 100| R is iÒm 2intl 6if Í ƒ) < 4 or1[3]Û" ') ­wá s.	 (�     C"The:  ².À!a `-digitÚ  …õF ñfollowed by a single space#ac ¼explanationP*, ’7ƒheaders( uÝg  Cðlist,
        "Hóeaders (%r) must be of type list: %r"
  B% (h2 ,#  1)))$ Ãfor item in ) :  @ €assert_(\ (& µ) is tuple,%  ) ´"IndividualF ¡ < 
¢  @ !% _ £ j     ‡ 1len' b) == 2À    Ñname, value =Î �   ñ = check_string_Î   A, "H  "Q K 7  8  9 ª  P û.lower() != 'status'6QThe S 6a cannoÓöused; it conflicts with CGI ß ÿ ò"script, and HTTP n  ¬ M Ógiven throughi sD (Ë  šR)." %NÙ P'\n' U !in5t )': å cQs may? €contain ; €or '\\n'}  {  =z �±_re.search(' c, "BadÕ ’ F  »  9 P.endsPQ('-')Æ   ;_')Í FNameÆ 0end8@'-' Å _Ã sif bad_Â iÈ  )u Óo0à +  á   (bad char )"% Í,v €.group(0C
def) ž2ent*M,dsª  [ 2, "Û1codž2nt(! ò.split(None, 1)[0]õð)# @@: need one more person to verify this interpretation�RFC 2616 #Jð http://www.w3.org/Protocols/rfc.  ±-sec10.htmlA òNO_MESSAGE_BODY = (204, 304«  = N}D   '  J  * · !ifÍDC== '–-À'01if ` Ä;in ¹ 
,  _ areturnå     s°("Content-TU¸B fouïëa %s response,I K  b"which¥ š v  Ñ ] Q.") %· MÄ © O"No « 
»  - s)[ ')
í”exc_info(	 âh   O ­ ë ƒ0   Ù-"6 ¨!isöa< ´ Ž B ø4  Ž D0# Mýð exc_info checksô?

def check_iterator(	 ð"):
    # Technically a bytestring is legal, which Ñwhy it's a re2 3badH òidea, because it may  ðthe response to b Tturne= Õcharacter-by- Z õassert_(not isinstanceÈ r, (str,¹ 1)),4  Ú À"You should <  rer 3 a ß ôas your application 6, "H  s Fead A ðingle-item list contain5BÁ.")
"""Excep_  clÍ ús raised by urllib.

The base e.  v…URLError‰ñ nherits from OS ð.  It
doesn't define any behavior of 5 pown, buM ™v š • for all
„ sI ñ	d in this package.

HTTPz  £ -an¹ 1thad Ðalso a valid 5 
Z Í¼ © "esh  waº ?5  protocol eRs areT 
Zqs, withâðatus code, headers, andá0odyp an some»‰exts,
an ¾@want°PhandlNå AlikeUgular… .ò„

importß¢ ä

__all__ = ['×@', 'ã M  ò ContentTooShort B]


¦8 (úÊ ‘� sub-typeø* ø$t ' shG &!ofñ#‘implementp.  need	ñoverride __init__Uƒ__str__.B ñIt sets self.argsXÒcompatibility©TotherÀ= 1subæ "es­ @ ¯ Ahave¡ 0typ² Y 2matN „errno inI Qlot 0  1str5 Ås P1.  TÎ åàbe better than+BhingÍ  @ë (Ð ,øóson, filename=Noneƒ w & ö =, ’  treason   %ifT  Á ³ [ § >   ^ { % =2 
G ¯ �® — ½’'<urlopenGr %s>' %«™ g“(X,Ð³.addinfourlk B"""RÝBwhenï|@occu† zActs FBnon-% ¦ """~q__superk/ =} .¤¡¹ ,pmsg, hdŒ #fp· [ 3! =* R šmsg = msg  H ! =O 
  fpžp 4Í   # þL ò depend on fp be`I A ðobject.  In some casóes, the HTTPError may not have a valid
  ó# file object.  If this happenL ÷
simplest workaround is toG  b ¡initializeƒ Õbase classes.+ Pif fp?  2 UNone:  ” Ðself.__super_Q ñ(fp, hdrs, url, code)
4 Àdef __str__(8 )K €return ' ¡%s: %s' % - .I  , 8 I.msgS ?repT <U T /r>U ²# since URL7 ÷specifies a .reason attribute,¼¢should alsl�#  providb&is5 ò. See issue13211 for discussion•@property>| =m= headers> 	 ¸? . u.setter‚  E #,  Œ …  G $ = 1


Vñ ContentTooShort\(eD ð"""Exception raised when downloaded s²Adoes(rmatch c\ µ-length."""³ _˜t�, messageš� y  ÍŒ .3 )S  ) æ s $ =} ð
"""Parse (absolute and relative)R�s.

urlp( Pmodul }ad uponŒãfollowing RFC € ca A   ð3986 (STD66): "Uniform Resource Ident¶ðrs" by T. Berners-Lee, R. Fielding
¦ ðL.  Masinter, January 2005.

q á2732 : "Format²ðLiteral IPv6 Addre=0 inê  'sw ðR.Hinden, B.Carpe` q o ÔDecember 1999p _396: Ú ð (URI)": Generic Syntaxy ?T.
ð ,—'L.ð `August 8 ð 68: "The mailtoÔ � scheme",b ×P.Hoffman , LL øJ. Zawinski, JulyW 0180W R ¸‚Locatorsd ¦°, UC IrvineW dne
199�0173W N  )/L)		ØM.
McCahill, –4v isóqsidered°ñcurrent standardañany future change„ý41conÀ`with iÜ z- 3is
k l& äñ rely compliant B  ¶ñ	due to defacto
scenariosÀ †2ing ƒPbackwÀ  O ðatibility purpos¬Ssome
7 ð quirks from older®ðs are retained. Ç ðtestcases in
test_urlparseô2.py provides a good indicator of parsing behavior.
"""

import re
 4sys Etype ¥collection ð
warnings

__all__ = ["urll @e",  (un Cjoin ¦defrag",
   1 Ssplit$ (un QencodX S ;_qs>  l? Aquot- 	 U_plus ¬_from_byteC !un/  *  :  /to: DÐ QResul¿ VParse S×  	ô 9 B“ ' ">  C  à]

# A classifì0ioníð	schemes.
# The empty str. òes URLs with no 4 ð specified,
# be2 ñthe default value returned by â€œurl¨sâ€� and Žðâ€�.

uses_relative&€'', 'ftp "ht `gopher "nn Yimap'!+P'wais) @file  C  s
   ?mms: €prospero$ 1rts�   u s’ �p 1svn  `vn+ssh wo Swss']ß onetlocÝ ntelnet¥ 'ö  å Ó   'â } ì ¯ B'snež ì 
_rsync~  ë A 'nfw 0git2git€ } mparams dlI ¦  Ü   Z   „ û   '» 1   ÃiÓ?sip  'CÒ 0tel¿%ñHse are not actually used anymore, but should stay for backwards
# compatibility.  (TheyU ÂundocumentedH ðhave a public-lookiñ	name.)

non_hierarchical:h9QmailtÉñ/¼'gP] (s4ÎQqueryx  _ y  xC   
‘bŠ '»  ¨ I   °|   - —# 'ø  u  D V  'I¸  ; 
° -² D   '\ n Charactersie: ¾"s
GP_charòý('abcdefghijklmnopqrstuvwxyz'v ÿ'ABCDEFGHIJKLMNOPQRSTUVWXYZ-  À0123456789'
  ñN'+-.')

# Unsafe bytes to be removed per WHATWG spec
_UNSAFE_URL_BYTES_TO_REMOVE = ['\t', '\r 0n']_ ò<XXX: Consider replacing with functools.lru_cache
MAX_CACHE_SIZE = 20
_parse! ò = {}

def clear @():
ã @"""C ` the p6  W A and rquoters A."""7 a .W "()  _5   Ù @HelpI 3for=ð2handling
# For 3.2, we deliberately require applications that
# h@ Ñe improperly x Qd URL› doÃ àir own
# decodL Ü "en ñ. If valid use cases are
# presented—  maŽ àlax this by usM xlatin-1` °internally î p3.3
_imÁ 4it_y ¨ = 'ascii' Prrors rstrict'¹“_noop(obj¶£return obj  U €e_result) !,  Ning={ ,« ÿ e€ 3  w .^ !e( Ring, : )� kpe_args( � #T Ž ‚tuple(x.s ’ Ñ if x else ''�Px in – ® Scoerc® * ’# Invokes;eK �necessaryü¡create strP W#;¢ «"e _ Ãd inputs aloÐ0  ßPropriN Å6 2ionõ3ion. @  - Ë  z W  •: ¡ otherwise& Astr_5 Ñ = isinstance¨@[0],Ï Í ½4arg/B[1:] 7A# Weç@ial-7 l` emptyB   to support | : ð"scheme=''" defaultAPumentXEsome¾ s9  if& `
¸ ´ 0 !=z Ü ©  s °raise TypeEÑÀ("Cannot mix3 S @non-P1arg‰ "s" if# V á � Qs + (¢,1  _’)) ž«,SR· Ï ec!ð re more helpfulð0n sB!e ï’s
class _: €MixinStrù3ect®²"""Standard`0ach]�  Ÿï"d p`s fromê  $ Þíá_slots__ = ()
� OI ge(selfàÕ#='Ê– Ž¿ 9 .`ed_cou7�part(*(xbøÃ @ O))

 Bž¦Àarsed resultñs from bytes to str"""
    __slots__ = ()
 ñ%def decode(self, encoding='ascii', errors='strict'):9  Q preturn 9 "._F òd_counterpart(*(x. (X P ’) for x i@ ó))


class _NetlocResultMixinBase(object~ ñ"""Shared methodsN Áthe parsed r>  5 ñs containing a n` � element	‘@propertyó  ,rusernam.�  % rinfo[0]fH �passwordvH 1H Ohost�  # =Ÿ  ”  ±   pif not   D Ù  ÝANoneþ   ð# Scoped IPv6 address may have zone e Á, which mustc ×be lowercasedO õ'like http://[fe80::822a:a8ff:fe49:470c%tESt]:1234/keysA ôseparator = '%' if isinstance(Ø ,µ) else b'%'? ! ‚percent,Ã =.Çeition(l )@ #G .ã S() + P ! +Q <ortNportµ%1]u 1if $ !isZ  
¹:try  º3 `= int( F, 10È  ! Ðexcept ValueEòD Ðmessage = f'P§ Qcould† pbe castq�integer vJ P as {q 6!r}x p   Wraises (b )Ä Û ÷  0 °b( 0 <=‡<= 65535C *   ^ "µ ñ out of range 0-> "Ô ´ ·!__—�_getitem> zÿ(types.GenericAliasË	OStr(á7, _ó3StrÓ ¶P_tPní U5 ,À_» Ï 
 # =*.Í6'@',&if8 
/ Y  SY î$, 
 0 = $  h d'':^  Äò ^_; 
j  &  9 = 4 ò
.  t  ˜ ( =Š 	5 * ³ { 1{Q_, _,h l - ðave_open_br, bracketed = hostinfo.paãrtition('[')
  õif have_open_br:    õhostname, _, port = bracketed.paR ]R  9 _2  9 - :- Oelset  ˆ OinfoF aif not¢ 
M  { u = NoneÙ preturn T Ü  % ÿ


class _NetlocResultMixinBytes(   as* )‚ ñ __slots__ = ()
~ ‘@property �def _userÚ S(self;  An† 0 =  . 6   5 ,» @ ,Ð  
 2 = / &.r¡7b'@uô / ®  V    Z ¤password, 
 0 = $  : �(b'Ô I ’	F 
k  & V 	£ u  ™ ( =‹ 	5 Ø* ´ }  Ê }Û; n_§b,B% =¶	M >/b'¡
ÎŒ ü  Œä   K	È  l
  £°from collecÊAs im?  Ž ò dtuple

_Defrag—@Base£2ame  ((' €', 'url 1 ßment')
_Split> ƒ'#  B cschemev¹ path queryW _ParseW # W nparams^ õ a.__doc~H"""
õ U(url,œ q)

A 2-=ð that contains the uwithout3 ñ  identifier and( B
 `s a seµ pte argud .
‘ ²  :url¶ €The URL € ? no€ .L � 
Q P
Frag„ Â ¡ !d ^BURL,õ allows indirect4  ca|ð of a
secondary resource b ùference to a prim#  51addŽ$alY Pying
D!rmb )n ÏÓ  (‰,Š Ðth, query, frðagment)

A 5-tuple that contains the differen ð>mponents of a URL. Similar to
ParseResult, but does not split params.
"""

_S . ðBase.scheme.__doc__ = """Specifiesl  " A for™ Ÿrequest."O jnetlocO ð
Network location wherõ #e N Ï is made to.© KpathX ðThe hierarchical $ ‚, such aG  € to a fih¯o downloadh _queryi   3 co�,´Inon-Œ Cdata% °along with  1
inª M RidenttÑa resource insPscopeýTURI's‘[and
nZÕ "fruØ F   r³ Õlows indirect! Á‰•secondary±  
b ¸cÌx a prim# � and addi	$alY ±ying inform#É Ý¯	¨û(§", ‚,b  arams, ¾$, }6}âop_d
” z [e,
_Ö ´ B 	
" B  è@ 	  >  &@  ÝP8Qetersü0lasL`th eleÁP used\Edereô`he URIº@orde¡ð  provide
access2 0perê¡ some operô" oïÿpÌ­ o	! î C 	$ ñ


# For backwards¾ñatibility, alias _Na²MixinStr
#   Ã ë0no  er�tÚó0ocuYbed APIÌ it is
# reàed since depreŒ 6 # ‘n't worth1whassle
u =š Ð
# StructuredÈ¢ult object÷0str›¸€class De\ ((_  ß 2, _ ý á):
    __slotsc!() ó def geturl(self)  - 0if  .i  C     r4 n" ²url + '#' + 3 b  . Oelse@ 
"

Ø S(S,?³ Ü À:
        re÷turn urlunsplit(self)

class ParseResult(_ ÒBase, _Netloc  ñMixinStr):
    __slots__ = () ¢def geturle )  - r † ps ! ñ

# Structured rˆ ó objects for bytes data± bDefrag’ B )(_ ¸   ² % ´ !0if +.p FmentÎ Ò " Êurl + b'#' +4  / OelseA 
‘S¤¿ º ((_ Þ –* ä !˜c #* � -%ðet up the encode/de 3`pairs
€R_fix_IÔ_transcoding(‘  1  º¢(G(,  Ò ,+ “',  ) R,l) < í_Õ Bd, _æ Td in Î ³ D- ., å_counterpart =C ¶ ( .: 1 ~ /

D_
del  
2url»ôurl, scheme='', allow_Lcs=True”1"""(ò	 a URL into 6 componentsô <M a>://<n—ô>/<path>;<params>?<query>#<h !>
ÿ 4The*ðis a named 6-tuple with fields correspon50 tosC øabove. It is either aÓ8 or âË:BdepeW  onW � type of  CÆ Veter.¶ @user® ò, password, host Öand port sub-1 U #» ðcan also be accessed as attribua† r§#ed¸ ˆ }P argu‘ provides½ Ådefault valuÒ 2 � Ëƒ when no KAfounç3urlp ,If. ) 0Fal“ no¸ 1emp‰@made¦ se= te� s GP from  € previouíc€, which *#beßH  a ÚY  !Noi ñat % escapes are not expanded.> 1""" “, _coerce× ª Wargs(+ —¶  =È ( ]à)
    scheme, ñ@netloc, url, query, fragment = splitresult
    if scheme in uses_params and ';' 1rl:-  1 X $ 1= _P  Q(url)( Felse2  Q = '' ~ ‘ = ParseRŒ (… ), ¿ : Ç e ò return _coerce_V ( n)

defž • }if '/' Û 0i =7‘.find(';'E".r 2/')x  ‚if i < 0P     ’ "ì 

a Q 7 A[:i]u h[i+1:]Å  c¢, start=0)~ °delim = len ð)   # position of end °domain part ¦  default is& žPfor c`'/?#':Ø p# look  m ðiters; the order? ÂNOT importanZ : w0 Wc¿  §  " 0 # `Q firs˜ Qthis 7 �  $ 3if I A>= 0“    #ÉUfound6   H q = min( ,J  #ò’ earliestv ;I œv:F ¥ !:]q) (fd, rest†ScheckÁ »cif notô3 or
 “.isascii('  Ê ` ” �1ing’`charac’ò like \u2100 that expand to 'a/c~`# IDNAù ñs NFKC equivalence, so normalize_ �Á | ãÁ unicodedata 4n =¼ ð replace('@', ''i—# ignore ¬ ò already include·G .B :B  a # but1 z@surrð 2textA #A £ \ ? 32§Ø . ('(B', n° ¶$ =ñ 2† ¢ ¤ ,F6@:'% "if_	> B òaise ValueError("' S '" +bñ + "' contains invalid " +è  G  "~ un· × ïa/"³1urlÙ Q,!´='', allow_Pcs=True¦1"""Ñò	 a URL into 5 components<éR>://<Ü ¡>/<path>?<®4>#<_ !>
Ò 0TheO¨ña named 5-tuple with fields correspondo£C ‚above. Iê�ither a S€ } ÑBytes object,B BdepeW  onW P typeH Œ0urlXvameter.¶ @user® ò, password, host  › 1V sub-( U y ñcan also be accessed as attribu¨ Àf the returnñ2ed object.

    The scheme argument provides the default value of 2 A `compon7 twhen noO ó is found in urlp ÐIf allow_fragn °s is False,= pattempt ðmade to separatez s ;  | @from  – previous ñ, which can be eitherH Ópath or query  !Noi ñat % escapes are not expanded.> 2"""CCurl,õ Ð, _coerce_res6= Wargs(+ )E {= bool( , Pkey =Kn ( `, typef ) ©@ ñcached = _parse_ â.get(key, None) 1if  !d:¤  'ereturnÍ Þ (& 5 Hlen(\ õ) >= MAX_CACHE_SIZE: # avoid runaway growthi Rclear› (Y ‚netloc =§5 = ÿA= ''9 i’.find(':'9 †if i > 0Æ Sfor c�F[:i]  ä  ÷ è#inÏj_chars&  * Qbreakz   Jelse$ v,¬š  m �.lower() b[i+1:]@ – b– ö_UNSAFE_URL_BYTES_TO_REMOVE` 2urlT ò .replace(b, "")L  ifu Æ[:2] == '//': I  Rsplit  22, 27 Ó €if (('['– # „ and ']'! 2) oK 5  (' 2in # 9 [9 )˜  8 praise Vdò	Error("Invalid IPv6 URL"ž i@š #¬ 6urlX m- …õ u('#', 1Q /'?= n: ?: b_checkæ ( S Pv = S^R($ �,Î,Í: >‘[key] = vi�av)

deô!unÖ(sc‘"""Put a   dL  back togep again.ris may ß ýa} ðslightly different, but equivalýqURL, if„ÃURL that wasv G ð'originally had redundant delimiters, e.g. a ? with an y/F (–‘raft stat§ aty sÄe–  ).¥ `ƒ W-ms‹Å (z  I  
ù*—ë if'am_Û¢"%s;%s" % —¦ 5 Rurlun lÀ query, fragð,ment)))

def urlunsplit(components):
    """Combine the ele; ðs of a tuple as returned byN L �) into aH  Y €lete URL2 ða string. The data argu] ñ can be any five-item iterable.O ð(This may result in a slightly different, but equivalent~ A, ifÌ  Š AthatQ ðwas parsed originally had unnecessary delimŠ ñs (for example, a ? with anO Áempty query;m °RFC states t   gse arež Q)."""? ð scheme, netloc,T,N `, frag'£, _coerce_1= (=  · = `args(*Ÿø)E #if} R or (� S and  ‚in uses_¢  ó url[:2] != '//'A Š id% 1%  ':Ú  0 0' + |  3 1url / (f gor '')* #if� ­9 ¦ @+ ':A 1urlZ "ifF/  n @+ '?, µ. m1 #1 $ 4 
›F(urll“join(baseØdallow_F cs=True=Q"""JoÜ 0  ¾E�a possibl RlativXñto form an absolute• àinterpretation¼ Ìelattert ò0ot i î Ï @0not©#  8 
n  
 Û e¢ v) sbµ2, bïq, bpath qrams, bœ4, b-A = \t  ú  1urlÆ`K'', _l k j i "pah g f Uurl, ¸ j › ¤ ,  Uƒ  PM"reÍ]7HO ï \ C Ñ A  ÖE  9 ØX "un@óƒ"Ñ  @  P yA ° $ =õC ¶ 0ot t ñ %M Ç  =$˜ %  O 
  R ÚD  †   2 	 1 "O¢ Ø †  `_partsž  ï .Y2'/'Æ!if¯% #[-W'à #hð last item is not a ódirectory, so will not be taken into account
  õ# in resolving the relative path) ñdel base_parts[-1]
 ò	# for rfc3986, ignore al. D q should] ð first characterž Qroot.L !if0 Á[:1] == '/':  ¬ ¡segments =$ ±.split('/')# Oelse- ´ / +:  ] P# fil� rout elej athat w» @causñdundant slashes on re-joining‰ O H V9ed_HÈ @[1:-ç z z(None,  )cŸI C = [{ y0segÂ8  ifM G'..H   6try)     	f R.pop(Z    þexcept IndexErrorC #ÿPny ..� J¢otherwise T'anS B q   ó# when popped from­#if  ¾ ŠJ Epass (el‡continue. \ — 
,£append(seg±] û  ) ¡¶('.', '..')8ð# do some post-processÊ �here. if4DlastLf was a¤Edir,© #/  n we need ï›   ` trail\ 5'/'2 É #''È ð"return _coerce_result(urlunparse((scheme, netloc,³.(b @) or$ Ð, params, que±1fraßð )))


def urlde  p 4ð"""Removes any existÒ  '  n!BURL.9RÀ  0rtuple oPX  1 “ed URL an�† Q.  IfÂ  È "  ”ained no o !s,Ydsecond70 is > Âempty stringâ1""" Kurl,X% = Aargs÷ , `if '#'E6url=ás, n, p, a, q,•   =7›6urlÀò  ¼
A 2'')1 
K í F = '4M ¡ 'D¾R44 ¦  ãp_hexdigY ð	0123456789ABCDEFabcdef'
# �tobyte =  nquote_to_ "s(_"u! p'abc%20U `) -> b   .�s# Note:«ðs are encoded as UTF-8. ThisßÐonly an issue¥3it !c€# unesca´–non-ASCIIõÔs, which URIsn ·× ï“# Is it a¥ ð-like object?
    ð    string.split
   ¡return b'' âif isinstance(2 ,: !):   3    =  Q ñ encode('utf-8')( Fbits" s C(b'% pif len(% f) == 1] � d K  reJ [- A[0]] Òappend = res.  ñ# Delay the initialization of ó
table to not waste memory@ i' Afunc7 ñ is never called& ñglobal _hextobyte 'if † is NoneÙ . Ã = {(a + b).<0): H “s.fromhex X  s
 �for a inp @dig  b }9   @item >61:]� 6try  ` G(¨ [= R[:2]]Ô %   )  '2: ÿ except KeyError_  K   O h ñb''.join(res)

_asciireõö.compile('([\x00-\x7f]+)')

def unquotÁgCing=¥0, e¢ ³s='replace'àB"""R á %xx escapes bSðir single-character equivalent. The op7!al‚w C andr ð parameters specify how’ deH‘ percent-= rñsequences into Uni+ ‡ €s, as ac€#ed¯ SW (\qmethod.ž ¼By default,u  q Bare C Ñd with UTF-8,Ó binvali
2 W‹ !a c@holdH;!.
† «ð'abc%20def') ->     '­ 1"""/ ¡=Ã TC\ A_to_" Ñ").Ñ (c4ing$aif '%'!#inåÌšF ¨ ^  #= ‘4 —2   %= ±2  ×4 = – æ " >1 .†range(1,¦7, 2_³_ � ?[i]`a ¢C 2 C + 1Hº
üÔñparse_qs(qs, keep_blank_values=False«@ict_-  ð 
 v  ~ð, max_num_fields=Ë@, se½gtor='&1P™ á a query givenŽ;` argum!ñ „ A &s: =qs:‡S W # be@6sed7 
ð: flag indicating whe÷ther blank values in
  ópercent-encoded queries should be treated asI ‰strings.H bA truee ò  indicates that7 S aretainT 	E © ` ÿ  The default fals` C  ì `are toÅ Pignorq (ndÑ Éif they wereG ånot included.
  › ôct_parsing: flagî Ping wï ³to do with ) k error2#IfÔ &(tç #),,  ¼ “silently ¿ 
s!Ift2 �raise a VéEr § exceptionÄ ê ­ 3andm Ð: specify how2 de •sequences J�into Uni3 °characters,2 ac� Ped byjr bytes._ ˆ() methoaðmax_num_fields: int. If set,A Šn throwsç ÇÃ A mobhan n S A reaŽ  ›we_qsl()ðseparator: str. ‚`symbolƒuse for &  E ¼ 4«y argumentçDÀs@ &j `ReturnÉ 0dic£2aryà1"""`¢ Pd_res C= {} Qirs =\Á ‘qs, keep_@_ý,Á i­,=  °
 =	 P=µ8 
ª= ,#3or=-1or)‚  @Uname,,q pairs:  œ 0if ! 2 inä "  & 	[1 ‘].append(n  * Oelse< A = [8 ]ˆ rž
€ b


def 9x =F©~ \  ”  s…='utf-8'{º'replace', YX=None^B'&')Ý a"""Par‘Qgiven…%ng£‡A¶:æ=qs:ûS    ngË"be	d7 ƒ e’Ž¯	ª÷ /s.’C á
, •’/  ‡"Àg what to do÷ with parsing errors. If
  ófalse (the default),, ð are silently ignoredA i true,G ^ ð  raise a ValueEr Å exception.
2 Pencod• 3andm ñ: specify how to decode percent-3 Åed sequencesM  Í �into Uni3 ðcharacters, as ac� `ed by ç bbytes._ —() method� ñmax_num_fields: intõ @set,A ‰n throwsç 
Ž f( !reAÂmore than n S A reaŽ  ›we_qsl()€ ðseparator: str. The symbolƒuse for &  E Õ ùquery arguments.� DÙs@ &j `ReturnÉ Alist-0G-dñ RendedE 1"""M pqs, _co�•_result = �args(qs)* › \or, _$  )dif notÎ por or ( µisinstance(4 �, (str, ÂA))):o   xv4("SFð must be of typeU 6"orH #."‹ Z# If ý0 is@inedÒpn checkÎt p numberZ Ú� #6 @less( nR  Ïpis prev¨ð a memory exhaus(C DOSI Ðattack via poÆ RodiesØCmanyQ©i¾  KFNone+Ûö  = 1 + qs.counthÇ XT <õ §  (   „@'Max. 	#Seded'w²pairs = [s1Ù@1 in• Hspli• ]n r+   `name_vn 6 L ë ]$  p pstrict_�6ing2  È �continueo   Vnv = E .™ i'=', 1+Êlen(nv) != 2T !ifws  f ?R"bad Ø^–: %r" % (‹ &,)€  D Á# Handle casñ a Î @rol-5 9Õno equal signå  ? Òif keep_blankVsÈ  & Ênv.append('' 7elsi ,    ‚ 	P2if *@[1])ñu » û= nv[0].replace('+', ' ‚ + qunquote*!, ;Ding=	 á=¶
Å C 
ëJ 
( u— 1— , ˜  ™ 5 P…( › À     r.appenðNd((name, value))
    return r

def unquote_plus(string, encoding='utf-8', errors='replace'):
L t"""LikeF â(), but also r+  Z ñ signs by spaces, as required forš Œ €ing HTML mº 7s.
! ­ ð'%7e/abc+def') -> '~   / 1""" × 2 = 	 .š ™('+', ' '… e,ñ*)

_ALWAYS_SAFE = frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'‹  5 ÿb'abcdefghijklmnopqrstuvwxyz7 
¯0123456789' 
i_.-~')· ø _BYTES = bytes(Ò �)
_safe_ðrs = {}

class Q,õr(collections.defaultdict)`A mappÊBfrome ó (in range(0,256)) to“áS�õÑ are percent-“!edK   ñ, unless the key < 128, andl!in "Î Ñ" set (either  specified     @, or= Ï   !).G Fð# Keeps a cache internally, usì ,¾ñ efficiency (lookupsS B# ofF d¹ ðs don't call Python code aKlˆ  ®á__init__(self,º u U!""ì :%”s object.À  "  7 .ð (= ôp.union( )kn Creprn h ð# Without this, will just displayÞaK ö  � }Á"<%s %r>" % Ì 1.__bP__.__´@__, :  )• 0miso˜ 9, b› eHandle¦ - �. Store Òds2 inƒ 0ñ¨  ù°chr(b) if b/ >òelse '%{:02X}'.format(bI @  + ‚[b] = reô  þ   }‘ j ~0='/n€DNoney= ë 2"""<  : iaabc%20s�Each partq±a URL, e.g.¡path info, ñquery, etc., has aC �different G ðreserved character‚@at mbgQ. TheB ª A fun2  oP Gð	utious (not minimal) way6 „ ¸S1mosÍ QtheseÛ <ÀRFC 3986 Uni‘ð  Resource Identìòr (URI): Generic Syntax list¦ K`followÑO(un)ï  Ž ð	   = ALPHA / DIGIT / "-" . _ ~‘8  : ógen-delims / sub > f !":J / ? # [ Ð]" / "@"
    ñ	sub-delims    = "!" / "$ & ' ( 0)"
( 
 A/ "* + , ; 1="
1 öEach of the reserved characters is ðin some component9 aa URL,L ðbut not necessarily in all) Rthem.u ñThe quote function %-escapes/ � ðthat are neitherR 1theq )un³ ñs ("always safe") norÚ @addig !alÜ �s set via J  0 G arg¡ “default fD #  P'/'. Æ ©   �  , 
!inZ Ðtypical usagep ú ñis being called on a path wher3 I Pexist( QslashÈ ¤ tto be pƒ È ðPython 3.7 updates from usI ÀRFC 2396 to  1398 ›ÁURL strings.� €Now, "~"ë ƒincludedŽP;of ‘  Œ L A andž@ may³ Ö�str or by¤ àobjects. encod«  6 aerrors‹ 2musk be specifiŒ f±  ¢ aL „  ³#op
]  q parameúX Py how!‘deal with� —non-ASCIIˆñ, as accepted byíAstr.i ‚e methodL3By `,å ¥='utf-8' (Vsú@ d~ € UTF-8),HŠ  ='_Ðct' (unsuppor… I ðraise a UnicodeEZ eES)“ """Càif isinstance(W 0ng,Y!):q  c!ifé    `return0 8ing1 Æ  Ìzis None7  #= 	<  ¨ �:   $= 9 Ÿ # =� ˆ(k ", <)1 7els“ %if— M Öz S2TypH!("9³() doesn't ‰$ 's 'Nå"w  3 m Å !isXk *J i ˜£ __‡ á’afe)

def¡Y_plus 7=''­ ¤ B= c"""Likà"()òalso replace ' 'Ë1'+'4�required ¡ :@HTML ôm values. Plus signszƒoriginalå1Krd unles2Athey º ÓQ. It    ¶Bhave¤¤   ó)(¡# Check ifÒ  .,¸~ çäb€éQ.  IfU #-Ðre are no spaòces, the regular quote will produce ð-ight answer.
    if ((isinstance(string, str) and ' ' not in qing) or;  ? ; Rbytes= b> %):= breturn¬ y ¡afe, encod‰ qerrors)5 8if « *  © S pspace =¶ 2 Nelse  —  î / =„  1 + M Œ ½ B ò.replace(' ', '+')

defW a_from_Ó(bs, safe='/'
r"""Like, ñ(), but accepts a 8 ð object rather than a�,¤AdoesÐ  ©pperform ring-to-C SÒ.  It always Æ £s an ASCII6 E	¾ ð'abc def\x3f') ->  ¡%20def%3f'… 1""" "if9] þ (Ž ,Ø carray) O°raise TypeE÷-("ƒ ¡) expectedB %s" ü &bsíÛ " '• ;Ð# Normalize '¤ò' by converting tos sPremov Bnon-;Bchar‡ Ë  B ! =í.{€e('ascii!rignore'¼ ¤ afÁ&‘([c for c~  ²if c < 128]= e@bs.r‹ðp(_ALWAYS_SAFE_BYTESÊ8afegy¢bs.decode(L 6try?zPr = _Ê _  s[ ]ß ex£A Key¬: 1  b P Q› r(I Ñ).__getitem__U µr.join([w ([)0har3bs]d3url`ôquery, doseq=Falsem'Æ@=Nona `s z  ´ t R_via=
 Cplus=@"""Ešñ'e a dict or sequence of two-element tuples into a URL   bv ±If any valu, ¦( uarg are`  ¥dÝ p is truÇ 1achI †  $is¼ ed»°a separate  0met< +Ifw iyR Ø oQorderù !heK [  ù V boutput‹Rmatch 9 1 G qinput.
 àThe componentsm aJ "ámay each be ei ›%or@GtypeP  }Eis~Ppassew wnF d�functionž qspecifi�Ã :! (“ …  D[ @onlyqaÐ  Ê° )s <X ±if hasattr(0, "'#s"Šà    query = quñery.items()
    else:
   ó# It's a bother at times that strings and ÷-like objects areJ ¥sequences. 6tryl p Dnon-*  ™ ó
 should not work with len²  8    # < SemptyŽ õs will fail thisx  / !ifD aquery)Ã  a ±isinstance( º[0], tuple)ª  C ù raise TypeError_ ä# Zero-length Ò Ós of all typeŸ �get here„ ‹succeed,L 1butsŒûminor nit.  Since the original implementationI ‚allowed ' di§Ì ‘  � ôbehavior probablybÌ ü õ# preserved for consistencys fexcept!
Bû
ty, va, tb = sys.exc_infoØf ("¨`a vali"n-‡d% "�  ©  ³"or mapping©0").Sñ _traceback(tb)
E al = [] !if‚VdoseqÉ  û �k, v in 1  y 7if R�k, bytesK òk = quote_via(k, safe’ H   
š    
9 bstr(k)> Ð, encoding, e sÕ  7   
� v� v� v_ � 
9  � v�  ”  òl.append(k + '=' + vr 
€õ 84    -elô?str� 
¹òQ V  „ a< 
 0# Ini…ñ sufficient testxZa-ness?ª;  1x =ëA   ¢ "    Z5t abf 
3ì c   < & 
    ±# loop over¯ À    for elt in v:
  ÿ
if isinstance(elt, bytes)3  J ò elt = quote_via9 _safe)j OelseU 0strY 0), Z ÿ, encoding, errorsl òl.append(k + '=' + elt0 ñreturn '&'.join(l)


def to_û C(urlÿ �warnings.	 õ ("urllib.parse./ ÿ) is deprecated as of 3.8", D) BionW^ é, stacklevel=2¥ _e  ” ¨ 
 S6"""+ ñ"URL") --> 'URL'."""Š ó2# Most URL schemes require ASCII. If that changes, the conversionF ó can be relaxed. °XXX get rid� Ò 
i0url÷ rh S2tryÌ     ¡url = url.ù1e("¥ ¢").decode(Y  +  except Uni E
L Yraise  (&‘ " + reprô! +Ê  Q  "¡tains non-�  ,‚racters"’ rb3url²aunwrapd — ò"""Transform a string like '<URL:Ÿþ://host/path>' into ' 1'.
¹ 4TheK iÚ èRed unÎ d „ t'¼ @t a ” 0pedÃ'y ~ v.ž pm if‘ñ [:1] == '<' and 2-1: ">'ä  CJ Ÿurl[1:-1]K 47  ö : *4:8 ^—splittypea °¹0 º", 1 Ä  @"useì 1url0() D?eadô0   @


_Ý ±prog = None®_' t6""" '7 p:opaqueÄ3ng'  I', ' &uglobal v \&if  ð ˆ t   , ð = re.compile('([^/:]+):(.*)', rDOTALL)²vmatch =[ . Éw  k ÿ‘, data =  s.groups¤ ‘ %- ‚.lower()5 X    Æ ,Ó©= s‚ u K0 K{Àreturn _spliàthost(url)


_ öprog = None
def _spli' –:
    """ 0'//9 ÷[:port]/path') --> ' B', ' A."""F uglobal w  &if 1 is‰ u  y , ð = re.compile('//([^/#?]*)(.*)', �DOTALL)
X vmatch =] . ü  [ 1if  m  ¾ _Õ  , Õ " =! ‘.groups()X ; ! 1and* ¦[0] != '/'M  ( %  ! +) B {return r    ‘q, url

˜€Puser(5 )i �warnings.	 ö ("urllib.parse.1 )Xòdeprecated as of 3.8, ™ ¬  @"usey K 1urlT Á() instead",¬ 5  
 Dc BionW™ â, stacklevel=2Aà hÑ ç  è €/ '  [:passwd]@Œ‡	!  ‰$ � & �, delim,Š! = ù .rpartition('@'¶ (5 2 if7 Q else²)B Å {  1 ®3 °ˆ¢   B1 
´ ¶µ ¨!>   ž" '™ 0 = t  Ûš:š  3, (/ ¢ 	œ?ortH  þ/s Hƒ   æ –!# �Btag(ƒ@#tagt £”0, ' 
ïS Ð <êX  } Í6ortËó M  g 6 ó  › ëd  F“ ó è:([0-9]ñ[ Q.fullãë|  p  ¹  , 5 ñ6ort5  © É@ a 	  Ú xng Ž  yf ?=-1> Àse urllib.paýrse.urlparse() instead",
  ñDeprecationWarning, stacklevel=2)4 ðreturn _splitnport(host, def )


def! Q=-1):K @"""SF  A P and A ", c ±ing numeric .4 R Pgivens Aault ô if no ':' found; ys to -1? X %al; pa validr rber areG ` afterW 	A @Noner  o Šbut not C A."""²  Ý  Blim,o =ñ p.rpartioB(':'^Å rt delim% § C ! == S Aelif # 6try  4 ›p = int(W`   ÿexcept ValueError9  ã n  4 “¸ !, [  	   “query(urlòwX s.	 ‘("urllib.�.1 c) is d�âed as of 3.8, T “  Y"use L òGÒ è 	 M7"""Ð q'/path?% r') -->  B', ' / * /   =Ý 	/?/+’F ? ©Qurl, Ù¥¤ ?tag£ / ¡ˆ Ÿ  q	Ÿ 
�  ˆM#tag™  —?tag• #•?tag“Oattr”0 •ˆ  – 
— ˜; 01=v«1 2 P2;...²>L 2 X', ['6  c  9 u', ...]ÙSwordsÎ3(';ÉL" R[0], 
 31:]]0 � (c å2 ¯.7L_qslØÀ            þ8   DeprecationWarning, stacklevel=2)
    return _splitvalue(attr)


def :6 7"""1 '2 == q') -->  B', ' A."""8  ) ‘, delim,  0 =  `.parti¬ I('='›   2, (. "if> ð else None)
"""An extensible library for opeû ðT URLs using a variety of protocols

The simplest way to use this module is to call the urlopen func½ ð,
which accepts a strt acontaiŠ aŒ   or a Requm ñobject (described
below).  ItÃ  s o sURL andµ Presulk Âs file-like
Q ;5 â2ed  � has some2µra methods |  | .ðOpenerDirector manageØ `collecô  FsHandlerc  ™ dat do
(ôactual work.  Each 3 q0menÃ  Ucular™` or
opi 0.  £“ iŽ smposite‚ À that invokeŽ #e
o €s neededÜ "‡ edš .  For exa
,! S
HTTPA   performs  A GET’bPOST rÏs ôdeals with
non-error¹Ê  B 1Red]_ çautomatically E  - � 301, 302 3g S307 rD  e !s,  0 4 £DigestAuthc 
U ! d p authenu h#

Ø±(url, data=kñ  -- Basic usage 5ð ame as original? ‘lib.  pasA url– ÊÜ 0ata‡@post "anS1URLÂ f
get aÕÛ0bacEÓOne differenc‹ ñ at you can also 
gQinsta- `nsteadº¡URL.  Rais×AURLEª`(subcl¿ Qof
OS !);S Vkr: ½ ' ", ‡  be
treated&  liÅð sponse.

build_� erd"FuOÇc<  çLnew ÿÔ q.
Will ã l�’default h�Ss.  A˜0one‚Dmore‰‘s as
arguŒ‚, eitherQ 0nceÞ+  Y fqt will
{ `ntiate¸!f e fA X  2'a [ © 
© t3  ] 2 beŠ Alled
 ¿ æ? ".
ƒ 'llJI$ll=ca•9 aCer.
7s»interest:

r¡-- Sets up½  User AgentÝ � ñPython-urllib cli $nd>
% �K4!leñ 0 8
P"re/Ds.

8T-- AnÐthat encapsulòates the state of a request.  The
 ñ can be as simpl
  7 �URL.  It ! ù@also include extra HTTP
headers, e.g. a User-Agent.

BaseHandler --

internals: ñand parent
_call_chain conventions

Exaœ óusage:

import urllib.× ð 

# set up auth=  caA ` info
  	 + =8 .Ë “BasicAuth² %()1 ò.add_password(realm='PDQ Applic O',
  ðuri='https://mahler:8092/site-upd¨?.pyA Ÿser='klem# œ ñd='geheim$parole')

proxy_sup.ø P ð  {"¦ A" : 	 ð://ahad-haam:3128"})aübuild a new opener that addsw ÚÒcaching FTP h#s
9 ‘ ] _ (½ ,\  ¿i~
“.CacheFTPî Ë »install it
.  Š ‘ N)

f<0url (äð	://www.python.org/')
"""9ñXXX issues:
# If anÔ §Terror&W0triÇ¼o perform
#5 ñfor some reason but fails, how should	_  be'‘ignalled?ñ client needs to know4   9 ñ code.  But if
# Ò0  n!at £problem wa,Î ‘it didn't1 D Âat hash algo% ÎQed inN  ch« ‘nge, it wÐ Ðbe good to
#  <  !"rmõPalongÍ  Îá Â, too.
# ftpÖ  s z'…  ©ðd cleanly
# check digest agað correct (i.e. non-ap[!) =Ament~  òqPossibl10ensÊ û coË x à Ý  not sure wMpexactly@à meant by thisÿ`bstracå`ctory  ƒ%erdbase64&dbisect Temail  {5lib Bttp.+ $io
 $os
 ”posixpath $re
 Usockel estring yB 5tim3 utempfil wcontext— ô warnings


from¿—@URLE?,™ CK ¡ntTooShort 	C Pparse» N(Ã1url ,g Qsplit
 ðjoin, unwrap, quote 	 9 _- btype,  Dhost  ‚ Duser  ¼"wdÕ6 5att Tquery+ Evalu\ âtag, _to_bytes@ Ðunquote_to_byðtes, urlunparse)
from ðlib.response import addinfourl, ôclosehook

# check for SSL
try:
   : Ássl
except IL RError# þ_have_ssl = False
else ñTrue

__all__ = [a ‘# Classes ð'Request', 'OpenerDirector ¡BaseHandle ±HTTPDefault�  K   1Red@    ' ÒCookieProcess\ UProxy' B ¥PasswordMgt  CWithƒ Realm',:  ' �PriorAuthÊ ÐAbstractBasic z   ! '¦  Q oDigestR   S   *˜ 8Fil‚5FTP! z 'Cache EData" uUnknown ’Á‘, £# FunctionpurlopenB@instJ  dbuild_ A Ð'pathname2url6 Durl2   £getproxiesºò# Legacy interfaceI °urlretrieve8  urlcleanup 4URLw w 'Fancy  
]_ñused in User-Agent header sent
__versionä'%d.%d' % sys.  »c[:2]

å ° = None
defò ƒ (ÜPdata= ò, timeout=socket._GLOBAL_DEFAULT_TIMEOUT¶ ð  “*, cafileD  ca3 ds=ì‘, context )ö!''½€ the URL� ð, which can be either a string o ü‘ object.
z*Í `* must9 #an € specify>  Ø &0al . 0 to+  Y1 toF  Š pserver,l  ² if no such6 ôis needed.  See � 1forD sdetails˜ 2urlc°Ð module uses 8p/1.1 anôñ cludes a "ConneÐ:|"X Rin it= " rl cThe opâ *Ó�* parametDif   mpsecondsÖj Pblock1PoperaP as like©c� ¡ attempt (#tk@ied,* K @globogP setta @will„ ÷ñ). This only work‘ &x 0S-0FTPP%ÿ CIf *fH* is� &it’ ssl.SSLC‘ "ánce describing»  pvariousìZ!s.õŒ ¨ ;@ morE þ
’.*Ã *.ž± yïñet of trusted CA’ ¶certificateS�ð should point to a sñHingle file
    containing a bundle of CA certificates, whereas capath should point to aM �directoryC hhashedG v ñs. More information can be found inL ñssl.SSLContext.load_verify_loc8 Qs().
- ôThe *cadefault* parameter is ignored.
, qis func{ ñalways returns an object whichš swork asä  1ðext manager and has the prop6ñes url, headers,% qstatus.° 0See" ðlib.response.add�url for m%�detail on_ sa ù �For HTTPb  	 ¨S URLs, thæ ß Ð http.client.0 R — û ðslightly modified. In   3 toŽ ð	 three new methods above{ [Ômsg attributei):samAgreason6 1---š  ^ cphrase²Qed by� ðserver --- instead…8 bI “ Ð itAspecå ! if‘ documentc‹(xAFTP,ÓàAdata}Œðrequests expliciO ha_² alegacy’ sURLopenKVFancy Pclass€ÐB ?urlJÒµ ðNote that None mayvrû’ed if no ¥ r ¯Í � (thoughu  Zpqáalled global OÑ Dá uses UnknownH¢r to ensur,ß  neÂthappensÛz,£ ðproxy settings are detected (9qexample³an a *_3 µ penvironßá variable like) `et), Pk ° 3is ï J  dó  `makes Î Œ0ž Qd0 =! ’ –1'''R ;_ Pif ca«C or z
 Š :&  Ç import warËs  .	 "("N ,L  » 6K0preó d,¶E a "L  h  q"customØ  ’ead.", DeE BionW‘ E, 2)H  Ö Ö k"no�Ì  d õraise ValueError(>     @"YouŸÅ't pass both�  Ù !an‡
ó «Ô "
 	¶  « Ÿ_have_ssl° �'SSL sup— 9 Pavailp'T L = îscreate_Ü_ ( ýPurpose.SERVER_AUTH,  À   cafile=cafile,
  rcapath= )< òhttps_handler = HTTPSH “(context= 6 Aopen/ bbuild_ (L - Selif ? :u Z• † is None}  "= · 9 = Æ ¹ s4 * = Ê creturnF .# ó(url, data, timeout)

def install? (- 2er)• sglobal  [   ¤ °

_url_tempûas = []Y ²urlretrieve~    Pname=ö Ã, reporthook  ž  ~ 1"""s RF à a URL into a r ó	orary location on disk.
7 cquires7 ô argument. If a �  † passed, it qused asD 7thei  4 n W. TheÅ  a ¡ should beC ða callable that accept– òblock number, a read size, and thA Qtotal°  0 of btargetŠ  >„ Qvalid2 qencoded
(„ 7 qpoints y o“l resourcì (QresulB±a copy from/¾ ato newÊ { R¨ Qtuple�aainingã   t  ^ Ñnewly createdYñ “¡as well as7 ‰  E  3ñ Message object.; ZºQype, k ±= _splittyp³)IAwith› àextlib.closingÕ .  [ ))ƒ "fp= `headerƒfp.info(T   �# Just rº [Œ # "C Q" for<1://Å C ð
URLs. No sense in perform ‰òunless requested @ 4if P == "O"ú1notn  ±Ð  4 ° 0os.© P.norm	 ( 3), ° ; 0 "# µIYsetup‹  ~ p 3tfpn(! b, 'wb' c (el  5  $ 4 ¡.NamedTemp2öFile(delete=FalseJ  <  2  ‡ p = tfp. q   
ñu.appendœ á9t ? Ÿ% =_4   b6i1024*8~  !Y = -1 <9= 0 aLnum  Aif "û nt-length":»
ï � t Cint($ 0["C‚ðnt-Length"])

      ó if reporthook:
   ù(blocknum, bs, size)
0 ®while TrueH = é = fp.read(bs)<  q qif not + B  " ]break8  Q r += len¥ [ Ÿtfp.write! u 0numH 1b % › )!if7¡ >= 0 and º < ñ ùraise ContentTooShortError(™ ð"retrieval incomplete: got only %i out of
 ibytes"@ 0% (€ Ëƒ, resultÔcreturn ò

def urlcleanup()® @"""C ð	 up temporary files from3 ¥ ¢e calls.""… 1for3 _. � in _url_E   s`  X6try    os.unlink(. @ ð‘except OS0
9 Bpass±;delp 1[:]áglobal _opener $if O   ò = None

# copiedö ðcookielib.py
_cut_`�_re = re.«Àile(r":\d+$"zq.ASCII)hÓrequest_host( qR™% -% ò
, as defined by RFC 2965.î ’Variationž RRFC: ßð	ed value is lowercased, �¡convenient µ carisonV É1url× � P.fullÊ4  œ   =Âparse(url)[1i2if  F= ""Y  ö ó.get_header("Host", ""¢�# remove ]”, if pres° I ~�.sub("",y 2, 16
 .²()

class R‰:G à__init__(self,Ú p, data=", « Qs={}, ¯ ¡origin_reqÚ3 ÿunverifiable=False;  amethod2 	 V  „ qhv  � Z = {} ÿunredirected_hdrs$  _Ù â p   X    
W q_tunnelà :  TDkey,rn.d.itemsS e   i 4addÿ; · $ ;if U É ‹Q ( %  †¯© ÌU y 2  
ø Å ‰Ô) 2if Ç
œ o  # =" p‘@propertyC  ~]² H  WÆelf.fragment  þ áð'{}#{}'.format(sðelf._full_url, s ³fragment)
  breturn . 
 @= q.setter Ddef  (T q, url):  T ü# unwrap('<URL:type://host/path>') --> ' 'B  V º $ =Q  h % ß Á = _splittag¥ O ú g |parse()ò Odeleó î E z = None¥ t Óselector = ''… �propertyG  pAdataÇ y 	¸ ! =   °  @  ,  F !if 3 !=   Ì Ðâ   ! =- —     Ü# issue 16464 ±f we change:   óneed to remove content-length headi ^   ö*# (cause it's most probably calculated for previous valueê G "ifâ Bhas_f 9("C} " 2   ý « 6 y7 7z\ T   7 è_� ! 0  .f, restÜ1ype\ Ýï  8 1 is—
Øpraise V*àError("unknownÐ 8 r: %r" %8ãV § .Ø}Ë}  (³ 4 —   
� N ðCquotÝ  + Ÿ $¡get_methodü (B"""RÍða string indicat Ðthe HTTP requGE A."""€ îddefaul` ¤ = "POST" ¶ µais notQ¦ else "GETD ˜qgetattr¤ 2, 'm :', c Ø d6 Ú T #$ v ‘set_proxy7  , 1,ÁC Ã  Øñ  == 'https' andÏ \ €_tunnel_B ž   1 + @ 8  Qtype=‘ *  ns 5 ß  "     f ! =Ú ø  Êø ì /` ± a Œ  @4addÜ m `, key,CS �# usefulg soÏ UÐlike authentii!onW ¹ Ððs[key.capitalize()] =b Í  … ¿unredirecte’ Awill¼abe addWÀ a redirecte³d request
  ñ self.unredirected_hdrs[key.capitalize()] = val
8 ð def has_header(C ",  q_name):'  b ‡return ( @ in 3 . Es or/  3    M / ¥ )Ž ?getŽ ß, default=Nonœ  Œ Y.get(Ž Š , 7 ” A 4 } )® oremove± ?e O Xs.popH!, Ð • , ‘ 6 7 ÉÅa_itemsË  o = {**] #,  £ }V  ÁøPlist(F .`  Ñclass OpenerDu"or1 � Œ__init__‹ ôclient_version = "Python-urllib/%s" % _! %__‹ » 3add¤ ú = [('User-agent', \ %)]; #©õ$andlers is retained only for backward compatibilityD  hB 8= [_ ômanage the individual . D @_opeÿ {lb `_error³ ÿprocess_response# 
q"" ƒ  ˜Cadd_˜ ›,¦ /`if notSattr(/ 0, "= wparent"/ ( aise TypeEº Q("exp‡b BaseH7ñ instance, got %r" %™  B  Dtype  s$ Õadded = FalseB  Å@methj%di¸ ª 4if % $["/_Oa", "doœ  Rproxy ]Û‚   õ# oops, coincidental match“  '   ‚continueê    1i =Œ ©.find("_")9 ƒprotocol& 6[:is ? bconditF Ó k[i+1:]c %f ' Ñ.startswith("aÆ V 7j =3 š ‰ + i + 1¢  0 0kin‹� j�    >try= ! ; @int( 
þ  ! ²except ValuXH Mpass˜ ˆlookup =ûWÜ]N, {}y ‹[0  A[ 	r 7elijP == "á"±  ê 4 = P 	F  ô ] ¸ ðopen
           û elif condition == "response":
  ý kind = protocol  ôlookup = self.process_Q 	/ y _questx 8P w .seØ ™continue
, ²handlers = Ù À.setdefault(Y, [])3 4if 6 f äbisect.insort(( ,2 
J /el© 5 t.appendE 
; @adde§(TrÒ 1if  
˜ 
” ·d ™  À.add_parent(7 )<’def close m õ# Only exists for backwards compatibility.QFpassV ±_call_chain\ !,  ", Šømeth_name, *args){ HÊáraise an excepó if no one sã should try to›’ �# the req¨Ð, or return N@  if óy can't but anotherG rH cf @.  O  Rwise,< P g ˆ{ ‘ü 4.ge‰&() ]+ 4 in} s Öäfunc = getattrI%, HP  / �result = 8 (bÏ  ! 3if $ ais not
s  ' à + Ý4opeÖàfullurl, data=Yù, timeout=socket._GLOBAL_DEFAULT_TIMEOUTó acá` a URL©2a R·u object½ åif isinstance(~ 7strP » 4q =F )  § , D
ö  re7 X v  Q !ifä  1 q.c ! =- 3 > Creq.$ ="` £  =¯G.typÝc# pre-Ÿ    Ï; ê3+"_ö"(  gD  ori õ%£� 0
 m ‡P ‰ O 7 C(reqv ósys.audit('urllib.ñ ',ã .‚_Y : S rheaders @get_\ (odQÁÙ_¯2req¥… g# post[Ã4 \ ¦\( ]0 ^"Àsor, meth_naWme)
  ôresponse = meth(req,  %)
, ereturn  àdef _open(self8 çq, data=None):> psult = ( ²._call_chai9 q.handleJ Å, 'default',? °  - < '‚ à  if° 6ult‰  ? Ë 2ultÉ   õprotocol = req.type� /reÀ H $, 
 % +I  i  'Ã 0Ú eunknowne'+ 	  Ñ  ÿSerrorÿð w, *argsý"if
Ñ in ('http',  's''  `# XXX # 2[s]6 ñcols are special-cased€  2   5dic\K— [e A'] #S ñs is not different than 	P È 0 = È É[2]  # YUCK!%  .@_nam:h _t b_%s' %» 	0  Õ  # I = 1 Porig_k r  Jelseºé 3  ™ Ê 0+ 'z 9or') ’ 0 ‰ (k Â,ì 1) +/ ) Œ!if– ¶ 

Ÿ þP 0 4or_A ® ^Š  $)µ 
ˆðprobably also want an abstract factoryE t Nðs when it makes
# se[ðto skip a superclass�favor of b 6andF aight
#N K àinclude both

„QbuildŸBer(*r‚�"""Create¼  ¬per objeÁ  rom a list† 9 .CThe 0 ówill use several b 3 ", – 0ingä Aportpåfor HTTP, FTP Ü ¡applicable Sr `If any‹ 5the\ � passed a`gument
 Be su4#es3 s ›  M   Ó   beÚ !d.= 1""" ø À= OpenerDireì(\M _²Áes = [ProxyHÇBr, U]   `  „  $ DúET0 "1Redƒ  E 4FTP# R File Àr, HTTPErrorÏProcessor,
  ÁDataHandler]$ ñif hasattr(http.client, "HTTPSConnection"):0  W ñdefault_classes.append(2 ] )- ²skip = set( Pfor k6 K in G `  & Pcheck& h® s  ƒ áif isinstance(- g, type§  (   , 1sub¯ , † -   1  · R.add(% Ë     !elO { * 
¤  / K  ß 0  ß  ! 7 t.removeˆ ‰ 	> 0 I `openerÅ _AE E())
G h�  `
á hXSh = hÕ è p  hórreturn ! !

…S Base*´ † Â_order = 500¨ òdef add_parent(self,  ¾  . # = @ Qclose; 3 à# Only exists Vñbackwards compatibility/ ä FpassU a__lt__V w, other] eif notZ 9, "æ R _ ð# Try to preserve the old behavior o­Áving custom N%es£ H äinserted afterhà ones (works oü  õ I KuserF \ ¡ which areÓ  aw
 ‰ F²)).= ôETrue  ª	" <?. 
+ VUErrorÝ(>t3"""  0   e1 p respon¢1"""‰ 	c £ = 1000  #)2all‹ " pI6ingñ _S ø…request,k �  ˆõcode, msg, hdrs =% . L .$  Sinfo(¦ H €# Accord÷ðto RFC 2616, "2xx" L ñ  indicates that9É'## ® € was suc+öfully received, understood, and acceptedàÛr(200 <= W< 300û  · Ð  #lfž.š(� &  '^'HQ,b HSj « I s¨ §5ttp VDÇ]�[  � T _º _r N, fp¥ Ö Þ Qraise–i P(req.vM_url8  M )¤ �Redirect  À# maximum nuð4mber of redirections to any single URL
    # this is needed because? ñthe state that cookies introduceA ñ max_repeats = 4 ÿ# maximum total nu’ °(regardlesso ¢URL) beforZ ñ# assuming we're in a loope y á Q= 10
 &deü ñ%_request(self, req, fp, code, msg, headers, newurl):E  €"""Retury RH q or NonŽ �response\n.…  @ T\@call\ y Tõhttp_error_30x methods when a| ½ i õis received.  If aw ¥ion shouldC  take placeù È Dnew Ì  [llow “ %toD qperform¹ “ °.  OtherwisZ  aise HTTPEÔ ’ if no-onÆ Celseœ @ try/PhandlY“is url.  i\µf you can'tŠ pbut anoy ! H? …r might.# 5""" 0m =îR.get_c%() �if (not ( Y�(301, 302 3 �7) and m Ö"GET", "HEAD"G  Ý !orL' 	E @ §== "POST")Z : r9ß(req.full_url¡6fp)]ð# Strictly (accord+Àto RFC 2616)Ç 1±0302  Gà@# a ž ± MUST NOT c 
Y`withou`nfirmaSMR# fro"€user (ofÔClib.},~ iPcase)»·n practice,I õessentially all clients doè	K –, so we d± Òge same‰ð# Be conciliant Ð P URIs @tain;¤a space.  ¸gmainly  eredundB  Î0mor[ ±mplete encoˆd$	Z82()î  Ò it}akept fK²mpatibility§ òC&rsì­# =¶1.reê·(' ', '%20',€CONTENT_ÀðERS = ("content-lengthÞ Gtypeæ3new#� = {k: v« @k, v� ·  g.itemsh ç Ðif k.lower() ;in š }mry«(ï >V 
 � =¬ + `origin`_host=À  < óunverifiable=Trued0# IAment Þ ±e: To avoid>¡server sen!uJ •ó ¡# infiniteã,3 ?q object£Éptrack w–ðURLs we
    # have añJlready seen.  Do this by adding a handler-specific
    # attribute to the Request object.' ñ'def http_error_302(self, req, fp, code, msg, headers):; f ô$Some servers (incorrectly) return multiple LocationH F ó(so probably same goes for URI).  Use first> .> Sif "l[ 5" i_ ¦  ª ƒnewurl =? &s[4 ]K  elM ?uriH  / C *sez 
e õ# fix a possible malformed URL' ²urlparts =  2se(Å )L ðFor security reasons we don't allow redi• |€to anyth;Uotherq a# than, –s or ftp.p #if� Ðts.scheme notu ('G1',  s	 0ftp '0 Š°raise HTTPEt(�     æ z z"%s - RÓ  Ûq'%s' is‘ ø qed" % (»T -),O Ô ìX!ifG y¶ts.path andþ jnetlocê/ „ = list( )v  •[2] = "/" ¥ ñwunparseD ' #ž�.client.' _Ç P() de²ð
s as ISO-8859-1.  Recover
J áoriginal bytesã  percent-enI ¢ non-ASCII# ,$ Aany o'alM pcharact
@suchƒ –the space°æ Zquoteÿ !, | ƒing="isoÄ ñ", safe=string.punctuQ`@ Bòjoin(req.full_url,  èt# XXX Pzpwant tox�get about1‘ state of wcurrentù rZ , althoughK`t migh teÜ poorly with {Äs9 �also useÛ —ÄÝs‡ `new = ¾.ñ_™   âT	Î |   ý ewK?NonÍ loop detecÜŽ &# † àdict has a keyD Iö was previously visited, if8  í Ã 'Ú  T Z?   =é =;
 ¬ õ (@ C.getkc, 0) >V max_repeat	>  B 4lenB 4 < 4   ð req.full_url, coode,
  õself.inf_msg + msg, headers, fp)A Uelse:  V ývisited = new.redirect_dict = req %{}A = ³[newurl] =  R.get( •, 0) + 1
6 ð# Don't close the fp until we are sur  at w- guse itD õ with HTTPError. †fp.read(õ 1fp.k &()„ qreturn 9°parent.open´  , timeout=þ  ; `http_eq y_301 =  3 7 2‚ «a= "TheÆ ‚ server ™ Ted a � q 0 th…ould " \ð  Åÿ  "lead to an infinite loop.\n.   v ƒlast 30x_ ñmessage was:\n"


def _parse_proxy( )@B"""RDð#(scheme, user, password, host/port) given a URL or¥ ¢authority.#If ù
is supplied, it must have6   (^ :^ `componÄ�According�RFC 3986,D   5an |  : a means� ¤  u L y ñtwo slashes after( ÷ y1"""/  B, r_
 Ó = _splittype@) eif not( p.startsÔC("/"d Û#® 9   \ ENone Ö != ª 
ò#‚  H … 
	†  . ±raise Values!("f  R  ¹ 6 no¬ r: %r" %‰ ‹@# We‰
Í”, so for ­-˜Pliant^ ¢s (by ss 3m � °# and 3.3.)s°th is empty`N– 8'/'ñ e'@' inyÍ R    T _separator È–.find('@'Ë  0  en9í% 2"/"ûI 5 
ŽC 
26 1if j J= -1±   š q[2:end] ¦Binfo¥  A¥  (G€ !ifØ 2  c µ o ‡  5  ƒöL  d(  < M 
ÿ   % =1& =É  éZ º �

class PŸÃHandler(Base H#! 2iesM beBfronPh9 P_ordeõ2100”_L0__(+,Ð@ies=^  Æ$if  %  !    * € S= get ¢Passeræðsattr(proxies, 'keóys'), "proxies must be a mapping"
  Tself.( #= 
  ôfor type, url in! •.items():*  P  * ! =1 ‰.lower()  €setattr(u Ñ, '%s_open' %3 ,,  P   ‘lambda r,{ ay=url,/ =n p, meth=Q Æ yR 
–  F   . (L H 1))
y 2defc C ¤ 3reqy - [ Porig_„ p = req. I  l  Hy P, user ñassword, hostport = _parse_. ( 1i�  Y † is None 
f 5 = � Ï    !ifš  q C andß pbypass(´   Äareturnm 	I  Æ E É 
‹   _X   =Ù0:%s×�(unquote( )á ©  2  L  0) & òcreds = base64.b64encodb � . Q)).de z"ascii"I  ÿ ñadd_header('Proxy-authorization', 'Basic ' + z D  ;Æ³  %  e 3setá  R, &ifÃ" =‹C: or z'https'‚õ# let other handlers take care of it  Kê    ;elsdð# need to start ovÎ¼because thes Jdon'i a# grok, äa's URLÅ	‘ ð# e.g. if we hav±ñ constructor argÃ Ó|like so{¡': 'ftp://p ð .example.com'},^ °may end up ï;ingŠ a:Puest  px://acmeM °/a into one' C ‚ )/a( †Â`arent. Ÿ , timeout=H ã)

class HTTPPŒBMgr:® Æ�__init__Äßd –sswd = {}2  	q6 p, realm÷iÂdP ²# uri could^ single URI³¥a sequenceñ ÷if isinstance(uri, strS  „ U x= [uri]9 ‘ @ not‡Ë 
 [2 ]ë  Y    Î�default_¿½in True, Faü‚reduced_’ etuple(“  N   r *  ) H(u, a )  uµ 6uriï; xd­ [I s  º 9", $ ©Pfind_Uó (Ð(self, realm,Ã authuri):
  õdomains = self.passwd.get(realm, {})- öfor default_port in True, FalseV  ] ƒreduced_t b  S_uri( ,T n  E  r Quris,» @infot µ w.items(Î  3   7  ,  > 
™  !   "ifô `is_sub‘ Ruri, ¡ ¸ ^   =   ereturnš ' `None,  
 3def] þ  p!, s T=Qu ‘"""Accepth ÷ority or URI and extract only the&   �path."""�  ´ ð# note HTTP URLs do Á have a userf•component: @part(�urlsplit(I 1if ! :[1]n#« '  ƒ ƒscheme =1 )0]  æ ! 1!  Ó =  2]5'/'D e‰`# host(   :¹. 	� «   Œ 9uri6 ‡ {  _  , ` A = _%  èÓ Ü)ifõË , 1 is2 )!is¢ ž 
[d2 é= {"http": 80,¤ È  ! s": 443# }õs ¨  B  ¬ j ‰  & ,²"%s:%d" % (ª V !3  , N&’%ªbase, test�Check if  ;`below /  ûa{R tree[  § ðBoth args must be$ s. øe form.G<"if[ !==q 
�Ô  ¾= 1 R[0] !4 +[07 @8 `commonå@osix. €prefix((â 2[1]F[1])\rif len(0 A) == 1 ? } 	´  ‘ q

class/P²ordMgrWithDR&(O  "):q òPfind_W_\Bord(Õ`  JN -  Œssword =~ .S G ã  � E !if ^1not�«  ^ 1
¶ ?  !Ã  æí 
�œPriorAuth~
žÀlm):

    deðf __init__(self, *args, **kw
 C):
     ö.authenticated = {}  uuper().Q K 
+ ódef add_passwordx ñrealm, uri, user, ! id, is_v l=False™ jupdate* (N @ )‡  Õ ð# Add a default for prior q • requests0 1if § Æ is not None  R s	á  ' Ú  ˆ 6 j 7 �  Gô  §7 ú :#pð could be a single URI   s1nces  á Òif isinstance`7str� % ²uri = [uri]ô   ]iñ _port in True, Ð
H - u" :uri  K ‚reduced_h  ñ .   4(u,Ñh g ;   1  âÉ[? R =] =sÆ  sS¾ N 7uri Â ï  G 1 = ¤  Õ  Û 	 r  "in>  3 â E"if' ’is_suburiÎt dI
Ò  ; _returh õò
class AbstractBasicAuthHandler:Qñ# XXX this allows‚�multiple…ñ-schemes, but will stupidly pick™ó# the last one with a«¤specified.t k j ³double- andú@-quoÙ}b valueÿ3# (" @s ar0Áviolation of… 2RFC« `appearÃ œ Bwild‰ôrx = re.compile('(?:^|,)'   # startL `string‰1','é  p'[ \t]*< P # opŠ Ãal whitespac½ /  À'([^ \t,]+)'u cq like "«"n +n Ÿmandatoryo #‹O=xxxX   O'xxxè " O"xxxœ ²À=(["\']?)([^	 *)\\2',v Tre.I) ˆñpre-emptively sendˆð info already accep(’(RFC 2617d  # 0 oZcŒ2 2,]e À1.2 immediat_ °after "credª2alsÞ q# produ5 )¹ ~[ "€ord_mgr=f€"ifA  ³ " ð:
            paòssword_mgr = HTTPPa sMgr()
  `self.p Ad = 	 7 
# Dadd_ 7 = 7 . 
6 ðdef _parse_realm(/ ¡, header):$  € !# % ó WWW-Authenticate* ó: accept multiple challenges per' O efound_$ ‡ = False  ðr mo in AbstractBasicz ýHandler.rx.finditer(¯  ³ ñ scheme, quote, ß Ç = mo.groups[ / "if* @ noty ¦['"', "'"] (   �warnings.	 !("œ  �   REq was uny 5d",Ö  ;  RUserWQ B, 3)˜' tyield (Ì Å # LFTrueG !ifÓ ' 
Õ #if¢
  † { # =! ¹.split()[0]Ø Oelse= )''. × CNoneÖ  ‘óhttp_error_auth_reqedš  �req, hostÖ  ®s¯  ° may be an 7 ðority (without userinfo) or a URL  5 an« #8  ls s.get_all(d 6req²z2 
C# noS ›a  ufreturnÄ unsupporteü // $fo^ ¶l  # Ç 10alm*  é.û< F Š   2if ? à.lower() != 'b’'Ö  .   
° = ²  !  hcontin¯ #if³!isÀ õ m ò
# Use the first matching ˜f.‚ ð # Ignore follow8 2 �s even if^ y2 	 X M ì k Ö’aretry_êIê(¶ ¤q 3alm 8if VÀraise ValueEC/("CB doe\"Í  v  "}ý 'ë O: %r@ %Á)Ñ  æ —	Ýóú ·K, pwÛ _ ü(: L 	”?pw > Y °"%s:%s" % (S  o B   ë3 = úó
" + base64.b64encode(raw. Q)).de ð"ascii")
            óif req.get_header(self.auth °, None) ==  ;:
  areturn& 	  X óadd_unredirectedT e   \ )@ X � ð
parent.open(req, timeout=e  > Jelse¨ ¤ e ñdef http_request’ ,): ãif (not hasattÀpasswd, 'is_µ áenticated') or] ! ; ¾  3 .1  Ê §.full_url)x  @ ² Ereq
T 0if T  ô 4hasLû 'Authorization'H buser, µ 8 = � Pfind_  _ @ord(ë˜ ~  – @credñ ðals = '{0}:{1}'.format(M m –).encode(˜ B  3ó_str = base64.standard_b643 g O).deG   ],Â  „  †'Basic {Ñ ® –.strip())Í ¡RfsponseS R �/ifX’ º Âif 200 <= reV .!j < 300+  / òjupdate·	†f, Trueå  A N  W GFalsX =Á ã �s‘) = Ä! 5 "  á



class HTTPË üHandler(Abstract c, Base& "):‹ ø è H b# ð˜error_401ñ@fp, –r, msg, K sÿ@url Âqjã  [×¯ ÷ _f ˜ °reqed('www-  � �'éP  url–q›  x† V\Proxy>W*R Ä ]7]#<4 ßðuires that there is no ºõinfo component in#ûåority.  Assume? àn't one, sinceZClib.X@ doea gt (andQ `shouldÐñ, RFC 3986 s. 3.2.1) support² ÷	ests for URLs containingN ¿ .  ± fChost À  response =ð self.http_error_auth_reqed('proxy- Ïenticate',
   9 õority, req, headers)C òreturn response


# R òn random bytes.
_  r = os.u ñ


class AbstractDigestAuthHandler:p "#   – Ï óion is specified in RFC 2617.
7 ðXXX The client does not in8 `t the n T S-Infoî E õ in a successfuló 	f ðIt should be possible to tesh àis implementat½ sagainste ða mock server that just generates„  : ðc set of challengbE  ï Pqop="(á-int" supports,BhakyÐdef __init__(Gâ, passwd=None)w -#if  A      5 € = HTTPPB vordMgr() ^ .( 	 °  @  Aadd_ Rord =Ö (d. 
5 @retr÷:= 0 Ínonce_count  Qlast_" 0 = Ï `reset_W y> ¬    w x  Jƒ 0 ,³_>k, hostQP µSreq =`s.get( @  ² Z"if,” 6> 5N  ^à# Don't fail eQÁssly - if we 0ed 0ñ, we'll probablyÛ  C   #*  �ñecond time. Hm. UnlessGý» Manager isE Àprompting foã�e inform . Crap. Th*s¶ Bgrea …   ò # but it's bett)n @currãÀ'repeat unti«{cursion‹ ùdepth exceeded' approach <wink>. QraiseàEeñ(req.full_url, 401, "d¸ì,?ed"m!s,„ÒJelseÃ E.áE+= 1œ !ifp ;req2 tcheme = µ.split()[0]<  M >+ Ò.lower() == 'Ê 'S  / ð� !y_ö0 z ð6reqÔ  = .eln Ÿ!= 'basicm tRValueu""Õë"æ  ~  "3`follow�s¢: '%s'" %  )/trñ   Ï §,ftoken,¤�Œf' ', 1# Ëð = parse_keqv_list(filter(õ Ÿ  Ðhttp_list(cha³llenge)))
  ðauth = self.get_ öorization(req, chal1 0if $ :B  I   ñ_val = 'Digest %s' %+ 	* àif req.headerss (| B  ¡, None) ==?  X 
n  r areturn* 	`  ] òadd_unredirected_X i  v vß \ $sp£parent.ope€timeout=i  > š Qresp
› @def [acnonce† !,  )Ø b# The # ñ-value is an opaqueI  ^ ò# quoted string + Ðprovided by tH Âlient and us aboth c M  " ðserver to avoid chosen plaintext attacks,# j x mutualJ �uthentic:,| 4to 0 Ðsome message X Pgrity 0tecl.L ðThis isn't a fabulous effort, but it's= öbably Good EnoughG ‚s = "%s: A" % {.zc_count‡ , É .c (bö.encode("ascii") + _randombytes(8þñdig = hashlib.sha1(b).hexd(* ¾Šdig[:16]( •ƒ ,4‰36try  qrealm =±![' %']W " ü "  "  qoû óœV'qop'¸  D „algorithj (  {', 'MD55 b# mod_A doeÜFsendã�, even thÇ2 it	¿ p# suppoÒ€to be op;ˆ ¡ 2æ ž  'ZT ü except KeyErrorNÈ Œ  \ PH, KD0u_impls(5@if HÍ J c „user, pwf Àpasswd.find_ _ Aord(âŠ.full_ur¨ . y  # XXX not Ë @emenh5yet0½@dataX  + Õ 2ent	 º _#tyþ T.B Ð] JelseJ  e „(A1ÚÙ ê  	0alm;|%A2, )  ¶ Œ•method(),  Þ ðselector: what aboutx0xiež d y_ urlsI  s G ™ ó# NOTE: As per  RFC 2617, when ” "0s ", h-int",ãAcoulå� either `( `Ž à#     or `authñ-int` to the response back. we use `auth$ Osend)  #
  õ if qop is None:    \ õdig = KD(H(A1), "%s:%s" % (nonce, H(A2))): `elif '� @' in^ º.split(',')a 1if E á == self.last_ 
)  Ž !  µ_count += 1v  " ;elsÂ   8 7 % ~ " =™ 	_ òncvalue = '%08x' %µ ” 	0 c  Û Bget_ 91 € + Sbit =b:hk‚ ", I ,g„	~ ½f | 3Ð# XXX handle Æ o.[ ð aise URLError("A@'%s'Fànot supported.(Uqop)
@ _ Rshoul˜öpartial digests be encoded too?: 1bas|óusername="%s", realm à  3uri
 5' \  l@   ' 7#  Ê(W N ,ý  ¼q.selector,D K   V 6dig_‹if opaqu—Ë S+= ', ‡ . k šif entdig@ 7@ . @ ) ‚algorith, ó  / l @qop=t, nc=%s‡} ( preturn � Ñ@def „ p_impls(­%,  0ó# lambdas assume1ò  modules are imx1 atô˜top levelâ ]  vZ'MD5'ñ 3H =k ò x: hashlib.md5(x.šâ("ascii")).hex‚(í 
f ?SHAf Osha1g J…MD5-sessâ Òr¯V¼±%Un£G ØÅentication "P à "ß  %rå &KDI‡s, d: H(>  6"ZH, KD# – 3ty_g!©data, chal" º � Lµemented yetÌ e  êá


class HTTPD|QAuthHøcr(Base ­, Abstract' } Q"""An, ¬ Bòprotocol defined by RFC 2069á O 8 ¡improves o0!ic! Àentication bñ(ecause it
    does not transmit passwords in the clear.. A"""
	 ñauth_header = 'Authorization'" ¢handler_or$ ð490  # before Basic F P òdef http_error_401(self, req, fp, code, msg, x 1s):i  Æ õhost = urlparse(req.full_url)[1]) €retry = ] .q  Š À_reqed('www- ¥enticate',?  l   ‹ · ¨ ? v areset_‰ …_count()! qreturn  ð


class ProxyDigesthHYS(Base ­, Abstract' "):a Ñ ±T -O ·;7·! ® 7¦p¨s§ƒCHTTP˜¤‰ êƒ__init__-Çdebuglevel=0Õ._ 6 =  Ö M  NÊ X S Q # L ó_get_content_lengthL wrequestN ¬ { €.client.û `Connec.N ä GU Z.datae  � –method())¨  do­ ‘ D1    R  =A ( . } !ifô  E’ �aise URLEˆP('no % s given'‚  ) %ifZ  ¾ " iFPNone:èEPOSTo  1 & �   	  àif isinstance( W, strÑ  F   pmsg = "b  ( ô should be bytes, an iterable of 9" \r  L  €"or a fi/ Ðbject. It canbD @type� -."D r4BType56msgÒ a n£C.hasŠ2('Cl-_ 'ì  4 ôadd_unredirectedA �  p 
V 
Y     P'applß`ion/x-ô form-urlenl-d'Å (’ Æ 29  n   1anduA T}Afer-| _ing') 
™Æfd Â À         if ÿcontent_length is not None:
   ÿrequest.add_unredirected_header(5 H "'Cn -n z', str(ƒ -))C ?elsŽ BõTransfer-encoding', 'chunked')
ˆ °sel_host =   4if ºhas_proxy()8ô
scheme, sel = _splittype(: Šselector÷ s 9 U_path>  ƒ F(sel1 !ifµR  Œ Žk'Host'“ ( Ã5 z  m i `for naÏ €value inØ qf.parenx s 3 ! =: Æ.capitalize(X   Å  ? Ã  1 Ç  7 !, © Ìdreturn¸ä°def do_openYàf, http_class,+ B, ** ‡onn_args� B"""RU ðan HTTPResponse object 60theI  ;w, usingd .‡  Õ f  y ð must implement B  ^ ñConnection API fromK @.cli…ž5"""  Ç  =‚ .  u  
³ñraise URLError('noûh givenÁ# will parse# U:porta  ·Ô (i ã, timeout=req. b D ñ .set_debuglevel¤. ß€p = dicte.¦6drsx. Ñ.update({k: v¯@k, vÞ ¢ % [itemsµ ³ Aif kˆ3in 4 }š ð# TODO(jhylton): Should this bõdesigned to handle€# persis«% c&s?:p# We wa*so make �@/1.1ú|"buK§addinfourle ò  isn't pre×Ž ¿deal with a‰ .E "It0tryÊ ð read all remainúBdata¹ Õwsocket,B RwhichE ±block whileÁserver waitsª B Dnextâ Š S	2sur> :ñ gets closed after_ V(only #V Ú&["ˆa"] = "L rPs = {‰�.title():‘¹   Ÿ hV .d}×dc._tunn‡
ª p }K ›–�_auth_hdrª ÐProxy-Authori—zation"
  ùif proxy_auth_hdr in headers:*  5 stunnel_  [: 4] =:  I 0# Pv ‚-Authoriš ÿ should not be sent to originC  }server. ?del‰ bh.set_Ô S(req. d_host,C =! õ %)
p :try#  4‘h.requestc àget_method(), u ‚selector Edata{ ,k  I 
 ð encode_chunked=J 3has¦ ±('Transfer-( iing'))N ðexcept OSError as err: # timeout )or3  � ‘raise URL7 J(errW rÖ.getresponse(  s 
3Yh.clo& f ip# If th òQ does&ðsend us a 'Connecá!: S 'ÁEf# HTTP) ‚ assumes[ Tocketƒõbe left open. Manuallyh# mark8  to³y Äd when this � object gº Faway¶œif h.sock  / v = None&qr.url =U g‡full_url‚0# T– ³line replacþ ò.msg attribute oo /RÈü cwith .ð, because urllib clients expò  ·'toG AhaveC`reasony ‡ q.  It w
pbe goodq'isB ± ðis deprecated and get] n<  ž winfo() Ó#Ä �r‚  D.• m ñreturn r


classKðHandler(Abstract0 "):™�def http_JQ(selfè)íZ   2.do(  2 .I.U ´> \  & _]? = †   Q ! 0_

j as5(; a 0, 'c Sd '½ ê S× ë 	 ¹ ï ƒ__init__î ðdebuglevel=0, context=»€, check_oAname  Q Õ a k ; R_q $ ={ Ó$ 	‡  + 	 n /  ß  ;s§ b ‘Ï ' ÓpC § B   º =f .È 4 	± ¤Àhttps_requesð*t = AbstractHTTPHandler.do_request_

    __all__.append('- S.  ')

class  óCookieProcessor(Base) !):L ñdef __init__(self, c5 ƒjar=None(  x Åimport http.% F  f: @ is = d     4 + =E .© UJar()Q  Ž h & =_  »  Œ ¿ ,¸ 
I R.add_‹ „_header(3 { sreturn  o jsponsep B, re z !exÝ~ $s(2  < áý ‚ T ƒ  î sï E ¼ ! 5 "  sUnknown	u% V_openê Ü `type =$. €  æóraise URLError('I P url ) q: %s' % 0)

Æóparse_keqv_list(lg @"""P   ð of key=value strings where ñ	s are not duplicated."""˜ a ad = {} Æfor elt in l¤`k, v = Ö.split('=', 1•ôif v[0] == '"' and v[-1 J   K qv[1:-1]t   ˆ q[k] = v è  Ësòs as described by RFC 2068 Section 2.6àIn particular, àse comma-separ*bNñ the elements of¨   †ómay include quoted-ŒJ.  A a could@ ’contain az , Bnon-C Ï0 C hav\ s¢1theC òmiddle.  NeitherJ Rs norw s@ ¡nt if they�escaped.B ²Only doubley 2 ,8Esing 1 @rres = [É MR = ''_b " =„ r = Fals²  g0curÅ s2if 4  �t += cur­     , 	X      U2inum   "if† 
Z  ifU ¶:\\'  6 b 'TrL     e   'elU "T  Øµ ?è  h þ c ,c 4resÿ P £ �   ¡   ` 
Ã ¿ ‘ Y »  "# „P lastZt !if j¯ ' ð return [part.stôrip() for part in res]

class FileHandler(Bas ð):
    # Use local file or FTP depending on[ �m of URL5 1def- ó _open(self, reqS  W Purl = ‘.selector9   ñif url[:2] == '//' and `2:3] !  �(req.host" A  E     2 Â  + '†  & aif not‹     ± ».get_names(1  5 Praiseï pError("ð:// scheme is supported only%‚ %")« Belseh V   qreturn ƒ  >_7 _a  î !)
< !# ›  y3 th  ¿   a= None  �Ð  \ Ô (if.= !is> 
œ :try  ± ?< �= tuple({  #  `socket^ ¯  byo Q_ex('è   ')[2] +> 
V  T  ()G j „ texcept - 0aie¾Ó (6  et¥ ¹ 	¶ ,m Å½ñot entirely sure whatÊÖrules are her¾ ÄT imrÅ email.utilsD †mimetype  Ì ‰  1  p G ¥® %   =šP2path0 (  	 6°stats = os. (L 4  ®psize = #  ) _    ! ¨modified =ô Å.formatdate(< úmtime, usegmt=Truel m5 = !p.guess_ Ó 9[0]� `headerË tþmessage_from_string�'Content-\ d: %s\n ôlength: %d\nLast-â ' 9' %  (º ðor 'text/plain', -$, @ )î 0if íù  !, F€= _split ( C  6   \™    =  ›‰ _safe_g< < )oœ ã   ²   BorigP'~:2+â ! +‡ �¡ { L   P  [ I í°addinfourl(­Ö“, 'rb'), /#, a R™!OSOz as expŸr6exp?  À not on locaðl host')

def _safe_get pbyname( ¢):
    try	   ïreturn socket.4  3 eexcept& }aierrorF óNone

class FTPHandler(Base ƒ  ¦ óftp_open(self, req  — Ñimport ftplibƒ  •mimetypes  Þ   =D .  aif not­  J  raise URLEÉ b('ftp Ô 1 no0 … given')L  Y !, — €= _split Z& "if# 0is 
v  0 # =Ö •.FTP_PORT< Oelse1 @int(< %)
, `# userÛ°/password hp5ing%  # ,Î ³   ³   
z   !, [ $d =  ( ¶   ‘  6  �  @“ = unquot‘  S   •ser or '' t $ =Œ   	Í Úg Ñ * Õ!OSz as msg'6msgø µpath, attrs!  Ö(req.selector/ !di(  6 .=7('/^ “list(map(' ,  )G �, file = R[:-1]' E[-1]!if A and H :[0]à   H &1:= VPfw = ©Á.connect_ftp	%h!� Ô†.timeoutÂ  { ¾ 	 Ç  ¡ 1'I'÷Dø ' 1fora1 in s¾  #  r`, valu— ( 
v  0 !ifJ Ð.lower() == 'Ž ')\? ,  O  ƒ €('a', 'A i I d 'D'½8   \ " =¡ @.uppu 	e  fp(Ptrlen`w.retrà(  , A 
Ç QheadeM)""K m, 5 =  p.guess_ –¶full_url)[0ì § 1if = `m À+= "Content-P ’: %s\n" %9 	ˆ 0if Å  Ò !is} 	a O>= 0m ¢length: %do B 	q ¥ ó= email.message_from_string($ 
Kþ°addinfourl(�+  ˜%q.4r 8œQ.all_:sB:exp× _exc =i›%r' % exp” ›ðexc.with_traceback(sys.exc_« ð ()[2])

    defò0 connect_ftp(self, user, passwd, host, port, dirs, timeout):
   ÿreturn ftpwrapper(D ,C I  öpersistent=False)

class CacheFTPHandler( “ ð# XXX would be nice to have pluggable cG ± strategies‹ ; ñthis stuff is definitely not thread safe3 `def __" !__B†  Ì  Q.i A= {}0  H  ºsoonest = 03 ›delay = 6 @max_Éqs = 16
5  ˜ BsetT®š (, ¶� R t5 ƒMaxConns6 mÓ p m:  ƒ L- keá @|�'/'.join(…)†ë  S0if ; 1in Ø u¢ "  uq[key] =Ì. B() +: W OelseG  _ E øQ  Š  
 à ß )8 Â "5 acheck_¶ (T ¸"  Ò Ð6  % �# first Y � for old ·²  À [` "ifiæJ<= tc O Ák, v in list‡G ·out.items()� Plif v <N   Â �—[k].close&   2del£ 15[k]¼    &  å 8out( l á n= min(É PvalueÊ )s Y c# thenWrthe sizh  bif lenœ B) ==« “K8\ É 
Z  �   ‘    & - $   YbreakoK" ýSclearô E 1 a ­ a  .‘
é  ) /6 h J ç . ¼DData¸CBase ›  ¶ sdata_opæS, req   #   ð URLs as specifiedÉ •RFC 2397.?#
 ð	 ignores POSTed data
      #
   —# syntax: àdataurl   := " ð:" [ mediatype ] [ ";base64" ] "," ' D - Q:= [ 7 q"/" sub ÷] *( ";" parameter )?  N  Ÿ ƒ ‡*urlchar  6 õ:= attribute "=" value+  È õ = req.full_url
 qscheme,» ö = url.split(":",1� Ì +  Ÿ , ,, U r# even ‚ encodedc ñURLs might be quoted so un Æ in any case� k  � $  _to_bytes( £ &ifŸ¥.endswith(¤)P  V < # =¤ 0.de¤ V  , ý & =c V[:-7]Ifif not 
n B À"text/plain;ÓÖset=US-ASCII"Q ðheaders = email.message_from_string("Content-Pd: %s\n õ length: %d\n" %œ Ð (� R, lenH&))| ðreturn addinfourl(io.Bt"IO. #,   ,4ð)


# Code move ¤ € the old  ðlib module

MAXFTPCACHE = 10‘   a# Trim6 ðftp cache beyond this sizeg òHelper for non-unix systems
if os.name == 'nt'ˆ‘ ðnturl2path import›   1  ,   
 2"$el‚9def) (( Rò
"""OS-specific conversionña relative URL ofç r'file' ƒ¡Pto a  Õ — ;]€recommenN ÿ õ general use."""C ¿T° á Ð Ã  ë   , �Ð ¡  · æ Ž î Ð ""® b


ftp(À= {}


classc opÐ A"""C 0to     !s.Ÿ TXRis a : ðrather than just a­`routin�ñcause we may needF Bmore4 pone setáö global protocolcoption� rNote --á‰  5Ž  ã0thor Ðho don't want=y ðautomatic handlingz berrorsoñ302 (relocated) and 401>  (authoriza‘ Ï 1ed)I  `__tempé …BNone@Úp= "Pythƒãrllib/%s" % __! "__0  ‚nstructoÀ ‚à__init__(self,(Pxies=g ‡, **x509`‘msg = "%(¨€)s styleî Pinvokú ñrequests is depreó ð. " \
              "ñ)Use newer urlopen functions/methods" % {'class': self.__ ã__.__name__}
  �warnings.	 Ð(msg, DeprecaV W õ , stacklevel=3)= õif proxies is None:  `  S= get (? ó assert hasattr(! Ã, 'keys'), " õ must be a mapping"h â ( =� 
 ðkey_file = x509.get(e  '‘ L Acert 	.  / òaddheaders = [('User-Agent',ðversion), ('Accep z'*/*')]¨ `__tempª M  Ãunlink = os. ×# See cleanup\Ë  N @cachù  žn õ# Undocumented feature: if you assign {} to E ,?  itò@used# d ¸ çretrieved with3 ’  �().  Thi9ønot enabled by default; Ðince it does / ôwork for changing Ï ‡s (and I? ñhaven't got the logic¸ ¡heck expirï Ê< Uyet). Ä 2ftpñ $=  ! Y V`can usÅˆdifferenä Bftp W #by� ×  �Dhe .j ‡ member;r qin caseºBwantà ðally independent URL 37ers= 9XXXˆñthreadsafe.  Bah.
- Àdef __del__()é  †.close()-    + ¬Z ¿/ #š ñ	code sometimes runs whenÌ�rest of tLamoduleW  #[0 alÒ ðy been deleted, soP ca•˜ny globalöor import anything"ifßµ   Ÿ ? in*  . :try?      2.__ð(Q ±      exW� OSErrorH 6pasÛ  5 =del˜ &[:uá 
X ˜  .Är1w, *argsƒ"""Add au � be! ¨õHTTP interface onlyÜve.g. u.e [û sound/basic')"",3 @s.ap(™ »¦# Externaly t   >Í àfullurl, data=\
Ú  ©0URL2 Per().	 ¼€ insteadµ x, 'r').¬ b à = unwrap(_to_óbytes(fullurl))
   „ = quote" ö, safe="%/:=&?~#+!$,;'@()*[]|"? ôif self.tempcache and U +in :x   ûfilename, headers =0 [J ]8 –p = open(B F'rb'—  ^ õreturn addinfourl(fpj ,¤ 4 ðurltype, url = _split + `if not)    
Õ G @ = 'ž 'º $if1  zproxiesA   y
  Cies[V 
  , & Zyhost¸  ¶   % ,eUector/   (/  
 
3 ( 6ñ
 # Signal special case to˜6_*(D Oelseâ ENone 	 5 ØD_' +-! h]ype = =   ÷.replace('-', '_·€hasattr(Q  , 4 A) or	 Q == '‚ alocal_Â
½ "ifo
  \q W .D �unknown_Y_Bf, data& A *  W —J :tryœ !ifl @ is r
 b <get(-‚ , ¤ 
B ¢ ñexcept (HTTPError, URL
 )ž Frais#8 !OS+  as msg1   "  ('socket ee  ',/ ð
).with_traceback(sys.exc_%q()[2])
ñ 2defÌÆ/‘Ó =P³ õ"""Overridable interfac L  ï  ;A."""n  [  ~ä   á 'a    P !',h Ô š ²E á rinvalid„¡ for %s' %æ Ä í p# Exter¤‰l ÚƒretrieveÖPurl, í õ Ã, reporthook  ± 
òK  , ®'s ›Ý)® !a Zq object�  ü@or (D„ ©6 cremote7 	7 ëÒ= unwrap(_to_ëð url))
        iûf self.tempcache and url in 7:
  \retur# U[url]' Ptype,L  1 = _split U(url)% òif filename is Nonƒ P(not / 2 or @== '+ *')Š :try  ¦ Bfp =À °open_local_>  ~ 1  ,   þ hdrs = fp.info(! �fp.close  €url2pathË (ï Bhostq `[1]), f ú  w îexcept OSErrorÇ Epass1 
Ô  X f, data­ _headeÚ ~} tq  @(: Ø f, 'wb'q Ä >lse= �garbage,   B   0 AB Zor ""y  7   #, = g `query(  >8 Oattr7 
Àsuffix = os._ .Ö1ext6 6)[1þ ž   E(fd,ã@) = k P@.mks (U Ü ™ __$  0 …s.append�2 ²Bs.fd·d±& § `resultŽ#, =€ '   i40is ¯ ½
 3 Ë  É d'2 = t ` bŠm1024*8 �size = -1 �read = 0 �blocknum ðif "content-length"úû Í „ Cint(( 3["CD LD ]œßif reporthookY   (µ `, bs, ö R while 1L A  Ï p.>(bsA  š!if»/ J  & ]breakZ   ] r += lenµ g Ÿtfp.write% 	…  ª>+= á n E ' IofinallB  ² ò- "‚# raise àÑion if actualÍB doe4jmatch ƒzN  q tA>= 0 u<J 
´v ��TooShort\(N à        "retriðeval incomplete: got only %i out of
 ‹bytes"
  õ	% (read, size), result)
) creturn  ñ# Each method named open_<type> knows how to ` that   � 2URLH Qdef _9 õ#generic_http(self, connection_factory, url, data):  ÷ """Make an HTTP8 g using r_class.}  pThis is< „internalÖ ² õshould be called fromz º ² A) oré Á 7s()d –Arguments³ -” Ý  l tÌ Q hostZS and „%an|  í C$¥ instance.# -/ Þ 1the  toI !ri1Aor af  óølative-path pairE  o F ‘payload f: ÀPOST requestý 7Non{ 6"""eàuser_passwd = ) £ Sproxy  Tif isÕ (ù7strø À &`, sele!� = _split  3 )i  - !ifð ‡    ¡ ,# I   (N 
J  5   ¯ = unquote%  Creal%   ‹ Jelse„   	Æ 5url/  l ð# check whether Ñ; Hð tains authoriza1q inform 	I 5 pë ñ# now we proceed with� 0url Awantçb‰ 	n 0urló a%stT   ã³
X S =jtH A  ifÞ W Ð.lower() != '™'i . —	‹  ›  2 È  ¶Z(restÄ  2 4if 5 �  !  X‡+ "   •?^  " @ a à"%s://%s%s" % @typeÍ   
 Å / by½‘ r   ½V ÿaif notXð: raise OSError('¤  e a', 'no& w given'ƒ if*
� ¥  £ `‘ 
D  1ò = base64.b64encode( O . Q)).de v'ascii'Q 3A _ cÍ ªÌ
Ç ÓW t ð     auth = baseó
64.b64encode(user_passwd. Q)).de £'ascii')
  Uelse:   µauth = None Àhttp_conn =  öection_factory(hostS Åheaders = {}B �if proxy__ 
q 0 0["P!  -Authorizac ÷"] = "Basic %s" %F \ V P 
Q  ; K @realÑ ¥ AHost– ( 
= ¢# Add Conn ÷:close as we don't support persistentPgs yet.O àThis helps in N ð	ing the socket and avoid ö ResourceWarning˜ a› Â "R &e") Bfor - p, valuew ‚self.add s  ­8 S áif data is notVB @"ConR-TypeŸ aapplicò /x-www-form-urlØ%d", ¹¥ð.request("POST", seleª,Œ ,ä s³M  *GEL ô #s= )õ :tryå ¶response = Y 4get (‹ Qxcept' û.client.BadStatusLin­€# someth wN¡wrong with(aHTTP s= 7 liÒ 1ðraise URLError("›  `ptocol e X: badA "ç q# Accor}ðto RFC 2616, "2xx" q@ indÃqes that” Ö %'s½## ±ð was successfully received, unURtood,÷c(&ed0¤if 200 <= W.ú \< 300’ôturn addinfourl(5 ,? Qmsg, •:" + url,µ  A E z ×h!re‚ _ z_q(a  v “ .fpƒ u Á greason Ò  ‘Ç�def open_‚ (Œ ,ç )=)8q"""Use T1pro'6.""†Ó _W rgeneric_  d Ô E �u ™  0 š 0fp,œ ^	 Ó „á¸  aHandleV = Fors.¯0Derdð class can override this, orv ¡specific hR rÆQnamedb ´ °_DDD where 
 i’e 3-digit… #	Bð# First check if1{re's a z Àr for this ecrror
  àname = 'http_e å_%d' % errcode) ðif hasattr(self, : %):   P Ìmethod = get* 	) ú if data is NoneF  J ’result = S ”(url, fp,— 	 Ùmsg, headers)` ?elsU 1,¦ 
[ 2if � ƒ: return €   %.VdefaultÊ K Odef ?   W /, SB"""D|  =ðor handler: close the connection and raise OSEA."""’  ˜1fp.6 (- AHTTP/ á >§,ð!)
Q Æif _have_ssl°  ù _ú &s_— tKhostto 1 €.client.Œ %SCÓ (6 ,r  Ã  �key_file=n. C GcertD  û  …  é Bopení â Ú =ì q"""Use à ™ protocol  X ¼ _a qgenerici h . aT z £ Ÿ  
6 $ “ � `local & ù or FTP depending on form of URL« òif not isinstance:7strc Ð Ž2URL`'j «: xy supportk ˆ ¢ currentlyl ¶mplemented'Á ifPÁ[:2] == '//' url[2:3] !  ±12].lower()  e&/'Çº RValue¼ "¼  :// scheme ¼ ped only1O "¤ Ñæå7 s IÅ  Ë
«m_µemail.utilsNi †mimetype  ,Ž€= _split œ    –  I  =„P2path ((þ :tryY°stats = os. (H 4 dexceptÅK as ¸WQe.strV@, e.€  ‰ P 0siz) o  u _ pmodifieû%.ûuatdate(8 ömtime, usegmt=Trued mC õNp.guess_ 95[0]t ù2 = s õmessage_from_string(- À    'Contentò-Type: %s\nContent-Length: %d\nLast-modified' W' %
  ô(mtype or 'text/plain', size, < %))5 Åif not host:  Q  urlfile =  	 !if º[:1] == '/'; 
? '@ a://' +7 	K ó#return addinfourl(open(localname, 'rb'), headers, ˜ Â  » ð , port = _split ( & @if (é   ‚ àand socket.get4  byy ? R in (Ž   ²(),) + this *))ú � 5L%el‚2‚.ƒñraise ValueError("W… Gð may start with /7­‘. Unknown' 0of U q0" % W ëÄ0« 2URL© '© e» :¥2on   }1')
È@def 4‘_ftp(self#˜ñ"""Use FTP protocol."""=  ¿ ÷isinstance(url, strE  ) ¥ Cftp ž �proxy sup_P for  o ¡ currentlyÇ Æimplemented'J!im< @mimens   í e, pathà   ¦ > Ç © !noëg given~  R ERuser,A k  ,± 0if  :  º Esswd¼  pa (" ¿ belse:  u = NoneO  › « = unquotel  G    ýÛ V B  ' g ‘ 1 ¯
þÃeftplib/  ; ,   •.FTP_PORT# ÿ  1 @int(< * u, attrsS  ( 
' 
 !di=   .07('/1  ,& =  b[:-1], 5-1]© !if  D \, 20]: < /1:1 A[0] M` 0keyÄ u¡,q`.join(q ô õ# XXX thread unsafe!L aif len!ú	.ftpcache) > MAXFTPCACHEÍÁ# Prune the . õ, rather arbitrarily_  ´ ÷k2Klistj 
\  . ðif k != key:
         øv = self.ftpcache[k]
!  ?del) •v.close()G Etry:  P Úif key not inV 
)  - ž yey] = \P  '   öftpwrapper(user, passwd, host, port, dirsœ  7 !if‹ ùfile: type = 'D'c 7els I €for attrÎ   sÆ   `, valu^ a_split ( 
� ”   Ð.lower() == '› _' andÿ O  ƒ €('a', 'A i I d >D')œ  p  \ " =¡ !.uC
• Þ(fp, retrlen)5@ey].  E( ,J
D mf @mime €s.guess_ ú("ftp:" + url)[0†Éheaders = ""˜1if V Ö 3 ò
+= "Content-Type: %s\n" %9 N  Å alen isANones O>= 0m ¢Length: %do B 	q ¥ ó= email.message_from_string($ 
Kñreturn addinfourl + ), Mr ú
except ftperrors() as expÑ  raise URLE& a('ftp 1 ` %r' %1 ð
).with_traceback(sys.exc_Ž q()[2])
w àdef open_data(Ì,á ,  =^‘€"""Use " "� '."ï§÷isinstance(url, strC  ÌÀ  O Á °: proxy sup ¹ óprotocol currentlž¶mplemented'€ñ # ignore POSTedË í  } #
 ¡ syntax of#  Ñ # ‚url   :=õ  :" [ mediañ ] [ ";base64" ] ","5 c - A:= [tƒ "/" subC ø*( ";" parameter É ý  ·  ƒ ‡*urlchar_ 6 !:=ã’ibute "="++ ä[ ç ±Aurl.õv(',', 1… •Vq�!OS !('± � Ï"ba~ [¡* ‚ 
M    Ý°text/plain;ñ Æset=US-ASCIIÚasemi =Sš.rfind(';e "  "1'='3!in4 [ *:]� ƒencodingX $ :+1:í¦    [:F  ‡u ¹R '¼  msc [9 À msg.append(ð'Date: %s'%time.strf	 ÿ('%a, %d %b %Y %H:%M:%S GMT',
   N 0.gm ( . U())))G òmsg.append('Content-typ˜ 0 %  . õ	if encoding == 'base64':O  � Õ# XXX is this0 3/de9 9ok?0 rdata = L .' pebytes( .q ³e('ascii'))" ¦('latin-1'Ÿ JelseŒ  B ¡ = unquoteQ / ü òLength: %d' % len4 5 { L  t 	0 ö = '\n'.join(msg úheaders = email.message_from_string1 �f = io.S *IO ð#f.fileno = None�õ	 # needed for addinfourl‚greturn C(f, ˜ õ, url)


class FancyURLopener(
 )t²"""Derived 0  with handlä  € Óerrors we can ñ  (perhaps)."""
™ ðdef __init__(self, *args, **kw
 t  ã ˆ .3 [  2  R ú.auth_cache = {} @trie—0 4max &10« Qhttp_Ü ƒ_defaultµ ñurl, fp, errcode	 5msgbÇ ?=  . "or jñ-- don't raise an exception3 Ó   Ë pj 0, "§ @:" +ÖŠ  “ )Ç ?302Ã  , ñ=q
Î Eíò 302 -- relocated (temporarilyó ¼   —`E+= 1{2tryb %   1if , �2and > ">=   
> B shasattrç ÄG500"Ë  0  Smeth ^  O2 ® + � E ;I × 6 (Q?500ñ"Internal Server �ÿ: Redirect Recursion"I µ Ç dresult
rT #_it ¨ ùÞ  N  { b� ·ˆ U kfinall.+'= ¶¶  * ôµ� VAif 'ßtion' in@"  â ðnewurl = headersã['location']
  õelif 'uri' in headers:  & „newurl = [/ C *se2 ereturnE µfp.close()
 ö-# In case the server sent a relative URL, join with originalm › 0url( ò	(self.type + ":" + url, (   urlparts =! mparse(% @# Fo• ðcurity reasons, we don't allow redirecY÷ to anything otherñ ¡than http, ¨s and ftp.�We are usB ó newer HTTPErrorElderu ÷_internal methodp aThis o.  ð will get deprecatedö63.3ƒ #ifÐts.scheme not'  ('½ 1',  s	 0ftp &')“ 2Vraise¸ Z¥, errcode,¥  -  �errmsg +% 
:" Rv ¢q'%s' is° ›ced." %þv úG, fp'É VCopenÊ " 1defÊ _ežA_301€,A I ñ  ú Dmsg,C·, data=None;2"""è°301 -- also ¶õed (permanently).""""§  ¤‘ !2(ÿ/fp‹ Ò 3Ò 63Ò  esóð ially identicalE?302ã U7ã 67ã !ref€ed, but 	  POST into)or¼!if ¸ II€Ù%`/el§^ default;54"
ž¯retry=Fals 4 2uth4|•required.2funœPsuppoôzBasic a> Lonly™W'www-( !e'\)0URL%7er.¬N D£ ž 4 ;C)C XstuffŸ¶ Àicate']
    ñ     match = re. °('[ \t]*([^ !+) ð+realm="([^"]*)"', stuff)
D   bif notO :   ùURLopener.http_error_default(self, url, fp,8  <  ö	errcode, errmsg, headers‘ �scheme, º " =š †.groups(' 2if * ÿ.lower() != 'basic'È rY_retry‘ & '	0jD�name = '} P_' + °¡.type + '_'e_auth'Q ú if data is None³ âreturn getattrþ e !)(¬œ?els@  ,€ !)
’ Gdef w2407u sJG =Ä 
˜v=False)Þ @"""EÚà 407 -- proxy ñentication required.œ  Ý‘This func   supports B€> …only."""= Aif 'h -h !e'‰$inÉ ¤  q Že .$ =” [¸ ]Ù Š•ÿÿ ›¦L_Ä §R¨‘xPhost,—àector = _split  TMðnewurl = 'http://' ó+ host + selector
  pproxy =  f. µies['http']% �urltype, ! yK €= _split ( )/   & 1 u  5   5  
 9 6i =c î.find('@') + 1] , 7[i:® ´ser, passwdÚ ’get_user_ } §, realm, i‡ pf not (1 3 orK ï): return None� ñ"%s:%s@%s" % (quoteE µ, safe=''),8 €  8 © : ª =sel¶@ = 'Àf://' +6  ŽŠ ¡if data isÚ :  œ ó i ¶open(newurlƒ Oelse3 ,f !)
_ 0defN1ry_-_± Ðs_basic_auth(q U, url¡ ¤ ={)o  ?,¼Õ
`	¦ ¶ s ? sÿ¤<s']üx | H k þ f  ! =6\ < ¶W% E ? = R.M ` Å
0k *Àone):
      ð
  host, selector = _split s(url)
  1i =- å.find('@') + 1  1 " E[i:] àuser, passwd =i `f.get_ _ (< §, realm, is pf not (, 3 orF å): return Nonei  E ñ = "%s:%s@%s" % (quote@ µ, safe=''),3 Ú 
 3 š 5 ü › ñnewurl = 'https://' +$   +å Ni ¡if data is´ :  { Í ¢self.open(\ l Oelse3 ,f !)
_ Ldef i d ,¦ oæclear_cache=0)g Rkey =”T + '@ß v.lower(ž 0if ,  in÷ bf.authO L  æ 7if k 
    <delA F[keyI % 
  A 
>  C‡_prompŠ	â  ? ‚:ª " =ªg A ¡  E  ¤†  §˜ñ"""Override this in a GUI environment!""" `import Õ :try† Ÿ ð = input("Enter  ñname for %s at %s: \° x)ì  r  h î0get  ñ  V   DwordV *in\ ¤  M   Âr b 9   ðexcept KeyboardIÙ Jruptþ Wprint× : V  g,¹ð


# Utility functions

_local
" =)  ~ (ÀB"""Rºðthe IP address of  QmagicŸt'A $'.Ñvglobal q ,'if f.  ‚Pocket“ °  byk (k Ëû : 0

_o 4 ä  ã eå qcurrentç × O Ö  Õ À  tuple(së  ;_ex R))[2]û  ú4A zaierror2p ^g bâ a

_ftph sb c0set?8 ‘raised byP™FTP classhÀal _ftperrorñs
    if _ftperrors is None:  Åmport ftplib 2 = R.all_F ' greturn\ á

_noheaders =g U
def  "()w B"""R= ñan empty email Message object."""j vglobal ^   Ø [ Ø . " =_ ".m_ ñ_from_string("")N Î R ñ


# Utility classes

	  uwrapperÑ C" Ð used by openCñ () for cache of ñ FTP connectionsç „  -à__init__(self,Q ðr, passwd, host, °ñ, dirs, timeout=None,E  Ô ó persistent=True€   _ q.user =e <  q # =z 
  † ! =� 
  ™  4 :ort  ¬ ! =³ 
 ¿ $ =É 
 Êrefcount = 0 �keepalivep å $ 2tryš ë   Ö  Z(ï  oexcept(  Wclose)  - araise
a  §K  U SiJ % ^.busyÅ Eftp ^7FTPs 6 Cftp.).z!,   l EÙ !  = Rlogin;  ë0 Ý/ `_targeed'/'.jo3  ¶& U Ccwd(3 )�retrfilen  ,  X, typt!·endtransfer!ifC ð in ('d', 'D'): cmd = 'TYPE A'; isdiÈ1Ÿ ®Jelse( 1' +L . R. A¶voidcmd(cmd
8 7libJ ':  › H\  ï< .   !ifO‚ and notï 
m �# Try to ‡‘ieve as a7  K ê   OPRETR ' ¼	6 % Aonn,_ Rlen =… #n¸( 7 
,>P_perm  jreasonÉ  4 rif str( î)[:3] != '550'-  1 œP URLEä ('Xk ƒ: %r' % K ý.with_traceback(å  M   ösys.exc_info()[2]ÃiÐtÀ
� d# Set P mode‘iASCII!j Êf  … Ôa6÷ectory listing. Verify that ðexists.
         Û   if file:
  ýpwd = self.ftp.pwd()% >try:  I    U @cwd(~ Y  ' ÿexcept ftplib.error_perm as reason|  <  raise URLE7 a('ftp B s: %r' %A c) from Þ ofinallâ 	Å >pwdÄ  cmB‘'LIST ' +h	d ?elsy 7 '/ Øconn, retrlenœ÷ ntransfercmd(cm‹ ¥ •busy = 1
N ðftpobj = addclosehook(` P.make“s('rb'),Aile_) æ [  refcount +`  y  I / 3ñ## Pass back both a suitably decorated object and aë Åieval lengthÀ ‚return (È )â tdef end(ª )+  .02 °   , õkeepalive = Falseˆ "if F<= 0j   Q R.real@(¤  g  & w Ã w-wŽ K2not© Ë ¥ » ¥ þ ; GfÏ äž's( ?ðpass

# Proxy handling
ãôgetproxies_environmentA B"""R&ða dictionary of scheme -> ? €y server,¢ mappings.—Scan the ` ò for variables named <T !>_R ; ñthis seems to beI ð standard conven– ñ.  If you need a= ádifferent way,  Œ  ! a¸ 8iesØ  to` < ð[Fancy]URLopenerl ƒstructorÙ 1"""+  ¯  I A= {}  # in orderµ öprefer lowercaseø ,„ Icess#inE @two ¬ ðes: first matches anyTAcond"  e AonlyH  j `q, value› #s.ŒY.item/ + ! =’.N }#ifD  Y ) ¢[-6:] == '´'[+ r:-6]] =B š ð# CVE-2016-1000110 -Æàwe are running¨°CGI script,:ãget HTTP_PROXYL ‘(non-all-¶  i); i6y:2set¨ Œ4web³aby a ":ÑP# hea¾× / cclientj ðIf "proxy" is loðwercase, it will st ñ8be used thanks to the next block
    if 'REQUEST_METHOD' in os.environ:'  + ñ
proxies.pop('http', None)" ú for name, valueE ‘.items():+  M !if. °[-6:] == '__ &y'"  &  Q ! =* r.lower(m     "ifn 
6    N @ies[B ‚[:-6]] =, ƒ  ' Oelse= ê A í sreturn e Q

def “y_bypass_=¡ment(host, Aies=2s p"""Test„J Ä should not ¿ YÐa particular P !.
Ç @ChecÛ!he` py dict 2  ë‰Rof no^s, whichf B ñ"be a list of comma separated DNS suffixes, or '*'^ 1all‡ sˆ 1"""N iaies isê  kã S= get 	(Û‚# don't I,¿ 0 is ‘specifieds 6tryd * = Q'no']* ö except KeyError6 ÎQFalse* #é 1is k 0al _ù Cways� ,  É_È*ÃY 2TruX  º! =:	Ï°# strip porˆf" ^  2 Ronly, €= _split) X4c	 , ø 5 à ends with anyÝ  Ñ`  + â ¯=.c G(','°% Š­ Š +amH1 l2 ñ'.')  # ignore leading dots�  &  	; ö ã   s/ o Ý Q   Œ    > q= '.' +i	‹ iŒ k .R Q(3 ) †  y �# otherwi²ìy § Œò

# This code tests an OSXš€fic data? ucture but{ , ñable on all
# platforms­®ámacosx_sysconfY±£y_settingséR Ú` iff t¦  \ ¨ [@cces„ usêa–y¼Ù €functionªs 0Macà ð
framework SystemConfigura. *�to fetch6  P@y inâ # ™ Å  á¡e from _sc S._getì  ÛÃget mocked iÚñ
{ 'exclude_simple': bool,�    ep  ðs': ['foo.bar', '*	 @.com ‘127.0.0.1  C0/16«}S m± @fnmaî  imýÐ fnmatch

   ð	 hostonly, port = _split ( ñ)

    def ip2num(ipAddr):   ‚parts =  .@ ]('.')" álist(map(int, 8 )& rif len( V != 4d h " s + [0,  e])[:4]q rreturn * Ä[0] << 24) | 1 '16 2 8 ƒ 2[3]ü ñ# Check for simple6b names£ Ñif '.' not in   · òif proxy_settings['exclude_N &']-  1 ½ BTrue�  ˆƒIP = Non  Œ Pvaluep 
_ P.get(c Çeptions', ()¯p# Items9 @the ”€ are strž õ like these: *.local, 169.254/16d!ifð † „: contin²  Ç ðm = re.match(r"(\d+(?:\.\d+)*)(/ A?", A 	Am is\  ð 
!if^ IP#   x :try4     G`socket(   byÉí 	Š  4   ) ƒ , ïexcept OSErrorˆ + f AbaseEe—m.group(1  & tmask =  2‚ 1if ! !is+  t= 8 * (D �1).count³J + 1T OelseI  inÐcsk[1:]* ¦   Œ b< 0 or˜ N> 32L ð	# System libraries ignorÜÀvalid prefixEgths‚ g   Qì A32 -~ L 0   1if óQIP >>  a) == (‡ ¬ œ L relif fnê Õ
@ <  ðFalse


if sys.platform� ‚'darwin'I �from _scð0 im¥a _get_ a, 2iesø  Á& ñbypass_macosx_sysconf%+ ² g ()Ê ˆ b ,4 � 0getu -ie› — B"""RÛPa dicàòary of scheme ->b ð server URL mappÚ.
 ²�This funB P usesòó MacOSX framework™�Configurap ~�to fetch:  » @y in¹' .( 5""" (Mries()

™  H _A”ý  #, ² should be 8 'edê »sðttings gathered ófrom the environment, if specified,
  5or / õMacOSX framework SystemConfiguration.
; 5""" Óproxies = get _ %()+ 3if ! :  � areturn ‰y_bypassB Qhost, 6iesO OelseI ð macosx_sysconf(L )Ê 7def´ &()L ‘ Ñ 7 or9 _b ò	)


elif os.name == 'nt'_ 
u ˜_registry~ B"""RPa dic|ñary of scheme ->÷y server URL mappings¦¡Win32 usesk ‘ to storeE (ie3 Ù%{}¯2tryÈ  ¸  Õimport winreg' �except I ZError6 ð# Std module, so should be around - but you neä Uknow!`  z ¥R ¢ °nternetSett"# =® ’.OpenKey(½ ö.HKEY_CURRENT_USER, p   ór'Software\Microsoft\Windows\CurrentVersion\Ix  y '» L  ¹ vyEnable“ ãQueryValueEx(iB A �  H  S'Proxd U')[0]& 5 �  
¡   "# ‡Ñed as Unicode—€problemsZÐnot converted\YASCIIi  M î S°T= strvò ; k   ú p ú 
| # ƒif '=' iy,  + ó# Per-protocol sJå  , [for pV §.split(';'e -  _ €, addresSp: ^=', 1Ä @ P# SeeŽ; ÿhas a type:// prefix¯  B 0if Æõ	re.match('(?:[^/:]+)://'‘ ½  G | ý = '%s://%s' % (Ø Ç  %Dies[3 4] =½ þ „   ”# Use one© ”0allñÂsN  8 
A[:5]»Shttp:¾ '  µ ') '³   yF i »  \  >  P 
 Q   ^ À              òproxies['https'] =  �://%s' % " ƒyServer
5   $ F 2ftpD ?ftpB õ	internetSettings.Close()g óexcept (OSError, Value 2Typ %):1  ™ ð# Either registry key not found etc, or the vP k in anD ûunexpected format.! ó ð already set up to be empty sow @hing )doB Epass areturnkAies
 sdef geth (æ B"""R1 ñ
a dictionary of scheme ->K  •  ·‘ URL mappe^  *E s» €0 ga9 ó 1rom!ñenvironment, if specified,¤  F Kn.` 5"""& â Ñ _[  ()‘ M "()N   	@y_by9_! Ghost:tryÕimport winregŽ YI P
6 à# Std modules,É`shouldÜ!arGõ- but you never know!a  ó 0 � # =© ’.OpenKey(¸ ö.HKEY_CURRENT_USER j   ór'Software\Microsoft\Windows\CurrentVersion\Ix  z't L kfEnable“ RQuery�,x(»�  H  b'Proxyd U')[0]& 5 � pOverridƒ 4str‡ ; m "  � p � 
r# ^^^^ 1Ñed as Unicode€problems" i`conver<…to ASCIIÞ zÒ
v1 ifAÌ+ ( b 	!F  #  to make a 3p list fçöname and IP addressì‘rawHost, F€= _split (G &  C = [1 Ïõ d Ð = socket.get;  by‡ (> W   !if˜ C !=   
ñ  $  D €.append(a B q	 Kš© Ifqdn©   £   £  - £  #ÃScheck¾Ê Ò0 enÑ € replaceÍÐ
        # '<ñlocal>' string by the  áhost entry and ó corresponding
  ²# canonical0 . ùproxyOverride =  µ.split(';')1 ñ# now check if we match one of… Pregis– fvaluesm ºfor test ini :_  ² "if& Q== '<ê *>'" & a'.' noO ~rawHost'  + ‰return 1f ‰ =j ð.replace(".", r"\.")8 Ï # mask dots< *< %.*< ÿchange glob sequenceG ?G F 8 # G IcharC  S0valR  aif re.¤(ó `, val, .I).  ö . !0
z 2def½€_bypass(x K B"""RpPTrue,% " ² should be 8 2ed.Q  t CPsX ñ settings gathered from[±environmentZ ¡specified,œ  K  d4he …e 5"""&  è“ies = get _^ (òið :ies0ræ  = y	B  ö ,Ó 6iesO OelseI ¿ ^&

6 ÷# By default use ¶ ’ variable¯Û è Ã Ò  
Û ^ se classes‚ d–ô urllib.

The ba" P, add ,´ ðines a minimal file-like interface,
inclu¿q read()Ü  �line().  b 1typÏîð
se object is an
addinfourÖstance, which†  n # €() metho?2at Ô€s
headerL 0d a#?url+ —@url.Ð

import tempÞ ã

__all__ = ['0',  “closehook  �  �url']


iF(Y @._Tek ãaryFileWrapper‡E"""B‚ #L5add{ 0. I‘‘good idea- ðgarbage collection.;+€# XXX Ad9�o expose¡timeout on punderly»rsocket?õ Fó__init__(self, fp¿  Æcsuper(10,  # %).2 bfp, '<t  >'e¦lete=FalsetÀ# Keep refer†ô	 around as this was partÂÆoriginal API¿ „ ˆ.fp = fpÆ CreprÆ Â Kà '<%s at %r wh%A q%r>' % ú 1.__äð__.__name__,
            id(self),  €.file)

9 Òdef __enter__% :   #if0 †p.closed   òraise ValueError("I/O operation on 7  q %")X areturn\ 	† 3xit… �, type, v] Æ, traceback)‚ Ê ` á()


class add Ãhook(addbase4 A"""C$  to' " a�  +   n» n¬ H."""š 'inš 2fp,;  : 0, * Cargsh  Psuper€ � zC).__L &fpË  L & =_ 3#    j ! =¶   ¦ k Â6try2 š &  H ! =€Ù  k  '    _ &  	% &if© 
f  C ² o INone@ & ^ ? = % F (mJ kfinallç �L 
2@info­
-Q add an & �) method1oheader$ Y A  ûK ú A ùc.; % 3 0urlö   »9"""ö   €() and g³$l( s%À, url, code=ìz 5 w &  C	3#, Ì <Purl =Z  ; .f  N2ode.0@prŸ!ty(  üostatus>	 E >  0 0get 1  i � ì Ÿòurl
""" robotparser.pys òCopyright (C) 2000  Bastian Kleineidam, ò,You can choose between two licenses when using this package¾Á1) GNU GPLv2!d2) PSF> ò  for Python 2.2u 2The¹ Às.txt ExclusýðProtocol is implemeñd as specified inh ±http://www.²stxt.org/no @-rfc`  (ð 

import collecjs qurllib.E ðrequest

__all__ = ["RsQFilePwR"]

R( ARate;d ×.namedtuple("& C", "] ¦s seconds"’c j ïT€oóprovides a set offfaread, Ó Šðanswer
    questòions about a single robots.txt file.

    """	 ñdef __init__(self, url=''):)  -   Ú.entries = [] sitemap €default_= Šy = None= ûdisallow_all = Fals"  Êset_url(url)[ ölast_checked = 0ñ Qmtimeî æ ð """Returns the # 	 AP was [ ƒ fetchedR )ðThis is useful for long-running web spiderd ¥at need to¸ ® 8 <new»çs periodicallyw  Í    rÃ  ³ ¦ ý odified  0Set™ ý 0 to%Á aurrent>¢ Rimpor" 7 ¯ " =C  †&()½ î 1 ª
ÁÁ  URL referrxLto aN.6 O 0.ur‚:url— Rhost,Q`path =!�lib.parse6 	 �V[1:3]® ?reagBReadh\ ² Ãand feeds itZ ] r® 6try� õf• prequest— Aopenå  dexceptÅ °error.HTTPE
 z as err_  if ÷.code in (401, 403| †   IÔ6TruÓ % (elR p>= 400 ü 2errf Z< 500…  9 ^ 	[ Jelse4 �raw = f.ˆK \p(raw.deÞ ÷("utf-8").splitlines()B_addÍY!, Ù`if "*"& º.useragentsš #6 F  9@cons!edc‰ ² "if…5 ‡  5  U
^  / b [firsth IwinsZ  / [
[ =˜ + `5  é °ies.append( y3d * !, Q.@"""PERinput# _ from³ Z ¯ 1We @ thaí h-i:C  õ not preceded byÈ ñone or more blank2 %s.! w# state¿`#   0:  rt tÝ  `1: sawr‘ ^ \  # 2# #anÄ 4or 3
- { » ô   ^� = EntryÀ       self.Ãmodified()
  ±for line in %s:  " aif not 
  ®state == 1  # �entry = E w    D ) 0z   Selif  ?= 2c ¡self._add_m ( á  H   Ž "ñ# remove optional comment and strip%	Ã 1i = š.find('#'– žif i >= 0Ø ’= I[:i]V  .y W³
�continueR ½plit(':', 1¯ @len( )ò�   3[0]÷ 4[0]¡ k.lower©  –2 12 ñurllib.parse.unquotem %[1G 
‘  @ !ifbu î= "user-agent"U0 P ' T / X$ .¡   „s.appendã Û  Y ¬ ) 1°  > p¿= "disallowù !q S   ¦ @rule\ ¥ uRuleLin‘�, False)¶  I º 2º · Y?Tru¶ 4¿crawl-delays+ð# before trying to convert °int we need :mak¼ l @# suH ÿhat robots.txt has valid syntax otherwisJ 	Ýit will crashÄr £¯.isdigit()�: i?o = int	 7 SÏrequest-ratež+tnumbersÓ é "/Î ¢  à# check if all}¿ues are sanv@if (ct fa Rh� Ž àand numbers[1]ÿ.strip().isdigit()):
  øentry.req_rate = RequestRate(int(numbers[0]),  O1]))[ "stN 2" ÿ
elif line[0] == "sitemap"¨ ó# According to http://www.8 ýs.org/protocol.htmlt   ð # "This directive is independent of the user-ag  ¦ ,M ð so it doesn't matter where you place"  in �r file."N T8 ñfore we do not change” N¡ parser.J Fself apÜ (Ç 6[1]­2if R J== 2wA Q_add_( !)
m àdef can_fetch(* ,.-W, urllQ"""usµ1he ³ öd robots.txt decide ifB  \  \  K &"", °  Ù Êdisallow_all· Áreturn False¬  ò7 4 6Tru3 q# Untilu®  ¼ð has been read or found«r #£`exist,É must assumÇPat noÛ  y” FableÈ!#   prevents fÍ P posi®s\1n a0Ç erroneously} PcallsG£A) beU   Œ º &()s  if¿  Ëß.last_checked]ò# search for givenš  Gchesœ  [Afirs+†ch count! "`_url =$Alib. A.url	 G(url `nquote †? "unA q('','', dk Z.pathá	 Hrams/ cquery,ÎA �fragment„ « z+urÉÂ &"/ý `†2 inª  :ies¥0if  Ðy.applies_to(Ë�˜   24  V2ancP¥ Q# tryrdefaultc  +% f# 8
œ l g	' .y  · �fõ==> access granted� ^ È ¨¬rawl_delayª†™ gmtime( &6Non$‘Q¹ Í  † cÀ    return só
elf.default_entry.delay
  Áreturn None
 ñdef request_rate(self, useragent):'  ? pif not ! w.mtime(  ! ]     Afor ‰ 2 in;   6iesX  ' "if& Ï.applies_to(„  ,   k  L Qy.req¼ ª ¦ 	

q A ' N + 
4‘site_maps1	& %  $ { P  Ì   d � 6 ¡|__str__k  þ Yies =Y1 isÆ ~ 
— N 
 1+ [‘ 	G]` ´ ñ'\n\n'.join(map(str,Íòies))


class RuleLineu à"""A rule line• ða single "Allow:" (a	 ñance==True) or "Dis $:"‰ ( �False) fo; ò ed by a path.""1  ñc__initQ,  !, V  n 
Í = ¡ == '' and<* Ì  À  ò# an empty value meansX   °  ,    own 0 = Ý  p ñ urllib.parse.urlun (   5 %))D ¶  * =I `quote( - Ó & =› �– \ §, filename,   .b  50"*"µ. ±.startswithÌ( )g èZ (B" ifñµ Felse²") + ": " +)  � ‰Eº †n¬�y has one¯ Amore-sùEzero  º ¹sVÍ ¯[E O < =  À" =³;"  Ö ÷ ÿß/:ret`  œâ œ¦ !p 0retš¢end(f"User1: {@ &}"O�¸ n	R aCrawl-2 1: { X ö [ 4ate. Î Rý-ý0: {   2s}/ xseconds�  À 0extõ¹ Ì�Á'(7ret÷^‡F€"""checkþCthis·ð applies to the óspecified agent"""
  õ# split the name token and make it lower case6 AuserK 5 =  .J ‘("/")[0].7 %()4 2for • in self.: %s:&  — #if) j== '*'  ! ‘# we have· ’catch-all6 	K  . ¦return TruÁ   Á  ¯  " ‰ &inç � a  aFalse
“ àdef allowance(`, filev)U ÷ """PreconditionD- ouCñapplies to this entryg  ¸ -Y ø  is URL decodedú �Eline�@rule s  M 0if  .s O_to(·   *   ø 2 î ™  ‹“"""createmPnipul ÀC data types� `Python» ò
import os as _os, sy 4sys 9  ! 
 ñ

__version__ = "1.1.0"

from _c%  Z ÿUnion, Structure, Array, �_Pointer �CFuncPtr©  * ž  µ ‘ ³ 3 ÁRTLD_LOCAL,  oGLOBAL, ÓArgumentErrorõ sß ô �calcsize«  X

if › $!=,› ´°raise Excep°2("VlÀ number mism¡(",O ,M )q 0os.‚ == "nt"c ©TFormaÕ âDEFAULT_MODE =Å T aposix"rÑ_sys.platformq cdarwinu ð # On OS X 10.3,r2use\ o 0²default mod]e# beca* † ô does not work at least on som8 ¶libraries. x  ÀD— ` 7, so‡ ‘check forWr# that.dÀif int(_os.uHP().rem e�0'.'�R) < 8] µ@ä 1&àFUNCFLAG_CDECL_ 1, \�   šPYTHONAPI.  2 šUSE_ERRNO2  2 žLASTERROR6   

# WINOLE� ¨-> HRESULT  _(ú)
#
# STDMETHODCALLTYPE (j)( = ,QC 5API@ 
þð_string_buffer(init, �S=None,. ñaBytes) -> character a²À    create_sú(tring_buffer(anInteger) -> character array
    create_s7 Bytes, ? 1"""G ðif isinstance(init, bE !):   k ö if size is None    Q= len> 5)+18 ÿ_sys.audit("ctypes.¶ 2", x  K )> 0buf4 P = c_! *†   3 = & (8 �.value =X 1 `return2  /elü 7intú Â  È 	Š Â  é ~  ;?bufÂ © ò raise TypeErrorgt

def c0 X , =Š P):
##c ÿ"deprecated, use7  Cead"5 ó import warnings  .	 $("{  e ,P  Ÿ  D¨ BionWx â, stacklevel=2VF‘)

_c_funuP_cach!{}4ÐCFUNCTYPE(res `, *arg
 ss, **kw?""", 
ÈÆ ñ use_errno=FalserP_last "or Ò� �ion proto| !.
P ” Ð: the result   § ñ: a sequence specifying4 rargumen6 sU NThe r ð can be called in di} = sways to/! a  ) Âable object:] Â "(i³‚ addressé eoreign I 3 S , ×b and r¬1a CŸ v Â Efrom Q „ ñindex, method name[, paramflags]q f� U  ISa COM= a ó(ordinal number, dll)c  ex]ced by K b é  · a * A ^ ïý @ = _¡FLAG_CDECL$ µif kw.pop("É1", Ë êC |D ŸUSE_ERRNOH  M –LASTERRORQ vVãô"unexpected keyword �(s) %s" %Ü bkeys()K7tryS o6[$|!, !)]› ¡except Key‹ R €class CF…0ion¾!(_ 5PtrNÀ      _argty÷pes_ = argtypes
  @_res  !  
  Aflag? 	  q_c_func; scache[(? ,i !, 4 p)] = CF. uionTypeF kreturn ñ
if _os.name == "nt":3 afrom _u ÿs import LoadLibrary as _dlopen/ ñFUNCFLAG_STDCALL4  
? K_winå Q = {} pdef WIN: FTYPEý *gr, **kw)º  rô# docstring set later (very similar to CT ‘.__doc__)q  B O@ = _# Æ " ÷if kw.pop("use_errno", False‹ M |N ŸUSE_ERRNOP @lastU /orU šLASTERRORY  ‘ ðraise ValueError("unexpected keyword\àument(s) %s" %ð fkeys()(;try[ hÒ ·	­ ¡except Key™ 
\ ˜class Winâ!(_ñ;Ptrv é _# u m  "   š$  G 	 	D í , =Ä 	N ªç # i
¶%' 0UNC; ¥.replace("G", "> l")

el_posix!è /

Hðsizeof, byref, address Palignt@, re' @ !ge0no,Ý %/no) à_SimpleCData

Hp_check_[ `(typ, V„code=Non·0# C& @ if ) 2of(_- ð) against struct.calc' b.  Thióõ
# should protect somewhat= ña misconfigured libffi.æ4^ {e   %if· @ is º q# Most ¬  _ Û °s are the sç£as used inÂ T  ã ß  1   =` .C  `actual•0qui¯ =dtyp), Ÿ  TeC !2if : b != re< « †aSystemî ("Ið of(%s) wrong: %ª °stead of %dˆ\•  ³   ƒ ,w ± B))

>¨py_object(;ó a = "O"d 4Ã_repr__(self)  x ûÀ         retó	urn super().__repr__()
  õexcept ValueError:  " 0retA ð	"%s(<NULL>)" % type(selfS ò0name__
_check_size(py_object, "P")

class c_short(_SimpleCData)p _S y_ = "h"K 4 D uE HE 5 F Olong‰ lD  3 B u C LC 4 ±)

if _calc.x"i") == 2l")Ð# if int and q ð  have the same A ’, make c_( Ð alias for c_3 Ñ = u2   ˜ R
elsew °/in® ²!i"b n !)
 L  m /
M IM  ; zOfloa˜ ” fz4 D odouble� E dE 5 F  _ J  g"ó ­2of(–7 ù  „½  ¥ =l=q= £ > C     ? anH    ”  	 æ_D    R  !   0

q
 ;   \    W QW  ##n ôdef from_param(cls, val}$  ( a('d', K(' -  P L   õvmethod( {
-- ¿ [Oubyt QB"
c_( A.__cB0le_F b ð
# backward compatibility:
##c_ucharÀ \ �p ¨ § b§  ' ¦ 	 ¥   v   u  ¢ ë¼cu  ' u 	 u   u   u /_pw z^ Xm)ÔL S!%sOK ¨  1R__.__T±, c_void_p.@abuffer. 0).v²)²  ð _p, "P")

classò c_void_p(_SimpleCData):
    _type_ = "P"
) 5p =3 ò# # backwards compatibility (to a bug)
_check_size(D ÿ_p)

class c_bool| °?"

from _c� ós import POINTER, pointer, _
 ¸ Vcachei _wcharè !Z"ù ódef __repr__(self ñreturn "%s(%s)" % " 1.__Ó Å__.__name__,*.À q_buffer. w).valueŸ 	Au"

š areset_à (š û  �.clear()Ò a_c_funA9 	 pif _os.· ‚ == "nt" ñ O_win= 	(# ;1.c_Ë 1_p_õ Qparamƒ °(! )  U7  7 _ È^    ]   ,_p\ 6 a[None]‘ täcreate_unicodeË`init, Û=7 Œ?"""/ ÀaString) -> ‘ ±acter arrayë 6 �nInteger8 n ?, aA """øãif isinstance(Þ #trØ  !ifï @ is ò & %ofä N2%  ) ò# UTF-16 requires a surrogate pair (2 át) for non-BMP( C  #Jñs (outside [U+0000; U+FFFF] range). +1N �trailingO  6NULS .!  íð = sum(2 if ord(c) > 0xj b else e Pc in EY) + 1J  & d32-bitú 5 (1 Rper U~Ÿ Ñ 	]  $# ã  Ñ 1lenñ
¬ Á_sys.audit("=/s.¥!",é r † 0buf³NÎ! *?¯ cbuf = ' «9 "! =Y 1 ~1buf /el³7int³Ä  ÓÊ Ä  Õ€ ¬ Ä « ò raise TypeErrormñ


# XXX DeprecatedãBSetPÖ 1 (ØS, clsÚ  ³ ï‘.get(cls,ž)§1not oÀraise Runtimó<eError("This type already exists in the cache")
    if id(pointer) not in _ _F _0 :/  3 Äraise Runtims ãWhat's this???\ E A.setI B(clsv _  ` ƒ[cls] =  n ?del‹ [² ò]

# XXX Deprecated
def ARRAY(typ, len)¾ `return  * ?

# ,ó


class CDLL(objectm ñ"""An instance of / r® ñ
sents a loaded dll/sharedý ðlibrary, exporting functions us  Í _ ádard C calling> `conven- ñ (named 'cdecl' on Windows).
, 3Thee 'edd ñcan be accessed as attributes, or by@ Pindex� Awithb©  { Â.  Examples:q á<obj>.qsort ->¸ Rable @T # !['$ /']& ' Có 	u �s release�ðe Python GIL dur§  7 ,2 ankñ
reacquires it afterwards.d 1""" _Ö ÷
_flags_ = _FUNCFLAG_CDECL# 1res8� = c_int ð# default values for  _)ò = '<uninitialized>' ¢handle = 0 âFuncPtr = NoneU ö __= �__(self,~ò, mode=DEFAULT_MODE, P == ,R  Ø ÿ use_errno=False" @last' /or' 1win}  h  e  � .ò  ù ƒ ]2 = " p" 5if Ÿ Õ R   < |™œUSE_ERRNO? ¼ D ˜LASTERRORH ð_sys.platform.startsg("aix"ï  � b"""Whe ò ð  contains ".a("Š` ends B M ")"uóe.g., "libFOO.a(	 bso)" -[ ö akf o¹n¯  ƒ ð    archive(membîasyntaxŠ‘dlopen(),‹  " ºÂ is adjustedJ   ’Otherwisei , 0preÕded to S 9ê file argumentL a U   !ifºŠ  -. Q(")") 6!in) 
Ä B ¼ ö|= ( _os.RTLD_MEMBER | BNOW � 3 !if  p Š == "nt"X 3if Ð ê  ) ×
$  I | =, 	ƒNelse1  imà ( C  K ðnt._LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
     õif '/' in name or '\\ (:
,  aself._0 ð= nt._getfullpath (! )A bmode |< ñ	LOAD_LIBRARY_SEARCH_DLL_ EDIR
B óclass _FuncPtr(_C
 )¦ ¡_flags_ = 	 ?  ¾ €_restype ¥ Efunc ,  ` % =u � úif handle is None… A " —= _dlopen , ?elsC L � Ádef __repr__T ôreturn "<%s '%s',¨ õ %x at %#x>" % \ì  1   H 1.__fA__._áB__, Ì  Ù,5 6 � þ	 & (_sys.maxsize*2 + 1))7 !ido )2 ç dgetattê ,¨ð !if ò.startswith('__') and 7end 
¨ðraise AttributeError(ë š "# = ëkitem__& s¦ × ¤  , : H ™  ß Q  h; ·_or_ordinalê  : ‰ œ(‡ 0 ¯)w   Þot isinstance2 7intg   k ! =He 	Ô :³ PyDLL(CDLLT ‚"""This   µðesents the Python library itÁ.  It allowsk ”accessing0 1API^ð tions.  The GILŒÐnot released,B h Qexcep5 C areÁd correctly.- 1""" _Oö_FUNCFLAG_CDECL |  ðPYTHONAPI

if _os.E’ == "nt":ñ;Win" r&Àa dll export ” Â u1the­  E ðWindows stdcall   4 `conven6 á  , å   é rSTDCALL¿ ñ"# XXX Hm, what about HRESULT as normal parameter?˜ ð# Mustn't it derive from c_longn*   _c @s imñ ƒ _check_f á, _SimpleCData_ T  ( à  T  ô""lÚ  #] pretval_= 10ed F ™ dñ's result when it| F pis used^Àº Qs forK ¦FAILED bit–A „qs an OS�0 if-fis set²#u  ñ¿ `methodÆ #`mentedÙðC, so that the
   ò-# method definition itself is not included in the traceback
B p  # whe7 ð raises an error - thatJ w ÷we want (and PythonE òdoesn't have a way toS R Bxcep  ‰ ‡caller'sC uframe). ó_check_retval_ =  �HRESULT
) ñclass OleDLL(CDLL):  ß ‚"""This $ ðrepresents a dll exporting func� @s us 5theE °Windows std´    $ `conven6  , `return   É  W@valug°re automatiT y-€d as OSE‚„ e>sU 5"""  _Á a_flags(ûFUNCFLAG_STDCALL) prestype+ › "

$óLibraryLoader(objectQ`def __f0__(c,E H !  r  P._dll $ =" «B ugetattrE nõ´0if  ¦[0] == '_'  a ¤¡ Attribute'(1 )ä  Û)= Š " sƒ Æ  > Ì C Ì ¾ º Oitemº 5 à ] )E  Yd! ä E ¾ á !__©B_getŒ " =ß	 (_yòs.GenericAlias)

cz  … "er-?
py  PyJ�

if _os.# �B"nt"¬ p aapi = - "("  5ð", None, _sys.dllhandle)
elQ   �platformV ocygwinZ 2lib] P%d.%dQ 2" %] ðversion_info[:2]d /se¤  – /)
× ?win1Win ‚?ole# ‚ëqGetLastž2 = V ¨.kernel32. Öqfrom _c¼0 im—¡ get_last_�9, s S1Winh `(code=â q, descr œ0if #  Ð & $ Ò    (= š ("ifS < n ‚ = Formaõ � w).stripH Þß(‡ ­ 2 ˆ )¡àsizeof(c_uint)( cvoid_pÛ  c_  _t	, R7c_s 2int|  U OlongV  - W   Ô
X   \  1 `  ð
# functions

froñm _ctypes import _memmove_addr, 4set …string_a 2cas ³

## void *B ( s, const ³, size_t);
' ð  = CFUNCTYPE(c_5 O_p, 
 = (¦ )| 5set{ 5intr  q ?setp 6 (c_m •)

def PY³ 0resA`, *arg
 ñs):
    class CFunctionType(_ 3Ptr$  ( _8 D_ =  B  `     Pflags _� ÖFLAG_CDECL |  ‘PYTHONAPI8 jreturn— 0

_È( =Ø ˜py_objectŒ  !)(> #) M “(obj, typê x +  ! 5

_X„ vc_int)(4 z H B(ptrú3=-1ƒ 6"""   ß[" b]) ->  
%R%3the @ at 2 A."""" Ï 6 6_atq b)

try>frobw5 º ‘
except I�RError= ’pass
else _8 &5 m )¾  Ã » , {7"""%  ÿ 1 / 5 & 9Z «õ)


if _os.name == "nt": # COM stuffÀ pDllGetCeO¨°(rclsid, ri 3ppvø w ’    ’ccom = __øq__("comÀâ.server.inproc ó", globals(), loc
 R['*']U V Ë    þ °-2147221231Ü €LASS_E_C ÁNOTAVAILABLEì  7     I  Æ .
Ø øÿDllCanUnloadNow(%†…0 # S_OKô 
Æ !

lÍ„._endianÕABigE ûStructure, Little ð


# Fill in specifically-dÏ1es
�ò8 = c_byte
c_uint u €for kindG q[c_shorGY@longV    ]á!if0of(< )ÿ12: n A16 =R /el+  4+ /32+ À 8: c_int64 ¡= kind
for	 ò in [c_ushort, c_uin Along  	   ð]:
    if sizeof(I s) == 2:9 316 `  * /el,  4, /32, 8, $64, 2delx ð-

_reset_cache()
"""
Lib/ctypes.util.find_library() support ý ñAIX
Similar approach as done! eDarwin4 óby using separate files
but unlike 2 Ð- no extensioA Y ˜ ò\macholib.*

dlopen() is an interface to AIX initAndLoad() - primary documentation at:
https://www.ibm.com/sî À/knowledgecea ñ/en/ssw_aix_61/com2 Òaix.basetrf1/™ O.htmZ =AloadX 
á ‘Ás two styles|€ ð(): svr4 (System V Release 4) which:ðcommon on posix
platforms, �¢also a BSDb ñ - aka SVR3.

Fromlð5.3 Difference Addendum (December 2004)
2.9< `4 link0aff¨ñy
Nowadays, there areØ Ámajor object5 ã Àmats used by0 p operatQ sí às:
XCOFF: The 
 r enhanc3 �IBM and ol !s.% ‚original. !(C"
Oy ñFile Format) wasu  ñ0 ofÑ 3O  &C4.2 „ ñ.
ELF:   Executable' Lü P Q thatT @deveÔÖ AAT&T.  Þ
k  yàSVR4 UNIX.

Wh– ³the shared ¬€ contentß�identicalâ 5 - £ is located¶aY±path name
(8R)„  d , S 	9 mÞ ofƒ�archive (\ 4  
o 
@).

¦Vkey dD arises whe{ à`multipJ%bi‘(i.e., 32® Â64 bit).
For eiéQ onlyÿ 0ABIÊ A`ed, orÓx¶directories 
–¤ � 2CSmost QAsolua ¶µ y  
f  O†  »  (iEAIX)z º2 0y ( bÁ
äsufficient
as i 
" ies can beÁ©P - evp0harm  AsameK.
In=   ‚  ¨ -PreferŽ to\ # "¿"œ  ®
®Ü?is ; a"ÛÎZ(readê)Éa callsEs§ó	.
Default activity occurb1no   inýaºðis provided. When pð`ath
information is provided dlopen() does not search any other directories.

For SVR4 - the shared library name` Athe  !of' ð
file expected: libFOO.so
O ?AIXN  is4 ð
ressed as base(member). T ­ `is forj 
$ t (e.g.,g °a) and once# G  ¥ Qfound sÆ ò- identified by
s V Ðso, or shr.o)O Plocat© Ànd loaded.

¥ ò-mode bit RTLD_MEMBER tells initAndLoad() that it needs to us²  "óR(SVR3)
naming style.
"""
__author__ = "Michael Felt <aixtools@felt.demon.nl>"

import re
from os   environ, p8 &sy ƒxecutabl8 Uctype òc_void_p, sizeof
? …ubproces( Puõ, PIPE, DEVNULL

# E^ 0 E P - 32i`64
# U
�to filteñ°`in an »aive by‚ ", 	á-X64
AIX_ABI = 4of(® s) * 8

­ ì 0max‚ ð
def _last_version(libÞÑs, sep):
    & <num%   # ñ# "libxyz.so.MAJOR.MINOR" => [ !,  ]S  4 pparts =Ì s p.split(w # 0num" [5 2try•  B    wh�L 
    @ ñ .insert(0, int(* ….pop()))i úexcept ValueErrorL Epass, preturn \  ¾[M¤  `max(reU%edT‡), key=_K!)
„äget_ld_header(xà# "nested-funcá , but placŽát module level  E q = None  Aöline in p.stdoutà 0if  0.st�Òwith(('/', '. G./')ë Xg  = g   Àelif "INDEX"o   k  " !B Â.rstrip('\n'�" ¿ _ð#)#p5an ‚ 0 waeSund, | Qknown'$s,zsk1#b!se?!s @ @� a digit ¯ 3 = Ã‹ðre.match("[0-9]"ë+ne T `.appen]"ne8 ^Jelsepq# blank¥  ^ò arator), consum¿ Ü 1endmAloop¼  R   Qbreak   � º  s(­  Á = 3Parìß 9IAr seÚ  e$ Öòl Th
ðunction calls /uðsr/bin/dump -H as a subprocess
    and return õlist of (ld_header,  á_info) tuples.> 1""" e# get_* £s parsing: ð$1. Find a line that starts with /, ./, or ../ - set® Q G ð2. If "INDEX" in occurs
 ²a followingd -× À E  3.­  Í   (� s‹  : � a[0-9]). 3ldras = [] çp = Popen(["/udð", f"-X{AIX_ABI}", "-H Qile],=  tÑuniversal_new‚ ñ=True, stdout=PIPE ²err=DEVNULL� ð# be sure to read ðthe end-of-file -à tÏ ¢all entrieí wh   l ™ � d  =8 Å"(pt  % &ifG;   "ˆ.append(=	AF(p))Y JelseQ Qbreak+"p.r.close(5 cp.wait ¹ „ Q

defÈ fsharedŒ "s)h ³€extract >, öable objects fromó >0cha2 Ñer "[" is use�‘strip offM Apath^rrmation*QNote:   =  vE"]" S s0are;„¶aoutput  ònot removed here_ Ö Ê d¬2forå@, _)(ïs Äñ# potential memberC�s containð € - ãotherwise, no M oeneeded*  if9 u +inæ6# S5@rail@ ‚colon (:ê m   Ó ] /[ ã.index("["):-1°3 Ðone_match(expÓ<ine@Must^‘only one 1 %, î p resultù3Nonx@WhenÖ re a5 @leadØ òté ""]7¶#wAnameÏ –«   ±between squ bracket¢ Þ   = rf'\[({ Q})\]'’Ï eÇ å€(filter(Ê ©, (re.sear! ) = kÃsº 3en(S f) == 1O… ²[0].group(1Ø
ó-  ˆ €

# addi5(alYrto deal,²AIX legacy / § c64-bitGs( (Õò�This rout“÷provides historical akaj  Ê@sche¢¼ë‚in AIX4 uó library supportE ˆ ¸ ¹Pe.g.,aJ lib/libc.aUÏ / a shr.oN !32ì 0binh "anrðshr_64.o for 64-bit ñ binary.
    """ ñif AIX_ABI == 64:  " # ð 64-bit member is one of shr64.o,	 _
  or 4 F õexpr = r'shr4?_?64\.o' X ð= get_one_match(6 ,u %s). #if ¦  ª creturn - Felse$ A# 32Æ ðlegacy names - both³ `.o and
 ’4.o exist% ] #  .oû Ñthe prefferedF Ò so we look f �.o firstˆ A Q i.e.* ` 2is ± Ãed only whene ‚does not… C  [  µ P in [JP.o', 	 V4.o']ê  p S re.escape(J )^  = b  µ f ‘None

defÅqversionf e £ u�Sort listJ° sƒR  highest nuv3ed U s - if is¥ÐThis function§bcalledWSan un> Ãed libFOO.a(	 qso) hasi wÁbeen found.
 VÎ 1ingà ° ÿñis expected to follow9 ðGNU LIBTOOL convenŸ 0s: C à ™ @ (x, Un X.y
 3Y.zú€* find [µ �oo.so.X]e    /.Y 	2.Z]Ù `Beforev  « £ b becam ñstandard scheme regardless of‚ SQ size/ìpackagers used[ q"as-is"K“E sarchive[Rs but? òan "distinguishing"x 	š­ Pinser™ðeither 64 or _64 betwé P!OOy1.so‹ ³- generally- Ï1so,• @occaÝ $64; Ý#U Â es- D end@ñÓs must start 0# 'Ús[0-9]',3* `at lea.‚ne digitãð# while multiple, mÔ€specific›r„ ³s could be  !edð #· se‚– p 1X,  $.Yc.X.Y.Z1 Qafterä è` requiR'dot'  + `ny com% þ î@addi 7al 0 õs pairs are accept  @anytúÜ Cthan™ ¤ )s. | %shò  ìCas aaCàoutside normal,@ecta›  ÁÀs = [rf'lib{6q}\.so\.¤+ Q.]*',q "* ê. º À a  Ñ  s  E #2= [-    1 @line1 �3  ! me"e.Ë@ðline)
          ›  if m:
  õversions.append(m.group(0)), 4if ' 
A Óreturn _last_# ( bs, '.'E ( òNone

def get_member(name,  "s)` 1"""} R` £an archive( ð
 matching the request in M .; qName is! qlibrary õ without any prefix like lib, suf A.so,K $orÿ 0 nu´ b ó Given a list of› Âs find and r¾  £ ñmost appropriate result_ €Priority® gT  to generic– 0XXX‹  Ê  o _&ed a.a.b.cM  x ðfinally, legacy AIXû  /bschemeÀ eõ# look first for a~ g  -(  r Ú ,A .sou àexpr = rf'lib{„a}\.so' Ú! =ôAone_U (4 ÷*  ¡ ©rCD % @elifÒ ¦_ABI == 64.  T ˆ &64Š  Q J Ž 6ò# since an exact™d 4 asS`was noa1undÊ xrÖ ?  DIf a{ edÄÓG ,º orïã H  �h vp &seqŸ Îl(m &s)ç›libpaths(Ü Onµ ,×Ð buildtime seê 1  `storedÙ E“executablÁÑas "loader he Âinformation"å€The commð	/usr/bin/dump -H extract%0is = 5 PŒ ibrariesÙðLD_LIBRARY_PATH (Geerred)11LIB ðif defined. These Ü Ps are�ended to ‹ tokt  û Ppythod alinked” ¸ °This mimics\ò dlopen() behavior' ùšû = environ.get("à "Ä if” ¤  }  Ì	K C ![](ellc  “.split(":` @objeÏë2ld_&s(:Ì  æ (_, lines)`; Ò  #       s  H#² second (opsÀal) argument#i›¡cludes a /Ü  D    P! =‰ Î 2)[1ÿ     `if "/"ˆ  - 
‡    0extÂ & L À(":"))
    rñeturn libpaths

def find_shared( ñ, name):
    """  ð is a list of directories to search for an  Aive.=  P  < ñ the abbreviatedh ` givenA ‰ ’library(): „Process:^ "ˆ "f çrchive, and ifv  l Qfound~ rö  } Qresul½ ¤get_memberk IB Anot F c then G ANoneW  ñ qdir in � 8 <`# /lib� ð a symbolic linkî @/usr ‘, skip itU  7 i[P == "! "Q   rcontinu„   p# "lib"g €prefixed` òemulate compilermµresolution,p °# e.g., -lc9 Elibc Ðbase = f'lib{ÇE}.a' å! =ú °.join(dir, 7 )' "if  sexists(6 a Ã   �@s = ›�  –ld_header: [ : 9 G °(re.escape(µ 2),  s: #if @ != Ù
k ] ö(Ò F 
E Oelse8  V ,\ 6 P  ‡þµ U ð"""AIX implementa½ Êctypes.util.;yHFindð	 that will dlopen(). If ì’available:alsÕ‘ file (orÄ ) with a .' quffix.
z  ¯ Ñsupports two ©  ³ Pschem. … ²can be usedK ‘ F ðThe so-called SystemV Release4 (svr4)0matü¡commonly sŒ eü¤  ¢  wh½  ¡(default) © “ @ hasæ   ¥Œ bending¦  C c 1 .a (Ash J ƒmultiple^2s (ba32-bit° 64 )61one[M  _ @arguë@ pas#to­ù must include bothµ añ D ï Ise ó a single string«
8° looks firsúÈE (.aò@suit(ß ªE÷+  pasG,`  ³6 P=  Lÿ ›Î (=
† ˜¼, ¿O !if‹ß‡0f"{Ù2}({± 2})"Ä@# To‰@ herbë JÝ6 :Bbeenä v ð# In other words, ei Ñ@# a)aõA was~j? b! 1did! {have a }2 /So^ð
    # Check libò@paths for .so file
    # Note, the installation must prepare a link from a .so
< èto a versionedV ñ*This is common practice by GNU libtool on other platforms– ð soname = f"lib{ Q}.so"  Ä `dir inG Ø : ” @/libz ±a symbolic ½ pto /usr •, skip it7 0if S @== "! "Q  U rcontinu2   she  = } ².join(dir, · )V " qexists(6 )[ creturn: 9 €# if we xPhere, ðhave not found anything7CusibÍM ðNone
import sys
f·sctypes   *

_array_ 0 =   (A �)

def _˜³_endian(typ¹ B"""R´  3 7 Q withA'4 ñ' byte order.  Simplea Rs likFÀc_int and so�already é !__® Q_be__$  Ale__%ðattributes which £1ain‡  • !s,ì@more„‚plicated‡ C  í s_ ¡structuresv0sup<1ed.) """xõ# check _OTHER_ENDIAN Š � (presentÀ0typ„‚primitivÿ `if has7  V,O e dÍ?get, ž /o Ò Qif isÐ3nceh  ðf î.) @_) *3‚._length}s ;w ‚subclassw S\u 1typ6 ñraise TypeError("= ÆQ doesø”.–p: %s" %¡ 1)

t à _swapped_meta‚ &e(‚ ƒ ß"_sY�__(self,É is, value,  Š%if  "š_fields_"Ë Q = []×  ;   °0esc±[ 
7  #  x š = desc[0>    ß 1 Drest= .2:  ˜ .@nd((l ,ß @) + K ¦ w   ±  ‰ó Ø —super()._G §] 5 O)

# ,"

Ÿe: The È Üï’× �*ƒPce* (.Rthe
#Ðv!) of a! ¥!s_ÚJÑ to determineH2bitÆe in
# ë ÖPntain‚ % b@

ifq.[ ÿ/clittle-
=4= "Û ì!"
aL1 Ezõ =' ;Big* ñÀ, metaclass=ó_swapped_meta):
  õ"""Structure with big endian byte order"""3 æ__slots__ = () b  5 s ð None

elif sys. L ’ == "big"† ñ_OTHER_ENDIAN = "__ctype_le__"
` ABigE“ ¬ %=  # Ëclass Little, (*  , ÿ + =lU ;"seþ ñraise RuntimeError("Invalid2Ä")
import os
 eshutil †ubproces  ðys

# find_library(name) returns the path c of a ( P, or ¾�.
if os."  ¶Bnt":’údef _get_build_version(ZRj i !  h ñMSVC that was used to H ‚ Python.d  £3For É 2.3 and up,S ñnumber is included in A  {} 0.  O ƒearlier  ‘s, assumeU bcompilO © %6.K ñ # This functionË ðcopied from Lib/dist¥ds/msvcZ 5.pyR `prefixõfMSC v.e1i =6¥ .È(/ s@if iN"-1M ð   â% 6h  N }i + lenE zs, restp ö[i:].split(" ", 1u bmajorVðø = int(s[:-2]) -s )f * Z>= 13§ 	  E+= 1° >mind Å2:3]) / 10.0* ñ # I don't thinkÑÐs are affecteG P ñ5 in #° K== 6¯ 
• „ i; >; ‘
ñ – JÑ selse we× `know w. C »P ù Es isB m  ÁH ¬ @_‡/rt¥è!of	BVC r–H dllûˆ =‡ %iff!isO
Oð # better be safvan sorr ÍÏ     \ <mAclibÊ 2= 'ò '• ŽÁ <“< t%d' % (3 F* 10 ªÕ 0CRT‹ð no longer directly loadable. See issue23606 fors¥  â €# discusVö about alternative approachesŸ 7 	üÀ        # Ifó python was built with in debug mode
  rimport  Ölib.machinery#  f '_d.pyd'E +  õ.EXTENSION_SUFFIXES:?  i õ clibname += 'd' treturn  �+'.dll'
  ðdef find_library(A )X 0if   “ —('c', 'm'  w _ F �msvcrt()\   õ# See MSDN for the REAL search order..  # �directoryt ûos.environ['PATH'].split(os.pathsepŽ f¯ #= ! e.join(T ,Î Ÿ  £ %if- qisfile(D X  * ê  c ´   1if 4 Ð.lower().ends ("l"L  vcontinu$ H E " =M 2 + > k Û ® !Ã ‚None

elü  Ð ñ == "posix" and sys.platform rdarwin"±from ctypesÌoÕCdyldä  _U as _ Ë tñpossible = ['lib%s.dylib' %¿,F  0 '' Àframework/%sU õ]]  �4in “ þ w :try   bô ^ 
sþexcept ValueErrorG  X º£c.startt4aixsò# AIX has two styles of storing shared þ1iesþ ð
# GNU auto_tools refer toÀ seÓAsvr4(3aix4  ð(System V Release 4) is a regular br, often31.soR 5uffL  µ ­ � uses an /aive (s( B .a)? ðmembers (e.g., shr.o,Ñ bssl.soyñ# see issue#26439¼ q_aix.pyšÂmore detailsä * Û Ö/DÑñ# Andreas Degert'smà functions, us‡ñgcc, /sbin/ldconfig, objdump_� re, tempE¦  M€_is_elf(  ²o""RýpTrue ifÁa givenˆšQn ELF "k  Åöelf_header = b'\x7fELFS ÜU opent p, 'br')Ê0theŠ  N   ¿ €.read(4)Zl Ò  erLib_gcc@N ò# Run GCC's linker	 \ð-t (aka --trace) ophîpexamineè #) øYð it prints out. Theh ð command will fail be£cause we
  ð# haven't supplied a proper ÷gram with main(), but that does notK umatter. öexpr = os.fsencode(r'[^\(\)\s]*lib%s\. õ' % re.escape(name))
N �c_compileT õshutil.which('gcc'))  if˜  0 :  ö  : = H G u# No C ” ùavailable, give upv ¶return NoneÓ ptemp =  ö	file.NamedTemporaryFile(× :tryÉ †args = [Ñ  , '-Wl,-t'
 1o',[ .J  Pl' +  ]ƒ  öenv = dict(os.environy # ù['LC_ALL'] = 'C'ß Ÿenv['LANG »  S @proc‚ ub
  ess.Popen(× ,]  .  ‡stdout=sF ?IPE@ 8err@ oSTDOUTB {env=env0ðxcept OSError:  # E.g. bad execut+æ &ò ƒ '
 # ptrace =®"c.W.read:kfinall>” ŠX.closy f eÐ  “‚NotFoundÚ Ã ð# Raised if the Ùp was al— ±y removed, ½1 is' onormalN  ðbehaviour of GCCX Ýlinking fails4 6pas  re$°re.findall(•!, 6³3:resa�h 2forÖ =in 2 p# Check¦  þ  n. �s an elf €: gcc caC 6porG nR# som; pat are ö �er scriptM dèKactu:ð# shared objects. See bpo-41976 Â �more detC€_is_elf(À) £ vcontinuJ  /ñ!deñ? 
pöif sys.platform == "sunos5"a  # £ö/usr/ccs/bin/dump on solariÜ°def _get_soÖ+(f¨ Ê f]  ¥   © 
Ž   yª-("§ ß", "-Lpv", f)D¸†PÆ,ðDEVNULL)
            eûxcept OSError:  # E.g. command not found
  ¹return None ©with proc:  > adata = é.stdout.read()* ð res = re.search(br'\[.*\]\sSONAME\s+([^\s]+)', U 
A !if· >resƒ ¶  ò	os.fsdecode(res.group(1)a FelseS ödef _get_soname(f)  î ù# assuming GNU binutils / ELFò ± f@  D — eÀobjdump = shV ƒ.which(' '°  B   `  f ##  1 is;ùavailable, give up°  T š 	 >tryb   ­  ub
 ³ess.Popen((y `, '-p' j é.dynamic', f),_  |  T'=sf ?IPE@ 8err@ zDEVNULLOe4 bad execut;¶ 2Â 1	ä 41+:umpË +;ú ðif sys.platform.startsì à(("freebsd", " ádragonfly")):
F  (hð num_version(libqoñ"libxyz.so.MAJOR.MINOR" => [  !,  % ]]  a pš 3 = X º.split(b"."-0numš[> ðawhile Y  t  L ñ .insert(0, int(. c.pop()p )   qRValue¨	À  # Ipass n h P or [�Šmaxsize]\ßfind_library(Y e ’bescape% 	n @expr# °':-l%s\.\S+w@\S*/¯ a)' % (P !,  
aF …!en…  )°  ë q #að '/sbin/ldconfig^?-r'U—‰ j = b''“	­ 9   �Ð proc:
        ødata = proc.stdout.read()

( ðres = re.findall(expr, > )) ¹if not res:  M ðreturn _get_soname(_P €Lib_gcc( )O ü
res.sort(key=_num_version' Z óos.fsdecode(res[-1]È öelif sys.platform == "sunos5":ì Edef ” Acrle• z, is64)Ò ê ð
os.path.exists('/usr/bin/> '4 FNonex   üenv = dict(os.envirè úenv['LC_ALL'] = 'C'D !if« 
ª  ] 0argÂ  z, '-64'NOelseB b e     j à    >tryU  x` = sub
  ess.Popen(¯ ,AK  ¹=F ?IPE@ 8err@ DEVNULLC {env=envIýxcept OSError:  # E.g. bad executableç (BAwithªH±for line in" Ì)  ;) =0 z.strip(·  $   $if$ @arts~ ÿ(b'Default Library Path (ELF):î H   £ ˆ Í).split()[4]Ë J9 È $	A 
1dir	Caths` ?":"Œ ¤libfile = Çð join(dir, "lib%~A" % ›	h  Õ %if8 ÿQ k   0 µ % 
ï  õi  � ""_lnŽ‹ = Falsek G d ’B F) orí�   »  Š S¹‘_ldconfigP „ Õimport structB  F  … à.calcsize('l')�4ä@machÔžuƒ4(). y+ '-32'_ ´  i  2 G *64G  1 ‰_map = {`  V p'x86_646À: 'libc6,x86 .K'ppc, o64bit'+  Ospar- @390xt „ X ðia64-64': 'libc6«,IA-64',
  } ð	abi_type = mach_map.get( éine, 'libc6')
7 ù!# XXX assuming GLIBC's ldconfig (with option -p)= ÿregex = r'\s+(lib%s\.[^\s]+)\s+\(%s'1 Âos.fsencode(E ô% (re.escape(name), Ó )v Itry:V  § ô
subprocess.Popen(['/sbin/Ï Ž', '-p']M D  gstdin=W DEVNULL@ ?errA +8outA OPIPE ðenv={'LC_ALL': 'C BLANG ~}) as pM 	0resÚ‚e.search§û, p.stdout.read(š 8   oif resX    qreturn #de›s.group(1U îexcept OSErrorU FpassÔò def _findLib_ldK
5 ù# See issue #9998 for why this is neededd@exprÅ'[^\(\)\s]*lð K' % Å	D  cmd = ['ldˆI-t'] �libpath =qenvironÃú'LD_LIBRARY_PATH'3if ; 
è  j Ú Dd in" ¾.split(':')-  1 úcmd.extend(['-L', d]o 
" 0o',¯ pdevnull_0l%s	 Ä: Ùresult = Noneû ÓGp = {ÒRcmd, ƒ$;std”Súuniversal_newlines=True" Hþout, _ = p.communicate() h µ@all(jT#fs;out b  Û@fileÞnò# Check if the given 6 �s an elf ù: gcc can reportž n   a# some0 ð	s that are linker scriptU Ïd not actualH áhared objects.‘‘bpo-41976�Ïmore detailsE !ifg €_is_elf(Ô Ó » zcontinuv    r�O 	x ‡EŽ>ion? ‰0  #û ç~will beío 
º ð_library(name):
  ÷# See issue #9998
 ð return _findSoname_ldconfig( i) or \3 ? a_get_s3 (? rLib_gcc7 8 # #ld" ?

# ,ñ
# test code

def 1():° ñfrom ctypes import cdll `if os.á ‚ == "nt"4  Ü `print(+ �.msvcrt)3  bload("! ,")#  Oˆ_library& J } Wposix€  # > P and e �_version; …  $ b ƒ c! 0bz2# f #}  ñ if sys.platform6gdarwinº ž >TLoadL libm.dylibg  *  p2 ocrypto7 _Systen 4 ¢framework/ ­ #Fñ-26439 - fix brokenxÕ call for AIX9+el;ó.startswith("aix"¯· ECDLLQ  ( S ö maxsize < 2**32Ã $   [€f"Using G |,ýñ RTLD_MEMBER): { ý 'libc.a(shr.o)'( &}"é `   
d ù \  h )X  # @ñpm.so is only available as 32-bit shared- 9ary'Ÿ 6ind.8rpmØ '   Ê ­ "ˆ 5 Oelseu:?_64xUk ){!f"{i\t:: {k' '8 JI J oƒ o„ : … 9o')† ØL   ¡/ ??.so3 	"„ ) `
if __¯!__{ƒ__main__}ðtest()
# The mosòt useful windows datatypes
import c s
BYTE = È.c_byte
WORD �ushort
D Élong

#UCHAR1 \char
  W w IUINTB Kint
   i
DOUBL³ ¹double
FLOAC ðfloat

BOOLEAN = ì  i Ã àclass VARIANT_3 ("ð._SimpleCData):
    _<q_ = "v" ódef __repr__(self)  - ñreturn "%s(%r)" % " 1.__t Ð__.__name__, ; è.value)

ULONGª u«   i
USHORþ ´ Ë•
# in the"Ðheader files, ðse are structures.
_LARGE_INTEGEñ 4 c_–   <
_U$  5 á 6 ‘
LPCOLESTe P 	 4 > _p1 W/ 	 $ #  "  ƒE 0VOIû#LP	 # ðvoid_p

# WPARAM is defined as À°_PTR (unsig  &_)
# L0  Ç0 	. $if‹dsizeof†R5) =«    y£ - !c_\­�  s/el|  % € - D „  €
ATOM = lQ
LANG� Á
COLORREF = ŒQ
LGRP   @CTYP 7
LC /
# , 
# HANDLE Ú#s
 I„ \T :  Ã *

HACCEL =N ˆ
HBITMAP GRUSH ø @SPACÜ w G
HDC" HDESK WO ‘ENHMETAFI8@ !FOr gGDIOBJD XGLOBA§ 8HOOd 0ICOU@ iINSTAN¢ 7KEYP KL 9LOC\ GMENU, ¯  IMODUÀ `MONITO!ƒ QPALETÏ E£ )RG (SRB9 )TAPWÞ ¡  WN&. 2SC_
 ! íSERVICE_STATUS Œ1RSome Îðant structure defñ8initions

class RECT(ctypes.Structure):
    _fields_ = [("left", LONG),   $  o("top" Origh@ 
dbottomC P]
tag� @ = _ 1L =­  Á a_SMALL# È ß'Left', SHORTÉ O'Top  
RÊ " 
BË # &]
¤  Ï  Å _COORDÀ XX ,†%'Y ]] OPOINäx[  $"y œV  Î 	  –
	 ~ OSIZEÙ /"c~ 
c  W 0 =   |   ô


def RGB(red, green, bluÐáreturn red + (  ` << 8)  (   416)» FILETIM¿ ÿdwLowDateTime", DWORDa}"dwHigh+ 4]
_r 4 =  � ?MSGG¯hWnd", HWN~ `messag¢ ?UIN`"wPara‹oWPARAMÅ l$ L$ t
p8)Uô	MSG = MSG
MAX_PATH = 260ÿWIN32_FIND_DATAAÿdwFileAttributes�
`ftCrea$È‰ÏftLastAccess0 5Wri'_ 
n¹ �SizeHigh· 
* ?Low) 
¿dwReserved0( 1( 
c£ !NaótCHAR * ¼2®cAlternate9 514)¶ëWëÿ)Àed0", DWORD);,
  ÿ("dwReserved1", DWORD)( ÿcFileName", WCHAR * MAX_PATH1 ŸAlternate:  14)]

# ,ô
# Pointer types

LPBOOL =  c �.POINTER( !)
 oEAN =    @EAN)I 1YTEI  ) aYTE)
P	F    C ŽCOLORREFh   & t j 	 k   ) qFILETIM–  /  Ž)
PFLOAT}   Q QHANDLO 
 M  ~)
PHKEYJ   I Kt<  KL  INƒ P # ÀINT)
PLARGE_¡>GERe 	  / ?CID&  0CIDo @LONGM q    & !MS%  $ 0MSG# 3 J 	 '  1)
P ÿ    J 1REC H   &  G P  	 (  Q2SC_— p)
PSHORw G   p 1SIZû ' 4IZE&  � P'  	 (  Ln PMALL_» –    R U
P P   I)
PUõS 
  1 øO ñ!PU÷ H   2)
PÓÊ  ¶ ðWIN32_FIND_DATAA   " J  WJ    J WJ  OR	P´Û    )
|ñ2s in this directory come from Bob Ippolito's py2app.

License: An/ ãponents of the( ð suite may be distributed under
* ò	MIT or PSF open source l` Ps.

Tœ ñ	is version 1.0, SVN revi B789,¯ à2006/01/25.
Th{ ‘in reposiÙ öis http://svn.red-bean.com/bob/macholib/trunk ñ"""
Enough Mach-O to make your head spin.

See�relevant qer filekÁ/usr/includeb ð-o

And also Apple's documentation.
� 3
__¡__ = '1.0' ‘dyld emul-  ±
import os
Ç0à ð.framework import frañmework_info
from ctypes.macholib.dylib import  - ”itertools! ±*
try:
    N _O  ñ_dyld_shared_cache_contains_path
except Io RErrorM Odef = r(*args)1  ‚ ñraise NotImplementedT Ñ

__all__ = [­ '™ ³find', 'fra #   . ( ð',
]

# These are the defaults as per manCõd(1)
#
DEFAULT_FRAMEWORK_FALLBACK— 0os.ô	.expanduser("~/Library/F§ As"),¤ "  0Netì# 	oSystem" %]
² LIBRARY° 6lib¡  usr/local/ œ  " 1ib"S ùœÃenv(env, varäæif env is Noneø  Á= os.environ`rval =1 P.get(F  1if  F ‘return []'   + Õ.split(':')

  Àimage_suffix© =” © "x 1env© ù'DYLD_IMAGE_SUFFIXw • )y ¶ 
AR vIPATHT l`’R P Ÿfallback_­ ',f ¿ $}_È ã€_search(Pator,Zôð"""For a potential ¢ 1 Madd ÝÑ semantics"""zS! =:_„  œ)$ 3if ' Çw /  µu_injectÁ =" ,K =R Ã P3forÄ nÇ v " !if! ².endswith('@'F  (   Qyield/ f[:-len, 3] +„ 4 + B ¹  8   7elsð    R A 	6    	Í„overrideæMnameâB# IfÁ
L ‘Àset and this¹0ib_D   a} %#   B, us5�first fil Áat exists inS6 F Tpf any. ‘ Pthereh ânone go on to ¯C ÐDYLD_LIBRARY_ñPATH
    # if any.
 Åframework =  ²_info(name)& &if Ñ is not None:D  W öfor path in dyld_M   V(env).  2 �yield os.  `.join(
 ,j  ['ƒ #']… ð# If DYLD_LIBRARY_Õ  � Àset then use	   first fil ‘at exists­ #¢ 1the®  . T Enone; �original | .3 Ü €library_° Ú Ö é @base[ _b)

def2¡executableY q_search( +,  =~QÀwe haven't dÏ Bany A óing and found a ½  1theâ #‚ 0ib_™ û  starts with "@y  /"a¡n construcyD Z  F :"ifGS  R -('R !')Œ i  Øg_ 8 ,r O[lenk :Ns{defaultk(nv_s  Ô Ù2-{allback*  =Œ?d_f op Dš1 u,V Ý›¤  ¢ ž + œ e$ 7 ÿ —P =¾ µÀ x £ öDEFAULT_FRAMEWORK_FALLBACK0  v ¬ e ¹ 5ot � ‹ é‰ 5ùOfindZ:, e1"""u)FiD&or®0 usk ý’ semantics= â  ' Ô_image_suffix„achain(m  m 0 „override,  •« /),1 8 
pD $0 )‰ :% · %ifÞ isŒàµ !   areturn�Ã :tryrAif _ñshared_cache_containsÓ\ À    return pSath
  õexcept NotImplementedError:$  + Qpass
 ±raise Value( ñL("dylib %s could not be found" % (name,))

def framework_find(fn, executable_path=None, env
 )‰ 1""" fFind aG ò using dyld semantics in a very loose manner.Â òWill take input such ash  í aPythono  .º  ñ/Versions/Current* º eVq = None 6tryt areturnÈ e*,%Aenv)P Ì›V as ec � ~ ñfmwk_index = fn.r�'ç 'V 8if + F= -1S  r len(fn6  8hfn += R § €fn = os.ì@.joi5 , @base1V(fn[:_ "])X 4NÜ é5¸ Winall³ ÑÝPtest_‹Ã»�env = {}F gassertè±'libSystem.Ið ') == '/usr/lib 	 F $ ¥/ N  ¤/Library/F†s( ÷ €'

if __Œ!__“ ’__main__'$í 
épGenericà 0ib ã |‘ipulation$ ð
import re

__all` 1 ['ÿ ñ _info']

DYLIB_RE = re.compile(r"""(?x)
(?P<locV ²>^.*)(?:^|/  µ >) ' Qshort B\w+?HP(?:\. v³£>[^._]+))?7  :_ ksuffix \©0$
)Ï Ø½ A(filÃÿ  A Š B canƒ�one of th2@llowÎ—four form•Lí £/Name.Somen!_S¥ • ¾  n / ( 	K é I´sÒ1 ifú÷  or a mappÎ Òequivalent to< ¢ Udict(°   Ð$='¾ )',!  ;/='
2 ü7  ý'='O# "='e )§Note that D R and 2 p are opý!al 0may 9�present.ñ 4 isOTib = f.matche0 D / e£à None
    retuòrn is_dylib.groupdict()


def test Ð_info():
     ód(location=None, name Wshort Fvers) asuffix+ P  T qreturn  e     g 	 , g   
 ƒ 
 
! ”  
 £  o )
 qassert 3ð
'completely/invalid') is 4 e_debug; aP/Foo.� æ') == d('P', '  '² C p I 	 O ", #='ª Ý _ /.A[  W /'A« R ­  X   ^ ".A, ° 	 ^ X %, `
if __Š __•¢'__main__'5Lõ:
#!/bin/sh
svn export --force http://svn.red-bean.com/bob/macholib/trunk/ / .J 7ñ
"""
Generic framework path manipulÿ( 1
im¾ �re

__all5 ['8 *ð']

STRICT_FRAMEWORK_RE = reÝ ôpile(r"""(?x)
(?P<ô²>^.*)(?:^|/  h> ' äe>\w+).v /" ":V‚ s/. ó£>[^/]+)/)?& %P=H 9@(?:_1 öÀ>[^_]+))?
)$õ )$m ã P(file� Û E ÆAC  ò can take one of the following four forms= C LpW/Nameä Ü CSome $ !_SjÞ A ":  Š f  , 
R ëp if notñ Ðnd, or a mappÖequivalent to#'$'Ð r ='‚ 8D I  T'='…# F"='– )§Note that D R and 2 p are ops!al fmay begLqpresentl€5is_©À = STRICT_FRñ$AMEWORK_RE.match(filename)
    if not is_framework:   ±return None  - ö.groupdict()

def testM r_info()T   °d(location=X  , Œ  Wshort Fvers) asuffix+ P ¤ ‚ ¥     g 	 , g   
 ƒ 
 
! ”  
 £  o juassert gö	'completely/invalid') isu8 /_debug? EP/F.‹ 3  m '÷/F') == d('P', 'ˆ !/F '1
	º %/Fõ S !  j 2', ›#='+¤b
i VŒs,!< //A> +;	d FO, 'AKB 5©,  a 'AÄ_`
if __g __õ¢'__main__'-ð
"""Core XML suppo8óor Python.

This package contains four sub- ñs:

dom -- The W3C Document Object Model.  Q k ñ s DOM Level 1 +#ð   Namespaces.

parsers[ • ` wrapp 1for¹ # ô (currently onlyÑ às Expat).

saxI  ¤  SiS API H 0, dŠ poped byZ r-Dev, l TDavid£ àMegginson and 7Sed to8 ? ôLars Marius Garshoþ D �the SAX 2Ž „.

etree¨ 0EleGT  ¦tlibraryJ@is aŠpset of K Dfulld > �release.
ú€


__all1£ ["dom", "N  0sax � B"]
#½!isg ŽqmappingEðinterface NodeFilter from
#êP2-TraÎÆal-Range. ItU´€constantû@clasŸK É1"""Þ IŒ HDOM2t ‰ b  ½O ñFILTER_ACCEPT = 1e  PREJEC 2 ð SKIP   = 3

   ¯ SHOW_ALL   S= 0xF 
  - pELEMENT   - 0 1- ˜ATTRIBUTE+ '  - 2- =TEXW  - 4- ÖCDATA_SECTION^ Z 8- ô ENTITY_REFERENCŽ - ,10- S 
 - 2- òPROCESSING_INSTRU� - 4- ?COM;8- ODOCU.  Z /10-  D_TYPÞ ;2- FFRAGc Z 4- JNOTAc- A800
<ñdef acceptNode(self, node):   7 ðraise NotImplementedError
"""W3C Docu ô  Object Model i. óation for Python.

The ÿ  mapping of theL 3s de Ped in+ 
N ó Library Reference  A secz o/ ñ xml.dom package† $is � contains[ p follow— àmodules:

mini@ a-- A sÞ ä Ä õLevel 1 DOM with namespaceTó	   support added (based ¬ B ¡2 specificC¸) and otherH dminor 2 1funö Ãality.

pull¶  � tbuilder}  â `on-dem[ Qtree-"    ±ˆselectedp 0sub) s²™ .
�


class PDA"""C 0givY  ç  @Typew¡stants."""g â__slots__ = ()§#Lt iðs may use this as a E €  ¿ ‘their ownY #” ´`s.  Ifõ€y don't, — Â defined her¿ð# should still be„ d€  Ù ’canonical9 i‚� £they match�  . Ävalues given· R‘recommendê ô.  Client code caÐ €safely rú0 toº 3se U ±in all test¬ s.Û4TypÊ + .e$G_NODŽ  Ï &  "=    I 1= 3ÿ 		- "= 2 ' 1= 5H $ ³ A = 6$ îN 1= 7$ å ª  "= •Ü% 1= 9H $  Ó) #= ±% Ë) 2= 1jÃ À            ü = 12


#ExceptionCode
INDEX_SIZE_ERR  ß= 1
DOMSTRING' ú= 2
HIERARCHY_REQUESTM û= 3
WRONG_DOCUMEN  ü	   = 4
INVALID_CHARACTERF ú5
NO_DATA_ALLOWED!  F 6# ÌMODIFICATION+ Í= 7
NOT_FOUN@ ÿ 1= 8# ~SUPPORTg  i ý9
INUSE_ATTRIBUT@E= 10Ó >STA"  G œ11
SYNTAXË ‹ %12H 	Ú ±Ý= 13
NAMESPACŠ K 6= 1cmACCESSt Q= 15
…<b D   õ= 16


class DOMP(
 0):
* ò"""Abstract base 4 0for8 $ e‰!s./ ? ò
s with specific codes are PalizaÁ’s of thisY Q."""
J ódef __init__(self, *args, **kwž  ¢ 0if  1.__› J__ iÔ É  +   ñraise RuntimeError(p    "õ should not be instantiated directly")D .¾ ã @get_ä × breturnÛ    ¯€IndexSiz½ (© =  - : = ì�omstringA 3E ÿHierarchyRequestErr‰ XK ÏWrongDocumenH }E  InvalidCha§/er� ¢K ßNoDataAllowedH Ç F 0Mod÷ãN 	V _tFoun— ; SupportÖ )T_4C ßInuseAttribut|VG ¬?StaE Å_wC oSyntax��6 %™C (	—4ERRQ �Namespac	Ò< � oAccess‡ ÀINVALID_ACCEðSS_ERR

class ValidationErr(DOMExcep ø	):
    code = VALIDATION> ò UserDataHandler2 A"""C\ ñ giving the operf û  constants for A !.hI q()."""
€ ò# Based on DOM Level 3 (WD 9 April 2002). ñNODE_CLONED   = 1D  ÆIMPORTED = 2 @DELE F = 3 PRENAMC �= 4

XML_ ðSPACE = "http://www.w3.org/XML/1998/namespace"7 /NS9 ÿ2000/xmlns/"
XHTk ù1999/xhtml"
EMPTYc CNone ‘PREFIX =  ñ
from .domreg import getDOMImplement¢­, register Q
"""R Í’facilitieÎñ'DOM. This module should not be used
directly. Instead,!@funcvs” _ and
— g #beØ 1ed î 0xmlñ M#š ðis a list of well-known: Vs.  W Ö'
#i ñpublished by postêðo xml-sig@python,½ @ are@ ð
ubsequently recorded in t5sfile.

œPsys

¡ _¡ )_i¦Qs = {±´'minidom':'ð  ,! u4DOM':  Ø') A}

#ek  À�official¹  $ed› 
#ÍÀmselves with 5ir
½ ed¹ o}

defi(q“, factoryŠ4"""h Â 1 « er„ L  iž  l  ·e$ ?Äöreturn an object which7sf ™ C Ÿinterfaceg Ã can either g  4Csamem  öor a new one (e.g. if that‡ Ã@ supàas someƒ �customiz  _R0ed[4] =£ô_good_enough(dom, features–" R -> R81« ²e dom offer1N "¦  0f,v T Š!ifI‚dom.hasF‡ C(f,vŠ  $   C0R  1Î ð;=$Ü 3=()U ?"""5 [7 ` = ())ö  «
F.”GŸ suitableq & �3 isÍ  ¯5mf* Oof aL  ð, or None. If
    ðNit is not None, imports the corresponding module and returns
    DOMImplementation object if E Q ± succeeds.
6 tIf name| ñ given, consider~ �available” ` As toD Ñfind one with3 ðrequired feature set. l oE A canE àbe found, raisß ! I¤Error. TheN ñ
s list must be a sequenceI Cof (w ò, version) pairs which are passed to hasF¦ B.""",oZ‘creator =›e ùmod = well_known_i{`s.get(Y)/  if¶:  ¬? _6 Òort__(mod, {} ]['getÏ"']L  @ ø T  i + (* 2eliÞy 9 °registered[¥ ]1 ðot sys.flags.ignore_environ\yó"PYTHON_DOM" in os.# l Ì ' =7 [R "])‡¡# User did‘specify a³[, tryNsŒ ‘arbitraryoƒ# order,, A  ¯@thatÿ³ûÔif isinstanceWvs, str)ê o³s = _parse_ u_string9 ˜Dfor T6in �‡.values([ Tdom =. § õif _good_enough(dom, @  , õ2domW€ Æ9keyŽ 6tryö  [ Ÿ ã	é ú  3 �except E øion: # typicallyôá, or AttributeÒ E   rcontinuö  )ur‘("no suitú;DOMk®")

def÷s‰  ![]Ä  paÜ“= s.splitÙQi = 0  Ñlength = len(- A0whiˆ  < 6gthŽd 1 = / "[ii  0[0]"Æ"0123456789"B  + V‡qF("baÆ ,v: %r" %d)š  >  À Qi + 1Ä   €;   WÄ    vÂ   Oif vÀ ) : = †     Ž v¢ ”s.append(¬<à EFtupl	Ð)
"""FacilityM1useNPExpatŠ Ààto load a mini3RÀe
from a strñXing or file.

This avoids all the overhead of SAX and pulldom to gain performance.
"""

# Warning!
#
# Y ðmodule is tightly boundF  i ðimplementation detailsw  the
# miniu 1DOM… ð
can't be used with other ! 
M @s.  ƒ  
#~ Pdue, ¶ @art,~ `a lackj ðappropriate methods*  Ÿ  V (`  Â �
# no way? 0cre0 aEntity› #NoÅ ‘nodes viaK C pLevel 2Š ¡nterface),5 9forI ³ €e latter·  … Pcause© ðsome fairly
# cryptic code.
qP’q hacks: ð!  -  .character_data_handler() has an extra caseý ñwhich continuing
#   <  ˜ qappendeÈ= 0istWPText 0; tX0can®a@ ñspeedup since pyexpat & …reak up ©  m °nto multipl‡ Pcallbâ ñ even though we setv€buffer_t� °attribute o+ E cparser&á also gives usD àadvantage that^  do~Vneed Ò @epar‚normalizÊBpass–PDeterÍ"ngN a&p existsR0donÖ Eban ideZ¤comparisonCõN.  ra› P ãn a truth test|Ô`searchX  m4andI  E  5anyø"œ Ãobject if it© b.  (A x G Tnice Ø KPchiev  /ðas well!)

from xml.Õ`import „builder,ðo, Node. òEMPTY_NAMESPACE,  ÖPREFIX, XMLNS C î#s u ey @dom.Ÿ— _äÕ_child, _set_K_ä
?  ² 1Fil¹Ù  Ñ

TEXT_NODE =Ü . é
CDATA_SECTION$  Š
DOCUMENL 	 ÷

FILTER_ACCEPT =aR.DOMBl« ., : _REJEC: , : OSKIPr  * 6 INTERRU­ / š

theDOMIF=GM.get p()

# E ð typename -> TypeInfo
_ Ðinfo_map = {
t"� ": *.3 (�@, "c²2"),1 BENUM0 � 1 aenumer27 ATITY9 h 
2 _IES":i Àntities"),
 ’   "ID":  ðminidom.TypeInfo(None, "id"),
$ b"IDREF1 . :ref1 S2 1 
s2 pNMTOKEN3 2 |nmtoken3  g 3 g ñ}

class Elementð �object):ì ð__slots__ = '_attr_info', '_model
 ‘tagName'
3 ódef __init__(self, ! !, 3 =R`  P $ .# $ =- L  { [ = [] W " =_ † ƒgetstateŠ u qreturn | ] , Q  š W sW !, e ^ W " == _ ÀgetAttribute…DWanamec @for ‹- iÆ » <  !if( q[1] == G 
!  % 2t =& &-2]    aif t[0? >"("=  $ PP_type— ¾_map["ENUM"Q OelseG  P F[-2]I n è1_noy E#NSG Fð spaceURI, local¼Y\ #is/qContentZ A (ifF
è   óBelf.A&[0× I) 0notßq(expat.•â.XML_CTYPE_ANY‘ 7  ; eMIXED)F�VFalseVisEmptyñ I Â J™ _EMPTY˜  !Id• ,à�';Î ‘ Q <±   7%Id�peuri, eˆ1, a ”´  # ùüsure this is meaningfull ZhisId((N 1)

‰óintern(builder, sh ª  "._( Ð_setdefault(s- F �parse_ns_· M   P  assert ' '²  © €parts =  ¢.split(' 'zs ? = … D qif len(K )s3T@Æ b ±, prefix = . ?   t Ð(prefix, prefSix)
  ðqname = "%s:%s" % (prefix, local . qintern(= !,  % 8 3 = )  V õelif len(parts) == 2:ž 7uri2 1 = &  ª õ  = EMPTY_PREFIX — & =È � &se€ õ*raise ValueError("Unsupported syntax: spaces in URIs not % @: %rVHdreturnâ Guri)è ", Ù Zò


class ExpatBuilder¤ Ò"""Document b “ that use0 2 to ó a ParsedXML.DOM d: 1Ñinstance."""
 òdef __init__(self, options=None)‚  G$if @ is      7 c = xml§ ".OL (8 d &._- 
 �  G 9if # p.filtert  sx . & 1= F/ ñVisibilityControllerß { X ™ (el ‹ Z  { §    ð# This *really* doesn't do anything/t% ‹case, soA òoverride it with some: ù fast & minimal.9 š ánish_start_ele!E= id, ( p1r =µ
 vreset()acreateC1A"""C ` a new§¡ser objectS   þeË.M : k 2get ™
h R?:thef !, ¡  Z„ Ùone if needed„    ¤Relf._
± ^ ÿ  Ô   _ëÓ_setdefault =°c .! .! qE +  buffer_texF OTrue, ÿordered_attributes = 3 specifi5 !ll‹/ Ð¾ 3D  
Äð	Free all data structures·Pd durÆ £2con 9ionÃ T .ÁÂ = theDOMImpìa¨.³!(C2¡NAMESPACE, Ý f `curNod$ u N  eT_infoö( . 3 cþ v= False5p,ä
?I¬ llõ £ callbackséï " Dðinto the parser.""3"
  õ# This creates circular references!, ðparser.StartDoctypeDeclHandler = self.s "_d  r_decl_h" I {ElementE rfirst_e @ ?End> ?end< ûProcessingInstruction… -piz "ifå 0_op1 µs.entities:Ý  Y*E y$ 6 y
@Notac >  n @ £ 0comb£ C ú 3 ÿ �cdata_se?b /C( S' l 0	I x 	TdM  úK ÛCharacterData– c _º ‘ _\ ëOelseùZ T ;rxternalC;Ref  e  _K4ref¥ K ?XmlE ?xml@� |:  –Û	Attlist>  a 
| ³ Adef } PFile(Lv, file)c@"""P…p a docu×q from a* õ object, returning the+ f  Kvnode.""w Â1getf 5r()3 ‘AbuffêETrue 6try£  ` zwhile 1   @  Ø Ö.read(16*1024j  (   rif not 3 K  # Ubreak‡     Í .Ã (? , Falsee 	Ú 2andá_.	 j‰  ­ã._setup_subsety r 	o =˜ 	Ã 
¿ @"", mI qexcept ß ]Escapƒ%ssQ 4doc˜É  µ  re­ ^  _„ f = NonèV O
E ±cString³s µ, ° ¨ ŒË ð .Parse(string, wTrue)
  ö
self._setup_subset(string' ùexcept ParseEscape:C Epass adoc = V …document   red ^   _p] …r = None1 ±return doc
 Kdef ¬ Æelf, buffer)— ò"""Load the internal ß 0 if ñre might be one."""c  *ifÁ l.docty÷ €extracto¶ Id SBE (ç  X 2 .ï Sh(½ ~  * « &= 3 2get^ U @kª .õ 3  ’š Gcstart_Ù à_decl_handler(R ,u ô ù
Name, systemId, publicId,°  ´   Dhas_Š ^¥}  �  …Ä Pimple9Óation.createDMYType(| G © Ÿ ³ ƒ) d.ownerP ~ [ Ñ_append_child ]Ñ\  4   	  <$ =FV [²_filter andl 0.acmSNode(° ö) == FILTER_REJECTè t{ 	J ) 2dell jÜ  l Us[-1]¥ - ó’  q ²Â.EntityDeclH?2 1NotÙ4 ?if ; 
÷ $if]q is not;
$  ® F .e© 0iesíZq = [ð + n¢ , 	0Com¬þ ðProcessingInstrucä= BEndD˜
=‘  ­í 	Ðô" Þ™¥ opž 2s.cä s^v  9 [b ; , -piD !ifö½ â._elem_info oræRØ  äN €_finish_ 9 †ent = id+p ` ç, target, dataS LnodeC²× (H m 0curš , c iœA: Ð == FILTER_REwJECT:
  ñself.curNode.removeChild(node)
, ðdef character_data_handler_c (E  ,  )^ cG  W @s = " g  _  Ž "if# Q E  ((  •_continue?  '  Fand ` P[-1].Ê ÷Type == CDATA_SECTION_NODE² B  @ ±appendData(ã v ireturn  t ÷ ñ document.createƒ SectionQ  *è W = Trï 0eli’2ild`õ ATEXTì 
X¤ 
.	Æ €value = * .ü ! +æ	%  != 1 	 Oelse† éminidom.Text()C a  …  cownerDgw/ _É_ñ ´’,â î4 è. ¸K2 ¼ ž , ? = Œ  % �>´entity_decl{� ð Name, is_parame§ ,“,ä ðbase, systemId, public
 @nota¨ ` )/ifl 
Øõ# we don't care about      ù ies for the DOM¦ œcif not op– $s.E 
{ :  “"._�_B "y(  ç ÿ 	� 1 ?	5D "if‹1 isÉ ;Non
¢# internaly<  p #¤ù *should* be readonly, but we'll cheat9 p ÿ  n ‹(¹w =  " "s.>( * ¯âudoctype˜T._seq:  ˆ9 òpfilter ÄM _ p.accept| Œ ¿žFILTER_REÉ2del� À.entities._sõeq[-1]

    def notation_decl_handler(self, ñName, base, systemId, publicId):M  Q pnode = > ô.document._create_j (	 W G [ )P 
I „doctype.@ às._seq.append(| : "if† ¹_filter and ².acceptNode: ö == FILTER_ACCEPTÖ  Ú 2del@ × Ž 
]0comWOdata54C@ (2 _ò a_child«@.curË  ³/de3[REJEC�l �.removeC… }¢  Upstart_c· A_sec`[þ S + q = TrueF  t €_continu^VFalseÁ2end? j F  g   k ûxternal_entity_refÛ § ?ext-†return 1Ë Ÿfirst_ele5 n„§attributesCìqis Noneô2not¸W Z_infoÙú pfinish_L Z = id‹ÐgetParser().SâEª H5ùýG  
J # (ã 1  ¼ -, 7 á  —— ¹[¼ u 1[ | w0 = j ¯  O6if ª�   öfor i in range(0, len(. G), 2Ü 3   ÷a = minidom.Attr2 õ[i], EMPTY_NAMESPACE,p =   #8 fPREFIX1 1valsŸ ][i+1]] $a.*     cownerD“0 U_set_u _]¦I, a)f  0 isªçæ	 è
…½_õ	\g d  Ê%  @ lY ‡  Nð# To be general, we'd have to call isSameÇÉ(), but this#ì °sufficient M
o iÙ!de/ àelf.document.d ocumentEle ;:
  ireturn Ðfilt = self._ ùer.startContainer(node)5 0if + þ == FILTER_REJECTr à# ignore this J ù & all descendents[  ² �Rejecter(– 
z .el| OSKIPz ý, but make it's children become‡ #" Ñof the parentÇ . _Skipp´ .se  Œ  ï ¡.curNode =g .s   	r  J €.removeCÒ ° . ‘unlink()
I 0# IÔ òis ever changes, Namespaces.end_eKó_handler() needs toF #be< ²d to match.  Odef H  ë v, name)û   
H   3 = . 
* ‡_finish_ (4  � &  i ,`   Einfo, _ D.getY @.tagBµ0if % å Ê TÀ_white_text_¨sL ,9 	J  ™ ¦
R $if° 2 isÎd.	 "ifE `accept‡Ÿ )þ° t	£ Ý     .­©ƒ/ e ,-21if D¡._options.mà5_inÞucontent@ Š aor not„3.is< Went() - ÍA  # We have ' 4AtypeM 0rma‹ Â and should ½*6ablŠ&# ° 0; i.€ify for 0õ s$ 0ch Ä ‡ain onlyˆ A — ® eL = []%  O 1 inS .  ísL 9  f c.©TÒ Á== TEXT_NODEÓ  4? Ë.data.strip(. K ‘L.append(- ‘  1# RÌ á t•Q from‹FtreeÒ 	Ã Lµ  ¬ 
} Ã r  Z£S_decl•{¡w, modelÄ  ÑÒZý “;Non ¸.ƒG[; C] = kPInfo( € V (elPÀ    assert i÷nfo._model is None
  i  != ( 
! ô6def attlist_decl_handler(self, elem, name, type, default, required):
i  f 0 = ;  ._; _ P.get( )r  - 0if  « B  ûnfo = ElementInfo>  % d [` 1] =W g ö Battr‰ uappend(   I [,ã   é 0û ò &])<?xml8översion, encoding, standalone)ð Ç @docuë .6 3 = 
 ª 
( U % =` * `# ThisZö#still a little ugly, thanks to the pyexpat API. ;-'if° V >= 0´  6	  
   
¯ ú j = Tru›OelseB ð False


# Don't include FILTER_INTERRUPT, sinceó ó"t's checked separately
# where allowed.
_ALLOWED_L ³RETURNS = ( @ACCE[  tREJECT,| ðSKIP)

class FilterVisibilityControl]cobjectP"""Wr›òr around a DOMBuilderF ¢ which imps¿Ó sû`to makí áe whatToShow f„  âò ribute work."""ÂÒ__slots__ = ', "',  ƒ__init__! ¶ ç # =l > Pstartõ 5ainQ8nod Emask2   e_ [ . QType]å  t  zBelf.w .ì  & 8 
K4val_ 1 –  a ˜a 6 =ÕQ
[  , úraise ParseEscapÚ0if J  no¤ \U ¦ValueError– s  "Ë ð) returned illegal úue: " + repr(val)î 3  ) b‘% ôè£acceptNode(TØ  –…_ äN’  p 
ò –=à6J  ÿø ªQ# movep child ” ƒÑarent, and re* tÁ % “K p- ! =C Ð.parentNode
   ñfor child in node. ªNodes[:]:
/  àparent.appendC> (6 ). #T ý
 is handled by the caller0 ùreturn FILTER_REJECT%  if val not± •_ALLOWED_1 ^TURNS¶ ùraise ValueError(U Ö   p"acceptÿ 2() Ž  ed illegal{ úue: " + repr(val)õ 3  ) b Jelse’ % µ qACCEPT
0 _ƒÑtype_mask = {  ›  ” à.ELEMENT_NODE:   " ÃFilter.SHOW_- ,C ŸATTRIBUTEE C - E ?TEX… <   E  - @ ÜCDATA_SECTION‰ @ 	- I ú ENTITY_REFERENCÕ I - L \Õ L B øPROCESSING_INSTRUà Ž - R ?COMñ- C ODOCUD • - D :TYPdð D _- I LFRAG– � _- M ONOTAAM - D ¢}


class 6âCrutch(object)³ñ__slots__ = '_builder', '_level
 •old_start Bend'Ñódef __init__(self, E a  ¬   .Q E = 0° 0 $ =:   fparser "._ ! A   2 = !  .S¯ �ElementHšŒ5 6end3 ?End1 T 1 = N "_ep _q @ a > =end< ¹ Re¬8er(ÂZ»/()�L .½c½ „ b@name°ó("ProcessingInstruction‚"›  G"Com©' ÈharacterDataT À              ò"StartCdataSectionHandler",
"  O"End/ ÿxternalEntityRef` )):x ñsetattr(parser, name, None)
) Pdef sÄ ¢_element_hÁ Ç(self, *argsU   ¨._level =  6+ 1S ?endQ )ifF J== 0Ã ó# restore the old ¢ sÁ `â ” ’builder._ 	+ ¶ " sinstall#)* = .åE €i Aold_A9 ?End7 5end5 Jelseø ¦ j-jóclass Skipper(FilterCrutch®ß__slots__ = (î$Enodeê 1ucurNode» © (3 á@ € is not d ú dGñ
We're popping back out ofv ¤ ! w# sr–ing, so w ˆñ# shouldn't need to do anythW  utÍ!etU Ç.+ D N,¿‚ H ‘Œ ! =8­ ² Q  �  34end1ð

# framework docu�� used by3Afrag  à
# Takes a strd1for+ ó doctype, subset Q, and`space s ñ.

_FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID = \ð	"http://xml.python.org/eªDies/­ -­ 2/inÌ"i €TEMPLATE®_ ð'''\
<!DOCTYPE wraêð
  %%s [
  <!ENTITY5i -i H ¹ ó  "%s">
%%s
]>
<N  L <
>&ª A 3;</* A>'''O /% %B)


¢F³B‘c(Expat ª3""" ö which constructs¤ òs given XML sourcƒAtextÜa>   µ.“9The  |bexpect¥ð provide informaÈ0 ab"th` ðnamespace declarðations which are in scope at the start of á
    fragment. A"""
	 ñdef __init__(self, context, opf q=None):/  J $if# ö.nodeType == DOCUMENT_NODE.  2  X Ð.originalDocu‰ $ =G Z , ƒ #  Oelse] d.owneru k ÛExpatBuilder.$)EQresetB+	C " ‡ ›0 = kT ‘parseFileX X, fil‰@"""P" D a dUL afrom a3 õ object, returning r3  Î.    0  ¥ Œ pString(ˆ w.read()"  3 1, s/ ² 5 ­  s £._source =| i� r qelf.get:5r()" AdoctËð ¯.  0 ¦ident = "" f‰ F £@ubse, D ¢.internalS "ort ¢_getDeclaràž  �i_ š.publicIdh % — Ñ('PUBLIC "%s" '¨  ( 	 4% (› Z ,Ë ¦.systemId), = 'el� $ � r'SYSTEMŠ - %^ � â &	ktnsattrsÑ :!NS ñ() # get ns decls  ÝÅ's ancestorsp ;q= _FRAGÄñBUILDER_TEMPLATE % (ñ1, sŽ #, ‚ :tryÿ t.j `÷f, True6 jexcept9 Ë/)  tUraiseº ¹=? ! 	H  ##B   _Ÿ u #  $/� c	� F 
Ü�Re-create` å2‡ œ�: ˜.f  ƒ ðThis is only needed if we don't alxQy havf ì n SCas aò ] ÜðAr
.ô pðPfor i“Prangeû B.notØw.length= ž   # % =! Ðs.item(i)
     hif s:
  ís = s + "\n  "#   ý"%s<!NOTATION %s" % (s, notation.nodeName)? &if& �publicIdˆ á'%s PUBLIC "%s’ § !   M>' \e $ – p © ŽsystemId© Oelse™ dSYSTEM† l Y þfor i in range(doctype.entities.length)x " My = 3 nitem(iÀ á/gENTITYß… Ý$ kÊ  œ DÛÚm #,  } z Lelif& ¤ æ'çf < ÎO ÿ firstChild.dataÒz h c¾ O"%s ¥ D  l  ¢>‘return s
p÷def _getNSattrs(self¹- &"". ’external_‚ Á_ref_handler> ô, context, base, Ç$, Oa  à½ò == _FRAGMENT_BUILDER_INTERNAL_Â:_ID+`# thisñref is the one that we made to put qsubtreeþ  L  ð
# in; all of our given in5 �is parsedòYhere.< Àold_documenttDelf. ) @cur_V) jcurNod� m r" _ #.EwEe yP‘ ƒrCreate(p
ÿ#ñ @realq¢ Rback,Ñ Q intoAfragÀ 2to ó	º  Ô ™ “originalDü 2 V )= B !.c¸ 9 F} (Á 3  t R 	l :try Ò6(—Û._source, TruÒfÈ lF  „  ëÂ	ƒ  r , ù0 = -  - ’ j = Non…2 -1: À   else:
     ô"return ExpatBuilder.external_entity_ref_handler(
9  ñ-self, context, base, systemId, publicId)


class Namespaces:M ¢"""Mix-in   Rfor bŠ ðs; adds support  n? Q."""
C –def _init\ (˜ )b  « ö# list of (prefix, uri) ns declarations.   ¡ attrs aree F ð
constructed from this andª òed to the element'sE .B  — Ò._ns_ordered_Ž ves = []Ï ÌcreateParserÌ A"""C u a new -¦Qing p9 " ¸    @ = eì.[ H (B @_sepuor=" ")· = .( · 6Tru"P0 Ï qinstallÊ ,ž ž‘"""Insert=f Ð cers onYY 	Ù 	¼i Ç 2if �"opïk _79V.StaraRDeclH? =  .s3 _d J)' 	2´ž r"""Push„g Ñù  on our storage8
‹ ‰.append(*° ãÐ ©  † ,õgibuteså‘if ' ' in±Æ  d¢uri, localA _0, q A = _ø 8  l £MelseU õ = EMPTY_NAMESPACE w _  U 	 ‹ f = Nonà 6 � [ ePREFIX? ònode = minidom.E
(k u", A ñ Æ  >  .ownerDocuD" =´d i _§a_child .curNode, G U ê ! = ~ Î 
 
P » 0uriÊZ  —Ï
: h =    a4€Attr(_in‡Ù Ã, 'xmlns:' +>%),	 ?  VXMLNSÿ}"R äC I ¤ D ,, f œ ? ¤I·w P.valuU=uriZ a/Ð        _set_ð attribute_node( g, a)
  õdel self._ns_ordered_prefixes[:]
. 5if Q %s:  L  Z –._ensure_% (k  Bs = /  ( sG ! *NS# )NS% ðfor i in range(0, len(M ë js), 2)Ÿ  £ waname =Ã 9[i]Y  & Lvalu& .+1( `if ' '† X o  M  uri, local| ", V0, q � = _parsex  (†!, P 
8 L   ña = minidom.Attr(I /, h D c[: ] j & JNS[(\ )3 Oelse³ ß ÿ, EMPTY_NAMESPACE,†  Š 	 	= oPREFIXæ 
0 ³  X æ � †; òa.ownerDocument =@d Ë $a.V    P 3EleO  wÆif __debug__aõ# This only adds some asserts to the originalo r# end_ef ò_handler(), so weN €define t_ çwhen -O is notG ðused.  If changing one, be   � Rcheck‡ @ther gsee ifG qit need± "beL ¶ed as well.* 
 ?defÄ 9 Dø`curNodÐ # . P  É @ d    
 Ä K ™¡# (‡ .& °spaceURI ==Ç	›    Dand 8 RNÎ=_; ‚ m 
 O), \9 ",õ stack messed up! (» ))"? 	ù À  ß¿  I „ ƒ a - badH J 
…  4s 8amekð‚ Y 
† r% =½`parent–	9. ‡_finish_¨-ð
)


class ExpatBuilderNS(ÿ Ú "s, ÀBuilder):
  ð:  """Document builder that supports namespaces."""

    def reset(self):
   bExpatBH ." 6  ! µself._initNX ð ()


class FragŒ C 6NS(' , )x 4"""7 Ã 1L ƒ Æ  â  ¼_getNSattrs"ö"""Return string ofc 3 ðibutes from this eleE andH‚ancestor• x   p# XXX T5 ðneeds to be re-written •walk the D  „ 5the] �# context/ 1 up3 Á information« = adeclar $s,¾  s,À 	á tound inm .C ðOtherwise we haveŠ  ð ñe a bunch more data onœ 7DOMB r(thoughÍp*might*7 öreliable -- not clear)�  ‡es = ""R != Ã  eL = [] TwhileÙ §    `if hasb (E ó, '_ns_prefix_uri'Ú /  Bfor " X, uri8
= .items(C   K ð# add every new NS ¯Ã° U to L®s©Ü  G  #if•  � Lé $    ê 6inuc   ’L.append(à )j e  É  ¡ ¹“xmlns:" +  T OelseO º   !ifÕsI  ìN@%s\n3 Á%s='%s'" % ( ,… ¼ Ý® H  ú  ^ W   “ ã=÷¦.parentNod§r«] ¥ðParseEscape(Excepp5""" p raisedOðshort-circuit parsûñin InternalSubsetExtractork +Dpass, (u‡ ñXML processor which can rip out3i~ $ datype s� „ 8 v = None2get· ä ge G Cas aTc  ç   l_+ k  2QeFilek c, fileë  ; :try Øs= À, file)
    ð	    except ParseEscape:
  Qpass
 Pdef p' áString(self, s )5 6try  F ßExpatBuilder.A c  / ‘ sinstall� ^ r�  ð.StartDoctypeDeclHandler = Å  .s "_d  r_decl_h" – I ElementE e @ A  :d ¼ ñ
name, publicId, systemId,C   ÷has_internal_subset?if !  
¦á 1get9r() /` Y = [] C }.Defaul5 .append7 ?End¢?end ;els¹XraiseØ&()ÈP Œ:±s = ''.join .\ø.replace('\r\n', '\n')  ë 
;s ¨ 
6UŠ ", 1Wattrs² O 
‚ŸR(file< ³spaces=True@ 1"""öp a docuåð, returning the result D" b node.['^ ð' may be either a  ¯ ² or an open qobject.1""" !if, sŸ ¥bB8 = Q#NS¢
- Qif is:3nce(st8Awith§  ¶'rb') as fp’  �r3 = r árFile(fp<
š 1 	2ile3 rtm&

¿{uÇs from a®Õ€Ù æ ›R i ù 	M	ô )@Frag¥¥contextf9 9 ofìQgivenèL 8�which itôwas originally extracted.  5 `should 3`parentk 1theC  2B(s) X Rare iv ˜ OHÀ        builñder = FragmentBuilderNS(context)
    else:
   b% 7 5 , ö	if isinstance(file, str)J “with open ¶'rb') as fp%  s “result = | ß.parseFile(fp¤ 1 	2ile3 rreturn , r


def Y �String(s #, ó, namespaces=TrueÒ @"""P— C a fA   of a docu^p from aäing, given theZ 7% ôwhich it was originally extracted. 5   should beK C `parent}  ] ‚node(s) T Rare iv ¦ .5 1""" 'ifà ‡zö-.á‹e ß	~) Cmake¦†(options„Create a'â based on an O. ‡ object.ï H .×÷ $GExpa2 G
1  © 
#ò-ython version compatibility support for minidom.

This modul*ðains internal imple_aÓ details and
0not im\ Àed; use xml._ g  ©@ead.¤ H

# u H HonlyI ‚ using "Y a *".
#: €e follow U v�defined:%    NodeListÿö  -- lightest possible# 
ä A UEmptyF A òthat is guaranteed to
#| 
 €remain e^ � (immutab3 Ü "  –aTypes · Ptuplelà ß  t# « ²defproperty5 Afunc¯u¡i$nj ßGetattrMagic;ª àthese togetherå Aneedá  . om workF àas efficiently~€’in both P´O2.2+D @nd o:Ø°s.  For exaŸô
j �class MyC (ø /):o 9  ±p_get_my,_(self4  < ¤“something¦   »(¤ 2, "q /",  M "q � value")t  6p Ç� newer, t@willú�struct a� mí  
jà, which avoids?
#   ÿ!needing to override __getattr__().  It will onlyF àwork for read-(  @ Ÿibutes.
#6 ðFor older versions of Python, inherit� OfromC G© RMagic¥ ÿuse the traditional; 	æ € hackerybachievF Ïsame effect,G €but less& �icientlyò ñdefproperty() should be used@Deach? ofs  ß �relevant ¬$_<V €>() funcù ø.

__all__ = ["NodeList", "Empty °StringTypes  ¨ ÷"]

import xml.dom

. ô = (str,)


class W €(list):
uq__slotsŠ 1()
 Ðdef item(selfï3dex/  3 ñif 0 <= index < len* #  ' preturn D [+ ]^ llength; 7 U 5 Gset_5 w, valuew Traise°.NoModificat±AllowedErr(å  £   €"attempt`m0 y+" 'y #'"$ 4 = à(Ô 6, _¬ ,o  s  ð doc="The numbera�nodes in'®.s  # —ñbackward compatibilityd  ¸_z qstate__[!,  &"if   i"ne	•   A= []T   ÃB:] = P	¬T(tupl�VU__add™ Wother™ FNL =¥)€ ¢NL.extend(2  ,'NL%/_rc M‘ 7one“ g¸ò 0 0- 9¿å×
Áá (k·³, name, doc:cget = 
% !("�1" +0 )? R 8setKP =U P  ä;H “ Qrepr(s ˜ Ðassert not haösattr(klass, "_set_" + name), \
  ù"expected not to find 3 / pprop =  °erty(get, s �doc=doc)' 8set|  r ,5 Á)
"""Simple  ó*mentation of the Level 1 DOM.

Namespaces and other minor) €2 featur! óre also supported.

parse("foo.xml") ðString("<foo><bar/></  " pTodo:
= ð
 * convenience methods for getting eleÆ ¢ Ptext.6 €more tes#   bq T someê awriterØ ðlinearizer code intox Pformax ‘with this_ ¸�interface] QSAX 2Ù- f@

im4 io
 ãxml.dom

from   ˆóort EMPTY_NAMESPACE, ØPREFIX, XMLNS idomregK ´.minicompatV *! ¤xmlbuilder! @DOMI C	€LS, Docu ñLS

# This is used by'pID-cach+Qvalid; � checks;" ð	list isn't
# actually com `te, siY s€nodes beÍB ðed will never beP ö
# DOCUMENT_NODE or EFRAG €.  (The W V @is
#M  PaddedN ‚removed,ƒ
A àmodified.)
#
_Z `Types_Ó_children = (Õ•.Node.ELE– ,: > 
7 ñ NTITY_REFERENCEð P)


cK [ 	h !):\  æ°URI = None î ½Ñnon-null only@	8 /Ributeâ`parentj J b Towner €nextSiblÂz 0 ‹previous  Yfix =ç> # ¨ *NSã« J ódef __bool__(self dÅreturn True
- Qtoxml* °, encoding=/Á, standalone J  ` �.toprettyG @"",  I D )t 3  D ü	, indent="\t", newl="\n"’ µ  Ê  ¦ %ifÒ  ² Õ ? õR= io.…2IO(5 # Oelse1 ðTextIOWrapper(io.BytesA Þ Z  &=	 9 ÿ
rrors="xmlcharrefreplace"B  c†ine='\n'ñ 0if �.Ó  =À9de.m
¦# Can passmVð to document, to÷
 put it into XML header
  áself.writexml(	 õr, "", indent, newl, encoding, standalone)J Uelse:  _ X B %ifc { is NonQ rreturn ¢ ¦.getvalue(B „ 
3 ˆdetach()< ³ ðdef hasChildNodes(½ )Ð H Abool %.c+ %)
C V_get_ * E  [ @ ? Qfirst‰ ? ;if ;    p¤ $ ;[0]b /laa ;'-1b ÁinsertBeforeÁ >Ð Q, ref
  if^ Â.nodeType ==ê ÑDOCUMENT_FRAG	 JNODEö òfor c in tuple(newM ‡n  '  $	« cž Ð '   ó### The DOM does not clearly specify what to ƒ Ž ‰his caseM   ¥   i "in
V_"j_typesõraise xml.dom.HierarchyRequestErr(k  Ô    "%  ne 1be .õ  of %s" % (reprL)!prÏ&))o¶ `parent< ¼ V À÷ .- q.remove³p ­ %if4 W S ÉoappendD :try?  ì#x y Í !s. (º›  4 €except V‡^ErrorW 
š€NotFound’H K L æ1in ó  bs_with>renj _•‚_id_cach}
d -	Û  ¬(â §
4 ´ÕnextSibling =–	%–.previous0 G 	0 !ifbxÌ  Œ[ª  o 2  0 .¢ r  4  ¦ *od°<B  ¢	ä n !e'   ’Ø ¼ , è Ï 5;ode9Àlf.DOCUMENT_÷FRAGMENT_NODE:
  úfor c in tuple(node.childNodes)-  8 Àself.appendC( 9(c)Q ñ$### The DOM does not clearly specify what to return ‰his caseM    –  0if  . ATypea 1in ™ _¼ _ j_typesÁ õraise xml.dom.HierarchyRequestErr(g  ì    "%˜ nÆ 1be _ ñ  of %s" % (repr51),   † &))-el° 1in ¡  ½ bs_with¶ :ren® _7¡_id_cache(\ ¡ X `parent¯" inJNoneJ  .) r.removeÀ  ° _Û’ r ,o"  0 ð .nextSibling = q ˜ ´ 0def3lacr  È Q, new� B, olKn Ý   é"==åADOCUÏØ1ref^ % =_ µ ™  ß   � 	‘ 	' Ù . ÖinsertBefore(Ê v .É  M²k\¶¶  U
U#4 k ?  ï  #
? 6- 	…  L:tryC cindex › !s. (¶ A úexcept ValueErrorO 
€NotFoundC þk [k 5] =ÏÀ à « # ¢ 
#  +# 5if `
C:  Ú'orþ0odes n€‚ ? �á 
Õ  • 4 †previousE8  < ! Y }$ E ( 	­
‹ 
± Mþa ° ] " .º „ 
zÛ
 gØÀ(self, oldChsild):
  6try   ðself.childNodes.remove(oldC ): úexcept ValueErrorH öraise xml.dom.NotFoundErr(C 4if X ú	.nextSibling is not NoneU . ”.previous> =U  ¼ y $ } 2 	» } Ò y Á  4 [ ! =? ¸ ÔnodeType in _ qs_with_À:ren>ð_clear_id_cache(ë%)
] œ `parentÿ€ ereturn`< Ãdef normalizU x eL = []d Afor �  ¶  € k5  ˆ"if) .Û   =Êde.TEXT_NODE1 5  9b ^.data#  ' Ð# empty text ` •; discard©  '  Oif LI  " [L[-1]�  2  ã üh T ù $ EÔ * gunlink’›  elõ S and à n+==˜² ¦# collapsef‰  " =f ! Ì! =¬ +†  å7 ‚ ¸ m9 –? ã k …s Ÿ‘L.append(B Q   /el6 2 	 6 ö é .ELEMENr < … .� â0[:]ë7Pclonef Œg, deep�o_' ä( !, ^ ñownerDocument or Ö š³isSupported= þfeature, versionq Y `.implec ¢ation.hasFG (O ß Ý_get_localNamÀ# OverriddenEa uµAttr where @ p can beU-NullS' /|  # Tð interfaces from Level ñ&3 (WD 9 April 2002)

    def isSameNode(self, other):!  % preturn  2 is ? ´getInterfacA wfeatureC !if? Ó.isSupported(& X, Non, s ‡ Felse• &  @ � ñ# The "user data" functions use a di �ary thatÐ ±nly presentm  # ¯ 0ome4 I € has beeôt, so be careful not to assume iE rexists.š  i³getUserDataj7key%?tryà  y ._Õ _Õ �[key][0]¬  ñexcept (AttributeError, Key
 c  / Ï6 œ sœ ,Ey, handlQold =¹† ¾  " » - ³ 
² 
ý  ? %{}2  º N E = d  ºif key in dH « d6!ifÞ   
5 „# ignoreû Ês passed for÷  ˜    0if � !is&i  $ Bdel   Î ì! @ = (”3 ×6oldrV_call:_© ~Popera§, src, dst+ ifõCattr/ "I "(  Â  Lkey,�  �AlistB Ã‹.items()G  K w o š [5 , Ï . (Ð � )Û ò# minidom-specific API:  
aunlink² Ÿ {`parent*" =ÐÜownerDocument  F�elf.child6 se 6  'a  *   í  .ž )÷  < ˆ 0deLy) % ñ previousSibling* %neM $ Knext  ! @# A œ  ˜ð	its own context manager,bensure_4an ²  Œƒ occurs.Q @ThisO psimilar> óhow a file object work2   0__eo,__£ Ä Îc__exit- Ì, et, ev, tbÜ§ p

defprL0ty(ð �, "firstCÇ�", doc="F  ”s node, ?.")B &laA B OLastA ²ocalName", A   pspace-l   name of tUànode.")


def ðP_append_child(self, node):
    # fast path with less checks; usable by DOM builders if careful
D [ €Nodes = b . e 6if  x  8 lz = A[-1]1    ¥ ð.previousSibling = 5 $   V.next   7   r .( )  
 p.parent¸ · ò

def _in_document3 ² ñ# return True iffGä is part of a 8 Q treej Uwhile* ‚not NoneR  æ iG .’ €Type == “ æ.DOCUMENT_NODE0  4 ˆ d    @ ! =i Ù  / SFalseã ±write_data( 0r,   "W s ’chars to ( !."S !if —  > ! = ö.replace("&", "&amp;") <  lt ! \O  Á  B !\"- 1quo/  > g A ¡  (� )í pget_eleÐòs_by_tagName_helper(£, name, rc1forN0 iná7entÖù À5ELE¿K andë (o  íC"*" k .š     Š .rcÉ  _á  ß 1/rc$-ns'°sURI, localG3Db ã Uif ((s   7	  )ví  B   (nÀ B  n€spaceURI % )€ C „  ˆE‹ ƒ Cª —sclass D‰@FragÁ(˜  M 32EFRAG|X  +  ­T = "#¥#-fU Ô $ `Value ‚n¿�attributÛ ºO 3 ‹ , c_H A_typ3 ° .,B  0  Q B.TEXô) ÑCDATA_SECTION&2 ÿENTITY_REFERENCE5 ÿPROCESSING_INSTRUp 5COM‡œ ENOTAÉ !)
%Žq_init__ºù 9gˆðdeList()


class Attrñ(Node):
    __slots__=('_name', '_valu
   ¡spaceURI',2  6  €'_prefix4 PchildY s s_localNP ÐownerDocument  1Ele )W °nodeType = F ñ .ATTRIBUTE_NODE# ¡attributes% !ne òspecified = Fals V_is_i * _¤ _j A_typG Q.TEXTh ,} ò ENTITY_REFERENC„ !)
F ðdef __init__(self, qé (, -õ=EMPTY_NAMESPACE, ]=NoneL"  L � g b .0ü ! »" =Š §  – ) =¥ 
) Í# =Š 
 < š}sdeList( m ñ# Add the single 2  nñ that represents& d1 of  Ûp é.append(Text()r  ] V¬R and R ÷are set elsewhere·6getš½j2try Î   qreturn ‚7 § „except A–_ErrorB  ¬  (û.split(":", 1)[-1]¡ Ñ¡ � % =  î8 	)4 1set 4 ,Cü  U " = ÿ "if	œpis not â

ñ _clear_id_cacheo 	×Ø&ª�€operty(_¾ ‹ 4, _· 6 ”  ] Å 8Û6 " ç�[0].data( +> ž  � ­ S%ÃUÞ V W›X
# Y 8 ,V˜rnsuri =G Ùj·  à #if6 º == "xmlns"X2if G  
 †!= XMLNS}
3  Y àraise xml.dom.—| EErr(}  (  À"illegal use´'Œ 'ž 1forÇVwrongc"Û E ªbè /is= 0new£ +J«  ì
å 3 ð"%s:%s" % (prefix,ó self.localName)
  "if ÕownerElement:  % ñ_clear_id_cache(J / M   name = newj 
L òprefix = property(_get_ E, _s )1 ¡def unlinkp )“ ¢# This imp­ ûation does not call the base& ‹  Ó ò# since most of that iA ±needed, andH rexpense' eC bmethodq < ñ	warranted.  We duplicateI §removal ofE Ñchildren, butˆ 0's Ã 2we Š Q fromA Ò eclass.B nelem =Ã! 1if $ ¢ FNoneL 1del" ‚._attrs[Ä0ode¾]H +  1NS[�.ò’spaceURI,Œ j
C oj_is_idŠ  c ~  v = Falss      Ð p._magic–©nodes -= 1­  * N «@DocuÛ8 Zcount8 Afor ’2 inÈ  Nb 
¬  .¢ Mu   8 6[:]ÓöAisId9Ö	¦return Tru9doc÷à  %	" Ü! 0if E 0is 1 or   
î ‚ �B Pnfo =F .Ø  s `_info(
 0if  [  ´  Y’  X .P!NSR‹º ;elsâ P N •ê ’schemaTypÈ S�˜R‚_no_typehA›8^  Y   žÀgetAttribute2ª9\ ¶5defr † 0, ". ",È    ¼ ="Y  i0is ¬  ¯Ÿan ID.")
H  â M Pdoc="1-  ¾7X O S"",— Se Ù ™t÷Ÿ  G !

 y dmðMap(object):
    """The atð@tribute list is a transient interface to the underlying
    dictionaries.  Muta ûs here will change= ª element'sG 1y.
 €Ordering� ñimposed artificially and does not reflectd o: 1 ofG #atÝ ðs as found in an input docu‡ .. 2"""~ ð __slots__ = ('_F Cs', 
 !NS cownerEÇ )9 ñdef __init__(self, =  HNS, 7 !):x  I - .j " =5  $NS +NS  Y ) =h � ¡get_length  ‚ ¡return len � Ù Aitem w, index< 6tryË  Ï M  Ö [X8 S ‘.keys())[F %]]È €except I] _ErrorT FNoneÑ  • s^ � VL = [X €for nodeû ’ ˆ wvalues(9  »  L.append((4 . QName,C .4 %))´ é L’ /NS” D• ³amespaceURI™ Plocal© ) ª ¥__contains®7key÷if isinstance(key, str!  0;key`$OelseË4 &NSI' °q m   Æ' §  9 #NS‰r 3N; 's(v 1getò1, n-K =¬¾  8 2 R _¤_±¨ C_cmpn Hothe’7if  ?0get„(* 2, "e;", � Ì0»1(id‚ b) > id] V)) -  < ¼ 5_eqo” ! å ! X == 0C /geC >C £e ¢	ñ† >… l… <… l… <… 0get0attO—_or_tuple]ÎÀe(attname_or�_tuple,  G):
  òreturn self._attrsNS[attname_or; ]3 OelseA ?  @ Ñ# same as set ðdef __setitem__(† #, ~ w, value° áif isinstance( W, str#  Ú :try£   hnode =è § Ý  ( ÿ except KeyErrorI SAttr(ª )Í  >   n å.ownerDocument|  0Ele 
# F  à.setNamedItem(X 
n   ." =1G ¬oif notE  Î F Ë ¡raise Type"("i �must be a}ping or B Ž object"¢ œ  ^ ß Á  gû  .  , —© ëÏ[3 äà
> _None
† #NS¤ U ð spaceURI, local¦› ONS[(I ² )`remove� 6;n’	f � ¿ 01 is5 
ñ _clear_id_cache(._àJ  ð9del€ n.½ § í (  &.™ q&n.s
= `if hasÉX(n, 'Ž 'ž h   nƒ�0 = ç û    n W'öxml.dom.NotFoundErr()G•Jª/NS;ª ¿J—ü¿†	‡Q+odž] ß,z
1ðHierarchyRequest9Ä ƒ  p"%s canb òbe child of %s" % (repr!,  Ðself)))
     ó   old = self._attrs.get(node.name)
   if, :   ¶old.unlink() L [H @] =  ? & 6NS[q ‘spaceURI,/ p.localN‰ B  O Õ.ownerElementÈ  q ò _clear_id_cacher * Â `returnï 
? pdef set‡ €dItemNS(¿ £ )8   .0 l )L ³__delitem__I 0attn—_or_tupleU  ç Ú [' ]Ÿ  ŠÞ  Q ¶B  á £__getstate– „ Ù &,3$NS Pð s[ !, i b 4[   ª á

defproperty( ñNodeMap, "length",â  $  ádoc="Number ofd˜s in the @ ð.")

AttributeLis^! ó	


class TypeInfo(objectÔ Ð__slots__ = 'ÛØ"', 'Cinits%, +  N  º "  O1ameV á #  f Creprf U iÙ!lfëL Í t øñ"<%s %r (from %r)>" % »1.__P__.__ž #__  
| R  ½ ˆ �Oelse– 	Œ €1get­ Ã ð ‹ A3 ž 8 % Æ

_no_type =&`None,  )B¿(»� ?1=('T@Docuä B`parent.   0tag˜   Ú }prefix'‚�0URI5 _c  Pchild[ s ‘
 /NSQ  extSibling* „previous Ê ›  *0 = ^ Ñ.ELEMENT_NODEÀ ! @Valu-  cschema8 N•`_magicÏ : Ss = 0 Ã _ }  [	t ™  ñPROCESSING_INSTRUCTION¯ ; 5COMÛ , 2TEX) �CDATA_SE‡ ñENTITY_REFERENCE¼ ð )

    def __inû2it__(self, tagName, namespaceURI=EMPTY_NAMESPACE, prefix=None,
   PlocalG ! 4):
   d à.parentNode = B 
 ‚ 1 = . @nodeK $ =œ 
/ Š # =“ 
 Å ) =Ô 
) Pchild“ s” ŠdeList()% ´nextSiblingž †previous Ñ 8 ÷# Attribute dictionaries are lazily created4 a4 ( ædouble-indexedN#W/&->k K u   URI,’ ( ðin the future: consider¤ €y genera½ Z 5of ¨ ÷ objects this is too tricky2 ÷for now because of headaches with, º%s. _u ¦/ne !NSÃ1ne
 ±def _ensure; Œsî™"ifn# Â  Èk j
 !{}_      � '{} Eget_‚{ :tryh creturn� 7 n fexceptí_ErrorB  û.split(":", 1)[-1]  ( ž � # 9 lunlink3 L1noté
¦   ÍP in loD—.values()¤ g   4 .{ ¢¿W œ ÛO õN  � )ß 5get¾å ,ò š– A"""R± ý!e ¸  Ú N�specified8 ._  È 7 –element's7 »G   5 asÀ óa string. An empty  ‡¾Qed ifßZ • does notF Æhave such anv °. Note that 	^ ¦may also b†o !as0 çxplicitly giveY ' , &thA 5hasrð method to distinguishÇ ·se two case5"""Ï ƒ ô
­  6 Š wPs[att‚]¡q •?Key�"""ü ’[#NS] Y s%, úm
Ø  NSäÚ $Àturn self._aóttrsNS[(namespaceURI, localName)].value
  õexcept KeyError:    ¡return ""
 ðdef setAttribute(self, attn !, Z )C pattr = & '.g8 SNode(6 )Z  m  ifJ –r is NoneG   K  { : ! Û " =‰ p # also² ys nodeVù 5 ÔownerDocument¯ 	 £  4 Î Î rË Celif… !!=Ö › Ô  ³ 	i Z.isId9  ‡ â_clear_id_cach‹)§#NS© ¦�qualified½cprefix; : É = _nssplit(< ø ¦#ñ/NS” Y @ ó 	€  , F Ù í  ", Å a  : ¥ w 	ÿ5sÔ$±  # 9, " 0   D 43 !=>|#' & 	» S %  w _9 = ³©'« >  ÃNi}@lf._ s$± @‘  •<  � Frb Œ 9` Ö � /NSŸ )!NS¡ /v ç V æ ’r�  4.Ö1Eleé€not in (,,¤2  Áðraise xml.dom.InuseúPErr("T  ^� already f &d"t “ �._ensure€4 &s(" Dold1e" s ` .£,0 1if 3 iØt 
¥s Vremov³ § 7 H Jold2x {{ V û” 2ø Z V@ and©   ~ © 2© A_set;_V(Ð)

        if÷ old1 is not attr:
  ñ# It might have already been part of th@ ûde, in which caseJ ñit doesn't represent a change, and shouldŒ Ébe returned.I  ¸   if 2È 5 !2
6 üsetAttributeNodeNS =  + ¥def remove2 Æ(self, name)10if   ._H0sNS� FNone"  Zñraise xml.dom.NotFoundErr()š  $ :try5  R ¡ #lf_ [} ]2 ëexcept KeyErroÆs º ç  ({ )
'NSÿspaceURI, localNh@NS[("“ 6p4ode8+odDOnode;8Ù“[[ .8â_clear_id_cach× Êr gunlinkà’# Restore<@sinc  e /  ü Ástill usefulwotherwiU"# W %ed > °.ownerDocum` Õ*lf 0  7 á    1  ?hasÐ"""Checks wheÉ � the ele£ ahas an}�Q with" ‘specifiedj.s   R€s True i‚O ! J   O“  \,svs Falsex5"""5
æ ­ä   F 9 n0ame(˜Ù L[?– -« &NS­ BgetEÄ`sByTagðÖ
û4"""³äall descendantsõŸgiven tagõ <1lis{N (Ïõ direct children‰Àonly) with tó	he specified tag name.
  5""" ñreturn _get_elements_by_tagName_helper(self,G á, NodeList())
H ƒdef getE? 2ByT= 'NS8 ð spaceURI, local] !):?  – ‡ $nsŠ 3  7 — _  ª �__repr__œ ƒ c"<DOM Ì ñ: %s at %#x>" % 4 .A, id �writexml !,  ÷r, indent="", add wnewl=""ˆ @"""WE ƒ an XML –ò to a file-like object� 4 8the1   ƒ 0 õ that must providePa­ Ó method (e.g.r Ã or StringIOI )O#ê £ = current Uationl #( =" æ  dd ×higher levels:  20 =  Qine s˜   î . (hp+"<" + ,»¹ 8rattrs =   wibutes(( `for a_I@ in $ ws.keys(» P z r� p" %s=\";< )©  , _- a_data( "r,Z [. z].value5 ) a 6\"" "ifÇ Pchild§sb p 
; >:   qif (lenº.C ©) == 1 and¼  2 S* À[0].nodeType%(1  5    œ ¢.TEXT_NODE©á.CDATA_SECTION )\ ; t  ×  t	 Tr, ''  < Jelse  6 Q W
5  #  ý Ú  Ö � P  1  - R ˜ �,Ñz 	� @ 
% 	! €"</%s>%sqÈ¬Ù ; 
I /F #%(6 É ç! ¥  �._ensure_$H   é ÿ¢2Map© / "s,Á "NS † € shasAttrW  o ~ ÿ> 
™x 6Truò& RFalse[ # L…! 3�| °, based on eó22 Oct 2002 draf™ ³ UsetIdµ í Jº ! †5get0  *(v» ö .V ð Node(idAttr)

 ó*   def setIdAttributeNS(self, namespaceURI, localName):
  i6 0 = 1 F.getE  odI C B 9 € Bode(Z !)
) ¤   $  < #, * • f ò  is None or not¥ pisSameN@ : ×.ownerElementÜ  ã ñraise xml.dom.NotFoundErr()™  $ ñ
if _get_containing_entrefF)…  }  ‰ ¤  9 ] þModificationAllowej  J · j_is_idS 	 u = True©  t  3þ._magic_id_nodes += 1& @Docu4 ^count4 `_clearU Rcacheý ã

defproperty(dD, "al9s",z Pdoc="ed¢vMap of . ’ on the e®?.")a ­` Ø-' è h Hthis[ ¾ e _set_ƒ 3(€ ,› 4$ ) †._ensureP sJ!  j  s[ .=1] =e &
% ENS[(( Ð ¨ Ù  H)A B 0# Tå ócreates a circular reference, but ¬s.unlink¥ �# breaks„±cycle since A As to  Š R{ 0dicÜ0ari{ ¡re tossed.  - 	‹$ =Œò

class Childlessõp"""Mixi¤at makes c#  -ness easyŽ 2imp2± and avoidsv  M co Bxity e |p methodì Âat deal withb 2ren¶ 1"""H Ó__slots__ = (¶ Ò ÿ 1s =ˆ* ¢  a   PEmpty CListeQfirstë 7 +la M  }5 y" òbreturn€ 
4 S 3 aappend˜ 0  , =üi 	,ðHierarchyRequest4  +   Š C  ¦A + "P Ps canåEhavel"R ï 1has…  6sŠ „ í VFalse;²insertBefor˜Q, newF ,ø
 F Ê 3!dovÊ aremove} È B, olaŒ ‚N„  Àn")

    defó normalize(self):
  ÷# For childless nodes,0 @) ha Åthing to do.> Qpass
 Àdef replaceCM h Q, new Q, old
 | ñraise xml.dom.HierarchyRequestErr([ ª  º .  ‚Name + "­ Â do not haveÉ ñren")


class ProcessingInstruction(Œ  ò c, Node–  ^ aType = ñ.PROCESSING_INSTRUCTION_NODE› ö__slots__ = ('target', 'data')ƒ__init__)  , ' z  å á  2 = 	 g   1 ! =8 ] #òValue is an alias for&  ;  œP_get_ß , ˆ z breturnb d v 7 s7 0, vo > ¸  7 " = ? m Ê = property(‡ 9, _` 2Õ æÔ Ÿ Ö  - Õ 	8 w 8 Ö 8 Ø  7 ×   Ö   Õ  ¯ �writexmlª !,  ÷r, indent="", add wnewl=""k3 . ò("%s<?%s %s?>%s" % (= ,’¼ ,Ö�&l)ßCharacterDataã@=('_å àðownerDocument','parentI  ð previousSibling Dnext 	ç À 	e " =È j ¤!nel æ4 { 6  7 Ù U = ''O  Í .  s ÉÇalengthÌ» K1len .3)V Q__len+? T  . 8 R à © N ‡  Ç3 P2 	4 1 ' =9  ! Å  	°CreprÈ£  ' l  ¢  •0if 
  f) > 10z  2dot … = "..."9 Oelse, ) pp'<DOM %ª°de "%r%s">'S  q E_²__.__name__;‚[0:10], “ 7dotú ‘substring+ G ÷ , offset, count#if ; < ñ 
ó�IndexSizeì"O @ canÏÂbe negative"@ À [ !>=Z Š d
.àraise xml.dom.ó&IndexSizeErr("offset cannot be beyond end of data")
  Õif count < 0:   êraise xml.dom.d 3 c ‡negativeY Àreturn self.t [˜ : +B !]
r ð def appendData(3 f, arg)‘   G & =S   +& D ginsertD l L 2if  ô 4 õ 
[ a>= lenÌ ¸ Ì ]i Á6arg* ^ .0"%s Q" % (n !  ) [˜]-,d·&])hodeleteh Õê ^_ [ jYá 73 6& Å¨- +¤T:Uoreplacªì¯ÿBt3Ðð	)

defproperty(Character�ñ, "length", doc="L  é¡the stringôú.")


class TextH Ó__slots__ = (òñ
nodeType = Node.TEXT_NODEN  0Nam q"#text" ¡attributes7 &ne>Qsplit‚  Ö,Œ�  ™Ûc< 0 or" / >R&tillegalI Hvalu«0new� [!__&6__('# Ë( Ö]ö  ¾ * ÔownerDocument3 	 3 x" µnextSibling  "ifì`parent…à and self in sðelf.parentNode.child
 Gs:
  ú if next is None  ( sI pappendCO ™(newText)R ?elsG ÄinsertBeforeH ,‹ N { udata =  •[:offset]u sreturn � 
 Ðdef writexml(< , ÷r, indent="", add †newl="")_C _ƒ ( `r, "%s R" % (= ,�  Â Bwl))… ó# DOM Level 3 (WD 9 April 2002%  ª  _get_wholeO° † PL = [Ä .‰ ø nñ previousSibling »pwhile nÜ?notà  ýà.nodeType in ("Á.TEXT_NODE,  ÑCDATA_SECTION ž  i   "L.ÓQ(0, nª É      ² /n.¯  " =Ubreak×  F  ¹ô l(ñ ¨ í Ý—''.join(L6‰replaceW8—, content£ð# XXX This needs to be ser6õly changed if minidom everrð# supports EntityReference >%s.* r™€! ½µZ š? = ” «Ø s.removeýà5extî  ; Ó. ¦$otØž ] ˜   › Oc Xš ¯   ³  n°  "    ( F K/if* —$ =! 	\ i '  »&  +ä¿òisWhitespaceInElementCŒÒ&if3w.strip(¯ ÿ h WFalse� Qem = . æ‚aining_el ð (self)
        ÷if elem is None:
  Åreturn False ðinfo = self.ownerDocument._get_N _$ (
 )7  f  i ?els�  H `.isElew úContent()

defproperty(Text, "isWhitespaceIn3 %",ž  õ õdoc="True iff this text node contains only wT "C  G P" andç !in[1ent>  "/")¤ Pwhole° ‘ "he‡ ðof all logically-adjac^ ¦ Qs.")
 Œµ 1ing— & Í )æ@c =  ¢.parentNodåpwhile cÃ ;notPif c.6 €Type == 7 Ò.ELEMENT_NODE]  
  Cc' v cs &  ‚¿ `ntref(y ¾ @ÿ NTITY_REFERENCEÇ 3 
class Com¦ã(CharacterDataÄ  Ï HG5COMG1 ! ¢Name = "#cJ !"
 Ðdef __init__(�6, dZ  {	r ., — :  ._: ! =A ^ ƒwritexml^  ÷r, indent="", add snewl=""Ü  ‚ ¢if "--" in/ g ôaise ValueError("'--'{pallowed@ #a ÿ ³"Á — . ò("%s<!--%s-->%s" % (¡ ,�  , © ))¢±DATASection7Â À__slots__ = ^ Ò  ‘	² < �_SECTION8� ' ¸ ÷ "-sa ¾³ `-À a ÿ.find("]]>") >= 0iP]]>' â	gCÒ  ® h1<![) 0[%sr & %`YðReadOnlySequentiald2¯Map(objectm v'_seq',Š	¼ ËCq=()9  –ò# seq should be a list or tuplÖ ( - ] Àqa 3lenHX —1len.; )6  ðalength  : 1getAItem; g, nameA Pfor nù´ 
ÐAif nˆ H  ˆ @ 
#  ò Â nµ ð getNamedItemNS(óself, namespaceURI, localName):
  �for n in 1 V._seq  # Xif n.G 9 ==W u and n.\     
L  P ‘return n
‚ ðdef __getitem__(… ¶ ˆ_or_tupl¬ àif isinstance(• & ,, -  m bnode =Û 0getû ™dItemNS(*? )Ž  3 Jelse¶ E 
� B  2 x kis NonM ïraise KeyErrorC %6ode( #!WindexÅ   J < 0½ J  ‰ ã ?try%  }[` ]1 €except Ic ¸ ? d 4  Öeremover¹  u¸ ñxml.dom.NoModificationAllowedErr(U  �  "T „NodeMap ö  is read-only")6ˆ 'NSŠ � Ps”˜ (odó… \‡ ^Sstate(5[¢]áX__set8 !,  ? 7   b ò[0]

defproperty(ReadOnlySequenti'df¹, "length",‹ðdoc="Number of entriesMHthe ¨.“�
class Idb BfiedG¢"""Mix-in   àthat supports J �publicIdk`system Òttributes."""Ô__slots__ = '7 D', '6 '(  ¢%_i‰ ³_mixin_init‡< $, : P" 4 =  q9  u´ } Dget_8 t ` µF $ ; ] ; 	$ 
yÖDocumentType(†Ð, Childless, òŠ  ø + ! = ñ.DOCUMENT_TYPE_NODEð  ' @Valui ¥ è8 !ne% Æ  Ÿ  äinternalSubset C ³£ p, qualiI kð ):
        selfð	.entities = ReadOnlySequ óalNamedNodeMap()
  ßself.notation: Àif qualified] :T  [ ùprefix, localname = _nssplit(8 Œ  8 � 0 < Z  0odeq 2 =  Aame
# ð	def _get_internalSubset(' )  breturn= 
* G Pclone/= g, deepC "if? öownerDocument is Nonej  Ò ‘# it's ok£     ` 4 = < PType(= 
' .@ Ç  J /.n i  Aoperåù = xml.dom.UserDataHandler.NODE_CLONEDc !if 
Ø  Y Ÿ  a x©._seq = []> ) h* sfor n iŸ
2 �  \ $ C = NÉ%(nÀ, n.publicId ŠsystemIdh H   Ñ R s¨ „.append( : òn._call_user_data_hV(z_, n, F  ú eú 	Uù # Py = Eù7y(eõ eõ $e.õ ,™ õ   H  gï | û.actualEncoding = e q = e7  1 	qversiong  / Æf *ieÅ yÔ Ã?e, D œ ( !, ¡ 
… • Õ ;elsN'  *­ƒwritexml¬ ÷r, indent="", add wnewl=""Ð3 . Ö("<!DOCTYPE "¥  r#  Ç ‹  m
´	> ð"%s  PUBLIC '%s'   "ù “@ % (¶ ,wd ',  å)” $el–  – aSYSTEM– "u C ` ^ 
F ?not 
' [_ ò 	 c
Y Ù . Àer.write("]"3)
  qwriter. ñ(">"+newl)

class Entity(Identified, Node):@ ñattributes = None �nodeType åde.ENTITY_NODE  BValu! 1ne
 áactualEncoding< P e  tversion' B ðdef __init__(self, name, publicId, system
 ƒnotationÊ   3 .½ 0Namœ  = Y  5 ! D 
% Pchild%vdeList(qg %_iRa_mixin¸ (ª )Ü Jget_'ç Ã qreturn c 
* G TA 	$ ; {: 	# 9 pappendC8 Q, new ½ õaise xml.dom.HierarchyRequestErr(i ’‚"cannot \  w ren to an °0ty Ï"DËinsertBeforeŠ _, ref” 4g ” _below— aremove} – "ol/ /\ Œ Ofrom‹ 
IplacŒ ¬/, – 9g — /of•  …Nh	‡-Iless’ ð|�NOTATION~`„<’h s "am   ès²DOMImplemenn( #LS… q_featur€ù[("core", "1.0"),. ’  " 2"  ÎC ?xmld ! c ! b pls-loadf 3¨ % I ]€BhasF*_8#, «P &$if b == ""ë    0 y    y(X †.lower()` # i—³ž  createDocuô¢  ~áspaceURI, qual€ j„, doctyp‡ � $if D and p.parentŽà is not None:
  ÷raise xml.dom.WrongDocumentErr(
+  õ"doctype object owned by another DOM tree")< ódoc = self._create_dd 5()
' Àadd_root_ele€ õ = not (namespaceURI is None5 •   ÿand qualifiedName: å n ¥ !if• 
[  m ¾ :£  # The specˆ òunclear what to …û here; SyntaxErr@ Òwould be the kòobvious candidate. Since XercesW sH ðInvalidCharacterErr, Á s;   ¨  klistedE Bfor Ê-0, tÍ PseemsÓ © ëbetter choice.F �XXX: need1 `check Y ”illegal c£  s ¥ +inD † E2.M #�¡Level III uñs this up when talking about\ºreturn valugB# of= èfunction.  If  1, qm Q@DocT*,arH ANulll  mx ped with� %a  ü OqwÀ if, ˜r‘ A are²6“Àn we go back† ]Ùabove problems ¨-J #("ŠÅ 1 noŒ "@*Ðprefix, local[É = _nssplit(wa í2if ; ¹ == "xml" \½ !  B S Nõ!= "http://www.w3.org/XML/1998/, "Î p 
 õV  5"Â0use4S'xml'ž  F ¶  2 pt ?URIv í  _  ‹ #cm s˜ q  =X.e)NS’,g•KË ódoc.appendChild() 
A % ˜ 
Q: 
c  ².parentNodeÍ  %.¶r» ; t >   3 ^  2impqaÜ" É 9T ;def- (=ö, publicId, systemId)× • » I . .S ÀId = publicI3d
  ôdoctype.systemId =  $ sreturn + 
 ò# DOM Level 3 (WD 9 April 2002)% ñdef getInterface(self, feature):J  ‰ 0if  R.hasF (% X, Non+  / ‘  3 C FelseQ &  @ � 0# iŠ 1nal6  ž ñ_create_document¢ ™ j D À)

class Ele0 ³Info(object6 A"""O ò$ that represents content-model information for an eT .® ‚This imp ) ðis not expected to be used in practice;œã ûbuilders should provideW ñs which do the right thingE Yusing° �available� #it± 2"""º ò__slots__ = 'tagName', uq_init__mX, namá Ö.6 ! = ; ô getAttributeTypRaD ·@_no_Þ@ 'NS… ð spaceURI, local· ÕOT #isCáR 9 VFalseŠ |isEmpty- A"""Ro s true iff‹s¢ is declarÿ@have<QEMPTY¯ ¬ k k.™    � !IdŠ ,, K‘ e˜4d a� ˜ ïa DTD-style IDw ‚‹ Ÿidentifie� -p__getst�ÆžÍ:__s9 !, G @ 9  e f !

ôclear_id_cache(nod0if  .  ïö == Node.DOCUMENT_NODE÷ ( .J .Y %() Ðsearch_stack S !ne% †elif _in 3 Æ   d.ownero - } | UT (ä $,  #LS‚ Y0('_0_HC', 'ž!',É  ë 'v  0 Pchildh s  " ~'._ _ï BAs = – E.ELEy �ñ
de.PROCESSING_INSTRUCTION›Ž  —  | L.COMN ÛATYPEE N=æI ë ¶ .-ÀNT_NODE
    ðnodeName = "#document"
     @Valu ANone Õattributes =  ™parentNod, öpreviousSibling = next ? 
W 3# D|  b òfrom Level 3 (WD 9 April 2002): ²actualEncodd V  À e  ™standalon© xversionÒ òstrictErrorCheck\ BFalse xHandler8 C4URI á ò_magic_id_count = 0À ñdef __init__(self):1  Â   y.doctyp°  PchildwŽ…deList()A `# mapp¼ ðof (namespaceURI, localû€) -> EleúGInfo>  i     and tag- , « õ _elem_info = {}I   ü 0achÊ  Ésearch_stack;"6get^ ( , n 7ent1$if .í R Ñ _key =( S .Ä OelseH 	 0 rreturn û  ª ƒ.get(key½Û 
Æà × L 
* D ",@ 	# 9 ú?URI= ' A m> 	$ ; K? 
( C ×A 	& ? íH / Q QE 	# 9 pappendCÒ8 ,�!if .˜TTnot ic_ _/s¬ðraise xml.dom.HiermpyRequesç(¹ #  p"%s cane 1be _ ð of %s" % (repr(n 1),   é&)){® 0is N  ¡
ž @# Th Àeeds to be d£¡before the:  test sinc )is³  ëay *be*0 ˆè,*ûwhich case it shouldE ðend up re-ordered�  � Iend.,  ý .Þ r.removeÀ  ã K  º=<øde.ELEMENT_NODE \_  s S#._Øx¦( ` ÞÀ    "two doc�ument ele ós disallowed")
  ñreturn Node.appendChild(self, node)
- ¨def remove! "ol0 !):%  U 6try    K  .cV  f "s.F (; : úexcept ValueErrorH öraise xml.dom.NotFoundErr(Ï U õ .nextSibling =  †previous ENone‚ ( Parent° 9 = # 1if Ñ 1doc`E_5 isf 
· . U y ‡€ s[_get_l �r1forª2 inœ m
‹ !if( .×`Type =ˆ ú de.ELEMENT_NODE3  Á�  6 ™ lunlink‹ ta ais notB
X  & .L Ç v " … ™6  ( ¤Pclone  › g, deep,t 
‘ å 	ìL " =U2impëÓation.createD(8 ,è  Ì E b.encod� ±  ' `standaÃ w  + tversion(  % *{ A = _	 _è"(n:!,  Î  švassert < d.ownerb.isSam„>   w(O 
n (ifj  � 	»ODOCU¼¬  S.H ´ ¸4 Ý /elq OTYPE2v  æn  r 1doc& =î 	™  (.pž? * ]ô	_call_user_data_handler(<’UserDataH .÷…_CLONED,J  ›   g C‘ H  5
)@Frag�ž˜Dd = A$ 	dcõd  ¤ z dŸv �m —, tagNamev De = $  U et et 1Tex9u  �r €@isinÚ0ce(! W, str& Ô ï ì ("ûð contents must be a; 3ingÔÀ    t = TextC()
  �t.data =   õownerDocument = self ‘return t
 ðdef createCDATASection(2 ,W !):(  r ðif not isinstance(x W, str&  * ðraise TypeError("node contents must be a; Fing"Ó Ic = Š  î /c.î cî  omé … !  ã „ n "øProcessingInstruemtargetmOp = 7 	1 �pp“Attribute
WqNameÎ ^ $ ( o ao Åa.value = ""4 za„ 0EleŒ#NS„ ûnamespaceURI, qualifiedš Ðprefix, local Ê = _nssplit(5 ‚  ‘ n 
# *, u ] øeï Ú eÚ  :^Ü Pª1Ù .,, ä Ó/ò# A couple of impÙaSó-specific helpers toz Qtypesª#gð
supported by the W3C DOM I &s:k_Àw_entityDð, publicId, system
 1not‘  3éB  < ¬  î² ‹ ´ ¦ Sn = NÁ (¨ ·n·nL3get CById˜ 'id‚ �if id inU¦._id_cache&  F# E[id]4Lb ã._elem_info orY Qmagic_ Gount� ` 3Nons  Sstackîv qsearch_ y  @ is @ 
¹ �# we neve‡  >  `efore,›  ‡ï õ has been cleared` Š [d‰Y+ =elf­  Å  Í U Àelif not staWck:
  û*# Previous search was completed and cache is still valid;F ùno matching node.  Åreturn None
 ‚result = ” œwhile staª  V " = e.pop()J  < ò# add child elements to0 ã for continuedê 9ingB t ’.extend([J 8 T "inØ  YNodes=  ƒ  "ifŠ .µ ”Type in _ qs_with_J Lren]É ¡check thiss 	h @info�elf._get_ì _ (_ 
K 0if  
ò ¦ �# We have"ùprocess all ID attributes before€ > Ð ì€in orderI 1getE 8theF oset toF  �be IDs usI E´t.setIdA„ :*()J €  • ¦  U õ . ³ ž.values()ô  : !if™ ß.namespaceURI* .  ?€.isIdNS(f 	: ,M ŸlocalNameu  K   s´1id_P[O ¯ >] =é 2  » 2 o == idº 9 rc '‚&   �elif not‰ ¡._magic_id´si _breaka Y GE-)'%!Ä #O_is_Î	…,de) ˜1.^N I ú/l’3if ™t"
K”9 fðdef getElementsByTaógName(self, name):
  ñreturn _get_elements_by_ta5 w_helper< á, NodeList())
H ƒdef getE? 2ByT= 'NS8 ð spaceURI, local’ ‡ $nsŠ r ½  Ó _  ª ³isSupportedŸ þfeature, version˜  h B.impâ ¢ation.hasF9 (A  imk  3m §node, deepg 0if  . qType ==gæ.DOCUMENT_NODE¶  õraise xml.dom.Not× ÂErr("cannot € P docuÜg 5s")F/el| OTYPE� 6tß  è † †`clone_ ( (,çlƒwritexmlR ÷r, indent="", add Anewl åencoding=None, N `standa„ " ¡adeclarùbs = []â 6 4if X 
¡4 ¤.append(f', 4="{ 6}"'‘6if ‡ @ is Æ ° ] : š="{"yes" P ‘else "no"t C. „(f'<?xmlø="1.0" {" ".join(Ø P)}?>{`#}'¡ 1fori1 in¼`.childsÆ  åv  Ï ÉÆ , c a ó# DOM Level 3 (WD 9 April 2002%  “ reì v )nþ+   å 
t.ownerD/€  
º 
~TWrong5  Z   �• Ås from other¡^s;\n"> ðexpected %s,\nfoun D" % Ü 
¹ )QnY N@in (E.ELE].’.ATTRIBUTñ Å 
õ s¶ í  k ó() only applies to nâ and attribute  ”4ame´û != EMPTY_NAMESPAC`if ':'y Ý
´ Ã gprefix…! =Ö.split(':', 1= 3   bif (  =  �n"xmlns© ,  Ó   ¶ ©VXMLNS¾ b@ +  j[4 ð"illegal use of 'xmlns' pr‡efix")
  Yelse:   ýif (  name == "xmlns"&  * Q  and* ÿspaceURI != xml.dom.XMLNS_NAMESPACEB 	�.nodeTypr þNode.ATTRIBUTE_NODE)¦  € Uraisep ANameˆ OErr(n ñ  "illegal use of the 'ä »' attribute( l  prA} = None^ Plocal� ! =! cI E 	f Oif n#
"pelementŽ r.ownerE ˜  Ó 4if ( ais notÜ 
I ( As_idK  _i 	E  ! F „.removeAF É&(ns9 V%n.%	 r 8n._& !  ¹ �Ž & ?ode°kqELEMENTŒ
 _n.tagI í #` ðŽ  C n.¸  e*am_¦LO.set‚ j   1if Ê
Ì     J /IdL R# It'7õ$clear from a semantic perspective whether we shouldý a# call‡ñuser data handlers for  0_REM@D evÛFsinc*ñ# we're re-using6 Pexist  oÐ.  The draft ™ — has beenŒ ðinterpreted as mean@ ¦"no, don't® ¤ — unless aF 1newâÆ is created.Bðreturn n

defproperty(Docu³C, "d ´%",[  žådoc="Top-levelÂË4is = A.")
b € _clone_( À, deep, newOz e"""« C6 " aÉ  ègÉ!itZ â Xp ¥  Called by ý.z  
 )i p.import 5 r  | üY - PsSame- (²   Ffation �’UserDataHN.EaCLONEDx 
£B cIMPORTD ´  Y	Á3 æ|.'ò!NS©¼
 ó  ànode.nodeName)#
  ðfor attr in node. õibutes.values():.  5 Ñclone.setAttr* 0NS(6 á.namespaceURI,V .S CName R )O Ba = S gS ?odeW PlocalX L Â.specified =�  
v zif deepÖ  Uchild	 ZNodes* A = _¶ _â (, ,W ú, newOwnerDocument¤ ? CpappendCu 2(c)  Belifˆ X €Type == † á.DOCUMENT_FRAG	 FNODEœ � - = t.createŽ @Frag– (— ¤_TEXT_@TextL(]R.datavßCDATA_SECTIONn ; Sectionr ÿPROCESSING_INSTRU{  ÷ProcessingInstru„ utarget, � @/OM¬1Com£g ŸATTRIBUTE£Ãm 	Ã$!F  ¾2ame^ ^�	žETruea   Â ˆ ! ž<TYPû bassertMo�} is not)m  ­ Popera¶ð = xml.dom.UserDataHandler.x•_IMPORTED: È  Â `.impleÔX “ ç(D  ‚ F8 ’publicId,Ï ŒsystemId`
ç d ò½ õ.entities._seq = []6  š % 1notÉ &  NnJ
. ² P      êY '(n;'n. .ý  D   H .ÀerDocument
   ôclone.notations._seq.append( *)
4 ý  if hasattr(n, '_call_user_data_handler')::  J /n.1 Q(oper‰ _, n, € òfor e in node.entitie¹ o  Py = E(  y(ë ðdeName, e.publicId ŸsystemId,³  ·   D / H t û.actualEncoding = e i 9 e3  - qversion_  + øownerDocument = newO 8 – b yü ee ºÍ~ Felseø°# Note the ¾  y5of õ 5and ATypeDEs isü p# imple#‰ò specific.  minidom ßÈs those case@ €directly£ˆ õeNode() methods.o ñraise xml.dom.NotSupportedErr("CannotË ¬ À %s" % repr( 1))
L €# Check ]`) sincóis could conceivablyG ûused with other DOM‘s (one off³FourThoughtB ò DOMs, perhaps?)ì  ·  *  ( ,%breturn ñ



def _nssplit(qualified½:™fields =  .1 b':', 1Y rif len(0 b) == 2B  v  
œ  r(None, ' D[0])¢ ðdo_pulldom_parse(func, args, kw QPevent°  "  (* C, **$ { Ðtoktype, root~ "7 P.getE
 (Ô M p.expand* (3 	  Sclear3 Ê ( b´ Qile,  "r=ê qbufsize Á @"""Pã ` a filÎAto am!by qname or ± object."""Ü #ifa @ is d  Ø )k ”Dfrom_ È@ort ê �tbuilderP ½ .Æ (¡ 
	k[ ÀV _Û) c !, e *,)|!{'� 3r':ï 3, 'á 3': 
 '})~�String(s †Àne):
    """ð#Parse a file into a DOM from a string."""
    if p1 ¡r is None:   1 õxml.dom import expatbuilder) ireturn .U Sl (s )0 ?elsc qpulldom.  ‡ ^ C_do_ _] ( k #, m 5,),A  E  !{'I 3r':ð})

def getDOMImplementation(features=&)'4if    h Õif isinstance7 ,z7  &   < ¢ = domreg.Û _ _:D C: ¯or f, v in‚   " °if not DocuÄ ).iÎ R.hasFÑ (H ™  A x î K Q 
! 0;sax ù.handler

START_ELEMENT = " X"
END  T"
COM6  "P DDOCU Q  R   q  S  ð	"
PROCESSING_INSTRUCTION(  ð"
IGNORABLE_WHITESPACE0  À"
CHARACTERS$  ó"

class PullDOM(9’.ContentH1˜¡_locator =¤�dÚ  ôef __init__(self, ( xFactory¿ çærXML_NAMÜ X  *  O .N ºb` 
/ àfirstEvent = [L,Â ]' &la& g 8 
) e’PStackR H qpush = C + u.appendL 6try°Ü ?pop= 5pop: úexcept AttributeErrorL a# use Þ ' T  &ea~  q EpassU ° P_ns_cý0xtsÛ {†°:'xml'}] # % üains uri -> prefix dictS tcurrentX Þ k <[-1E€ending_e·‹ !]
«  1popX™ Ë PresulàÇ w	\ >del™	" bP s 4setuL‚ #, ‹ ‚ -" L QtartP1sMappingL E,TP Eshasattr+ €'_xmlns_ 's'.  ‚ !  Ëa@ š"((� @ or ê2ns'Œ óZ %; ð self._current_cóontext.copy())
  ò self._current_c& ñ[uri] = prefix or None
5 �def endP €Mapping(F ,/ !):(  `   ] 2 =  $nsp vs.pop()a ãstartElementNS_ ÷name, tagName , attrsn ð # Retrieve xml / ñspace declaration5 uibutes.§ ñxmlns_uri = 'http://www.w3.org/2000/$ +/'4 ƒ ` = get © !'_. _ 1s',=r ifŸ "ns q is not$ 9 =Pfor aÅ ¨, value in9 
-  1 o .W "[(ƒ Buri,F )ÑI Ä  5 ‹- A U = []# @ PlocalŠ ! =V jif uriŠ Á# When using. „ðs, the reader mayU  5notO  � ñ# provide us with8 roriginaÕ@. If4‹, create@ 0*a*1%id+AfromG ç ç z %if1 /is�  $ ÂP Ç7	Ž  4 #if
(    Ðn…+ ":" + vR OelseM > "if|@docu\F Dnode¢& .h�¹ Ù Î › U cbuildD€ (J F V D1tagŒ9“ùed, it just appears as:#R1(o+ g,¨  YÄ ¯w.items( . aÎE, a_˜ " =	1if * 3 ==[Ï N ' J 1= '1'? / qŸ=~ 	v  $ â    > c O:' +I 
 °AAttrë1NS(ç !, ] 
£ t   F.set2 0ode6 :ttr. !el'Š� Tƒ Z x   ² ‹Ú\À            ð    qname = a_local 
  òattr = self.document.createAttributeNS(a_uri,R )E †node.set2 !od6 :ttr. ]else:@ … (Æ 
T  Ï ‚ (X 
,   P.valu 
Ž ðlastEvent[1] = [(START_ELEMENT, i �), None]: OK 
+ Qpush(J ~  def endEle0NS(‹  , ±¦, tagName)7  .^ © 6END§ # _pop()­ !®  • Sstart— 	•  Hs“ *ifC­ že]  ì «' .C cbuildD­(‹,)N r Pfor aT ,åA in ³ w.items(º  .   ]   Ó(O £ 8 N    ´ •c ) ªÍv_ßž kA0comý‡ \2CS 
¶Ô ?COMâª0»ÕÀeT¨i s›f �pending_6 @s.ap ( å žóprocessingInstructionAÇtarget, dataÐ¨&Pl 	f þ Ç ü ÿPROCESSING_INSTRUCTIONVG t&x 	À Ö€  }ŽóignorableWhitespaceŒHcharÑ Ë o’TextNode(4 S´ðIGNORABLE_WHITESPACE, node)“, None]
  úself.lastEvent =  A[1]
, ð def characters(& , 1s):!  P DnodeC ð	document.createTextNode(E %s)3  I € ð[1] = [(CHARACTERS, U )· )cstartD� º ³ "ifò ¯ ¡Factory is)Ü  à õimport xml.dom.minidomÌ  # Ð M =3 .� `.imple(VationlTbuild& µ ç, uri, tagnameÃ ù# Can't do that in ó ô, since we need theF » ä# XXX: obtain x EType#  ˆÝ.ä7 (© ºñ!! =ßd >ŽïSTART_DOCUMENT'    f Ppush(Ô › ð# Put everything2ðhave seen so far inth$e Ä ½ Qfor e~ T�pending_eXsHúf e[0][0] == PROCESSING_INSTRUCTION2  · ñ _,target,data =C }  !   n£œðProcessingInstruco(Q  R  H    ¤ O = (¡ :, n3 9eliØ 0COM°É ¤ 0Com
(x :[1]^ ‘ Z ‚  .seo °raise Asserõ ó Error("Unknown ¨ ÷Qnt ",} 0} 2˜ › 
"  ž› g ! =^# areturn¶.firstChild*enþ^ › W[(END1$ °LVpop()q Qclearwk " ð
): Explicitly release par^ ]Uures"ß 	€ ü q
class �rHandler¼ kqwarning‚ p, excep¼� fprint( m  ; eà s 9 9 8 QfatalŽ v = Å 1DOM@fStreamÇ ƒ__init__R s ,,¨er, bufsizÌ · .'  É0 ¢ d hCer =E 
 Q $ =[  À    if not h÷asattr(self.parser, 'feed'):
  " ±getEvent =  e_slurp(  �reset()
 Bdef    S   ñ.pulldom = PullDOM()6  w °# This contq õhandler relies on namespace support; \ Í ó.setFeature(xml.sax.K ".f _I Fs, 1� F C‰ Hˆ 1À ì ±__getitem__# W, pos÷  imª • warnings³  .	 (  	A"DOMu—Stream's e ú method ignores 'pos' parameter. "L ùUse iterator protocol instead.",. ÂDeprecationW± 
  Åstacklevel=29 A$rc'7ßZif rcb•return rcL öraise IndexErrorTc__nexte`t 5QStopI(8ionw  =w  »  3- £expandNodeGnode¬ eJ# °parents = [: ]awhile ? 
B°token, cur_2 " =% 9  O&if  0is ( 
E  % ‹8 _ þ  != END_ELEMENT< · ô[-1].appendChild(– ! j 2if W �== STARTY U P (elR © 
0del* d ­ 	î ]¿ %  Õ° ôÕ1# u³¡crementalPˆñ interface, so we get the desiredY   # f effecÓbif notu   ‚dom.firs�:[1]ˆ • ^3.la' Ð A ~ [k 4bufX s¡Q.readò�.bufsizeò ` :buf´  ý ¸ 2g.close2     œU None·   <  ÁF(bufz þ V[1][0_I Û
eé C 1C ¤ &rc+/ñ""" Fallback replac8@ for#ù€() using0
ó Ètandard SAX2c°which meansl¦> À       SAX e÷vents into memory (no performance gain, but
  õwe are compatible to all SAX parsers).3 5""" Rself.#  ( zstream)' @getE£ 1 = % F_emi‰ greturn 1()
@ Adef + [ !):  ¾ ô""" Fallback replacement for m €() that l s;  ? Pthe e� s" ÿ	_slurp() read previouslyù $rcÇ Âpulldom.firsá e[1][0]m í & C 1C &rc_clear  ñ): Explicitly releaseÌ¾ing objectsÉË D Â 2del™Æ  Û "z = None  `
classVæ2DOM(PullDOM):Õ qstartElÇ!NSÞ ÷, name, tagName , attrsH .= < ¥ tcurNodeˆez wStack[-€oparent+ 2«+ Ó.appendChild(j Ô¯ 	ê à 1  Õ róprocessingInstruction­ Ïtarget, data¿ ; é n»$la}?0][º+ 	º f ·óignorableWhitespaceà ?cha˜2 Ð k ¶ oactersÇ ) ¾ cð 
default_bufsizÂð (2 ** 14) - 20
" ñ"e(†²_or_string,  r=± C  ˜4if Y !isØw += „ 
�if isinstpz  3strd  „š  = open.  B'rb'FFelse„ 8 Ðstream_or_strñing
    if not parser:    ò = xml.sax.make_ !()' ñreturn DOMEventStream(s ,Q ò , bufsize)

def `String* 4ing* b=None)� ò from io import 0 1IO
w Q c = lenE ‘ Ubuf =. 	 æ =4buf¹ ã ð	"""Implementation of the$ó Level 3 'LS-Load' feature."""

ì Dcopy  {Qdom

 ´.NodeFilter  ð


__all__ = ["DOMBuilder",  ÅEntityResolv ð	InputSource"]


class OpÁ s‘B"""F­ ðs object that has variables set for eachó | è ÀT n òuses an instance92is  @to p• ±settings to \YExpatN . V Ëb# Note±  1 ^ 0in ‘òSave constrains which‰ 1eseT ñ # values can beò ]usingæQ åý ánamespaces = 1T  q_declar9  2Truv Qvalid c = Fal� €external–€ameter_eài] > ' general% pdtd_subË%= D ‚ ¹e_if_schemaŠ  	 þdatatype_normalizÂ bcreate‘ ›y_ref_nod¾ Ò  BwhitFR_in_ep—_content · c„ A_secË	  om¥	g chàt_overrides_xm.0codâX Binfo"Ž0sup­qed_mediú es_onlyîð errorHandler = õ fÒ …«ˆàÀ@ X  åACTION_REPLACEˆ ñAPPEND_AS_CHILDREN = 2¤ " ÿINSERT_AFTER = 3  PBEFOR[ 4÷…_legal_a‰(L … #,  ~ ,_  ¸ 
 1 � F  † )ƒ  ~Ó__init__(selfl V   2._oò$ =ü(; 3get©?F M 
©Ã � sF *, 1 œ 
 + =/ â § d	¥ À   return seølf.errorHandler
    def _set_ x(self,  !):/  3   	I ) =+ 
* Y ¡get_filterS E qreturn L " 6  �  6 ",  > 7 # = w £setFeature@ ·name, stateE "if „supports4  . ' ó  ; " =C ± and 1 or 0´  !   6try%    €settings= @elf.l 0[(_i p_xform( )£ ]W °except KeyE½c òraise xml.dom.NotSÑ iedErr(L  ’   3"unö Bed f,�: %r" % Œ Ù,)) from NoneC Nelse„ @for Ä �, value iÛú -  ‚ bsetatt¨._options,D )w s ó AFounï †"unknownÖ �" + reprØ '))''ø U‚ þ¨?has¯ Ã_ OcanS‰okey = p˜  ; l[ã  # This dic\‚ary mapsÖ(ô,®á) to a list ofw2# (”" òpairs that should be set on the OÂƒ object.E \If a m p is not+t© s, it isD  $ ­!byo £DOMBuilderk - ]A = {  k ("šÐspace_declara•s", 0): [) - %],, U 1U )1)U QvalidŸ ž ! 	= ÿ	external_general_entitieê 0 [ ð [ 	ó + Ÿparameter¸ 2 º - ¼ 
2 	_ �¿e_if_schema¹) 	M bcreateÿ Ÿy_ref_nod¿. 	W À  ("create_e÷
ntity_ref_nodes", 1): [
  ¯("create_e. %],- !("" iH 0H &0)G  { K e ­ „ )1)9 ÿwhitespace_in_element_content", ³ 4 c ± c Æ Ðcdata_section²· %  	¨   ™ %  
E  omB„  9 x 9 ü ÿharset_overrides_xml_encodingÃc5 
ž 0 ´ 5 	e einfosev j 3namÅvdeclaraDPvalidº‘if_schema#' ß—I ›#  " Ñtype_normaliz¿ x+ 2 c9 ¢ð supported_mediaµ as_onlyD%0 	áÃ;! = !
 ^ A!}
¨ðdef getFeature(self, o !):   }x @ = _ p_xform( )" 6try/  3 `returnZ AattrW A._op›!, Q > úexcept AttributeErrorP !if• T == "+
"  v a 0 = È q §  $   ž (0 .…7  ;   Rand oÌ .•
B ¥- µ
C 
Enot ò  ¿úàdeclarations
   ÿor options.validate_if_schema
= '  ? 0cre= ÿentity_ref_nodesD = i5 ‘cdata_secÇ )))r ñ0raise xml.dom.NotFoundErr("feature %s not known" % repr(name))
L ñ	def parseURI(self, uri):  #0if  .¿ –yResolver  $ onput =) ".r2 E;R(Noneb a OelseO 2DOM7 v /()O breturn‹ Ù  (iž ï ì   0€ = copy. * #._ ‚ t.filterþ  Ý % ¦errorHandl+  1 Qfp = – µ.byteStream �if fp is HE andá†systemIdË ™õmport urllib.requestN  " p 
  ‚.urlopen9.Z ú c_d_¬ s¬ D(fp,– u±WithContextV,ê 0, cO1, aç
} Æi×r_legal_ sò `ValueEt (" !a 3 a "Ë CÐNotImplementeA÷or("Haven't written this yet..."Ù  /", § i•x¸Åexpatbuilder› % =ß' b.makeB3 "(oãÔ C .¡RFile(“ @)


ö_b_xform¢ Ý  a.loweruàplace('-', '_'C nclass £cobjectÄà__slots__ = '_UQer',
ç  „ 
9¥publicId, zš  ¯eassert   à U  $ €source =� IüS ("" .j 4 =  E ý ßb#  û§ % ƒelf._getí 0().ö (Ë ü  § ñ# determine the encoding if Qtrans¿¦provided i¼Ã 5 }Ô_guess_media_ (- µ| €base URIPewe canæ ®@posi©h¾NX' tparts =k  I	 ÿ  ~   …ð e, netloc, path ðrams, query, frag” ¡ ` ð 
        # XXX óshould we check the scheme here as well?
  ñ if path and not õ .endswith("/"):,  3 - p= posix �.dirname( {) + "/"1 Srts =† ‘, netloc,i   ùrams, query, fragmentB ñsource.baseURI = urllib.parse.urlun …(parts)
= rreturn @  ÷def _get_opener(selfâ :tryï C Celf.4 _ úexcept AttributeError?  _ 8  G ccreateN %()P  _p ! ¹ 
:  ] ¼ dimportfrequesIY ; f.buildŠ j ñguess_media_encoding-,Oy 0nfoÝ §çyteStream.infoà ðif "Content-Type" in $ 
4”for param §.getplist(u  -  À`ram.stþ¶ ch,t=½ 1   f ñ.split("=", 1)[1].lower()


class DOMInputSá s(object‹ õ __slots__ = ('bü @', '† Racter  ÁstringData',m Ž  'j + €publicId bsystem 'èq_init__¡™  U  !.” u = Nonex  ¥ $ ¶  ¶  Ç  Ø  é  · î  ¿Ö õ ÜÝ & > Fset_ > &,  ?
' NFV J ” + 
™  H +,  Y æ  , =1 ­ Ï` O ¨ & 
£  > g, dataD “ % ! =! ƒ 3C = � $ 
  : $,  D �  % =# ƒ ™I ? ƒ $ 
ƒ  : $,  D ƒ  % =# ƒ ÿI ? ƒ $ 
ƒ  : À, systemId):#
  ôself.systemId =  
" ðdef _get_baseURI(/ !):  A preturn  .#  8 s8 W, uri= 6   = ò



class DOMBuilderFilterr Á"""Element f ñ which can be used to tailor construction of˜ aZ ¡ instance. 2"""í ñ# There's really no need for this � ;Z ’crete imp� ae sO Ö# should just" ƒ the endÁ Å() and start @ òmethods as appropriate.  UsingŠ Ðmakes it easyõ Conly@ – p one of{ "m.ä ñFILTER_ACCEPT = 14  PREJEC 2 ˆSKIP = 3 qINTERRUC 4Z òwhatToShow = Nodeº’.SHOW_ALL&  Q/ T	& ? `acceptb : 2, e„Z—Ü ò F zŸContainerJ !7delè »0ocu£%LSµPMixin¥ƒcreate d# `s thatO@form!  %õ load/save spec.Ÿæasync_ = FalseÊ   Æ 0  ˜0 g, flag6 !if ¾  å  ñraise xml.dom.NotSupportedErr( '  "` uhronousð  Û  Ã„is not sD &")Ï \abortÊ 0# W*"doõ1meaP•"clear" ac @?  D% 5the• # jµ disappear?% á DNotIÔÛ oÝ p"haven'� gured out ¦—ˆeans yetÒ  ö Ñ t g rwritten^ X  3XML[ gsourceÈ^ , ‚^ 8nod] @if s Š is None. =b$el5 s.ownerD C :elfG Â uTWrong5  v)[ ð ’ †.toxml()‘%OMÔ¨šõMODE_SYNCHRONOUS A 2¢Æ£�ü mode, schemaTyp. ð 7
ð el O*yeS�0if œ Ð == self.MODE÷ _SYNCHRONOUS:
  õreturn DOMBuilder()  ÿif mode == self.MODE_AK õaise xml.dom.NotSupportedErr(V } ò "asynchronous b~ ´s are not s= "‘ rb ðValueError("unknown v A for² 1")
o ðdef createDOMWriter(Ê )S ²NotImplemen¯ o± a"the wB ñ interface hasn't been �ten yet!€ ½InputSource… …% r)
#
# E– ´Tree
# $Id: ñInclude.py 3375 2008-02-13 08:05:08Z fredrik $M ¢limited xi< f:ej a trees/  history:
#] Ã3-08-15 fl  Wd R11-14 ñfixed default loaderN ÒCopyright (c)Q “2004 by F¦ ÁLundh.  All + ±s reserved.D Ï ü@pythonware.com
# http://www. O
# - 0d
# The} �¢ toolkit i/
á P1999-”á Ê ñBy obtaining, us ð	and/or copying this softé   Ðits
# associaÍ@docu¹ñation, you agree that ðhave read, understood,F ðnd will comply with ëafollow„ @erms| ` condid !s:Â ñPermission to use,¹ ,ƒAify,5 �distribut� Î o
# itsË •±any purposeP  ¢ qout feew° hereby gra»¢, providedþ  Ì Qabove› S ^àice appears in	Bpies· ;!bo/at=  na Eis p*
#Z 4 in_ H¦aA !atnñname of
# Secret Labs AB or  `author_ 0 bejd] padverti: ) °publicity
#– [ ›„ «!ofS VQ”specific,Ê G @riorM è„°SECRET LABS¤ ð$AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARDKñO THIS SOFTWARE, INCLUDING9 xIMPLIEDA ðOF MERCHANT-
# ABILITY € ð	FITNESS.  IN NO EVENT SHƒ ¯ 'OR® ð
# BE LIABLE FOR ANY SPECIAL’ ðDIRECT OR CONSEQUENTIAL DAMAGES UANY
# ðWHATSOEVER RESULTÐ ðFROM LOSS OF USE, DATA= pPROFITS‹pWHETHERÁ �AN ACTION0 ðCONTRACT, NEGLIGENCE; O. €TORTIOUS3 ð, ARISING OUT OF OR INÿ2 CONNECTION WITH THE USE OR PERFORMANCE
# OF THIS SOFTWARE.
# --- .ð"

# Licensed to PSF under a Contributor Agreementy òSee http://www.python.org/psf/lO R for  ñing details.

##t ñmited XInclude support6 athe Elo ÐTree package.; 1
im( Ãcopy
from .  3  Äurllib.parse% ÷urljoin

XINCLUDE = "{Î !w3Ê T2001/ž &}"0 _8 C B+ "iÈ "X È_FALLBACK = ) �fallback"{ðFor security reasons,  P òsion depth is li4pto this0 òd-only value by default.
DEFAULT_MAX± ó SION_DEPTH = 6
‡aFatal l ñde error.

class  ŸE q(Syntax Ä):
    pass
1 L  RÐ Isive< N 
B D¾ ° loader.  Tç  î Ds an® ±d resource `disk.
\Ô@param href R$ €referencF " Pðmode.  Either "xml" or "text"õ4 PencodÑ�Optional "   g(UTF-8ŒÒG )H öreturn The expandeË Q.  If œ  –  û�  @is
#yiò` instaà C  ¨ "D ` Unico€Vtring€ vfµ“, it can » BNone‡ €or raise˜!OSQ exceî tthrows  Þ ^  w  ÷ Ôd.

defÐ_  0er(Ó!, ,s=� N"if 2 ==Ä§ 2“with openF Ö'rb') as file'  + hdata =ƒD(+ ±).getroot()7els? eif notœ 
X %1= '''B  s ž 'â 9 °  ž S.readš ® Î ïEpu©directives:pelem RoÈ †ÊVŠ þ±µ¡If omitted8“¸ ík{@linkÜ}{Qgiven8 óshould be a callabluP thatÐ� s9àsame interfaceØ3<b>| ?G</b>Ê �base_urlŠ  b URL oPorigiÞ U,¶  é $lvƒ @rela9ŽF e PfBmax_Ä óÐmaximum numbeðr of recursive inclusions.
#  ðLimited to reduce the risk: ðmalicious content exploB A ÀPass a negatc PvalueO bdisablP lf Pation7 ƒ@throws | RŸ Iž ¡deError IfŠ ø{@link max_depth} was exceededN _FatalC @func{ ` fails› £de a givenâresource, or i Atreeü óains malformed Xi � elementPØ )IOÃ € Dload}  w Ì qreturnsû Anode‹ ‘ts replack  › !it&an‰  . R

defå0de(›  , l òer=None, base_url 
 bñ=DEFAULT_MAX_INCLUSION_DEPTH):4 &if‘@ is ]   N J Q = -11 )el3 6< 0/ praise V77p("expec•Enon-Yÿ  n e for 'j Æ', got %r" %› !)
} £if hasattr“'getroot'Ï  µ  -! =Ï. $()? Dê  ¢= default_ w _fu  ƒ,¨ ’, set())
À9 Ó_parent_hrefsÏ a# look"x„ Ø  §Ò A = 0
 Ñwhile i < len© D 1[i]-   Ñif e.tag == X"DE%&DEÓ * ¥# process … Pdirec%O  )  »  j  w (" "y    %if¸
c    0 ´ = urljoin(á ,  
H Vparsej  ~", "xmlr   æ  x  Urm „*  ¦ ä¢+("› ñ@f %sÇÁ  J 	H(==I   q a	(…8   ‡"maximum¹ zÓ reached whenePing fC³ 		 _.add(Û  Â# =±$ !, ‡
Ç £ 1if . |   uù acannot‚ c %r asR� p § ¤ p= copy. ( ð )  # FIXME: thiVükes little sense with·=desº + Y ìÀ, href, max_ûdepth - 1, _parent_hrefs)
  	 €.remove(, + ­if e.tail:F  U 2nod F = ( ƒor "") +< ;  elem[i] = 4 	 þelif parse == "text"|   ‘ = loader» ,5 ÿ, e.get("encoding")Õ A ~is None_  Û ù	raise FatalIncludeError(®  )  q"cannot• Ø %r as %r" %   � ?  |Ã /+=dOif iÚ  t2 = …?-1]Ò  % ùÚ ~ 9 ?elsN m .4  O  )  O 3del¦ ¤ ‰continue5 € Ê‚"unknownOÒ type in xi:i� tag (%r)Û©	ƒ  ÏËÎ "gÎúXINCLUDE_FALLBACK ¨ Á"xi:fallback� ømust be child of¯ « † « 
¼_ò B(e, jñ, base_url, max_soôi += 1
#
# ElementTree
# $Id: ñPath.py 3375 2008-02-13 08:05:08Z fredrik $J ñ
limited xpath support for*‘ent trees,  history:
#Z ø3-05-23 fl   created 8 YaddedY e// etc+ B8-27+ Qfixed)0ingwpperiods1 ä Ž 0namŽ  � r7-09-10< ðnew selection engin2200' 2' c  L 0 "or‹ ( Ð ¶ ðiterfind; changed  ôall to return a listC C11-3’ C ° Tpaces+  º + né Ávalue filter~ÐCopyright (c) ³3-2009 by FÓÁLundh.  All + ±s reserved.D üü@pythonware.com
# http://www. O
# - 0d
# The§ º¢ toolkit i_
á O1999á Ê ñBy obtaining, us °and/or copyB�this softé   Àits
# associ³P docuMðation, you agreeñ< that you have read, understood,
# and will comply with the following terms) ñ!conditions:
#
# Permission to use, copy, modify,5 ð	distribute this software ð
# its associated documentag ñ  for any purpos3 ¢ òout fee is
# hereby granted, providedþ  Ì Qabove› ðright notice appears in	Bpies· ;!bo/at=  na Eis p*
#Z ê in supportingÛ e  ¢ ñname of
# Secret Labs AB orŽ`author_ 0 bejd] €advertis^ àor publicity
#– @tain 5to „ «!ofS ˆ ó Qðspecific, writte0priY ã .ø°SECRET LABS¤ ñBAND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
# TO THIS SOFTWARE, INCLUDING9 xIMPLIEDA ðOF MERCHANT-
# ABILITY € ð	FITNESS.  IN NO EVENT SHƒ ¯ 'OR® ð0
# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES UANY
# ðWHATSOEVER RESULTING FROM LOSS OF USE, DATA= pPROFITS‹pWHETHERÁ �AN ACTION0 ðCONTRACT, NEGLIGENCE; O. €TORTIOUS3 `, ARISv 0OUT@ OS QCONNE! ˆ ±!USI ÐPERFORMANCE
#2 	˜_.
# - 0 

# Licens›Ro PSFŒb a Con$€or Agree y òSee http://www.python.org/psf/lO '  ð°details.

#¥AImplP SPmodulßtr XPath¢@.  TJÐ's usually no3 so	Pto imÊÅmF ‘directly;RB<b>Ek ÒTree</b> does2 Pfor
#ŒÀ, if needed.¢ 
X ðre

xpath_tokenizer_re = re.�Óile(
    r"("	 ô'[^']*'|\"[^\"]*\"| %:: 5//? F\.\. 5(\) ö[/.*:\[\]\(\)@=] ö((?:\{[^}]+\})?[^/' F\s]+* 2\s+€ {)

def Ð  (pattern, ðÑspaces=None):Ñ …default_ ' =* �.get('')@2ame@ ` else E C 0par2_atQ AQFalse  P^ >� ´_re.findall¨ —  uÑttype, tag = C Q   !if  JÒtag[0] != "{"Ô  "   `if ":"x :tag   °prefix, uria õag.split(":", 1)m  ,   >tryE ð    if not names�paces:
  ïraise KeyError' ñyield ttype, "{%s}%s" % (names` í[prefix], uri)F eexceptf Ž Š aSyntax� "("V ó %r not found in  0map‡  ¹) from None Õelif default_± A andT þparsing_attributeœ ÿ V Z, tagþ ?elsS Ioken­ Ž v = FalsÓ P Ÿ L Äò == '@'


def get_parent_map(context) 3 =  . ¼ 6if  1 isƒ?  s6 ( =1 A= {}H  - Pfor pâ6 £root.iter(’  &    * e* pk     � 0[e]n ` greturn{ ð_is_wildcard_tag(ÄU 3 qtag[:3]8p{*}' oréB[-2: $}*N@_pre I ø_isinstance, _str =  "stz ifY i "*'‡  Ô ð# Same as '*', but no comments’ `procesÍ l ‘ructions.ý C ðIt can be a surprû@thatU ò  includes thosed PthereÕ'noH �justificab  ‹ö'{*}*' doing the same{  idselectat, resuli      L @elemÚ!      7if P(/ B.tagY' 0   % + Ç 2tagj}i1Any†!is'Uin a >Ù D el70 = ¨  Ó ¬  ¿  û  1 ù ÓC —[0] != '{AC   	åxQ# The Pny (o�)€suffix =/ [P # '}9'Í òno_ns = slice(-len(7 !),<A¢K 53:]@ M:1t% ×  l
€…è !ß R „ Œ]: $# ž!inh]givenŠÀ   ns = tag[c:-1]
  õns_only = slice(None, len(ns))' õdef select(context, result):%  S ³for elem in! 
   $ �el_tag =) I.tagB  " ò if _isinstance(1 Â, _str) and  [¾ ~] == nsj  L @yiel1 !emg Felse) ðraise RuntimeError(f"internal parser e Â, got {tag}"creturn0


$ñ prepare_child(n(Stoken'ø  [†ì �_wildcardC(tag1  Â y  D = _c 1tag( Ö  '  € + ¤) ¨ Ê S Î ( dAfromÔ“   	' Å ž ® 
… \
¦‘if tag[:2éF'{}'Â c Vðag[2:]  # '{}tag''	 ‘ û † þ ú $  é ñ
’  –   @if eâ Š ?tag%  ) Be© 	2
XOstarW × ¯ ›ƒ 
Å‹ 	?elf‹ %k ~ø ¯descendants  6tryY\0 = |(Möxcept StopIteration1 ã �  h ­![0i6"*"' d1"*"* ‘elif not o <[0])  ã
ÎtbSyntaxs–"invalid ç 1")
i ±y(g.iter(Þ þ  31 is^Y2 J8 Ò™rÇJ
+  IÀelem:
        €yield e
 ðreturn select

def prepare_ ñnt(next, token):4  % 1 Q(cont  cresult!  Y ñ## FIXME: raise error if .. is applied at toplevel?\  ; y £_map = getŠ   q )- y   U = {} Âfor elem in $ ½  a   %if p 
#  '  2 = 	  h [W ]i  &   #if$ F notv  2 W  1 –    [] r] = Non™ "  µ) | º	�redicate½ ˜ðeplace with real¿ ²ser!!! refsµ ñ$# http://effbot.org/zone/simple-iterator-parser.htmž 8 ñjavascript.crockford.com/tdop  4 l5 Òsignature = [bpË  rwhile 1   #6try   ­0 = »(+Áexcept StopI· :ion9 TŒ  H "iføª[0] == "]"/ ]break.  + w('', '' P ú# ignore whitespacì N6inu � 5andŽ @[:1]cK"'\"” ©c = "'"¶‚[0][1:-1Q ˆ h�.append(5  æ for "-"3
* "1]# I  q u".join( # e# use  Ð to determinek©B typ÷ 'if-  u'@-â æ# [@attribute]@ …0key­6[ö · ; $ ?�.get(key)Õ ø À
% .   Á <­ o} % þ  /=' †='value'Ùþ + 	K1==  90-"  töre.match(r"\-?\d+$",7[0]‡f# [tag29tag0 B fio/ag1Fð.='" or (signaturó*e == "-='" and not re.match(r"\-?\d+$", predicate[0])):
  õ# [.='value'] or [tag ' Ytag =E  < 	 5-1] fif tagp  w ÷def select(context, result™  )   ³for elem in% 
M  $   (  %  - Ï.findall(tagT   0   ðif "".join(e.iterŒ 0())T× k  ;   Qyield� ï    Ubreak" JelseW BÛ ?lemÞ Ú  creturn¸Î ³if signatur†"A /() &-"‚# [index�hlast() - v  ^z  M  ! Q 3   F y = int(J - 1* "f - :< 0Z  H õ"raise SyntaxError("XPath position >= 1 expected")\ ý)ifVP != " s   w  ðunsupported func} o  6 ,(()| $   >tryê   	6=2])6 . €except VQU Ì «expressionÎ  c i�O> -2_ ¢Àoffset from gû() must be negativer ³„  ¯F = -8Çöparent_map = get_ 2 m Û¿]   w [#£ c  à# FIXME: what ½#heôµor is "*" ?Ð7    U ’s = list(v ‡  .Œ
Ù  7   !ifFs!is Ü 1       � (I¢‚Q, Key
 EpassÓ è¬ vinvalid»`")

opÿ {J 0"":  r_child, * Cstar . 4elf   L ðnt,
    "//": prepðare_descendant,
    "[": prep ’predicate ñ}

_cache = {}

class _SelectorContext:H  @ Ñnt_map = None ò	def __init__(self, root)4  €   . ! = _

# - 0ð

##
# Generate all matching objects.

¡ ðiterfind(elem, path, namespaces=Î ² ³# compile s / Aternï  if Öh[-1:] == "/"ê  X ! =! ñ + "*" # implicitŸ ñ(FIXME: keep this?)
W „€_key = (G !,) 'if§ i / ö+= tuple(sorted(Õ “.items())c 6tryA Ü "=  [S ]y ö except KeyError: rif len(6 v) > 100  ð r.clear(Ç   :.:19   Áraise Syntaxt ò("cannot use absolute]0on ÊFent"a pnext = ì (xD¢_tokenizerSKP)).__1 !__ï  � 	!  ? 0 = ( É `StopIt{:ionCretu0 H m[^   whe1: „  * @ Á.append(ops[Û P[0]](ž !,  ) 8 ©  & x qinvalidlv") fromñ 4   « ‡ 3 0   "if© /[0 $   G Õ UbreakÚ’ã% =Þ% `# exec_l ü õPresul\[vÃc- =.eŠ3fori 3 in
 MY w (U ",  E N õ¬Find firstóòî\  D(97 !),)‚ s J 1allr„ Olist„ 	~  › c	 ) 	‰ qdefaultø		à ø×(¶ ÇÚ  = .„ a or ""rÇ9 § °
"""Lightwe ð XML support for Python.

 XðHML is an inherently hierarchical data format, and the most natural way to
 represent itU ðwith a tree.  This module has two classes_   t  õpurpose:

    1. ElementTree ` s„ àwhole XML docu& 3 asp  © D 2D @ òa single node in~ ª ñ

 Interactions Æ  ô wp l €(readingk P writ ðto/from files) are
 usually done ok e× level. v  ¦  å e

p ƒits sub- sj a  ] $

r  ˜þa flexible container object designed to storeÀ
 structures;ðmemory. It can beE bcribed‘ñcross between a listÆ Qa
 digaA U Each©  $`a numbž òf properties associatedž#it1�'tag' - a£  �à    Ã/‚'s name."²'attributes< gPython› 
D 8 J BtextD 0str1 €  * ~5ent> 1ail> @n op}/alÈ ‘ext afterÓ eœ#agN HAnd ?cchild . sÒ  ed¿#a ð qsequenc�To create5 á instance, use} ž É bor,
 oš 4Sub  ±factory funï ¤ 1You0LalsoQ ï ˆHwrapˆ k u\ �aconveru!toXƒßXML.

"""

#- 1’
# Licensò PSF under a ConCqor Agre´ñ.
# See http://www.pZ¢.org/psf/lO ÿ  4Ädetails.
#
# ñ#
# Copyright (c) 1999-2008 by Fredrik Lundh.  All + ¢s reservedR f) @Œ ®ware.com
#¨  @4*ThûQtoolk-í ß - PBy ob½0ing’ °and/or copyKT@softË    Xits
#DÓatp, you aÅQ that 0hav2ad,ó`stood,F nƒ’ll comply� jafollow„ 0ermad& did !s:Â €Permissi,¹ ,&2ifyn diK ž¤Î 0
# 		Ë XCany V ¢ Àout fee is
#óF hereby granted, provided that the above copyright notice appears in
# all copies, an= BbothG = n$ Àis permissioF 	Z ÷ in supporting documentatione  ¢ òname of
# Secret Labs AB orÂ Puthor¹ € be used] €advertis^ àor publicity
#– @tain °to distribuz 1 ofS ðsoftware without specific, writteÐ 0priY ã 0.
#¤  ECRET LABS¤ ñBAND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
# TO THIS SOFTWARE, INCLUDING9 xIMPLIEDA ðOF MERCHANT-
# ABILITY € ð	FITNESS.  IN NO EVENT SHƒ S¯ 'OR® ð0
# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES UANY
# ðWHATSOEVER RESULTING FROM LOSS OF USE, DATA= ðPROFITS,
# WHETHERÁ �AN ACTION0 ðCONTRACT, NEGLIGENCE; O. €TORTIOUS3 `, ARISv 0OUT@ OS QCONNE! ˆ ±!USI ÐPERFORMANCE
#2 	˜_.
# - 0ó

__all__ = [
    #²� symbols @"Com&"", Ddump 2Ele # " DTree @fromçfng", " Dlist$ `indent  6iseN …iterparsL  0 "P TErrorC  PI? `ProceszpInstruc[# EQNamK 3Sub­  &to§  ¥  Õ eBuildeu tVERSIONB 0XML… WXMLID ­ r DPull K�register_nEspac¤ Àcanonicalize? `C14NWrTTarge?3]

‰ à = "1.3.0"

imâD sys $re
 0war„ $io Qcolle6  F.abc*  ntextlib

Ö3 . s XÑPath


class ó ±q(Syntax "):`""An eÏ` when è $ean XML£!.
/ pIn addiÛÑ to its excep ‡value, ar @ convÊÂtwo extra at~"es‡  ý`'code'
 " -�c  # ‰  ' A'pos‹ '1 Pline «dcolumnØÞ À 1"""? _pass
Ç6U
def ?(GbóReturn True if *! *p toÅ3an À.¨ r: 0has2Z …, 'tag')ãàElement:
    "ò'""An XML element.

    This class is the reference imp, �ation of  E £ interfaceJ $An[ �'s lengthS  its numberA 3sub€  s.} ñ at means if you“ Ðwant to check aZ  Q Àtruly empty,4 s should/ ABOTHF  x † @AND  Ôtext attribut· 4The¸ V tag,! · names, and ñvalues can be eitherq óbytes or stringsQ*tag*¸ i  Z B.  *�  Pan ophaal dic
 Ñry containinge =� ñs. *extra* are addi; lÕ d u� �given asK Àkeyword argu± 0Exaøa form:*  (C<tagv >Hò<child/>...</tag>tailS2"""	  3 a= NoneG 7"""m!'s`.. ¨  1 D
#'sŽ  Ù E  › C | TûÖbefore first Š.#isÎ# aÃ Í óÈ .M �Note that�  eà0no ~ 0, tSÎ {ute may* \ Èp á, depending onmcparserK+ læ Rafter… ,2endÞCbut  Û n@siblt / æ Pstart5 ©i ï!	.  O Owas #i  ÷ æG "ðdef __init__(self,Ê Ýb={}, *8)äòif not isinstance(Æ,‘)  òraise TypeError(", @ musb3 ,P q%s" % (¿  :  1 1.__P__.__U__,))-  ¼ .I"ta @  A S = {*JÖ }A _®‚ren = []ž#Crepr#á ñreturn "<%s %r at %#x>Ç z ´    B!ids&))i Cmake_ 	�y õ """Create a newÅAwith„same typ¿ c¹65 z q4~°Iionat	> opÙ  | !DoäBcallt method, us$Te Sub2±factory funà h3eadß O  ã    …Xq(b‹ `AcopyY	LÀ"Return copyó of current element.

  óThis creates a shallow copy. Sub2 �s will be" Åred with theI ×original treea 5"""$ �warnings.	 (  ‹ "i .w ò() is deprecated. Use‘   ) É) instead.",G D7 BionWm 	 ) àreturn self.__Y B__()Edef   " %):8  ~ " =8 @make @ent(' R.tag, fattribo  ' T.text<   	U U.tail 9ail 3[:]  Â  Z · Qlen__� ¶ , 1len ©._childrenò Nbool<  ¬µÀThe behaviorhtNPmetho"öll change in future versions.   æ specific '«  Û p)' or '  ïnot None' testFl å, stacklevel=2? t  !ô != 0 # emulate oldó ¸ur, for now‚sgetitemJ~, index�2‰[& ]H sH ,ÄQ Pif isQance(I w, slice%  ð  ­  el7F Ù     —  assert_is_z á6elt/Jelse; 7 r; ) €÷ $ =‘ ?delI
2delnFaappendõ5, sÏ†"""Add * @* toÛE endÕÙ ü4new¹ ! p  arð@doculÁ order afterV Õlast existing� × (or directly8  2 , ì1t'sJ XfirstÖ ¡but before*  Ê 1tag®¤Ï ¨¤¥ Ð. qkÒ6ext�‚ s‹°Ô `s fromšhequenc[*D *3a s# �@zero<m* Àñ ª ¼. ã$GçY v ini¡»=‚ A"""I, 
«Ñat position *@ ð*."""
        seó
lf._assert_is_element(sub 3)
   se, °children.in5 ˆ(index, 1 2 Odef Y �elf, e):%  Z ð # Need to refer	 òthe actual Python impš çation, not theE »shadowing C. .& !if9 òisinstance(e, _EZ 7_Py–  š óraise TypeError('expected an 6 ‹ ñ	%s' % type(e).__name__)
z  
premove(C	,A"""R% ` matchÉ T.J  • `Unlikeý ó find methods, this £ compares Å¡s based on’  H ðidentity, NOT ON tag value or contents.  T™ ¾ äEs byJ ¡other mean† ðe easiest way isÑ¡use a list› Årehension toG ¶select what· Àto keep, andô  n K Àslice assign¯c Fpdat C nM DVç Ô   çfd if a|9a could6‡be foundH 5"""¿ #� Pert iÉ  – (D BlO  1 Ü/`path, S¨spaces=NonA@"""F
^firstÂ !byÛ @  Ú N Ã * *Pa strw0hav !eiØ$anŽG  orý XP” ­  L*] � K @n op©pal mappO FfromÅ p prefix¹Afull – `Returnñ Ö ,Ë   ·%no£ ?was¦
rY ½ Æ .jÁ & Itext”qdefault‘¢ A O forÕ  «Q´ ¨ %ó~t!ifw¼ Q mû,òO ex#}? of)þÉ ´%ifœ Anone¸ ´ `.  Not1 at-Ði, ò0no ¢I  [te empty#2is Je &i ` C>v9all2 lx´	 alwE µÄÐname or path.3

  ð*path* is a string hav ñeither an element tag o fXPath,E ¢namespacesK ð n optional mappO Ufrom ( ñ  prefix to full .– ðReturns list containE  alQ 0tch — ‘s in docu¤ WorderJ 5"""§ rV " EÏ  Ã ð .findall(self, ,Œ Í )’ €def iter- * u=None):k ‰"""Find ± 5sub´ !byO  T z ¶ –‰   able yield�	é æ š( c q›Qclear˜
�TReset½]�This func¢� removesª¡!, W  õattributes, and setsë�the text Vtail /  à ~ ‘ v.. .o %()W  ê_children = [] t != ( w  = k ³1getï, key, defaultª G'¼ ³ qEquivalo" ò.get, but some impVaUàs may handle toa¼ ñbit more efficiently.  *key<Cwhatd 0uteA�look for|H *Ð 5 3to â0if –Z F ×was not foundÚ hül
B `value,«  | 5 if� m ú© ½:  Q(©âsÊŒ 
ìSÃ �[key] = O Ìí Ô Ìs65andJ *~ Å Y ³  ÿ ÅWit to¸KD	Ò 	Akeys

4 ÷a'ofq ’sk NÛC are] edpÑan arbitrary t°, just like"…ordinaryé ïPython dict.  S¨ ÷ Ÿæ r¼í ./ £mè ð element attribuótes as a sequence.

  ±The attribu' õre returned in arbitrary order.  Equivalent toG C ‡.items()` RM ÷ a list of (name, value) tuples0 5"""U ‰ j self.a À �def iter(" Å, tag=None):B á"""Create tree- Gatorp    D   ð loops over the elemè ³and all sub s@docu  n #,@1ing5 2 Àwith a match 7tagˆ !Ifs § ð
structure is modified dur7 ­ õion, new or removed‡ r  ma·  ð	not be included.  To getàtable set, use‡ K  µà() function on H ,  65`resultª  = â P*tag*Ò @what­@s tosàk for (default" #toE	B)ö ¹Vn‹ € containy  ¬ ÀkŽ h if� v == "*"= i `tag = V. !is  � .* =I 
B QyieldÄB  ï  Œ ¯._children8 `from eXSr(tagùAtextýó5ext û óN0innB7extv q,þ 5tag0if ¨ isinstanceó a, str)i 7 !is$  ’
0-L 3t =a 5ext  ¼
7 Ÿ" 	œ+ ’)] 0™ = e.tail x  - |  

ÑBSubEqq(parentÒ,žÃ={}, **extraîE"""S’ñ factory which cöEs anÆUµ’appends iû !to+ 1xis»� ¾ 0B ß’ @ute ÌsQ EÛPs cansaeither byc or UnicodeÚ4ingÿ*v $ ¿ À %, A  Œ † 2, *# ? n Pan op¶ral dire'Ô 8  ÿ", aR* areE 3ddiD ' ` givenS±keyword argË í4 S = {*Ÿ Å}` „ "= î S.make þC f$ ¼('  ÿ-à


def Commentñ(text=None):
    """Comment ele ‘factory.
! õThis function creates a special6 ñwhich the standard serializerJ  Òs as an XML c} m *Ÿ 1* ia Ðtring contain  ] 0 ! s 7 1"""b Â 2= EÌ (Ü ) .e 0 =   dreturnÊ ñ


def ProcessingInstru �(target,< G1  2 V  Vj¶ X
pï & ið ', ’,x–> & ´ents, if anS¯DC½Ó “ !if�Ð Ôè	 q+ " " +2 > ýOPI =ýâ


class QNameo ó
"""Qualified name wrapperš>6 ácan be used to( " aL ð
 attribute value in order) 1get© apropere  space hand“on outputt ³_or_uriô
È r `eithery  fAformu à{uri}local, orÇ  �tag argu/‘is given,ý´URI part ofÞ — "ag� @n opN&alF ?$ifL ‘will makeV Bfirsw Êæ )Y±interpreted`° URI, and tÃ9 "agSbi5 ì e· ­ Ò__init__(self‚ X, tag ˆ ™"ag)     u4 è = "{%s}%s" % Ð N ¤  4  n Í@ ¡— 3str– × 7 Ú> 0 ?rep1 �'<%s %r>'– > !__ÃP__.__åA__,   Ž ¨ ˆ Ohash‰   :Ì 7 #le5 0, o‡Å Pif is’Qance( ,5% î 2 <=M n ü ' 
" Æ lãq j � (Ž & � g.À  return selñ f.text >= other #
  «return sel' " °def __gt__(" ,B !):  B áif isinstance(` w, QName%  ) h L Ž & p � /eq� @=' _

# - 0ò


class ElementTree\²"""An XML e Á hierarchy.
RThis > ñ$also provides support for serialization to and fromC  ¶@dardh V *o  * is an op: ual rootŒ Qnode,C ]*file-   ± handle or  pname ofU  ×  QwhoseH ðcontents will be used± AinitÃ ó e the tree with° 1"""@  - Ê a=None,„  ˜v# asserØ 0is .  ´ #is@ ( )h  Ë 
!._=€# first * !ifx Ó ;   ? `parse()Ï Á 0getV k§ B"""R¦  r @of t . a k§ b '_sc ,K l Zplaceò	m P  k …³@discK ¥…current Õ> ½ ‚"rec %it+ ÔâTgivenš R.  Usñf care!{ ò É¶N  {� ›¡, source,  r5ð"""Load external=P docuÁT into½ ­¨ -*Y . "’object, *y ( ƒ 2và that defaults4@XMLP`r}  PErrorÚ0rai`iCeé Q fail@ i �Ø I ‹s �"e Àë @ ¸cclose_, S= Fal /ò if not hasattr(& ‡, "read"³ ,  w = open+ &b"· ( q 2Tru  :try©$if
  4 0# I¦ ( ôwas specified, create a� +ˆrÅ E   s6r =# (º  % %if0 A, '_
 v_whole'À            þ0 # The default XMLParser, when it comes from an accelerator,
   P# canP 0ine1 °internal _pY ÿ_whole API for efficiency.N !ItQ ±be used to H R the L ÿsource without feedingO !it)  chunksu Âself._root =n (r.¾ (r )c vreturn D 	& ¹while True:  Hrdata = ] ¾.read(65536h pif not 1 G  K ]breaka 9 r.!(< 
Y ² ö jclose(( á zfinally“ 1if F _Ø 
  ¬  .% 1()
¶ �def iter(• ¶, tag=None)> €"""Creatd#d ” Atree8  Ÿ` &É‚element.`  x  ÷ d , ó loops over all .  s in this Z , @docuI g orderO ò*tag* is a stringh � €tag name½r ek ë  ‹ ( j oÎ ‰ )j 5""": ‡# assertp „   1( ! OÚ.‰ G(tagrCfindrQpath,µ ospaces ðFind first matchó 80 by´@ @ or N Á S`as getœ1().z  & )x0ichÅ E³ §  .*) 
k1hav 0ithÂnÁ†  orˆ XPÓ *‘Ü K pn optioª@mappO ô( p prefixÅAfullÝ Õ Rø ð,
 • ¿£ —was foundM ã!!ifh¶[:1] == "/". 7 6� = "." +*   �warnings.	 (    "TBsearœ@brokð n 1.3 and earli8  †will be © E   `"fixedJða future version.  If you rely ozŸe currentJ  be÷ our, changû žQ%r" %â ¢Fs Wí í, stacklevel=2ô ÷>” R%¤ ½   ItextOæL8  
Ü]=Œ  ° ð),  which is Eleóment.findtext()

  ð*path* is a string hav Ðeither an ele@ a tag o fXPath,E ¢namespacesK ð n optional mappO Ufrom ( ñ  prefix to full .– ðReturn the first matchG Œ ,‰ ¥None if no£ —was foundM 5"""ª ð# assert self._rootü @not N ( 0if Å[:1] == "/":  :  � = "." +* 	 �warnings.	 (  = À"This search~ ñbroken in 1.3 and earlier, †will be Æ  E   `"fixed9 òa future version.  If you rely oLcurrentJ  be÷àour, change itžQ%r" %â ï {   Fs Wí í, stacklevel=2ô ) rÜ�˜ V¡, default,V±@def Å@all(@ ,™ ) =Æ)¬ """Find alŠD3subGAs by× ™ S ‚ ;°Same as get+!()¬    ) b), whiÄE$  )F dŠ°list contai´
*'qin docuWorderß `ÿ“´V@iterZWe€ X‚.!  €XŠ0an ´  able yield¾	‡Û sÀ]AÀ[:1] == "/":'
  Ðpath = "." +  	 �warnings.	 (  D ñ"This search is broken in 1.3 and earlier, žwill be "I Pfixed9 ÿa future version.  If you rely on the currentJ ñbehaviour, change it to %r" %â , Fs Wí í, stacklevel=2, ) ðreturn self._root.iterfind(Iá, namespaces)
6  def write(5  , file_or_  - š Üencoding=None ÿ xml_declaration$ €default_] Š & bmethod , *h ñshort_empty_elements=True):Õ 	0""WØ  ! P treevaä ‚ as XML. 1 AArguJ D 0  *B* --A  Á C or P ñobject opened forW6ingb 4  *?G  7toutput  # ( £: US-ASCII© £ ;  *cH ðbool indicating if anÞ  �¥ should be#S  Padded*  .òòZ  P 2is S &ifè øIS NOT either ofu’   €, UTF-8,{yUnicodeb@`#Asets§  Âƒ  (°z"xmlns"p‰D ¬  ' "¨ñ), "html, "text"˜ i"c14n"— ³V rcontrolž aformatÅ$ofºsa ` that M aain no 1entº ² O àey are emitted0�a single`-closedM Pag, oê@wiseˆ\  OpairN  of¶rt/end tagsi&""Érif not Á
_  d6xml2 Celif0 ; Úin _serializeB  raÉ ôValueError("unknown@ Üi  ” î
T } 2== C
!  è;  ½ Vutf-8¿  +lsª  µ5 vs-ascii8 µenc_lower = . (º ¡with _get_.,r(,< H )-' 
À 
á Àxml" and (xmÿl_declaration or
   :(xm( ¿is None and1 ñ enc_lower not in ("utf-8", "us-ascii ½nicode"))):J š Ðed_encoding =Y  -  if u S== "u[ X  â ð# Retrieve the defaultC _ A for Bxml ˆ "w  L ßimport locale" B 
Ê / Ô.getpreferredè -()F �write("<?‘ Õversion='1.0'´ í='%s'?>\n" % (B  ª ˆ *,)k  if method C^text"@°_serialize_" (œ Ê, self._rootT NelseE �qnames,  –paces = _ (O ,Ÿ 
b  Û ”  G  [Î ]" ¾ ., œ ,A  t  ÿshort_empty_elements= !)
F Adef 3Q_c14nè g, fileô# lxml.etree compatibility.  use output­finsteaŒbreturn’k (` ,/  ="y ")

# - 04
# O%@ sup`

@con#Clib. €manager
Q_get_  r¡ @_or_©  ,Ø"# Ö  s R BÑ  ˆð release all resourT±after using}6tryŒ{ ! =}| . 0 öexcept AttributeErrorB #< Q is a ÛE  ( ] \Ÿ þ  = open 6"w"ùW= T=kÙeê ÷s="xmlcharrefreplace„ Awithì  ì Qyield J	9	Å-like object@#ò determines if its’or binary Ï#\abur as is‡ ß $  ŽŠ# wrap a‘  3ÆTextIOWrappe¤  H  + 6°ExitStack()Š s 
m 6  sOance9 ðio.BufferedIOBase):
        pfile =  @_or_ Yname
% ð   elif isinstance() 1 ý, io.RawIOBase):A  Q  5   =* íBufferedWriterN )? ñ# Keep the original¹ ¡ open when 
\ ? isM Ÿdestroyed  ástack.callback¢ ~.detach� Oelseò ñ!# This is to handle passed objects that aren't iÂ � "# [ð hierarchy, but just have a wNo methoÕ �U (Ô °.U !ab&¾lambda: Tru"	1  T 9 ' ?try/ D ð# TextIOWrapper use%#isÙ K�determin` G ÿif BOM (for UTF-16, etc) should be addÿ C  .S.seekÿ   ô ±B Otellc . : ÿexcept AttributeError1 PH  ¬ k	NÈ,.  ¬  ”encoding=	 ;  µ ÿs="xmlcharrefreplace"D Înewline="\n"¢	 /# 
Qyield‘4€e

def _Oöspaces(elem, default D=Non3¶# identify 9  d JAree
Ã�# maps q*  b*¨òed* prefix:localJ 2 + 0= {t  :  }M Auri:cB e>b Å Q = {}L .ifË ¦2 [ñ b] = ""w  $Aadd_š ( >ò# calculate serializedò ñ  representation”  Å^"if1 ¶[:1] == "{"¨  2   £uri, tag =- þ1:].rsplit("}", 1‚#" =aŽ.get(uri- #if•  x„  ˆ T  O_mapX  5 \ À           pÿrefix = "ns%d" % len(namespaces)
   Bif p9 Ÿ!= "xml":(  ; L s[uri] =; 1 U L qI [  F `"%s:%s² (Œ ^, tag° OelseR ùtag # default element§ L $if5 _¤  9r ù# FIXME: can this be handled in XML 1.0?u  E  ÿraise ValueError(&  * ñ"cannot use non-qualified    with "? Î  option3 w¨s¯ s ¢except TypÌ 
/_ë  _serializa| !_eô G !)
I ±# populate  3 anâ  ‚qs table* 1forÐ d Øv.iter()v  û=# A.tag4  I÷	if isinstance(tag, QName: ' �tag.text x"in‘ sa  '   Aadd_­  N 2 ;/elp  ?strn i d  î !isB ANone8 0Comú *PIÏ ¦	‰ }`key, v»ƒ(ms„ 
6 q + ‘key = keyF³   if à ‹6key"A ø¸ ú x e 4 l 2x&exm
 ' 	€    k1ext/ z Tretur£,2e

def xÁe_xml(write,,×4 ,z =ð    short_empty_pãents, **kwargsÐ rü t Ø    ifÙC is ™‡œ °("<!--%s--> D è P f ðis ProcessingInstrucTI M?%s?F @ O =U[tag]ÿ §  T[    :ext   Á á_escape_cdata(Á Â  #    Ce:F ²¯ ’ ©À              ÿshort_empty_elements= $)
4 Uelse:   ö write("<" + tag+   Ðitems = list(c . +()' !f  ê or namespacesh O f 
 # öfor v, k in sorted(R ~ ,Â  7  ñkey=lambda x: x[1]):  #Z ¯ on prefixN Nif kÆ l `k = ":<kF bÿ xmlns%s=\"%s\"" % (4  d kç ú_escape_attrib(v“ A  ²   k@k, vk¿ë ÿif isinstance(k, QName)-  X  ok.textß 
P vP Qv = q![vW ]X Û �   E 2¯
ª� [k], vL0if í  ý1len') Onot Ž:s .>"Ä] 4  Ù 8 × `cdata(‹ ¡  +  íeê ÆN ñ _serialize_xml(] C, e,}o, None” j /  ö ™:  v @("</T|tag + "ê: $ // 0if í V.tailò ' 
4' ô))

HTML_EMPTY = ("area", "base Afont r 0col Afram" <hr"&@"img$ Ainpu:  R0dex @link 1meti Âparam")

try· 	’ Fset( �)
except ”RError3 §pass

def Ö'ht×6lemÚ^µ£, **kwargsâ „=Igz c  ç ©�ag is Com‹‰  Øs "<!--%s-->û
� R µ&elJ þProcessingInstructionX O?%s?U ÷Ó Ò6tagP{  ìj  Æ   :ext   ß Ñ  #   ‚¨¥Àmes, None)
   belse:
  ùwrite("<" + tag) ñitems = list(elem. +()' !f  ê or namespacesh  n /if 
 # öfor v, k in sorted(R ~ ,¥  7  ñkey=lambda x: x[1]):  #Z ¯ on prefixN Nif kÆ l `k = ":<kF bÿ xmlns%s=\"%s\"" % (4  d kç ú_escape_attrib(v“ A  ²   k@k, vk¿ë ÿif isinstance(k, QName)-  X  ok.textß 
P vP Qv = q![vW ]X Û �   E 
2__html7ò	# FIXME: handle boolean mOutes„ ë
æ½ [k], vˆ1 *>"¾`ltag =�z.lower( 0if _ƒ2if ;  = "script"” ^tyle"8  &‹  X 
m   \6 Zacdata(D 
E  lei E€ ¢_serialize–V C, e,ùj, NoneS ì 0notY ®HTML_EMPTY_ O @("</© [4+ "s0if ” V.tail: 2 
× ' ‡))

def ¶  ó (5 ,O  ÷ 1par¡ ? Aiter, !  ]7 (' á ’ 	E  « 6)

 A = {�h"xml":™ 2xmlG"ï
     ” 
   ñ,
# this optional method is impŸá at the end of úmodule
#   "c14nY   B,
}
D‘register_á 8(•S, uri&C"""R( & aC¿!.
ü BThe N  ry¡ ðglobal, and any existing mapp  �`either¶ D Dgive 9 Ù ™ ° URI will bj Smoved| *´ *x 
4  a, *uri À �uri. Tags¥ � ` Ô|€ | -cd withÂ if possible— À ValueError ðis raised if prefix   eserved or ñinvalid.

    """ óif re.match(r"ns\d+$",F !):$  0 a â ValueError("Pi „format rm fn Ñnternal use")D   ÷k, v in list(_namespace_map.items()r °if k == uriÂ v Ý –  š Jdel M 1[k]t  curi] =Û *

 A = {5 õ # "well-known" ¦ 8 !es& õ"http://www.w3.org/XML/1998/3 Ÿ": "xml",3  1999/xhtml+  , ð02/22-rdf-syntax-ns#; ;rdff ñ schemas.xmlsoap¢ Pwsdl//  	 0 b# xml . § @2001ß ST  A #xs?  
. ’-instance7 i8 Ù# dublin corex Apurl® ñ dc/elements/1.1¹ ö dc",
}
# For tests and troubleshooting
registerã.  o+ =3q

def _æñ_serialization_eïCtext�% C Typ
¿  Š„"cannot @ ðe %r (type %s)" % (G  ,   1)._™ "__& F )Œ Âescape_cdata- ø"#  ° character # † 2try%  I ð# it's worth avoiding do-noth `calls šãstrings that a’D @shord †than 500w  s,˜±so.  assume? ¢'s, by farËF ðthe most common case aapplicn!s.È  5 `if "&"%  5×     0 =  ó.replace("&", "&amp;t *  F <F <F ,ltE >E >E gE areturn´ ä …except (I¢, AttributYo Æ ™
3aG 4 Pute vË‰ 	5 0v¹ Ð /\"¼!\"½9quo¿à# Although sec� 2.11 of Ý£XML specifÊc stateSQCR orm Îó# CR LN should be Äñd with just LN, it ðes only to EOLNs
        # whicñ2h take part of organizing file into lines. Within attributes,
    ð # we are replac? ÷!these with entity numbers, so they do not count.L ðhttp://www.w3.org/TR/REC-xml/#sec-’ W-ends6 ðThe current solution, contained in followž 2six× H, waF rdiscuss0 öissue 17582 and 39011ª pif "\r"Z Utext:�    0 =  . e(. ¥, "&#13;")/ H nH "n"H 0H tH tH (09H areturn» ¤ ôexcept (TypeError, A )û ð_raise_serializa† _e5 (ò )

def _escape_LR_html I "#   la valueŽ 2try&  f ;&ò &ñ 8ampñ  F >F >F ,gtE /\"F !\"G 9quoI K?# - 0Çótostring(element, encoding=None, method *0 »± xml_declar&& òdefault_namespace û7   Ãshort_empty_| cs=TrueŠÂ"""Generate £  šaresentm  ìCXML = !.
` sAll sub sÒÕincluded.  Ifà ó is "unicode", af F 2is Ã 5 óOtherwise a byteŽ $ | *v *[ Ban ESÄ instance, *]#  op^‘al output} $  H íâto US-ASCII, *”D ¡ which canN `be one-s"xml" (V @), "µ À ×�" or "c14˜*% Ã*M @setsù›  �ç0 (fD sxmlns")‘RŠds an (î 2ly)‡#edvåì !heX CdataE 2"""€ Átream = io.S¸gIO() iÖC== 'Ö`' else, B· + F ˜DTree÷‘).write(sa ð ¹
  @ i= D À            ‚ method= ?,
  ÿshort_empty_elements= )J ñreturn stream.getvalue()

class _ListDataS" ñ(io.BufferedIOBase):H ó """An auxiliaryQ ð accumulating into a list reD qnce."""B ódef __init__(self, lst_  ô   `.lst = 
5 �writable5 0 Û FTrue- Oseek-  Z W 7, bZ Š ¦.append(b)a OtellŠ 1len  Å 0)

ñ €tostring(¯ô, encoding=None, * ó xml_declaration7 òdefault_namespace 8 P =7ó t![]: *- = ­" EvDTreeÓ #).KEá Ì  – 	 Ú  @  D y€KBlst
Adump7}“"""Write … tree or ò	structure to sys.stdout.“�This funcð should be used for debuggŸConly6 *m ÷ * is either an ×,€ 0a s¹e ñ.  The exact output`formatL 2imp¦0 de= ent.  In tª àversion, it's 5‘ten as anM Pordin`ƒXML file± E#Ð 0 Pif no} rinstanc’,´  ¤h o ö ( = ŠK   ÇfË¢="unicode"Yatail =¦ Wproot(). N ™    M  Â[-1] != "\n"U ” Ò  e( )-pindent(", äÓ"  ", level=0Ü A"""I*  È :@docu‘ by inser pnewlinem"d [ ªZ · Eafte{s}*€ .%th [ Ú 7 �cmodify(() "en* itYQ will¶ðbe changed, but ^  )Ä text of allA �s in its¦ 0sub“ J ¤be adapted¯ Ï ° Bwhit  ¤ IeachUR, twof  T ¢ practersM^j 2 j  Ü>ialT Q. Setƒàto a higher
  ð"  value than 0 can be used for indenting subtrees* ñ#t are more deeply
    nested inside of a document.! 1""" àif isinstance(V P, Ele) aTree):&  S   0 =  ¡.getroot() Æif level < 00 praise VÒ ó Error(f"InitialÊ Sation: @mustí ±>= 0, got {S %}"c qnot len¤ — qreturn
‰ p# ReducBñe memory consumpl pby reusCMƒ rstrings ³s = ["\n" +§ ‚* space]o Rdef _0 ò _children(elem,/ ¦ ß# Start a new   à¡the first M �  z _" =[ A + 1ó    6tryw  1 š ã =t "s[! R ]G Áexcept Index²U O " +$W  ‘ ‹ ’s.append(„  )V0  f ï LŠ.text or .´'p(b 7 0 =Dž^  m~ @ in 4 
é Ïn  a  e T òK ,q ´ -   iÍ ' T.tailÎ  Ï  = $ # =c 3Ô @# Dep after L$laK± by overwri@  ˆpreviouss´ ¢ 	ž ˜ !s[(2 D¯, 0)


# - 0`
# parÙ0


—  ‘e(source, der=NonÑÅ"""Parse XMLQ into2entéa*I ð * is a filenameÇ  p objectj@tain^V Aata,*Ž r? 1n o�#al—  ¥~r defaul¢oš £ "r.… Ré8 an = % × b( =* ¬  .� ´Nü JJiter0 aeventsN[AIncrCBallyç  Ï ig¾ ðThis class also reports what's go\Qon toápuser ba   "hen  @* it°itðized with.  The sup\ 2ed / F  Y1ngsK  "sµp", "end  �-ns" and  (9 " M ¸ato getM  deü0ed <Gð information).  òIf *events* is omitted, only
    "end" # ñ  are reported.
  q*source> Ña filename or ø object containing XML data,y K ”a list ofo #ton â back, *parserl ²n optional  “ instanceš ðReturns an iterator provid‡ (Ó Ó, elem) pairs8 1"""� ó# Use the internal, undocumented _x 1arg à for now; When: H ( !of’   vPremovvðthis can be killf …Apull. 0r =AQPullPÇ !s=Î $s,” =. )� "dep  1():  V 6try   ªwhile True   ¶yield from Ž b.read_| (m  ,  b# loadÎu buffer} $  2 = FP ®(16 * 1024R aif not@£  S ]breake ² Pfeed(u 
] hroot =Û Á_close_and_rJ_$ æ 0it.F 0 =  ¨ kfinallŽ2if ƒ ð  .% "()�¡class Iter  	 ÷`collec0ds.abc. ¡__next__ =ž7 $). ¬ i$ ; 
] KÜ ANone0 5delL ,– ³  hÍ r = Fals> í‚hasattr(" 0, "u"¹  w = open' "b"™  %_*  ä~ Üb it


=6XML`:&  Câ__init__(self,Ö s=ì 6, *z  � T# The— +!is.ZA uset‘ and mustè‘be reliedN È �# upon in2 ð r code. It will6K ! aa futu²glease.E ñSee http://bugs.python.org/issue17741¢ ´more detail! ˆ  .ú˜_queue = eWdeque.1 —% =0or pÌötarget=TreeBuilder()Ã�# wire upZô s€*5ingç iI0is —
C7 Qs = (ä,j ¬ R._set+ ù
õ ~ 'a B ,§ """Feed en·d 3 toË .x _0if C .cÁ ñraise ValueError("| @) ca;  after endSastreamÀ      if datGa:
  :try   ùself._parser.feed(data)9 ÿ
except SyntaxError as excO ñ
events_queue.append(exc)
W ðdef _close_and_return_root(Ž )V a# iter� ð needs this to set its 6 ñ attribute properly :(k  â #  = [ é ~ (æ  v = None@   j À A  7 ¯  """Finish I@ing L ¯ Ã "r.@  • ±Unlike XMLP{², does not A thet È element. Us• 2ad_g ()b tconsume. as from` 2ulld .Ó 5"""  Ä .�±&req  3 
÷ R$!an±ñator over currently available (· ,ª w) pairsE;S are Ó dË  ‘internal C  ` ‹@they3 Õ ˆretrieve< 0ter™ Q $s ' ÁU Rwhile{ s¤ Î/ # = ‡.popleft` % Ôif isinstanceE[7ionP -   Craisp „   Jelse€   Ryield‚ 0


d¢XML(text, =×h 1""" "P docuci0str» ~CtantœTyðfunction can be used}Àembed "XML L²Àals" in Pyth. 3odeG *‘ v* is a i @taint  A  32, *³ * nÿ  op{ #alÎ  K�, defaultB !to9 e@dardß è |©bs an EXH ¢ !ifŽˆ o & =Z ò(target=TreeBuilder()[- W ù  á J)´/ID¶0A for!$ID^{x(|à, dict) tuple,2PwhichÃó  Q maps-qent id: Ü µOctree =|.µ y id8!{}²  w œ  Ì  3 .(u.  (Âlem.get("id" fà H     sids[id]4  ? ^ ‘, ids

# ä “Ð document froóm string constant.  Alias for XML().
from' = f

def  ðlist(sequence, parser=None):
    """P  = ‘ documentA  7 4 of‹ @frag! 1s.
> *$ p* is a o  / UotherA 2, *y & £n optional� K iå  ¥ pdefaultû pto the ÿ @dard¥ ® r€ àReturns an Eleš  H " 2"""_ Sf notq û  ÿ ˜  <Z ñ(target=TreeBuilder())D  xutext inÜ K `.feed(& 4 r¢ x ß.close()

# - 0—


class ­ ‘ Ã"""Generic e²structure b× "DThis  l@vertÌÛ Ðñstart, data, and end methodþcalls to a well-formed{ s ÐYou can use t Æ "toˆ  Ï¶  us€a custom{ Âc, or ag!Rsome ˆ€XML-like 3mat… *c �_factory�     ` whichè î eù Ýto create new„ô s, as necessaryy 0com«
y g S ( Y be.dßaead ofþ 	© ä.  If *insert_E ß pfalse (6 f!),H & Q will* bel @erteu ‰DtreeÆ /piÁ 0proû  ¸ — €8ionÐ }   Ô 
îÐ ?pisË u Ú  2 Iä__init__(self,Ðø H2, *C <  P* 3; þ 4  	 µ =F±,ŠB_pis ½ 2  š  ._šq = [] #¦` colleØd )  Õ)    î[stack( plast = *1 #  / ) 7roo)  ) FtailR ñtrue if we're after÷end tagd ;if K � – è   % 2= CeJ ÿ (  
0 �$ =Š6 s/ 6if Þ¤   5= P"Inšðion
        selfö ._pi_factory =  #
  öself.insert_pis =  % ¥if elementM …is None:$  P % 2= E7 & o E =W 
)  def close(/ )d ð""""Flush builder buffers and return toplevel docu³ „ A."""_  ª  asò A lend  ._» ý
) == 0, "missing end tags8  ˜ Ñ._root is not: †  X 6entB § B ô  _fÝ ‘ õ 2if - Fdata Æ  9lasŠ 
'  + Ôtext = "".joiõ  R ) '   V NtailJ  # ?˜  } .,   ð, "internal error ( ) D  E  = ¬ – ;elsnA �   í ¢� ?ext�  E �  °  ;V = []¿  ½ ,  Ãa"""AddØ ´ to currentý	™^ �.append(L f Sstartg ªtag, attrsm „Open newb  2it.M  ?P*tag*·5the- qname, *X  áa dict contain× , gibutes] p× àr  @ # =ì´(â   \
 Q   D[-1]B  u %elA Á µI   š ~ c _    ðE = 07 ÷ ‹  å ß 0 ,f
ÃC ¸5RhÅ$ Œ • V.pop(=l  ag7 ©\î  \C   "Aü mismatch (expected %s, got %s)" % (<  C ‡   .` &(  i1 i  ; o0com= öÃ"""Create a ) ! u  ºZ*®' (   @ of  4 .› …	§ phandle_n *le
È K  ,&ª !s,aÐ)

    def pió(self, target, text=None):
  ñ"""Create a processing instruction u õthe pi_factory.
B *_ P* is %  � name of Y .C 5extA Odata: v, or ''A 5"""M preturn û �._handle_Â 5le($  ý ! Ó ,3 ªinsert_pis9)ò Kdef V  I #, ,;§ert, *argsjdelem =( ( ’ #if9 ›¥ uflush()-  plast = \ 	 "ifÎ _ 
S =   À[-1].append( e …tail = 1b c 0 ð


# also see ElementTree and 	 òBuilder
class XMLParser• 3"""4  qRure b2 @ for0 � source �based onXqexpat pP ’ŽPan opÃ#alð object which defaults to an€Dtanc¶î ystandarÊ  Ê ±, *encodingºm   Ô 1ingJ s òif given, override52 ¢pecified iä ‚XML file0ðhttp://www.iana.org/assignxòs/character-sets³ ƒ ¼s_init__*å$, ˆ  ½2try�  >  ’from xml.~‘s import “n  & �except I CErro÷    W   J !pyL ; asU  $ Y  $ Xraise| 
  #   ¡"No module´dn ÷ ; use SimpleXMLÉ(6eadr F  @ � ¦.öl(gV, "}"3 $if¨0is ©
tZ=WÑ# underscoredÌ Ps are×QvidedPõcompatibility only­ ÈÏ# =?Å 	 
, � : _ 	 
,  _eþ "  2�s = {} #¿ µ memo cache+ õ# main callbacks ¡ ".DÔHø@rExp‡Î ñ4 ²if hasattr(´ —, 'start'û Ú] S °b *8 Z 
?endX ?EndV ?endT 
v 6_nsY À      parserð.StartNamespaceDeclHandler = self._s" S_ns
  õif hasattr(target, 'end_ns'):&  - ¯parser.Endb 
= : ` Odata^ ÖCharacterData½ › .9 Z ÿ	# miscellaneous callbackÜ comment  y 6 | Ö /piU ýProcessingInstructionc %pi^ ð# Configure pyexpat: buffering, new-style ¸pibute héEing.F °8 œ_text = 1 …ordered_J s& specifi( ^ådoctype = Nonek  µentity = {} :tryd* Àversion = "Eü A %d. P" % e .# U_infoN ±except AttrZError` ñ pass # unknown
; ð def _setevents(ƒ ",  e_queue —to_reportñ# Internal API for XMLPullP0c  ?#T F ³: a list of B to b 0 duì Å¶ing (same aÜr# the *¨ *C 	w S's con&or† Ú ‚ eactualq Y ÷ that will be populatedÕ !by‰ punderly«  ³ es .  Œ  ƒappend =|. %  `›  _n$in. V,  vi[/ A== "" * Ž . *   .  ,    e£eh#g,º3_in^=Ö ", õ = ,Ñ  M  Ï =µÝœ( L !((g !, 7 8(taŠ =)))k è Y0Ele;ºÑ 	5 .els?endq › %3end?end0end÷ ?Endõ &b?-nsú  ò# TreeBuilder does not impb! .= N_ns(’{ðself.target, "st¿art_ns"):
   ñdef handler(prefix, uri, event= â_name, append= ,N a "stz t=self._ ˆ  : Z !((u $, 2 ˜ =)))y OelseÝ ;¤ œ a or '': ¨ €parser.SâNamespaceDeclH€$ =Š	ã BelifŽˆÎ == "end-ns"ö þ# TreeBuilder does not implement .end_ns(Gi	asattr(²qtarget,m AÁ<)¥ : ”0 š‰1Í ˜ ONone¿ ?End+@'comã'åOtextÞ €à ¬ ä2.ˆ (j ñ C¯ ý?'piã 2pi_‹ o, dataî 	p Š 
(;pi(Œ ÿProcessingInstructionúò
raise ValueError("unknownFb %r" % R!)
  %_< e6  ø 0, vG perr = PË] ! B  6¢err.code =;  	 @posiÛ " clinenok u.offset2 ‘ G err¥ 0fix’§W, key   # expand q#  ,  €convert  õ string to ascii, if possiblev :tryF; =.5es[key]1 ¡except Key= 5key0  +‘if "}" in™ 
3    t Q"{" +# 	>  Ÿ‹ ' =$ À   return nañme

    def _start_ns(self, prefix, uri):&  * preturn # ….target.8 2 a or ''8  )d <endb ] 1 [ P | ± çtag, attr_listW ð# Handler for expat's Sï sElement  ð. Since ordered_M eibutes Ñ# is set, then ! ð are reported as a † ÷  of alternatingG \ Å name,value.  0fix " =j_   ctag =  U(tag) Y U = {} !if« Ì Ð ði in range(0, len(D - G), 2J 2      4ib[€   / v[i])] =m U[i+1]‡ r= Á »(ibÞ6endÜ‡ H  + .+ T )M tdefaultQ (ex#`‡= text[:´ #if
z == "&"?÷# deal with undefined entiti6 4:try<   cdata_hžíW  : , ±except Attrt^ErrorS 	: { .· !y[f1:-1]]V� ?Key{ ðfrom xml.parsers ims	’ O Brr =  .eÌ (#  ' "Xÿy %s: line %d, column %d" %@ (Ð ,H˜ .¿ ¿LineNumber,8 ã1 Cj 3 
 §    ýerr.code = 11 # XML_ERROR_UNDEFINED_ENTITY„  ;  æ $no� ¾ 9 ooffset9 Æ ; •raise err *elc<" and'!9]›<!DOCTYPEBp_doctypä[] # inside a  ºdeclarationv 
? ºis not Noneô!# P vcontent³ š
Å >©  " 
n =i �  !   \ exh ez.strip(!if¸    
¸ P 	ˆ @.appÚ > 
W 1n =ª	/ 
#  z K > 2w À   type = seûlf._doctype[1]
  0if  ð == "PUBLIC" and n -4:0  ? Qname,7 ÷, pubid, system = seq > "if5 \  ` T " =' O[1:-¸  (elº gSYSTEMº 3^ º ³ ‘ MNoneÔ Oelsen mreturn1 ±if hasattr(.“target, "§/")O - .+ (Ñ   …1)w 2y r �warnings.	 (R  ¬  T"The ’ ÿ) method of XMLParser is ignored.  "J _DefinM òn the TreeBuilder 7?.",N ‚RuntimeWÆ -)
) R1 = à& �def feed¢g, data–ñ """Feed encoded Q to pí 6.""â :tryÎt ) (] v, False¶cexceptO¯error as vL  a_raise# #(vå  ¿ QcloseÀ º QinishÞ ;ing¼ ü¸ÿ element structureÙ ñ b"", True) # en í b 9å & =   ^õ „_handler�* |  AttributeEd
_Fpass0 ç'W s (Âkfinallþ�# get riöcircular referenceo  Þ 2del/, _ ™ 	* ë *  o


# - 0Ñ
# C14N 2.0

cðanonicalize(xml_Þ=Fƒ, *, out “from_file “**options› """Convert4 K5itsm ò serialised form.Ê€If *out*]ðprovided, it must be a s 1 or ó	-like object that receivu _h cÛ ‘ ðoutput (text, not bytes) through ¯ Á``.write()``žm	a.  To   Ù • `, open­ 0in V ¢ mode withV ›�"utf-8".M î  � ò �this funcRð returns the outpó"ut as text string.

    Either *xml_data* (an XML' ð ) or *from_file  	 � path orE   ð-like object) must be provided} Sinputw ðThe configuration op às are the same6 1for ñ``C14NWriterTarget``.~ 1""" 4if Æ Õ is None and ½  :/  þ óraise ValueError("'J ' 'C 'Ú !")W Qsio =}  nif outz '   a= io.S”BIO()—€parser =ŠP !(tõ =`(out.wC, **F)G 1notš h d.feed(ó È   bclose( JelifRU (4", H = › ð return sio.getvƒP() if  /W Q else¶  


_looks_k�_prefix_n(ð= re.compile(r'^\w+:\w+$', üUNICODE).match


class JN²Canonicaliz¡d"r ‡ —2XML Ù¢Serialisesö   events toËt C 2.0.  *Y `* func ý Ausedc   1ingD `result  ­ ¤1eamiÞ(9Àbytes).  To C e€ a¹Â, open it inñmode with encodingQ q"utf-8"Cp0bits ``l“`` methodÉ CÌ:Ì0- *^ P_comm`*: set’ 1truš `includ" € 0- *ª p_µ4  ò whitespace beforòRafterÝ tcontentR !re=.esX @replO  XY iòes by "n{number}t@- *q*  _aware_tagS aá 1of    P tag + sydwhich Z ž  q `shouldK™ d?   @Û l ˆ Oattr‰   _ibute�   � !exÕ_o 	Œ   € DthatX ½4e sFd4- *N bVG Ûòdef __init__(self,%A, *,p 	‡	¼p=False,yiš Z P ¨ Î =©,+¿ @ 
 Gs%   P ð):
        self._�write =  #
  û self._data = [] Ðwith_comments<  , Östrip_text =  & Àexclude_attrR Iset( Y) if  ¯ else NoneL <tagK   	J   I J !re€_prefixeN  2 ð if qname_aware_Y :  VS$  <et( );  æ I 	� YH Xfind_ * —   ï).intersection¥ ] « ? €# Stack Xð globally and newly declared aòspaces as (uri, �…) pairs.T o: Q_ns_sd E= [[%  ˜õ("http://www.w3.org/XML/1998/q ¥", "xml"),= ]	Á Ouser³  © » ² j |if not ‡ÚA å.append(list(_Ò Ö_map.items())p8< ,[]" w E U = {}@ ‘preserve_® DVFalseÈ ' `ending›r  •  # Ároot_seen = D j   0donÄ  ñignored_depth = 0
A –def _iter s(r $, ü `, _reví$d=	 )i8for�&in/ (C /  Ò  ½1ameðs:  # almost no eleO9sû` µ  D  ¨yield from& ' Ü sresolve¼æ à º!ed ¢  ,O $ =¯' Ö.split(':', 1 …@ in ?.U.€p  Ê dif p =m ]    ðreturn f'{{{uri}}}{Á!}'é " ñaise ValueError(f'P¯" {Ñ Ã} of QName " ü Q}" isO'Æ gcope')'= `, uri=­Ï  if  R   
Ë $atag = A c[1:].rT}T àqÜ @[:1]2'{'šB('',7 y^ »  $esA Wð )
        for uò, prefix in self._iter_namespaces( ÷declared_ns_stack):
  ô if u == uri andV 0notZ d zes_seen9  D ¢return f'{) ´}:{tag}' ifI ’else tag, 9uri 8 a R.add( %)
' d# Not È ó  yet => add new eation.3 #if‚rewrite_U *esÃ  ü  riè ,& J_map(  ë  # =Y   + U[uri]z  +  ó A £ = f'n{len¸a 9)}'_ ¬ Øô[-1].append((uri!)))> ³ 0 0if !'' #inÜ¶
ë  ®• default Ž§ ed»#noA v needed¸ >¡ 
3“ Tfor uÛ ºüó
¼   ^+ B Á â u
� ï# As soon as ac  is Uined,M  � ÷# anything that has noœ(øPthus, yÏ) goes there ôraise ValueError(f'N“  "{uri}" i� Ó ÃScope'ö�def data, ¶!©@ignoÞZdepth1!  H   c c_flushe à_join_text=''. s  9 6 = $ 5  ._ _3del  &[:�Qstripf m ^§ ‘preserve_½ Ì
Í  R ! =.E (x ^  ü0ingè$rtfJNoneL Sargs,ª 
3 Þ5endI  , C 	SqÙÇ ”  ñ£  K¤_looks_liky—(!  ) R rstart(*¡ e ë  Ð6if  æ  + ‹» iW{q OrootÜ  ; (_escape_c¿ R_c14nÉ I· "_ns�,SD¦³° ð# we may have to resolve qnaómes in text content
  åif self._data:    uflush()  ñns_stack[-1].append((uri, prefix))
2  def start(8 Ö, tag, attrs)m „ ñexclude_tags is not None and (Q  ™   S ð._ignored_depth ord  ï  S s  C ! 
? I+= 1h ereturn « /2 õnew_namespaces = [] ‚ PdeclaÂ UQ
; R º † qZ __awar56tag. ‚ U ò # Need to parse/Pfirst ósee if it requires aì Á eation.Ü  S à  0ing1frt = (,, ä  7  |N NC 	ƒ  yr zu ",   =o(jH¼œ 
O ð = {k: v for k, v� €.items()Uké#inŠ	k }H ¦  B{þ *H }î   ‚resolvedn z < 2# R ´ B Bibuta , Ä'ifõ 
ë ™ : = ‚ [ _R 3] =Ü # _&« (( f Ñ  Rs.add#  –Qfind_(  Ò ; ´  ˜ I (% x  –   
P    å  ×  êq s)  - rvalue =[) 7  %  éif _looks_like>H ²3  �7 ˜# 
ý U   Y Ÿ  Nelseù ! =Öº, 
( ) ‰# AssignÅölexicographical order of used URIsÑÚ1ûÈ c " Tl"n:6 1(n)Ìnßjsorted˜N ùs, key=lambda n: n.split('}', 1))š`Write Ê$O¸,Ø &..Î +if?qÀ   attr_listk = [
  ô('xmlns:' + prefix if
 Relse ! }', uri)@ 0for ,3 ùin new_namespaces2 ] ö attr_list.sort(]  x :+ ù# almost always empty" M  ç %]
 ð# ... followed by * àibutes in URI+® e order7 !if( s‡  î @k, v9  ´ 0ed(N ªs.items())/  lAif q$ ð is not None and kF    V ‚resolvedBO  S Àv = parsed_q» *s[6 j[v]][0l 8  ‡ 2 ,Ý d ØQ k> D# Noæ  N GÑdefault ('') •  þ.P €    6 ôqappend(A–  z@uri ÿ¡ 8v))Ð±Honour xml:c+ Š p  p_behavi. =& õs.get('{http://www.w3.org/XML/1998/¼ }C '–ñ self._preserve_ .Æ 	è  | 4= '7 'å ! 	= ý k I[-1]ÖWrite the tagú w "= D  a  1('<î	B0tag4î ¬
‡E ð
'.join([f' {k}="{_escape_ãàib_c14n(v)}"' /7  U &])m S />'á à ðÖ text contentù  j ¾_ n¿ ­ Rcdata¬ S
y Z \’iõroot_seen = Truet „ns_stack1[Ì@def  ' ,ÊD#ifÆÚignored_depthÏ  8 )._! U -= 1€  vereturn X  ý O Wflush‘e ¦Rf'</{ �(tag)[0]}¾ m     õ,=popT 7do= len(9 8) =Ñ # PdeclaZ_   rqcommento ,P
w ©h Swith_/ V	�
_3 
/ ƒ  ÒG('\n�%elÅ< z F3 ÙÀ          seÓlf._flush()
   se öwrite(f'<!--{_escape_cdata_c14n(text)}-->': rif not A ¥root_seen:Z  a  ^ a'\n')
 pdef pi(  , target, n )? #if[ Öignored_depth   _ areturnS   3 Ž Jdone/  p (._Ž  6   *el<  Ê C andƒ  › K M	–  ` Rf'<?{é /} a b �)}?>' if
h else 8 ?}0
zàâ "# ÿ¡ character� Ï 2try%  Ô ð# it's worth avoiding do-noth ñcalls for strings that areM D @shord †than 500w  , : ¡o.  assume> ·'s, by far,E òthe most common case in Õapplications.5 `if '&'%  ÜÖ  –   0 =  ú.replace('&', '&amp;/'<F <F ,ltE  ùnr ‹ >E gE /\r‹ !\rG 8#xD� SŠ ,òexcept (TypeError, Attribut ³ñ _raise_serializs _e5 A)

€aH aû �  ‚ute valu5	‚Ä|"~"}>quoÆtH !\tI 8#x9Æ /\nH nH AH V�?# - 0°

# Import Qõ C accelerators
zð # Element is goêàto be shadowed¡A 2imp+ ñ. We need to keepa#m ñPython version of it€ bssibleFàome "creative"g Âexternal cod!ð# (see tests)
    _Element_Pôy = Element

    # S, Sub ñ, ParseError, TreeBuilder, XML ñr, _set_factoriesN rfrom _ea ßtree import * K �except I< † :@ ’pass
else 
6 @(ComØ ÷D, ProcessingInstruction)
# $Id: __init__.py 3375 2008-02-13 08:05:08Z fredrik $
# eÐ Ïpackage

# - 0d
# The„ jð toolkit is
#
# Copyright (c) 1999-± S by F¤ QLundh- ð By obtaining, uô, and/or copying this software ðits
# associated docuNa<€, you agÑAthat ðhave read, understood,F ñnd will comply with the follow„ @erms| ` condid !s:Â ñPermission to use,¹ �, modifyÎ ¾ distributeÎ o
# itsË ñ  for any purpos¢ Pout f± 	ñ
hereby granted, provided þ  Ì Qabove› �ðnotice appears in	Bpies· = !bo/at=  na Eis p9
# Z p in supT H¦aA !atnñname of
# Secret Labs AB or  `author_ 0 bejd] padverti: ) °publicity
#– [ ›„ «!ofS V ó Qðspecific, writtePpriorM è.ø°SECRET LABS¤ ð$AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARDKñO THIS SOFTWARE, INCLUDING9 xIMPLIEDA ðOF MERCHANT-
# ABILITY € ð	FITNESS.  IN NO EVENT SHƒ ¯ 'OR® ð
# BE LIABLE FOR ANY SPECIAL’ ðDIRECT OR CONSEQUENTIAL DAMAGES UANY
# ðWHATSOEVER RESULTÐ ðFROM LOSS OF USE, DATA= pPROFITS‹pWHETHERÁ �AN ACTION0 ðCONTRACT, NEGLIGENCE; O. €TORTIOUS3 `, ARISv 0OUT@ OS QCONNE! ˆ ±!USI ÐPERFORMANCE
#2 	˜.>5�
# Licens›Ro PSFŒb a Con$@or Aº Î y òSee http://www.python.org/psf/lO ' h`etails? aDeprec$Qalias* Pxml.eð.B Ê!

 A"""Pƒ ° interfaces`PXML p†`rs.

Tµ| 4 ‰Ps oneó ule:

expat -- O  wr�ð r for James Claôrk's Expat parser, with namespace
  Ðsupport.

""" óInterface to theH ónon-validating XML[ .8  imE á sys

from pye  Å*

# provide òsubmodules as xml.­ "s.<   S
sys., -['*   Ïel'] = model/ aerrors0   ø áSimple API forá a(SAX)  ‘mentation ÐPython.

Thist 4uleß Ls an4 !ofJtSAX 2 ia‚;
informX Qabout' �Java verso ; 5 ò& can be found at
http://www.megginson.com/SAX/.  The ° T pis
docuå eU d <...>à ñpackage contains¥ `followmÄð	:

handler -- Base classÞ nd= ñstants which defineK yš  ð'client-side' of .  ¡Ô °.

saxutilsw IÄ Ç T=¦convenienc” øcommonly used tox R work2ßSAX.

xmlreadÛ 8Ý ð„ ¢Þ } ÐDriver that a‚s=  «V À  ¢—.Ê š³InputSource# Æ! ‚ContentHÜ0, E= 2 `_excepsú0ort¦E , ×NotRecognized \y–  @SAXP½- rSAXNotS³G R¼òNotAvailable


defÂ!(sþ #, ù !, ã =ð A()):° cr= make_ '() J.set:(_ & 	` z 	) c ª )½ �String(s Ã ßiú)ifö ‚ is Noneî  Žš ) =	ù  „Id—inpsrc = ¾† pif isinl%ce3strº Ì ? £òharacterStream(io.R#IO< )‡7elsA FByte<   s; »rÜ(: )t<iN$ P listÐAd byþ_P funcdð if no
# alternatives are given as ónparameters to the function

default_parser_list = ["xml.sax.expatreader"]

# tell modulefinder that importing sax potentially 's J ò 
_false = 0
if  S:
   .    1

id € os, sys: 0not ó%.flags.ignore_environment and "PY_SAX_PARSER" in os.& v & [D ô].split(",")
del os

_key = "python.Ã Z"¯ ñsys.platform[:4] == "java"©   ðregistry.containsKey(Z )ª 		: £getPropert: ­ òS makeó(  ú3=()g ¡"""Createsš âreturns a SAX 2 !.
±' WCirst ° it is ableváinstantiate of…AonesC Pgiven— D Aiter5 c€ Ód by chaining[ ¬  ˜ > ¼ t.  The K ss must R| Pnames‰ P­I mÕs(  p Ibothõ  v 2 a œ BNB."""4for¬  j  Ü  ZlO) + »  æ 
6try   …) _} S  g )Ç  + �except I1ZErrorK J F /  ,if¶  Y
B  3 #fó  was found, butÏ K%itž  <   ð# failed unexpectedly, pass thi3 Ç ½ion throughC Uraise ÷ PSAXRe²€NotAvailP
¿ » 1det„  Ñ`t won' Ark pQ5ly,l Á bso trySfext onŽ  "  Ì ª  ?› C("Noy=€", None)qñ--- Internal utility methods use"Ñ
j8 : l
?defK	%  Ã “from org.ØCcoreØ  Bdrv_+  = .eHName¥æ, 0, globals()³ÞF .èr)

else˜ ½ O R = __“ )__‘ ‰{},{},['p /']›   N�"""Differ}Akinde 5E“@ions&‰  ¼®	ï ƒ (P.lang]Eort R ‚ ~ @
# = ð  SAXEXCEPTION =õ
====

class SAXException(
 ò%):
    """Encapsulate an XML error or warning. This P ±can containC ]basic3 € informav ñ from either thed Pparsee E   aapplic2 `: you j 2subw ðit to provide addi[ !al? Bfunc @ity,º  to$ � localizU ñ. Note that althoughh 2wilG ™receive a51 as¶ qargumenˆ  ° °handlers in  ‰ E:H ± interface,g ð
are not actually requiredÙ QraiseC  [ e±’; insteadC 1imp=  adw 	i“qit."""
O õ	def __init__(self, msg, c S=NonepCreates'  Åe message is¾ Q, butŠ , y  L Ais oy!al’      ˆ p._msg =Ž 0  H & =§ $ Ã.× )ô BgetM­ ö á …Return aÎ  fo˜&isn %."p r. › 9msgc � e Îvmbedded_ £ x0 if;¿re was nonez € S__strÖà ¿ñ a string represent! os � r 	ì “__getitemp H, ixt ã""Avoids weird.sæ ·someone doehu[ix] bymõ mistake, since _W has „ ‰ definedVD¡ AttributeŒ'("6 p")


# =ãâPARSEEXCEPTION 7P£ƒ (Iû ?ÛE¹JÍ |‰ includeË ” ¾tÂF [ â  �originalO1doc�å . ^u s	ñ
ï ö1x iã Œ 2to Á 6 !"it
 < m in it and J� a differ¹a%.‰SbtÙn  Ø%a t of&,Y �inheritsx  « pabilityÅ�wrap anoéU ¤/ Œ,±3tor` ,"Ï„U F TheÄð  parameter is aóllowed to be None."
  ôSAXException.__init__(self, msg, e )4   Ã._locator = 
 
! r# We net ðcache this stuff at construcv g time.< "If. z ÷ is raised, the objects through which we mustI €traverseú 2getV qinformaz 0may¡deleted by_  � F æit gets caught© ²systemId =  S.getS (;ocolnum3 ÍColumnNumber7 Oline8 ELine6 ½ 0def¸ 	Q  ¢ !):  ÿ�"""The ct ! nu   o~Te end �text wherÆeH ¶occurred.""Ycreturnñ !™ ² —  •  ì “  ‹ ž 	‰  W 9numŠ �PublicIdöG41e p! ´ identifier  /ty‰ > '€ )— >— {— ;T &IdŠ S__strò
Create a string represent[G>sEsysi0'2if & !is±´ ¸ Æ= "<unknown>wá\7getiˆ4if * c  F= "?] Ç\ 	^	^ + ]  
\ §B"%s: � %s" % (î ,¯ ,¯Cnum,Z msg)


# = ò SAXNOTRECOGNIZEDEXCEPTION  q

class' ÅotRecognized(ï5"""   @ ¥for an unrC ˆ.>òAn XMLReader willÅ‡Ýpwhen itåpconfronŒqwith anÆ	g ðfeature or property.Ð q applic~òs and extensions mayJ   ŠÇ ñsimilar purposesÅQSUPPORTPSupportO(sB  Ú Ì M ða service it canñ:not
    perform is requested (specifically setting a state or value). SAXF ñapplications and extens ñmay use this class for similar? ðpurposes."""

# =  ] òNOTSUPPORTEDEXCEPTION "

L ðSAXReaderNotAvailable(SAXNotSupportedExcepž !):q 5""" ” `a missì �driver.
. bAn XMLf ’ module (" Ä) should raiä em r when ii²is first im” b, e.g.$ 2a s« _ •cannot be/ .‹ €It also U"bev Pd durµ 0par½ Y ‚if execu¼n“ArnalH aprogra÷ h ‘permitted‚ †BSAX ã ®Óthe pyexpat C¥ @.  TÔ' ³works with
* `.__verà__ == '2.22'.
` 
 õ
 = "0.20"

from xml.sax._Fs* *" thandler Ñfeature_validŠ$,  ¯namespacesC / _prefix7  ô aF_ges|  pG  stÍ¯_interning³ 
Òproperty_xml_: %,  D P_dictZ _ 'Bers.ÎPdoes ÂIžòError in Jython
´p sys
if P.plat9@[:4]Üb"java"^J ™"v  q a®i  ? °, None)
dele R

tryS ½ öN 
, ¼ 6 ‰ |4ed"� BelseC !if�hasattr(p ó, "ParserCreate"U Or &á 4saxÝ AxmlrÛÃ, saxutils, ÷ð

AttributesImpl =;/ . * /NS,   & If we're uP ùôufficiently recent ÁAof P&€, we canîñ
# weak references to avoid cycles between [O:”content
#ê €, otherw`ð we'll just haveT †pretend.,­_� ?refèdef _mkproxy(oÅ‡eturn o
Ô  S  ë; $ = .K ` Â€ %, Š ³r_ClosedDg@passzP--- EftLocatoræ (.& ¼ 3""" ´ u �bðExpatParser clasð(s.

    This uses a weak reference to the parser object áavoid creatingF §a circular@ xbetweenE 1and ñcontent handler.E 1""" ódef __init__(self,„ !):   ·   ò._ref = _mkproxy(ª )Ù  F ñ getColumnNumberM E 0 5 = N ` #ift #._& vis Noneƒ  ‡ areturn ;  7 ? h.Error� 	¦ OLine¤ L1¡ ˆ 	Ÿ �PublicIdA! 9%¥source.get 
ÛoSystem– f ñ)


# --- ExpatP0x

class ò(xmlreader.Incremental/ &,  sLocator©ñ"""SAX driver forA0pyel   C module.=â ø_> namespaceHoóing=0, bufsize=2**16-20o  Ö‹ ¨ .[ F ){  < K¼8 = K AputSÔ(/ ,* =IK ½ Es =  Ê x Clex_T__propS  o »ing = FalseD üentity_stack = []   xternal_ge“ 0  in _  1Ia# XMLRý‚ methods  ¯ � e\", :�"!0 anB P docu8à from a URL or %In`.H�q ãðaxutils.prepare_i0 _o ( _8 Celf.  > G ê :try«WresetÜH  ï˜S.setDÆ ê(8  L )" F F9.= ¨ jexcept« ñ# bpo-30264: CloseQP on eª èRnot l sJ sxml.sax„ ð) doesn't give accessI  Fpunderly² r¥  á #' Zcalle  0._cª ‘dWraiseNá7óVÀ):
        i÷f source.getSystemId() is not None:
  ÿself._parser.SetBase(C !)
8 ò"# Redefined setContentHandler to allow changing h Ps dur  j 2ingM >defE (“ ,9 )¯ òxmlreader.IncrementalPº ‹ F ¼  ÷ ir ó 6ing_    { Ó._reset_cont_¿ (þ  ± £getFeatured Gname§ 0if  R == f( _ jspaceso rreturn v % ­ /elM   stI}_internÂ 	S $  ^  Din (¬ µvalidation,À  exl ual_pes,@  1 @ Ç —_prefixes / ¢ 0H æ s g5
' Q ðraise SAXNotRecognizedExcepØ #("ÀQ '%s'r& 1" %¿ñsñk, statøÉãë” ySupport“ 0Can¡4setvƒs while O "’  C wc“  " =¹ -~P wR ¶ – O
4ë s 	ÌÈ ,   - E= {}ì  ! Nelseg 7  c 9 %*
P Í ™ o  ¨  ¢"expat doeÃs= ~ %")9 ¨ ­pKª K ­ }  Çÿ ameter entities¸ µJhY re¤» Ï	· Lâ{ªßŒ¶getProperty~Àe):
        óif name == handler.property_lexical_ 7:
  Àreturn self.* & _? * 'ela   Y ïinterning_dictX ) Q ªxml_stringM #if¡ jparser  Í ²if hasattr(Ê ) þ, "GetInputContext")=  A 	= .; %()¾  2   OelseP ýaise SAXNotRecognizedException(K  O   ÿ!"This version of expat does not support getting"I ’ the XML R"¿ » r· Sj ¶ "d @ can¥ Abe rXqed whenº  V ² ˆ n %#"PÃQ '%s'E rL1" %ó!)
 de$t2 ,! w, valueùÌ-\9lex&" =b ˆ  Ä  	³Ñ " M ]resetyl{Y tŸ R |¥ ¤iset" % ö   Á¡Š /!Œ :[á# IncrementalP‚† methods|Cfeeduüdata, isFinal=Fals} Èq
DÀ 8 _4 y = TrueÕ ! Dcont¡ .startDocu¿ (Ò  M :tryw T# The· â parameter is LQal toV”yreader.‚ p# If it5 1set0 Crue,Æ will check2Pidityã ©ZentirÎ 3# d¸ 0. WF d°ing chunks,‹ Qy are normally fw+ -— e{Žúinvoked from closeÅ G h1er.ñ(Ô¥V «.error as Pexc =K 6 E6 SõÁ(e.code), e,ñi  ²‚# FIXME:Å àto invoke errogr()?
  ñself._err_handler.fatalError(exc)
/ ðdef _close_source(9 !):  O  0 =  .%  6try+  / @file- L õ.getCharacterStream()<  / 1if 2 ºis not NoneP  %  " .¤ > ofinall~ OBytey 4¸  /Š  '1if :ó._entity_stack or8‘parser isä 1 orO  Þ   ƒisinstan"._/ @, _C›!dP> )p  6 ò# If we are completing an external � @, do`h Ihere} ereturn Ó ê à.feed(b"", isF{Z=TrueÍ) U_contt·endDocument¼ ½ -  è  • j= Fals˜ ó# break cycle created by expat ×as poinù åto our methodsÑ 
n Aer =„  JŸ -ifÛÃq# Keep ~òColumnNumber and DLine Pfter gEing.¨  È    4Æ 	_) .u ÍJ ! s ) © H  F T¿ ~ 	& "  ú �¨YresetatA Z ò.ProcessingInstructionHI = \{  1 R 	ÕpX M 1 ƒ þFData{ $ 	U c(s™ñ 4lexQ\_propõ 0lexsñ, — ‘ (   0if F Ÿ
ƒ+ @.ComÇÅ  ­A  ;) ËStartCdataSes3 ?End1 d ¿DoctypeDecl– EŠ0 ;els€Ô ý Rlex.c : s#ODATA=  ; CendC9 À          paðrser.StartDoctypeDeclHandler = self.s "_d  w_decl
  !paE ?EndC ±lex.endDTD
7  def reset(] !):  O "ifo ¶_namespaces  !  0 "._o ¡ = expat.P~ aCreateR õ._source.getEncoding(), " ",l  O  rintern=x  Iing)F  • .º ß_prefixes = 10 yElementue ?_nsE ?EndC Oend_A  OelseY8	™ T[_V&	Š 	˜#ž Á ; ¤r_cont_h(ú# ö!Un	 dEntityA u! !_e" 
C	K �NotationE  n > )N>D  Ê¦	Ì	‰ ?EndI 	 [G ~H  [ 9Å_prop = None' ï9lex) œ�* @()
#± w Š†r.DefaulT( �Expand =. ÕNotStandalone°Ò 	‚  Ex<"al5Ref0 æe  5refI ?tryÜ cSkippenV s U ¹Y úexcept AttributeErrork ‘# This py_ù does not support ~ Y  ‚6pas¦	‚SetParam ² ”	= n ð.XML_PARAM_ENTITY üSING_UNLESS_STANDALONE)¯ ¦ing = Falsg‰ y¢stack = []? ò# Locator methods  £ñ getColumnNumber[­ x Qer isÞ
Lareturn í  — = .‡n 	‡ OLine… /†Ðreturn self._ñ#parser.ErrorLineNumber

    def getPublicId(self):   preturn  ˜._source./ )F oSystemF / F ñ# event handlers†  ¡ Ñstart_element£ ×, name, attrs° © Scont_F .= E< 6 ò AttributesImpl(E …  p ?endn  g 8ende N � P ?_nsÁ 
apair =Þ �.split() �pif len(# f) == 1¨  A# no9 Uspace6    3 ‚ = (None;V ,elX 3X =   Q[0], 	 %1]a Jelse2 #WOault� RtupleÏ G « 1new�U = {}d q¹s `for (a ², value) inw.items(² [ @partD 4 ^ " ƒlength =h6rts(   *#    ƒ  Æ 1 = � Ü     aY¦% 
 «� ¨ D b ±"%s:%s" % (ö ![2¹jrts[1]U  7 { , å, 	¦ ê = î $ ˜ a =    ‚ {	} [+ 2] =õ	$ g s"  \!NS�!, '	Y  £  P!NSR¬ !, ‚ 's)]
®
 Ü¨„ª ; ëUo ·#irê  -o &	m5 ò# this is not used (call directly to ContentH%Ì µóprocessing_instructionmÇtarget, datah¢  G IF 	@ Q­ * character_’ ¥   � 7 !s(- Š  þ e 1þÐ_decl(self, pãrefix, uri):
  ñ
self._cont_handler.startP. ‘Mapping(p < 
< ðdef end_namespace_decl(O ", / f ?endd )_ ˆ y_doctyp_  t À, sysid, pub ýhas_internal_subset€ 4lexå R_propê BDTD(R K Y ˆ ø unparsed_entityé 8 Lbase� �notation!Š 4dtdŠ ._ E^ DFW � *, Q & €@ — ˆ 
I ‚ #exh3refù H_ext, | 
 ifÎ  ,%._M 6ges— ž‚return 1ì   „source =; µrresolveE(;)°
? òaxutils.prepare_input__ ( ,7  ;  Ï = ÿ.getSystemId() orM #""p y Z mÑstack.append(w!._ #r,ƒ )ø ä% = #.EÌ9PéƒrCreate(ÍH _  H Žž:tryÁòxmlreader.Incrementalc . ¿ ", R h jexceptL ö0  # FIXME: save error info here?� ]  ¾ UE[-1]¨3delO# “   Vskipp)Q‰ ", •Wis_peˆ1if  
î ó# The SAX spec requires to report k õ  PEs with a '%'¿  7 q   = +  O Þ„N  )

# ---

Ù chÀ(*args, **kw
 Î RExpatå) T Aif _ò__ == "__main__"!imä pxml.sax ¯Â Jp = � 9Òp.setContentHÊ(A ã.XMLGenerator("9 EG7 	 . ºñj"http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml")
"""
This module contains the core classes of version 2.0 of²for Python.H °file provid5 ðnly default classes wñ^ith absolutely minimum
functionality, from which drivers and applications can be subclassed.

Many of these c ²s are emptyE ñre included only as document\ 
B ð	 interfaces.

$Id$
"""

� ÿion = '2.0beta'

#= 8ð
#
# HANDLER INTERFACES f 8Q=

# P d ERRORq  0

c>ö ErrorHandler:
    """Basic  for SAX e- " h.  5 0 ðIf you create an object that impleyfs thisT ,Änq €register = wHáyour XMLReader2 ð parser will call5 F `methodb  � rI  to report - rwarningnÎ �s. ThereD  Iò three levels ofô Ôs available: E Á, (possibly)? precover& 7 ,’.un d. All µ atake aE @SAXPä PExcep3 ¿2theË¡parameter.« €#de¥ „(self, e9 )Ð $ "â= a Š !."w  & Vraise@ 
  _ Qfatal*d Onon-h "Ze , ¿ fprint(ÿ 
 CONTENTrContent"Iþõreceiving logicalR" c@ d eventTí õae main¬Fback0 inU#áae mostw imµiant to°a orderŸv  L 
`E  mi±† 2  k ainform; eÐ 
Y�__init__“Q kö._locator = None0CsetDqL# @ #, 1 I À"""Called byÌáqto give $ aD  —å  ºX  ž Ý `originö
œ 1  ÎK?÷strongly encouraged (though notÓt �required)¢@suppjž ð: if it does so, Rmust ) E  ° ½  orG   î ‚by invokÛ #is1S befo´ Î $ c other0  \ –í‡ 
.Å U 4TheÎ  <"owHŸ ðto determine the en3d
  ñposition of any document-related event, õ if the parser isF ñnot reporting an error. Typically,9 qapplicap …will useD ²this inform" 7forU cits owZ –s (such aƒ ðcharacter content that does Ÿ 0mat1 'n … '? ùbusiness rules). TheŽ ±returned byÌ ilocato�probablyp psuffici‰  É õuse with a search engine.
BNoteµ  e` (} ‰ correct˜ EonlyC 0dur� @ 0inv¢ Û  Ê c kqterfaceì C q shouldÏ  attempt toµa it at1åother time."""G dself._Å #= 
 î £def startDn(/ %):>  """Receive} $if5o�`beginnê  ¶´L ¾4SAX«E kb is method =Ð once, beforeÓ † Û + 8  þõ	n DTDHandler (except forE %seæ L‘1or))!  	?end$1end·30and× +œ  !b/de last3F'd kFpUshallF  7 zR` untils ahas eiH`abandog U 5ingE P(becaF óò n unrecoverableo)‘qreached£ B Zinput|…ÑPrefixMappingŠ1, p Z, uri—B{^ Rscope€. ò-URI Namespace mQ •	á2rom›" iª�necessaryH  nL` 0pro( Aing:�  ï°XML reader ÈP autoN„	@repl¢ · !esh 0eleø °attribute nÏ P whend B ñhttp://xml.org/sax/features/3  #s   Ù †true (thðŠdefault)! ƒòre cases, however,‚ ›@s neæŽ— Ñ 6in @data6in Ù @valub AwheråE0can²úsafely be expandedO;JI/endN7@t suù es2 	½ to À á  ix Œe‚2oseâ`xts it9E, ifD >XZÀthat start/eóndPrefixMapping events are not guaranteed to
  õbe properly nested relative to each-other: all7 _starto úwill occur before the correspondingF rElement¯ P, andj / eÏ ` G ^afterg  C ] 0but( µir order isE 
#Q."""
 0defI 	ì �(self, po!):(  P`"""Endb ³ scope of a' b-URI m›.[  3 OSee M òfor details. This þ Valwayº m¼ oç t As isAGwiseK
(É s$ºname, attrs)rSignals- N-3n epin non-@ §space mode9@The  p paramercontainT ²raw XML 1.0(  ofl ð h Ðtype as a str7 � ³´ ^ …holds anB qinstancæ 1 óAttributes class �  U     Q   %ofF   Œ 
M>endKD?endB<^6– .e, justÁ pas with]Ê¶ >
Ô !)NS#qo *&?ame&" u  7† ä ã °(uri, local1 �) tuple,ó ¸ ' J |D  9 � used in9 °source docu ú >  (sR B � yA  Y �„ y� W0uri t» ó  PNone  = Ås which havek !nou”
×àø=Ü/NSÞ£charactersÚ :entÕ @Rece^Ànotificationj> [ dataêbParserÿ`call tàmethod to repoórt each chunk of
  ÿ&character data. SAX parsers may return all contiguous> Â in a singlej ‘, or theyL `split  5ntoD rseveral1 `s; how ,t  of?  ¦ sd #nyf E ñevent must come from: ðsame external entity so that! B ñLocator provides useful information."""
1 õdef ignorableWhitespace(self, w !):/  lñ"""Receive notificT ' oJ :  è @elem×  yBent.|  M ÄValidating P­ ü ùuse this method to repoþ’ z 0(seF ðe W3C XML 1.0 recommenv 5on,E 0secÖ 2.10): non-v� J@alsoU¡ G iè�y are capW  @  å Pand uY… gmodels¹a­‡ µ ­	F µ ­
F µ,¶ ®= ¶`procesKaInstru¾¸qtarget,
ºa/P & iQ ˜3The¤@ wilP0vok`¦‚once for£¢ Î « ` founditE /at‚ ¾UoccurG `before“ afòÑthe main docujr¿ A� should n Y!an$bdeclarÓ(5&!8)€ o text 5  Se4.3.1)¾  Þ
��skippedEâÑOnameÉ@ #Áe¸ Y ;. NŠoi ' } Cies E "ha8P seen¸<²s (because,Gpxample,( B – C was;  edd&anôDTD subset). All[&orò « 	T°ies, depend°o¤ `valuesÉ5theŠ ôhttp://xml.org/sax/features/õ@-gen-·   F Àal-parameter³-entities
  `proper  ."""


# = ² DTDHandler w

class :E 2"""(   ‘ events.
 ÷This interface specifies only those5 ñ required for basicF °parsing (un 4ed Å ò and attributes)Â  Ù ò!def notationDecl(self, name, publicId, systemId)Ë  : Í a@ q declarL à "."à  f • EYyl , ndatas $n N ã y{ £êENTITYRESOLVER§� ‚Resolverà @"""BW” kr%  cYñ
. If you create an object‘`implem, Ing täð , then register : P withT rD aParser/  Ö±r will call6 ‘method in4 E !to> ²  e - ‚external3òies. Note that Default¡%r º  
¼ ¢ Rthe d6 ª behaviourY~ bZT#""‰Û v0 idCpfier ofc  !tyÕÂreturn eithe1 œ œ = ðto read from as a string, orW ±InputSource=J 4 Ý     y f `Id


# 5ð
#
# CORE FEATURES ^ 5 H  

feature_íóspaces = "http://xml.org/sax/) &s/* ñ"
# true: Perform NameF r proces‹"à).
# false: Opmpally do=/ pC  
#n  (• † p-prefixÑP
# acv 0: ('Aing)î-Ca; (not@ o/write _V ˆ aReportÆPorigixX d^s¿”3 usÑIû XsID>rk K 
  s,{ ] - o�R ¹ (Õv,‚_ünZ‚0 -0 rRAll eoa#, q ñ ü e@ URI! ð nd
#       locaól names are interned using the built-in õ function.
# false: N@ ó not necessarily4 Àed, althoughT ðy may be (default)M  ac8 `: (par~ à) read-only; (Z 	 ð/write

feature_validaš ó = "http://xml.org/sax/) &s/* ö"
# true: Report all  ð errors (implies exðal-general-entit band
#  & •parameter( é 60Do Õ rz v 0‰ O_ges, Û $qInclude%/  
„ (text)  ¾ 
è i> : 3 ,\ /_pñ ¦ó 1 î ", Þ 4ˆ ¯DTD subset5anya d @even?& _  ` F$Dall_%C = [ _rpaces,
â $ _prefix, 	rstring_l?ingV $ l å& Ÿpes]


#= 8ð
#
# CORE PROPERTIES c 8ÿ=

property_lexical_handlerÚ/ Cies/1 -1  ß°data type: $Òsax.sax2lib.L_ H^  
# descrip[a: An o !alˆcnsion Z S for n  ¯ðts like commentsþž ÞÅ­ �y_declarÇà 5 ä ODeclá &´DTD-relatedå Vother� @thanãÎ €s and unÄ 8 9om_nodeæ@dom-* ßñorg.w3c.dom.NodeÑÀscription: Wù.hen parsing, the current DOM node being visited if this is
#  a3 °iterator; w[ :not_ 7roo\ <forG A óion.
# access: (£ ç) read-only; (]  ð	/write

property_xml_strÁ ó= "http://xml.org/sax/* 0ies -, ñ"
# data type: SA   ñescription: The l­ "l 7 ð of characters that wa	 Ÿe source ð  tXeventø î Ô ZencodÒ ¯www.pythonÙ 1 × @nameÍ  › = ‘ to assumÅ a input%¯ Q: setK< ü, e.g. established by a higher-levelð   protocol. MayYange duÍ! (Y MafteHA  > +·a META tag)i  ^‘:  return² ýº © (possibly¾ wthroughK 
 auto-detec% ÷initial value: UTF-8
#Ïö interning_dict §Õ7 -7 Û!Di€ ?ary¶ 1 °ionary usedÚN s commonÏ2s i‡document�é`Requesía eë erW Ös a specific r O, to7 Rllow … ¯±cross diffe�ƒ u¾I y por None}Fall_úC = [ óy_lexical_handler,
Ú , @dom_#% `eclaraU ³W 
¢% 
	\Ð]
"""\
A librþ ofªðful helper classes ü4SAX ,» #±
convenienc$aapplicß Á and driver !0rs.s ð

import os, urllib.Áe rH( $io
 ãcodecs
from . G › 0xml‘er

def _ó ñ _replace(s, d):ÍB"""R B sub»sïaù  u' a·A."""= ‚for key,Ð "ƒd.items(^  (ds = s.{ / )C os¨ pescape(oÓ, entities={}O A"""E" a &, <,c>w ­ #of‡] ‚You can W c other× ä  h Ð by passing añ
 dictionary as
    the op ñ'l entities parameter.  The keys and values must all beF Ðstrings; each. 1 wi ò replaced with its correspondingQ .E A"""
	 #` �do ampersy Qfirst pdata =  .^ ï("&", "&amp;")& >& /gt% 
<% l% %if:[  7 ~ P = __R_‡   ,. ‰ areturn¯ ú 

def unescape(. B={})` C"""U$  Ó q, &lt;,�¢&gt; in a t1 of\ .;uYou cane c other, s- € by pass�a�q 4ö ¦O, "<õ	 2 Ó>% Ð,�#laœí¦ —  "")Ÿquoteattr	E&õ0 @ an 4 Tibute8‘* B&, <%>",ì"n L ¤it for use	^  üÅ\" character×ÃÑd as well, if‹ ›necessary�0 Ž¶)T= {** ð , '\n': '&#10;' r 3 ¡t':'&#9;'}. Î2 = >`if '"'Ï ,   nif "'"    * ² = '"%s"' %£0'"'Š  4 Felse^   F c"'%s'"F µ 
+ ' 	m ' 
öð_gettextwriter(out, coû×if out is Non‘ ’import syµ   ` ¢sys.stdoutÒif isinstanced Óio.TextIOBasei  B #ÿ ”  •  Ðid ] 	ñ (codecs.StreamWÛ ),  bReader )€  -  ¤?eam‰ ±# wrap a biÍ¾ dì ðWrapper
    if isinstóance(out, io.RawIOBase):
  ñ# Keep the original file open when ÷TextIOWrapper is@ •destroyed ‚class _w. l  s !__ •__ = out. >  & ø
def __getattr__(self, nam»  )   sreturn . î + S …buffer =” +() ñ.close = lambda: None$ FelseÃ ñ!# This is to handle passed objects that aren't i>H  ª "# €ö hierarchy, but just have a write methoRÁ Aio.BÍ "edK Ê  A 8ablÍ 2TruÍ  … L .'  $  … ¦ 6tryñ  2 *# ÿ0useç #is§ sdetermi6 7   ÷# if BOM (for UTF-16, etc) should be add> 7 ¤ CseekË  §  ª + CtellS  # úexcept AttributeErrorß  À0 I9io.ð (Ž ´, encoding=	 ,7  †  ek ÿs='xmlcharrefreplace'8 ¿newline='\n* ¸�_through=æ1)

`â XMLGenerator(©¡r.ContentH¸Ar):
À mEinitj@out=ô Ð"iso-8859-1",½ùrt_empty_elements=Fal\w 7.__l ‰0out¢qgettextÛ rÍo,  !._$ õ Ï  ‹  Sflush     @ns_cÐxts = [{}] #  öains uri -> prefix dictö` tcurrentE 2 =  X K[-1]v ñundeclared_ns_map} & ô % =wH =shoƒ ƒ   : 0penÇ@_staB ¿1 = ÀqF|ñ"""Builds a qualified¡ð from a (ns_url, localJ •) pair"""� !if3 :[0]’ð# Per http://www.w3.org/XML/1998/O °space, The c'ª� à# bound by defz1ion¾_ U.  It¯ O Ðdoes not needI 4be Ò‘ and will! pusuallyãf„ +inL 0H.% Oif '
B' ==NÀ0]:
          ó	return 'xml:' + name[1]
  Q# The ñ is in a non-empty Yspace3 ñprefix = self._current_context[f *0]g 2if 7 :K  ƒ p# If it ö not the default€ ,> Apend J I ï  o + ":"õ  2# R i ±unqualifiedm T L Ì 11]
 Àdef _finish_Œ ðing_start_element(R,endE v=False)ó #if4? (   L Á._write('>')ƒ      F 1 = w ´ 0# C—òntHandler methods  Ò Â EDocuÂ ± h … ù<?xml version="1.0" encoding="%s"?>\n' %ª  ®  N 3 )„ ?end‚ gflush(2 ¶ P‰rMapping} (�fix, uriÈ $ns¥@s.ap>5 Ãv.copy()s¹ écuri] =r õ , õundeclared_ns_mapr ( ¢ Ò ?endÐ Ë Œ �ã '[-ë3del{" ¹ 	º,}, attrs‚ 	
;B†  Pfor (g�, value)„ r w.items(y  H_P ” %s=%s' %C Pquote° (M Ä|0sho³ á¹s{  ãf = TruOelse= ¡ :">"â_ß ¢ z f /'/! M  Â `'</%s>b ¤Í �Ï )NS0q+ 7>ù\ 0)�  Ä  EW C/ ‡
G—A È¡' xmlns:%sè Ç †  R  P  M  ­ˆ) º C = [Š '  ô 	9Àe) in attrs.§items():
  ò	self._write(' %s=%s' % ( `qname( õ), quoteattr(value)))J 2if 1 ÿshort_empty_elementsq °pending_sta0 * u = TrueV Oelse= ® Q">")
, ‚def endEF !NS½  , · !, Ã õ « ƒ o F'/>'ñ  Bò G  = FalsË `'</%s>xT ´ wã £charactersá zcontentÝ  É finish_² (Ü óif not isinstance(X W, strr  	     =  - _@encoï
d ì ÍUescape )ö ÿignorableWhitespaceÿ ¿>÷ óprocessingInstructionù Çtarget, data‹På- }‘'<?%s %s?ƒ(_ ñ)


class XMLFilterBase(xmlreader.XMLR
 ‹ ‚"""This 6 ðis designed to sit between anT < r and th1àclient applicaù P's ev ðhandlers.  By default, it does´AhingPbut p¹ °requests upƒ Bthe » u X Ds on c E Àunmodified, Q 1subØ ðes can override specific methodsM : yG  t i  `eam orî ‘ configurå  ©  as y¿ @ –rough."""óƒ__init__0par"c= NoneŒ šª .; –I 	 q ‚# ErrorH€ç  €  Š Pexcep·† [ Cerr_`!.e2 , L Qfatalo Q 7 V warningS 4 P 2# C|psetDocusLocatory l  >  8 '<e ^ U Àont_handler.õstartDocument()

    def end aself):     ø ._cont_handler.. E ^ àPrefixMapping(= 1, p _, uriY B  < 	° i d :end; b È 1Ele%Â ¿name, attrs^ Â < 6 	¼ ! ] V 4end3  T ¬ #NSp $ 2, q µ 2NS(8 	? ¾ o Ç 
f Ð £charactersÌ  y?entY 6 0 ² ôignorableWhitespace\ /haÐ=  n s´ óprocessingInstructionc Ïtarget, dataÄ F 	@ Ô ÓskippedEntityk  ·c 
6 0 S b# DTDHÞ‚ methods  @notaÓ GDecll ý, publicId, systemId€ 5dtd7	H  ~ B x dunparsæ ~ ?, nh… U  ‹ O ’ "# nŽResolver(r ' )#
preturn 7._ea
J D  “ XMLReadŽ <† msource�óparent.setContent6 )- _Error+ ¡3X „) 	Ø Ò  ¥„setLocalÜl ó . ( I ”getFeaturJ  H 	µ4 . N sN o, stat�	‚  N . U ŸgetProperü¤ À_parent.getPôroperty(name)

    def setP `self, ! ‘, value):(  ,   ˜._parent.5 / W ò# XMLFilter methods  p AgetPE (R a preturn  h 6  q 6 ", ˆ > 7 # =  ð

# --- Utility functions

‹ 0preH â_input_source( “, base=""c u"""ThisB ° takes an I= S< @ and  ope !alD @ URL Iä ùs a fully resolvedF ñobject ready for
 ring."""·if isinstan² ©os.PathLik¸› ³= os.fspathã )’ K 3strù ûC 0xml– 7er.ö 	O Ãelif hasattr 0, "5 J Q Bf = h„    ? = d ­  ) 
±  f.\ Z(0), ´  + T  ­öCharacterStream(fP Felseæ
7 NByte2 â @f, "  ")ã• f. – ’SystemId(- •#ifL.get¹ ‘) is Nonep á 7getª # Ö Usysidt X { 	 ñ0hea( 0os.)@.dirÆ ( @norm (, ); ` @file.  k ' Q.join,  X !, ' 6  if”)  is> (!  
  H �
–¼ 
/ K .  bJopenS  ‹&b"‚ ü	f õurllib.parse.urlÕ Ñ P z 3 prequest5 Œ H
õ : ÎsÎf! :`
"""Anfp Reader‘the SAX 2Á9a$ » !r.0 PÇ Árs
should be¥`d on táacode. jòfrom . import handler

 Q_exceès" �SAXNotSup0 4edE! ,— ·NotRecogniz 
¢=  � pREADER  �=

class ã ÎÁ"""Interfaceã  ÿ0ingwð XML document us ¢callbacks.9:XML1iM DthatF 1 's¹ `2 drivÊ1ustdPimplee !. D Qallowpapplica0 toe±QqueryE afeaturC2d p�Pies iˆeÀ@ser,< PregisK evÙ ˆsF &oró `procesø ,m ð to initiate a dò:ocument parse.

    All SAX interfaces are assumed to be synchronous: theB @ ñmethods must not return until( òing is complete, and readersC  ; ðwait for an event-handler callbackŒ ] ñbefore reportingG ‚the next? B."""â ñdef __init__(self):0  þ   t._cont_o #= 
 ’.ContentHˆ +()6 ?dtd5  ?DTD1 ef íEntityResolverf ?errf  VErrorh š  è Úå ‡, sourceí  "Pø aTXML dò
from a system identifier �aInputSL !."i  9 raise NotIÖ V!ed• r("This Fbe i& 6!")˜;getf ’´ ROsv@currÀ
3 – -  D 
Ör sr ,õ
{ ògisters a new object‡VceiveD B š ºs’ ‹  a• 7get8 4 
ˆ  R
4DTD³ n r  j sj û 
 -÷ òbasic DTD-relatedsø ƒ ÷ þû 
3 þ m	þ 
> +r~
vþ¨  external .>tieü � 4 = b Œ 1get1Æû ÷ù 1m sm  ù e€ �-messageõ²	‹ cLocale|l zp""Allowy°applicationx1set	4 /“ sTƒwarningsÚ § Ú Å#re¡BquirÜ�provide Q "izi  †W ï ³_ @; if† Py canò0supˆ  p requesS %e,C €however,' yEa€Pexcepè 6. Aõ Us mayC ] " a° °e change inU Á middle of ayðe."""
        raiòse SAXNotSupportedException("Locale s ñ$ not implemented")

    def getFeature(self, name):   $ ð"Looks up and returns the state of a‰ 22 fG %."< 5rai¦ ‰Recogniz§ z Q '%s'¥ r& 2" %‹ « s« ,ˆ ² ?Set¢ d¿getPropertyNHvaluNpH O| P2 ® !, ‹ Q ó¥ H¡class IncrµóalParser(XMLReader¡ ð"""This interface addÿð ree extra metho o¸B ¨8 ñthat allow XML pp Es toGiŽ <  # Sing. ƒj for tŽ Ais o•‘al, sinceé1allC ©underlyingu ¹M @func×bality.AWhenÎ  „ 1er Ðstantiated it PreadyÂ �begin ac!!ng{ ‘data fromH Cfeed*` immedH ‘ly. After ¥ �has beenB ðfinished with a calln QcloseV TresetW qmust be' Qed toE 2mak, Ê ´ ® P new « ‚, either³ ¯ !orB  usš  “C o )0Not_  at� #se !s � W_not_“ 0durK  G Ping, c Uis, a	$e Ì  `beforez&‚  Byi@aultQ "e ÚFalso” ±ee¢  f Ó ®õ  ", t ˆ tsG Å M5sÀponvenie¥ toÖ¢ 2.0 drivek²writers."""ˆ Cƒ__init__EÓbufsize=2**16¦ J _#._ 3 = 
 ›    ê .Q ¬ ˜§Xsourc©Ê.SÅort saxutils^ 0 % = ò .prepare_input_  ( t  – ¶ + ƒ$     @fileY ’ õ.getCharacterStream()† 1if . vis NonegH IByteC À    buffer =ó file.read(self._bufsize)
  Õwhile buffer:   1 Rfeed( 4    / =b H �close()
b Adef Y   v, data)| ñ"""This method gives the raw XML0 1 in  < Ñ parameter toa  ¡  2 ðparser and makes it- %se<  , emitting =  correspond ñ
events. It is allowed for� õconstructs to beE ñ
split across several call)  . ¯   õ may raise SAXException."""U  ùNotImplementedError(6–must be i& '!"�prepareP!�, sourceŠ!is¾ Ped by.Kc a­  a"²  ‰ÁSAX 2.0 driv§ � 0 itM ®?ingï B Ã  ñ ©overriddenð € k à 2whe_aentireç@docuo• has beená `passedù  ë  Æ  ã ahrough(ÜÏ,' QnotifCD ª@that3 áre are no moreò!. \j ô do= @ finjrhecks oÊ ¿  Aempt€ • internal‰ QÝž2Theî‘r will no^ YyÒ ‹ • another l Funti[  TresetÛJWp ¯X—  afl¤ Ä  M Q ö 0r sŸ at†;is =5new9síI¡results of* “R 1 orH ‘ twithout* ˆ – VŸundefinedjy�hö!edi0# = ‚ LOCATOR ã

class Locato`@"""IvAfaceøqassocia…aú q Ê % aÊ lJ  1 A  ’or object™Õreturn valid 8¡nly duringE „DÔsHandler˜¢s; at any ÏPtime,Y= U   ÑunpredictableN#  àý getColumnNumber\R©  c( ! n) R wher scurrentWends.@ "-1Cs ðLineNumber(self)3:
  ñ"Return the line number where ¡current ev Unds."? r> 1-1
 ÿdef getPublicId(self)m p$ þ  identifier forq l INonen oSystemn s$ n &0# = Â INPUTSOURCE ò

class InputSourceï ñ"""Encapsulation ofÝ binform ‘needed by ÁXMLReader toMPread Rties.ó RThis s Èmay include V QaboutR c,X ñ , byte stream (possibly with character encodingE r d) and/½/ O Rof anÇ yÅ aApplicòs will create objects,é   uså  Ö ~ ,Ð.parse methodˆ F–�ing from2 òEntityResolver.r	  — nÇ° belongs tow & aµ , „ q is notg pallowed5 imodifyS à Bpass% !it£  Q @ f Àalthough it î±make copiesë b ’those."""# „�__init__�", ò`_id = ?“ ¢8.__"  ’  (% PG   ! g    fOfile   k	  A  Ð sT%, Œ Ì P"SetsK ïi©[á  a VÚ~ #¯ … y 9setåÒÿ Âÿ 7 à † g† { Fÿ ; ~ 
ÿ > 6_idy CsetE|Ñjƒ "ÿ I
´S©÷ á5Theß  must be a E¡acceptable^ean XML0 ¥ E adeclar×‘ (see secûR4.3.3‚ e; ‘recommend- )‰ pattribu=½  u‘ignored i ˆ & ðalso contains a charactó er stream."""
  ôself.__encoding =  
$ ƒdef getE  (0 !):  B õ"Get the character@ ö of this InputSource.y preturn P € u �setByteS³ w ¨, bytefile� 3""Sƒ   ã ° (a Python 0 õ-like object which doesÆ ±not performd F-to-Ñ ò conversion) forÕ iÕ A sÞ ¾  óThe SAX parser will ignore?  Öere is also aBV ü ò specified, but itO Quse a¯ õ Õin preferenceF pto openÝña URI connection it€¸ I˜ � applica$ _knowsä
e† q f,© “should se· !thI sQ method” Ð ¾! =`   © ”
˜ E  
½ µì› n¯ë5forÿ ôw ð , or None if unOnï [ Š __: 
ë DsetC^	 £ + 
ú   ’‘¼ÿ   (¬# Ä `must b`F÷2.0 Unicode-wrappedZ5thaAV84 to>  Œbings.)Ì -u + 8eam  W´ _1any/> 2andÂ åpattempt�   B "to©°ystem identƒr¹² i ‡! =¼   Ü ¨½³« H ±C ? | 0# = ò  ATTRIBUTESIMPL ö

class AttributesImpl:± ƒ__init__sXattrs® À""Non-NS-awa³�mplement-.H  Õ9  "bee…ÿm {name : value}T = !=  T MaLength� – C1len !._9 c: AType  ,  > y"CDATA"o V¢ 6 
p [X ]@ oByQNam} G  ? F 
!ifÕ  åiVàattrs:
         ðraise KeyError(name)
   preturn  
 àdef getQNameBy a(self,# !):$  9 !if € not in $ v._attrs$  ( ~ " w sx r « Alist o Ž.keys())¿ B 'q__len__g ‚  !en � z “__getitem< 6Ä .[{]½ Î    x  ú ¯__contains�  u ·ƒ "gea¾ þ, alternative=Noneš  ° .>  _ 	8 $Acopy?G T_clasÁ V @  _Ú- _value@ .  A 0# = ò ATTRIBUTESNSIMPL !

¶ ö AttributesNSImpl(   &):ge__init©<0, q<sò"""NS-aware implementation.L  f= ð should be of the form {(ns_uri, l\ 1): Ö u, ...}.Ñy : % : 5"""= 1 = Ž  : 3s =á » mV”!Bytzpfor (nsÀ #)¿[ .ì
"ifq 1 ==°
  ;“i •$ Cá Â  ±Á lX´ oã		e®*QA .|
°",sW @)


‹c_test(9¢XMLReader(ðBIncr>UlPars `Locato& `
if __f __2¢"__main__"8_ ñ-
#
# Package analogous to 'threading.py' but using processes< Smulti Ding/1.py  cThis pa °is intendedc ’duplicateâ0uncðality (and much of
# tðhe API) of threading.py but uses proces
 vinstead+ ó
s.  A
# subpackage 'multi4  K ñdummy' has the samq ` õis a simple
# wrapper for 'Œ ðJ'.
#
# Copyright (c) 2006-2008, R Oudkerk
# Licensed to PSF under a Contributor AgreementX ó
import sys
from .  …context
} q stuff & „default % ñ #

__all__ = [xÂ “x in dir(% #._6 _ ÿ+) if not x.startswith('_')]
globals().update((name, getattT  , ( !))‚    … › )Ì ñXXX These shouldƒ àreally be docuÁed or public*ðSUBDEBUG = 5
SUBWARNIN "25Z QAliasz ðmain module -- will\ ð reset by bootstï–ing childg 
#

if '__G 0__'Ä Qsys.mQ `s:
   ² [+ p. =] = qain__']ÌäA higher level¦  t usŽ ñsockets (or WindowsU�d pipes)E åá/connection.py" °DÌ gð 'Client', 'Listener @Pipe „wait' ]
ä$io
 $os
  øñø  Ttruct Etime eempfil •itertoolsi _
[Lutil  AuthenticaEóError, BufferTooShortF >¨Areduyõ
_ForkingPickler =  . R

tryGý q_winapiZâ f ñ WAIT_OBJECT_0,  •ABANDONED ñTIMEOUT, INFINITE
except IfÖ w f¤òplatform == 'win32'   âQraise’ � a= Nonemð
#

BUFSIZE = 8192
# A very g
@ous · out when i¯0mesPlocal¾µòs...
CONNECTION_TÉ ñ = 20.

_mmap_countXó. D()

Üñfamily = 'AF_INET'
 0ies´  —fÏ|,5 bUNIX')V ! Z @+= [[  [  1_X _PIPE'X  !]
ç s _init_\( =>Ä areturnŒá.monotonic() + 3outV VcheckW > "> › ñdef arbitrary_address(yG "''Ú R� Àan arbitraryñ free address for the given family
    ''' #if á == 'AF_INET':  ( ñreturn ('localhost', 0)  -el> GUNIX> ñ-# Prefer abstract sockets if possible to avoid problems with¸ È o  � ð# size.  When coding portaI òapplications, some implement X haveN ðun_path as short	 ±92 bytes in…  ´  ‰ µ_un struct.C „if util.á _- pets_sup˜ &edL Á Põ"f"\0listener-{os.getpid()}-{next(_mmap_counter)}"q A °tempfile.mk •(prefix='U q', dir=� @get_& o_dir()½GPIPE½j ðr'\\.\pipe\pyc-%d 5' %©  î   (í /, ì  )¹ $""¨ &seCóraise ValueError('unrecognizedËò')

def _validate_ù( )O QCheck‘ )# A is = Að current environRG ôif sys.platform != 'win32' anš ejÖ Fª0 %sŠ Fnot å C.' %é !)
n{  Ê{ ¢0dou<cO  µ0if v ‚hasattr(Õ,w A (   ”¾  ¦ Z“ess_type( £R…   & As of™. ¶This can beÉ, ô A, or }ê ¼ X ~  §Htuplyƒ "@ 
:  is#óž p.startsÓs('\\\\'Þ <W — W "orn;is_qœ_namespacDf ½ Y¿  à  q8%r l †# Ð)

#
# Connec}Á classes
#

 & _ $Bax â_handle = NoneÆ ò __init__(self, & `, readç¡=True, wriö S/ # =8 .N bdex__(Q #if O < 0Î2"inY —F  %˜ õ  š Y † H  Ð"at least ones`[ `\ `Y `` musté à")
        selÂf._handle = 	 #
  Áself._readab   " Cwrit"  
# ò(# XXX should we use util.Finalize instead of a __del__?= 4def (Š !):T  œ 0if  º ¶is not None%  ) & wclose()W acheck_ d] Y ò raise OSError("9B is T "m <o   ¼ ª % 
Æ m  connectionq  roe-onlyu     šu 
% u  ¨ t ÿbad_message_lengthx  é t   ]  µ … = False÷?elsàs%()' /Cbad –  – )‘@property;  pK ú """True if the €3 1"""E  umreturn¢ Eƒx ó 0z 
5 | ! v …v 5 v ! v  Vofilenof  óFile descriptor orƒ 
ko '	Äþ~Š ­‰  C"Ýr q:tryG °  d §  fl3 W=ÚÆ ¡send_bytesË ð, buf, offset=0, size=o3q"""Sendä ; Ñ data from a  È-like objectý ¿ 3o úå öm = memoryview(buf; ¡# HACK for€ �-indexingý@non-• wgñbuffers (e.g. array. L �if m.itemü J > 1†‡ <&m)@ 0n =&(m #ifSJ < 0O bSValue} �™negative"J 3n <N J í  � 5gth6 
N å !is
P  S= n -o – elÅ tà< 0:
         ó   raise ValueError("size is negative")
  áelif offset + ) E> n:   ' Q ú buffer length <A ^ òself._send_bytes(m[l : s 1])
q @def - (8 f, obj)Š ð"""Send a (picklable)$ aect"""A  ®  < ö ._check_closed(ï  @writE   ƒ ° �_ForkingPr �er.dumps(™ ³ Crecv0  ` R, maxZ=NoneÄ ¨ �Receive £ data as a uobject.. â "Kreadâ &ifž 0ot ¥ G and 6< 0z VM6 ù`buf = '._’0if - !is‡ 
u @ Âbad_message_W²`returnC P.getvõ(›S_intoYCbuf,´/=0Ÿ B 0 a 8eW«S-likeˆ°R˜ Òthe number of0  –) Ù5ðwith memoryview(buf)QmSR# Get‰  Àof arbitraryE5fers ÷AitemD= m. 	" ¿ K $=     *&(måK h]  a,^ 0 ¹>Ñ 
í  ( X O ˜ too larg1 _esult¾
Ð r/ W.tell— I  Ú õ #§ BX“TooShort(\ Ù
‚ 2# Mù can fit in dest¡E jseek(0A   ‘ Üž6 //Í¬  Ý  (P>)< ]o ¬ 9ð —
ˆî6 å  µ¥ x¥ µ ]Ploadsa s'()uApollÓ Ë, timeout=0.h€Whether  œáany input avaiÞa to be0&
Àd()
        ó	self._check_readable()
  rreturn & ápoll(timeout)
$ àdef __enter__(' !):  @ = 	. 3xit- ¢, exc_type
 Cvalu 'tbJ  Y P.closœ Ò

if _winapi:Y öclass PipeConnection(_ GBaseO 5"""¥ %  F õbased on a Windows named pipe.8 õ.Overlapped I/O is used, so the handles must have been createdF ö
with FILE_FLAG_OVERLAPPEDi ­ ò_got_empty_message = False v“, 7@, _C9H‘ =8.  @ / Ò"._Í ó $ d ¡send_bytes' [, bufL ”ov, err =°¡.WriteFile4 [ < 5, oTV=True‡ t 6try[    "if` a þERROR_IO_PENDING4  8 xwaitres™ õaitForMultipleObjects(ª 6  ²[ov.event],‚ª, INFINITE¸ 5 uassert z ù = WAIT_OBJECT_0i nexcept» —ov.cancel£` YraiseF ofinall6 „nwritten�fov.GetÒ~Result(„Ä Ó*= ´  \ € == len(�Irecv9¸maxsize=Non§ Ú #if}ú ï.# P   @io.BÆ+IOVNelsef b« £ = 128 if ¼   ¿  5 S min( ,) Î � 3ORead2 ˆ ,ñ @  d
= ž  ! t% <   | F   „ 5   ¬Š Œ	 0   ”    œ	     ¤    ¬    nž± :  ¸À 0:
           ÿf = io.BytesIO()
$   ÿf.write(ov.getbuffer()4 �return fY ÿelif err == _winapi.ERROR_MORE_DATA:=  › b þself._get_more_data(ov, maxsize¦ ÿexcept OSError as ei    Q.wine( § ¿BROKEN_PIPE@ ¥ �aise EOFm Ð ?els� A 	8 rS qRuntimeW õ$("shouldn't get here; expected KeyboardInterrupt")
R  def _poll(I , U Jout)Ó 1if   õ._got_empty_message orM  ±  ØÓPeekNamedPipeI û handle)[0] != 0q  F áITrueb  °bool(wait([» ]¼ ß 
 - (, #
ì  bu
ì	€   <,:buf{Vleft ë	)1]p qassert A 9> 0 $iféð is not None and len(† $ +; 
ï  j T._badÕ{_length 4²±zReadFilÔ,p  c�erlapped=Ä
 rb{,” ov.GetOv1 ~Result(7 † = Z  W 2	.�
Ý™ ¹ö

class Connection(_ CBase´1"""f   : ô#based on an arbitrary file descriptor (Unix only),M`a sockË&± (Windows).j  r 	 $if‹ÕÒBclos–1, _ ñ=_multiprocessing. h Ê    2 
©p   ËQ Fsend' Oread& Arecv& 
ù· "os© £ ""os»p ½ – 0os.
 {  ½ ò q, buf, æ !=_ | µremaining =b^  whÜ ¶� v 2n =P a "._üi }^ E-= nX  D 7if | := 0c  # Rbreak5 À       buf =ð buf[n:]

    def _recv(self, size, read=_ !):'  + õbuf = io.BytesIO() �handle = E "._  �remaining! 5ize fwhile  6> 0o  s qchunk =� (V  � O €  , �n = len(4 
 |if n ==^  6 'if€ !== 
„  &   åraise EOFErrorÄ     Oelse9 	!OS8 à("got end of fÿ 0durŠmessage"º Ÿbuf.write× 9E-= n’ `returnçã`send_b¹é7bufÜ=  I 7b> 0x7f 
à  pre_headerØútruct.pack("!i", -1Ë + ZQ", n* E ² (d # X  	Ò ¥ú# For wire compatibility with 3.7 and loweóv ù Î FZ16384A 7ð0# The payload is large so Nagle's algorithm won't be triggered
C  #¯ ðwe'd better avoid thà  stvåconcatenation.îG ~å 
[ ' # 	_  c  ö# Issue #20540: „ �e before ðsing, toµ –delays du2 L   #& "þ on a TCP socketÝ ð# Also note we wantJ %‚ ° a 0-lengthEý fer separately,0‹ A ð "broken pipe" e(As if~QotherùRclose“ ) ¥ _‚  +‰ )Ï ²	Ï0max»W=NoneØ´Q  4 &(4Î 0 ,Â'un½ x¦getvalue()4 !if" M*-1Îk 87  ³o  o Ù  @not à ä O 3 >  
‹  , ¯  B TCpollwtimeoutI ä`wait([B 4], # a ð
bool(r)


#
# Public funcnô
s
#

class Listener(objeck 1'''Q RÄSs a l(  ( .@Thisóa wrapper for a boundþ` which& Ð'listening' fñ!or
    connections, or for a Windows named pipe.. 1''' ódef __init__(self, address=None, family òbacklog=1, authke !):L  † / # =8  ‰ (Q D and] T_type E)) \A  E  ²or default_U # P =N  f £arbitrary_ (6 %)
8 “_validateQ " p T   if· Æ== 'AF_PIPE'Ý  (  $ó._listener = PipeL Ò #, *)} OelseJ nSocketL É T U $ifˆ€ is not µi  ³isinstance(¯w, bytes± Ô óraise TypeError('. Á should be a9 ‡ string'U1 =� v ^aaccept\w €  A" ' aÃñ  on the bound s æÇP of `} "`.l  J ÅReturns a `C‚` objectù ' } 0if F Ó!isF
­##OS! ¦is closed'ë;c =T .$ w :
n ódeliver_challenge(c,S 0 J  Ñ Oansw/ r#" c5 ¡À  	Cá � ’   g1Ì% Í
«=ªC  u D .× ª‘@property,  ö & R ˜  .T5M Rlast_ä,edKS 	4 Y  ˜ s__enterŽš 	. x»1excZ , 
 Rvalue 'tbJ Ý 
v fClient¿sös G Ûq1 to-b ©4a `×`‚@ h 	/7 È ‘ îÀ
¼ • «
ê Y 
œ * ‹, » t0Mp{ À is not None3:
  õanswer_challenge(c, authkey)% _deliv& ' ñreturn c


if sys.platform != 'win32':
, ödef Pipe(duplex=True)“ 1''''  ¢ RW ðs pair of connection objects at either end$ ea pipeC O 2if t n  f òs1, s2 = socket.  t () Ñ.setblocking(¹ i ! 2! ec1 = CÆ Ê(s1.detach()k c� ) 2)  JelseË pfd1, fd= 0os.	Ã � 1 ïwritable=False‰ ˜fd2, read1 r1, c2

¡  ögóaddress = arbitrary_ ¦('AF_PIPE'õ %ðopenmode = _winapi.9 á_ACCESS_DUPLEXê  	  2accw 0 åGENERIC_READ |G  YWRITEB ‘obsize, i ´ = BUFSIZE,	 . i v  ° uINBOUNDA  7 ± š 0” T híý ±CreateNamedý& z £%, ¶ ùFILE_FLAG_OVERLAPPED |? d + QFIRSTÚ¯_INSTANCE,3 ÄÇTYPE_MESSAGE™  ­7MOD  H JWAITg :1, Å,÷0NMP0 _ zFOREVER= ÿ.# default security descriptor: the handle cannot be inherited¦ INULL ÷h4I­YFile(/ 7", +7, 0Ð 6ULL ÚOPEN_EXISTING× e ®ÙA « A 5SetPH	KStat³ &h2T Ñb, None 	í )¯  §overlappedÿžƒ  (hî* ØR –_, err = L U.GetO0 kResultUbassert: 6= 0’ È I† 1ion€ ËéàÀc2 = PipeConónection(h2, readable=duplex)

  ð
return c1, c2

#
# Defini< “s for conL ñs based on sockets
#

class S ñListener(object):i 1'''  Representa^ S of aI ñ which is bound to an address and lZ 1ingJ R `def __¯ „__(self,5 ó, family, backlog=1Ž  ú  + "._Å # =… . ’(getattr( I !))z  > 2tryÙ     ð# SO_REUSEADDR has different semantics8õWindows (issue #2550).Z  M úif os.name == 'posix'p  ' Ã @.set® 3opt¶ É.SOL_SOCKET,^  ;   C 8et.Ì 6, 1ø  8 w ßblocking(True+ Sbind(Ñ' ç(´) D  ¶4elfÅ".g 7(7 êexcept OSErrorE	Ê Wclose9  ë Uraise=/ U# =^ plast_act –ed = Nonel#if6 Ø�AF_UNIX'Þónot util.is_abstractŸ_Ó Uspace?
È „# Linux 8 Î 8 Ps do b 1nee[õbe explicitly unlinkedÌ  ü î  " =œ ™Finalize(* . ,¶1 t, args=° ý,), exitpriority=0A ²:lseà ‹ T ýmûß", 6 ‘ è< | sHÑ)C³(s.detach()P � H g � 0   º3 † fglbYõ 	G#ifÊ F î )
J«"._@ ¢    P()


Ô ÛdClientÔÞ ˆRGa-  z4theŸ£given by `Ò`Ï R i F_typ+ CwithN » ¼v ) as së	#s.óí o  "? œad pipeCñ if sys.platform rwin32':?dOPipeb œ ð '''
        Repóresentation of a named pipe
  5''' õdef __init__(self, address, backlog=None):3  F  * #._* $ =4 $  òhandle_queue = [: Bnew_ ï(first=True)]
A  ðlast_accepted = Ž 	' ðutil.sub_debug('listener crea4 Dwith¢ b=%r', … ¿ )N  @clos® [ ™Finalize(( s, PipeLt 3._f. _s_Œ ,< Qargs=r.
$� ý, exitpriority=0I )5Í[ Ì ", aLFalsÆõflags = _winapi.PIPE_ACCESS_DUPLEX | ùFILE_FLAG_OVERLAPPED� "ifk 
* (h |i L aFIRST_y ‰INSTANCEU ereturn… CÓNÔ w“™!, z }	ñ ÇTYPE_MESSAGEð ” wREADMOD  	ž  Ý 	L OWAITo ¤UNLIMITED_ñ ¦S, BUFSIZE	 g 0NMPe _ …FOREVER, MNULL; "L{Ö˜Žq.append- '._[)64 # =Z C Zpop(0/ >try&'ov‹vConnectêS p, overl– d4	î  ex'Þ OSError as eh ‘if e.wine$ !–ÞERROR_NO_DATA8  íFraisI    )# ; À can occur iƒòclient has already cß .ed-ð# written data and th %is6 ú -- see Issue 14725.	/lsú  w Á (reþWaitForMultipleObjectsl :   Á[ov.event], gª, INFINITE÷ - £^®ov.cancel(8  < kCŸHY(0 ®¢l� c õ , err = ov.GetOnqResult(¨	k 6   bassert> *= ¨Æ ³Ù5ion» O  @sºucmethod Öµ :izeW(WÀ, address):
  ô#util.sub_debug('closing listener with address=%r', ')
G ù for handle in queue:!  - á_winapi.CloseH. (5 !)
- ó def PipeClient(w )J 1''')  N ôReturn a connection object ó
ed to the pipe given by `Y `L X öt = _init_timeout(ë vwhile 1‘  ‰ :try   ì �WaitNamedØ Ò f, 1000W  1   h{ %¥reateFile(§  $  Ä $, j íGENERIC_READ | oWRITE,K 0E FNULL ßOPEN_EXISTING< ~ öFILE_FLAG_OVERLAPPEDI  W { 
ÿexcept OSError as F ‘if e.wine$ 0notr(ˆ ÿERROR_SEM_TIMEOUT· F 
A õPIPE_BUSY) or _checkt’A y  raiseç ?elsÂ  Ubreak( $ H ! š &SeJ>KStathuÄ  òMODE_MESSAGE, None b  Å ŠrY ±C[ñ(h)

#
# Authenticar“stuff
#

` ð_LENGTH = 20

CHAL uE = b'# “#'
WELCOM  “#'
FAILUR  @#'

ödeliver_challenge(û“, authkeyœ±import hmacç 1if +£sinstance(0 s, bytes7  
a Valueˆ
€"²key must be? ,^ õ{0!s}".format(typf "))`úmessage = os.urandom(;) Ú a.send_¥ (A3 + K / Pdigesº ñ F.newß ( ’, 'md5').+ Õprespons‘ r Crecvr @256)  A# re`Tlarge� _K "= d \ Î öÂ 
1 1  ’ « ’“´'ƒ ò received was wrong')NOanswMµ/¼À  # reject lôarge message
    assert õ[:len(CHALLENGE)] ==  3, '; „ = %r' %8 K  
 [M !:]' ôdigest = hmac.new(authkey,N  h Rd5').+ !()8 òconnection.send_bytes(# " ·response = - Crecv- @256)õ   ­# reject l5if K ±!= WELCOME:†  ; ðraise Authentica” rError('� “ sent wasd ñed')

#
# Support for using xmlrpclib �serializT µ
#

class Cü  Wrapper(ob½ )• ñdef __init__(self,ã, dumps, loads,  Á  #  ._$+Û  7 " =?  L " =T   Ð ð
attr in ('fileno', 'close	 @poll Ž  É'Ÿ  £ �obj = getV («  ,  ê "   s   ·   R, obj%   a   /: 0 = 6 !._í  P6  2elf ks!  W  Æ W ¶ sR  ® .# w8  Y creturny JP(s)

S G_xmlŒ ª 0 $.­  ® Š,), None ð1).encode('utf-8x^ q \ E –method = f ) 9.deK È ” 4objžÄXmlListener(	  | laccept/fglobalu K!im"Ž @.cliL/as*  $r .h N ® A&, u ú ’AXmlC~ Å(*args, **kwHÀ ¼ ” o š ú ¦  R@Wait)ð if sys.platform¹‘'win32':
 ‹ó_exhaustive_wait(handles, timeout· ¬2# R®CALL ( ñ which are currently signalled.  (Onlyo C ë  è–the first0 ñ might create starvø‚ issues.p I Lq%is°  ’ready = [] - rwhile Læ     re €_winapi.5ÁForMultipleOM¦s(L, FalseË  D  ZÊWAIT_TIMEOUTh  ( Ybreak: Qelif 5 °OBJECT_0 <=e+ <  + 5Lˆ R    Â *-=/ e ‘ABANDONEDh À res < WAIT_ûABANDONED_0 + len(L):
  Çres -= WAIT_2 	( Oelse:  ùaise RuntimeError('Should not get here')L úready.append(L[res]! AL =  I+1:];  h uout = 0 qreturn V 
 _  _e‘ ús = {_winapi.ERROR_BROKEN_PIPE,  òNETNAME_DELETED}P ódef wait(object_list, Œ W=NoneV1'''…  eÒWait till an = $ i
 G 2 isº /´ Rable.t  ? RÚ  s p “ of thoseH sI �which areP  K   š $ifÀ  ‚  Ã 
ÞÝ µ = INFINITEÕ 'el= ?< 09 ¢=_ Dint( P* 100ªF0.5)9/=‰; £Ðhandle_to_objû}¸ $ovC [U vy, 0ect+Fset(R  T  R :tryý [for o™
"  ˆ7     €fileno =9’attr(o, ' C . ò except Attribut€n  + õ[o.__index__()] = oÖ  1   ¶    q# startÕ@verlËdw ¦®length zerT  > ÿ   •ov, err =™’ReadFile(	¶(), 0, True¨ :  !OS�O as ¹ - o  q, e.win83 !if¡  à9in k}9 r-W S =õ ©¯IO_PENDINGZ ÖO/ov …  v.event 4   t# If o.š K éRpipe @O andþ I õ€= 0 then !reO H » TmessageG i<  x ÿ, but it HAS NOT been consumed...G Pif ov° ÷ sys.getwindowsversion()[:2] >= (6, 2ü Ë  c# ... –Bon WL ! 8a €later, w'�  S # Ó 
Ï = À              Stry:
  ÿ_, err = ov.GetOverlappedResult(False)G 
ÿexcept OSError as ex u `e.wine7 b 
aif not© ÿand hasattr(o, '_got_empty_message')~ .o.8  = True‰ ÿready_objects.add(oÉtimeout = 0
R F ðhandles = _exhaustive_wait(  0_too “.keys(), T u kfinallåõ# request that oÑ { is stop’ þfor ov in ov_list?ºov.cancel()Î  # ¯  C >allm /top "º® Á õ¡•!if‰ ‘@in _V!y_Äs:ƒ Nrais[K ÿ!= _winapi.ERROR_OPERATION_ABORTEDY 1o =€	/©[ov.event]æ‰ Æœ O== 0~  R ð# If o.fileno() is aHEb pipe   _ then” J ãa zero length Íÿ HAS been consumed.C /if,	v ðnupdateµ1[h]hX3 sŸ‘return [o* o* W †A if  >  ’s]

else:‡òimport selectors r# poll/ P have{Â advantage oO (ðiring any extra Êë Ð# descriptor,}Átrarily to e` Ðkqueue (also,b yz²ire a singlñ¢# syscall)»§£ ³ors, 'PollSÉ ÃT_Wait & =í .2 ´  N  9 N  "or51defL(iƒsW=NoneW1'''q  g  Ÿ Q tillúÊs| y/ËRable.t  ? R s y ™bthose … sI �which areP À        '''
  ó
with _WaitSelector() as s #:
)   for obj in Šect_list$  ) > å.register(obj,U és.EVENT_READ)
b þif timeout is not Noneb ¡deadline =0 á.monotonic() + :out[ Ÿwhile TruO  uready =¢ .Â (Œ )¤  â 1if 4 š   ðreturn [key.file4 <Ð(key, events)FD ]^ ?els¥   Z   ,   Á 5 = 2-2€  :   n ?< 0ì  (   ô Ò ó

#
# Make connection and socket>ò%s sharable if possible
#

if sys.platform == 'win32'…  de€Vduce_a ( )!  ’ Phandl"  ˆ6no(Ëû� ‚.fromfd(2 ,¦ ….AF_INET ²SOCK_STREAM%l  p  E ð . import resource_ä )erdLds =! Q.DupS&(s¥  X ZWbuildñ a, (ds,c.x J @writ J /? = 8 3 Ö   ;‡s.detach>• Cß(- ( , ‚ %, Y AreduE  7 Ö!Ã  ?pip÷	Paccesañ((_winapi.FILE_GENERICv pÿ  sQ 0) |¥  w H UWRITEI å I y D !dhíö ADupH™¯—", ¸ 8 b"re¸ö  ühíÅ  ‹ K 9D 0(dhq+ad¨ hÛ!¡ FPipeÂD• 
�   
B  “ è0)

¥� Ö '  ÈbR,dfz!Fd$ v# ¦Í nU  ifZÔ    .Ù “ i  ”  dfÑ d fd`f`\/fdL ’X :  7 Ðduce_connectiÔon)
import os
 %sy óthreading

from . . {process ðreduction

__all__ = ()

#
# Excep Âs
#

class PG eError(! ´):
    pass) ÷BufferTooShort(P8 .  rTimeoutW ,  Authenticaœ 3  È ð%Base type for contexts. Bound methods of an instance Bthis8 ôare included in ,æof __init__.py& r Ch ¡(object):
#Ü ) =O  
7: =  $ -8 =    ! ? =   “ ƒcurrent_"’ = static( .' )k /pa; 
& : ÿ active_childrenv ' )³ ódef cpu_count(selfT †ð'''Returns the numberÐ@CPUs¾  ‘system'''Ç  7 –num = os.Y ª    ifH ‚ is Noneî    òraise NotImplemented–ø'cannot determin� Vcpus'a <elsW Ä  w ô Managerò 2a m$ ó associated with a running server Ù^  É 4The> sð	such as `Lock()`, `Condi|õ()` and `Queue()`Mòcan be used to create shared %s.. ‡¶Å s¾CSyncý 6  ¯ P(ctx=S.get_æ&()c†m.start( rcm UAPipe^ß, duplex=True] woM!neAÖ  Îed by a pipeß 4con7 Ÿ y Ú ˜   (‡ øˆ è – óa non-recursive lockœ ˆ ´synchronizej _ ‰   _-  <R' š 	– '\ j  ©  ˜ ¯ œ ,=ÇAcà8f ¦  (‹/, §8  H„Semaphor‰Ðvalue=1):
     ð'''Returns a semaphore object'''
%   ôfrom .synchronize import S5 + rQ  ñ(value, ctx=self.get_context())
9 µdef BoundedR (. !, ? A=1):)  � 	¶ b6 ¾ #s c Å   Ì QEventÁ ¸ 0n e# kT ¢  (\aarrier’ ñ, parties, action=None, timeout ¶ " bH · B3 ¹  (Œ ‡ 1SQueueÓ Ÿmaxsize=0º q- ¸  sÕY ±  (h ž ‚Joinable8 Ì> ¦ 3	a ® 	 ¶ HSimp´ O1T §  ÅCPoolï‘processes®×, initializer …args=(),v  >ñ maxtasksperchild1 è i _ pool>  ¥ p G  (J  w® »  © ,™ ¸ ½ #  ;L@RawVw/Àtypecode_or_ 0, *s õ osharedï  cI 3q û  (. ƒ  �RawArray´  á Â ?Â aP È à Á ~ Á   Á  � Ï €¿, lock=TrueÉ s"d y˜† Ô À return Valuàe(typecode_or_ à, *args, lock= ?,
  ñ	ctx=self.get_context())
.  def Array(#  , Z 
f 1sizt ãinitializer, *w aTrue):J  { ð'''Returns a synchronized shared ak 5'''2 bfrom . c} ‚s import– ( rW   ¥  * freeze_sup’ "
í ðCheck whether this iû õfake forked process in a frozen executable.â ð If so then run …ö specified by commandline and exit? Uñif sys.platform == 'win32'9 âgetattr(sys, '“ x', FalsÍ ÑŸDpawn˜
¿ . 	0c {ologgerF 3’ package ( ð -- if it does not alreadyù !st*~  itycreatedË DutilÊ • H g (Å Âlog_to_stderÈ ¸, level=Non:¡'''Turn onÍ 1ingxpadd a hÄòer which prints to W Ç² 	‚ µ 	 (™ ½ Pallowÿÿnection_pickling‘ ƒInstall ù ÊP sendÉ 3conB sÕ usockets� tbetween÷e Û 3# T-�undocumen¹0  I: ó	evious versions of multiK5ingo ñ# its only effect waOmƒ� p objectƒAherix œvWindows/qê +Fset_½;&,  
 SeÚphe pathãó a python.exe or w °binary used+ 5runä EchilHeÇ Pstead ç  Š@n us¨`the 's¹mñstart method.  UsefulÞÁpeople embedçP© „ ½'\ ,
6 
 (ª ™ $  +ãserver_preload[Ímodule_names]P list&  &  =0try  H  w^ –ó‡°really just¤6int$ ü R ®Æ 		5 å ¹ ß f ð context(self, mãethod=None):
  Aif m @ is    " µreturn self3 :try% ð ctx = _concrete	 btexts[Z ]: ú except KeyErrorF ±raise Value ð('cannot find conT £ for %r' %· a) fromº g õctx._check_available() Ô Actx
 âdef get_start_´ (ò ø, allow_none=Fals9F  ( f._nameM sM Z ,Ã cP  ÿ Aset › ò 0 ofk 	  "')~ •@propertyÙ qreducerÐ ÷ò'''Controls how objects will be 7 `d to a± Ñm that can be]  õshared with other processes.'''( rFñ globals().get('d Etion¾  ‘er.setter?  � Ä ,›  7 Ï Z [V 6] =-   N  ÃL àpass

#
# Typentdefaultmå -- underlying  ¯òat most once
#

class P($S.Base  	ƒ& =Ör@staticBd_PopenP C_objH  œt_½ • { 3().€ .K  · Dþ  /@ext(¶  n D $ =â ls_init__»Å8  ¦  |.¤ $ =Uë ( dactual¿ !%  Ú Åc q 1ô!ifð+._o !� Ü ­  5   ¤) 
n ( Kelse)NRsuperL(ð  ‹" � &P and  Lforc  ÊeRuntimË¿ð has already beeZ&t'›Žh d  3 Z bM7  >H  … E A
Ó'ifk
  Ê Æ     ¸ §=¾ùÀlt_context
   ðreturn self._actual_context._name

) ðdef get_all_start_methods(: !):%  ) öif sys.platform == 'win32'$  ( x •['spawn']A Jelse+ j 4 = . ¯, 'fork'] o €darwin' J " [* -, i  † úif reduction.HAVE_SEND_HANDLE†  / Š �.append([ …server')Á  ) Þ 0 ‚


#
# CWñ types for fixed P! mPL
#

Ô !Cf òclass ForkProcess(p S.Base ”	²# ==K  ­ s@static�      òd_Popen^ G_objV  % pfrom .p& _’� import 8 a  *  	Q `Ó SÀ % Ô Ht Õ 4V o_posixÜ , ¯S,á $ `mæ =[ å 0ç(Œ 6T„( =×O [ µ'%\ `] œb 1g O { ‹ Uü check_availableB .oif notœøraise ValueErrorž	cZ ~ "')	 õPcrete	  þUs = {¹ ë!':ž$&), s!: b! 2F + }R  DÕ”ð# bpo-33725: running arbitrary code afterjðk() is no longer reli}p  ró# on macOS since ñ10.14 (Mojave). Use ì õ by default instead.M _ LB = D, ð   
oÜ]J ½í Q # tR'])

M à
    class Spa²wnProcess(p S.Base C):
  õ_start_method = 'spawn'  r@static   ¤def _Popen_ G_objW  ^ pfrom .p& _V á_win32 import ? R  1 breturn 	X 
' pclass S  €Context(Ô  } __nameÌ  þ " =E  ] �_concrete	  \ Qs = {x  › :: s 1(),! } „_defaultA B = D /   
d [X ñ])

#
# Force the — w1#

rf 	²(" ý ƒ €._actualy  Ô 0 =  „ C ]‚ ¡Check that‡ `curren �read is ÊÃing a child `p
#

_tl7 th- ²ing.local()¿ 2getAing_(¸ ù€getattr(G ,Š, s', NoneL sL R Q  B .ª l 1 = " Œ Vasser� (¾?if ©  û  € :ñraise RuntimeError( /  ô'%s objects should only be shared betweenB&eswA ñ through inheritance' % type² !._ë)__y #)
bTerrno $os
 †selector Uignal Uocket Ftruc y5 å* ¢warnings

ùè«connection 9/ cÓ6 Oredu5 ûresource_trackerT ô ðutil

__all__ = ['ensure_run² @', 'óf`ed_fds º ƒ_to_new_° 'õ ¢@   'Šòforkserver_preload'O ñMAXFDS_TO_SEND = 256
SIGNED_STRUCT = sg!.S Q('q')` ¡# large en’for pid_t¬Fw   n 	  H!kS‘  (Rect):çGÃ_init__(self1 n   '._Ì `addresÒ úd( `live_f?) /pi$ 	{! =êp `lock =0ead\kLock()& p_module»  ['__main__” è Lstop2# M usžðy unit tests to 3 ëz Rwith  ¥ " m   ; 0_un  ed  ˆ   . ’#ifX • D!is"
j àreturn

      ñ  # close the "alive" file descriptor asks! óserver to stop
  1os.E ²(self._fork* _Q E_fd), # … = None
* ®os.waitpidX opid, 0V =pidQ þif not util.is_abstract_socket_namespaceo •address):�  ú Ÿos.unlink1 0 ÷ S 	¥ xdef setAbpreloa’, modules« Ž ã'''Set list of'  Ñ  ­0try  I F in  Å process.'''« 'ðall(type(mod) is str;  ^  F Ò   _š ”  "òraise TypeError('' À ¥ must be a¹ Œstrings'Ùf   =… 
4 >ñget_inherited_fds›– •'''Returnt Efds 3 Å from parent_  Ð aThis r@ s®1 if8cur3 A wasl started by;kd. €`  `š  Í ‰  è ó connect_to_new_Çí H, fdªò Qquestƒ z  Pcreat~_childî  )€s a pairY ,ô(status_r, data_w).  The callingI • can readå  c	l 0's ¨ôand (eventually) itfBcode”v 4t €should w  ä ¢ £`pickleè Æeparation anž DÕ e ™’ö ensure_running(ªpif len(}ú + 4 >= MAXFDS_TO_SEND=DValu€too manyÀRwith £. ( ú.AF_UNIX) as clientc  .,
�ƒÃ  ãü Þ«Ç_w = os.pipeí  *   #r,/* 0all:5= [4 	 #w,ç“3,8 m  �resource_½Éker.getfd()]0 s  +=N	 :try' [ PreducP.send8=", I 
$2 F/
 wm [excep— > 26 ra # w# D	p 0finCá N àchild_r)
       ðos.close(child_w)

 ñ
def ensure_running(self):  " €'''Make $ ó that a fork server is : .S  5 òThis can be called from any process.  NoteS ¡usually a Ÿ } , ð  will just reus5 e… „ õ
started by its parent, soI ä )R µdo nothing.* 5''' Pwith f._lock ä üresource_tracker.d G  . #ifI  <· @_pid?Šnot None_  5 #å  was launchê `efore,? Pit st ‡?x  G ñ	pid, status = os.waitpidë*._’ ,! �WNOHANG)K  if2N pid®  k #Œ ]alive>  " mreturn s# dead,â Ž it agai( È—¼ s >_fdµ + Pddres xŒ 0  Î Q_fd =©1  Ú, 	-  cmD !('Smultiâ ƒÌ ù import main; ' +E  F@   ' Q(%d,  “r, **%r)'Ú&  yþ preload_modulesÀ°desired_key{a Â_path', 'sys }� ðdata = spawn.get_preparation_ ž('ignore'œ  € = {x: yî� x, y in  €.items()Å x £ 
ˆ ?elsA  E  ^ }› Øqocket.s (  .AF_UNIX) m~istener*a@`connecé ³.arbitrary_ #('N ÷  l\ c.bind(1 o°util.is_absm"t_® ¥_namespaceB ¬  ð  55hmoi ~, 0o600p — 	 (L L Ä# all clientÌñes own the write end of "˜}" pipe;;Q# whe: yX qterminaae readL qbecomes y¬ �   c B_r, 	 wæ r (ä ?try&‘fds_to_pa[´er.fileno()_ -r]Ç  …  ÜO%= (8 ,Š,O  S    ÃÅ   9exevðexecutable()
       ðargs = [exe] + util._ ú_from_interpreter_flags()
A   2 ÿ  += ['-c', cmd]( Rpid =f ðspawnv_passfds(exe, G �, fds_to n except:^ þos.close(alive_w>  ® ]raise@ finallyY rY ðself._forkserver_addres\
 r 3 ¶ f"Á 4 Qapid

# ð
def main(listen¹2d, Q ±r, preload,$ ö _path=None, sys )v'''Run × A.'''• $ifJ *  Y`if '__| d__' in" F ando € is not v <  @ óprocess.current_ ú()._inheriting = TruÀ/tr¸ `r.import•  í (Ÿ  
 
ÄÿCdel ‰ ™  Ç ·for modname
ë ² #__® #_(@ 
¤ û! IÓ ZErrorU  }  O
‹ Ë‚_stdin() psig_r,  ³w = os.pipeÙðos.set_blocking(& ‚r, FalseŽ " w" {  ƒó	sigchld_handler(*_unusedZ ¬ p# DummyŠ Cnal * ñ, doesn't do anythingW  4 à /  b{ D# un¼ ð SIGCHLD allows the wakeup fd to†õify our event loopK ssignal.E :¦ Ñ ,) # Atectb , ?5 ^C& O 1INTN ^ F_IGNM }1 o9à 5sig3 I  ™R, val•   „#  ‡/’.items()}`# callX os.write()/  -`Pythonù Ÿ ¿Aracy¨ Œ 2Z0_fdw  {! ð# map child pidsw0clim1fds# 0pidî÷{– Âwith socket. ( ÷.AF_UNIX, fileno=åT) as  1, \^ óselectors.DefaultS (4  NÉÕh @.get›  îa t T @.regˆr�$,  Æs.EVENT_READÇ : ¼ 9 ½Ðselectors.EVE³NT_READ)

  µwhile True:   :try   -     ò#rfds = [key.fileobj for (key, events) in selector.	 9()]}  L   0if S ‰     VbreakÍ      if alive_rm C ÿ# EOF because no more client processes left  ó assert os.read(t ð, 1) == b'', "Not ati /?"E ÿraise SystemExitÏ ?sigÍ ¿Got SIGCHLDj ¨ M ÿ, 65536)  # exhausä ô pa# ScanëVchild<ˆ  3 `   ppid, stPàos.waitpid(-1,o�WNOHANG)_ €except CŽ PÉ_ErrorK x O 
  `if pidÚ0G )"@_w =N ±_to_fd.pop(ñ ONoneÖ 4if > pis not 0 � Àreturncode =; J`status| @exit G(stsÿ p# Send 2  3 ; to+Ž O ñ % Ówrite_signed(ë &, Ã  > õ¯BrokenPipeó 8 #È �vanishedÉ 
 2 Opass% 
„os.closeÅ ¹ ;els{ a  ÿ# This shouldn't happen really‡ 
pwarning@ðrn('forkserver:  Ï]Oed 'J 
‘ Ð  'unexpectedÆ` %d' %
 D ¯if listeneŽ€IncomingJk reque–5ithW 0.acî¯()[0] as s # Receive «Cfromüý  ( ÿ= reduction.recvfds(s, MAXFDS_TO_SEND + 1ç ›en(fds) >: ¯  v bRuntimÒ(­  0   ð	"Too many ({0:n}) fds toÿ send".format(
  ¯len(fds)))/ ’child_r, 	 ßw, *fds = fds5 �s.close(W €pid = os¯ k( 1if + O= 0:o  ê 0# Cª $ 
�code = 1% 
?tryj  n �listenerè  -   selecto1 runused_li[alive†0sig   /w]Ñ 
  N ÿ
.extend(pid_to_fd.values( B   @²_serve_one( r,,†  D 
 ˜ > !Ïold_handlersk r �except E ?ionâBsys.6 chook(* __info, 0 Ïstderr.flushä ¡ ofinallz�os._exit(�õ Oelseå a# Send^ÿto client procesÙ « !Ãwrite_signed& w,m ³  \ rÿ BrokenPipeErrorÉ  8 #Á �vanishedŒ/paç !t[pid] =Z 
oúî �for fd in?å ] Ifd)
‡ 7!OS/O as ý áif e.errno != 	 ß.ECONNABORTED� Ïraise


def ù% u­%, ‘P  š€ose unne[ðary stuff and reset '%al: Û  ò.set_wakeup_fd(-1Q 9€sig, val?t ‚.items(){  G dignal(4 F À : na(_forký'r. _ž#fdÄþresource_tracker._ - *I `._inhe:ù)fT# Run ð object received overñ pipe
    parent_sentinel = os.dup(child_r)& ôcode = spawn._main  ,B !)
2 preturn 9 ò"


#
# Read and write signed numbers
#

def read_ Q(fd):L ¡data = b'' òlength = SIGNED_STRUCT.sizÓ  while len(9 0) < 2gthM  õ sç  m C(fd,    -	 5 ÷  , †if not s>   ðraise EOFError('unexpected '?  ƒ Q += s» 
¹ bunpackx 2[0]	%
3, n=msgû @ nu þ 6msg± Snbyteô X õ 2msg2  Ð  æ & 6= 0;   ì sRuntimeð ashould‡get hereõ ¤ Bmsg[{ !:] åñ_forkserver = ForkS ð()
ensure_runninå , . �
get_inheK@d_fdÞ /   ü
connect_to_new_proces7 % G
set] ·_preload =  .% ûñ(Module which supports allocation of memory from an mmap< Smulti® ±ing/heap.py ðDCopyright (c) 2006-2008, R Oudkerk
# Licensed to PSF under a Contributor Agreement.¤ im¡ � bisect
’ `collec¬ #s  Ãdefaultdict
 µ  $os %sy „tempfile  th„Bing
g „.contextd Areduv ‘, assert_ƒ 1 — .) òutil

__all__ = ['BufferWrapper'�" I3£able class”Twrapsw,¦` ²Ôblocks can be·!ed+òf sys.platform == 'win32':r_winapi z ÃArena(objectÜ n1"""+  „A sharedô	area backed by anonymous  ¥(Windows).C  O   _r€$= ‡ó._RandomNameSequence(Á €  ’ð __init__(self, f®  &   ~ "…    ûfor i in range(100>  % 0nam_ñ'pym-%d-%s' % (os.getpid(), nextƒ .Å )» A   Qbuf =8.ˆ2(-1® P, tagb = 8 3if ž‚.GetLastä)Í h   UbreakW    ð # We have reopeß a preexistÓ ˜ › 3   €buf.clos{   JelseŠ  ŽPFileEW s­ @'Can§Pfind è  y1new›À          se lf.name =  '
  þself.buffer = buf P_stat= (- asize,   N %)
2 ‘def __get1 !__0 %):   w ò assert_spawning# 	" breturna { b sb !, p i ¡ ¬ ( =W    Ú 	~ ù# Reopen existing mmap# Z 3  . 3(-1v 0tag =/  
 )F ñ	# XXX Temporarily prevent ðbuildbot failures while determi:M  ðthe correct long-- ú fix. See issue 23060= ”õ _winapi.GetLastError() == òERROR_ALREADY_EXISTS

else:¤÷class Arena(object–5"""x óA shared memory area backed by a t0y fù …(POSIX).A  M  ð if sys.platform³ z'linux'}õ_dir_candidates = ['/dev/shm']O Ñ  ® 9  ]ò  " øCinitô", Wfd=-1 -    5izev  yfd = fd 0if  J= -1Ó  6 #rò is created anew (6 !6 ð , it means we'r)Iminge L qfrom reƒ!_aËz) belowÁ . Í 1fd,X! =¶ °@.mksÂ(`  6  êÿfix='pym-%d-'%os.getpid(),3 2dirJp_choose’(G)– ®os.unlink(w € Ñutil.Finalize‚Á, os.close,  O.fd,Z ‚ftruncat9  ( í
† #   0	 ¿ GÞ 2elfJC1# Cä a non-storage? di Uºif possibleVð# to improve per5:ancŒtfor d iŠ
;…@st =F ŒZvfs(d x §àt.f_bavail * s  fr1 >=Hÿ:  # enough free space?*
* ä@get_‡-© ­creduceÝa^_if a.i²raise Value'ç uÿunpicklable because '²   P'fork^`was en; `d when§  É'FÙ 	šP, (a.?0, rÔ ðtion.DupFd(a.fd))

    ódef rebuild_arena(size, dupfd):
  Œreturn A# ±.detach())
, ñreduction.register(4 !,  ee ñ)

#
# Class allowing	  ca=   of chunks
 Ámemory from ¤ as
#

c= ÒHeap(object):ƒ °# Minimum m[ Ñc() alignment¤ _ B = 85 ò(_DISCARD_FREE_SPACE_LARGER_THAN = 4 * 1024 ** 2  # 4 MBP üDOUBLE_ARENA_SIZE_UNTIL5 j  rð __init__(self, s =mmap.PAGEA z # ð._lastpid = os.ge !()~  ¡$ ÷ock = threading.Lock& ’# CurrentFp ‚ N   ! =œ  ð # A sorted list�Àavailable bl€  7 Bs ind s; £ ²engths = [] ¿ T# FreA `manage­~Ç# - map eachh U to aŠ `jÒstart, stop)`/ ˆ  Å_to_seq = {}¦ i 
L €)` tuplep Jthe  
j K !  Š ÛPt tha12fse† ù &  � B‘ Ö � # en/ aŽ +op� Ô 3MapÚ/ir
5useC ó ™Qated_ô  ü defaultdict(setÝù9L‡pÛ O @to fS�- see comP –  ‹() below” C _# — 
¨œStatisticQ"n_m Ê 0Y nS    @sG qcmethod ¦roundup(n,±	# ð must be a power‰2I  V0masæ5- 1 ÉP(n + ) P) & ~	 �‰ 2new¨ 	‰ PCreat~ 2newP withY@leas_�e given ** l XTelf._ó 1maxl  ._/ :), E õ# We carve larger and  £ös, for efficiency, until wŠ1# rPa: A-ishîð (roughly L3 cache-• d’2if Ç  # < Æ œ8 6*= ´³util.info('7 a  â<R%d',  “ # =¡ v $ ð s.append(arena)#
  ñreturn (arena, 0, length)
# Ñdef _discard_$ q(self,  !):%  K ò# Possibly delete the given (unused)5 3 i " = U.size ñ# Reusing an exist  ¥ ò is faster than crea Ç new one, soJ õwe only reclaim space if it's large enough.6 #if0 < ñ ö._DISCARD_FREE_SPACE_LARGER_THAN	 UM ƒblocks =J ¢allocated_ B.pop€)3 ²assert not %  3delH ‚start_toG [C _, 0)]- .op, ƒ1 ì Ý‚s.removeX › 5seqË 0lenU Bseq[K { 4seqA B ]N !ifå :seqCç d  l² ~ ³  Ämv½ k	¼±9s a{ò -- it might be much' rh²i = bisect. Q_leftn "._� 1s, w 4 `f i ==h
) š  á œ ô4new‡6izeGJelseAv ªfgths[i¢ ] Í + ˆP q²}   È  Ì	,Ù ¯   "8ép, stop)i O% ] '  �ª  ã1 g &T ‚add_free}Á,0¿b# make ð	 available and try to me~ñwith its neighbours inB‹í 
& :tryBprev© À@lf._æ ,û except KeyErrorV 5asst �x5, _s vabsorb(�   #³ Mnext³ ð Ê ß³ )_e² Œ ² % =:ï Ž Ö P atop - % Fö Í ›V�.append(u yì 
L Àlength] = [bwlock]
  òbisect.insort(self._lengths, 	 %)
2    start_to_bP ‘[(arena,  Q)] =  5 /op4 'op3 4 ±def _absorb‘ ,P !):  ¼ ò# deregister this" õ so it can be merged with a neighbourE 	·  ¾ =op)¼ Odel õ V 1 ñ Rc’ = stop -EN 0seq – @Bseq[5 É±seq.remove({)A ¦if not seq> B§ ?lenW  ) ý q se  breturn½ Kâ Ëš ¢_allocated7ÛLJ ”ã sX !s[C / » (¦Z )(, 
+0# Aàð is entirely free, discardtBfromŠuprocess‚E/ _  ~C' T ‚_pending#s$	øÂFree all theõAs in ; Ä list - callÿ -  «e held.› ªwhile Trueò :try  Ä um _µ  fs.pop(R 4 ÿexcept IndexErrorW  Ereak’  5 r7add] ×( ]“ ^ ¨ NM  " aO Ëqed by m\Õ q# Since $()jkàasynchronously@  x0GC,!Åcould happenï µ# that it's°”³!is¶:çaß7se,C , Á.acquire() wo AdeadE ñ	(issue #12352). To avoid€ 7, aO 1try3 ñis used instead, and ifk! Pcan'tiv dE Áimmediately,2 � C¢added to a©"ofxs bZJ 
TÀsometimes laüw¦3 or™,} –7ing– Q»“ Qs() (• wä ±retrieving _ ©  isJN òstrictly thread-safe but under CPythonÝ`atomicn!nkê 6IL)�óif os.getpid() !=x0las 
:±raise ValueX(˜    ð"My pid ({0:n}) is notÿ last pid {1:n}".format(
   ðos.getpid(),self._> Upid))0 sif not  õock.acquire(False):*  a ƒ# can't $ ñ	 the lock right now, add b !to {list ofM �pending + ™s to free% ™ ) _ _. 0.ap ( Ð Lelse´ bwe hol–  • 	a :try0  è v np is += 14 # ‘  ˆ 3ing™ (�  (   O 1addQ ( ¹  (   , ÿremove_allocated4 ofinallÄ  ð ±.release()
Ç Qdef m[ (n X, sizê¢# return aš3 ofá ) ö (possibly rounded upô !ifO J < 0Xðraise ValueError("Size {0:n} oue rangeÕ n 
«psys.max 1 <=i e ŽOverflowh too lare 
74 != asJ
n  >°.__init__()¿  M ! 0ialï ¡after fork‹ / Dwithf ?ockc "n_°Œ  # Ê#w …²Lÿbe marked availabl[Ânópup(max( S, 1),¾ –alignment à Ð(arena, start Dop) P Ø K 
6 �real_stop+  : ! +ð7 [ 6if (  < / 
? % A# if…Ö"ed$A is ñr than necessary,7	h G  îŸremainderU * ï° 

ö ; 
÷!s[Bs].add((GH " } å  o . ð

#
# Class wrapp�é Kp‘�a Heap --ù° be inheritE°y child pro:Q
#

cW pBufferW] ²er(object):| _hP =W �F ’U¬¤9 = .. ð._state = (block, sizCe)
  ñ.util.Finalize(self, BufferWrapper._heap.free, args=(block,))
F ñdef create_memoryviewJ !):!  j Ð(arena, start Àop), size = v u._state1 wreturn R B !.bœ !)[I : +G ð:]
#
# Module providing manager classes for dealing
# with shared objects
G ómultiprocessing/F As.pyg òZCopyright (c) 2006-2008, R Oudkerk
# Licensed to PSF under a Contributor Agreement.
#

__all__ = [ 'BaseM¾ –', 'SyncM �BaseProxy uToken',< q!'S× M’9 1 ]
À `Importì !
i D sys Pthrea= dsignal Tarray Tqueue 6tim 5ypeR ³os
from os o rgetpid
 ”traceback £format_exc" . ¢connection; „.context  Aredu ò, get_spawning_popen, PÓSErrorA : Lpool .   1  k ‰ B
tryöò ¹ e!©ò	HAS_SHMEM = True
except œ£ I ) RFalseÄòRegister some thingßBpickà 

œ!e_¸#(a”_ . À, (a.typecodêÁ.tobytes())
C  v#.rv (4 :   c 0)

_K Ps = [	 ñ(getattr({}, name)())�  ð in ('items','key Övalues')]
if R ð[0] is not list:ìð   # only neededP QPy3.0i�build_as_6 C(obj	 @   0, ( ! ,& 3€  [  s¡C y"' I, re )ÂAType€identify±) Ž
» ä — 3ect» 1'''á H Äto uniquely P * aÝ. 6 €__slots_o ('¥ idMpaddress 7id'ä�__init__Û", 2 #, 0 C, id˜  % O2id,á) ïid) = (F WQ__getw b µi Q sQ  ‹7ateX Q  ´®R ao__repr¦ 3'%së 5=%r4 ±id=%r)' % \N  > ‹ !__P__.__.#__Q<P^d1Funà for communicaðTtion with a manager's server process
#

def dispatch(c, id, methodname, args=(), kwds={}):
    '''
 @Sendb ”essage tom Ñ using connec� ð	`c` and return response
G O �c.send((† ƒ !))1 Pkind,D Òult = c.recv( 0if  Ò == '#RETURN'¶  k  1ultL Praiseª àvert_to_error(D c ))?con$ d 	~ _ERROR} 
$el1 òin ('#TRACEBACK', '#UNSERIALIZABLE')c  Ç ÷if not isinstance(result, str(  , á QTypeEÚ ö    !"R< q {0!r} ú ñ '{1}') type is {2},r Ístr".format(I  Q ˆ @ @ › )¼ % õ ¤æ å  * °SRemotÀ ò'Unserializable m~“: %s\n' % D OelseV ¸ 5 
1 ƒ FValu‚ ¤recognized€ ,T{!r}'! ¨))

class Ä PExcep¬ ˆÃ__str__(self  ¾   ('Ý ³+ '-'*75 +  1str2 �.args[0]) $ ¡)

#
# Fun‚ s for findš th9ôthod names of an objectBall_Ss(obj• ®RÊ`a list@ I 4   Q`obj`)7 ‘temp = []  ”  8 w in dirg  ü Ñfunc = getatt ,¯ § " pif call	(. ¤      m @.appW g 9 S  Úopublicì 2“ which do/2art‰"'_4… [— ›	 <in v íâame[0] != '_']ÚSÏq `is runGaá Õ trolled by¨
 ß“B  u3ect;    ) d Orunsb H ƒP d ú�'shutdownå`create
  ac_4  4get—!',2 T  °'debug_info+ ¢number_of_Æs Pdummy	 `incref
 !de
 !]
O zCinit{ õð
gistry, address, authkey,Czef ¡
Ž0 SbytesZ¶ /  ‘Ao ’#is\31!s‡W ‰À            ó   authkey, type( S)))
  ôself.registry =  
! 9 õ = process.AuthenticationString` = óListener, Client = l !_c Õ[serializer]
8 A# do¼ c e later" ¸ L 4 = j “(address= Ë, backlog=16ö " 9 = M . Ž  úid_to_obj = {'0': (None, ())}— + arefcouô {! ´local_proxyX ( ò	mutex = threading.Lock()› ðdef serve_forever(© %):� 5''' rRun the1 #r 2  +  F ‚.stop_ev´€ E (IpcurrentÎ  Á()._manager_£ rfq 6try©  Œpaccepte) o Tù �(target=™ ( „ > å.daemon = Truen 	# WstartÄ   �   ’while not!‡.is_set(l 0  ¨ . jwait(1±  exï ÿ (KeyboardInterrupt, SystemExit`  Epass× kfinallIñif sys.stdout != "__ Ð__: # what ab  ustderr?S Ä òutil.debug('resetting E , Jerr'Ó  ; z y c ,  erô  ¥ Yerr__,   gexit(0ùô´ ý
_ác–.I.W ¬zOSErrorX  õ kcontino ìÉ
÷	handle_request, args=(c,� ] tÓ$t.Ì1 
V 7, cIêHƒ Ð a new connecÎM  | , �funcname$0sulà ¼ 0 = 7 l[ ò.deliver_challenge(c,_d
T: Oansw9 › kc.recvÓ„ignore, Ö a, kwdsâ •Ò  eassert2 2 in¸ õpublic, '%r unrecognized' %- 	I  t ’ = getattµ‰ ÿ vE):ionxðmsg = ('#TRACEBACK', format_exc())
   belse:
  :try   ùresult = func(c, *args, **kwds)A �except E >ionN ûmsg = ('#TRACEBACK', format_exc()Q ¤  “ E ’RETURN', ¥ < Ê ¦c.send(msg% ® O as L Å 	e  ° i IpassJðutil.info('Failure to Ä ù  message: %r', Ò  m : ò ... request was2  
£ 6 ³ 6ion8 5e)
£ ƒc.close( ödef serve_client(self, conn)í 5'''A dHandle� ðs from the proxies in a particular µcess/threadH T Ä �debug('st; "ng— "r 7 DQrviceG  9 * Âing.current_ h().namarecv =æ . N §    Àid_to_obj = #. [’while not" östop_event.is_set():-  ´ ì  `method± 2 = q ENoneŠ  $   0 = Â ( ! vident, P ",   þ7 _Y –  Q õobj, exposed, gettypeid = [u ]T •� KeyError°k± b      ƒ \t  0  ³`local_­yÐ²  : ¶    Šraise keß " 'if�$inDP L ‘Attribute0(Ý 'ßa %r of ‹bject ism o=%r' %H (H  w , ØU(obj)ï^ Ý   H    ot�=%@attrM Š5  ÷3resÃ T (Ä € ³È jiŒžERROR', eæ j e    $ü0andñ  I.getU Åa  K !ifr/idÀ     rident,ÿ rexposed = self.create(conn, typeid, res)
  �token = T (3 M ÿ address, ridentD ômsg = ('#PROXY', (˜ !, ` )< _else:š V sRETURN'É 	0 þexcept AttributeErrorS ÿif methodname is Nonz v ÿTRACEBACK', format_exc(Ë  Ç >try� ‰Ôfallback_funcÁ †mapping[¸ ]ú F   •result = >  S (0  4  â", )ßÿ, obj, *args, **kwdsB 
Ô \ Dº/ulBÄEË?ion2X œ	² Z /OFðutil.debug('got EOF -- exiting thread serv I%r',`  ì  / Âing.current_ 0().x0@sys.l I(0)
Y ¹ Š  Ñ Žsend(msg³ š @ ü('#UNSERIALIZABLEI
^ Z O as ¤ ³binfo('2 oion in¬—©u ð ... message was  ,6 ° 8 e < “~.close( 2126deföŸgetvalue(Ý)Z`returnòy	G ?strB  , ?objŽ ?repH - I ÉE = {"¥'__str__':' 6str›0'__O 	!   " —#GETVALUED >h }TdummyHGpass&  J_�‚+ 5'''Z R soŽð,nfo --- useful to spot problems with refcounting
        ''3'
  õ# Perhaps include debug info about 'c'?0 õwith self.mutex:  P ¹result = [] Ákeys = list(< ð id_to_refcount.  =())4 j.sort( Ðfor ident in 9 
ƒ  ‡ #if" n!= '0'!  % ¬ à.append('  %s: 4   ˜ P=%s\n Y%s' %ž    (™ , 
ä [ /],F H str'3obj> ›[0])[:75],òreturn '\n'.join(Ý !)
n ñdef number_of_objectsa F, c)&''N0 ³ of shared 7 Q  ù - ñ# Doesn't use (len^ .ðobj) - 1) as we should. ý«6='0} Ï H –Ö rshutdowo Í S' ß this processÊ 6try ç Qutil.ô('manager received  š message'ª0c.s[÷('#RETURN', None¼jexceptr õimport traceback¨  �  §.print_exckfinallÂ pÐstop_event.seRV  acreate°ÿ, c, typeid, /, *args, **kwds(C? j a new+S and Êaits idt  Æ <P
ñ	callable, exposed, metho>ª Pproxy E = \d  h  �registry[- 2id]% 4if o 1 isª
™ ) 0if 2 orç "g) != 1  )  ÿraise ValueError(¡ p  "Witho† ú, must have one non-keyword argument"r v Pobj =! :s[0†NelseÓ 0 u (õ#ˆ"! ’= public_± s(	ý -ifÍ W ?not}  ²isinstance(\  KÓo, dict‹
?TypŠMdq {0!r}:€ {1!s}, Š  m �".formatÙ •©  ± À ) 7   Q? 2) +OZ  :   vð = '%x' % id(obj) ÿ # convert to string because xmlrpclib
  ù# only has 32 bit signed integersF ðutil.debug('%r callable retur6 ùobject with id %r', typeid, ident)
Q ñ self.id_to_obj[# ñ] = (obj, set(exposed), metho+ R )J "ifa ‡ not in Z ™refcount:1  %  „ 0« ( uncref(cÊ  B   þ  u, tuple· D ‚def get_Ã  s(P ¶, c, token)™ 5'''¥ RUC theû As of sshared mÂindicated byQ C O ¦ Ÿ  � x‡ s.id][1]¢ ³ öaccept_connection¹ Oname¸ ñSpawn a new thread¦�erve this¼P © 4 Âing.current_ 0().v 0 =  ; ö	c.send(('#RETURN', None)í s€ —_client(cå i× % “„Û Ì  f.mutex¬ û:try   - Õ{VE+= 1º  ,  excþ  KeyError as keS ñ# If no external references exist but an·! 0(to,	m  q ó
# manager) still does and²b  ³ rebN  ð from it, restorãec €'s trackŸaof it . ?theI  ópreviously stash„Í Mref.3 ò
î°local_proxyTL £¢ /   3 	«\™  .   2 • : úö,6î( =Ó‚ D ¨Sùpr re-en­d”‚& INCREF¨ùP ?els‘  à †raise keä!de# ù L³¥‹
T™ ÔQ
æÿ  !DEé Pskipp�šY (Ô uÒ   þ
(if”ìJ<= 0˜  Q 5PAsserRö(u * ð"Id {0!s} ({1!r}) has refcÿount {2:n}, not 1+".format(
  ñident, self.id_to_obj[ /],6 / @refcy 4 )))5 ) Y -= 1, (if‡ X i == 0:0  Ò ?del5 
0 1if Ô /in4 
] ð2# Two-step process in case the object turns out to contain other
ž  #D #xy6 ù
s (e.g. a managed list of 5s).¾  H 0# OX èwise, deletingÈ ¸à would trigger° J ?  of ñ stored value (anÂ Ž ì r) which\ P !in
q attempbacquir-úmutex that is already held hereè 2Ò Ð= (None, (), 
 p)  # thK Y-safe’ ðutil.debug('dispos, of�Ò with id %r',
³  † ¸ 
 Št¦ À


#
# Classð represent stateâôar
#

c) S (en á__slots__ = ['—!']â ±INITIAL = 0 „STARTED LÂSHUTDOWN = 2Ž @Mappþ ðfrom serializer name¥ ðListener and Cli¯ Ptypes¢  ™  "_c 1= {w ô'pickle' : (connection.L , T )M¬'xmlrpclib< ?Xml? 3XmlB z }Ö `Definiu  VQBaseMLX 
^1'''K  !  „3forï!rs $ á_registry = {} ¢_Server = 	 e`def __” 0__(> , address=¯“, authkey ‰=L! a 1ctx0 )  $ifJ  L [     g   =s ·“.current_Ç3().$ Î  4  ¯ #._¯ $ =¹   a # XXX6Ufinal Æif eg ('', 0@J ë „  Authentica³sString(‡ > ,"=  . ‚ <.Ð c' =ù& t¼ l! =”û[O Š 3 `ctx =  por get_	Vext()  s8Ñj P  ReQ ­  a°< ð_forever() method and address at“tribute
  5''' ñ
if self._state.value != S …INITIAL:/  B 3 =3 zSTARTED3  7 ùraise ProcessError("Already started server")p /elr HUTDOWNs ýManager has shut downr /seN 	¨  å   €"UnknownÖ ýte {!r}".format(l)ì �return S* “registry,¦�address,y  % Uuthke4 Áserializer)
8 ¢def connec‘ )ì C# # m2Óobject to the«" pÐX  ý A óListener, Client = l !_c [¢ ]I  ¡ # =: þ " aâ =?  J�dispatch(E ö , None, 'dummy'& = øÄ. … c, initP=Z   args=()K{Spawn a5› for thiscM©ÿ\˜(ifq is notgA and �callable(/ +BType'+ ´ must be a J '¾ ; ó# pipe over which we will retrieve ,  oá V¾  s •„writer =ùion.Pipe(duplex=Falseu sÇóy ErunsÚd \* =™Cctx.(+  Ð ±target=typefr)._run_
íi` o 
@  o )", 	ß  q )D D"idØñ ':'.join(str(i)ÚCi inŠ 	!._0 6ityB Ê ! xname = 	_ Á__  + '-' + D ?
@ ©ð )

        # geót address of server
  åwriter.close() dself._7 ×= reader.recv&  = > ÷# register a finalizt ] ñ state.value = S uSTARTEDI * óshutdown = util.FQ ('  Ì  + p, type( 4)._y ™_manager,0 Qargs=+ °._process, : ÷  juthkey?  s  0 Ê . zClient). éexitpriority=0ˆ !)
 Á@classmethod ’def _run_±S(cls,W4ry,Ò3, až  Ùii", Ö
„ ² c  init) a=None, 1)):}  , 5''' €Create ae 0ver‰ „port itsŠ µ and run it7 C ó# bpo-36368: protectO    €õ from KeyboardInterrupt signalsW  . ( ƒ.SIGINT,-   C_IGN^ Ð !ifé û € is not ô (   (*- H 2# c™– Y‘ = cls._S (±	^ Õinform parentcof the1'v~ òb.send(™ .¾Õ$ ¯!un_ *V p ‘ #(' ‚  ing at %r'ö Pm …  “_forever(é ÜF‚¸€id, /, *p�, **kwds�ò	new shared object; returÏ Qtoken™Õexposed tupleß  Passer’ ùÒœ�1, 'Õ r@¶yet started/0con®Nè [·=$  «;try–4d, Å °= dispatch(j ,Å2, 'R@', (Rid,)+LJö l`  I KTGT ô]U, id)š Ë ÞAjoinó ‘, timeoutlÏ2Joi±e‘  (µöt has been spawned(Â#ifœ > ãu' .¬ ¦ Z fä
/ —is_alive(Í  -   	* ! =™q_debug_P * A È RÁPsome , a about ysósâ Áaection)À     '''
     òconn = self._Client( óaddress, authkey=   )
>   Etry:   ðreturn dispatch(c ö, None, 'debug_info'C kfinallG  7 ‘.close()
a ñdef _number_of_objects¯ )ƒ 1'''.  ‹ R‹ Bthe 8 ³ of shared ? , 8  | Y� Õ $Œ_enter__#ifâñstate.value == S vINITIALC ;îfstart(©H !H zSTARTEDH 3 {   ñraise ProcessError("Unable to ˜ † server"Ÿ  9 /elr ŠSHUTDOWN¦  : s ýManager has shut downr /seN k n  €"UnknownÔ äte {!r}".forma‰´)ì f §S_exit ¢, exc_type
 2val	 'tb/ A .Û  Ú j@t �icmethod· |¨Rize_m"(p ,, -,Ï #, Tq h@Shutx  ¢U  U ð; will be registeµTas a ‡ rš  IT $ifB §.is_alive(  / Putil.„‘('sendingÝŠ amessagf‘ Œ = ð  1î (=D¿ 5   N   ?©”  1 E       M   �except E >ionÉBpassb4 ¡ú.join(timeout=1.0Þ ˆ Q Œp0 stùºè   ifŽFattr»'terminate'ë c   g 0tryòEto `7 D()`  ß {   I  .; ‡    ( 	%:0.1%. -/ Î ¶ 5u after ¢ '@ð     state.valueó = State.SHUTDOWN
  Etry:   ódel BaseProxy._address_to_local[ ]5 ú except KeyErrorN Qpass
+ ‘@property Cdef J f(self)7 preturn   C µclassmethodF ðregister(cls, typeid, callable=None, pÍ    rexposed K  û  c  ô  4 i( ‚ create_ W=True· 5'''I R” # a‘ ñ with the manager 0 < Rif '_Õ öry' not in cls.__dict__+ ±  0 " =*  r.copy()? . &if@ is 
P +q = AutoA :4 = 
 µor getattr(< C, '_  1_',f … A_= =  Eor \  º  s F |  -ifl 
 àfor key, value|\list([ ý	.items()): # isinstance?´ aassertðP(key)v€str, '%r  á°a string' %| D 
— F & ¶	%[ÕY] = (k 5,Ü,,K	; Þ*if)
_ ùAtempö÷, /, *args, **kwdsQñòutil.debug('requestingd ôion of a shared %r object')§  T Qtokenã # =fÙ(’ A æ& =I
F d   h È´serializer,= ,^  ; qauthkey" #._ ³ ¶?exp7 ì Econnæ qClient(˜ .}#, ^ 
l J �dispatch(S ÒÃ, 'decref', V Nid,)< Ò8	¹  	±.__name__ =%iÛ   s[	Þ 8 ¡)

#
# Sub �set which‘A cleòafter a fork
#

/ €ProcessLÔsSet(set| ¢�__init__¦  Ž Œ]1er_Z _X ( €, lambdaƒ: .ƒ (X nreduceZ $ ƒM 0), ¸ ã 0DefŽ ìœÌ  (ý± À '''
    A bñase for proxies of shared objects
    ''' ò_address_to_local = {} ñmutex = util.ForkAwareThreadLock()
) ñ$def __init__(self, token, serializer, manager=None,8  ˆ  rauthkey ƒ exposed µincref=TrueH å_owned=False):P ñwith BaseProxy._Ä   o ¸tls_idset =* 	Q.get(È .  , ¼ )l  M 6if P !is" 
o  & # NLt±(), Process JSet(g  E Ö ‘ µ[¨ 6] =• £ @  # œò._tls is used to record the connection bby thi1B tý 7 Ácommunicate u A ä2 at:3‚ £ >[0]¦ ¢¨ sidentitÞ3allâg #ì
Rwhichá `urrent m÷ owns references andD 8 aare in? ß » á 1á  ! ¨  t  Did =¬  &.i– " ‰ =VB xJ …& 0CliÁ= listener_c [? (][» À# Should be @0to ”À only when a[#xy gÆbeing createÇ :# oSð server; primary€Ù case: nestedX %s.Ê ‘# Rebuildð@ detã
� 9is † | L 0andÙ s÷ö value appropriatelyy ‰…M_by_’ Ø3if ã ?not+ T ' =ô  §P.Authò caœsString(' (Celif7Ž ?is j z 7 #._\ JelseÖ1 (  « cb"_pÏ3().$ 	
ÑR  Z u~0reg¤Ãr_after_forkj ™Õ/ )W ¡debug('mak¥ÿ$toZ'aOnameë 
 ! 4 .Ding.@0().+ ’ != 'MainS'" ’+= '|' + 9 K Àe
        coònn = self._Client( òtoken.address, authkey=  3)
  ðdispatch(conn, None, 'accept_ öection', (name,); R Ftls.( 0 =  
` ñ def _callmethod  ",  M ñ args=(), kwds={}):9  œ 5''' pTry to K # aA ö of the referent and return a copy" EsultM Y 6tryr  v  ½ W
Û A  exú  AttributeErrorG òutil.debug('thread %r does not ow¤ $nn^]  …  = ping.curç _ 0().B� 4 ‘ Ã Ject(   Ù }  % a.send(¬N._id°­€kind, ref r.recv() › 0if ' Ú == '#RETURN'3»G ’ )el: [PROXY9  exposed, tù# =Š C   •proxytypeñmanager._registry[? .% yid][-1]B  VF 	 	0 r 1 =   U (  • = ,ÃÃserializer, œ ³ ,@ Ì'  #, = 7 H™ B Ë F`decref;R (id? 8 õ%© PraiseG�vert_to_ea(@gZa�getvalue³A;Get3 "Dƒ $¤ ]Î¸'#GETVALUE'�  inõ � #ifè“owned_by_×
8* ð  skipped INCREF¼ 4%r'@b
Þ¼ ‡ á½îÙ @ à6$û  ðT 
ðÜ Ã À …E 0set�S “n @MstatÔ
= e!._)  @clos> š 1Fin€
¨ ) p, BasePC"._Ô
�Æ + !._H•” 
5  ¿  4tls3 Tidset ¢)9 À    exitprio—rity=10
  !)
 Ñ@staticmethod ðdef _decref(token, authkey, - ñ	e, tls, idset, _Client):=  a  ‚.discardC 3.idp  ! ö# check whether manager is still aliveP fx    rNone or ö.value == State.STARTEDŠ m Etelld ðthis process no lon{ õcares about referent�  G :tryX   ñ	util.debug('DECREF %r', 7ô  &  dconn =5uaddressh=p)‚  G �dispatch(H  , 2, '­3', P Jid,)< �except E �ion as eÐ B... Y ç failed %s', eÈ;elsE 5 --ùalready shutdown-ï !Ñwe can close Â thH 0's 	0ectÔ fbecaus8U# theì1ownñDmoreãòces to objects for^ ‘� bif notòÑ and hasattr(	'„ ' °³ 0 %r>  {Š ¡proxies soß 1ingÓ %',}  H  G ping.cur§_ z().nameøFtls.ž .A(# 0delÐ' ÷ after_fork(selfÞ   #._)! =‹³ -. !inU€ —Åáxy may just be¬aWQwhichXYŒ  ;‡binfo('„ Ó:Ô% %Õô œ_reduce__ó •kwds = {}\ ðif get_spawning_popen()© 0 Ÿ
e C #['ßR'] =  z ² Z d " ÷, '_isauto', False‹ 0 Y wexposedY  _³  - ÿreturn (RebuildProxypR(Auto  ª Û, Àserializer, ‚ vv Btype~j w à ¿ƒdeepcopyÁg, memo/ˆ  WQ._getE(×C Crepr? 9 C'<%s3 , ª  idÕÁat %#x>' % \Ž  j (' Ñ 0.__§)__Ú .!  idU' 	� /stŽ  5'''g RÑ · @esenÒÐon of the refóerent (or a fall-back if that fails)
  5''' Etry:    öreturn self._callmethod('__repr__'I �except E ?ionJ  6 (O ñ)[:-1] + "; '__str__()'ž òJed>"

#
# Function used for unpickling
#

def RebuildProxy(func, token, serializer, kwds)“ ò ] 	  pO ‘ objects.8 ðserver = getattr(process.curz_ â(), '_manager_6 r', None6 if£  L 3and Á.address == Ç  ¼  •Ãutil.debug('ý $ a± ƒwned by w C=%r' {  H ckwds[')  _o: ‘'] = Trueñ  %  6Ðoken.id not i  À.id_to_localò fxy_obj¦  = ô * [Þ  ids \p  7   	; 6obj/ + ¡incref = (  2  Ï b.pop(' !',Ê U) and%  Ã ·óinheriting', Fals´ j C r(Ì ,Ãq… = @, **  )×±s to createÀ0ies®  ty typesæAMakeãòType(name, exposed, _cache={})€ªR¿ Q r whose È°s are given4`Q `/E  “ = tuple( 	2Ž [¥ !)]U %‚KeyError¯  TQpass
# ‚dic = {}  ô ­  yz 5 €exec('''!%sX¥, /, *argst0 ¡  €	ÏB%r, 3 ¥p''' % (w ,*r), dic)’ † �B(Bas¢,/  Ø . #._¿ 4_ =ºð /5 = < ( ½  ÿAAuto …Ý=t’, authkey T  ¢  �   ¶=
SnN "o-' ¥`
;@_Cli‹Á= listener_c %[s›B][1]Y$if1 is'ºsconn = Q ë Ù á › Ø 	Ÿ  ç À = dispatch([ –p, 'get_øbods', h &,)Q kfinall& B s.close($ if mË Ø�   ‰ –ã ½ $ =¼#._ «S 	; Àhkey = proceõ#ss.current_process().authkey

    ProxyType = Make a('Auto ñ[%s]' % token.typeid, exposed)G pG & =O (- ó, serializer, manager= #, Š = ,K  – 
 rincref= p ñ ._isauto = True> qreturn � `

#
# Ý òs/callables which we will register with SyncM¦ ñ
#

class Namespace(object):j ódef __init__(self, /, **kwds#  Ç   ñ.__dict__.update($ F CreprF ; Áitems = listb H  "() g ‘temp = []V   ñfor name, value in 6 ¾  "   aif not) p.starts	G('_'‰  )    e à.append('%s=%r(f ’ f.sort(¦ žq'%s(%s)=  kP__.__N à__, ', '.join(w $))�VÎ ‹ ¦4codþ p, lock='Ø | + 4 =  E" A=I  ý"ge–Q à 6 . s. �5 .  d /__i I�r, %r)'%(¾ ()G^    Ò ˜   =3�perty(get¸@t)

ç QArray\ A nquenceS• a1 . 7  )–YpŸs used by~�Iterator1 B(Bas£@_†à_ = ('__next__;@send Pthrow	 bclose'ô  Ø ___itev Æ  (½Y ^h, *argä3  ._jimethod‘ 3 Q  ž M  4 :', I ß J 5 K !K 5 K ¤Acquireµa,  £Yrelea¥ – bÅ1ingÈã, timeout=None ¦ ! . T,) if- @ is 0 u else ($     G Õ” õ  -  Q¾ ¬ � H 0 	“/en”
aŒ ·  † Ð__exit__(self¢, exc_type
 2val	 ctb):
  ð4return self._callmethod('release')


class ConditionProxy(AcquirerP R ò _exposed_ = ('a" 5', N p, 'wait fnotify
 a_all')™ @def ' (— ã, timeout=Nonei  ¾ »  ; C', (8 &,)V u X ?n=1O 4  Q nK  ¶ O J  3 é A_forF ¿, predicateø fsult =+ (á  Pif re  ã  , d  $if\€ is not c
: 0endH! =+ á.monotonic() + 5outQ Oelse?  [ )  ~  §[ 	 QwhileŽ ¯ 
Q 4if “ ´ ^ 0 -° Ã 	�  6 iy— J<= 0|  "   Ybreak<  ©.Ñ (  ? “ 2 Ê ´
�oREventkABase
 e
gQis_seS PclearY Œ j) hI › / @ ?set=  ‹  Í’ < . x  Ç = Ä  ;  º ’0outÀ`bBarrie¿(bõ__getattribute__\q, 'abor}*reô  { ¶ 7 ª Jo W Ã. J¤ > . > ‘@property÷ Š partiesN E #('E '™ ã g  n_I?ingi +G k obrokenh +D e i‚NamespacÃk _à zS__del c_Àattr__(self,ƒ key):
   if ¦[0] == '_'  ! ðreturn object.__getattribute__(self,@ )P Ïcallmethod =8 &'_- 'B t  ,('y ’', (key,)6 rdef __sœ — , valueï &S ñ M{ ì Ë ò 0delŽò ë &L ä Mt ä À))


class V¹¡Proxy(Base
 Ý ó	_exposed_ = ('get', 'setD 1get�2 Ë ³.yA Vs: ;˜A  { 1, (k“ ñ = property(get, set)
V!__ç  QPitem_Ì  <ð(types.GenericAlias 
AListb = MakiType('  Tk €'__add__&¤__contains 2del�  8get 0len) H 0mul � '__rever…X r sE : `appendb Acoun°3ext Pindex Qinser 0pop ‚remove',E r   "so( 2__iw " #))<#;   1__i%ëä¯ 
çY‡ ` ™ ` Ê Ib _

Dic ýòDiteräþ×p 'clearŒ@copy ˆ >s³@keys Ð0pop   ‘setdefaulð`update 8!s'I&))ì "._@_to_iþ{( 3'__¶ ³: 'Iteratorƒ Ÿ}


Array3 3ù  è{ ± wOPoolc  b Aappl5	 `_asyncþ Aclos1ima  ‘_unordereACjoinÜ '% 6mapC Cstar  ð _async', 'termiñ#nate',
    ))
BasePoolProxy._method_to_typeid_ = {, ð'apply_async': 'A	 cResultN O'map  
Ostar$ @imap_ „Iterator\   ©_unordered" Ÿ …}
class Ì (Ú !):& ódef __enter__(self  preturn  - 3xit, Q, exc
 2val	 'tbG  @ `.termijó()

#
# Definition of SyncManager
#
»  ½ ! [ 1'''– 2Subê @of `ä ' ð
` which supports a numberp àshared object Û1s.
O 2The p regist^ð are those intended for the öphronizaÍ D ÷ of threads, plus `dict`, `list` and `Namespace`z ó`multiprocessing.Í €()` funcc � creates ?ñted instances of€ Qthis .  +
N.Û °('Queue', q . )+ �Joinable% 3 sEvent', Ð  !,  cn ILock:   ¯, Acquirer< 
R, 	=  > €SemaphorÇ ¹  F 0Bou(7 	�  ~ t	 í ACondH	b  %,  4
yBarrierE  #, 	 A 
ÀPool', pool. ,{ä 0',  o, Lista 
 D0',  _, Dic. 1ValÙ !,  _ 
�Array',   1 
Á5',   = %
#P Obed by W ±&wù  p” ­= d ,­o=Falset	§9  0cMemory“ÆS BServ¿Âif HAS_SHMEMh�( _/ rTracker   ÷"Y ãs one or more ©mz ² segments."­ 7 Ã L–Tname,- _ Cs=[]8 4 Ð    self.sharð
ed_memory_context_name =  '
  ²self.segmen% Is =  
0 Ódef register_$ (A ,2 %):2  i ò"Adds the supplied shared £ a blockš Ù to tracker."E ãutil.debug(f"R„ v # {� æ ù!r} in pid {getpid()}")O  µ 
ö ˆ.append(J )û destroyú ò""Calls unlink() on	  Bwith &¬ñand removes it from2 rlist ofIss beingHOd.""JDÓ I:¢ I 	 c h«!.S M¸? |.close(ØÉ.q
Á  ý¤¨â±4allM¹sª4forO� Œ r 
o:[:]& ' „ .L ‘q__del__ƒÑ 	0 Ý  $álf.__class__._R C__}.G  © 1@† �getstate‹ qreturn ¦ .úò	� D‹j sj !, x ü G¢__init__(*# 
þ  jrServer( "):'  Ž’public =  . 9+ \K + 1 ['·¸', 'release  ¨ 6s']k  Y±  ¿ Ð, *args, **kw
 ã “ 4 	¨ baddresÞ3lf. 	# c# The   Q�Linux absÞ t£ùspaces can be bytesD ãif isinstance(L ,) Å  :! ä = os.fsdecode7 Ü $@/ =” _åTUƒ(f"shm_{v /}_ð	@J z x~rted byi ×acreateýï, c, typeid, /ãA"""C< ò a new distributed-Fð object (not backed by a shgared
  ÷2memory block) and return its id to be used in a Proxy Object."""
L ð	 # Unless set up as a shu   p9 Ã, don't make _‚ ‰_context� #? ñtandard part of kwargs.  ThisJ ûs things easier for supplyingQ ùsimple functions.  òif hasattr(self.registry[typeid][-1], "_Ô » Û 9"):K  « *['/ ê Q'] = f  	M ”ÑServer.create¢ R, c, � 0, *B, **x %)
D Ädef shutdown8 ° ð"Call unlink() on  stracked¬ ¬ó, terminate the — 
Ú .e Ÿ  ,
ã ­ 
Ì — „_segmentÑ #,  \_nameß 0Add(eiÔ  :  ôÓ 1's j ?er.Ý 3'erž ¦ • 
Ç wrelease+ !lfÒÉ 	"ªs« †F£Ï Awith£ õ  á 	xóÑmoves it from2 ù � instance	 *idñ"wdestroyê Dlist( sÜÎ1""R§ a 1   Û s	 
  û!atÙ Û	Âis currentlyò=ingÞ¢Ù·"s
ìqclass SMmÃManager(Base ß Ã"""Like Sync @ butƒ
G È  —@teadø  .x  T ItwÑvides methodsA7ingð  ¥ X  øs* * [>  { -l¯ o! (D ²ableList) b?#byBM J®.  It also© Qthat l e¨ 	�œ -  åð ort synchronizaäp acrossb ðcesses (i.e. multi-pro U-safež  sv ¶semaphores)+ ø, _w) =å ‹ ‚ƒ__init__Õ¯
@`if os.Ôº == "posix"#  ãò# bpo-36867: Ensur£ðresource_tracker is runÛning before
  €# launch# ÿthe manager process, so that concurrentD  Ðshared_memoryD øipulation both in ] 3and L  f ‚ ÿ does not create two resource_trackerG  Á =es. ßfrom . importL m °.ensure_runZ)()a RBaseMEð.__init__(self, *args, **kw
 
8 àutil.debug(f"{1 ó.__class__.__name__}õd by pid {getpid()}")
ˆ “def __del{ %):  ÿk .B k  G  Jpass| ¡get_serverú  p'BetterW²n monkeypatƒñfor now; merge into SJ É ultimately'Î 2if .ñstate.value != S zINITIAL º 7 =7 ~STARTED7  ; rraise P"ñ	Error("Already started SMÁ "ð I /el† HUTDOWN‡ w †ï has shut down† /seb 	{ Ä  €"Unknownñ te {!r}".format'._ )creturnÇ.4 “registry, @addr—‡ � eauthke> «serializer-7z k, size¹A"""Rª ys a newåá instance withï‘specifiedM 9 in¶ Òbytes, to be È×)I."""4 [ Û TClien[ ñ =$  @) asÀnæisms = ¿.SNone,vR=True=	œ  z>tryd   1disär(conn, V 'ö ð_segment', (sms.ê,! C pexcept `E  ^Oas er  K kunlink¡ L   Æ
‰mÑrableList ‘_quenc%< &!po#&ed0»sU« ‚input set 7À
           ò with self._Client( óaddress, authkey=  Ë) as conn:
  ðsl = shared_memory.S pableLis` }quence); >tryP  _ �dispatch(s þ, None, 'track_segment', (sl.shm.name,)_ Áexcept BaseE 0ionÈ eu N ~unlink(O  ™ yraise eÊ ð*return sl
#
# Module providing the `Pool` class for manag a* ‚cess pooB €multipro @ing/ 1.py^ ðTCopyright (c) 2006-2008, R Oudkerk
# Licensed to PSF under a Contributor Agreement.
#

__all__ = ['« ¡', 'Thread !]
} pImports1 i Ó collections
 …itertool o
 Tqueue( t_ 5ing &im …raceback 5ypeH õ warnings

# If J � is avail{ x&n Å ” should bœð	ed.  Therefore
# we avoi7‚p-level Ô âs which are li] óo fail on some systems.
from .9 [ util ó
get_context, TimeoutError(  òSE Bwait�ðConstants representD b¤state of aI�
INIT = " P"
RUN  RUN"
CLOSE 	 ¡"
TERMINAT  "u ÁMiscellaneouüåjob_counter = ð. ò()

def mapstar(args)p(lQmap(* 0  - 4 j - ] P[0], J R[1]))³ @Hackýðembed stringificaª %premote Qg– in local  æ°R- T“(LØ  ï �__init__MC, tb  4Iqtb = tb91 3str0 , $3 "

‚ r EWith‰ VM 	~ ;excƒ ~ Â ‚.format_ ô ion(type(exc), = ª  ¿ < ¦''.join(tb¥ Pexc =5 0  5 ú \n"""\n%s"""' % oreduceprebuild¥  ê ±› _ 7&  À ÷ Àexc.__cause_ÙÆÊ r2exc<ôCode run by worker¢eþ’�MaybeEncoã¿p"""WrapÙñ ssible unpickleBeôPs, soªry can bYpsafely ß Ý@ough$ Á socket."""
nûWvalueUÀself.exc = r£epr(exc)
  àself.value = r  ! ð
uper(MaybeEncodingError, ; °).__init__( B.exc T !)
i “def __str' !):  ƒ �return "T @ sena ò result: '%s'. Reason B" % k ¨ ,I  M  ´ 	¨  © †<%s: %s>‰ ò__class__.__name__@)


ú óworker(inqueue, out
  :àializer=None,  òargs=(), maxtasks ê ówrap_exception=FalseUDif (9 € is not \ Q) and µ(isinstance*  z tõI J d C>= 1|  7 °raise Asserœ Ø3("MË T {!r}— Õvalid".format‹ )‡ Uput =,A.put ge L2.ge —if hasattg—'_writer'� 8  r.close(q  ½ ›…._reader! | !if ²Æ  ]Ð Á!  (*  Î_Ñcompleted = 0R Uwhileè R  N 7 orÄ m: <. × 6try‚  È  7g = getÝ 0Q (EOF–A, OS	 J  = Âutil.debug('¼T got 7  ž 9 Æ -- exiting'E D Rbreaký  1if “ !isŒ
­ p �sentinele àjob, i, func, x�, kwds =} q � .n` = (Tr¡ A "(*A  **C ” > FE}Z as eÑ :if ¡{ V  â ‘¡_helper_re/sÌ
J q 5 = n ôWithTraceback(e, e.__t *__†Ù "6, e  Tput((D: ÷  ô pÝ. « T 6[1]…  à ÿ³"Possible ek  el (!%s…Ù N   ‰ ¾   	à (+ £ ) ªQ= job Š! =V! =W$ =X ® ¥A+= 1 Ü K0‘ after %dœUs' % @ )8%3(ex´�'Pickle-a5Uª  {ð for use by _guardedñ<_task_generation.'
    raise ex

#
# Class representing a process pool
#

c% ñ_PoolCache(dict):O 1""" I ðthat implements a c1 � for the C ! cO + ±will notifyF  $ ¡pool managE ñ threads every timeK Y ñ is emptied. TheE P !icõ ± is done by6 Ðuse of a queuI  ° sò ¡vided whenE ‘instantia ˜ q . õ òdef __init__(self, /, *args,× óier=None, **kwds6 ‰ 0 .¬ Eer =0 b ! uuper().b Y J 
) ƒ udelitem†   k J ) # D  m 1# N‡ ˜ð  @ ay_ is PimporP becaQtyH Ààkeeps maintainWÑworkers untilŒQ² gets drainÄ!isØ L �eliminateK race condiÏÀ in which a ê › Ñfinished afterL  Ô  œ ´'s _handle_” Ðmethod has en: £another it= 5
ç ñloop. In this situq,Û @only±"ntP±can wake up   ˆ › !is Tto beÖ‘ (no moreä Âs available)Š ' if< P”      bP.put(‹#)
Ñ•Pool(objeÍ"''$Í^0supððs an async versionPapplyÞ@func–‘s to argu .ä V °_wrap_excep+ r = Trueƒr@static‰6  ÙP‰E(ctxWþê ´return ctx.0 )	¬è#es£  Uializµ   ÎA=(),–  W 0maxz“sperchildG qcontext …�# AttribuÎ Y k pd early8m" suí HÂthey exist i• z ×# __del__() i)Ú¨d´ _w[ = []  }‚e = INIT� j 4 Pctx =w Ô 0 or±_ã ,()I Qetup_\s  , " =!.S+Q‹. #Ê• _change_"; %toO¦ 
Ñ	M  Ó_¨!._l)5ß Ù )  re "a �  | E_/@variŠ   ¨ð=runfYà =Â ._Éë º 7 = �$Ð=self._changeÃ_notifier)
  ü
self._maxtasksperchild =  2 çinitializer =  (  Cargs%   
# õif processes is None:  ¢  õ= os.cpu_count() or 1, 	J :< 1F øraise ValueError("Number o� ùmust be at least 1")¬ æ  ® 1not² P and  —callable() )Š 3Typ‰ '+  �  J '� ª :tryp 5 örepopulate_pool(ÿ�except E :ion> ’for p in G  < 
!  £ {�.exitcodeÆ '   ·p.terminate„   j kp.join: Ü§€sentinelq¶ Eget_ (QÁworker_handlÌ±threading.T
 (^ © Ãtarget=Pool.5 _C )s,)  ê"=(ƒ ccache,F iEqueu 3ctx P
I  v  < ò1 Ï )inW 2out 	— N |D iâ s › Rwrap_O0ion@ ‰   dochangeƒ  “ ’2Saõ r.daemon = TrueÐ + Ï_state = RUN* Pstart'  ¡z ? =  A   šÖ”quick_put+»Dpool. ^AO s Ó M
	) K	( I {   ™dresultw J"C L*	K%geKe ¨ 
+ !* #± = util.FinU
u Pî3 ü¼ xt ¢ðqueue, self._inqøueue, self._outq }pool,
  . ô change_notifierE Æworker_handl Etask S eresult( — jcache)‰ ù exitpriority=15R ) © Ástate = RUN
 ð# Copy globals as function loc óto make sure that they are availableK ðduring Python shutdown when5 ñ Pool is destroyed.9 Àdef __del__(§ €, _warn= Pings.	 ,´ a=RUN):5  Š#if× Ø   # J ð(f"unclosed runn¥ Àmultiprocess  á  { J!r}"b I Ð  ResourceWarB ",  =4 h , £if getattrÐ +'_"€', None)1not 
¹  H  Z .; Q.put(= Â>Crepr?!Scls =$…_class__>óreturn (f'<{cls.__module__}. pqualnam % '9  ›   !f'x=6!._ }(  ]¡_size={len ._ W)}>')È Ñget_sentinels( Î 9–$ B = ['²•._reader]°    œ; �B +/[*ƒ ?, *b ]Ú @�icmethod– ´ ì "ó  sö |  .+ R for  1 inV  ”  �s if has‹ 4, "C /")¡ Pjoin_^2ed_= !s(µªô"""Cleanup after any– ]âes which have O õ due to reaching¿  their specI°d lifetime. ¯`s True× j €s were c‰ Red upW 5"""\   b= Fals´ $  Ið i in reversed(rÎ(ªï )Ž 1 0 =  &[ii  #if .ë Ocodeä#/ ®  L   Áutil.debug('Â  ­$up6 z%d' % i€ 8 ¥ .Ä( J Aed =Ou =delÝ ˆ: ÚÈ¡repopulateÓ¶8  # Y	, 4!ic3 S._ctx:P˜† Ü  b v= À        selfÿ	._pool, self._inqueue,
  ; 2out< K ŸitializerO !�initargs< !ÿmaxtasksperchildD !ñwrap_exception)
Ñ@staticmethod ñ def _repopulateM_& ò(ctx, Process, p	 e rlZ T  " Þ :Ì  óð"""Bring the number of $Â a up to# “specified- kðfor use after reapW øworkers which have exited.ƒ   E µi in range(Dp - len(— &))¾  Â 4w =u‚ G2et=z    ,   K$=(• uŒ -   †“+  f -, ‘: ¯)/ ’w.name = 	 £.replace('{‘', 'PoolW{'= Ûdaemon = TrueY jstart(2  tš.append(w òutil.debug('added u'?�maintain=´» 6¡š-|uf€"""Clean3anyÁì as and 9 Š`ments ËUthem.d5""" âif Pool._join__>sç€  }- y"t  H  
Hï[  ‹ú#E �’€asetup_~ s(Ž  Ø# =�°ctx.SimpleQðã0 þ1 •quick_put2 =Â._writer.sen3 Ó f 5 &ge5 x ×._reader.recvê Ücheck_runningë #ifÞ  €Še != RUN7ðraise ValueError("ð2Pool not running")

    def apply(self, func, args=(), kwds={}):
-   1'''9   ð Equivalent of `<  (*< @, **; 5)`.- P‚ tmust be† . W preturn ‘ .œ p_async(` œ ™ g).get(É 9mapÇ ÿ
iterable, chunksize=None)Ï AÇ à` to each elemá Din `P õ
`, collecting the resultsÏ ñin a list that is rÕ /edó I_mapò w —, mapstarÐ    ,`Like `E À)` method buË esñ ù õ are expected to4be Â ðs as well and will€unpacked @argup…s. HenceF ^`8 á(a, b) becomes³ \*9  `¡ ¤5å > n¢, callback Ó  Cierror_! ž ð hronous version†`² 	­@,µ  ¹  Â *, Ò žó	_guarded_task_generation³CL_jobQ
³Provides a D  or V ¡s for imap) 	 �_unorderep%thÈ ðappropriate handlË> 5ðs which throw excep® …s duringI ÷  .Ä6trye ,ei = -16   n °, x in enum!e(P (bl¥ -   xyield (*i-•(x,), {})c ³ $ Eº  _e• Q ò+1, _helper_reraises_L tion, (ei j  A hÆ¤Ä 1Ç=  Õ EÊ`-- can°MUCH slowerM‚n `Pool.( .G } –ƒ._check_ð(&ifZ == 1^€ = IMapI1torÞ C  ¸ e  v¥queue.put(Ž  !      ; � .
ˆ2 ƒset_lengçÀ            G))
  Õreturn result Uelse:  / úif chunksize < 1  " ùraise ValueError(@  "   %"CF ÿmust be 1+, not {0:n}".format>  B ‡ Ê ð
task_batches = Pool._get_ ös(func, iterable,Î  	€ = IMapI. Štor(self(   .[ �queue.pu³  Å ; qguardedC Â_generation(Šo._job,B  mapstar; ! (A)A � ­set_length£ –`’(item forx$ is  "in !)
T ñdef imap_unordered†/, É6=1)–1'''G  *`Like `M ñ ()` method but Y cing ofõ s is arbitrary.C O Àæcheck_running(	),==*B`UÛ imUþ=õ M^d&!r^EXåv€  Nº¹apply_asyncKúargs=(), kwds={}, callback=None
eÛ_! vAi ð hronous versioni`ˆ Še!Q@ = AÔ R½Ô › &, « Àback)
      ñ8  self._taskqueue.put(([(result._job, 0, func, args, kwds)], None))
    rreturn : 
 àdef map_async(k J ðiterable, chunksize=P ¢, callback G _ ™   error_! %):" 5''' Aq õhronous version of `map()` method.0 < È  ® &._¾ ¸ wmapstarÁ ¼ ,Y  » 
· )^  n Xmappec $3aHelperÚtÀto implement¶ , à ámap and their Éß counterpartsD Ï õ._check_running()ö if not hasattr(T—'__len__'× B" u = list2 L# fJ1 is� " iö, extra = divmod(lenS  ,  Á –pool) * 4¼  J "ifB 
`   d X += 1ñ  U Ç j) == 0> : 2= 0# Q  ™ñ_batches = Pool._get²,s(•F ± �q = MapRÖ‰, ò � Ç �  
Ö=  I Ç ` O (   3 qguardedé p_genera§	š;  ?  O6  ¼ ƒ)Ú k  ¶	R ü 
 TŒÞr@staticŠA  .ð_wait_for_updates(sentinelsj°ange_notifiqtimeout3 D 8 '  — QwhileŒ)ch[ w.empty(T  ë % Cget(ƒl@classÍ ñhandle_workers(cÅ `ache, Vò, ctx, Process, p	 .esk „    —C, in@ 3out
 �initializ  ±] 8  0max‡ ðsperchild, wrap_excepl&, }E 3’thread = 	 Âing.current_ = ˜ à# Keep maintai1 7` until�  c<ñ gets drained, unless  ¨ #—terminateìÀwhile threadô._state == RUN or (cache and thread# ÷!= TERMINATE):
  òcls._maintain_pool(ctx, Process, p	 e Ùool, inqueue,G R  2out) À initializer? oitargs@ ùmaxtasksperchild, wrap_exception)
‚ ñcurrent_sentinels = [*ß ¦get_worker (ë E), *0 ]P  ýwait_for_updates(f õ, change_notifier)– `# send ‘ ’ to stop ‹ s(  æ *–.put(NoneD Âutil.debug('8 ó handler exiting'@�icmethod\ Rdef _. _d  s( j v, put, £ !, @!F# =ODing. (}  ô@for a öseq, set_length in iter} a.get, è 
Œ > ! = Á  V   :try)   #V aw É cannot failA  0 Ÿ  �  i >seqU  ) #ifï >?RUN-  1 ¤ Z ¢?fou‹FRUN'â B  ]break¾  "      ; } Y 5$ E<_ as eÒ €job, idxúask[:2]’  y – 
 ! Uÿ[job]._set(idx, (False, e)±  9 µ �KeyError¯  - 6pasR    ?elsæ 'if£Z ÛWdoing6 /()Æ=01] S@ask � ? -1L6 &O + 1 coä-ueI =ofinall@  -àœseq = job} ° 
B `Ur gotê“ ƒÕ# tell result+âto finish when‰™ is emptyç ‚  m¢  elp
f °þw	j ª wps there” qno moreÈ	1 › W ”  ¦p£ ‘
{ð    put(None)
    ñexcept OSError:
  õutil.debug('task handler go2 Ð when sending •tinels')
K G texiting, Ñ@staticmethod> Rdef _u ö_results(outqueue, get, cache)¸ ’thread = 	 Âing.current_ (š vwhile 1>  ù :try   ÿ =s !()›     @(AQ, EOFK”  (   	Ï 	R: /L F -- # A  freturnf  #if÷  ._LŽe != RUNÏ kassert- ò== TERMINATE, "TJfnot in "ÿ  v × Zfoundg =d 'J K ^breakÔ  }~is NoneÌ   ¨1sen“n °job, i, objD9askï ƒ²[job]._set(? 
Ý '1KeyÆ Jpassk  õ s= job =�   ½} , af úi
n Ä ßà’ !Pignor¤Uextraª  co2)ue�˜§if hasattr- '_;er'˜>Aensu#Tthat i@ is Kfull.ð# If we don't make room available:H IthenTð# attempts to ad*eš  (ð) C ;mayB Ðblock.  There«  guaranteed: õbe no more than 2_ )s.J Pfor iÄ ‹range(10= ³  !if"§ .lo.poll(4  8 ï 
  ?geti(Mß ãÀ'result handù!ler exiting: len(cache)=%s, thread._state=%s',
  0 - !)
* @: �icmethod ñdef _get_tasks(func, it, size):$  c Õit = iter(it) vwhile 1'  +  x = tuple(0 °tools.islic Y C  2 Šif not xH   ereturnp   cyield ª xÙ Ç ç_reduce__(self½ ùraise NotImplementedError(Z ð  'pool objects can— ûbe passed between processes or pickled'K ™ \close” Àutil.debug('! @ing ~ '0if É ðz == RUN$	  i CLOSEˆ   åworker_handlerP 0 ÷	change_notifier.put(NoneÔ �terminatØ 
% Ü  ™  �Æe = TERMINAT½   A 'e({ OjoinN	   r  N(RValue "Pöis still running"£+elW  1Ain (‹,Ù Ž Åj ±In unknown e Å æ (‰ $  Åç" oresult$ fÐ3 inx �
p#p.V fOøhelp_stuff_finish(inqueue, ¡ a # ð may be blocked tryÖ`to put‹cms on [ �  ZXQremov5  ÝT from0 a untilq   ­ (edƒ¹ 0._r† p.acquirŽ k   × ô .is_alive() andq  ._¼ MKoll(Å $ GrecvÝ i Ãtime.sleep(0l@classÍ4_¿0(cl93ask‚k S, out  ( +, õ[ „  
‰Ô
a", ¿	åð his is guaranteÜQo onlï¿called onceÔpfinalizÖ ¸ ' › #ãÚify that the « Y` has bÇò @d so- n ## _? `s loop �$un‘(Þ «0ed)4‡order toI @send\  [ ¶ @atio]¡ntinel all Àworkers.
     ðworker_handler._state = TERMINATE
&   õchange_notifier.put(None)
# OtaskK 	) ðutil.debug('helping =  ˆ /— Õs to finish')= Pcls._6 r_stuff_! ‘(inqueue,I † ·, len(pool)¨ äif (not result, ð.is_alive()) and (< Õcache) != 0):„  ùraise AssertionError("  & @"Canl Qhave M X with| 0er " | "§ Ÿ œ" ƒ   1out·  
 ¦# sentinelÓò# We must wait for the  ¯ §õexit before terminating#4 ðs because we don'Z %nt Pto beõtarted behind our back.Q D@joinD
— 4òif threading.current_ Q() is�> 
í
 .q («3# Tô €s which ø å  al yÏ&edÉ 0if ¡sqhasattr²d[0], 'L+e' % sý  æ ¹Ap ink 
Û    „ .Ã@code Ú'  + $p.n e�   ‹ Ó� � < ‹ ‰‡ H­‰ > ‹ 
 �  V?oolÚ)K"…Û!ÛÕž2 ha@yet %edq ý gAclea~#upÆÆ %d' % p.pid¸<   p,÷def __enter__(selfì  °._check_runj (U preturn % µL 3xitK ¢, exc_type
 2val	 ,tbf 	Ù€#
# ClasÉñose instances are rx   ñy `Pool.apply_async()`
#

c> A Rj˜(object):« 'in«  ç`, callí0, eU_ ° _/ ! =Ô§ —._event =öðEvent()
        sóelf._job = next(job_counter)
  s& ácache = pool._ " ²llback = ca " derror_ : =  . d [~ pjob] =  
'  def ready( !):  ± areturn* ö._event.is_set(): ¬successful? bif not? ` \ ` °aise ValueEÏ q("{0!r}6 1 ‚".formatZ G	™ � ’ 2wai2 ç, timeout=None}  è Ò . ( × /geD 
=  Ô   ù T� û t"if1_× Ž Z 	ù v99 Kelse- _ì , -  ïÅ  �, i, obj ,Ž @   =+ E  � « †3and0 ? 
‘  q  ðÑÕ!._Z ÛU 
Ð [ N_ 
8 e * ÒÏ Ð   3delÂ 3÷ =  ¼0 = Yzð__class_getitem__¼  ó method(types.GenericAlias)

AsyncResult = Apply  � À  # create a1 ð -- see #17805

#
# Cc ñ whose instances are r¾€ed by `PkPmap_ar q()`
#

± B Mapt (€ "):Ö -q_init__L,¶õ, chunksize, length,ª,Œ\b /._W î,o	 
å= M«Œu = TrueY  @ = [Ê3] *Î & î  Õú $ &if_ <= 0÷ number_lefë0=  Ú ‹ b
�  ”ýS 
u ©&//Î r+ bool( & %Ç 

,M!_rµÛq E-= 1ç 8 ", 9  �9J )   ôW > XÁ2[i*) Û l:(i+1)  ù� p  b t š	0É	+ ðcallback:
        ò self._callback( yvalue)
) r   del ! bcache[ Mjob]+  ®event.set(M " µpool = NoneD Uelse:  … óif not success andˆ  
.  2 ù# only store first exception[  - ‹ L v = Fals�  "   & ™ = resultK #if– ÿnumber_left == 0Ÿ Ãconsider theR ø ready once all jobs are d# �   s UerrorÇq  - Á 
* ñjò

#
# Class whose instanceò ñreturned by `Pool.imap()`
#

c7 ñIMapIterator(object):
–Ádef __init__æ  , m)  ! = 8 *�cond = th“�ing.CondiB( fLock()ßU üjob = next(job_counter& F|  „&chvH àitems = collec{ ws.dequeQ* ‹ndex = 0Å llengthc4 punsorteå +{}8 œ â! =Ý	\3ter\V¶- 
 u  , timeout=ó7 Awith5  ._x¦ �:try    –  ._ Ps.popu ) ù  I"E(L  »i%  µ ­ "._>0  W " ? Î B   “raise Sto¨Šion fromó. T  c.wait(-9)    	 -  ' f 8 Î " * &2 TMÖWŠÔ$, ·   Ø S
âÃ4 - £    __Ö#__é •  W# XXX3 
 �, i, obj  © ¨�i²  y  Y 	`append;À            ûself._index += 1
  hwhile ' #in �unsorted:5  D [obj =* W.pop(L ): ! ÿ tems.append(obj, 
À M Êcond.notify(I NelseÁ 6 á ©[i] = obj
° #ifß ?=î nlengthU 3del1 bcache[e Ijob]W  = ²pool = Nonez ’def _set_c K",  )q Dwithj +on [ 4 # == 	� Ø R c Ñ ü +ð8#
# Class whose instances are returned by `Pool.imap_unordered()`
#

clA TIMapU �Iterator(  *):mf i,fiÄ
8=| U¥�.C`Threadi( ó_wrap_exception = Fals¹Ñ@staticmethodm ËóProcess(ctx, *args, **kwdsT  :ófrom .dummy import 8 H  #  (J Ís_init__Ñp~ 0es=a ,  wializer  – 7=()‘  ô /._L 	G   B )† Ásetup_queues‹ \ ö!in 1 =  €.SimpleQ2 ¾, 1out% - •quick_putšk E.putOY , &ge, k G.getÐ Íget_sentinelÑ ›ì€change_n‰Pier._I2er]N %_` gworkerg  (j M óhelp_stuff_finish(÷, task_handler, size™…# drain . @and Iú ó at its head to make §  l b6try® Âf?TruŒ s  vq(block=YÇt,KEmpt] Epass{ ð for i in range(‡size):
  ñinqueue.put(None)
 ÷0def _wait_for_updates(self, sentinels, change_notifier, timeoute   p.sleep(   ¤
import os
 ó signal

from .   ñ8util

__all__ = ['Popen']

#
# Start child process using fork
#

class 5 s(object™  method = '+ 'ô s_init__ë W C_obj:  ; ˜ ñ._flush_std_streams(); "  )à.returncode = \
 Ÿfinalizer ˆ_launch(‚ § ‘duplicateŸ² 'fd© ‚ 6 fd: Dpoll+ çlag=os.WNOHANG8 <if Â !isÃ 
=:try  ü àpid, sts = os.D1pids . Fflag* 2 îexcept OSErrorR 9# Cåõnot yet created. See #1731717e Z   Ñ# e.errno == 	 p.ECHILD -100 5	± H `if pid5 >pidª  A øàstatus_to_exit F(sts4 v· GDc=¡ ´ $if¥@ is K I Ë ‹Smultiƒäing.connection¤ ™ C!ifY   !([4]À »  ^ 	 ” 	W ñ# This shouldn't block if f ") 9 `ed sucifully.D # eoý I Ÿ â¯0.0 else 0£b_send_Ê«7sigç V*Sos.ki»H ] 	ß GPoLookupROpass< ƒ¼ m)P=0.1)E ­A ÒVraiseÆ‘terminate $
A‡.SIGTERM–? GKILL? X r ,7à ŸE = 1"€parent_rñRild_wÜGpipeõ‡ % / &  y  ÁC  C gi0Vo“os.close(v r² ‚Ð    os.close(»parent_w)
  ócode = process_obj._bootstrap(8 úsentinel=child_rG �finally:\ �os._exit(e 4 Jelse- ’os.close(` §  ~ Qself.ƒ Ðizer = util.F” @ize( , c ]_fds,ª  3r, 6w,)Í  +  d .$ Mn!r
h Adef { Œ )ú 1if : ½ «is not Non!
( Ä()
import io
 óos

from .context # ñreduction, set_spawning_popen
ifr % ò.HAVE_SEND_HANDLE¯ qraise Iu ÑError('No sup† ôfor sending fds betweenUCes')œ • «forkserver – _  ¸   êð


__all__ = ['PÖ ð']

#
# Wrapper   ðan fd used while launch³ a© ó
#

class _DupFd(object³ È�__init__ËS, ind Pind = üadetach2 - `return› 	à.get_inherited§1()[ø3indÑ aStart %´ 2 usÄ O Ë (X. Š Pmetho± 'sC 'º # =
Ê8S 
 Ã  ”]P  uuper().D > c �duplicate_î >=, fo e .æVnd(fd—_1len; .( V) - 1g _  ,8 É Áprep_data = ‚¦  0araU (È f._name‰ 0buf¦o.BytesIO( �Œ ! +trU§Pdump(ˆ � V, buf8  l+ à- ~¾›   •)> ` šôX, w =Ìó connect_to_new_ ß ‹•# Keep a ö� of the w€pipe's w� end as am�+ M £Îð!byP I .4 _3 _Â wos.dup(€ç #^?({  ›%lfC_Pwith Ô’(w, 'wb',L€fd=True)f¤ –  !f..Ð(buf.getbuffecr())
  ñself.pid = forkserver.read_signed(" ¡sentinel)
: �def poll ñ, flag=os.WNOHANG):%  b 1if @ öreturncode is None$  ( õfrom multiprocessing.connection import wait\  8 átimeout = 0 if‰ F == Œ Q elseq 	8 Rif noP !([¢ â 3], U Ç  k   Ç O :tryÐ  - W 2 ù b <  ñexcept (OSError, EOF
 �  Ñ# This shouldß ÷happen usually, but perhaps theò	 } ## ‰0 itÉ ½ got killed,    .é 2255) K  
Ó$io
 Aos

 ùDtextöAreduó, set_spawning_popen3 ,  _Ë 6  ðutil

__all__ = ['PS °']


#
# WrAr(ô an fd used while launching a,ó
#

class _DupFd(object¬ 5„__init__9d  (GfŠd 1 adetach/ + S"fd­ ´Start child�   uHö a fresh interpreterª ò (7. l Pmetho’ '?'ûÛ # =ä è « Ü @C_objN å @_fdso]P  uuper().D > c �duplicateâ_ì =, fJ e .ÀVnd(fdò< 7 z º ÌK { Öšgõresource_trackerÉ  _È& v.getfd(Œ ó© ? % Áprep_data = ‡ G _ 0ara (· f._nameB ù fp = io.BytesIO� P; Ú�`.dump(‡ € F, fp7  Z* Ù 
, 0finŸk = é(6€ " ¢parent_r =õ%_w
       9 ¡«) 'r,G wos.pipe) r pC_r, 3  \ * m5­Öcommand_line(ä= ,¡  j  
 š ƒ_handle=“ 
yVðextend([child_r, chilwd_w])
  ñself.pid = util.spawnv_passfds( ù.get_executable(),C N  Qcmd, g O_fds~  ùsentinel = parent_r` £with open( ùw, 'wb', closefd=False) as f:;  �  f.write(fpÈ †buffer()ˆ zfinally9 qfds_to_a Y = []W ¤for fd in “ $r,¼ *w)J  ƒ !if/ ®s not None#  ' u ¦.append(fdª  $ I³ Dizer¶FÄ @ize( ,Ê¼  s(, Y /)
Ë ’child_r, 	 É (1os.~ ¾ £import os

 dmsvcrt esignal y' ó_winapi

from .context E °reduction, ž¨Ping_p) p*t_ G @    �

__all__ö 'PN Q']

# ð
TERMINATE = 0x10000
WINEX ð(sys.platform == 'win32' and¥ @attr$ Â, 'frozen', º)E `SERVICI  H o@.low²P.endsó("pythonservice.exe")


def _path_eq(p1, p2Œ�return p1– �p2 or os.+ Ð.normcase(p1)  02)
Ÿ QENV =Ád 
¨  ,  W_base-™ £_handles(*	 ¡  Q  U
 s% .CðHC (%  _ ñ#
# We define a µñ class similar to the one Oósubprocess, but
# whose constructor takes a ) p objectfòits argument.
#

m y (' Ù 1'''o†Start a x  “ 1run— }code ofl ; C Pmetho¨'¼'Èõs_init__þ° C_obj†  9Áprep_data = A  _ 0araI (= g._name0 # read end­ òpipe will be duplicated byÔ  N<É  † ‚# -- seeƒ p_main()ô“ 6py.+ 
 ñ bpo-33929: Previously,h “ ¹as "stolen"� P æ üÒ it leaked a V1 if\ 	Ä — had beenH btermin÷ PeforeM ±could stealF T x …ÆW ñ r) 2, w	 5 = ù reatePipe(?6, 0 wfU.°B_osfB ð(whandle, 0)
    ð    cmd = spawn.get_command_line(parent_pid=os ppid(),
9  Òpipe_handle=r ): w ð' '.join('"%s"' % x for x inš %)
1 ©python_exe¯ ·executable(- ð
# bpo-35797: When runningX õa venv, we bypass the redirectq "# \ ñ	or and launch our base P� ./ ‘if WINENV. –_path_eq(· b, sys.T  ° %):<  K)  à @ys._g  ð à 	. öenv = os.environ.copy(_ R óenv["__PYVENV_LAUNCHER__"]b Œ \ Jelse˜ j FNoneŒúwith open(wfd, 'wb', closefd=True) as to_childP õ # start processz  ² :try-   ð hp, ht, pid, ti®ò _winapi.CreatePJ (K  :   W,Q» Þ ",  ¡False, 0, %   
] \ ‡  ú Hé:(ht( nexceptÖ < % e   Grais  ù	# set attributes of self  !.p3>pid �returncodT ä # Á^ = hp úsentinel = int(hpý € ófinalizer = util.F ( 1, _9h s¡ ò   B .… ,„ E) ;  1ñnd information to ¡Ø !t_Qing_på ¨ 
Ù ©PreducY õ.dump(prep_data,

E  – 4 O_obj6 Ol( -se¹  Óòdef duplicate_forœB#, ž§aassertR@ is Ì F Aÿ h (X ,H ¨’ Cwaitƒ �timeout=´ ‰ i×.e «!is«$  I3if B  °  E 
   $ „msecs = |‰INFINITE ; Rmax(0io Ì* 1000 + 0.5u(rep ðWaitForSingleObject(7 `.1), § _  1if K ¼ ÞWAIT_OBJECT_0ë ). ðGetExitCodeProcess(self»._handle)
  ýif code == TERMINATE:&  5 ' À -signal.SIG1 + ³self.return2   
(   '   �def poll( )‡ 4 ö wait(timeout=0)9 œterminate> ,ifn † is Noneb  á :try   ”_winapi.T^ ±Process(inti [,A
gîexcept OSErrorc   	Ú O1.0)§  –   Rraiseÿ ukill =   NMclos ^ó.finalizer()
#
# Module providing the `î ð` class which emulates `threa. !.T
 `K bmultip(Cing/ 1.py óXCopyright (c) 2006-2008, R Oudkerk
# Licensed to PSF under a Contributor Agreement.
#

__all__ = ['Base» Ã', 'current_‰   õactive_children',¡i   'pa0 !]
¹ pImportsm i C os

 &sy ! …itertool 4ó
from _weakrefset L qWeakSetu  m ™ðORIGINAL_DIR = os.path.abs ï(os.getcwd())
v@  e ñ Public functionã ?
9(”1'''/Rç 4 ô object representF( ; C Û_$ £ 

 ¥ tlist of_ ‡ °s correspon¡ HQlive ò, )es� ’_cleanup(Áœ  ` (*")
œ 
#› q“ E Ž 	Œ } _# #‹ƒ ¯ U´# check forS e´Ñhave finishedi & K in à L  bÁif p._popen.—’?not=  ².discard(p)\TH ÕQ©(?cÆBsC €ity that+0runÏ ‘a separatÍ ™ ˆ u Àis analogousÇ  ÿ £ Š _Pñ¡  " ƒ� NotImplŠ!edår 9 q_init__; €, group=yƒ, target Cname ±args=(), kw ){}� y ±  *, daemon5 ” ðassert group is None,ó 'group argument must be None for now'
  ñcount = next(_process_ 5er)' ô
self._identity = _current3  1+ (@ ,? oconfig=  l.copy(7 "pai ïid = os.getpid' Onamec   Ï qpopen = Pclosep [False Ptarge5	  Ðargs = tuple( Ð  kw ‚ = dict( $  ®  – Í €or type(„@).__ Å__ + '-' + \€ Ó ñ ':'.join(str(i)úPi in G ®y ñif daemon is not:] ; % =. ! Ò_dangling.add­ 
 ²def _check_W [ #if•    Ê óraise ValueError("¥p object® 8 &")p <runf &''ö�Method to1run3ub-[ P; can •overridde" Qclass×  � T Æ 
Æ :_ "(*  3, * \  3_startÅ 	S! s child ¹ = ™ n 	�öcassert€!isû`, 'can	Š $ ae f twiceM
C ­	®,© ` l only b Û³created by o„ ~  ¨ ”WRget('¸/')‰  $ic_ aes areaallowe,Bhavep6ren‚ Ž_cleanup’`�P Ð§ sVXnel =ˆ. . ò# Avoid a refcycle if the Yð function holds a¶gdirectD �referenceÿ = <Pæ(see bpo-30775*3delŸ n , ÇÊ Åm _�?renƒterminatÙ0UT% šõ; sends SIGTERM signal or uses 0 PÊ”W ®  .¥ ]BkillÉµ OKILLµ >À   self._popñen.kill()

    def join(self, timeout=None):"  & 5''' õWait until child process terminates, 8  a õ._check_closed()) rassert $ ñparent_pid == os.getpid(), 'can onlyµ * aƒ ¥ 
P Àopen is not Ú H  estarteÍ J Tres =™  I c.wait()Â 0if + f ? C_-±ren.discardr†‚is_alive = DåReturn whetherz1is ; O4 Tx!ifÛ  B_curxÐ‚  ¿ rz ETruef 
eµNtestµQ Ž 0._pi •  ®‰ RFalseÃŸ Kcode­!poì $   ¦ D+ !isa 	ê Jelse& Ï e  4«  nüå	Cb the PŠ† object.ï ðThis method releasesïources held byD f  It i¢÷an error to call t[ !ifC ºmåstill running.¿vË}
H
( .¯ú WÀraise ValueE· P("CanZ V% a¦ pwhile iì  ¯ % "±  R  ò"You should first) ) .ìF()." M pÂ.– ç  ! =€	� 1del“©._sentinel x~ x Ad = ÆA ‘@property  ‰=namm³F  ! t@ ~.setter@  ,  /°isinstance(! P, strÄ    must be a 6ingr} ! =Z „ Á Rdaemoº} †0 > Î  —7 	`config„"('4 1', Ô½@  é,m /ic¨ ?SetÕ8 ¥ e.o74, '”ðhas already starteCd'
  ò
self._config['daemon'] =  1ic
+ ‘@property Àdef authkey(A !):  S preturn  W , #']M  q.setter< S ,a \ &''¸ 1Set" ñ	orization key of processU  ‘ 5 – Á = AuthenticL sString(§ )¶ Œexitcodes R +  , £ ÿ or `None` if it has yet to stopÃ 	Õheck_closed()) #ify�popen is _ � 	¡( ?  o.poll(_identþ ( ¿ifier (PID)5artž VÉ
 ÿ “_current_ˆos.getpiJOelse- z 8H andpB.pid+apid = ö  ?sn?nel>ð	a file descriptor (Unix)@òhandle (Windows) suitable foY ôpwaiting  q terminï.d?tryÝ X ûexcept AttributeErrorA ’aise Valu #("´ñ not started") from×Z 8Œ__repr__L ut=1    '!£status = '€ €#elF .‡
Î : ¥9 "paœgid != ‡L unknownM ó� xinitialA è5ì	 ? 5if - !is§o - €  ×'pe  l  5 ü'ñ  ³info = [typ}À.__name__, '	 c=%r' %ž  ]Œ¸Åº  e ö .append('pid=%sS <  ñ}6nfo0 Û
3  O_pid4 ñ  _�4= _ 1_to Ö( Ð, exitcode)
   ôinfo.append('exitcode=%s' %  $)
0 õ if self.daemon:    	J ! ': Àreturn '<%s>\ �' '.join(7 !)
J "## ð def _bootstrap(r ö, parent_sentinel=None)‚ ñfrom . import util, context\  ¢ ±global _curL £process, _]   ò_counter, _children£  O 6try€   ð_start_method is not ° 
/  3 £ y._force9 ø . O < _¯ ¥ Ñ = itertools.¹ +(12 Å z = set(  5`._clos‰ ;din  4olds - =Ff› cp *lf$ 
u S PäP|(.  V  	.¬Rname,Ž =pid(
ã þif threading._HAVE_THREAD_NATIVE_ID¤2 Rmain_ û()._set_native_id- Á bû	finalizer_registry.clearB 1 �run_after&Kkers* Q l� ? �# delay ! �ization oce old Aá object until j |?# _‡   Ý�executed3 0delf 4	  
 û!('”‹ rcallingÙWrun()E Ô Y. 	f  0 ÅI = 0 6œ _8 P_func5qúexcept SystemExit as e6Pif e.I  ù _ " — òelif isinstance(I W, intï Ú   G ) 	ã ;elsš  4 ósys.stderr.write(strg {) + '\ns 5 i 1d 
ü )  B ›•tracebackF   ” '` %s:\n2ä ö
ÓP §.print_exc®åÂ|shutdowëŸ$ Ø  ™Ewith0 %d›    Í
š E ð_flush_std_stream½û @ ó&

#
# We subclass bytes to avoid accidental transmissÔòauth keys over network
#

J ÀAuthenticatióonString(bytes):
    def __reduce__(self   ñfrom .context import get_spawning_popenJ  0 /if  ¢() is Nones  )   õraise TypeError(F     ô
'Pickling an AuthenticatiÊ p object_ '> þdisallowed for security reasons2 )D _returt ", @+ô ,)


#
# Create‘ `repres¯ ñng the parent process
#

class _P P S(Base 1):
� ¡CinitŸÒ, name, pid, d 'el´ Ã@._id~ fty = (Ø   @ ! =G c  l Ppid =Z  ¦ _  Ê   ! =å PcloseV [False ¿ % =Ê " ¶config = {}‚is_alive„V¯Smultii0ing¾0nec5ÁEwaitg ë@not  "([
š Ò], timeout=0)‚ ‘@propertyD   m� Y O 2pid=  / Ajoin. \  TÄ&''ž«Wait untilF± terminatesŠ  Ç9 !	ý Omain CMainõ(]‚  Úì'e [? œÝ?»¯'authkey':Çõ(os.urandom(32)),Ï Ó õ'semprefix': '/mp'}, ñ# Note that some versions of FreeBSD only ÿd> ñsemaphores to have# ?  up ö	14 characters.  ThereforÖð# we choose a sh/° .j 
 Ð On MacOSX in1 ðandbox it may be ne00ary€ uV > SdiffeX ï -- see #19478r pEverythU2in ©@willt öinherited by descendan2#Ä6es.ÕèÖ „pass


_cç)@_cur¿ _®G = _¨4()
 ñ_counter = itertools. Ñ(1)
_childrenGrt()
delK ÀProcess

#
#ð Give names to some return codes
#

_exit @_to_+ ¡ = {}

for: ð, signum in list( ñal.__dict__.items()):
    if6 ð[:3]=='SIG' and '_' notE  d ,  0   [-a  um] = f'-{/ ñ }'

# For debugR ð'leak testing
_dangling = WeakSet()
#
# Module implemen. Q queuý ò# multiprocessing/ 1.py= ðCopyright (c) 2006-2008, R Oudkerk
# LicensedbñPSF under a Contributor Agre .sÀ_all__ = ['QŒ Q', 'S£  ‚Joinable Ô]

import sys o
 `thread	& ¦collection$ 4ime: Etype tweakref ²errno

from) < z µEmpty, FullŽ _@8 .4 Bconnˆ Q  ðtext
_ForkingPickler = con Q.reduÂ .# c Dutilg ð, info, Finalize, register_af �fork, iss -äa   uÐ a pipe, buffÉ2nd ` »aclass 4 ¡(object):
ùódef __init__(self, maxsize=0, *, ctx$ ø$if V <= 0  Ñ# Can raise IøñError (see issues #3770
q#23400)†  >   ¿±.synchroniz ÆôSEM_VALUE_MAX as† >  » #._» / =   pBer, . Dwrit½ðö.Pipe(duplex=False¡ 5 PrlockñŒtx.Lock(! ÷opid = os.getpid!  if	ú.platform == 'win32'Ij wj ENoneè Oelse- 	c— 3sem¶  Boì³dSemaphore(6É µ`use byÚõ current.futures� ¨ €ignore_e€1 = 6# 1resÛ 
!
 ¦Í.$)ÑƒgetstateÕÂ©ñ assert_spawningV o (._â =5 Z,ï  Ü  1C9 æ 4sem  G	Ó sÓ !, á Ú ­ 6¦ " =Œ ï A õhÑ¬ ¼ Ðdebug('Queue.ó_after_fork()')
  Æself._reset(# q=True)
& Cdef !  - ', ' qFalse):(  Q 'if     < á._notempty._at� †_reinit(’ Oelse; 	ö = threading.Condition( fLock()Q z ð buffer = collec4 ws.deque| + K u = NoneÜ  Ojoin  Ácancelled = "D Oclos | Òsend_bytes = � vwriter. k Krecv3  ;6er. 3 Epoll` -   @put( Á, obj, block2 , timeout=:
 1 "._û 
ßðraise ValueError(f"Queue {4 r!r} is 9 "Öcif notÁsem.acquire(� Š …  †l BFullÏ   CwithH Ÿ
¡ #if ù!is
%  J  ° ‚._start_, \! ‹¶.append(objÖ % ‹ ‡.notify(Ž$ge€ì {ay D andò ¤ õ
[r&
  í rÍ“7 åhreleas³/"if“m €deadlineCôime.monotonic() +Ê  Ÿ 	fÃ h < lEï	T >try› µ  K W5 = Ã -° Ã 	e  6   	Á  Ç(L  ,  ¹    .elR K G 	÷ p S>em.û   ofinallQ 9 ³; ò# unserialize the data½ƒ having 6 d  ¾a÷return _ForkingPickler.loads(res¬Qqsize.&0# Rô GÁtImplementedþð on Mac OSX because of broken sem_getv-%‘ ô 0maxu à - self._sem._ñsemlock._get_value()

    def empty(self):   °return not  h._poll6 Ofull5 1 Usem._z xis_zeroB  � onowaitH 	—get(False² Gput_: ^, obj¼ ‡ œput(obj, D \closey 3 _ …d = True6try #- qreader.4 %(). kfinall2 % # =R 1  R 1if  
h   l  f = Non˜      `pjoin_th¡ è Ødebug('Queue.( &)'Ã Tasserÿ^ Ad, "4 a {0!r} s".formaÊÕ #ifì  d ‹ 
Ü Ø  À pcancel_ Ç /  Î j ) /leâ � ¼ .; çúexcept AttributeErrorã Fpassmo_startÐ 
*  Ë W0# SF  – ö which transfers data from buffer to pip3 g.clearÓ  [ =d Ring.TK†  uqtarget=y._feed,  Qargs=~"._p ,1noty ªsend_bytesB  f  4 wÆ1 Dwrity €ignore_eî G @on_qú° @er_eµC Jsem); Rname=,bFeeder	'é 3<t.daemonG. |SdoingØ m.(êõ ÷ 
 I �... doneL 0 !if±¤  ÕÎ:led±! y @ = FÎEize(M ¢ $, / ¼
M 8 Ã[weakref.refj .)]- ý exitpriority=-5�  X ð # Send sentinel÷3theÂ ó *õect when garbage collected] Ûþ  $ ò 4 
Æ [* ÿò 	î %10‘  ß ê Â@staticmetho²  Å_q1izetð (twr):
        ódebug('joining queue thread')
   v = twr( #if+ Õ is not None:6  = : .` 9   z 9...v  + e} ;elsU ;  al¸ 2y d¾ ‰ Ñ@staticmethod ðdef _finalize_close(buffer,Å fempty)Æ m Ltell"‡ to quit*EwithF E  ñ d ö.append(_sentinelO % 1not� ¡.notify()
´ Æ =eed¼ ñ
, send_bytes, writelock, ë ñ , ignore_epipe,^  y  ‚onerror,“N_sem
PstartÜ �feed data  X ¥nacquire =. } ynreleas$  $ HwaitE    pbpoplef! h " p5 = | úif sys.platform != 'win32'Äwº & =YÎ  Kw¿ 	)  v Ú`  LýP jhile 1Ž :try  * po  0    ifœ :S  #   nsX  MlŒ  5 ö 8  � wî  M  dobj = õ[  ) 0if ,  ispß  4 î Ñ$erÞ5got? p -- exiå ;  o›  0 freturnç   a# seriªB thedrbefore ‹‰ e ãYC    ú= _ForkingPickler.dumps(objƒ 1  5if “/isà )  {Y ûB  x BDH   –  , Í
 !  ã¡  Ðexcept IndexEQuIpass´8 E? {ion as ü ~ )ifÅñ and getattr(e, 'errno', 0) ==  b.EPIPE‡ À            °    return
  ÿ+# Since this runs in a daemon thread the resources it usesK  ðmay be become unusable whilb ÿ
e process is cleaning up.K  ðWe ignore errorsE ñ ch happen after— R /ha‘ ¢started top l ýif is_exiting():�  /ainfo('‹  !@queuÒ  Ÿ: %s', e)9 rwOelsej ‘ðe object has not been sentƒ  ”‡ Ÿ, we need€ #ü pdecreas² ‘e size of>A C. Thgo acts K  2# i6 — d“ öilently removed from` ˜  anYpis step ne0ary³ `have a1ßperly workingL È   €_sem.rel(©!onÞ0(e,w!)
M Â@staticmetho`‚def _on_W yfeeder_: ×1"""F  =ðPrivate API hook called when G  DdataÜ�backgrou& hK ðraises an exception.  For overridK öby concurrent.futuresi› Àimport tracev i  ð.print_exc()


_„`inel =,0ect a#
# A A typ÷°ch also supd ‘s join() ü²ask_done() a s
D 0Not© atoayou doþ 1' t5 ð for each finishç0askxàn
# eventually ð counter's semaphZ ¯ 3�flow caus9±Bad Things
<rð .
#

class Join×Q( "):/ð_init__(self, maxq§=0, *, ctxa< /._1 , =0 � Q D._unï _0s =V $.SÖ &(0à2 Ccond& PCondi1 ± —² 0getée¶ £ ¿ ª ) 1 + è  ._e ", q £ Ml sl !, z s l ) _[:-2]â } " =b V[-2:]§1putº î÷, block=True, timeout=None˜ #ifß fclosedç H”p ValueE°1(f"È   {0!r}á9 "¾ !ifÚ # .£�acquire(� Š … l BFullÏ   CwithŸ ðnotempty, self._conGd:
  úif self._thread is None%  0 & Sstart, )()J ! ÿbuffer.append(obj% ÿ	unfinished_tasks.releaseR ñnotempty.notify()
w @def = `_done(} )µ CwithØ >conó 3not ‹ ×acquire(FalseS    öraise ValueError('† ú	) called too many times's| ÿ_semlock._is_zero(�   ë  ._× H_allOjoin8• @wait� ð#
# Simplified Queue type -- really just a ô òed pipe
#

class< e7  HVect):û�__init__é ‡, *, ctx.& Ó3er,ìòwriter = connection.Pipe(duplex=ó^ êC  �  4 wtx.Lock¤! cpoll =c q . H  ðöys.platform == 'win32'±p wp  †C ;els“| - c� 4  Mclos7 ¦ " � &. P …ogvreturn P ú  þ Ñ  † £__getstate¬= òcontext.assert_spawningd x  F c  "._» 
Ò r; ,:__s‰ !, — � c # ü à ± G 	  ]¶ (  1getr ‚ ¸Í 
!<resR §recv_bytes˜ð
# unserialize the data afþshaving rd  8— p÷
_ForkingPickler.loads(resT"puÂ  , é­ /#   rbefore ` ƒ  ™ 	z lobj = y Pdumps© RXå´!# Éñ	s to a message oriented �r  a– Utomic ÇE cr.sendh ë ) ™Ãž  U   Y 
Z !__ ;`item__€ pmethod(Fðs.GenericAlias)
oñModule which deals � Àpickling of ñobjects.
#
# multiprocessing/reduction.py! ðhCopyright (c) 2006-2008, R Oudkerk
# Licensed to PSF under a Contributor Agreement.
#

from abc import ABCMeta
import cv 3eg
 ”functools $io
 o dpickle esocket #yst .r ÷context

__all__ = ['send_handle', 'recv �ForkingPi r! Qgiste ÿ*dump']


HAVE_SEND_HANDLE = (sys.platform == 'win32' or
   ’(hasattr(Ç ÿ, 'CMSG_LEN') and5  5 ¯SCM_RIGHTS7 .s  �msg')))
ù Ñ subclass
#

	  (‹.0 !):¯ 3''' A   u5,by‡A.'''4 q_extra_–‚ers = {} c"ô_dispatch_table =;. 
6 ó	def __init__(self, *args¢  ‰…super().' ! ?   ;elf\ 0 = L /._” . /()B 	q.update“ .ô )» @iRmethoþ Ì "reÂ(cls, type, ,Ò C'''R( # a  R`ion fo© ; u ç <cls‰ [% 3] =C —  
s” ÷obj, protocol=Noneš ÷buf = io.BytesIO%vcls(buf<  ).V F(objJðreturn buf.getbuff»™ @load0‹ $

1+ =³.  

Yl f, file† Â XAplacÖIm > 0) uRh Ú2
g í zl;Àspecific defÈ1ion‡?if c}‘# Windows‡ó+ôEDupHò�duplicatÿTsteal ]: ‘r_winapik18 (>“, target_\9�, inheri«q=False,V  r ™*, source= 8D'''D¨ 2 a r J.  (t 5 is Ä not a pid!)ƒ r ecurren§ 3 = Û R.GetC Pž n	¢  k  Ým Y   
Æ  œQ Ø ü +if/P ß += ¾ P Ë àDuplicateHandlGe(
  õsource_process, handle, target 	4 À0, inheritab, ñ_winapi.DUPLICATE_SAME_ACCESS)
< ¢def steal_b (y $idu !):*  � @'''S- # a‘ c from ¦ ö  identified by J E.'''D  Ú w 4 = ® ROpenP 
! 0PROÁ ÷_DUP_HANDLE, False,s )p 6tryÁ  Å ereturnp ¡DuplicateHc
t  0 ± ,h  +   § ¤GetCurrentÎ D), 0« 7 ­& |¯ ÍÆCLOSE_SOURCEï kfinalló ” DClosè × 3endžU(connò û destination_pid 6endÐover a local F  ec7 	ƒdh = Dup€ˆ,ñ  ¾,… Q f ‡.send(dhÏ HrecvÏ 
¶ Receive¹ Iq  _ £().detach(x WclassÛ jobjectz PPickl°° wrapper fo3
)öef __init__(self“"ac'‡pid=Noned  ” if pid is  
   ´# We just dD theå!in cÏï5andv F   Q# let. rS5ing0 h Ý >  ¥ Æ= os.getpid(× \  g)á ª	q  d  W.(l % < … ú	z  -   ,!$, ÄÌ0ý Ø E v Ü *
? Ø c # =l 	• " ‚2pid a  #Ø $ [C'''GòÏ ð.  This should only be calle )ceÕ b •# retrievr	Wcwhich ~©ly owns it¾ 0if � .‘) =DïTÝ has alread¨ &end‹tÍ  QIess.t  » | 	$ ZmZþð  from the proce÷ss whose pid is self._pid.
  ôproc = _winapi.OpenProcess( ùPROCESS_DUP_HANDLE, False,J U  | )2 Itry:  8 ereturn‘ ýDuplicateHandle(0  4  Å ,â h( ,A ¤GetCurrentØ )¸ ¥  acü á F úDUPLICATE_CLOSE_SOURCEÏ ofinallÓ  IDClosÈ  ³ r)

elsea# Unixß ð__all__ += ['DupFd', 'sendfds @recv ]/ Ñimport array
 ð4# On MacOSX we should acknowledge receipt of fds -- see Issue14669
WòACKNOWLEDGE = sys.platform == 'darwin's Cdef ¢ `(sock,X )Û  L ¢'''Send an© z @over €AF_UNIX < aet.'''Ê  ;  ¡ =6 .å B('i'` $ ömsg = bytes([len(fds) % 256]¦ ] .¦ Ámsg([msg], [¯ äet.SOL_SOCKET,† ¢SCM_RIGHTSo K 8if 1and5 .›¶(1) != b'A' Ê òraise RuntimeError('did not’(ve¦3men¢&')f b 1fds· j, sizegRÛ I j-a h=]_p  & Q.item *„ Šð, ancdata, flags, addrC1ock" €1g¶CMSG_SPACE(e )z !if" ä h .a _1EOF[’ g
¼
D  §'(Ãˆ   0if _€ è1B ésqved %d = H 5' %¯  f  z 
— Ácmsg_level,  Ctype  Š ³”"[06c Aif (2 >  Ù ÿ 	M andŸ 4  f 3 0“i  À 8  “  ŸaGN!= 0I = MBValu4‹ aa.from;Ë _ ' » y 0256£omsg[0]w 	‘AssertionT ¥ @"Leng¢{0:n} but \  `1!r}".9/atC  G  "3a),=     rflist(aðexcept (ValueError÷, IndexError):
  Epass Ñraise Runtime. ñ('Invalid data received')
5 òdef send_handle(conn,  ÷, destination_pidz “'''Send a, à over a local F  ec7 A.'''i  ² ñwith socket.fromfdp ¤.fileno(), uAF_UNIX úSOCK_STREAM) as s Á ‚fds(s, [» ]ß Hrecvß 
Æ RÉ s`return¥vÐ V1)[0]«{DupFd(fŠR7 ùa wrapper for an fd°popen_obj =¢ñtext.get_spawning_! %()°1if  4 ºis not None~µ * .¥  ñduplicate_for_chilÃ h úelif HAVE_SEND_HANDLEe  /õ
 . import resource_sharer±  e� # • (fdv sÊ >DValu<°SCM_RIGHTS Z"arð to be availableMñ#
# Try making some cal  ± types pick @
#

yó_reduce_method(mšûif m.__self__ istá  getattr, (- �class__,: ò func__.__name__ó (elï E r D b 2 _C˜ ¿  f(1 µ  {‹�register(õ ª(_C().f), ì /)
µ_descriptor© 1obj� ñ è 
| Plist.·-nd� k *)
7 ¿int.__add__7 
Ã “partial(p¹ “_rebuild_  P, (p.¡€, p.args ô keywords or {})	9 (5 3 1 
l  " ctools.m 4 *5 %**7 ó 4 «E 0)

ÝCMake Ëöif sys.platform == 'win32',ÿþ#(s¹  6Û°êADupS1äXR 5, (+ B(s),ô ¦�) ((d| M “ds.detachý4 .  6)

Uk Ð 	å Rdf = sð¥  ˆ 	¬ Àet, (df, s.fÐamily, s.type óproto)
    def _rebuild_socket(df, f5 3 1 :2  6 ò fd = df.detach(K   rreturn I . (L  ², fileno=fd= ’register(4 ; ,œ Cduce› ð)


class AbstractRe 0r(mŠ   ’=ABCMeta)® 4'''+ b base ? ñfor use in implementing a Q Btion* ó —suitable 7 `replac4 àthe standard r� ? ‘mechanismC @usedn ñmultiprocessing.'''  úForkingPickler =  $ $4 =   @dump�1ump çsend_handle =   Frecv  
 òif sys.platform == 'win32'Q æVstealD  D  $ €duplicatƒ   DDupH¡   Gelsej cendfdsÇ 1fds$  `  ¹  
  @DupF  Õ _—pe_metho 
 ; 
  _descripto� : @�partial =·	 (  ­Ì&  $ 9 %  Ñ ·ó_init__(self, *argsö!R Ã†(_C().f)Q}/ ½list.append4 ? ¿int.__add__? £functools.M²  t  ,4a#
# Weðña background threadÕ@sharÌ Rºon Unix, an g @s onQ €indows.
^ ñ
A client which wants to pÏµ a resource¹ s it with ? 0
# Š !er|  gets an idž@fierBrc‘.  The unc  » Uð  will connect
#† b ` ,s} _  ò rits pidÿ Ðthen receivesN %heÌ  û ¤
import os
 esignal R y' |°ing

from .ˆ J Ç  tcontext Ç ^  ÿutil

__all__ = ['stop']


Ð5 +6 ADupS²  ;  . w(objectf1'''´ wr3rRaâ O ·  UP  & 1new$ öwock.dupc "  H  Ø(è,¯C Ð    share = nûew_sock.share(pid)
  ñconn.send_bytes(+ 
' ñself._id = _resource_( °r.register(C 4, nr uclose)
o °def detach(O %):  � °'''Get the ° ðet.  This should only be calle ice.'''D Nwith  @get_ã aection|  Ë P) as  
ˆ  Œ Ù ! = S.recv
 * dreturn² Afrom< CR
else` ò__all__ += ['DupFd']aclass  w(objectð'''Wrapper for fd which canú used at any tim q�__init__÷ G, fd\  Á  ®f×‹os.dup(f  D  Ø(* , @Ð  =  Aredu]Fchandle2 a : 	­ Z #(“  V 2os. ? 
y > Â�E „!/fd€hVW„WB)


7#_RŽSàrAƒ'''Manag=¹õ
s using background threadQ œ	:£~ukey = 0Ò «cache = {} clock =g –ing.Lock(×? lH«ner = NoneD address Á  Eutil ³_after_fork=."  ! 3 ß@lf, ", X
C'''R g", È kÕan identifierg ê´ÿ 6ockS   2if  ü !is
&  * ' WstartW  °E+= 1T µ[A skey] = Ëæ 	3 Ó  !  —    3key9Ñ@staticmethodA  KŠZEP m¯ Tô¦to receiveMdo	V6 .G Ñimport Client‘  À  =V  3c =0 (( ó	authkey=process.current_ 3()." Ûcö((key, os.getpid())# Uc *Cstop¥ ×@out=
-AStop1ÉÀd and clear óregistered resources.'''
  õfrom .connection import Client' õwith self._lock:  G #if úaddress is not None*  . 3c =^ (Q 6 ,T  *  ó	authkey=process.current_ 3()." )F pc.send(�  nclose( œ þthread.join(timeout+  . ®is_alive()þ  Ô óutil.sub_warning('_R�rSharer I V did « ;  'qþstop when asked'« Ö lOner.ý ! =ÉXK ½% p &  for key, («!, — C) inX¿cache.itemsT3 ÇA �clear()
Ë ádef _afterfork‹¯’ (Š (
‚ Ç  RP._at_Š w_reinitË _G`P ß
 Ž Ñ ˜H]startD[LŸ ?  
cassertìå  ´P, "Al…ty have > "? Oqdebug('‰ Eing G 4andO Õ a   whandles#â 8 =j ([}M L ] . Ã 3t =¥ Qing.Tu‚(target=; VserveÐö t.daemon = TrueI .>? ¹tþT ¶òif hasattr(signal, 'p? —_sigmask') À( .& ? Ã.SIG_BLOCK, ) PvalidM fnals()Ö zwhile 16:try  s �OÐ.accept() as Ñ6  : Qmsg =  W.recv*   0if ) !isüJ  , Ubreak~   ÐpdestinaY`_pid =V /  ˜ù# =4vpop(key&b   À         senÿd(conn, destination_pid)
   �finally:  0 jclose(= nexcept4 þ	if not util.is_exiting()*  Z Bsys.J chook(* ó_info())


_resource_sharer = _R S p()
stop , . /
# ;ô
# Server process to keep track of unlinked � �s (like Ã ù>d memory
# segments, semaphores etc.) and clean them.
#
# On Unix we run a se‰ QwhichŒ s� &
#� c. The > 1ignx aSIGINTy qSIGTERM ÷reads from a
# pipe.  Every oth of¬  ð gram has a copyôthe writable
# end  R @, so× úget EOF when allb €es have Uped.
# T(  [ Ì “‚õ s any remaining b namesTPThis  ðmportant becauseÌ õre may be system limits for suchR  s: À
# instance,? 6 €only supb  F �ed number ‘ d,{ ! â"d-1/q live ið RAM. If a python€—Rleaks§  ¹Œ š %isº Q will³ be+`oved t  Wð
next reboot.  Without
# t6R l	p, "kill¿“ p" wouldš €bably leÇ¥)edš1

iŠ4 os
 esignal y  th�4ing 0waré1s

°#. L [spawn  ¢ð	

__all__ = ['ensure_runE À', 'register %un ð]

_HAVE_SIGMASK =íRattr(¬ B, 'p� ð_sigmask')
_IGNORED6 sNALS = / .{", >    ð)

_CLEANUP_FUNC2 {¥ð'noop': lambda: None,
}

if os.N² == 'posix'{c_multi( ; ‡ 0 ashmem
h 
 ‚.update(„  8 '·<': Z R.sem_ä,N 2 Ò_Ò 6 t :.sh1 }dclass óTd²er(object):¨ ÷def __init__(selfo  ’._lock = •‡ing.LockÓ& Afd =M°  %pi  p  ]m Rwith 4  r z ø   #if  fdr µ
!  % #Œ„m    breturnõ   #  àing the "alive÷" file descriptor stops main()
  úos.close(self._fd  Œ = None
< swaitpid> opid, 0B 9pidC ‚def getf: %):X q çensure_running² qreturn % 2_fd�  L 2  ! U €'''Make V ó that resource tracker process is w .^  ,°This can be ” from any6 ô.  Usually a child • will useá 6the~ õ
created by its parent.'''/ Cwithð Flock) ˜ #if  fd¹ 1not¦
%  ) #s ñ  was launch€ `efore,E Pit stµ ?‹  I   v Çcheck_alive(n $  C# =>P ( M  ) rÖ < Sdead,© � it again+ Æ $ ô# Clean-up to avoid dangling¯=es.8 >tryQ · 0# _× P if t,N4]otherd O dpythonŒ ð, which has star(=_Ê²  N ¥ £ ?is  .   ?os.Î ) €except CèP7_Error&Tòµ Ö ðalready been terminÑ Mpass8 è µ\ Ÿ     À * 0ward ü Drn('¨ :Žö died unexpectedly, ¦ J  2'reb¥ing.  Someˆö s might leak.')l G pfds_to_ó Y = []ø �2 ð.append(sys.stderr.Jno()šÈEÏ>ionÀ � 	|  cmÇ'ÌSmultié á ;q importu;z:%d)3çr, w = os.pipeè è rÖ  ; #¶@out ¥ð  us, so no need ò t)idé  F ü
exe = spawn.get_executablª  - @args¬Ðexe] + util._ _-û_interpreter_flagsí C  += ['-c', l:% rý ( ð# bpo-33613: Register a signal masðk that will bloc Ëe signals.
  c# This  S mask; ò	e inherited by the child_ �is goingP  òto be spawned andQ wprotectI ÿfrom a race conditionQ  Ð ‡can make@ õdie before it registerÌ �handlersR  ¡for SIGINT  ÂSIGTERM. TheTis unR  Æ BfterÔ õ bMtry:„  †ÿif _HAVE_SIGMASK&  * ¾À.pthread_sig©( ðSIG_BLOCK, _IGNOREDS _NALS)y ±pid = util.§ñv_passfds(exe, args, fds_to F ofinallØ P/UNÚ nexceptA®os.close(wÄ Yraise NelseD pself._f3w/ š Q9pid  %– 1r)
2 ðdef _check_alive(t )‹ @'''C | ‹ñpipe has not been è «ñsending a probe.'''f  ° �€# We canH @use = € here asWücalls ensure_running, creat
š# a cycle@os.wGÕ  Iö, b'PROBE:0:noop\n'žÊ† OSError ½ §return Fal¹µ' FTrue_Í† Ú, name, rtypehRG" ö of resource with ytracker] ¶ ._Bº('REGISTER'l ‘ `“ UŠ• -/UN— ¿  Ê Z, cmd¾ � ! .(Åýmsg = '{0}:{1}:{2}\n'.format(V ç.encode('asciipif len(¬v) > 512�  ò# posix guarantees!o@s to )oI s ¥n PIPE_BUFK pbytes aùatomic,L2 0 >=… 	9 Fa Value² ('¯ — too longÎ nb /=  6msg>tassert 0 = " 3, " ’{0:n} but Àsg) {1:n}".f‡ormat(
  ónbytes, len(msg))


_resource_tracker = R T ý()
ensure_running = 7 .# q
registO ,  4
un T  o
getfd%  ñ 

def main(fd):÷ t'''Run á  á A.'''  Ð# protect the ñcess from ^C and "killall python" etc; rsignal. ( –.SIGINT,  __IGN)1 
OTERM2 òif _HAVE_SIGMASKÔ  Î` ÷ pthread_sigmask†  _UNBLOCK, � @OREDE aNALS)
Ž ófor f in (sys.stdin,  3out@ l 6tryy   ‚f.close(×   �except E :ion0 Bpassu ðcache = {rtype: set() ‹   � ñ_CLEANUP_FUNCS.keys()}³ 	‰ b# keepÑD of E6ed/3%edûsC  ­ €with ope'Ê, 'rb') as fµ  • @line”   E 	Œ    ²cmd, name, Ô  = G ö.strip().decode('ascii').split(':'NK   Àcleanup_funcû
Aget(f o, NoneC 9if F !is- 
ï  l  úraise ValueErrorB&  …f'Cannot‚  {ÿ }×”automaticƒ ": y>  ˆf'unknow´3ype2#}'¾7  ä ÿmd == 'REGISTER'á ‡[9`].add(± ='el[ /UN] oremove` _PROBE¸ Iû   Oelseï ÐcRuntimÒ'$Ðcognized commìž%r' % cmdâ „      ]G chook(* ~_info()s  4 0 Û gfinall©!# µ roÒôes have terminated;‘p any re7 ×*/ 	+Ñ_> 	 w.items(0 ¸ "ifþ- À )0war_ s.	 $('� š÷: There appear to be %dUÀ              ù'leaked %s objects to clean up at shutdown' %
;  ñ(len(rtype_cache),  -))= �except E Mion:"  b Ipass ²for name in[ i > ù0# For some reason the process which created and registered thisu  Š ð# resource has fail+ Do un; ð it. Presumably it+ J  �died.  We” Ðrefore unlinkC 1 >tryà  ”    ñ _CLEANUP_FUNCS[ˆ ](<� 0 ‘_ as ex  / �warnings.	 $('°_tracker: % Qs' % u ?, e ofinallß ýð """Provides sha pmemory ‘direct acÖdacrossåñ es.

The API of×ð package is currently1 ð visional. Referòthe
documentationr ñetails.
"""


__all__ = [ 'S  MŸ #', óableList' ]


from functools import partial
 Dmmap $os
 Terrno estruct Uecret*  ��s

if os.ò‚ == "nt"Ïf q_winapioó_USE_POSIX = False
elsÿ0 ®posixshmem4 @TruePO_CREE 1os. @AT |‡ ðO_EXCL

# FreeBSD (wñ
perhaps other BSDs) limitæ�ð14 characters.
_SHM_SAFE_NAME_LENGTH = 14] ƒ #QblockJ p prefixì Q L APREFw'/psm_'% !wn% ð

def _make_fileq"()\ !"Ccp a randû! L ’
Ô†!."a€# number½? Abyte1useC  m - n 1= (« ! - œ ì q)) // 2B sassert I |>= 2, '1 ¡ too long'4   = = & 2+ s“².token_hex(Y }l  “  C 3) <E ¸ f areturnÈ’


class éll"n{s a new/`or attœG±an existingj 
Ž3 !.
 _EveryS �is assignJq unique¬  .  This enÈ&on… ky  r with aBculaúŽ ð so that a diffeÈ Æ3canä ÆÐat same shareñd memory
    block using that same name.
! ðAs a resource for shar/ ñdata across processes, ed ` sJ ô	may outlive the original= € pcreated" Äm.  When one% J ðno longer needs ac} _ to a Y âmight still beH äeeded by otherd  Æ  ¡ ñclose() method should be called.D ¡ w :is ª l 4anyj ,ç G ounlinkm  Ý Qensur
ò per cleanup."""ªô# Defaults; enables Ã Eand c òto run without errorsÎ _úb = Non#�_fd = -1¥ Y_mmap 9buf óflags = os.O_RDWR8 ²ode = 0o600 ò&prepend_leading_slash = True if _USE_POSIX else Falseè ñdef __init__(self,°=´ ", @=0 ¡, size=0):u  ðaif not V >= 0   Àraise ValueE0("'B `' mustúpa positÃ˜integer")\ ~ 
U  £ $._›_O_CREX |$    "if� =�   ¡ únumber different from zero´ ó!isô )!4elfµ &« JEXCLÚ Ž   M @' caµ ly3 — Ò=á"")Ê Ò 	ì:   "# ‚Shared M·p #  Ð ²À 
   ! QwhileW     ± Ð = _make_file (Õ $  ?tryE  ! ç /_%ùxshmem.shm_open(·  1   u ," 
_  `) Rmode=.   U ã ñexcept FileExistsö rcontinu-Ò   †  Ü ! =¤� Ybreak  òs H Q"/" +N  Vc N G ) 	] ™ Û¬ € {… â!  ‰”	ŒS  s ;‰#ifýÅ ¸DÀ            ûos.ftruncate(self._fd, size)
  €stats = 5   1 +  `ize = & Ps.st_Q P p pmmap =  . V ‡ ÿ except OSError:S ~unlink(– iraise
5 ùfrom .resource_tracker import register3  © öname, "shared_memory")f Velse:  Tñ# Windows Named S< ! M< 
+ žif createì Ÿwhile Tru   f Ptemp_ž Ð = _make_file `() if 
 � is None ¦  	ë  G   1# C… Ò and reserve ò  ò ÿ block with thisL 	òuntil it can be attached to by
‡ "h_,‚_winapi.• ÏFileMapping(7  Â 3 ÿINVALID_HANDLE_VALUE,6 ONULL& ßPAGE_READWRITV (Ó >> 32) & 0xF c 2 + ÷Ö  >try`    `last_ep@_cod×MqGetLastŒo  =   =if D $= E €ERROR_AL9�Y_EXISTS� P ¼1notÀ1  5 ü ,bExistsµ $ /  qerrno.E› £2 oõr4(> )?  Þ * E	Ü È  W�continuem U Ù	å"-1ßP, tagð =¸— ofinall§ÁCloseHandle(1P ˜  z 5 = | Ç Zbreak—	T  [ O �# DynamicÌ ð determine the e˜1ing;d_I  q!'s¬` whichÍòlikely a multiple ofR žðSIZE.
             ðh_map = _winapi.OpenFileMapping(
%  - ïFILE_MAP_READ,+ _False Mname4 ) Mtry:  ’ Wp_buf» �MapViewOfÀ ¹  7 ò ’   Ü  / 0J  	Ñ ü ofinall ª ÁCloseHandle(Ý H Gsize*ñVirtualQuerySize(K7  belf._m"  . P(-1, R P, tagÆ= %)
Õ s8  # ! =*  ¸²memoryview(1  ] F ±def __del__ )= c(Ã æexcept OSError>  ´Bpass­ g nreducej zreturn Kn š__class__þ
*  k .  
)   2  ;
2 ) 	#Oreprº 1f'{O ¯ 0.__� B__}(   2!r}Ð=  } 2})'"‘@propertyÃ 0<buf“6"A ÍÀ of contents £the shared% � block."R  
h« ?bufz  ­ { pUnique  ÿ that identifies { aported ­º M ž òif _USE_POSIX and © úprepend_leading_slashi#if,  Q ÷ .startswith("/"Ò   /re� E[1:]‘ /	. 3 Ì3 óŸ in bytesˆ : V  õ_ ù ¸ 1"""|¿s access tos õfrom this instance but doesÓ ¿not destroyB  0"2Y J0is @ JNone ¯ .%‡.release  p  0 = > � _  ’ `  $ . _   `  Szfd >= 0Æ #os^ ¯ /fdf vfd = -1±munlinkûÀ""Requests tó(hat the underlying shared memory block be destroyed.

  ó2In order to ensure proper cleanup of resources, unlink should be
H ð called once (an
 !ly À) across all] ðcesses which have ac ” !toÑ Æ  E."""' àif _USE_POSIX s µself._name:&    dfrom .Æ ù_tracker import unregister5 ò_posixshmem.shm_ú (d )/ F # 2, "Æ _Œ°")


_encod¨ð= "utf8"

class S¸‚ableListÃ ð"""Pattern for a mut" ò list-like objectõ Rvia a d¤ } 	á.  It differs  >�built-inX £ type in t]sè t ðs can not change«pir overàñlength (i.e. no append, insert,� Retc.)ƒðBecause values a �`d intoï Ä°view as byt… ± astructP @packObformat(rny stor ] Ð must requireš 0mor½ Aan 8F pcharact to,�cribe itsR 1mat}+ S# Theafðarea is organized° rfollowsËR# - 8Ã €: number]�items (N)1 €a 64-bitÿ #eg’ 9 –(N + 1) *C poffsetsD Æeach elementÔPstart "thÀ# @data{aÝ 4- K§  j R i ³ ³e(with Ó‡/izp   de
 ? oY0eirXqpectiversR ï Né `ì`ˆ@ strG  ù ¾ N¾ PindexKpo _backú ns'os_mappF &(i Rreconˆ  6  ‘corresponÌbPythonÈ _Fi 1= {¢  Z ‚int: "q"  @floa d ‚bool: "x ? —str: "%ds  qNone.__`%__N #?x: }” a_align>=1È ’0: lambdaø : ,Ñ  #‡!, ç  , Ú y  & 1E  .rçõp(b'\x00').decode(>P),  #I 2I  ž #": 3: _Š : 8 *  ¡  # 9 }ÃÂ@staticmethoopdef _exgÑt_recreation_À ` ) Y `"""Useð  c=1rt R€ðto convert value3s
  ð$into the appropriate Python objects when retrieving/ em fromF  A Álist as well  6 Dstor3 E."""2 õ(if not isinstance(value, (str, bytes, None.__class__)):@  ¿ …return 0 OelifS  ?str: 1: ‡ < 2< /se™ A3  #Ã QType
0 ðdef __init__(self, sequence=í ‚, *, nam z  0aame isR 5 or9    L @ 
ˆ [ & =- Qor ()Œ  C  É_formats = [    ¤ ð._types_mapping[ }(item)]0  4  ¬ 
Ü - 	Û)ƒ  6   _else s O % (w  A < òalignment * (len­ 3 //\   _+ 1),N ¡ @for É 5 inO	; 
‹  p_len = ‰ l
^ ¡assert sum®  fmt) <= 8 s 0fmtr :   =ÎDlf._\ 	… ‡offset = b# The   s of each B A ele,æshared memory',H ódata area (0 meanà` start[  & ,è    	¬ #. 	r ] )).* M¤allocated_É J= [0w3 
 Æ ? $ +Jñif fmt[-1] != "s" ”@int( J:-1]¼ O ž ‚.append(n 
7 ÿ_recreation_code~	|extract3 Ö ñ —rosD@size truct.calc \S"q" +:+_) ¹_metainfo +« †"".join(µ$ 5Q packingT 		0  back_transA B	† )p �   = qshm = SÞMÝ(k!, Š@e=Tr� Ü =&» 
OZ 	… %if4°p_enc =  YodingÒ s¨ *_«©Àfo,
          ãself.shm.buf,
  0 1 ž_list_len  "*(" ùallocated_offsets)^ 
 ùstruct.pack_into(,  � þ"".join(_formats)z x Ë  Œ ¾_data_startG ú0*(v.encode(_enc) if isinstance(v, str) else v for v in sequenceÙ 
 ç ¦ ä _Îing_metainfo¬ / ó M \ sL ø Û t	–Û *bêPtrans� _n“  ß Q Ò*(_recreationv 
Ç %)
ä  á:  „� ûa = lenîp)  # Ob¦Âs size from ù  0buffer.P  ) Y >ist? unÌ_c $ ¨  Y0at_� B0 F " Y1 * 8¼   ;…def _get¾ˆ (`, posi|)Z "Gets the × 0ingT0mat ð a single value storedP 0  …%."— \ % =g  ¼ B>= 0· *+ ÔL Eif (& +>=' Q) or Ò .7< 0Ö   ðraise IndexError("R%Fsted¢ çout of range."€0v =j òJ"8s"ÊÐ Ì kÚ& +‘ êE)[0]öfmt = v.rstrip(b'\x00'ðfmt_as_str = fmt.deØFWodingÝ `return& 3 x=
Ïk= 2  RáP funcnK "."r  ¨íp¹ •úbùÀset_back_traó
nsform_codes + position
  E)[0] 3tra0 @func( å = self._back_  ¥s_mapping[ c %]
L vreturn   S # ðdef _set_packing_§ fat_andg (| ,µ õ, fmt_as_str, value):q Ã"""Sets the U  U P and Á Ž aÝ   $ % aF bsingle] 1 inN qlist at •specified– B."""Ô  SDif (e$ >> B ‘_len) or Ö $._ G < 0Ç  E ÷
raise IndexError("Requestw ö out of range.")ƒ pstruct.e_into(Ý  \ Y"8s",  e�.shm.buf  N_off©MJ * 89 ¨0.enf!(_ Eing)| ³ & - uÑextract_recre³f(ûI ñ bð # 1‹y õ 
ñ 
Á š ã í¡_getitem__×ý:=_6 if –>= 0 else +¡O| 6try úÈ] Ä_data_start K “allocatedû$s[˜ + Q @(v,)O p!unrJfromr + d ð,)P4 ˜  ¿ î   [gexceptB

`il	SR
 ó ;getÏ ™ 1v =|K#(v ´ 'v¿)s)ô˜ 0A­gó 7  
l_ - scurrentz  m a,m ø¿assignment òif not isinstance…1, (�gbytes)Ê Ê <newÆ Gtype=#ypH )Z-1ed_é" =�& 
Ñ—ðlength = self._aóllocated_offsets[position + 1] - item 7

  ñencoded_value = (	 . !(_ Iing)5 @  Òif isinstanceC Á, str) else T 
C qif len(`  U) > aË }length:y praise V° ñError("bytes/strç ý exceeds available storage"ƒ þ
current_format[-1] == "s"w 3new' : = 8 	£  ñ > ùself._types_mapping[str] % (L ] ,& )Ö^ ³set_packing·  _and_transî 
i /
Y ó 
 Ïƒ Upstruct.w g_into(A  — ’shm.buf, ¨*,  Å ð def __reduce__(9 )Ráreturn partial ð.__class__, name=3 .l   C), (Z ?lenW Ã !unÅ ›from("q",¾ Z0)[0]­ /prT 1f'{‘ ¦ 0.__™ ‘__}({listÅ #)}½ - ¾ R!r})'k ‘@property{ Ì  Éa? "0"Thó Œ Ç Bing * € used byQÄ!ly!ed=1s."^  zjz"".join1Ñ ge0(i)l ± i in rangeÝ  ._è F_len.”Ö °Ñsize_metainfoG å rfor theÕ 'ã 3agexæ Qq" * f ­  >§ cª 5O  F?matª  8s« ‚W"LFbacký_ôsí S' S  P© b¨ ­_data_starÖa# - 8 ë Ý þ  G5gth¶ ( !(Nº- *2 telement6 ì	  2)F _· µnZ^ ³3 ê " +__ü$ s‘{ Àoffset_back_ó	transform_codes(self):
  preturn  ð._offset_packing_6 Sats + Ñlist_len * 8
B ‘def countW w, value^ 2"L.  ó  -> integer -- | ðnumber of occurrences 5 "."k  ° 1 Asum( Ó == entry for
 iÍ )6  ¡ _index¡ B""L.! R )£ afirst ( ™  — €Raises Vý ÂError if the÷ is not present.""Ò  ¸ –position,Â ‘enumerate· Q o #ifY þ Î    )Z ª Jelse. r¼ » A(f"{
1!r}· óin this container"[ñ__class_getitem__ =  ð,method(types.GenericAlias)
#
# Module which supports alloca ac= ñ objects from shared memoryJ òmultiprocessing/" < ".p$ ð@Copyright (c) 2006-2008, R Oudkerk
# Licensed to PSF under a Contributor AgreemÁ`
#

im·  l  ‘weakref

° #. % Kheap @get_Q4ext.  5 Preducð, assert_spawning
_For ¥Pickler = - . q

__all›Q['Raw£0',  PArray   1cop ð synchronized']
u ý  � M@_to_ A = {cC'c':€.c_char,Ž8 'u w 1 b Cbyte1 B u 1 h Qshort2 ('H u 2 i "in0 H  'I u 0 l Alonga 8 'L u 1 q     H, 'Q 1  5 f Bfloa˜ ('d adouble1 }~ ÓQ_new_§g_"@size† • s. #of! E Qwrapp2 ”‚.BufferW (/ )' >�rebuild_åG #, C �, None)

Ž Y$ !ors, *argsž 1'''_ Rs3s a+ç/edð HA  ß  n  o ˆO.get„  ' – å mobj = I¢ ò “s.memset( óaddressof(obj), 0,À i  \ ¢.__init__(X Y5obj9tµ   Ž1_orE ializerGaÑFÀcated from sñhared memory
    ''' €type_ =  €code_to_ P.get(	  !or ,'  )E ñif isinstance(size_or_initializer, int):-  ~  Y v O_ * 3  , ñobj = _new_value– _y  L cM “s.memset( óaddressof(obj), 0,   k  D ¡return objw Oelse­ ?lenä N Osultµ 
 re# !._%@__(*— 5Q Ÿ 5 u

def V
¡ð*args, lock=Trueø cx=NoneùRó òa synchronization wrapper for ah 9 �?Rawƒ 
½ !ifŠ i is FaUr) 2n (· ³ æòx = ctx or get_context(i  #  ô $ c.RLock ð if not hasattr(& ³, 'acquire' @ ð	raise AttributeError("%r; ¦ no method; 1" %Þ ‚ Ñ N ed|‹†Bctx)¾QArrayÉ
¾ 2, *D Ï21Raw| Ò — õ ·àü@copyþ^ ¼7Ç$ KŸƒpointer(3 e)[0] =™e LrówJaassert±eobj, S÷	edBase), 'object already*"ed> �–b
h è Ã_SimpleCData&„–�  $Ï ./el[ ÆT  if@.Â_‹ƒ fc_charè€ oString† 2 � 1 
Y3clsz - Ù  S :try– s* ñclass_cache[cls]c 1 ¡except Keyµ= À       namesñ = [field[0] for  ‘ in cls._ Ws_]
  ð
d = {name: make_property( )F  
  E   )s}> Pclass ò = 'Synchronized' +u _ )__6 qscls = = ñ_cache[cls] = type(  7 8, (T ¥Base,), d)N preturn Q ñ(obj, lock, ctx)

#
# FunctionsÊ ´pickling/un ñ
#

def reduce_c‚ Qobj):e ð assert_spawninge ~ Ðif isinstance  v £ypes.Array?  i¤ rrebuildb  , 3  ._n ó _, obj._wrapper rlength_m Belse� Q  L  V )B P TNone)æ … (2 5_, ) t » 2if  € is not G … < ²3_ *, 4�_ForkingPn´er.registerp kà Tbuf =ˆ ò.create_memoryview(& 4objq õ.from_buffer(buf! GP ” …:objB to p  ú4ies 2try	 � ? Í ¼fö except KeyError5 wLñexec(template % (J,)*7ðe V = d[o �  
V Q= '''ì£get%s(selfì  ƒ.acquiremã ' _­!%sVgfinall" `releasI  Ysm , valuet K m " =; u %\ )Çì !, †  )

 ª ü!}
p ñweakref.WeakKeyDi@Cary(S“´3H    ² “aect):
¾  �__init__ƒ®¹=c Hx
 ) Õ  =-J    ¥6ockX  -  
! =/ 
H , 0ctxŠòtx or get_context(force=True\ -   	] “ctx.RLock5! L6 = 0 aŽ  -
*  2Senter3ØK _ó 4.__+ )@ xr_*argsF 1 + J ¿¾E + ” <© $!, .å ¢1lf.Ã ¸  ’1obj( k M ð elf._obj

    dóef get_lock(self):
  preturn  .! 
 Ïdef __repr__3 ò'<%s wrapper for %s>' % (type4 £.__name__,a øobj)


class Synchronized( CBase£ ñvalue = make_property(' 'K _ArrayP Ù ?lenØ 1len¾ "._®  )sgetitem: 3, i¥  " Awithå [  	_hobj[i]asR !, Û Y ±R " =6 Z …getslice­ ¿start, stop^ · > := À f Ë sn Ì g Õ s0iStringæøm E7š.aw! ñraw')
#
# Code used to — ñ processes when using the spawn o“kserver
#5 �methods.U SmultiG Aing/9 1.py óCopyright (c) 2006-2008, R Oudkerk
# Licen– ðPSF under a Contributor Agreementu ¤
import os
 %sy Trunpy  ·£s

from . 7  7þ _É  É(t_ 1 Þ  tcontextN “reduction  ðutil

__all__ = ['_main', 'freeze_supÇ   àset_executable  ¥  é ä@   ' ppreparaz T_data5 ±command_linI õ | �_path']
›p_pythonw 1 isô€assumed '  # &  ‹ ð.
# People embedd2PL P want9 ƒmodify i®ò
f sys.platform != 'win32'XáWINEXE = Falseé –WINSERVIC Kelse0 ±getattr(sysV0oze`G )H  … È Àlower().endsê"("ì  íæice.exe")

if Ž � ;P= os.1P.join‹  9 ²c_prefix, 'U   6')
Å 
D 
›  

œ
4(ex@wglobal B ì    =±G  ,ö (M4 "
#5 pis_fork�Cargv5 1'''j R`ƒwhether r q€ indicatPPe areE G 8 @ 0if ‘Z   >= 2 and  «[1] == '--W-� Ð':
        reñturn True
    else:
   !re òFalse


def freeze_support()- 1'''5 ô$Run code for process object if this in not the main' @ H óif is_forking(sys.argvm  š ‘kwds = {}7    r 0arg_ 0 B[2:]   !   õname, value = arg.split('=')J  ) $if& Š= 'None'I  $  „ [R @] = $ 	B 
J 0   	4 Aint(Œ | `spawn_0(**-  “ys.exit()‹ôget_command_line2 ª KRÄÃs prefix of 4  4 Q used®z ¿ing a child˜pgetattr•Á, 'frozen', $¡; ([�óexecutable, '--multi@ing-èI'] +@ .ñ ['%s=%r' % item¨ 	 0in . Bs()]&
saprog =£ +m s .î 0 imÅ  u; B(%s)Ö ‹ N ß%= ', '.join(œ ›  C 0opt´öutil._args_from_interpreter_flags(3 Fñ[_python_exe] + J €+ ['-c',©gX.å  (pipe_hand�°parent_pid=Äp, trackŒ  ÔOâðspecified by data received over e Ñ: oassertØ`, "Notß ð"7 0if ;÷platform == 'win32ŠÀamsvcrt6  h †_winapi
 &f í 1 is‡ ô 1 ;   ssource_ 3 = I b.OpenPÔ(U  2   % ÕSYNCHRONIZE |; ýPROCESS_DUP_HANDLE,B B,£ 
Ù o ¥  È S 3newàù = reduction.duplicate6  X  

u = ® Rfd = ”’.open_osfn(™ Ö, os.O_RDONLY< ¡ºsentinel = f ­ 
 E$ .Ì#re1 Ç1  Ö  .._ º 9 5_fd<   ÑV ¯  osgaÝ  º!= j5(fdìî *  ö . (  3 ð8 Á@withV fdva à'rb', closefd=æð) as from_parent:#
  óprocess.current_ õ()._inheriting = True5 Etry:  I ð	preparation_data = reduc ð.pickle.load(from_pak )B  ,e(J 
& Oself\ kfinall¯ Cdel é ù £ preturn | Â._bootstrap(Æ ð_sentinel)


def _check_not_impor@r_main()4¿if getattr(„ 7, 'ƒ', FalseA  qñraise RuntimeError('''¯   ôAn attempt has been made to start a new¦ before thä#  H Õfinished its 
p"uphase.
‚ @This< ðbably means that you are not us; Ffork™ EyourF PchildG  ¤aes andA àhave forgotten= !us¿  , •per idiomG  inÛ  †† module:ª  0ñif __name__ == '_²2__'³ #   freeze_supÝ(  % )..<e "3 ð" line can be omittTf¥ gprogra¼ s+ go+ to2 Bfrozö ô
produce an executable.'''Ž geÓ
�(é L5Rä²info about ß² needed by ŒRto unÒ l ˜q objectnP ( ‘d = dict(  7ùlog_to_stderr=util._ ,+ �authkey=?." 3 )ð5if Z g']FNoneê0d['y ™level'] =3 à.getEffectiveL# (\ Ðsys_path=sys.	 S.copy!	2Di = . p.index(² ²except Valu×— Apass7els® I  [i« ÂORIGINAL_DIRû †d.updater = 'M  Ä Í 
 @argv .	  …orig_dir‘~ '  "  osAVcwd() ’€_method=² ) j�# Figure ¨pwhetherpinitialë÷3subS as aKó# or through directIPion ( @o len�it alone ðBrelyú i _TÖ. &s[E]l * h% = ð ule.__spec__, "™0", ›j !ifÁ m C i½ Àn I ÇÀmain_mod_namó'e
    elif sys.platform != 'win32' or (not WINEXE and  ‘SERVICE):E  I ñmain_path = getattr( õ
module, '__file__', None); 1if * > !isd  " ]  a "if� 0os.) b.isabsc   )Ÿ S  1  ÷process.ORIGINAL_DIR k É 7 “ $= t _join(L ,Â Ø  J �d['init_N Afrom$6'] U @normÂ Ì 
É óreturn d

#
# Prepare current ‡ r
#

olda lÒs = []

def p6 S(dataå 1'''_ `Try to­T Q read „unpicklen q object@ H Ðif 'name' in h ¸¤ .´ _ 0().1 ! =/ [> ]õ  N authkeyQ 4 T  'W Õlog_to_stderr]  8ˆ 
! ]È Yutil. &()¯   UlevelT : ðget_logger().setL- “&['= ]S 2sys)T­h m%[', ë   Oargv’   @   *, @ &di!Í ƒos.chdir»  % µ Porig_ µ ù
€ÿ8 � Ïstart_methodÅ 8et_# ’  ç'], force=True\� Šb  b_fixupW¸ ( g B ]øPóc Õc   'ls# MultiPBing ô€ helpersÒ¡fix up the–" óin
# spawned subD !es)� ð @mod_	 ;2# _P_.py Ïsdð packages, directori  zip archiv �etc, run=#Ÿ @ir "ñ  only" code unconditionally, so we don't even t¸F àpopulate anyth%in¥ q, nor dA 1mak% p change)C Ó  ´aibutes µ¢ =%l4s['4 !']+  Â*T == " "CDÅ.endswith(".! Y +ïW•# If thisy!wakEked,à r may al®4be d• ‰Ë Àmain.__spec_ð	_, "name", None) == mod_ 3:
  qreturn
 ð# Otherwise, __main__ may contain some non- ó code where we need toJ ðsupport unpickling it properly. We rerun  asn pq ƒand makeJ  ths @rmal& ” ñan alias to that+ 2oldC ñmodules.append(current )*  ¾ _& ¡ = types.M5 ”Type("__mŽ "2  ó ent = runpy.runF (Y,` \  9  ‡=j < çalter_sys=Truež Ð ñ.__dict__.update(ì º . Bsys.- 4s['ç\'] =   I 8 Ã


def _fixu$ ’from_pathq  
 )f�# If thisþû cess was forkedgñalready be populatedQÃ¨  $']Æð Unfortunately, A ½ ô ipython launch script historically had nÄQ"if _0 __>-°" guard, soû¶work around�£# by treatýelike aÅt.py filçóSee https://github.com/´  ¡ssues/4698 Ù £ ` = os.x¤.splitext( @basepœA)[0]A 7if D 3= 'r '¾ Är$  Ä 4__ ¼h–ahe setù ’we expectß#��re's noth@moreÈdw©if getattr¹R, '__k 'Ñ û õ ® |@e pa‚ ¥ sË a = ° through ra Ä0n a.u  @ ì`assume·ôis an executableQ ‘6g#7%  3Äb% H ðËb 
"¯ ÿ ÈfU/”Y imwì�1'''‘=Setð M0_']Žº 2 at 7 ? üR
#
# T‘ implemenñsynchronization primitives3 €multipro)Fing// Ae.py# ðCopyright (c) 2006-2008, R Oudkerk
# LiðLcensed to PSF under a Contributor Agreement.
#

__all__ = [
    'Lock', 'RLock', 'Semaphore  BoS (dS �Condition! aEvent'K ô]

import threading 4sys „tempfile ×_multiprocess3 Ótime

from . X {context <  °util

# TryB ñ)the mp.synchronize module cleanly, if it fails
# raise IØ ñError for platforms lacking a wor
 €sem_openµ lya-ñ.
# See issue 3770
try::æ 	 @  M0Sem¤ , Y ÷ unlink
except (˜ )K ° e("This² ± €s a func˜  ½  Z  ³ 1" +�  
 "Ž Î ±, therefore Ÿ requiredC 	vÿ primitives needed will notF 	¹  O€.")

#
#ýû8stants
#

RECURSIVE_MUTEX, SEMAPHORE = list(range(2))
SEM_VALUE_MAX = _›.‹.) u 0BasD1ass!s1üs and mutexes; wraps `ìZ `³  clF l ¡(object):
š _rO $= Fò._RandomNameSequence(), ódef __init__(self, kind, value, max
 c*, ctxB ù if ‚ is NoneZ    cctx = ‹¤._default_ %ge !()´  5 @name6 0tx.! Çstart_method& Þ´_now = sys.hò  == 'win32' or N r= 'fork} e  šRi in Ó7100Ó  ! q    slm Ïelf._semlockû(Ò ?   W tp._make_² ?(),> ö 0 V å¡FileExists€
� ( IpassY ;els´ ' Ubreak( $ :n Ò('cannot findx fß'l a  rð .debug('created´Ròwith handle %s' % sl. õ 0sË _ *if!
÷`after_ A N 5objð'._/ �  ' Ô PregisP '  ¬ ', 9 	 ª P.þ M IQà# We only get W „Pwe ar a Unix A Ð ð ing
           ð& # disabled.  When the object is garbage collected or# '
  ð# process shuts down we unlink/ ù  semaphore name> ùfrom .resource_tracker import register3  ð (self._semlock.[ 5, "l )")6 Ñutil.Finalize; `, SemL; ¡_cleanup,  T )),I û ñ   exitpriority=0)
+ Ñ@staticmethod Ddef f (ª !):  M $unð 1 Bsem_^K  ,  ' ‰ Rmake_ž sò Ž U¡acquire =  d J  »  nreleas-  x Œ_enter__t kreturnl _. VC 3xitB w, *args½ I 4 . � 0get«eQ J òcontext.assert_spawningº  l# öif sys.platform == 'win32'ú CDh = m &gej ö_popen().duplicate_for_child(sl.handleäNelseZ ) ˜ #±(h, sl.kind	 �maxvalue ¡(s(!, 6/	'“ = _multiEing.k@rebuÃ *C ˜  Ðdebug('recreapbÛ‚er with ó b %r' %‚ 6[0]„ 	Ü:�+  ì (Ê  `'%s-%si (Æ “.current_ ÿ()._config['semprefix']-	Vnext(
 and))

#
#Š"–
#

class 2 ():“'in»§=1, *, ctxÏ n _1 ±SEMAPHORE, < ñ , SEM_VALUE_MAXF =J s  �, l2Ž_/ …¿?rep 6tryP  i \.U  '   �except E ?ionI •'unknown'q· Q'<%s(o Q=%s)>òË _ˆP__.__%#__,³vBoundedÝ» S÷ ÂßÄKÇ ¼$__xÀelf):
      ‡  try:
  ñvalue = self._semlock._get_ %()/ �except E ?ionI •'unknown'8 Áreturn '<%s(T „=%s, max u)>' % \1 Ÿ (” ñ_class__.__name__, 9 ,´ Q ð)

#
# Non-recursive Ö A
#

L � Lock(Sem 1):
y Ádef __init__z –, *, ctx)è 3 .( ÁSEMAPHORE, 1 @ctx=: Z CreprZ R �+if× —_is_mine(6 ! ó = process.current_ 0().! Þ 2   Åif threading4  3 ¡ != 'MainT( ' @   ] Ÿ += '|' +S 	† .elç r^ == 1t p v= 'None^ Ž P ¿count() > 0K “SomeOtheré ¦ /se; P~’ (Æ '
‚owner=%s�/._	  M ðRìRåí8ñ RECURSIVE_MUTEXð1)óÿ §“l h + Ò"!, P  );, 0Ö|2 ,	U 3¦, 'nonzeroÂ >M EN PR W/, ‰ ƒ`] göCondition variableW (object[ �=Éf ÷ " ! =¹0 or‰.Ë‘) ‘sleeping_Æ! =+ ðSemaphore(0)
        sóelf._woken_count = ctx.Semaphore(0)
  s- Tait_s  0 ñ make_methods()
N ðdef __getstate__([ !):  m òcontext.assert_spawning' & qreturn  €._lock, I ¢._sleepingÔ ,2  \   & ÷ 9 wÝ 	® s® !, ¼ µ ˆ � " =g Â 9 T^enterQ+>  *4.__+ 	æ Cexit? w, *argsâ F 1 + Þ	£  x H   €.acquireâ X–  
ï kreleas*  r O_repû  6tryY ý@num_èTers =>
2.á‘  ¥¥_value() -˜  H  Õ KE O�except E ?ion¦ 	•'unknown'‚ Œô'<%s(%s, %s)>' %Ð ô_class__.__name__â Ö ', ÿ Æç, timeout=Noneº‘f K å Åis_mine(), \§ %c'must Þñ() condition before using � ")'Õ ; ð# indicate that this thread is go6 1to ¿u ‹ .1ƒ^   Ë ? 	G   æ  (Æñ for i in range( 1 g H p …  # Y Pnotifÿ  *$or–ª  ^ 	e  A ¼½dU(TrueÔ¼ [inalls	Ahas 6	‚ { El « C# re
r   ð I ' m •K M U1yÄ7n=1Š»'[  \–not ownedtC   ‡ o	¢False), ('� �: Should G ôhave been able to$ v  ö  1+ '½å'Á # #B qtake acŠ4 of5ðs since last notify*()ã we subtract
  ó# woken_count from sleeping ¨and rezero+ A Çwhile self._K õ.acquire(False):0  x Sres =4 
n 7 	6 ûassert res, ('notify: Bug inµ G 'A  {  @+ '-L ñ  should not be ¯ 5')
9    er± 0 õ  )  @< n '2 @‹ 	1 ô	wait_semaphore.release()¬ Ò# wake up oneê %erŒ  & s  Š F+= 1¼ $if. s�Pfor i7drange(? §Z ÙŸ  ž 0it S ao 1 to´ ‹  L #H	ñ  ˆ ùcase some timeouts just happenedî ~š 	K m
 ƒ Bpass• 0defô€ify_all(Šÿ   !.ncã(n=sys.maxsize > ·1for< Ä, predicate,Ä H=Nonû†result =+ %()Ù  ifŽ:ultªcreturn - (0 isÇ  k 
: 0end$ ! =� á.monotonic() + &ouOelse?  [ z  E ù [ 	 ˜ Iê 
Q 4if “ ´ ^ 0 -° Ã 	�  6 5if — J<= 0|  "   Ybreak< é : (  Ö “ 2 Ê ´
�ò
#
# Event
#

class –(object):zƒ__init__<l*, ctx€p_cond = ö.Condition(ctx.Lock()ª Æ S_flag/ SN'(0²ais_sett l Cwith� q 
: Ci ] _ˆ Æ	oSÓITrue N‚*± ƒ 
ƒ	l & o!   &LBcleaûKt š z SŸD­Àire(False):
  øself._flag.release()
$ Yelse:   7 ùcond.wait(timeout)
* 2if ) ` ïacquire(False)T + ‹  y ¹return Truek  \ ô

#
# Barrier
#

class ³(threading.# "):· Ðdef __init__(¹ ó	, parties, action=None, î  g*, ctxÑ Õimport struct¦ ³from .heap ! ÕBufferWrapper( w 9 =   (O ö.calcsize('i') * 2¯ �  =� `.Condi² Î Ò û .__setstate__((ß Ú  , L #, Œ )d E A E = 0¶  Qcount  Qq  & !, > 0l%._�  & "._r,Bs,X  	 ¨ 2 ® " =c ,  Parray ó- @.creñmemoryview().cast`g8 P À |Ç #Ì  Î „ ‘@propertyÕ YGu Œ  ¢ !._ò 3[0]C _2 S.settpH h, valuœ
H " =! P “  “ 1“ 2 “  H “ %1]“  óÀModule proviáð  various faciliÊ‘ to otherÛñs of the package9ñmultiprocessing/util.py ðCopyright (c) 2006-2008, R Oudkerk
# Licensedl ðPSF under a Contributor Agreement.¡3os

 …itertool %sy tweakref+ datexit ÝX¶ # we want  ñ to install it'sS0  Ñ# cleanup fun‹ before $a does
â3sub<ç`_args_ Á_interpretert"s
5 ., ; Ñ

__all__ = [Ÿ å'sub_debug', '	 @info   awarnin  ²get_logger'2à'log_to_stderr2  # qtemp_di Pregis˜  af Dfork< 0is_c\ €FinalizeE ¡ForkAwareTTILock TLocalG Qclose×  fdR @cept. ƒSUBDEBUG sWARNING6 ]ÍpLogging,aNOTSETe: Q = 5
D ð = 10
INFO = 20
SUBWARNING = 25

ðLOGGER_NAME = 'multiprocessing'
DEFAULT_(  ING_FORMAT+ ó[%(levelname)s/%(7 N ñ] %(message)s'

_logger = None �_to_stder óFalse

def sub_debug(msg, *args):
    if I     ÷ .log(SUBDEBUG, ; V R $O Oinfo  OINFOœ   ò owarninô #oWARNINö 3get (C1'''KƒReturns ˜‹used by + 3 dglobal‚ aimportE Aing
  R ñing._acquireLock() 6try¹dif notO :=  Ò  ¶ $ =\ Q.getLD(Œ´W  1   5 ê.propagate = 0X \# XXXæ ô should cleanup beforez º  _   óif hasattr(atexit, 'unregister'e *  ' .%  (_8 š_functionÃ  6 2 U 0 
FelseS >   B i ûhandlers.remove(O Ÿ, (), {})ˆ 
F oappendF /gfinallídreleas- r‹	¯6log i=:a“tTurn on«³ and add a ÷ ò which prints to rx E Øt " ßÉ\. qformatt ð F (Jv­ îrStreamH¼>& F.setW u J  x der.add< 6 )1if ¶42 @setLÏlM  Pq = Trueë ³ð
# Abstract socket supÏP_plat« _ 3s_a0 _0 s¡tif sys.1 ¶ == "linux"´  � –ñsys, 'getandroidapiñ ›?  „…i¡ _éÇspace(addres• È ¥ V  –¶if isinstanE d, byteL  ' Ž P 0[0]0w/elD 3strB A"\0"E Ðraise TypeErróor('address type of { ô,!r} unrecognized')


abstract_sockets_supported = _platform ,s_0 ñD()

#
# Function returning a temp directory which will be removed on exit
#

def _r _< Á_dir(rmtree,M ¢dir):
     (&   
 Àcurrent_proc#= 
 . !()0 -#  @ canž óNone if the finalizer is called? €late durï dPython- a& ,iff  G @not d Î  Ò ‹ £._config['ä A'] =3 (6get$‘# get namø€€automatiÑ Áy cleaned upµ t  B¡ U.get(¥ Y 9Qempdi3
è  im`r shutil×Afilew  {  
   @.mkd ò (prefix='pymp-'k  3  info('crea¸ + v2%s'f ( /   ó# keep a strong reference toœ .dQ), si ° #3 I?ed   ì Edown4 FR(,, ô€, args=(8 #ilˆ Å ,H  Ê   BÖpriority=-100Á
b >1dirc rÌzéS À for reinitiðð of objects when boot` pp"ta child• òñ_afterfork_registry = weakref.WeakValueDi]gary()
4 ñcounter = itertools.  —N"un0 _e Cers(,Òitems = list(#  " ‡ .! "()I S.sort; ÿ ð(index, ident, func),0 in‘ &msÞ6try  ³ . B(obj`   �except E  KJas e5 é4 �²ker raised =  6 ð"e)&U"erá  u ­ ]  	ý Y[(nexV0er)î  B )C  •2obj× usôËsíIfv = {}
_ h Òs
class g eˆ 3ectÑ1'''µC$ lÍs•9ect� ¡  ƒD ;_Ýq__(self×,ýDback¡Q), kw¬É	‡  œ  \ Hif (  `) and ©isinstance- 4,inè  L   ùð TypeError(
      ÷0"Exitpriority ({0!r}) must be None or int, not {1!s}".format(
 J  eQ x, type( E)))
8 ‘if obj is]  n :  P óself._weakref = 
  .ref(obj, ! )3 Xelif m  Z V ð
raise ValueError("Without� Ject,D 0canû "¿  ~ Ô._callback =  ’ " pargs =    kw 3 = 	 \or {}$ Yey = Eö, next(_finalizer_counter){ ÷pid = os.getpid(¾ > ’registry[5 akey] =]¬Qdef _é 0__($ P, wr=Z,­  ° ð# Need to bind these lo�y because ÿ globals can haveK þ	been cleared at shutdown, Ï  =  ±  ¥sub_debug=
 ", 0=:)š5''' 1RunÌ  Þ ðunless it has alread÷  Ç PalledPPcance H T 6trym  SOdel Ë  ®H ¡except KeyÛ
H ß %(':² no longer Vered'GJelseF !if ._\#!=*(! ´   p @ignoÍ
÷different process}  E    re@ pé   œ   v   ±ing %s withŒ  4and|?%s'  R   ÷í{ ._¿ Ä;7 2   ¾ 
@ "(* @ * B ( ú–ˆ   I I = \!‚  L f : k`]`return½ ¸ï¼CÚ _�ation of#eobject  6 òFEpassr /\S‡  IÏstill_activeK	R�Äwhether thisX erÚI P waitÚžto invoke†ð '''
        retð(urn self._key in _finalizer_registry

    def __repr__(3 !):   6try   Sobj =Y •weakref()/ òexcept (AttributeError, Typ [ N BNone‹   0if e 0is  
~ 0retØ @'<%s% Óect, dead>' %• ö_class__.__name__Z Ix = ; °callback=%sA (È  ˆ    -._S ,) qgetattr?$._X 4, '† #',   )6#if Jargsñ €x += ',  e=' + se   D   kw F  H  J Ïey[0] is not� œ Ìexitpriority\ C \ À¡x + '>'


|6run�Us(minO  41'''w…Run all Ï€s whose ˆ  : · ç and at least _ Fæs with highestK @are ·™ed first;| 1ith˜ †the same8 ewill b< ñin reverse order of creation.C ã /if® Ó  Ü°# This funcE G mayp pafter t" ñmodule's globals arer  åð# destroyed.  See Ë _O_[ 	 (inS y for moN RnotesÑ  _ ôk(ifÑ ûf = lambda p : p€³ Felse2 ûG (>={ � ¯# Careful:pOÀmutated whilr‘ #È òrunning (either by a GC run o !no „thread).ƒ Vlist( �€) shouldÒratomic,ƒ u 8 �.items())— 2notŠ€keys = [ ´  ?in E Á) if f(key)]p  @ c.sort(Äb=True)Å Q  ( ž[/ =bA.getd c  - # ™  y€have bee50mov|1rom›¿ 2    ¬ j °°sub_debug('Î ®F%s',Í¨ U û  uõ  ùE 6ion    Àimport tracetó      ³.print_exc(`7>Àer_registry.ðclear()

#
# Clean up on exit
#

def is_ áing():
    ''' ñReturns true if the process is shutting down1 9 r9  X 6 or •is None

 r= FalseŽ  ð _function(info= �, debug= û, _run_finalizers= ,�  Ì  óactive_children=Ë . < ƒcurrent_4 <  A�# We holdlôto references to Ý As inT°arglist due  1the¿ p# situaõ described below, where thisP  ”Ácalled after J ðmodule's globals areU �troyed.
'  « eif not " Vª ÿb= True.    ¯#('*
&!')i  & É`('runnE pall "atŠ&" Ù÷ with priority >= 0D ö7(0)† +f � ()" Í  �É  Ž ²Tchecké= ñ 7  x`becausÐ F 2it'à`, any � Ó+``eâ()`` will raisð B   û# an AttributeError (@ ` windsÎ0try@+toŠ Tget aE Ós from util._Ú Ìl).  Onƒ {j can happenJëif someone has òmanipulated sys.�0s, 9±  »  "b� ógarbage collected.  Thµ€uctor foä$e F ,ypE  then repla| dUvaluez: Bdictj ã.Ë ÓFor instance,[õ
setuptools runs a test itn E j ¡a copy cre$üearlier.  See issueSð#9775 and #15881.  Als^gà: #4106, #9205€d„   7ì i   Dp‰a $  ºif p.daemon>! Pnfo('õâ¡erminate()«: Æ %s', p.nameB   ¦p._popen.tA Ø " µ 	” Cjoin� ¡� 
"p.2 € ¸ QremaiÆÂ ¯2)

ò¡.register(Uÿº@SomeB@k aw¸Ptypes¿°class ForkA ðThreadLock(objectó	):
    def __init__(self     ñ
._lock = threading.Lock()> & ¦acquire = 5 . 
* kreleas*  * °register_af Afork� Á, ForkAwareT�  Œ P._at_# 0_reÉ !)
H Ú 
 D á D (E 0_en†  hreturnò _+ 
@ x_w, *args… F 1 + †


classü fLocal(’l S ÷ ÑWÀlambda obj : ò.__dict__.clear()ð] nreduce0Ê Btypej , Hð#
# Close fds except th òspecified
#

try”óMAXFD = os.sysconf("SC_OPEN_MAX")
E EL :ion8 P256

« cv ’_all_fds_5 4(fd~ � a= list � + [-1,  ]Dƒfds.sortï`assertÇ r[-1] ==, ò, 'fd too large'; òor i in range(lene 3- 1ª =1os.¥ % ‘fds[i]+1,c fi+1])
>òsys.stdin and replace  @with0pdevnullO _] _$ (w 6if J ris None@ ‘ ÄB‘  4 ± Tñ (OSError, Value o  < OpassS  "fdåƒopen(os.½ ,É ‚O_RDONLYx E 	Ž   ’  F  C Afd, ñ †fd=False= ¨ ç  @ |6(fd)   QraiseÅ7 ß  ©õFlush standard streams, if any–f'  –_" œ	ä à Aout.1 s‚Attributnz	 Ô Z ?errZ ,žòStart a program ŒEnly ß Ð  kø ìpspawnv_ fds(path, #,  Dñimport _posixsubprocess£*  ¢Puple(¯¦ed(map(intJ Â€errpipe_Í$,  @writ“0os. j	4„ .yQexec(�  l  Ç Á[os.fsencodeà …)], True˜ ,€ 	B  ‹ ´ Â  ,A #,  ðNone, None, Noneñ	, -1, None)
    finally:   òos.close(errpipe_read,  Ñwrite)


def : ¢_fds(*fds)V @"""CR ñ each file descriptor given as an argument"""� Òfor fd in fdsM 	„ $fdy ø _cleanup_tests(z  ý multiprocessing resources when G „  completed.–  Pfrom " ° import sup 
 ## Œ U  ƒ .± $()6 óStop the ForkServer . ñ if it's runningJ † × ‘ QforksC +  &._ o._stop�  R_Track† (d"_tI Œ  .._ 
˜ ñbpo-37421: Explicitly call _run_Ãñizers() to remove immediatelyy @# te¯üary directories created by± .util.get_: q_dir().L x  ´.gc_collect] òreap_children()
#
# S= í ÿaAPI of
Þ‘package uÃ th›sE * ñ/dummy/__init__.py& ðCopyright (c) 2006-2008, R Oudkerk
# LicensedKðPSF under a ContribuµPAgreeªñ.
#

__all__ = ["'PhÃ', 'current_Ê  eactive  sfreeze_'"',G @Lock R	 �Semaphore  Boš d ”ConditionC QEvent. `arrier AQueuB RManag 1Pip @Pool$ ‚Joinable, � !]
DIDtv
mˆ — 4sys tweakref qarray

»p.connec® H †  T   !, 
%, ô ,, ? ,Ä 2, B0 qk ô í  Ýpclass DP×(� !.Tƒ"):Ä sÐ(self, group=oƒ, target Cname ±args=(), kw #{}¿ ìl .a \  , W ,HsO » ’ q._pid =Ö d  —3 = ¶¡.WeakKeyDi¦Lary(N `start_ŒeW [FalseX  pa; =  6G 3û 2if š B nis notG  Í ðraise RuntimeError(
             ð	"Parent is {0!r} but cur �_process à1!r}".format(
;  qself._pP ,D E()))6 * õstart_called = True" ²if hasattr(- W Õ'_children'):/  ‹ ( .& [ v] = Non_ ±threading.T
 .Œ k !)
V ‘@property Âdef exitcode& | 0if d !._D Ð rand not ›is_alive(³ �return 0d  Ä FelseZ   # ¾ !
# #
P—s= Dummy 
¶&= ç   + &()1ð = weakref.WeakKeyDictionary()

eactived× š. =þa í äfor p in list(9 !if?/p.<4 q.pop(p,àb3
Z ¹ äfreeze_support¸ Qpass
[ó
#

class Namespace(objectš  ý �__init__³, /, **kwds#  µñ _dict__.update($ ý F CreprF ; ritems =
H  (G‘temp = []V  y  W°name, valuea6 
T\ ) ùŒswith('_S S  e ð.append('%s=%r' % (= f ’ !.s[” �q'%s(%s)= Ø kP__.__N à__, ', '.join(w )o`ict = K
ÒÏ Array(type™ð, sequence, lock=R[… a1 . 7  )þV=úx mu  ?ë + 4 =   " C " =¸ƒ% x×  b Û G ? . q.settern  x C ¾C 
Š  9 /__±  '<à‘r, %r)>'%^g )ß` , ‘  é¤ef Manager˜[ Äsys.modules[+]„shutdown2 Ê ¯ SPool(À0es=@ , ¹wializer sargs=()Sàfrom ..pool im' $ R G—  h 	c   ^ ñ)

JoinableQueue =   tó Analogue of `multi·  ŸQconneà` which uses qF �s instead: qsocketsR E  /d&/K Àction.py
#
#ðh Copyright (c) 2006-2008, R Oudkerk
# Licensed to PSF under a Contributor Agreement.
#

__all__ = [ 'Client', 'Listener ðPipe' ]

from queue import Q °


familiesG äNone]


class I ð(object):

    def __init__(self, address=@ !, R y ±backlog=1):>  B  5 #._ _– =‘ ( )l aacceptj D `returnŸnection(*W  g.get()M \closeL 9  0 = Í † ‘@propertyÂ   ñ I • P  I  ; s__enter<Ò  = 	. xi exc_type, 
 Cvalu 'tbJ  C .ê @)


v (¸ , ¤_in, _out ~#),‡)ë / `.put(() b, _in) í 4Con‚P v  Ã(duplex=Truex Oa, bs V  . (),ê@b, ac §� ©¢ Ž ä ú §@in =ö 
 qsend = j  A_bytD B  0
/ Drecv/   /  in¤ñApollWÓ, timeout=0.09 – "ifv ö _in.qsize() > 0Ð  % F t‰ $ifR o <= 0.3 UFalse4 Fwitho šnot_emptym  �   c.wait(À .– 0 ¿ ¸ $ õ Fpass# C]ð"""
Python unit testing framework, ba»ðon Erich Gamma's JU0 þ
and Kent Beck's
SmalltalkJ 0 (uI xðpermission).

This module contains th &re‹  e qat form% ñbasis of
specific{ p cases   0suiÁ°(TestCase, 
 S q etc.),' Âalso a
text-ô rutilityx  q P runn �  +a  rew àresults
 (Textk `Runnerê ÃSimple usaget´ ~ R ê ð IntegerArithmeticM  Â (. . Q  J 1AddnR):  #ñmethod names begin �'0 ' Ñ ¦ð.assertEqual((1 + 2), 3)
         ó   self.assertEqual(0 + 1, 1)
  ðdef testMultiply(4 %):   '   	G ¶(0 * 10), 0J * Á5 * 8), 40)
U ö
if __name__ == '__main__'t @unit” . ñ-()

Further information is available in the bundled document*  , and from� õhttp://docs.python.org/library/{ ûhtml

Copyright (c) 1999-2003 Steve Purcell&  ! q-2010 P` ñ  Software Found”  
This modu½ ƒs free s( ± ðyou may redistribute itÍ 0/or< Áify
it underÿ Ôsame terms as~  it¿�, so long t} cÛ €message
'°disclaimer ² ƒretainedaÀir original Šó6.

IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, IN
 €
SPECIAL `CIDENT ñOR CONSEQUENTIAL DAMAGES ARISING OUT OFu ñUSE OF
THIS CODE,— " I “ ôHAS BEEN ADVISED= °POSSIBILITY RSUCH
l 7.

Ó ¦ ñFICALLY DISCLAIMSÝ ¡WARRANTIESÄ ñLUDING, BUT NOT
LIMITED TO,¯ †IMPLIED 7  y “MERCHANTAŒ ±AND FITNESS8 A
DñICULAR PURPOSE. Q  ô ð PROVIDED HEREUNDER IS ON AN "AS IS" BASIS,
[ T'  " ð	NO OBLIGATION WHATSOEVERºT ð MAINTENANCE,
SUPPORT, UPDATô 0ENH àMENTS, OR MODI+ S ÐS.
"""

__allûñ ['TestResult',  @Case ð IsolatedAsyncio)    qSuite',P w   ?  xt `RunnerE   BLoad @Func9  L  `G adefaulJ < @Skip8  V Dskip $If
 kUnlessL áexpectedFailurÙ #Te¦ ÷ �installHa»rB †register&lremove > AaddMcóCleanup']

# Expose obsolete fsÓô	 backwards compatibility¸Á.extend(['ge% KPNames
Cmakeœ` 'find5 " @s'])ü_� = True

—1 .r€ import 5 á  Dcase (Õ ,0  e ,, ä$, º , ¸	29 "If! Ç+, º)‰ sxŠ @Base« ñ †  , lz- (* Q-, d%, :,, Yµ )  _¡ Àmain import ðTestProgram, main
from .runner import Text* R , Sesult3 tsignals4 ñ
installHandler, registerR4   Jmove - ð
# IsolatedAsyncio} ÃCase will bee ðed lazily.

# deprec6 %
_² n , =³ ð
# There are no tests  ð, so don't try to run anything discovered *Ð
# introspect  ôthe symbols (e.g. FunctionÄ ó). Instead, all our
#� AcomeX 0 wip P unitœ .  
def load_  s(  \ ó , pattern):
   #� os.path ñ# top level directory cached on[  ö »1nce4 ¤this_dir =K ñ.dirname(__file__)) TreturD .(`(startA =J © =± 
¿ELazyµ f v0 .aP_case-t8 !s  òio, which is relatively heavy, but mostt 9ñ o not need it.
g_´ 3__(NÞ ÿglobals().keys() | {'­$'}J  getattr__(8R 0if  O == B Ê Îy � ' 8 ß Ê _ ðraise AttributeError(f"module {__Î �__!r} hasU ô ,   { ð!r}")
"""Main en_£point"""

kðsys
if sys.argv[0].ends@("__£d__.py"F¢
æ€We chang‹H  Ëñmake help message more usefulæ #   executablrPthout]³h, unquoted, ð(it's just a hint)2wayð	# (if you have spaces in rd  # €get what ’ deserve!H Ž …@baseV(+" 2   ?( =j e+ " -mW"È ¤del os

__o 1Crue
Û vJ   

 !(mûd=None)Àtlogging @coll4onsM  µM T_BaseÂContext


_LF `Watche{H .ö ‹dtuple("* !",Ñ  
 ó["records", "output"])

class _Capturing•(Ú . € ¼ k #A   " hò$ cA æÐ(raw and form¨%d)2 } .»  P 	  ëÓ__init__(selfq  m k ‹ .( ?  '  6 %.wD,ÀWatcher([], ñ
[])

    def flush(self):   Fpass# Aemit" ‡, record*  9 ’.watcher. ’s.append( )V amsg = 2 mformat"  N doutputM ómsg)


class _AssertLogsContext(_BaseTestCase ¨ b"""A c( ô manager used to implement = %.a] b()."""
õLOGGING_FORMAT = "%(levelname)s:%(	 “message)s;  hƒ__init__Iðtest_case, logger_> !, R ¸  Š× .L kIY ( =g ’"ifq ú t =  Û 7 Aing.  0ToL B.getü ± R OelseN EINFO4 p BNoneo4Senter5Ñif isinstanceR.í S µ L[9  ß * Š ì Ÿ Ó 4 + geš=gerš ¡7ter8 Ft8 
q; Qhandl9 ²_CapturingH (& F.setX v ( }s3 = ] Ó' Cold_! s¸ 4er. >[:]/ Ð,  & –propagate*  . vo C = [{ x $ 1set©� ´ò $ a … = Falsei mreturn  —xË exc_type, 
 —value, tbv=w ³  @ Tb  £ 1 ¨   2  3 
ÿ  0 x!if¬  ¶ € is not z
¹ð# let unexpected3 €eptions !… throughƒ  º <
Qgn�k,j) == 0y æ é_raiseFailure(d  h 0"noÒ3s oÃð {} or higher triU�ed on {}"@ .(e * ´ '4NamQ  "),° ' 0er.¤ô))
import asyncio 0ins)€

from .Ý ^ * [
Â’IsolatedAD ! (	 > # ‘ ps inten{ñally have a long prefixà #ÐPreduc  ch  ðclashing with usò%er-defined attributes
    # from inherited test case  ð The class doesn'# ó$ll loop.run_until_complete(self.setUp()) and familyN óbut uses a different approach:% ø1. create a long-running task that reads m < Â   awaitableá pqueue aI Ó with a futurç 2 2.2 B the
 < °object pass{ !inÍ 1set( fresultt Ainto [  >   ñ3. Outer code puts+ ¨  ' ~ 	=  T !a À J "  Ã  â  – 1forK 9 %  ²ÿtrick is necessary because every » c) callE � ¨2newy=ðembedded ContextVa×  .; ¢To share c# Óvars between ,nù ð earDown() we neŠ„o execut¤0theªAsideð Asame• #.
u QNote: Ç� modifiesó !nt³¡ policy if,  ówas not instantiatedX 4yetØ ðasyncio.get_event__D #()´ 3tdefaultm `on demì  ÿn�^ ´returns Nonë €I believé !isÃàot an issue in@qr levelE s V �python it cestingj �should reÂaš  in!ryI  0$ulˆ !by fù sù  ¼ )˜ tÉ‚Module()›Ádef __init__ò, methodName='runTest')ý ™…super().6 0 )Î %  h_š  B fLoop =J% aCallsQ' M C  ¦ 
 S» E’  Î $ . Tó Ù 1 Y 0ddA<qCleanup- ð, func, /, *args, **kw
 G ð# A trivial tramk”ne to addN #Ô X  tion existzøQit hažys–2tic 2#æ@igna#•#s ñ accepts regularÍ  u J  —aû ): ƒcoroutinŽ} ‘
   Wë0tenU pally do|0add¦upect.isD ô  †GheckI    ` argumo	Rtherea2 wa¢} @to cG Hó C  Œ ˜ reliably@1. Ibn be "1  ù 5 P()" iP” A2. CScØ :™ :  __Œ __> ÿ? C3. Rx"g Ðturns awaitab³le object
  ñself.addCleanup(*(func, *args), **kw 
3 ð def _callSetUp(> !):  P   !.s ) 4 QAsync4  .a D )Y ¡TestMethod* 1, m f Q RMaybeV & M aarDownK C > ¹ ” "Te2 À t (¯ 8 B  , <Ction@?%¿ 9 Ò ° n ?, /m 	passert ž !._á  iobõLoop is not None®Qret =È (Ã $ U öinspect.isawaitable(ret: fuL | ö .create_future(4 	. ðCallsQueue.put_noh p((fut, j 7 oreturnè ð.run_until_completeC ÊM … _g?if [F o`! 8  ß d ; h" 9   JelseÂ O 2retç¢ e  io©aRunnerÄ –tÉ, Ë @ = q73 =  .Gi0fut«€_result(O›while Tru° PqueryU  ‰c G.getW  è { ˜.task_donÞ   if9  ry v 
 " o  ógß )ry# ?tryK ¯ ? 	7  ^ !if	 §cancelled(f $   % 4set8 ‡	P øexcept (SystemExit, KeyboardInterrupÂX Frais‡  J QBaseEV ZÑCª ÎError) as exÜ !z hion(ex'Qsetup‚™“(	`n ï-lƒ  new_event_ Rð  u!  & ±  Ï`debug(º À  self._asynócioTestLoop = loop
  3fut õ.create_future()# ûself._asyncioCallsTask6 Ytask(*  n ¶Runner(fut)P  € ñ.run_until_complete& 
v âdef _tearDownAy  O a !):$  À yassert w é µis not None1  { / =1 % O =J 	% ðQueue.put_nowait(z ö I rjoin()) í 6tryú   Ð# cancel all €sÃ   3to_  #= ½Q.all_* (
�  0 !if07 
m  " freturn’   1for| O in ;  u .� (Ô  B  Š 	Í  ) Å …gather(*o ,Ó=I ", ¥ ø_exceptions=TrueI L · !ifÝ º Gled(~ H  vcontinuj B � 7() še 9  Ê  .c­7 ­_handler({ 2   â'message': 'un0 %d B ÿ during test shutdown',O : "': /()7  ë2 & }x#� §:genÉ0  É   <  5   kfinall8H set_event_J ¯ >   P.clos( ™1runˆ kQsult=èÉÑXsetup»õ É³€ super()0(re[ 4 É j (P)
"""
p case ibPmenta�"""

impo;$ys …functool tdifflib  dpprint $re
 uwarning7 `colleci  WntextM ”tracebackF Ðtypes

from .±  ž  Dutil ð(strclass, safe_repr, _count_¸ _=purpose†, �hashableB Ámmon_shortenX ‘)

__unit9 = O`

_sub p_msg_seþ°el = objectäðDIFF_OMITTED = ('\nDiffþñ%s characters long. 'a w 3'SeÝ1max< !to†ñ  to see it.')


P Skipó!(EûÀion):
    ""ñ""
    Raise this exception in a test to skip it.
0 ðUsually you can use TestCase.+   ñ() or one of theD ñ ping decoratorsN pinstead' @rais" ‹ ‘directly.& ô	"""

class _ShouldStop(E° %):'  Ó 2The½ s, ^ stopI ÿUnexpectedSuccessP Àwas supposedõfail, but it didn't!Š ² ãOutcome(object¬ ódef __init__(self, result=None%  Í   .ª @ing_s ±ure = Falsen ' B # =K  _À prts_subâÂs = hasattr(@ �, "addSubÊ*")F s,k = Tru  þŠped = []6 À bedFail¾  æ $ @rrorŽ "[]jÃ@contextlib. qmanager9  B Á ÃPartExecutorJ  �_case, isÆ =-VFold_Ë d \ R ï 2trys )   Uyield; Iú KeyboardInterrupt4  ñB4 @Skip² Z as e0 ¦   … ! ÷ kipped.append((vstr(e))Òt T
r 2pas§ ^ - 
! ô exc_info = sys. (c  : 1if › Æ
M  + ( .Y b , ;els"  B ·ù	7 % eq)o + 6 û# explicitly break a reference cycl‘  2 "°-> frame ->i7	˜ u 9 = ç P¯Ò 2andrh � ý 0finô
G i	  � c0


®0_id‡óreturn obj


_module_cleanup 5 AaddM C P(func¥ð, /, *args, **kw
 [ @"""Skcas add9 ,w1ept�h ñ
 items are called even ifšRsetUp}  x€s (unlik^barDown  ).¡ "Ç ]µ  § #, ¯ )"doJ « &s(É Ûbe all % ½ U ps. Norm£Ç 1for¢3aft/ðtearDownModule."""ñ
    exceptions = [] ñwhile _module_cleanups:  4 @func3  , args, kw - =3 e.pop()8 6tryE I  (*A B, **K 3 Ÿ $ E¦ 0 as³ 
G %  Ä ².append(excD  if/ â 6 ö	# Swallows all but first- Õ. If a multi-a … handlerÓ õ # gets written we should use that here instead.8 Vraisen òs[0]


def skip(reason)± 1"""8 pUncondizAally* r a testY )  G  decorator(  S_itemO  y�if not is™ Fance& g, type,  0 @ó¦ools.wraps/ g $    z  Á _& =perÙÒ  +  
„SkipTestú ñ # Â ! =õ ^ 
& " P.__unŒ1st_‰ �_ = True+ @why_/ }1 areturngG (if=2 :3s.FTH¤ 2 = 1 J  å  W = '' w È$ —   >5If(),k Ð" o;… if the 3 Š is trueT&if" Å…  j	º 6_id— oUnless› u3 Ÿ  ÑÅ £ çexpectedFailur;¿c5 Ring_f7 Ap; p_is_subg(A €ed, base o 
a' Htuplžc Iall(X Q P for „ G µ;   Êÿ) and issubclass­ !

 ` _BaseÁÂCaseContext:  â__init__(self,L8casÉ   .*  & =% G -¢ 2 Ó, standardMsg; R0msg-6elfT ñ ._formatMessageŒ J.msgD ] C l  e C ç�U(msg)pAssertRÜs	()‡@est_,¼¨_regex=Non>b .v À_case)
     ô   self.expected =  #
  ! Åtest_case =  # %if7 õ_regex is not None:'  Q _ ( Ú= re.compile( )8 ‚ 
 © J 
- pobj_nam®  ƒ 
 Qmsg =› 
 °def handle(j  , :  , args, kw )Å 1"""6  Í !If&  î ð
empty, assertRaises/Warns õ being used as a@ òcontext manager, so check for a 'msg'ƒ ² and return³E …  s‰ pcall a  �able pass… ¡positionalR ukeywordM ¥arguments. ñ 6try
 !ifè¢_is_subtypDQ,­ `_base_ J @   r.ð TypeError('%s()Yõ 1 must be %s' %“  6  (º Æ.s V_str)N 9 ·  Û
Ð   ? %þQ.pop(Œ,7
L  3 "if¦sN   â r³an invalid ˆ ö €'ñ  ]  'this funcØò ' % (next(iter(Á ;)), 9 N	    5p_obj, *&  =› s‘  < =L !._•)__G ò except AttributHY Hstr(] 
•Awith{I 5 (Ý C, **)š kfinallîÀ# bpo-23890:µu# õ	 break a reference cycleK u—
class _A-C( CBase 8["""A 7Y€to imple¾¨ TestCase.� * methods.ÓŸ %0 = n E�;ion  Dr = 'an °@ion Ð° or tuple o Ë "s'W `‘__enter__cÍ  …. 3xit- ,r <
 —value, tbF �c%  Y ô
ù¬1exc‘! =+µ¨*U !trï Y 
¤"ifw .
²  ô_>±Failure("{}r ôd by {}".format(| ,¾ B   À              øself.obj_name))
( Yelse:   2 ñ_raiseFailure("{} not  Üd".format(excW S ö
traceback.clear_frames(tbŒ !if^ ¡issubclassZ atype, Ž šexpected)® „# let un ù	 exceptions pass throughã Åreturn False v# storeA ¥, without À õ, for later retrievalB ¨ €   =K p_value.J _G Y(Noneü ; ã  _regex is ( 
ð » UTrue
y ý 9 =2 - j
4 ±.search(stry¶ )l¥ _¡'"{}" does¿`match  '!x  X ~ ›pattern, € $ø !__'Ñ_getitem__ =  pmethod(;ñs.GenericAlias)


" ó _AssertWarnsContext( RôSsBase b"""A c, ö manager used to implement TestCase.ab "* “ Rs."""µ`_base_£ 0 = ‡ 1ing) ñ_str = 'a warning / ¹or tuple of "s'Z àdef __enter__(²Á  {ƒ# The __R ò registry__'s neÌ ñbe in a pristine stateøQtests§ M õto work properly.  &vH Ásys.modules.T's(�  G ÿ if getattr(v, '� ,8  < /v./  U = {}Š  .ð $s_¹=<0s.c³�s(record=`}	E  _U .w: % !.s$ü filter("always"Û¶ î x 	×3xitÖ,] 
 ]G, tb' ? ü  § G  »A † %ife  � þ‘�(i :tryæ ›  ­l/!._m%__; ïÿ  AttributeErrorM !tr.Q ªafirst_Á m=tg  ÑmÑ LÖ
h Æw = m.messagW ¨sÌisinstance(wû
K  5  m=inuJ 	© Àg is None:
   øfirst_matching = w
! ùif (self.expected_regex is not None and4  @   8  ý.search(str(w))):9 ‰continue À# store warn¦ ùfor later retrieval0 z - Ó  Ôfilename = m. D alineno%  	# ereturn ö'# Now we simply try to choose a helpful failure messagê ;if Žf
*Ä r_raiseFN ¢('"{}" doešÒ  •'.format(©  ¡ K 
Þ .pattern, ¨
” 5)))H 1if > @obj_M¤ 1"{}7ôtriggered by {}"¢ 1excI ,c § 	 	— ² Oelse¦   ð))



class _OrdË ôChainMap(collections. éÁdef __iter__W  Ý ¶seen = set(b é@mappõ"innJmapsÄ  & Sk in + 
  ] Aif kzE .en"  &  ƒ f.add(k‚    uyield kû ó TestCase(objectÍ R"""A  whúÀinstances arñngle test cases.
îäBy default, th! `ode itÏð should be placedñ �a method †@'run™ 'X !IfO Afixtu ayC Pused 8Gmany� ±, create as–  i 2s aÇ Òneeded. When â @tiat©psuch a …  H 1sub�, specify¾  ç ñconstructor arguments²  Ó " o¾ .‚ O Athat% z  ce‘£to executeû  ‚ „ authors?‰ Ÿ ‘their ownDs. C— "ioáeand de® 8ionœ  's environÀ 3 ('o‚') can bå e! ùpoverrid3 
p'setUp'O³ 'tearDown'á@s re:ctivelyà PIf itú 0necLpW e ƒ__init__G [Bbase¢M$ À must always+@callêIk €importan4at Oe/¤ þRchang… Qsigna~Ï ir
˜ 0sinÆ+™ . ª >ð j edÛPomati¢ yKTparts˜ðframework
    in order ð:to be run.

    When subclassing TestCase, you can set these attributes:
= ô* failureException: determines which e Q will~ ¡aised when„  K ðthe instance's asserQ � methodsj e; test 1rai³ EthisI o ðdeemed to have '´ ñed' rather than 'errored'.I Û* longMessageÔ e6    " m! �s (includ@qrepr ofG  Ù �objects uó #inÚ Ä )¡printed onë  ur` *addi*Q àto any explici¦   p4dÀ €maxDiff:¾s¿ö maximum length of a diff ir Ñ m +by± ! us 9 õlib. It is looked up as anÊH :1 soUñbe configured by individualåÃs if requireÕ 2"""´ ÁuD = A0EÈ'  £Ãr = True r = 80*8 0# I0strÄÒ $ng_î  Threshold,Ëò normal comparisoô 1eadó #_ 6 $² See #11763Ÿ
Q „ = 2**16Š #Atf i  ”¡Suite for «RSetUp2 _ ó upFailed = Falsï  â_cleanups = []9 ódef __init__(self,—�Name='runy "')í Í˜"""Createå ì  ¿‡  OtÕ1usey!na1est H #  j À executed. R‘s a ValueÍ 	 _ F doeïb   notÚaU 1ith{  specified … } €  K     ù  ._YMk ý # =K   ¶ * ëoutcome = None G ‘Doc = 'NoÏ'( 6tryP € 3 ` = get+Ž)@ à %$
R 'if¾ E != Ë
(  ~ £# we allowµ0tiap  wD(noh ‰I�  B   Q# but‰òan *incorrect* or miYÉ@  Êeô‘("no such=Î  ©�%s: %s" %ƒ  ‡ !  9#._ô_Ñ)D:lseÛ‹¾ ….__doc__w 1 
Uƒ "   0sub@ (: °# Map types”ccustomf Eq @func„ ¸aMio#¯0ces€AsaidT  %@moreˆ0ailb Ðgenerate a mo³re useful
  õ# error message. úself._type_equality_funcs = {}' ƒaddTypeE( ñFunc(dict, 'assertDict /'): 6lis: ?Lis: Utupleu T v &seu /Set ofrozen> %5str° ‚MultiLinH1')
+Odef `   ,  Pobj, ›ation):6  Þ�"""Add a% ¢ specific ’e style< ³ to compare6 .„  N ðThis method is forKð by TestCase subcl_ °s that needT …registerš ’their own› `‰ s6 Úprovide nicer¦s˜ FArgsô  ª “: The dat Ý Pall tÉ /õ on when both values§  M   ²of the same¹ (inN&()> 7 d ‰ ðcallable taking two arguments and an opÄaŸ H  Emsg=3 bpraises Á.failureExceF  with aÎ 
U á › qre not ¦â 5"""[ € ,[Œ5] =ÝS×€Cleanup(B Åð, /, *args, **kw
 Ùb,ì O,@0be t'edÙ Vest iá ípleted. ´ |sm0ed ð? ãon a LIFO basi¬%reþ ' °after tearDÚ@on to —¨ or succes½ÿ h itemst àeven if setUp D •s (unlikec .).„cP¦s.append((# E#, M]@°ÖÐ —3ass� O(cls›SaHB 1, e•>¢ ó ‡  óû CP  
Qcls._Ô _h 
 ù r ‹mDHookù ö@settÁ!upÐ åðixture before exercis& 6it.(Fpassÿ+r ¡deconstrucy £[v zs r Às

    @clasñsmethod
    def setUpClass(cls):   b"Hook . @ for* �ting up c0 ð fixture before runn  Âtests in the* 1."
W @8 S   � �tearDown„ ¡deconstruc‹ b Œ Uafter‹ Oall �  ~ ÷countTestCases(self‚return 1¿  0 adefaul2 oResult3 r .Z ( )E üshortDescriptionD A"""Rz æs a one-line d1 1 of^ Ü ñ , or None if noX À/ òhas been provided.�  (  Th[ Ö ° implementa— f $issz afirst ˜ %oft  �‘specifiedz< Õ's docstring./ 5""" `doc = € ._× M§5Doc"   H .I ôp().split("\n")[0]  	 O Aelse
î  À,idmW á"%s.%s" % (str©* 1.__ M__),Ÿ GNameØa__eq__7 w, otherLqif type ‚) is not *  –– DNotI”"edÇ  / � 2 ==| H  >  c__hashª £ u   &((­ ø 	ù ?strP ‚"%s (%s)]<elfš /, s	d ?repe 1<%sr9@=%s>p \? 7/  Þ)qaddSkipÂ", â,t P_case GasonQ2 ´ = getattr(6 ' !',¢)§ 3if  $ Ü— Ç ! ((
{ G  ü
5 0warŸ s.	 &("š %now  b, skip¦¥reported",`  ‡ 
 ‚RuntimeWg 6, 2Ô  ) ù .» fuccess¾ åÃ@contextlib. qmanagerv  ¹0sub¸ ‚�msg=_subùmsg_sentinel, **paramÐU3 a _  ` ³ that will  Éáenclosed block„  É pof codeá#a ~ 0 id{ ö!by!oÚÒal message anu D �keyword ¥ àeters.  A failQ<] Bmarkv ê ‰  t1 as6  ¦ !ut”‘mes execuÃðat the end of the³ enclosed
  õ"block, allowing further test code to be executed.: 5""" úif self._outcome is None or not ð.result_supports_subo %s:P  � Fyiel¨   ereturn% ƒparent =^ F  3if " � 
_ òparams_map = _OrderedChainMap( )M Oelse@ i .6 ­.new_childG %ª  x €SubTest( `, msg,µ ™  :try~ Cwithø s.CQPartEª!orT .]@, isj j=True)M  \n/if» ksuccesª @ Ô�•  G *   2if   ) !-3and ž.failfast©  ? ùraise _ShouldStopa ,el�û .expectedFailurÊ R ‚# If theø2is 2   a � ùure, we really want tox H ’stop now Î @gistOhC… P K :   Ø 0finx 
 5á  =:Aent
• ñdef _feedErrorsToRu,f1, e "foûÓ, exc_info in' 
} àif isinstance(}3, _ÏQ  ×   ïC.add$ 3 µa_case,zw ü > Ó’ sš 4
”  + ˜ ”subclass(4 B[0],0ÍŸException¬   G ° 4°    2 #    L �J ±JaddE«±–¶ E # =ò €a }  ¦ e¡ Attribute¬ 
`�warnings.	  ("PW0 ha” {  `methods íQ¥s passes",}  � 
 ‚RuntimeWs 
QS�&$ ‹™ 3 ÐŒ 7RaddUn(edb  Æ  »~= 	€ y  ý ‚4a Àss method, rÿeporting as failure",
  ù RuntimeWarning)* ð$# We need to pass an actual exception and traceback* BaddFz 
y ù# otherwise the legacy result can choke.„ Itry:  Ê  raD ù_UnexpectedSuccess from None3 ¬  0 Z  � .Ã ö(self, sys.exc_info()'JelseF =add˜ E !)
• âdef _callSetUp B  n !.s 0 ¡TestMethod5 1, m )=  (9 aarDown7 / l #te 6 bCleanu¡ `, funcîð, /, *args, **kw
 S ' (# ü "ru‰ ,ù=¯C Sorig_=$ 9 ù#if 1 isèý   7 Û pdefault8R×(¸ . Bstar Òun = getattr(E 8, '  !',o 
A 8if $  ” 1not) 
˜ n £  o .I ¦0   t÷¤  à  ,  &._! FName¢ Dif (Ô * ð_class__, "__unit; õ_skip__", False) oro € C  , ? 
Ê > A# Ifí{ 3 or¶P was z ?pedñ * o_why =Ô 'Ô ¦why__', '' ”  %orüå P 	Q buaddSkipD  ,è  ¾ 
6 ofinallÞ­P.stop¼¶ ereturn§Cing_ò_
1Ù 7 R  (f 5T % ù_0 x  ƒ /? = — /or  =£ Âoutcome = _O ßÏ¥ å &._: 
 Ö á Swith  .¡ÂPartExecutoröG Gelf.@ð)
            ifû outcome.success:
  ! ýexpecting_failure =  > Ewithd þtestPartExecutor(self, isTest=True)€  �  ( `._call* pMethod(N  )w µ 	]False2 © œ ™arDown()
_ ¾ ºdoCleanups(¯ @for Ë µ, reason in1~skippedS ù_addSkip(result,G 
e 0 ÑfeedErrorsToR4 ; 1 
= &if‘ &.if·  ÌN ?2edFQ0  4 ¿ AaddE…2 ¿ 
  
È  J   Oelsel $Un  Sö n U Q š.©D  Ë 
B rreturn + 9zfinally¨ $ P.stop	@
M  ^Brig_*  is Nonî  C ÓRun = getattrá 7, ' !',C 
g  G7if '  k 1not, 
µ  ,   - "#=ûlicitly break reference cycle™#’e±� -> frame	 Ì .& ] � C 
5 8 L 

/ 	U { p k.clearð# 
G ! =;
:!# B D theñ ù, no more needed  ]#._b 	R Gdef ƒ ) Ð2"""”Qe allu ðnup functions. Norm� …0ed ¶•you after„ "teE.""" �  v Ÿ Ror _O~#bwhile *  ý  2
P–  , args, kw + =5 G.popX  óä"‹ 3allÁ(� *z B, **„ ø## ×Athis.0bac& õds compatibility'ð# even though weèñlonger use it inter5 e cÅEq@classm-1 ÀassCleanups(scls):
  õ6"""Execute all class cleanup functions. Normally called for you afterN �tearDownCG E.""" Dcls. a_excepY U = []% `while + _‰ _‰ s°  · —  , args, kw / =: e.pop()b  ? :tryP   T  (*L B, **V 
; ¹ $ EÀ H  ½ è  ñ	.append(sys.exc_info())
™ `def __Y—__(self, † d¯preturn % H.run® 'dsO QdebugL 
ìø'Run the test without collecting errors in a TestResultÉ{ HsetUWqgetattrq ,ž _c ·MethodName)…C % ÿ ú
5 õ*-1¼â…@skipö È jreasonA‘Skip thisC	ã`raise ! D > ãCfailZ Šmsg=None\ ñFail immediately,¢°ßgiven messagev    a 5urežG(msg³assertFalse‡ oexpr, � ¡Check that�  + °ession is fE 	‡ 0if # 
Smsg =fA"tMÂ  š P, "%sM 2notQ à" % safe_repr(O )Ãbì ?Truë .:truq0if ²  Ÿ î % T í 8_\  ÖÚ, standardMsgkaHonourÚClong— Å ib±when genera\ƒ!s.5 :8If C 1is c%Gmean¾Ð* Use only an1TlicitU ` if it…providede €* Otherwb1use¹ Ý ?  ” Ýéy¢  ½–  : S € /If³ $s ­ ñ, plus ' : ' and¥ 9expä R TS ¹.L¢  Æ û T(orÚS  ifÌ @ \> À  return sta£ndardMsg
  Etry:   û # don't switch to '{}' formatting in Python 2.X< ùit changes the way unicode input is handled: ôreturn '%s : %s' % (sta¯ e, msg)2 ‚except UZ  De` ZErrorË U V ˆafe_repr` E), s  k !)
m òdef assertRaises(self, expected_‰ ðion, *args, **kw
 )‹ õ"""Fail unless an 7 Ÿ of classS   +rv 	*!byYù#callable when invoked with specified positional anF ðkeyword arguments. If a different typež « !is $2   š ð	, it will not be caught,p ¨ ’test case& (beD `deemedcqhave su} d" Î i€actly as�8 an? $unˆQ.¸¥ 0If ) ’  9'anÿ ’ omitted,§ 9an ùcontext object used like this::x  �Ielf.BQSomeEÀ7ion&4  Ódo_something(‹ SAn opÕÆ  'msg' can‹`providü  #„ × "isË Zas a ä 
L5The  Àmanager keep8 !re6 ceÌ f6a6  ' ð' attribute. This allows youJ  inÌtI³ @ ` after ¥?ionŠ ‰ c&cmµo  Ž   6thee = cm.¡ ¶  3  >iEqual(=  .eõ_Í6, 3î5"""I ¢G= _A˜C�(’  , u M ðìY .�(('0 ',)3s, ÛŽ mfinallAð bpo-23890: manu# – break a +Icycl_b= NoneR‚MWarn�warning 4  Þ|  C†ªis trigger vFw “ l
?œ x·�d: depend; !onàother
        ð   warning filter
 ö!rules in effect, it might be silenced, printed
  øout, or raised as an exception.
, ñIf called with the ð	able and arguments omittr Øwill return aL ðcontext object u} ¹like this::x ® s ðself.assertWarns(Some
 Xing):` 4   édo_something()X AAn oç –al keyworÄ   'msg' canC`providù Ghen � s "isÇ  D à 
HT9 ðmanager keeps a refer¯1 tob first matcÂ p !as) ' ò' attribute; similarly,$ fHame'I  ¼w'lineno= ðs give you informaa aboutM  2 G ò	of Python code from whic*ž   w¯ ˜riggered.@ ±This allowsv pto insp kA Qafter� ˆ?ion0 / ì/cm54 G Dthe_� S= cm. Ì  / ­gEqual(9 .”_©e, 147)A 5""" IF= _AùC?0(ex $ed‘  , v J {E ’.handle(': 90s',¸“s, kwargs"3defçPLogs(U @, lo¶Á=None, level yÐ"""Fail unlesÏâlog message of5 ! *< *w²higher is e3ø Bon *q Q_name. öits children.  IfiT µdefaults toK AINFO¡Q '* & JCrootß «‘ ;aod musM©	âÂ,b ðFyiele Ô@cord¨î�6twoª±s: `output`H 0`re4 &s`"Av0endJ Ö ‚   G  • ”be a listF [ ä0ted
¶ d$A › ¾ b  (
Z ‘corresponü ALogRÕ J sr|ExampleÐ0 „ü”T'foo'ˆ'ä/')Ô I�ing.getLÅ(>  ).Ú#('d¨'> Æ  ? ô.bar').error('second7E ¼ 2cm.ï1, [¼ Z:foo:ˆ ,)À              ô'ERROR:foo.bar:second message'])
5 5""" ó# Lazy import to avoid €ing logg õif it is not needed.F £from ._log: õ _AssertLogsContext- oreturn"  a(self,r ±er, level)
8 ‚def _getV ÃEqualityFunc5 rfirst, õ !):5  ð ð"""Get a detailed comparison functi	 ò or the types of ‚wo args.ƒ  N R» ðs: A callable accept#(… õ, msg=None) that will˜ ñraise a failure exF aon if H 3 !=Ï ö with a useful humanI 1eadˆ Terrorï! fÒ #osÔ «	ýF ô!# NOTE(gregory.p.smith): I considered isinstanceë  1(uaó# and vice versa.  I opted˜ eV ÷
ervative approach in case— ásubclasses are}€intended®bJ  Ð ž nå  ·their superN K  Å @s us¸aø# eVð.  This means tesâJ 0subü ðs won't automagiy©Bt ¨.  CallersM Thould7 "ir� �specific ÿ artSpamùa methoÿ Ì0iÇ…   Ç@desiÔ ª€fpriate)R# SeeÇ `iscuss)÷in http://bugs.python.org/issue2578B ã  ‹ #yp6)  =9® dî 0er ÿ@lf._+ _�_´`s.get( ˆ){ B #if3 erk  ± ‡
g ) Óy W, strC *  $ £ = getattr€ 
Š  7 ï! M  õg._baseÝ& ö p #ðkå ã"""The defaultA implementaþ,V N s.&!if! r   =– Yi  å  ÐdardMsg = '%s¾ò%s' % _common_shorten_repr·¿ 
4mC rformatMÃ@(msgœ#anj 
8 R8 UET : I‹N@Failž)’wo object˜!un¡0 as„¡ermined by@E'=='¶   operator*ož 1ionëÐgetAssertEquaó
lityFunc(first, second)
  ½assertion_f& ±, msg=msg)
0 Bdef 0 ù NotEqual(self, \ 6 aNone):7  j ð"""Fail if the two objects are eM ñ as determined by+ E'!='G Å   operator. 5""" bif not‘ 3 !=ï ˆ  Œ @msg  òlf._formatMessage(msg, '%s == %s' % (safe_reprA%),k  K  L †)ˆ J `raise SÐ.failureExcepž › †_Almos‰	pplaces=Œ–Â 	Qdelta0 ¼/un¾(ir/ñdifference rounded toåò	given number of decimal Á D ð
(default 7) and comparingK €zero, or< 0hatf G ‹ pbetween" 	˜²is more tha ¥ 	E  .. Àa   Not2 tÃ p (from ¡ )òqusually® Hsame\ ñas significant digits (measured O  9  + )— Iw {"thðy will automatic¤ — 6 a{¸Š Lï
†¨# shortcut` u return ialta is+ Ëø 
_ LñTypeError("specify ã $B  /Sboth"_ É b = absö# -I°™ 
‚  " biff <=t 
  g ì í   ‘standardM¥ Œ!Œ� within %# (
 P)¬	I M ½“# ; " 7iffÕJelse÷ #ifÔ º Í
  µ ˜9= 7Z ;6(ž,G )_0E [!rT  \Wì t

R¼>ÀrdMsg)
     òX   raise self.failureException(msg)

    def assertNotAlmostEqual(self, first, second, places=None, msg
 I  M  Qdelta) %):* ð"""Fail if the two objects are eƒ ð as determined by+ %irD  ¾ ðifference rounded to' ò
 given number of decimal Â D ð
(default 7) and comparingK €zero, or~  0hatf G d‹ pbetween" 	Ú ²is less tha ¥ !.�B@Note' t¸ p (from – ))¡usually no‘ X same– ñas significant digits (measured O  ‚ ù+ )— O£t ¨�utomatic‹  m.„ 5""" i‡alta is± ANones• * ËñTypeError("specify ; ŸB  eboth")u  ˜€ = abs(fÍ2 - Î# ˜ 
� !if± B $==C ¾ b >Œ 
7 ¼ Ueturn�   ðstandardMsg = '%s == %s within
 Ø @(%s ] âi)' % (I M ‚afe_repr� /)," ù # 	z E 
 ’ )=Jelseö #iff Ñ ä
  µ ¯9= 7® g
á(~ ˆn) != 0^ rsr³ dsS Ä  K |H  % 5¸  m@âà_formatMessageà', g¯K4  ©@Sequ`@seq16q2,Ÿ seq_typeë "AnÒ3itymÀion for ordeˆsg °s (like lis˜nd tuples‰1For[€purposesß�this funcß�, a valid_  ¡  —&on'ñwhich can be indexed, has a length,è Ê ‡operator$JArgs� ,R: TheK &P ]Qe- ÕBseq21 22 yÀ: The expectÿed datatype of the sequences, or None if no
   = ùshould be enforced.1 ð msg: Optional message to use on failure instead� ™a list ofI … adiffer© j 5"""-  ifË _Û ais notÍ :!  J 1seq" u_name =2 !._ )__. @t is¦ ¥ance(seq1,6 )]  a @raisT3lf.ã AExcep('First> q ¦ ™a %s: %s'|  M   % ‰ É °, safe_repr I1)))L È 2È 'oSecondÉ O2É JelsepÍ"Ë%"
ÿ 7Qing = :tryN ¢len1 = lenD* eÁñ (TypeError, NotImplemented x øP%s ha™ d @gth.ßDNon-· e?' % (x    	ë )ß 6if j !isã 
× è  S Flen2ì 2.ð " V Š 3= '$õ ) T ù '11 =æ2 [ freturnL  	Ã 3%ss^ Ÿ� != %s\n¥ 8•ÿ.capitalize(),) +Ùö _common_shortenÄž'2)ì   ðfor i in range(min(¸,S+2)„ 1 ÿ  @itemð Ò=[i]�  QIndexí e   SÁ+= ('\nUnabliQ " eH! %f$i–  Q 	 !(i)wû- Zbreakì  
 #Oseq2ys{ À seq_type_naome))
   mbreak
 ±if item1 !=	 -2:#  M ödiffering += ('\nFirst  ò element %d:\n%s ?' %N  R  ñ((i,) + _common_shorten_repr(œ ,š )Ú 
P ~   elseÈ ðif (len1 == len2 and seq_type is None ´  % `(seq1)+ >2))i  ‹ P# The^ Àuences are t ×ame, but haveA R /s.{ jreturn¼ ifÄ 01 > µ š	±ÿ%s contains %d additional '{  Ë  'á€s.\n' % 9!_nÒ Y-� § ?try'§ Vcextra q RNãr2, safeC ´[ð]Aó	except (TypeError, Index bNotImpÜ!ed ñÊ °Unable to iO Î joAof fc Lq Ã ,Rwj$el<‰s¥ Ÿ\nSecond I!2 1­  ç \121�s³‰ zÖstandardMsg =oí  'P  +  e.join($  « ( Plib.n	 ð (pprint.pformatù1).splitlines(),=  A  = 2= &))ì
À ÷self._truncateMessage($ ,ã 6Msgmú : ° 8 Wmsg, = 4 . `fail(mK Í Ndef { belf, m‰ }  @max_01 = R qmaxDiffO  5if # € or¼(7 E) <=! 
Íy Àe + diff
     ðreturn message + (DIFF_OMITTED % len(diff))

1 òdef assertListEqual(self, list1 Ñ2, msg=None):7  ; A"""A& °-specific e@ 3ityS Bion.g  0 FArgs>   c ±: The firstN Å to compare.l . 2. osecond/ Õmsg: Optionalòto use on failure instead of aR )ofx  |    7werencesÖ 5""".  9.N@Sequ+ Ré L°, seq_type= �RTuple<  U 0, t 1 �( ‘&> 1d’ “ 
” 1 •K ¦  ”© 
R– —)Se# se"?set‘?set�& ` �?setZ † , - 	‡K5 yÀs ducktypingË „support \ t s�•sets, andO ðis optimized for #  }ôally (parameters must a aF k ¦ce method)g9:try®9 01 =| &1. (€)e úexcept TypeError as eO  Ø.…‘('invalidü Ð when attempt& Èh �: %s' % el �Attributq Üöargument does no.t á 221² …A)!ifPk4E1 orç7ce2I ³¹-¥lines = []s'if@ 1MÀ         linñes.append('Items in the first set but not ·second:')
  €for item< Édifference1:%  0 6linp Prepr(7 )N 6if A 2A 	= 
­ — ® Ä ­ l ­ 
× ñ	standardMsg = '\n'.join(ª Õ ¡self.fail(
 ÷_formatMessage(msg, J 1))
a Ádef assertIn9 ð, member, contain –msg=None),Ñ"""Just like r G `True(a¤1b),Öòwith a nicer default m˜ A."""ˆ  #if| 	&in‚ w  ( Ç  !%s0 Pfoundx Á%s' % (safe_þÑ %),i  E  E H D û w(/Noz< E?in ~(zßunexpectedly ƒB e/  ‰O#Is pexpr1,  ?2, û s}" p 21 iÍ  2ö, ð = 1ïa ? 2æ<_IsNot`7 äá! Û d 	 `	Ù¿identical: n‰ ±-‚DictEquaÍ, d1, dŽk |@IsIn1ce(1 qict, 'Fd„argumentbÇa dictionaryiN !2,/ A, 'Sœ O ð
        if d1 !w= d2:
  ù(standardMsg = '%s != %s' % _common_shorten_repr(d1, d2)D ð diff = ('\n' +  `.join( Plib.n	 (4 ƒ   ÿpprint.pformat(d1).splitlines(),< 2< *))® 
ò ÷self._truncateMessage($  , ½ C  5 Rfail(? ¶ = Wmsg, B 1))
¿ ñdef assertDictContainsSubsetI 1, s  s öctionary, msg=None)¹ô"""Checks whether di1 ó is a superset ofU A."""‡  o�warnings.	 /('–  L Pdepre/d'†D# BionWY /`missin\%[] ×mismatched =  ôfor key, value in¼ gitems( Å  if- @ not* ( &   … ¶.append(key¡    Celift '!=L_[key]O ¿ R ð '%s, expected:  `actual 5' %ú  n  R(safed   &,  T 5 Æ  † !if6(F or “fbreturnÂ f Ù 1'U P 
21 MB ',',º 0m) 	Em in]  z  † ã'ifß 
� (ifª
  p ½ f+= '; ñ   MÚ¶sè iUQR’CountEqua“ÿ , first, secondEAŽös that two iterables have the same elements, ‘number ofŠ  ötimes, without regard to order.î  - 9x· Â �er(list(¾ )ó	3 ê 	çŠ Example×ð- [0, 1, 1] and [1,  °] compare eH.Ø  ¯ 5 ' 5  2 #un4 5 nÎ D_seq�  7 = ë , Å F :try½ K � = colleó$s.  [ úð    second = colólections.Counter(second_seq)
  õexcept TypeError:  ! ù# Handle case with unhashable elements3 ðdifferences = _c| _ ð_all_purpose(firstŠ /, – :lseŠ 1if 4 3 ==2 
   ® oreturnŽ Æ ‹ G 0if ¿ Ô 
v òstandardMsg = 'E õ õs were not equal:\n'U  ¯ 1lin$0['F¡ has %d, S§ �:  %r' %„ B for	 !in • ]X  ® ‘ ‘\n'.join(l ö  
¼ ÷self._truncateMessage($ ,q :MsgF mú > dformat< Wmsg, A 
8 2 `fail(mS Á ðdef assertMultiLineE:(- , 0¶, msg=None)“A"""A@ ° that two mJ -ÿ Â strings are’A."""y  ~ @IsIn¹ c¨ Ç 3r, §@argu÷1 isÝaY 'á  ° .L éM æN › ü!ü±# don't use¥£lib if the› ô …too longX  ÷ rif (lenA) > ¼ ±ÉThreshold or4  8  4 Ñ 5 — 0   [ Bbase¦Ý×	×I 6    Á P a.split ê(keepends=True9 Ÿ '  9; 0if á n A )xR1 and‡.M�p('\r\n' , ‹ º    C A = [ z + '\n'µ , 
± [ .  žx€%s != %s(ò_common_shorten_reprÞd
& . ¼0\n'k 0  Plib.n	 ? Å D  )J 
• íQC  …? R!)
˜8CLess.Oa, b%’Just likeîª AÂ(a < b), butïòa nicer default m	;#if	:< b
"'%2@less¢n³R(safe©Fa),  bbÀ standardMsgñ#))

    def assertLessEqual(self, a, b, msg=None):/  3 Ð"""Just like , .A ðTrue(a <= b), but with a nicerj õault message."""S rif not = j  n ñstandardMsg = '%s* àless than or e¶ ö
 to %s' % (safe_repr(a),  5b))r [ relf.faiò ’._formatM  g(msg, ~ 2Greater0,>/(?> b.g© 1%cZ1>Z) = ,]h Isw\?obj‹}Same as‰pobj is E /),Š:  ‘ > 5i’ + ~_obj),s; tk óIncluded for symmetry	ñ L nˆþ  d ú 
Áunexpectedlyf'\:@IsIn}(ceê ?cls4isiI FKcls)¹ ?def£O (
 %s‡ M4an ‹ o of %r/   ‘ ¦1?NotM<ŸÈ!$QÀg))

    def÷ assertRaisesRegex(self, expected_exception r) ?,
  °*args, **kw
 %):, A"""As ð
s that the message in a r‹ %d w € matches  w %.
L FArgsZ  � ¶ 4: EÁ e classÚ c to bep .U 	G é !: õ (re.Pattern object or string)W 	I  M   k Pfoundæ Terror÷ 
{  /`: Funct¤ �called an€tra posi  0al 1 
C t ù  +  
" amsg: OÖ$alˆ A usež ð
case of failure. Can only/ % ã NwhenN2 isX aÁö context manager• 5"""U % 2= _*�C< (ã+, ³¶)Q sreturn X �.handle('ú!',M", 3)i3def× OWarn$warning"!(£triggered w "pXsBasic fN0ing�psimilar\Ù q() with‘1add_C«t es whos»bs also‰ B @regud ¥expressionL 0areŒ1sidÅ ¢successful? /esâ‰  : ¾  Ú Þ- �E+áÿ s
 P  à(N ßàÝ*Z ½Ü% û £Ëš msg=NoneÌAFailñ test unlesÙ e E Ñ! .öÖif isinstanceå ç, (str, bytes)�  ËÃ_2 "ãð	 must not be empty."
     úexpected_regex = re.compile( $)
4 zif not  å.search(text):,  4 ñstandardMsg = "Rj ñdidn't match: %rS ùfound in %r" % (G  K t ‘pattern, v 	. ô# _formatMessage ensures the long Òoption is res	I m¶ Zself.R g(msg, Ý " « araise 8 ±failureExcem  : !)
f Ñdef assertNot(3 Ò J, unò §, msg=Nonedq"""FailÚ stest if xa÷ pregularº±ression."""ˆ  ² pif isinÒ >ce({ Ç(str, bytes)  ; - 
I )ÿ- =è 	N¡ 1 _	'EX!edZ4  ese['[ C[+ ¢.start() :G ….end()],ˆ  ò   Ø .�*  ] ö  <  �Æ  ¡÷	_deprecate(original_func ' & d À(*args, **kw
 .  �warnings.	 êð'Please use {0} ˜bead.'.×
Š ®.__name__)¦D½ BionWt :, 2�yreturn Ý ¿  º . ï Ð±# see #94240  ûÓUnlessEqual =î Gs = \ Ÿ  = !If 9 1Not <  ? | RAlmos8 I  L   O 'If K 7Not N 
# Q   J _LTrue2 R^j  0 /IfT CFalsU w7 =p1   \ 7  Í pMÆe�  ! 2 è5 	$ ð )



class Func©”TestCase(	 WQ"""A þc7Âthat wraps a Ðfunction.

  ð  This is useful for slipping pre-exist òtest functions into the
    unit  Àramework. Op) ðally, set-up and tidy J Rcan bH ðsupplied. As with TestCase,l = Å('tearDown')” Q will� ñalways be called if? ‡ x('setUp; ñran successfully.H A"""
	 ðdef __init__(self, ï AFuncÝ `Up=Non¥ —  adescri	 !):O  3`super(B  'ç  ^ %).m )1 Qelf._º  6   =V+Up  #  & %st"  " º 7 =  ‹ × 0if Â © pis not !ÿ 
Ò &()\ ¸ _ ! Æ b , e 0runxd À à1 ,id, creturnó 3 –.__name__Ð E__eq;Zother4 !±isinstance("  Z ó‡_class__2  >{ âNotImplementedr  Í «+1== ] ¡ —\  = %  Ó g< RÖ? ] w %7 	o:  ç –Chash["  b((typeºT Ò ,KÀ 9 – )Á___str— ñ"%s (%s)" % (strâ¢ %._ï‡ �  as	ƒ ?rep„ ¿<%s tec=%s>ˆ (� 1‘ ˆ fshortD
è «3K ’ 5Ù�2 ´1doc ;­….__doc__% F  ,  þñdoc.split("\n")[0].strip() orº1


¥Q _Sub6   š():Ž$!_c¾÷ message, paramsÿ 	ó; 3 = 
 Æ  ä e ! =• 
# t " =} Às
        seýlf.failureException = test_case ñ	

    def runTest(self):   ðraise NotImplementedError("subY °s cannot beE ¶ directly")] ¡_subDescri“ e ¥parts = []x 0if Š Ð._message is e  J  v Ö_msg_sentinel¯  ³ N ò.append("[{}]".formaÝ S -))n mparamsO õams_desc = ', '.join(=  t   …"{}={!r}n Fk, vd  #   Qfor ( 2 inå w w.items(—  / 
Î E({})` 7 š 5 ¢return " "¨ A ƒ) or '(<´6>)'�,id�C F{} {Ï �|KRid(),À  •ß)ûXshort  G aA"""R² Ðs a one-line n-ƒ of the » ,Ê ¥None if no†2 õhas been provided.' 5""" ç  ‘ .Ø ± Í __str__0!+ð """Loading unitŠ  s.¨ ¤
import os
 $re
 %sy ”traceback Etype …functool ówarnings

from fnmatch l  ,  ë* .$   ô, suite, util

__» ð = True

# what about .pyc (etc) óe would need to avoid lí1ame·ñs multiple times
# · Ð'.py', *and*  ð%c'
VALID_MODULE_NAME = re.compile(r'[_a-z]\w*\.py$', ñIGNORECASE)


class _Failed í .
 CCase¸_¤pMethodN©  = ‘Rc__init(1, m* „_name, e˜L  ä‚_ & =& ­gsuper(š Q%).m g 	³Ugetat· , ˆ }  G Å #!=Í
Ý 
3� n h À  d Z  [Gure(‚  h	= w @ 0


R `_make_ó2ed_Ã�(} ¤CÔo N0= '‰ 8 oö module: %s\n%s' % éT oU ¸µ¨ 	–  µ � IÐ?Š  C I¥  +î)Þ   Ü sN 0Àn, suiteClasð@s):
    message = 'Failed to call load_tests:\n%s' % (traceback.format_exc(),)
K áreturn _make_fM @ (i  " ôname, exception, suiteClass,Š o)

defF  omethodC Û  ¼ B = _Ø _Test(D 	¾ ’  ((A 5,))› š bskippe!W Þ m`@case.; U(str(	)ƒ  ø  t S\ S(self:  >ApassK–attrs = {Ï ': 9 }&  ñ [ó  = type("Module^ A", (� ( qase,), Z � Î*  ­ñ 4),)²ójython_aware_splitext(pathÅ 0if  ð	.lower().endswith('$py.cZ '+  ð ‚  3 Q[:-9]Ö  0os. .g a[0]


I  ­ ÓLoader(objectZ 1"""I RThis + ñis responsible forý1ingV�s accord ño various criteriaN Band › & phem wra"Q in aŽ Sí. „  ´M×`Prefix†  '& @sortÆ " 0sUs[ ‚= staticûò(util.three_way_cmp¾ F °NamePattern.BNoneX  ˆ à.g Ÿ ñ_top_level_dir = ; <  £Œ__init__ `super(K x!, Á.0 ›  Û  Q.erroÈ[Û  ñ# Tracks packages which we haveš±ed into via¨eQs, to£ G @avoi( f¬ åe re-entrancy.& † _èEing_r �= set()
(  ñ  "  × PsFrom	 ACaseþ ,!  Pc ‚ B"""Raæ@ of W š y‘s containÐ 
I ! J �if issub¬”p c¿�  ; °raise TypeEl ("½ } òshould not be derived from ! A  E -ð. Maybe you meant<J I  Ì &?"    ½ ¶¤!ge	 
= !ifÐ 
D  ›0hasÛ
8 `, 'runv ó 
A 5= [) ª 1ed_@ 31lf. 
L(mapn 	V ó n r(Q |Ñ# XXX After P]Ð 3.5, remove ˆñward compatibility h@1forÀQ# useäà_tests deprecaòFtion via *args and **kws.  See issue 16662.
    def loadTestsFromModule(self, module,M Ð, pattern=Non  X !):G  K ó+"""Return a suite of all test cases contained in the givenh 5"""M ñ# This method used to take an undocumentedä §unofficialB @use_Ü _� Qs arg3 ø.  For backward compatibility, we stilI aaccept° E ñ (which can also be   first posiŠ‡) but we• ‘ignore it¸ ��a depreca4 ò	 warning if it's present° ipif len(áª) > 0 or 'í '`6kwsž 9 Z  s.	 (3 5 is‡ V¬ 5d',À  F 
 Dº W¹ ).  |<popn 0', F, Õ 1º ò # Complain abouŒanumberfÛ!s,q±don't forge* 	‘ Ñ# required `mà`	*   s 7t =q9+ 1& ðraise TypeError('sO)»5s 1%alv ´ c{} wer•'.format(ƒ )*œkws) != 0*BSinc�ukeywordi  pe unsor9ù(see PEP 468), justÚ a# pick×ó alphabetically A í!toL 3¦
8#Ò‡multipleí ¡.  At leas­  eGö  message will bB ~#†dictable  1# =¦ ()9[0]Û µ"µ go§€ unexpec4So '{}'"¯	}6= [‚ €for name¥Bdir(‡K Ê Äobj = getatt# ,7  (  'õsinstance(obj, type)`bbclass  †.�KCaseq  M ­ q.append.:  M 5))
S % f³  öp  «Aelf.5C­  è  2oadE  ©1not@
ü:try  Ó r”£ Ø ,–sÔl  4 !exñE  RNas e[ ª_T,¶_¶ç= _make_failed†(4 h  0.__Š__, e, s
¡  9 ! ðerrors.append(erëror_message)
  �return er& Ecase"  atests
 �def loadT ñFromName(self, name, module=None):4  o B"""Rg ð a suite of all \  u òs given a string specifier.{  G 1Theg ó	 may resolve either to a~ 6, aY • class, a� t Àmethod withiv   ‰ 0 õor a callable object whichI  @s a qCase or Sä ‹instanceÂ { •optionallË 3s tá ¢s relativeØ \.€ 5""" qparts =¦.split('.'îß,ë0 = ­, O #ifL1 is Ì ‰n �_copy =  5[:]=  " Rwhile ( 
@  " >try   ç _PÁ = '.'.join(g L Ö  /  7 â = __import__( K 5 Ybreak¹  O �except IG Eª änext_attribute¤ _.pop(t b# Last†¡ so we can 0 itñ æuser if neededõ    Õ	Ä_make_failed å(î N 
Î  , ×.®CCÍ  ¢ /oté
` 0# Eâ Ý ¢top level « ¨ @: reºC tha!ù  S Ÿ ‘s.append( ê 6   ¸�_ô	hÌ'[1ØSobj =3 1forþ 1 in s+æpparent,V  = P, getIQ(obj,H 
o’Al•Z as eo  ß 1# WRò 't traverse somŽ y ‚ ^\Iif (Š ¢'__path__'!)1not v  7andZ/ -   `# This) äa package (no z   p	‹°lib docs), g w« I  ó # encountered aÛj[oƒCing.* Ñ OtellÑ #–ðdifference betweeî­ `.Wrong	 + ž L â  .w5 _ 
Fjustá š  -5ðis more informative.
           ñself.errors.append( ¦_message)
, 
 rreturn * Mcase& ]else:  B ð# Otherwise, we signal that an AttributeE• ï has occurred.P … ,‘ » ÿ = _make_failed_test(C  — ‘part, e, ¿suiteClass,2 !'FX Ä to access a¼ Ÿ:\n%s' % p  t ÿ	traceback.format_exc(),)u™ î «+Ñ úif isinstance(obj, types.ModuleType)ÄøŠ ÒloadTestsFrom2  D ¼ /ela À) and issubcc 7  , G.Q ?Casx 0  C z (Ü �FunctionÞ  ‰  ’ bparent´ + Â + 
Å >pname = jYs[-1]O  ˆ @ent(+ Ð  š ð# static methods follow a diffeª Z pathU Xf notÔ 0get¦(o !, g á )s.
ø � ü ([J ]¬ ö0 ÝSYZ 5obj½ ¡if callabl™1  Êv = obj(y  ¤ 
q ' /, |  6 €  / �   Ë  ! ¨ 6 N $| G ([> ( + %`raise   ("
ring %s ] aed %s,Û a X 9" %º  ]   #,. `‚ ~ àdon't know howî UI À from: %s" %Ž!)
† Idef `Names(sAs, mcH=NonìB"""R[a¸r of alln  ] ø`und usöthe given sequenc‰`of str% ýspecifiers. See 'œ 6()'\1"""Æ  @ÀPs = [½ .9  AÍ Q) forS1 in sã¹](a 84getÔ6 å L	1Uorted
 ;,Œ Às found withóin testCaseClass
  5""" õdef shouldIncludeMethod(attrname):+  > tif not  ð.startswith(self.q B kPrefix?  C Éreturn False\  <  Func = getc ( À ,w )8 ” �callable5  H | ñfullName = f'%s. Y' % (k  À 	” Ê.__module__,np.__qualD   Ï   	O 
È H � ùPatterns is None or \D  “ ôany(fnmatchcase(Î 2, p@ T) for O in e �  ä  Fn� ÿs = list(filter(, Q, dirv«&))L "ifn ‚sortTestjsUsing]v .. ò
(key=functools.cmp_to_keyl # Q x OU 
9 ò`discovÏ Qelf, ÆE_dir1 ='8 ð*.py', top_level# =‡[Ã"""Find and s 1all òs from the specifieds �  Áðdirectory, recur” into sub €ies to fn Kthems M  º €s found š ’hem. Only™ 0filM Ahat 6� ,U willM Ábe loaded. (³Å shell styleRE Ring.)d Ô Aàmust be import«Atop c2 of� uroject.‰ I « q0  ‘ ]D 2yK n  ÄK i % ™ ž¦eparately.Ñ BIf a?€package Ñ& (I  n  '__init__=)`mîj2thež Q  { #qchecked¶0a '‚_×!' uion. IfÒ °this existsî An itÇL Balle
  (J "er«sîg) unle" O” ñ has already had�  s ¦ ß B\yž °invocation,|`which © ¬  h mH0 obøØPscannc %orO 	2 - õ Ansur_@at wPaR Tuses � ;VurtheJ  QchildÜ @`at infÅe�qon doesýjhappen Xe‡a y> S*not*S eàj,â N áis responsible  Ding gsUH Àkage.

     ñ<   The pattern is deliberately not stored as a loader attribute so that
    ð*packages can continue discovery themselves. top_level_dir{ j %soO  p ±_tests does� ðneed to pass this argument in  5 4er.u E().
Q @Path1 ò
e sorted before being imp õto ensure reproducible executionP  orñeven on filesystems with non-alphabetical 0  k 0likP Ut3/4.N 5""" õ	set_implicit_top = False! .ifBàNone and self.7 
b Ð $ :F  ¶k# makeN  opé ñal if called from“Sin a ò	Q 
Ú=Ž 0 /elÉ 
¥  6Tru É x @tart^# °os.path.abs (  )8 !if}	  p"syA 
­ `# all ¹ó modules must bedaOP!thz 
¥ directory  Ø ò# should we *uncondižply* putX  sî B  ž [firstK 4in µ  .�minimise ’�lihood of¼ñflicts between instP á  wdÏ!op�™versions?0 { ª.insert(0,x). Ã=- ŸAs_no11ort]/½s_namespaceL ªes = [] 4if disdir( *o ]*))ý % =C 5 i  á"if¾ O + !æ 
^ / î   Û£  isŠ² Ujoin(– ö, '__init__.py')rJelsem P# supG forÇº0dotB  ]	Õ :tryN  » _ÕVort__’ ‚  " �except IŒ^ErrorF i Ï  _ Cthe_³ =	 %s[! 0    öfpart =§ß.split('.')[03  ý  L g  	? -  Ø0dirg&((Å 0.__ì7__)É7  KA¯NÀ
             ô# look for namespace packages
&  Otry:  % ðspec = the_module.__ /__3 ÿexcept AttributeError^ _None
P 0if n A and	 °.loader is 5 Z 9 B.sub¸ ð_search_locationsD ?notH  6is_K_= Tru®  -    }zpath in:  /__¶  =   @if (œ ðset_implicit_top( 5   =  m ÿ.startswith(top_level_dir))†  Q �continuev Pself.¤ d O = \8  e (« Yplit(j wj 8  ò.replace(".", os.Y �ep))[0])� Òtests.extend(Ò Qfind_ ¦ ,D • 	 patternG - Û=Ž)Ú Jelif€ 7  __—³sys.builtinÙä## 0  Q	’raise Typþ`('Can ‘;useD ?s 'G 	7Ó   'as dotted� àq') fromÇL OelseÖ ­ C ‹ ò'don\'t know how to discover† O{!r}Ó h.formaè)Â €  ÉÎ !ife­)  Î Ü	®3 0get?pectory_cainingEeOpart’{ y—aremove2 —  3 Ã ËèQ R 0if oSkortablaImportº0('S@B dirò 5i$ B q %r' % i )Ê“X~ = listpS #, 7éð return self.suiò0teClass(tests)

    def _get_directory_containing_module(self,  q_name):=  A  r = sys. "s[ + ]* ð full_path = os.
 @.abs (1 “.__file__�  ` %if- @base~ (J ÷).lower().startswith('__init__.py'ª  N ereturnR 1dirQ �  a )¿ Felse÷  M ò# here we have been given a Ñ ° rather tha Åpackage - soX J 0allI õcan do is search the *same* ¢ a [is inL ùshould an exception be raised instead4 - 5Q_fromÐ  Éo0if  @ == @°._top_levell
J€ 5'.'— < ô	 _jython_aware_splitext(±@norm* ( )7@_rel l + ,” ì¥assert not+disabs(W P), "PË@must] z!inš…project"Ë N @ 	°?..'P Q  5 = M ureplace†sep, '.'Ñ a 9 ËHÍ  Í  Í±__import__( ‹ Y ý ! ]f \match)%, ],(Gternp ð# override this method to use al/ aative ^ Ìing strategy› !fn# ÷0pat< *þQfind_ü L ¥š  , Õ ¨space=Fals@"""UXpby disc¸  y. Yields W ö suites it loads.""p# Handlç $e ¹ J3is 1Ó  †  kAelf.¶  ¼ í(º ú#»  R•'.' when &  œ	–@ (anf© : bUP# def_ U  a¥ %).§ "ifu  !=† T  © P#in{  dä s· 1 V whilAcallßt\ j TôQFromMÓ °¥ ¶  ‰ °2s, B…_recurser*Îð  :   Y9“ + !ifs_ G;Non^ & yF) 	m  a+ot§ 
A ? ð # Either an errûor occurred, or load_tests was used by the
  ­# package. ereturn €# HandleG – contents6 õpaths = sorted(os.listdir(start_dir))M @for 2 1 in %s:  ¡ Qfull_  P= os.
 V.joinL ,7 Q  6 ò ð, should_recurse“ ‚elf._finY (p  > t [ ú tern, namespacei 1if l Ê is not NoneÁ  Q Ryield) 	m +if£ ; Ä# we found a¡À that didn'tÓæ† x    ¹ ú @get_ R_fromþ í 
Ù  ; s. CCing_`s.add(E 1 >tryÂ  J  u  U ƒ%s(� n K ofinallh ] ² ddiscar¶ ƒLdef 	 > /, � 
v=False)æ C"""UU f qovery.
c  ® RLoadsú ÿ Ña single file£öa directories' __init__.py whev0pasi 5the1 j R¤°s a tuple (‹2_orþñt 
)35"""¹ @baseå w ²%ifž isg % - !if)ô	VALID_MODULE_NAME.match(e c 6   õ# valid Python identifiers only»  ,   ¶“!, ¸	# ‰  õ!._} ‚ 
–  f  # #!heõ l 1es,·9 it– t– ¯zVmodul÷ N m  k É ÿ	except case.SkipTest as Ø ü Â_make_skippeYW B, e,ï¿suiteClass)Šr 
' Á`error_‰ ",  `messagÓ \6 .   Š Ñfailed_import � V� D ! k ‘s.append( _y ñ n   & « k?els> @mod_+c0absâ“ k ‚getattr(ÄA, '_? Ð__', full_pat[h))
  ýrealpath = _jython_aware_splitext(3  B 0os.6 .? Ÿ(mod_filec  1fulc o_noexti - N _| j  4if ‘ À.lower() != 3  2 �  :Ù Ômodule_dir = æ „dirname(] G   ' â  ; i @baseC (³ æ  1 �expected© ? å ¢sg = ("%r ð ó incorrectly imported from %r. En / "O  ‘ @   "+ tIs thisX `globalU ¯nstalled?">qraise I| _Errory l amsg % s -,m  (, # ñreturn self.loadTestsFromMù U Óule, pattern= …), False Eelif Wisdir´
[€if (not ¬ •space andI  Ñ    "  isK( Fjoin^ ú, '__init__.py')))o  M æ DNone¹ 	q  ú  _tû 0 = & 	   Â " ==P_get_ _'¬¤ 
ã>try£ ypackageO �Q  [ ( 
L ðexcept case.SkipÀ^ as eb Ñ_make_skippedõ W B, e,Ê ­suiteClassæ Lr _ e¥_‰ ",  BmessÓ \P F   Š rfailed_f� ”� D ! k ‘s.append( _y 
* r & « 
Ç % ?els> 	#ƒgetattr(µ6, ' !',B} b# Mark9  ª–being in C Ï (possibly ;´ ø _/ Cing_K Qs.addÊz q ë ÚR  Q  ?ÿ]  � O (ifÅ 0is Å O. /   #2 w Q) has! 2ed ¬ for us.  P â- ë   À        retuûrn tests, True
  �finally:  ( õself._loading_packages.discard(name)9 JelseG öreturn None, False


defaultTestLoader =  "()# b _make! ò(prefix, sortUsing, suiteClass=_  ä ²NamePattern )�  Á h  á  .Y  „ qMethodsd & =p ä ,  i ( P— 2 =   % Ž ! =… / 'ifÊ ­ — å  �  : \• V1 geV@Casei  s(«   (,§ Gý=util.three_way_cmp,¨ `Iu œ w  � ‹ /).« )Ð  Sö É  ='X 'Ð - T 8 .÷e ã < W ).ƒ F PsFrom	  s(x  ¥   . Ú Dfind* „s(module × " Ý ” = Û =M§ %(\Ú ¸ �)
"""Unité ô main program"""

import sys „argparse ³os

from . -  R£er, runner tsignals$ ôinstallHandler

__u„ =êð
MAIN_EXAMPLES = """\
Examplesm %(ª !)sô_Ï  J -…   !s ¥  æ + 5
  B = séC B + G  C .k “"  G ‘specified“ ! m A �path/to/< rfile.pyŒ A   Ê #  Ä�

MODULE3U  i çq set of¯ s©  MyzE @ Ã' '' '?  X' So4ing)8   D ‚ mAall d!*'À o Ç 1  6in ‡ bÐdef _convert_?D �ó  # on Linux / Mac OS X 'foo.PY' is not  ab2abut on‘ð
# Windows it is. Simpler ó0to do a case insensitive match
    # a better check would be to óthat the name is a: òvalid Python modul$ .  ðif os.path.isfile(@ Q) andJ ñ
.lower().endswith('.py'):>  œ 	B 2absA    $ @rel_d % =n 0rel . , •getcwd())Z  : ^ K T) or  b.start  Ï Grdir¤  J   areturnÙ 	f  ô % =O  ñ# on Windows both '\'ð'/' are used as Ì 7 Òseparators. B¹¢to replaceJ @thanr yd µ eth.sepF ­ c[:-3].? ¶('\\', '.') / > : ð 

def _convert_é ¢s, [# –Q) for," i4;s]
P `selectÜptern(pa¤n[  if not '*'A   ° = '*%s*' %F H Å & ó


class TestProgram(objectn ò"""A command-line p'  ð
runs a set of tests; this,‘primarilyz !  ú amaking+ 8!s Hòniently executableL1"""@ ¡# defaultsH  l 1ing m€Q=None Ñverbosity = 1 Àfailfast = c ñbreak = buffer =Ö NäÁ= warnings =¦   P‚  e ñ _discovery_parsF  q  Ó_init__(self,î Ä='__main__',Ò  ~¾ b, argv G  _  ö bRunner% ¢ �Loader=l .& T  ,J µexit=True, /D=1, *` . L F! ? ó*, tb_locals=FalseZ × âif isinstance(ÇL, stf A.   = __imporZ 
Ý `@part  p.split(ÜF[1:]- „   
` qgetattr·v  , R h JelseG 
C x -!ifÙ  #
:  óp = sys. 
6 S  ¨0 =  
 ©% =´
! »	ö
% ü& =
# Þ-
 Ü .è# %ifü è Á ð  kzoptionsð# even if Depreca$ W™ #¤ignored byFà
            #ñ print them anyway unless other warnings sett	 Ware
  à# specified byJ 5 aarg or é-W python flagB Uself.i µ= 'default'& Uelse:  } z# here ; i§ 1 ei» !toy Ëvalue passedC " { Aargs° {o None./ !IfQ ±user didn'tW 2 a d 
� KwillA "beX ñ  This means thaý behavior is unchang± áand depends onŽ { s‰ Šed to -W¸ 
– =�œ ! swTest =  
' ÖtestRunner =  % ELoad%  
% ûprogName = os.path.basename(argv[0])2 �arseArgs   0run¼ As()
6 àdef usageExit(ã `, msg=Ø)K if   [F(msgc "ifjÀ_discovery_pŽ ­ S 
B  o ¡._initArgP)  ™  ]    g f_help(i Psys.e² 2È _+  < 0, *ª`, **kw
 
Ñ  # p.moduleLŸ O c._mainÌ s.format“ ”  ³ 3 ðMAIN_EXAMPLES % {'Æ"':   Ò}; � 9.R l ² g è' ¬ "_ODULE®   1Ôb µ  , ˆ\  ×%m{bif lenÁP > 1 Ò g Ð[1].lower() =i'Z %‡ &doTP 7[2:2 )   areturnâ     @ ùø _JJ A1:],Ô
Êaif not .üsœ 0# tÛƒallows "òp-m unit4 @ -v"¦éstill work for   ¤ #] o
Ó " Æ 	[ aH ¨ ì Ó Q    Ðs = _convert_ÜsÌ   s^_# !___œ_ #BdupportVd/..0›À = None
    ð    elif self.defaultTest is None:
#  €# create" òs will load tests fromI imodule; a  ( qNames =^ " „ ±isinstance(. � j, str)� $ R 6 )a sÌ ? MlistC B 0 ÿ 1()
^ 8defB ,ð
_discovery=False, Loader=YÍ Ì �Patternsï E .. " =| ¥  Á+if– 
`  É(erF i 3 if¸ S else (! d % ‚ ! =4er.r.start,ª pè  6topL M 3’$  ÿ ¹ .Ò ªQFromM“… Ÿn W › V  ÷  ,s  Ñ ¡ I  añ _initArgParsersq B�parent_p ³ Q_getP 9 ®h __main7  FMain5 	^ 6B ßyG  D L á ­   a 
å s¡1argê €.Argumenæ Âser(add_helpnŸ .  r.  a3 ò('-v', '--verbose', dest=' Oity'Èñaction='store_const',  /=2; ¥ "'Vy † output'Y¯ q¯ @quiei ­ 70­ Qw « u-localsS4tb_ ñ ” 
SOtrue„IQShow a ÷	 variables in tracebacks]mofailfaéƒfƒ; à  ß 
 ó ã  5 ç Ðtop on first t — or errorà  0  9.! á != ~› Àif self.catc÷hbreak is None:
  ñparser.add_argument('-c', '--catch', dest=' K )',D O  ÿaction='store_true5 phelp='Cv ù Ctrl-C and display results so far')… Vself.£ … = False$ 1if # obufferb9  a û 	 
(B¬ astdoutÿstderr during tests�  8 ÏNamePatternskF áòappend', type=_convert_select_p— e0‚Only run� which mEð the given subst5/Ê e = []
Úrreturn + ñdef _getMainArgPF(a,( Fent)h9 a = arg #.Ak8 ’parents=[	 ]Ú/ ‚r.prog =Á   ½Ÿ $ @int_* 4_pr ¶  š. 
ñ Ïs', nargs='*Ë e ð='a list of any number  M µ modules, '¨  ~  �'classesÝ9 –ethods.')´ �ŸDiscovery†W0'%s“w ?' %–Aepil¼Q('For£= Ry all /� must be6	ð'importable from åñtop level directory‹hK yprojectm!-•'--start-d  6%"D  1to 7 í('.' default)"
µ"-p™/Œ  z
Ä"4 to2 S0 ('ŒO*.py� t� Atop-‹' ?top%/'TÏ¯# (#s¸ aÀ            ó 'start directory)')
  Âfor arg in (( °', 'pattern etop'):0  7 ùparser.add_argument(arg, nargs='?',0  4  ±default=argO Ÿ.SUPPRESS; Nhelp8 %)
t qreturn X r ðdef _do_discovery(self,û çv, Loader=Noneë  " .;U= '.'`  #Ë = 'test*.py" `top = U : !ifr q is not 
[ð# handle command line4  s ª j  Ä W  ]1if ˜ ã _ m  … 
i  3 #T 9ingM   N �initArgPó&s(9# � q .x  s!v,™  Z öcreateTests(from¸ U=True•œ>  Ç2run6  G ¯ªcatchbreakò �installH`rÊ 9  ]oRunner3 p .% 1= r. P.Text“ = IQif isv 1ncep> X, typn P:try´   2ests ! =c_ ±(verbosity=·  _ [ 	 ‚failfastJ  I  bbufferG  E  ‚warningsG  I  ƒtb_localJ  
ã 
þexcept TypeError¤ & ±# didn't ac/ Ethe U  Ã) 3  	U° ÊÝ
{wî hD or ¹‹sŒvR ™ Jelse@# it5öassumed to be a  		u q 	) –result = 3 F.runWŸ ðif self.exit:
    ñ:sys.exit(not self.result.wasSuccessful())

main = TestProgram
# mock.py
# ¡ tools for ñ+ing and patching.
# Maintained by Michael Foord
# BackportC ðother versions of Python available fro† ðhttps://pypi.org/project/mock

__all__ = (
ú s'Mock', Hagic ®  „sentinel tDEFAULT 4ANY 5cal& ô create_autospec# IAsynk ¤FILTER_DIR# aNonCalÝ ”  °  ä T_openD ˆPropertyA 0seaž a)


imba� $io ¤contextlib   inÆ t Upprin 4sys �builtins
— a  p piscorouN‚function( Ttypes& ô CodeType, Modul Pethod 3 Ôunittest.util; ’safe_repr$ e �� ôwraps, partial


_° � = {namev	 tin dir(! P) if "  ö.startswith('_')}

È !ñrue

# WorkaroundX Àissue #12370 òithout this, the __class__ pÁñies wouldn't be set correctly
_ð �super =  ¡

def _is_|¡_obj(obj):êi �instance_8 ¤ Þ $is   %, °B  <Äreturn FalseW rhasattr5 0'__{7__'6 Ÿobj = get( H Y '  X S) or ˆ€.isawait 
ù  � ( ƒ %if|   ó, '__code__', None( á ˆ  < )­ BelseV3 Œ Mj3 @# caÓFuse s@ on ²0 ob»`s beca# Çthey overrid&ˆ ±# The base =j1all@s isÞ Q6 k1sub7 („K1  2VPexcep¹+ Í L Y Ò  & t, BaseE9  Çƒ *  … )� ,š <objD A ˜ ~extracteA~@ced º ¹ ss will µ 3a FŠ [ Ò  " " ¨Bibutäp# whichP ªRactuad®à that needs to­Qused.ª 'ifæw só 
D … @± @obj. X „4objðget_signature_object(func, ñas_instance, eat_self):
    """ ð8Given an arbitrary, possibly callable object, try to create a suitable
S „signatur/ .a õ	Return a (reduced func, . ò) tuple, or None7   Tif isÆ (; çtype) and not æ Û  Œ À# If it's a / . ôshould be modelled a! â, use __init__„  I  r ! =´ . Ø   À# Skip the `\Õ` argument inM / ƒb = Tru5AelifÇ æ ÓFunctionTypes¶u ðIf we really want”Ó  É-1 ofš apassed,‹ @# __Þ6__ ¡looked up,’ ï 6tryc Œ 
Q d úexcept AttributeError@ r ÷7 %if¨) Csig_i spartial 7 )8 Oelse1  8 " 	» w   ¥, inspect.‘(q \ Ç LValuÃ –# Certain* mQs areCÏsupported byi  a  I’  Ò æ


def _check_– ® ñ mock, skipfirst¿ âc=False(¦sig = _getA _Å<&L Ž  if›1 is�U¢ LŠ d 1sig  ³ ² @sig(ð, /, *args, **kw
 ž  ñ œsig.bind(# N Q_copyõƒ_details· c ¬  m(0)._ 44 = + Q * 0_ =î sv  ñ 3opy¿ #~ðexplicitly don't ² 'òdict__ into this pas it w„” ô# expose original a+gs that› Þ !ed7 6for)  h(  Uô'__name__', '__doc 8tex&_'†'__modul7 tefaults< 7kwd m 
 t 	Y  0setÈ ±Fopy,­ 7, g  )Ï > 5 Ñ²¢C(obj• 
2Aobj,ü  d Ë„2  ô(staticmethod, class M  —)U V 4 ’ "._Ä_à %if— '„!',m)v Ó z¯ ¿ ððis_list(obj):
    # cñ!hecks for list or tuples
    # XXXX badly named! ðreturn type(obj) in (@ ,> ò
)


def _instance_callabl/ :E ó"""Given an object, Y ³True if the D is D .? ½For classes8 w ¦s would be= 1"""@ ”if not is-  Ê ,Ô )¡ palready¦ * @   ¯ rgetattrA !'_í  __', None)»  j   
; @# *c˜ *™ ²broken by aÐ ð overriding __mro__—Ã__dict__ viaF aa meta  ÆAbase�pobj,) +@.G × 0if ) .U V.get(º 	´ 6 ó  ¢t TFalseöôset_signature(mock, original, F=4 lõ# creates a function with I Ð (*args, **kw
 Á) that deleg; 4to  u ÷ . It still doesJ cö `!by  ‚a lambdav  zAsameä #; "as–Ï .Ò¹skipfirst =R& WM Presul( (_g'_((%, ^ )B 3if E !isc¢Ž þ +  K,¾ # =4   œ=sigVN �sig.bind# E `_copy_b �_details( $, Z ) 8% =0.__ !__E †  ã.isidentifier( s  @ = '^ Aopy'9 `contexH4{'_r 5_':~ 0, '0':  }5 �src = """-%sØ û O ! F e! Q""" %++ ³exec (src, ± ÃË $ = [å ]4 a_setupYQAopy,Ä É@ ƒ G x9 Ý 3 .! =X §  N!rtÀ0ed_á F  —„  I .9 Ü e ` !4 [ $noÄ + ¿ 
8 c  Œed_onced 9 	e �' £ > Àkwargs)
    ðdef assert_has_calls(*args, **kw
 C):
  Ïreturn mock.7 6 a 1anya ` 6 _ `reset_” (« áfuncopy.methody ñ s = _CallList()A  Ù + ?ock) 
 d .o C dret = I 'e_value# ò if _is_instance± Ðret) and not E !is^s ¡ :retw U n  µ’ed = Falsp  P_counž 06 _ßo = Non8    @_lis< 7a ^' Z	“ 7! =. 	-  side_effec  š 	+ k”_childrenZ 
 
2 ÜZt_with =( 4 oã9  > …p  0 /  	. ´6 =  	$ 	ô P ï * 1not.|>  2 L _a  	4 ò__signature__ = sig¥ì¾†delegate|0


sÁ_setup_async+ (6   .Œ€coroutin@ + 5io. s# œ : [awaitV  7T R\ ‘# Mock isóconfigured yet so the attributes are set; Ato aAtionQAthen4 ÑcorrespondingUu helper0 D 2is ¡$ w< ) óis accessed similar to e å.D  z€wrapper(« _, /, N0get- ¢..,è )(ÿ1for  c in ('}™Aed',�  9
 ( s-  Ì-  â72 1ny_¸ *  * s+  †+ Red'):7 #2Ðattr(mock, atótribute, wrapper) causes late binding
  £# hence at8 ò will always be the last value in 7oopD ÃUse partial(w ,S ¢) to ensurO l ‡is boundK ¥correctly. 0set3 W(mockW ,s 	ñ	)


def _is_magic(name):U ðreturn '__%s__' %  ‘[2:-2] == ñ


class _SentinelObject(o J ¡"A unique,5 Cd, s.  ( !."r ‹ Â_init__(self0 F  Œ  .‡  €   8 Crepr8 2 Æ r 0.%sË I 
z oreduceD ! †""Accessîsîœ aÕ, usable as a)?.""$ì Õ _ê hs = {}à g#á ]!if‰  Üp'__baseø g  ð# Without this help(unittest.{P) raiIÁan exceptiond ?     $ AKUError! Ê ±.setdefault¢,p ())í ÍD'


3& =Y Ö()

DEFAULT =ˆ ˜
_missing øMISSING
_deleted ðDELETED


_allowed_´ ¥þ 'û _BP', '_O_ Òside_effect',9 ) 	 > fparentN Dnew_ =  ‹ 
&  $
}! Ò ñ gating_propertyŠ~
Ô B.add d A_theí $ =˜ 1' +l  ¿7getó= %, : =
 q  I"si~2lf.¥ eV  " 0if % zis NoneÊY | g D ( #ig9" ¼ s¼ ½  Ã P&…_dict__[¼ 2] =ˆ¢  ;elsþ .sÏ ,3 Cõ ë _get, _set3îø CallList(list):~…containsl½ máot isinstance(" #, L  ·  Ž   ?.__[ í 2lenEb = lenX ð)
        len_seólf = len(self)
   if �_value >  ! :!  ( Õreturn False
 õfor i in range(0,> ! - U J+ 1)O °sub_list = l ‚[i:i+len… ]`  z 6if . != R 
M  &   ETrue>  ´ Âdef __repr__J . ð pprint.pformat(¥ * A)


@ òcheck_and_set_parent( ,Ÿ À, name, new_
 ý » ñ = _extract_mock( )Tøif not _is_instance% ­ Û   Bif (K .2 x 2 or‘  � 5 or&	6 Ç 1 isˆ _None),  Þ 0  í  • S¦ q /2 = :  dwhile  | ð À# setting a 6 ¶ À) as a childí q S` of it^e  � �# shouldÝ ¡modify theR % (if‹ K ˆ  F e Ö     ¾ == së b  â†V e 1 
% e (  \% =ga ?ame] Š Y 0ameU "amJï Zð
# Internal class to identKðif we wrapped an iterator object¢Rnot.
; ¢_MockIter( 9dS_init¤,?    Óa.obj =a  > Í: 4nex: 5 Æ   Ï A #)
Š @BaseG 3ect3 D5 •¡ = DEFAULTg! €side_effÝ  = / ‰ 	Ã à/, *args, **kw
 j  Ò dpass

Ž °NonCallable"(ž - £"""A non-c! € versioní`. B`"""L…  ¥z_(cls, ƒ R   „# every s@ has;B ownçÖ +  soåðcan create magic methods onR0 ìÐwithout stompÇ ³ Ather|s0 �bases = ² Ö w  6�ot issubQ   ` Asyncö WMixinÒ  4 0# C© @0pecÔ@an a3  Q ³µor function‚  ; `bound_¥ ®ÐMOCK_SIG.bindèBtial� Ó¦).argumentÎ  L @specK 6 = W a.get(' _set', &') J É M %A and2Û Q_obj(Y ðarg):
            ð    bases = (AsyncMockMixin, cls)
"   ò	new = type(cls.__name__,? Ð, {'__doc__':9 . }B ðinstance = _safe_super(NonCallable| w  ` †ew__(newB treturn I !

ž Ñdef __init__(  °   óself, spec=None, wraps  À   " B_set 	C Sparen " _) Btate+ Q _new
B='', 2 	K > 4as_À Ð=False, _eat_¬ U  un …**kwargsL %): (ift @ is è    £ • 2 = 	 9  _dict__ = ‚  · c _! ‚['_mock_A &']L  G   *  a(  	 P A* ¬ / ƒ 1  b asealed` qý !if û <?not@  ô 0pec) g  ó     u = True  ˜Õ Z –  ” ( ‚ £ •z1addC(v × | ,—YS)K  �children%{}½ ( 5% 
 ( �delegate+  ò { *al“ M  | Pcall_þU  '   + Qcount, 0¨ T B_lis- _‚VList(m` „ < s` 3 k  method_0  ¿   c ù_  B2if 
Ý‘configure¢(1û Qp D /).B3pec7 , ™xx,þ Ó  � _s# )©battach©  y  , X·, attributeÞ5"""D A8 ! a/ f as an4 ‘ of this åÑreplacing itsµ E andJ ¶  . ó€s to theK Rached_ ðwill be recorded in& C `Þ`^   `Ç ï`N Í sš .Ð Qinner qextract (J ¼* .  ‚! =¬” '  Yì + À inner_mock.ó_mock_name = ''
  Qinner . D_new' UNone
* àsetattr(self,  pibute, Z ")
) 1def “_add_spec/    ,  Å_set=False):\ �"""Add a" Q to aF 0. `3 õ` can either be an object or aE ölist of strings. Only© ˆs on theT Õbe fetched asI Ü as from5  å .ä  :"IfG  Î �` is True) ?n ov  É È ¥be set."""q  S86pec2`¨) � _ / !, }Â_as_instancet,t  Æ  P_eat_ˆ ( œJ �class = 8  €signaturZ  Pasync; &[]@fº°ttr in dir(¿ t  a ô	if iscoroutinefunction(g‡  «,• )?  C   � €.append(2 )‰ "iftais notJ A and @_is_Už \! X, typÕ ‚   † A ê 	…Felse
 1   
5  Z e );  reXU_get_…_. î b 	 o /%, 
t * o 0 = †  3Wres[1ä a  î & =ãy°__dict__ = w. á  "['s AC'] =Ü . 1set,  �  ¥) ¾/ k Þ 6  
�_methods4  c )   _}( \   ._¿Áreturn_value3Î5ret%} - y  É3elfG€delegate›Ø
eV 3 ._ `  3 ¯is DEFAULTO  �Qchildª(C    dpparent=ü!,   �F='()� - 
~ / 	¡ €tc ¼ G ret‘__ c!, ojDŽ å _>" =c Ÿ ìC ¡ :  ¡_check_andÑ B.Ë 
 , Eð )

    __returnñ_value_doc = "The  ó to be returned when the mock is called."
   ' K ò = property(__get_E  \, __s D  H  _@  © 1)

2 @h  ñdef __class__(self):  U 0if  b._spec%  Å FNone%  ) ¬ R typeD C  G ‹ ô  = _delegating_Ÿ "(' !')M   o_count0 
# 4 Oargs3  " 2 O_lisj  7 ' <  ä_§ o # '�� ñ²side_effectEdCed =’J  ! ˆ4if  dª
�E w H Fsf =J .# `if (sfe @not P and   rable(sf¼ ›  % �isinstanc' Å, _MockIter)G Ð_is_exceptionL š N ¥ 8  ! À   	¿  @f' �f�‹ hñ ‹,ß� ïÁ= _try_iter( ð   s Qelf._n „ ³¬" =” I ;els–l dª ó é ‚ � Á re6 á /� visited=9,*,ì‡=False, M  `†"Restore>`objectbóits initial stateP ö$if{  › ~ F   ˜ U = [];Qif idº D) inA 
9 ,3 H „.append(? )W j · ¶ó >  _E! =@  ð0  ij–CallList(}
` ¥ * omethodR y )ifÄ
p á(·¨ = DEFAULTG ÷F $ C �for child¬z  Aren.à's(N � åt- €, _SpecSD&) W s‘8ted¡ À      continGue
  øchild.reset_mock(visited, return_value= ç, side_effect= %)
[ ±ret = self.W _A & ñ if _is_instance* �(ret) and� q is notI :7  ¿ ?ret¶  ")
ƒ Ãdef configurW  Œ æ, /, **kwargs)Q ð
"""Set attributes on the ò through keyword arguments.m  � A; @plus¼ Aurn =sÎ  ( 4Às can be setj „Þ  t €s using €dard dot	QationO `unpack$ Pa dic Qary i¸ L ¶ethod call:­ 1>>>ì qs = {'m$ .¡Ð': 3, 'other.¹ íÅ': KeyError}d  N  ´ .q **PUs)""", 0for?, ¬ rsorted(‘•.items(),/  Z  P# we ;  = §�number of(Ÿs so thatG  ¡ ñ"ar�abeforea P , òkey=lambda entry: ç[0].count('.')¢  µ  =@R.spli$ 	i Rfinal# ys.pop() 3obj•	  •…  ’ e  w   : 0get2R(obj,° 
` s  Œ é•#__E 2__(’Gnameé 0if   ‹ !{'_¡Cs',  Šunsafe'}¨ eraise ‰¦(L ¥ AelifL•Z fJNoneT Ž  „/in; %or° º_all_magicsF  Bž ð "Mock object haì™”a %r" %^ Â  4h ß 
m i 
 Ö U	R
I  & ðame.startswith(('assert‹massret¥ì šÿ RZ  Z  Y  , J  1"or4  ƒ "x;sul{_rren.get2ÿQif re2 ºis _deletedPWH G@wrapm  |  Ü 
�' ó , 
Š  1 Ð# XXXX should¦1getª ™7 Pðout triggering code
         Ô# execution?
  ñwraps = getattr(self._mock_ ‰, name)
9 ’result = . ‘get_child8 (+  h pparent=- O =T !, a = p, _new_  E   J 	! )  i Ä — @ren[Z R]  = ¼ Ð òelif isinstance(  é, _SpecState):^ ! þ = create_autospecø * . ,x  E_set y ,e  7? ô 0  É 	+ ü (creturn› 
Ádef _extractÐ•	 @_lis[qÆ]¤ _Á .\ '  ( !laM  L Š   doa 5'.'' 8if } Š= ['()']¤7 'I dwhile Œ ºis not None9 … ( ?  Œ w ƒ.append(' l Ô  žj + dot—‘ È  R  Ì C 0== × 
�  3 I Ú   ‰ $ =â P a Ë Ç 0 = Â¦(reversed( )¿ A_firš X €ame or 'Í	œ8lenG J > 1Å  ô  &=1[1]‰@in (ð ,ö '.'i Þ   † 8+= ± 0[0]þ ¬ ,ài''.joi˜ ì|_repr__â ¤ ´ * ¹_string = '  â .,6æ  + G xa=%r' % ²   P) 	p  >!._" oclass ê$ ¶    o = k #ifã   ·
Ì #  þ H  * L 
)  %e · "._Ú_Ž Ë@"<%s Ú id='%s'>" % zBtypeÍF 
\i
 ” 
 "idQ Ž )-?_di@ ð"""Filter the output of `dir(	õ)` to only useful members."""j !if?ªFILTER_DIR‚ðobject.__dir__(self)3

  õextras = self._mock_methods or []* ðfrom_type = dir( (6 *))$ ±dict = list  0.__ +__( Qchildr  € [E  š ²m_name for  È, m_value in¬ E ¦ren.items(c  F &if6 ö s not _deleted]Ø [s e  !if< ûe.startswith('_') å = = D  D 9 orù  ·  ·_is_magic(ei óreturn sorted(set(Á&+ °  x  'l2))
ý ñ def __setattr__¬ , x!, k%):›  ¿  ‘±in _allowed¢s#  ¶ õ# property setters go through hereR  / Î object.Œ 9 Qelif ­ `._specÂ H andÂiö@None# D  }  é Ø
Q; ?and/ Ö
òraise AttributeError("Mock è 0 ha–  v# � '%s'" %{Áè ¥  uaunsupp÷zðmsg = 'Attempting to„ 9  P â S %r.'u 	é Á ?msgš ?all’ /if’ô †
[ ¶ž _	ì  × ±is_instance%(  {   .ý2C_get:(¶D7 @   ¢original =g	’  ! }  Bôambda *args, **kw: = , 
i Nelse>Q# onlœQ _newÃ ‚ ¶   s¯1at 	ú calls is tracke ª Q# but= U2 Ñ  _check_and­b_paren& , £K
È  f u*1 Ìù@ren[Þ ]seê== '__class__'; æm! G  ¦ Íü �?if 	 ¨ 	
…  d ‰ œ >Ù € 
ð sealed and not ÷hasattr(self, name):
  Pmock_ ` = f'{( ¥._extract_ P()}.{& )}'> õraise AttributeError(f'Cannot set {D E}')
= ðreturn object.__set¨ '__ª ’, value)
7 �def __del) Ó !ifå õ in _all_magics and Atypef ª).__dict__c () :¾  @j  é 2in 9P  . a# for Ž ð
 methods that are still M« SProxy· 	t J  r  [ðon the instance it… 1 kD A Sobj =° �Ðchildren.get(åµ, _missing)N ï ë ñ_safe_super(NonCallableMock,s tÃ m c @elifû @ is èJetedšo
E C  'È 
G 1del� .á [J ]ò  M" % =Ÿ ›Sforma4c|‚signaturn , args, kw ³ v 
‘ @or 'ŸqÉ# _i d  5 d ž ïfailure_messagŸ  , action='f '® 4 ð = 'expected %s m“found.\nE À: %s\nActual Ê : u_stringþ Ú  ÷ _y _C 5=¤%   C  # a€ j *D ›{ý 2% ( +, Ë 93ualp 	¼;getÖ Q_from~‘g­5"""È P* If ›  #Aects;Passer„0aga	# a_A/funÃP like4 .x1P 1the@âre could be no& ¬ [o à to lookup. HeoEjustN ! 5 Fspec¹1 of¦ } &od–  beù¿ .Q ï  O  Ø  bPemptyO ±n remove ()ÜÀsplit by '.'ª &ge› @list†  I s ð iterate throughP  õ until a potential’ PmatchŠ è" A5  ®  @creaŠqonly duÙ «u accessM òso if we get a _SpecSt–  en‰; s½  
 YS wereM %edO  à0canÄàsafely exited.#
  5""" Åif not name:  ( õreturn self._spec_signature
) ¥sig = None  J 1s =R õ.replace('()', '').split('.')2 £children =n Tmock_ m 1forV 1 in s± 1 1 =  €ren.get(Ž j  Ø "if" 1 is¹ ñ  or isinstance(> Ú, _SpecState)f  C Ubreak¿   ;els?  À# If an autoB ced object} ò attached using  _ü 6 thP I   #· ñ
would be a function with : _  asP ¹ribute from® O ewhich Õp has toZ �derived.5 ± = _extract® 3
e b - × .. Ø $  L+  /q–2ig
ðdef _call_matcher(², ¼ô€Given a 7 ° (or simply«�(args, kw £) tuple), w að	comparison key suitable ¤‰  Ó—Qotherk sQAThisò best effort method ™�relies on &'s®,Š €if avail ,Í¤falls back= �argumentsK gmselveŒ  N Y,‘ and len( Z) > 2Á Q._get' Ä_‡_�A 6[0]4@M  ý I ø : if H Ã †
‘ (if° ,==±  D  ‘ U = ''     
 ô .	% µ  7  Q /, = :try­  < Qbound8 ’ig.bind(*M #**–	…  7 ž ¡ ñ&, I .=  F ÿexcept TypeError as Ñ i  e.Ú_eh({Í	8 Ú ¿ ·’assert_no+!ed»
´$ P that½åswas nevW© Ì     ½ º_count != 0v msÁð ("Expected '%s' R‘have been¿öed. Called %s times.%sJ t  !% Ë ò  ™'¢'º-  8¬ ' 
I–s_repr())z K qraise A\àionError(msg)
ñ
    def assert_called(self):  ! 2"""  ò that the mock was 2 è at least once9  0if W .1 ¶_count == 0f  j ómsg = ("Expected '%s' to have beenq E." %[  :  »  ._Ÿ  _name or ' 9'))0 qraise A÷ áionError(msg)
' _Ù ^ Aonly.X  § 5""" oif not1$m ! CÊÆ %s times.%su  …  !% Ô 2,¦ -  Ç' 
R�s_repr()ƒ-Awith¯ ð, /, *args, **kw
 —lœ {µPmade N Ìòspecified arguments. ñ R)Ks an-1 if>  | ± and keyworE 0s p1vd in ar�differentÓ G— !toN  «.!pl zis Nonee1=Lr_format	 ø °_signature(F #, 6	ä actual = '• 7 Ied.'# e)€_message¬'{  0 Î„found.\nÆq: %s\nA]   
R  e  4% (K ", Š 1	‘ ¾ O  Â_ (# " m^	/tfailureå 0¥return msg$Ã  ‰  _matcher(_—(R §, two=Trueï  E ² W  Ê×#if7D != ˆ 
'@caus¶  Å§isinstance€ñ Exception) elserä  =@pq) from v 
S — mY_�Û$ 3Ö ƒed exactu™µ!at< + Ê  w x‡ {Â¨!be /ed¡mÀ         sel÷f._calls_repr()))
  ö	raise AssertionError(msg& Ñreturn self.a( P ðed_with(*args, **kw
 1)

` Cdef . 1has2  s(D !, Ž ñ, any_order=False):8  › 2"""; ñ the mock has been= 0ed {  ‘specified %s.E PThe `< | ñ` list is checked forB � .¶  ~ EIf `œ `2     (� €default): n w … must be~ ósequential. There can be extra5 ábefore or afteŽ A Ø    @TrueŒ ‘ o  inh hU, butG Bthey· Ùall appear in4E."""1 Àexpected = [ÉW±_matcher(c)RcD S]: ñ cause = next((e( e( S ðif isinstance(e, Excep‘†)), None�2allÓÁ = _CallList[’ ± N `if not%�† 5if ¤  '  O 
* . ë !is´ "  & °problem = '¾ s€ ufound.'3 )   OelseG !('¶¶ processingµ Š>.\nZ  ^  D ý s: {}').format(� 1  ?[e ¾ Á L ]ªq ²^ 3f'{m}3f'E×6: {N7/)}61f'{O†Wÿprefix="Actual").rstrip("."G q) from .	» m�í Á( )% Anot_A ›w ákÝ%in
L:try  db €.remove(D 
‡eža Value|F ” .[+ndF w¶ 
= ßr'%r doe=Rconta›Q of %È1itsgø., Ë'3. “stead' % H*1nam�' )',¨ ) etuple(ÿ 5), Q
E	Í5 ‚ †‘ \, /, i70À has been caólled with the specified arguments.

  ÀThe assert p As if7 ðmock has *ever* been ca\ …, unlikeE `: 2rt_ _{ k` and  Conce ‘that onlyw 5 ifM  ´  I 3 is‰ €st recen1 Ue.""", ñexpected = self.‚ ð	_matcher(_Call((args, kw Õ), two=True))G …cause = O äif isinstance( ö, Exception) else Non¯actual = [Œ  ²c) for c in«  ã _“ e_list]Œ 2if � &or� 0not9 Ò_AnyComparer(o %)::  Ò« u_stringpformat_Õ$šsignature	M qraise A™ionError("  s 1'%s ¥ …found' %» ‰ 	6 b) fromç 
‹ádef _get_child¨ (F—, /, **kwè ‘"""Create1  Ù sb¡attributes‚Õreturn value.† ¸By default @ bwill bX €same typi  v&ntD PSubclù`s of M/ðmay want to overridM  É o customiz Ue wayŽ ƒ ‡are made£€For non-2Cableí ( @variy Â õused (rather thanm 3any‹ # sÂ )T`_new_nþ ¥= kw.get(" "55if   � ¯À.__dict__['_xš_asyncs']¦•A  9(â
 S_x=	v $is¹ () p, MagicI )ô	— ƒ �_method_m* sŽ a# Any ª �hronous ' a becomH « H ¨ k / =  !elC© G WMixinÔ N Kif (» 0ll_$· 9 or  5   z ç û	L $ ~  I 
 r 	76 onä x— š	"  <
„ ~ 4 %4 N _û ã Q1 5Non4  7� Á ß\ ?ockb ä  v ß *se‚ ' à¶.__mro__[1]#"ifG+ð _sealed:
        òattribute = "." + kw["name"] if  ñ in kw else "()"
<  Pmock_2 õ = self._extract_ U() + k 	> traise A‡ eError(9 %)
- òreturn klass(**kw)
 ðdef _calls_repr(„ °, prefix="C 5"):H ¢"""Renders® l ? Ò as a string.\  ã ÁExample: "\nN 0: [0 Q(1), 	 V2)]."1 -IfZ Âis empty, an
 h B is Ú ued. The¨ ð	output will be truncated–pvery lo§  ¢   &""–lif not…  0 u  6  Rf"\n{>†}: {safeX.. )}ô ñ
_MOCK_SIG = inspect.signature(No3ðableMock.__init__¼cÊó _AnyComparer(list«P"""A  Ð which checksý  it contain¯ �# ±may have anFðargument of ANY, flipping the components  �item and5Q fromC ðtheir traditional loca �s so that[  ÆÐguaranteed to²o†  l Tleft.¢°_Ã #__± ‚ ü   2forÖ | Ó
¿±assert len(9 1 == 	)¼  F   ‰if all([    ex® ed< mactual#  † ' ", %  ‘ 1zipx ,¤ 
q ]Ç  h   ]6Truâ �False


Ãtry_iter(objG `if objcFNone? 1obj· Àif _is_excep¡B � .  ; š* =tryt ¢ z s Q Type¿/ ñ# XXXX backwardsu‘atibility=  œ £# but thisïñ low up on firstf  -rõmaybe we should fail early?O "

f ¸ ë ÂMixin(Base):±v–Š Å=lÓ, side_effect ] õ _value=DEFAULT,{  Î  Swraps3    [ 4_seM  ön D _. Ctate? A_newkQ='',  C  Cargs: Š  ;².__dict__['”Å C'] =ƒÖ ‰ _üisuper(A,&)Î(3 r Qpec,  , ü ", É Bet, ¯ 
1è Õ 6 à ,Û k ä « ‰¹'À_mock_check_ð	sig(self, /, *args, **kw
 C):
  ò# stub method that can be replaced with one	 õa specific signatureN apass

 Ïdef __call__‰  can't use ¸ ô in-case a function /¨ àwe are mocking4 s5 z  Ú �# in the¤   ]  ._; p_check_*!I . “increment8 Oall(3 areturn� h 0 (Ž  &  p ³	` execute˜ 	Ì �Ç q  # .Ê†ed = Truñ ²_count += 1Ø †phandle = _zŒ  €needs tolðset here so asserïAs on: P argu~ s aW befou"#  "ö9¡of awaitedF s| –P = _Cr(˜ #, `, two=ä )0 å  +  9  Ð  Ñ_list.append(j )pinitialvcff forÓ* s˜2do_” ( =Pöparent is not Non‘5 Z_name9   Ž 2ocks Œ žR !ew Ais_aA ! =  # … == '()'+ X] s5—0'',ùs›)I‘follow upç�chain ofs GS_new_/	C � hwhile 2 a:7¿Úpw  # ;if ÅR     m .J  J M  z  ´ò –å K Ä  , ¡ p  }ˆ + '.' +öÓ _�  q Fthisô o 5NU (	à 	|g z
a z ~ (if'O ` ã æ5if   Q vdot = '    Oelse3 
.4 À      is_a_cñall = _new_parent._mock ëname == '()'
  & Rcall_' D 	Š+ dot + 4 
T Ò# follow the ‹ ™al chain:) › ! º  a Âdef _executeÜ  ¶ ð(self, /, *args, **kw
 )n ö# separate from _incrementH õ so that awaited functions are¹ ## ‚ dT "lyV `their ” ò, also AsyncMock overrides this methodÖ  Ž�effect = Ì b.side_ w 2if  Æ is not Noneá  E Àif _is_excep¸ (1  &   SraiseP b   Aelif^ _Æ OableE @esul´ Dnext' 	N  R • r7 •   . ™ # 	K ;elsî / L # =Ë (a . 2if Z CzDEFAULTF * creturn. E "if 4% o_valueR 
) ;  5 Y TwrapsR çC O Š 1 ý 2  � €

class ¤P(Calló`Mixin,a 3ock²1"""™0CreNpa new `@ ”` object. ñ takes several o”pal arguzsH rqspecify1Ábehaviour of  \ [ :30* `2 @`: TMðcan be either a list= óstrings or an existingK 1 (a€ "  Ãor instance)Pcts a± e o PificaXA forš  O C. IfP Pyou pU inx  0 nœ   isN amed by: ¢ cdir onO  ED p(exclud# €unsuppor¨ómagic attributes andbÓs). AccessingQ 6any- í"in–9Rwill ˆTan `AW rError`.‚C  If… ©#anA (ra†?thaï   ZeÙ `?1.__€B__` ›q  Å ÿ  ~a .óa`s†GB  tov4`isÉs` tests´ 6�_set`: A ±cter varian3X Í` used,)1emp8ƒto *set*G`or getâz  oIe— DTisn't Æ Ded a¹ t –  | È !Àct`: A functóion to be called whenever the Mock is q. See
    ó*`side_effect` attribute. Useful for raising exceptions orD `dynamix py chang) ðreturn values. The func; Š Q with¢ 4sam“ Áarguments as òmock, and unless it _ Ás `DEFAULT`,+  ˜ | ‰ of this~ Dused^ 3 © #.
; :If àis an iterablel an eachS z I © S willŸ M   Bnextd P fromA N ‚. If any« ”e members u N 8are†Btheyt !be¦ ed insteadA Þ #edÚ 2* ` _!`:™ ´ ;¡ Ð 7£By defaultŒ Y B newfñ
(created on first access)v W < 
‰ w„ñ * `wraps`: Item… I” `objectw $ @.  \rnot Non¦n  ž — C §2pasc  € throughW  '  [ pÉ m H (?K 0reaí„sult). A;ô   J ´ q > # aN Š Í @hat t ’ �orrespondl • Ô S  ) �  soH@empt5 $toˆ  an ×  ti Òdoesn't exist@ ãCe anœ `Î sError`)C ® ƒ Ö !ha‹explicit_@ setón' s ¼ ž x#edi  to# û Ò ï f '&is¨ç˜ p* `name0 ò&e      e  Âí 1be  in S repr[–  >  ·ÿnYuPdebugç " e_ ‘is propagþtto chilä  N s©  õ ‹Yn als³ õarbitrary keyword m $seÁ © Å !toi%syPafter4 Ë �.< ñ!"""


def _dot_lookup(thing, comp, import_path):5 2try	  ?Ï0get| ; )- .J? #__` #_(	 i ; _ ¹ 8 “er(target¥  ½ !onD"=  ¢.split('.'› 9 Ú ! =î 1 b.pop(0$ ? = ¨ ©   p 7 inG å i ¡+= ".%s" %+ @  é i ˆ6 ðreturn thing


cñ lass _patch(object):

    attribute_name = None r_active6 res = []4 Ñdef __init__(,  J   Öself, getter,\ ú, new, spec, create,8 Òpec_set, auto( õnew_callable, kwargs5 %):  if^ + q is notÈ %  � )   zDEFAULT#  ' úraise ValueErrorâ  "   @"Cang Ñuse 'new' and
 Š µ' together"­  ;   ) %ifø Ÿ  ‡œ 2Q¡ ¢  Õ.Ô# =Ý
 E& =õ
# Pnew =© 0   
)  ! =C
 O# =X
 òhas_local = FalsÚ �Õ  U  wY   
@ = Ø ™
! —, = _ £additionalErFE  GPcopy(- Ñ§Der =².  µ    - Ž!,  ~ l@elf.à i  3.  $  ù (  þ * 
‘{ ÿ   ÖÄ .œ _7 
 ? 5 8(  !p.;£) for p in; 7 ]
 sreturn p 
Ö r!__“g, func™àif isinstance( g, type#  › ^ ê  decorate_cƒ4 % P n€Ðt.iscoroutineX  6- 
[ Uasync77 ë � W,  ¯  6 0, k» ä  r Â uLdir(    l!otÁ.startswith(rÇ.TEST_PREFIXW  7   ‚continue–      q  _v•„  z hV .  1has(   = A, "_+?__"| ¶ ‘ yb p 0setd ‘ ,_( ~ )¦ Ê<�@ú sextlib. qmanagerl  / £ion_helper©¢ 0d, %ð, keywargs):
      ó  extra_args = []
  ðwith contextlib.ExitStack() as exit_s :3  : ò for patching in 4ed. s/  3 Warg =Q s.enter_| (: )h  9 "if_ þing.attribute_name is not Noneq  < @keywõ ¾.update(arga (elc 0newX DEFAULTW Nr.appendY 	»  w ¦ += tuple(2 
€ `yield ? 4s, ® 1)

K ödef decorate_callable(self, func)ž ð# NB. Keep the methodšQsync æJ a P ‘ `if hasd(_ 4, '–'s'l  Y   î › O  ( areturn® Ô   a@wrapsd .  í o @ed(*=E, **ê  A Ð  m .Õ ¢ion_helperI1ed,B -  l . ’  1(ne_U, new 
¬   %(*4 * 6 _ ³ î ·Q * /å ? 5*²/jà  5ÐQawaitA;LÁget_originaleó�target = H†.getter(
�  ?£ÑV 3 = WoÖlocal = False2 :tryFC Œ  .__dict__[} ”except (A*¡Error, Key
 Õ  šX 0get¼ (`  , X ,± ì ;elsmÄ 7TruÃ !ifB  „õ	_builtins and isinstancek «ModuleTypeŸ ožcreate = a "ot’#  _ Ò À is DEFAULT:'
  ùraise AttributeError("  - ô"%s does not have the a6 ù %r" % (target, name)E  ñ	return original, local

/ ñdef __enter__(self): … ‘""Perform~ •patch."""! ’new, spec p_set = F . Celf.    % A Bauto  dkwargs>  M  6 Änew_callable2  ) = $( ‚getter()ÿ  æ €# normal—ÕFalse to NoneG !ifå A is ! " @  À / =2  ì 6  : ý :  : §  6 Ã U and 1 iO  
Ã ”3Typ�a"Can'tõ 1ify 	J "^Qif ((^ ? orv )F ° = ² ‘in (True,M)Š + ¥ ò provide explici¶ S R*and*½ � "û$_ *`if new—pDEFAULTÏ 	é [`inheri;	ý X ÷ 
” ó  # R^!to„ùobject we are replacingW  : 4 =õ  { (?is  I & M (   #elk  7 å# ' % j �  ä Ù  M   Œ 
g  ? " ó 	h ­ Ò  ò8 
Ô%if– A J(  É óPuse 'n à' with create=Åš A   äif isinstance(Øk, typec /   ±# If we're õñ ing out a class÷PthereÂ ac	! D   ý œ 	# D S Õ_is_async_objª ¤  K† 0= A- IMock[ NelseP4 ]Magic4 _cY = {}M ôoÜ
d ð new_callable
    ñ	elif spec is not None or H_set %:
8 	 Qthis_? =2 ! ^ J  Q N  6 R •_is_list(1 )›  Q ñnot_callable = '_ 1__'ë 5in A g OelseU  5d ‘ Q 0if ¸ —async_obj, h �Klass = A2 MMockS ½ä I CNonCQMagicT 	U ®ô�_kwargs['ø?'] ú H  ÀL  / P   
� ù# add a name to mocks" ñ if (isinstance(A¹, type) and,  `issubcg, #1ock7 ÿ  self.attributek  › Â 	3 
È . ‚.update(N)� anew = À 3(**1 )G  if inheritÜ \ú _O(new¬  ô# we can only tell if the > � should b( <# 	¤  A#õã a •% d* F . - N (    	 ˜ q ” l-=not§  @ _( 6: M  4 ¦  =9^ . Ìa.pop('/
ú $ ð new.return_valuºe ñ(_new_parent=new,   F o='()',Ô  R  U M@auto×Ó 
Uó�ignored, ®`*must*4�default, ž L jtreate‚ò# as a boolean. Sw ŸAheck@  <  É ˆ ºAthat  Z 	ð #, O ? !if¢ àzDEFAULTÕ  ùraise TypeError(D  !   "!cÒ s: oâ for you. Can'¤ _ify "H 0andŸ .( 
°if originalé Ç "� àuse 'autospec'÷ with create=True")
  ôspec_set = bool( 
& pif auto @ is H :G  R " ¹= original
% Snew =Œ _. (	  , _  Œ =	 ,?  d  ö_name=self.attribute, **kwargsÇ Relif  
» €# can't €keyword ; À when we are  DÉing the mock�  # XXXX If æ �is a Mock@  could call °.configure_E (ª  ä ñraise TypeError("C¤ CpassÅ Q to aˆ  d ¤ &")z@new_  =  3Ttemp_® ¹ …   & ±is_local =  ú  °_exit_stackßð ontextlib.ExitS (‡:try0setž (K �target,    ÏÄ H  œ +if)  ¡Šnot Nonek  4 aextra_àE= {}Ê     T Æ~DEFAULTH  , L [± ˆ A] = r +  �for patchM#inÄ ¡dditional_ ?ersu Rarg =4 y‚.enter_c}(C :ing0… %if€ .è  8 ì ¯.update(ar_  vreturn . p F  5newyjexceptì 0if ÂU_æ ú_(*sys.exc_info())3 ^  5q Edef :  H 4, *< : q"""UndoÓ4E."""› ÿ2andz
7!is¯ ,ß ¡ .T ¹;elsÇ0del2	?  OÆ e Ê (d?hasM 5 or P  »  B ªð
 in ('__doc__', '__module D P   D pefaults;  I `annota$ N 6kwdP =‘# needed Ÿð	roxy objects like django&]tings é&J ?del^  � ?Ð
        exitò_stack = self._exit #
  ?del vreturn 7 "._D á_(*exc_info)

M  def start(l !):  e ò"""Activate a patch, Z õ	ing any created mock."""< eresultÀ ¥_enter__()"  m 0._aa !e_] ’es.append‰ * s  S 	µ "op+ 	´ ‚Stop an [ ¸ 	œ 6try1  é ‹ bremove` ‹ úexcept ValueErrorI ‚# If theu Â hasn't beenbõed this will failY  ‡ è BNoneš £ Ä # &,   Ë
ÈÂ_get_target( Ð	ô  â, attribute =  â.rsplit('.', 1­ô B(Typô , _ ª Uaise & ã("Need a valid` 2 toù. You supplied: %r" % S  Ì ",)’ ógetter = lambda: _importer) ' P. î "

,u…_object(| 	/ ñ, new=DEFAULT, spec={3 b=False! B_set% _ auto4  Ãnew_callable* �**kwargsX YT¬ [0namq…ember (`ÄP`) onøÑ 2 (`Ê ‘`) with a¥\ " .e`[ . °` can be us¼ös a decorator, class Ñ or a contextY ðmanager. Arguments `new`, `  , 
    (!`,< `)Q` and8 !a` haveÿ ‘same meanƒbs for Ã r`. LikeM Õ  f 	 Þ õ
takes arbitrary keyword a°  P ±configuringN  Ò â %3 itùsDGWhen3(  … shonours· Ñ.TEST_PREFIX`o ƒ @hoosã Ðwhich methods?Qwrap.( tif typeüg is stšr™= [2f"{(p!r} mus¯idactualó  toM�ed, not af òtm›] s �íq3 qH,i# ´ 6,Y +(, E
ëtmultipl*c }˜Ä¾  }  ¯@ ÐË„Perform ‰ ðes in a single call.ô% It takes the object to be
    patched (either as an' °or a string3 XfetchG Ñby importing)O ñ
and keyword arguments for7 m As::
-  € Bwith… Ð.multiple(setR ôs, FIRST_PATCH='one', SECOND etwo'):N  R 2..._ ÐUse `DEFAULT`Ù  ñvalue if you want `– ~ `ê Rcreat!BmockÂ ñyou. In this caseÔ + "d ( ñare passed into a decorated¥ ´function by( , 5Aa di þary is returned when¤ !isO ui  ³ó context managerÜ vcan be 8 Ÿ ”or, class° 1or þX n \ G TheÞ�`spec`,  @_set !`,9 Q`auto& ì ò`new_callable` havK�same meanpauÂ  `.t s’X@willÏ pappliedºR*all*Qpes donekF äW\6 „ honours� TE�aREFIX`è  èPchoosÁ Ðwhich methods› Qwrap.( 1""" ð if type(target)ø6strÏògetter = lambda: _o$er3 G Oelse5 ^ Öif not kwargs4 praise VaError(X  N  ð'Must supply at least [ë Ï 'L #B# ne¬ ¡ in a list&�python 3,ø€re itemsaa viewK  =5 (Ê . "()b òattribute, new =F 1[0]? ïV_ ì o*, @  , º", Ò  æÛ  Þo ÙA, {}q • l 5er.]  _nï=n -  C# Q  "ß F[1:]³ †Á Ì  ˜ Ð % < Ô  # Ø  
 Œ á  0 0ddi$alÊ ˜s.append(S i Ûrr


def Âë7=ú±T=NoneÄf=FalseÀ à Ò% û  ­ "**w²Ô5`` actsu%a ôl"RInsid qbody ofwU "oruPstateoð , the `target`
ñ'    is patched with a `new` object. When the function/' ðstatement exits
K  & L  U �undone.
 #IfV °is omitted,U Z `target5 ereplac‹ n= Ð`AsyncMock if6 ± ¤  9 @an a& ¦ R or a? AMagi? Ð` otherwise. “ ­ `@ ðused as a decorat? %nd¶ J º ¡ created m˜  EsD i‰ á an extra argu& toº G b %ed­ Ž ð context managerD z L ~ ²returned by$ 
8 ‡`jò` should be a string iŒñform `'package.module.ClassName'`. The| N €is impor1and� “specifiedI Û +hJ È1, s% Y @must¥ ^ ‘able froma qenviron]byou ar– @callÐ `Ý 1 ´  ý  îP  gÝ”™ �is execu°dnot at!tion timâPThe `õ  `  Õ_set` keywords« 1 pa/& `¤x fä ­ i Ò ³one for youÐpIn addi–  A canY Š `=True`	Ž  Ò, which cause»-2 to? —0 be~  j$ ¼ ê /  ä ã•  ×_† °�` allowsŸ 0to 3 0ifyhPifferAc],¨ 6 Q ,�that will
 "  ed© e r ±¶By default : åN é F
/s¶‡j ê CrestÚ ð A more powerful# Bm ofn b ` `autoä `Ó ˜6set €‰ t{ Yà Vda/ó	�P.N àAll attributes•  ¼ [ ‚also hav1 ¢ $ ÑcorrespondingL H # x r Method:s.H  ~  d »{ 'irPcheckTn|pll rais“á`TypeError` ifM Athey9! ä ñwrong signature. For•ss ½"a eK 2ir 2€ value (J ²'instance')�µ R sameŒ!asrN pInstead-ÿèõ”b=some_U`Ëuõ ì“arbitrary ” œ ²   j    œá Ù`Ð ðfail to replace aô8ttributes that don't exist. If
    you pass in `create=True`, and the aG U doesC Á, patch willK > 3 1ford Awhen 5 ñed function is calledr J ðdelete it again afterwards. This4 puseful ` Òwriting tests3 !stI a» ¢your produ| Rcode ¸ ðs at runtime. Itd aoff byJ ádefault becausœ ðcan be dangerous. With¶ ±switched oný  *  ¥ eK  o¯ C API¥ §‚actually°!!
; Pr O ðbe used as a `TestCase` clÍ‘decoratorÊ VworksÉ   � Aeach5p method2theD jQreducAÂe boilerplatÉ >ÙX J òs share a common+±ings set. `q` findsÚ  =  ¤ P look�  Ù— 1nam‚  at start whD á.TEST_PREFIX`.K 4By ®t-`_  `, which mFR ±e way `unit" ‘ sM @You pðspecify an alternative prefix byØ …— ˜ ½òcontext manager,Þ  ˆç ð statement. HereDN B )PappliÎ o ò  indented block; N  IfœL  Ñ@"as"( 
¦Pobjecq llì0bouj  —` I  E `; veryž  %ifí é aµ   mž _  ìByou.åBð` takes arbitrary keyword argu1ese‚ ž  YQed toŒ à`AsyncMock` ifÛ † —Ö @is a$ òhronous, to `Magi6 F Áotherwise or  @new_°AableY 9ied¿ Ã.dict(...)`,’.multiple `ì . r_Pavailg åvøS-case¢1"""ª wgetter,¯â= _get_target( ), �return _E(  C p, new, ã ,(,.    _set, auto / r, kwargàB)


œu _ ø !):T É ( a " pionary,} b like < 5b resto7 V ð to its originalB&te·ìº!in— `òb¿u �or a mappÀ‚  º@aineffø Qu ' töpit must`àleast support oEing,<Aand ü c Bitem<¡plus iterab@overs· Àalso be a stÀring specify Àthe name of  ðdictionary, which
    will ðn be fetched by importH Ait.
+ ±`values` ca. &a S  e    to set inW # $. A N  E @alsox ¡an iterabl® q`(key, P ƒ)` pairs„ ðIf `clear` is Truef k Ö 1be +  Ñ Aefor+ A new€ ^ Ps are¯ _ p`patch.Ø ç ¢ ócalled with arbitrary keyword argumentsý a "::O~6th t ò('sys.modules', my ù =Mock(), other_ !):n  N   /..Ë ñ!be used as a context manager, decorator or classW  h. WhenB  $ 7 	;bhonourC  àTEST_PREFIX` fe @hoosa�q methodBQwrap. 2"""-ðdef __init__(self, in_¨( s= ð÷=False, **kwargs" : .9 $ =C k  =P# supøE anyÖ  HyÑP(...)D…structorB a [=,  )# ƒ.update(¨ 
# Ì " =Ä
 ø_original = None
% «%fý ÷if isinstance(f, type   qreturn Ç ü!e_&(fÃ @¢s  pinner(*t~] V _ï»(R  | :tryÌ  ‘ fW  " f	l;  o )unq ; Y _µ Aö  E h, klasH À@attræLdir(   ˜    _ý` = get )  ,  
ý @if ( p.startsi(¹ .9U) andÂ  e  0has; @ r R, "__	+")† 3 å Xor = ‘ î  ,Â s ”
¹ O Fed =� 2 s„&ed0 ¦`¥s__enterçá @"""PÃ .C ¤   ß ð i " !p ‹µ # r  ( =.£
s : ^'trG Ÿ }  ™„!erñ9 ³ ð in_dict = self.“in_dict
  Ñclear = self. 
 Etry:  0 ³original = H u.copy()& úexcept AttributeErrorE  # � ð like object with no M u methodR  x ù# must support iteration over keys/ § ){} !fo/ 4 inÁ 
œ  m > V[key]ê  M /_+ 4 =  >1if P
b _ „(D)4 r# ï.update(valueso5U q(s 
Å  'š 2 = '  
Ð Âdef _unpatchð  5)J B } cR  n_  „ M+a O@ Ò  ”   Ë  €_exit__(w, *args B"""U?A the6E."""!"if¶Ê is not None•  a .�ö Çreturn Falsež Qstart› 
” ±Activate a Ü", A ùing any created mock° eresultÏ‡_enter__>_Q 0._ac e ’es.append‹ þ u  U 	· "op+ ²"""Stop an [ º 	ž { � bremoveb � ÷VŸó!IfÄà Ñ hasn't been fõed this will failY  Nê  Öû ÙH # ,ÿ A)


‡u 	ö ·—Ú Ñ |v = listÏ µ   , ( r     4del„« #“_stopall({Á)llÂðes. LIFO to unroll nes~G %esã Œ   üŸreversed(äu  ¦ 3 .Ž (M ¶"= ? _ 
 Ý    •multiple   !  f  al]X   òTEST_PREFIX = 'test'

magic_4Qs = (;ð"lt le gt ge eq ne "
    "“getitem s 1del ó
"
    "len contains iter  ô hash str sizeof  en$ Cexit ó# we added divmod and r ñ	here instead of numerics} ²# because t( bs no i; " " O ôneg pos abs inver† ó	"complex int float index¥ À"round trunc tor ceil …bool nexN dfspath a4)

À B = (¢ ð add sub mul mat 2dive  	  ‚lshift r    xor or pow• õediv"
)
inplace = ' '.join('i%s' % n for n inDù .split())
right6 r6 P
# no(ðcluding __prepare__, __·’ancecheck ƒsubclass `
# (as¾¡y are meta   
 ðhods)
# __del__ iÞðt supported at all ax ñs problems if it exists

_non_defaults = {|ö '__get__', '__s ddelete „reversed pmissing G Wreduc1   ex#  [  Dwnitargs 4new H fgetsta{ s ˆgetformaµ  F Dreprh %di }e… ; 4get— ¿ ‘
}


def +ñmethod(name, func):u ð"Turns a callable object (like a mock)]�o a real> Btion/ b ]  self, /, *c, **kwg  rareturn? (+ ( Ž I 0.__¨ P__ = 	  > " ™


_magic%# %ƒ7/ 1 inD \[= _ %s,Y#, ‰!, Z$])k N0# Mt ` as usedf Ñasync `with` qments
_ g ± A"__aOQ__",  5xit  �\__"}
q  th:rre only  t  g ÂQs but’ “ qhronouss ²±�mselves
_" ¢  Ø L �  õ€   LÐ .| J b

_all k \ 1 Õ+ & 9 $| w ¥ U

_unKT 
6att<$et  ß m<4newq&',* 'st	3 Ž. î'*p_calcul¸P_valußÀ fÀ__': lambda :}2.__ ()� s× 3 ðstr__(self),
   ö '__sizeof__': lambda self: object.! ( `),
   8 nfspath8 rf"{type. À.__name__}/{? á._extract_mock r()}/{id0 ô
}",
}

_return_values = {v !ltr åNotImplemented” g 
/le< 
 
"in[ 1l �containsT UFalse 1len 0 2exi@ 
)  coÅ x- %1j. Bfloa/ &1.D Abool* 6Trul CindeA @ ao ò }


def _get_eql:T Â_eq__(other)  å0ret‚! =!._& .º¡H  1 4if 4 æis not DEFAULTT  ' < + >  #A is Š 5  ü 2 I 
  ³ ü n˜\ ü /neü  $ifõ   õ   § â þ ’  ù U  ; â "3 É ã 	 ¡ ã Niterá  ?__(Þ	# ë  � 
àÞ K ß   °  L E([]); '# = ð was already an - ñator, then calling   o w shouldM g 1the'  > – unchange( &  ` (™’   __ '__>Qasync Da. E
$ F3 _AŽ @Iterá (  UÄ n( ð - ñ   À

_side_effe�Yethodi $':2[ m n†1terœb © 2 r 5 a éz9setó(1, m—  , Cº‰fixed = / `s.get(& ,r÷ 2if 1 �b . íBue =4 n 
  p_calcul• ‹  e• ” ‹ = — FNoneG' ü  =' e !orU  Ã E º  +  Àn

    side_òeffector = _side_ ÷_methods.get(name)
    if % ñ or is not None:"  & < .* * =8 ò(mock)



class MagicMixin(Base)L ódef __init__(self, /, *args, **kw(  t    ._W `_set_mQ Ás()  # make  À work for kwF @ in _ º Æ_safe_super(”  , ^ %).Œ ƒ <  $ ‚ 3fix� òbroken by upper level„ 
J ô Ç  [ ì Corigâ  ·Û £s | _async»! U  !Sthese 7 = D y  $ £if getattro"RÑ1s",é)ö A e Ñ.intersection^ ,\ )†  I Wremov¯ Bset(ƒ    " Ñ 8 - ‰ 
Z  þPentryý	E u \  5if + Atype¸  ndict__1  9 "# V “ unneededûé ‘ ,  7delvt ð# don't overwrite existing 6 `ibutesœõcalled a second timep ) ="0 - aã  † _  9 	[ 	Th 
"s\J ,[,üaProxy(ù n²NonCallable•9ockŸ!  Yw õ"""A version of `= �` that isV 5 [ A."""Ò  ƒ‚�add_spec÷ ,    cE=Falª È o d}�pec to a F 0. `9 ñ` can either be an object or ax  E @list¬ Østrings. Onlyæ onºT €be fetchùsI Afrom5 � "IfG  Î `Ô@True) ?n ov  É È  be12 º  ¤Ó86pec2À, ­AÈ®  £Ž N ZŸ ±M*Mö40ockÚRa subA ð of Mock with deðfault implementations
    of most ðthe magic methods. You can use M ñMock without having toJ ­configure I ± yourself.
+  If V  , ¡`spec` or 
  _set` argu¬ sO ‚n *only*  D ¤ à that exist in,  N ó will be createdy áAttributes and. Àreturn value5a `ê `G @alsoL  1s`.… 1"""  deGpck_add_€ (î ,‹   Õ �=False):3  }�"""Add a( ² to a mock.`{`either �an object*aE lû öof strings. Only aê o\T Âbe fetched a Ž 3 Afrom� µ # "If›  Î �` is Truð n  v   È tbe set.2 N  $ ._c 86pec2)æ , Aset_¨Âs()



classŸ…Proxy(Baf ™ƒ__init__”Çname, parentŒa   0 =  
z / # =8  ] `Å ` R …entry = Z S N    mf ²._get_childa  ˜ =W w, _new_ @  Z 4 o = at( #, g m"  õ_/_/, m/ , ' & m)_Í …èobj, _type=Non: ] ëêPAsync‰XMixinî÷await_count = _delegating_property('$ '°  Oargs5  # 4 _€n  9 ( (')	—@/, *( `, **kw
 K…super().Ë+ þð# iscoroutinefuncëå() checks _is_   {—say if anK oUis a 6 3. W BthisY ‘ it looksJ  eeJ  it!¨$# � /¼r, which· J 0aseI Äis not (sinc 	— )† î1# Ip ð
set through __dict__ becaÃAwhenl Ë ž  ¿ , È ö  % " àlikely undefinI n   ¢c )['Z`'] = a¨5io.:)s.% s J ÌN 0/  7. ð None
        seó%lf.__dict__['_mock_await_args_list'] = _CallList()
  Acode2 ` = Non" ÿableMock(spec_set=CodeType7  à.co_flags = in2 åt.CO_COROUTINEi *se¦ _z _™   · 
/ òasync def _execut¢ `_call(H `, /, *Ý `, **kw
 !):<  × ð # This is nearly just like super(), except for µ Çial handlingH Òof coroutines�  a Š Q (( #, ‡ —, two=Tru. ´ .’¥count += 1g   J  X  ê   Ð�.append(Š )š ‘effect = U Rside_ N 2if    otöe< ß rif _is_#Bion(1 b &   SraiseP b   ‘elif not ¡  RE :try€  A   PresulÍ Dnext@ 	g  & § ï StopIterationP @# Itö ú
impossible to propogate aE j  n —# throughÿ because of PEP 479< . © Aâ® - �
�  “ W # 	K …%isÂ@funcK&E 1 = ­Ù(je s?” »;C 	D 3if z  ´¯ot DEFAULT¡ Cturn. ÷"ifñÊ0_re% `_valueð ˆR ) ;  5 Y BwrapX8n‹š A Ç } v0 = b ; 5 r2  ö  wbassertD!edsµ 5"""L A*   that the ÅB wasË õed at least once.8 D ½t_!J== 0þ÷msg = f"Expected {ó �name or '€  '}×”have been‹ .¶  <6À ÃionError(msgM_Â *exactly ­Ú 1Àsg = (f"Expeðcted {self._mock_name or ' ð'} to have been awai1 Žonce."
  Cf" A% V 3 ù_count} times."): ñraise AssertionError(msg)
' Qdef a _L €ed_with(´ ð, /, *args, **kw
 !):7  › &""¤ ` â that the lastÐ P was S  ÿspecified arguments.Q 0if ƒ .• _z † is None�  … Aexpef=0 r_formatnð call_signature(F #, È v  F %4f'E] † 4: {n S}\nNoá 3ed'L J  P _ee—_message(3 " Omsg ­ ufailure7 ® @, ac¾!='Š 'ã’eturn msgÔ f ª k êmatcher(_Call(¶, two=True)_ oactualE  5  if¯  8 4!= ‰ 
·fcause  ô  if isinstance(5 p, Excepû a) else»‚q) from v $ ¨ø wý2 Ü÷­°ed exactly b O and Ô 2notì_ ýZ == 1ch5(f"Æ3‰y °  rÈX” ‹Ê"nyÆ¿&!e ½Šhas ever˜ÆÈA†¸..Ì[b_¸c) for c in] …e_list]¡"ifH Çà  ”òin _AnyComparer(p þ2 o_strin
™ ·&©  S  3'%s‹ ¦ …found' %™Š 	7 0
2hasfsg ° ðs, any_order=False):
   B"""

 ñ  Assert the mock has been awaited with õspecified calls.C ±The :attr:`5 À_args_list`  ñ  is checked forM ) 5s.
E àIf `any_order`3 pFalse (š €default); n ž •s must beF òsequential. There can be extra¹ ñ  before or afte� A å ¢ @TrueŽ 	“ q qin any Ï U, butc Bthey¹ ßall appear inCh·PexpecŸ�= [self._•±_matcher(c)jcX   %s] ñ cause = next((e( e( S õif isinstance(e, Exception)), None)N Ball_*ß = _CallList(“  7 ,T `if not?:n  µ5if ª  '  i… 
+ / ò !is» "  & Àproblem = 'Aøs‚ yfound.'  . OelseH ö('Error processing· ú Ns.\n[  _  E ý s: {}').format(� 1  ?[e Ç Â L #]­q SraiseN1ioný ª 3f'{o}3f'Eà6: {VÊ)6 ŸActual: {a}nq) from !	
freturnž	ç Ô( )' Anot_5F = [s õkí%in
@:try  Wc €.remove(E 
{e›a ValuetG • .l+ndF n· 
= Ó1'%r- à ü  ’ Eýµ' % (tuple(‰ *),Å 	‡ˆQdef aš_6 1!edW)¥ ÈaÍ’was never0/edM7if 1¦count != 0j  �”msg = (f"œg_8A_namS' Q'} toIhaveP.{ U  1f" x#edU ò _‹ š} times."5ž3msg� Bðreset_mock(self, à/, *args, **kw
 C):
  5""" õSee :func:`.Mock.reset_mock()`' 3 xsuper()* l 8 ÿself.await_count = 0  ¢  = None @_lis@ ð
_CallList()


class Async¿ (
 cMixin, Cagic  & Õ ‘Enhance :M  :`# ð` with features allowing to ¦ @an az  Aation.
 &ThM ‘ ô` object will behave so the !is? írecognized as e Q, and7 òresult of a call i/  pRable:� 1>>>´ # =Ýk   ´iscoroutineÈ (ã )" 2Tru“+ ‘nspect.isÔ d + '()- u     ``R D()``¤ 	8b whichRutcom} óof ``side_effect`` or ``return_value``ð >- i/  ¨,?
¼~ Q   þ &  Ä FthatB  j pn excepl Gaisek 3 ] @iter}\ ] Qnext ( 0 `E €however,8  Pseque$of ›ð  exhausted, ``StopIŒ  é ÜrÕ ïd immediately,Î 
�not definR  } –É 8 = by0, hÂ , default-›  å Gus a new»ß IfX" o  Oœø ö  MP obtaQ whens & G!isô"ed¹bJ¦C it‡  (7 oR ö ß )ù  ÔÐtest author c. @lso Ôify a wrappedÒE `` `s``. IÈ ¦ Bcase”
yà "0ior9 "@sameS !an¡ 9 »a:+ s ‰ Amay Zbmethodi@ f
�ú sú 0BasÕ òn Martin Richard's´0proà.š  \žR_ANY(Ö z„A helper(\PcompamPequalj –‚ything."W°def __eq__(Õq, otherW À      returnñ True

    def __ne__(self, other):  ! ¹return Fals3 Crepr5 . ñ
'<ANY>'

ANY = _ANY()



o ðformat_call_signature(name, args, kw X ðmessage = '%s(%%s)' % / ¥ N @ted_4  & '   p_string  , '.join([º �(arg) forq 0 in 1s])9 } ;    `'%s=%rˆ ²(key, valueQ   X M r.items(` g !ifu h qÐ É € #if ;  ifÓ 4matV  µ Z b+= ', - ½ g 0”%q  äóclass _Call(tupleÈ1"""À !A   : P hold¡ðthe results of a à to a mock, ei˜ R +  Ê L `É1o` or `K"`.À Iv ( Þ õ  are empty then{  ¹ ¡ will comp% qqual toy aÅ Òwithout thoseÓs. This makes> òisons less verbose::‘  z, ('Ôô ', (), {})) ==  ;- /1,/  ] (1,)4 Y „'a': 'b'a { ",)“ QThe `” ñ` object provides a useful shortcutÇ# É ½à  P(1, 2­ r 3�  ê ], a=3´ @'foo< H.foo@ Ÿ IfÎ…q has no2  Bn itÚ‘match any .: ¦ª£_new__(clsã=C §P='', Ñnt=None, two=&,H  «  from_kall=y   Û3 =   •E= {}G ²_len = len(h 2if  := 3ì ¤ 
N" =Ÿ= 'el? 2? Ýfirst, second:  © äif isinstance(0 t; '    Œ 1 = $ ~     
H q ,]) *  5+ P JelseÌ 8 [:  6  j �Á y 	G1{ ¯,@) s@	$ w  Ö { †" =À   args = vaWlue
  Yelse:   °kwargs = va1   jif two0 ðreturn tuple.__new__(cls, (E ", M 5))
G 3 lname, 9 : òdef __init__(self,Ÿ P=(), 8 Ó=None, parent ¡two=False,D  Ý  ö from_kall=True)×  ] p._mock_X ! =_ A  l # =u # f 5 =  
Ó %eqÑ WotherŠ 6try—  ¹ Alen_% q = len( )x úexcept TypeError= xâNotImplementedŠ  \  Ø ñ %''T !ifj   j) == 2U   _± ï0 =  E h  n ,* C D ³if (getattr '¥†0', d) and (  /, ) Y  ý    9  — üW A != F 	 ¤ : ZjQ7 ä = = RÈ:= 0R7 S T ë%{}¹ "el�K 3K  Å,Å gW  V 1V #, 8  	ãif isinstance() 2 - w ’ k   #  ü  &  p (stD )   K  n z Q Ô  g  D F = (›      Ò #CÑ änÀ# could be (Ë ,D) or Z   † �e  † PfirstzOcondÊ0 Z* 	l  p 
 sew ,5  2 (Â  Ú Z?  6 ”  D P  V“ 	¸ L H û UK G ."if	 ×Äj  !OL
ŒL ð
# this order is importantó for ANY to work!
  òreturn (other_args,   kw £) == (self   !

H ò__ne__ = object.  Ádef __call__H `, /, *\ C, **J :I  ” 0if c ö._mock_name is None$  ( ¹ ²_Call(('', S Q  , ; b='()')¦  5   - =a  + ( ƒ 
[ Ž h  Y �, parent=2 )ÿ ugetattr  )Ð ô " s =I õ, from_kall=False)Ê  $ Â = '%s.%s' %Ê\ , B 1 	û  > = 	Ú o  aêë _ibuteð  w ö in tuple.__dict__ ®¡raise AttrN UErrorÛ ª @ w ‰2get‹‘arguments“
‹2len  û2“ dI’ ;els¤<4 5 Ç $ N‘@property+  \ $ ™ ” ?  r/._Þ  O)[0]P *R 1R  ” T__repØ
G8noti¤½  ä #I—P or '4'þ  )   !ifÖÀ.startswith(¹x  &   W D ú  	M ;  ?if ÿ	 -  P›  �", SÐ U  ½   ï !otó 
5 ! ‹ 'el9 ,' ] ¿  n Ã    ' f bc_formay signature(= M« b\_list �"""For a " r` that Š esÕ‘ multiple% @s, `- O `× ž @s a g ó of all the intermediatB € as well 5theD Qfinale E.""" •vals = [] \thingbwhile  0is 1è"if" G Ž v ð.append(thing)
        ²    thing = à._mock_parent
   òreturn _CallList(reversed(vals))


call =# ð(from_kall=False  ðdef create_autospec(  ,  B_set, ¤, instance � e=None,“  —  R_name  ± **kwargs):+ A"""Cv 0 a Ú   object usõ tanother Aas a� ñ. Attributes on theN B €will use ± correspondP 6 5   `Ý `` QtheirL   !.
 ðFunctions or methods beR  r 1ed t 1havu ñir arguments checkedH "to P thatŸ `y are ›D  th ´ Ãct signature‡ "If°  ��` is Truq �n attempt’ `to set !n ¢don't exis76Nÿ Å ¥raise an `cfError`… pa class‚ Uused — ¾ � ‘€value of ß(«F S )IQ same£ ‘. You canÙ�  asY [ ®@ forº [ Laby pasQ` =<c`. The­ !ed¢ N 
bonly bŸuable ifüs·   Å & '`L÷` also takes arbitrary keyword0­  ³ Qed to’ ô the constructor f º A.""", €if _is_l	 k Ž#D!'t0 a # Ô 0 toO	l Ras itšbhK ”interpretO ¡of strings�  +  …  Á1ypeT)WÄis_type = is˜   ,  )@ Ðis_async_funcÁ	 / ) _XP = {'q !'::}F f  :x — 2   	6 2eli8  ë ß<  #  2 we/Öwith a normal 3out²† u › ‰ 5andŽk  0['_× D_as_-A'] =P) ‚.update(lK²±= MagicMock‘ Òòpect.isdatadescriptorZ† &#  "s Nñ’O  à `# beca#we' aknow wó ïCtheyt6 »  ½{	ë‹ ¶ „  | ¼qRuntime¶3("I® ù@ notÒ ü\ whenò A L  1"isß j1an › ›  "Š ; pA¼pÖ  … _ô /gð Klass = NonCallòableMagicMock
    elif is_type and instanc Tnot _ P_callB q(spec):@  D ÃKlass = NonC# e & ð_name = _kwargs.pop(' 1',  #)
( !ew  ,     Ðif _parent isf e| ô# for a top level object no _nN Ñshould be setT  ¸   B= ''‚ qmock = Ó (u =}  « #ew   ¬ =P ,c  g  ! same, **ö ‚f]÷ , FunctionTypesl## Ì ÷only happen at theö because we don'ó ‘# recurse7fe s° ÿ ð _set_signature( !, ö* µ p_async_H “ ð  A #up  ? D )> 7elsÁg_checkm  g  , 4 ,™,–2ˆ  ¦6Non³L” .  ._X ¡_children[l1] =o Ø  \ O  ò 'return_value'    Øp  g .* à = create_autoä é   .ä _=TrueC  X È @='()P¶ ƒ / #Áentry in dir{ U a@is_m()   s %# ÑÑ already doeswquseful > � methods_uX E ‚continueh  �# XXXX do©øneed a better way of getting attributes withouÓptrigger(  code execu=Ñ (?) Probably«-j  1aactual•� <!toQ it sœ w?srather o ñ a property than3 L  a ! òdescriptor. LikewižTwant o  out dynamijyL `provid . Fpwhat abE .t  rao Pexcep2s oÉ 7hanF A\ °Error on beT‡fetched?+ Awe c�be resili�0aga+Ñ it, or catch4 Pagate0G ’ P when é Ùz Q from  Ô@ 6tryq À original =8 é", Ó9 w  ð 
K ¬âP = {'³4': o }Y !if% Ï
O =  ! 	A B RsI ‡(f  û 0new3—SpecState7 Àspec_set, mo÷ck, entry, instance)
  `mock._ ¡_children[1 u] = new- Uelse:  B �parent = > 	 Tif isp ú(spec, FunctionTypes)J N .S 	T €skipfirsq `_must_ ] ² ‹, is_typâ ðkwargs['_eat_self'Û  = O 	e ¹ £coroutinef³ Ÿ(original·  5ù_klass = AsyncMockV ; ñ 
: NMagi: gnew = * (u= s, name=þ W_new_ 	„  r 
 / H O 2 "**LB$  õ_check_signature[,m%, —=
 %)
— T# so –ös created with _setX u becomeõÇ attributes,O ñ*plus* their underlyingÒº exists in  0 of2  <N  µP. AddC ,to7 ÷may be unnecessary where we are alsoN @settI _as anÉ  ?, ¶o?newn0set(¯ 3newiareturn


def oÍ1"""’ R@ pwhetherÝ ashouldÜ9x` argumA0on #A's `Ê`G  £ ±. ^ nif not_ø‰  h"if÷ ¾gð  e û, '__dict__', {}Ò#h 2 - Á 1n'tÄ �  e   .UFalse  j ! =Ö @.__c"__ÇBfor .i÷ †.__mro__¼ Presulç( .° Q.get(!–, DEFAULT‰3if 7 $is R  © vcontinu¥ 
6> ñ, (staticmethod, ¼  ),ú /elW þ	’# Normal h 1 =>gð if looked up on ãc Ó <# ($  , ê± is alreadyS 6ped3 B Ä 8] ±) ç( #‰f ö dynamically providedv3 E n !

^ò _SpecState(object):,|€_init__(Ð ,S  ð=� ,Šð=None,
             ô    name=None, ids
 ðnstance=False):
*   Àself.spec =  
 Pids =G 
  ) C_set4   
! Pparen 	 
 iŒ  Z  
!  Â ! =É ð 


FunctionTypeŽ (- £# python f  ðtype(create_auto© !), %# x amethod 1 ðANY.__eq__),
)


file_< 0 = Jó


def _to_stream(read_dataKTif isa  s, bytes%  p°return io.B &IO- )’ FelseŸ/ jString0 —  mock_open(
 ñ¡ 3='' 1"""b …A helper;B to 50 a D   ðreplace the use of `e ±`. It worksN 3for ð called directly or: ñ	d as a context manager.
> PThe `s p` argum6!isu   p object� ð configure. If `—a` (theH €default): ón a `MagicMock` will beã  d ² �you, with1 ³ API limite"o $sÄ ð	attributes available on RPdard /ƒ handlesØ `€0` iÿ s¿|  R  1`,  –line` and  s`qÞ a  q.  This_ ƒn empty f 3by .ú_– / =Î/ ¦_state = [1 ,	]¶ L  º ð
s_side_effect(*args, **kw
 { ú#if$.: .Ê `_valueÉ 1noth  : & > ¹ - Ä 6[0]n œ Í È "Ã &	9 ¾ ¹  †½ ùyield from _iter7 � E—while Tru‹  ? \¢ 	g Þ	¡ ¥ �þ	X o  >E in Ö Ÿ N  % /Jnext;5 Ô &ç¹ , ðnext(_state[0])
ñ
    global file_spec &if ‘ is None:  3 ¥import _io ? ù = list(set(dir(_io.TextIOWrapper)).union" ÁBytesIO))))
T ~if mock|  ð
= MagicMock(name='open', Á = G xhandle 0 # ¯ )n ' ð.__enter__.return_valu>   š  l.write(  'Q Oread$ ?linL  ( sQ v ð side_effect = _Š _ 0 ”_state[1]"  ` & ( D  " .H  : F T , s-  h : 2__i„f   
4 lnext__m  4 5 ðdef reset_data(*args, **kw
 )è 0  to_stream(Ã ; +f ù 
‹ #= L &1]_  9 b# Only� P the ®  ¸!if ñuser hasn't overridden it.Ï  G   b  ” ¤  ¬fÎ ,   ± 
° d ‚ DEFAULT Ž
ê Ë : " ; O …  ìñ


class Propertyß  “1"""S A/ ó intended to be used as a p@ ñ, or other descriptor, on a j @`p `> ðvides `__get__` and  2ñ_` methods so you canw1ifyž #a Ô =!wh« É‚fetched.;F king a ‚ ðinstance from an objÇQcalls Ua, withs 0no º`. SettS :it - , ; –  be' #seCZ õ `child_g �(self, /!ê �Eä P Q _H @obj,Ð `_type=0Ý r ¬A yA 7val7 0   0


1 Pseal(¼ $ ¡"""Disableñ	automatic generation of ô [s£PGiven�`input ‹ , ^ @s itwÑensure no furi w `s will”a !ed§`access~°an attribut™ Ðat was not al¿uy defin1@The ± ³recursively“  >  @ pas€in, meanl Athat„ Ðthe mock itseòBlf, any mocks generated by accessing one of its attributes,
    and all assigned I ñwithout a name or spec will be sealed.B 1"""  9  ._ _ q = True 1for{ € in dir(' !):  † 6try   pm = get® , ,> )1 „except AÎ ZErrorC ccontin€  T ÷if not isinstance(m, NonCallableMock”  3 D må �new_parenS €
€  ð(m)


class _AsyncIt¡¬ <£Wraps an i  (@an a3 uhronous 
wð def __init__(seE Í   . % =L QAcode½, =(ûÖ_set=CodeTypeˆ7 �.co_flags] n2 õt.CO_ITERABLE_COROUTINEr “ Á__dict__['__L a_'] =   $
/  ê Danexë á Bpreturn . þ ½ EBStop—:ionÄApass‚  `raise . Êð
ion
"""Test result objectÛ¤
import io
 4sys ótraceback

from . . Butil ”functools w(�

__unittt d
ó failfast(method@5  Î  - QinnerÓ, *args, **kw5  ð %ifƒ ¬4, 'a ‡', False-  1  & f.stop(d‡’ o  � % “ ð

STDOUT_LINE = '\nStdout:\n%s' :ERR 3err m �R�(�«  """Holder ’B¶Âinformation.v D Ô s are auto" ²cally managj@the . ACaseR  BSuitý  es©Ad do†pneed toM‚explicitT bipulatX  wr³s¼ « s™ TEach Åp holds ƒ Åtotal number4 B runz `collecá  R y Ñ0ure{0d eD J ð	at occurred among those „  O ws. The P M  -�ain tuplec   (2 bcase, l0ionhŠ), where   i} 3Œ 'Ò "he§ 7 th¦ 
�_previous†C|ÔZ _” pRunEnteá =ËÂ ø_moduleSetUpFailed   7kñstream=None, descripb ‘verbosity …,  ±	f 	 �A= []   Àf.errors = [3]
  úself.testsRun = 0 »skipped = [4 ÿexpectedFailures#  $un% Success& úshouldStop = Falseƒ obuffer €tb_local~ ;  …_stdout_C ;Non^  # ?err# 
€original, ¢out = sys.\ 
¬ _+  er¶ + ;err+ ¡mirrorOutpS ¿ $  def printE"  s(¤!):  ¶ð"Called by TestRunner after Êa run"
/  J Pstart) H ,# N  Àwhen the giv
 �est is abò Rto beX  ‚    • 9A+= 1r  _à     > q_setupS¤&()² 	  * ¯ 0if  .Ó U   ¨Ô0is ø
,  0 I - õ = io.StringIO()Ô  0   4 	X4 ÿ E=º  q = 	a - e9 š - Ë #Õ1RunØ#$"""ñ once before anyûò s are executed.S  Ú ESee W ó  for a method cqJ AeachK .½ )""q/oppž r�has beenl%""a wurestore2 ·    qB  _=  3 4;W
a NoÊÆÏout.getvalueI eÜK?err. 	2if ` x  cif not# ç.endswith('\n'å  *  R @ += ) *    '.Ö × ówrite(STDOUT_LINE %| 11if ë ¹ 
" ¸ . ·  `· 4ERR· L | ñ   Á  ‡Ø9out,/ ¶/ ú^ Q >wz.seek(0={
( |truncatP+ +S À   self._stdñ"err_buffer.truncate()

    def stopTestRun(self):   ò"""Called once after all tests are executed.Q  6 5SeeU ò  for a method cM H AeachI .p G ‘@failfast  ¦ �addError£ ,8 _, err® pwhen an  ñor has occurred. 'err' is a tuple of values aso  Ä úreturned by sys.exc_info()®  ,    9 .e¡  s.append((%!,  _@ â_to_string(errÈ 5)))x .  miJ ßOutput = TrueFailureo:"""É  Æ?ureJ0SubÅ	2sub„( at the end#a 1 ã-qNone if/ &  7 õed successfully, otherwise it's al d@# By²÷ault, we don't do anything with’ Ñ Rs, buL ­ð # more sophistidRð results might want to recordü m if_ I@not  8 e ”if getatt³' Ô‡', False» 1   ÿ ‘(  Ðif issubclass:2[0]=.V ÏureExceptionV  ˜" =Œ1 ì a JelseÀ   ‡s9 G Ò! òõ J ú _ùæmæï ¬þÑ ü{complet¬«Bpass_f 7kipc i, reasZm ½is skipped. 
Y Ž èxpectedØ"<  æ/µÿ˜ e1 m «	çË: Á$Unn S5eÈv]Dwas ?  • á ×ðtÀself.unexpecótedSuccesses.append(test)

    def was# ¡ful(self):  ! ð"""Tells whether or not this resultA B a sg E."""> ð# The hasattr check is for … _A r's OldRM   w.  ThatG 2ways ðmethod works on objects that lack the o gibute.D À(where would® hÀ ðinstances come from? o% õ tored pickles?)M Áreturn ((len2å.failures) ==  Rerror e0) andB  \  (M!J ¨, 'unexpec»]') or= i 3  Š '0)éAstopd 
àƒIndicateE @ …As sh+©be abortedÜ ).# ¶Stop = TrueWñ_exc_info_to_string} a, err, 
ˆ €ConvertsL4ys.? ð()-style tuple of values into, [ 	› ‚exctype,* `, tb =v Aa# Skip„ à runner tracebAelevels, 0whi} b¿ õ ñ_is_relevant_tb_1 7(tbÏ  Ûv ¢tb.tb_next  3if ¢   l?–Exception� 1 ¯ Ÿassert*()­  . ƒlength =­ ^count° s± å Jelset F ENone( ftb_e =€ $.T7» (-  � é ‹‚, limit=a ñ, capture_locals=b U sðmsgLines = list(Š „.format(å q "ifø jbufferÔ `outputÑys.stdout.getP(k  G º* ?err* 2if X 
l  E !if, ë.endswith('\n', .   + @ += % 	J  ÊÓSTDOUT_LINE %‡ 
È  l …� é œ * › 4ERR› < š @„''.join(× ")
% –e  Ð?L `__unitNR' in y÷ frame.f_globals_ c  «E = 0’	 Ä 7 .µ P E+= 1Q  ß2    ã 7 Ä q_repr__WÀreturn ("<%sà run=%i errors
 pfailure j>" %
  ñ(util.strclass(self.__ Q__),  ÒtestsRun, len$ a ,),P " y ñ )))
"""Running L ô """

import sys Dtime 0war0 £s

from . / cresult vsignals rgisterR$ p
__unitr ¡ = True


Û ñ _WritelnDecorator(object):Ñ Â"""Used to d" Âe file-like + òs with a handy 'wR €' methodã  kÁdef __init__;s,streamj  # d 2 = 	 
ˆ = tgetattr@   ? !if b in ('> ÷', '__getstate__'/  r ðraise AttributeE.(W w # ceturn | º  'Beam,) *  ¡ ù # §, arg=Noner  ¡ "rgZ [   ô : Q(arg)M  ó'\n') # text-mode°s translate¡å\r\n if neededâ‚TextTest(7.   A"""A” "   ðthat can print formatt3ext+ s~ a• .±65by ~ aunner.ß AsepatÁ1 = '=' * 70"  2 -   i
Gy ó
, descriptions, verbosityá UUuper(” Û&).U —O ‡ N  $h¯    Ø–showAll =Ž J > 1B Idots" -==# Ú ) =é o FgetD( † ôñdoc_first_line =òY.shor< ‡"ifú\Z and J 
Ôr3 ¸±.join((str(‹ ,9 )k OelseH = ì AstarÖç sè; ‘ Œê ´
Š Î.­ sQ Ñ 9 " ... "' vflush()í ƒaddSucce—,µÕî 	< ž ï $gln("okµ $el0 ¿-?'.'ð ‰ dî ,Éó À self).addEróror(test, err)
  õif self.showAll:     ötream.writeln("ERROR"B $elD OdotsA F('E'; d �flush()
… ð def addFailure(Œ &, Â i ñsuper(TextTestResult,Ö ').A ; _  | ¹ ý OFAILü 'Fü ISkipù reason)ü A ù ; ü (óskipped {0!r}".format(X Õ'"sO ” è".stExpecte/I ',ež " f·Ý x; $Un| wSuccess91F  Ý2u˜ " s™ Ù u; ¢printErrorÆ  ±1 or,¬h aList(' '�!.e€ 2  U1 8sa  u ‘, flavourÎ7orsÝ 6for'0 inð/or™!ln0¶.separator1µ k´%s: %s" % (�  ž ñ .getDescriptionw/))P < � 21 "} ´…

class Ãunner(objectA"""A! r  3 ñ that displays rAs:€textual ë.–1It �ñs out the names ofY @s as Py aref ¡ €0occ»Ñand a summaryB %he a^ 4end  Š S .D 1""" ¯ É =þ Å À

    def __ü,init__(self, stream=None, descriptions=True, verbosity=1,
  ôfailfast=False, buffer ³resultclassa swarning P Â*, tb_localsF %):& õ"""Construct a TextTestRunner.
( 1Subt õ)es should accept **kwargs to ensure compatibility as theI õinterface changes. 5""" #ifF@ is I³  0bÕ = sys.stderr;  „.! ò_WritelnDecorator( )0 ¦) =µ
) ¼& =È
# Á4 =  
! Ò# =Û
 ¬& =¸
# ò4 =  ! 7if # >?notBHelf.* =8 ù¡def _makeRuÞ<qreturn pJ ' �, ^ H)l 1run= g, testj @"RunFa given ‚ case or fsuite.?�    ç Ä øƒregisterÝ 3   i.ÂL  q8 .Ô $ Û'  * EwithÕt.catch_ä(  $ ß   
# " ,# $  °set, use it¶¡filter allcN “  I    r.simple7 °. > 1   ‚ Bthe /   �'default'¾ñ'always', special-Ø2 G   #Q from­ ð deprecated unit7q method‘@show( mÍ ð# no more than once per modulu0eca#°they can beÍ?rlyK ôisy.  The -Wd and -Wa flags> @usedoPbypas/isK  ƒonly wheWY 8 -   á5n [c$, a] ? a .  "('	'   7   zcgory=DˆBionW�9 Ðmessage=r'PleÉ lúassert\w+ instead.'Q�startTimeÀime.perf_couT(, Ë² = getattr(®2, 'L   !',!
A  Yp $  ‚JÀ           s÷ tartTestRun()
  Itry:   ºtest(result. ofinall2  Cstopa £ = getattrC 7, ' z', NoneX  u 7if ' q is not, ¡  0 - Ô  ÷ime = time.perf_counter+   rTaken =z  3 1- s-5ime
Ç.printErrorsF kif hasï ºeparator2')½ óself.stream.writeln&%.s5  ru� €  –EsRun˜ M €"Ran %d - å%s in %.3fs" %7  = `(run, o ñ!= 1 and "s" or "",F*)› } %)
e ôexpectedFails = un €Successe µskipped = 0: ’ÿ  / ”map(len, 4T  f Uures,F á  M .�  < µ ñexcept Attribute%
ùEpass� Jelse É /s,.#, x 2 = Å sn@info!%[]d !if@+ C.wasxOful(•–("FAILED"ï @�failed, e¶%le¿   ƒ7),  + sG 0if - *ed b È �.append("&  S c=%d" %5 L c M ' sK  &edL ’àG("OK ¯¾
Ç 
Ã ´w  w 9if úK 	)   j/ifFa 	$ s¤¹  Fej õ 
\ @�ln(" (%s)Ì±(", ".join(< (),OM G("\n�creturnä
import signal ó	weakref

from functools - Ðwraps

__unit=ð = True


class _I?óruptHandler(objectLÐdef __init__(¯ ², default_h0 )  ç   Q.callEFFalsm @origk< , =N è·isinstance(t Àdler, int):
  ÷if default_handler == signal.SIG_DFL:
1  ä# Pretend it's/ I &inM �instead.C - v F 	= /el´ ?IGN´ ðNot quite the sam	 ping as ë �IGN, but ©closest we~  ÿ ÿ
# can make it: do nothingæ `€(unused_dCum,  nframe)·  q Ipass† Nelse+ ð
raise TypeError("expectedÞ 3INTb syto be "Z  o  "« $ ŸDFL, or aH õcallable object"){ ^self. 
0 `def __L 0__(9 ,Ù  LE ~ValledÝ, bal.getÇ (  í6INT“ >if ?  isì v 
€Ò# if we aren'B> q,Yñn delegate immediatelyÙ x@# to+ :@ 	%  ƒ 2Ë / V !if³ .5*edº I  D   , E f = Truò for result in _ {s.keys(× ”.stop()

, ð = weakref.WeakKeyDictionary()
÷‘registerRi (I ^ G [ c] = 1
6 Omove4 Äreturn bool(@ C.popZ p, None)¤ †interrupÚ= a êHAï �global _; È/if  1 isV ¢ œÀx T = _IÈ ­ a   ZOINT,»  ()
m^ qmethod=GÕ 2if   ì ;notð r@wraps(# �  ýðinner(*args, **kw
 ý �  initial' 6  re!´ v   2try¹    8¦ “ à+ ofinallD  Y. `È ‹ r Ø_Àndler is notƒ None:
  rsignal. ( ô.SIGINT, _interrupt_handler.original ó)
"""TestSuite"""

import sys

from .  Kcase ò,util

__unittest = True


def _call_if_exists(parent, attr)Å  func = get 	" ‘, lambda:ô )ô  / õ ()


class Base¾ s(objectY Á"""A simple š sâ ò that doesn't provide M ñor module shared fixtures.{   v…_cleanupë   î Ñ_init__(self,u Cs=()�  &    ._Ž as = []X  uremoved! 0  0addì !s(A !)
 y Crepry o ³return "<%sŽ €%s>" % (·A.strù ° 1.__ ‘__), list )f #eqd d, otheÃ Á ñif not isinstance(" ", ó \ õ 2   ¡ @NotI¨amented×  � 2 ==› \ 	› ?ite  Ï |: PcountVQCases% A ñ ªÅ 	Ÿ¦ 1for]1 iní 
â !if 
  Ý [ !+= .‡ ì ' ". ñ
¯ iµ õ # sanity checks© £ “AableF7 n ñaise TypeError("{} isÚ7 �".format(sD )¯ (if ¨ñ, type) and issubf9 ,›  |  (	.° , 
 ºf J rÊ  * äŠ   8 ¢s must be ¹�tiated "› 
ô	"before passing them to —&)"; 
�s.appendü ƒ6 }Îs˜SEs, s@ í   ñ s Þ 0an  ù" o”!s,ÙaM 7ing´ ÓG 
¿Ó ¶ Í 3run–Tresul� ¢  V Rindexä  0‘enumerate4 õ  0 2if D º.shouldStop‰  & Ybreak® ² (: ‡ + !if¡.ÁM Ú _è #0AtI± (· M •d –9   Q ", ? o 0"""Í P hold@°a referenceG1theÙ ¯ð at index."""
     Ptry:
	  Ðtest = self._ …s[index]& úexcept TypeError@ ø)# support for suite implementations that have overriddenr k  • Epass Lelsep �Some unit®   ðs add non TestCase/	 S� ¥objects toV  g R# the° . °if hasattr(\ €, 'countQ  Z :s')‘  M >rremovedF1 +=œ .> )()m 9  h w� = None
' Ðdef __call__(, ÷ , *args, **kwds‹ SreturVJrun(( O QdebugL = a"""RunŒ ð without collecting eüas in ag‘Result"""ª    ?  $  ­ 
(  .~ ‘)


classI §P(Based › A"""AE¨À is a composg R q consis¢ áof a number of\ ².þ ôFor use, create an instance/ } ,nSb 5ase* s-�When allž sÜ be AddedB ´ pcan be Öqed to a4 5àrunner, such axhR ³. It will rœ’individuax R case,i½PorderPwhichÈ `y wereÍ  — qaggrega. ÿrÄ0s. Ð “ 1subš¡ing, do noÙ0get¼  Š V   b) �rtructor L  ¾ ‹ ", l !, c=Falseç <±topLevel =  A   aif get�B 'bÂRunEntered',4 )!> 
z8 Þ6 7 = u 3Trut u  Ê,­ Rœenumerate< 0 #ifß º.shouldStop„  & RbreakŒ    ‘if _isnot9q "    A ¿ ð arDownPreviousCB3 ]
\: ÿhandleModuleFixture8 h _SetUp5 hp¡  Ï=  kaest.__3*__ © Dif (è v, 2, '7 ˜SetupFailò%or* G  K “  C mþ Ç D q  G hcontin  !ifÅâ º (t 
ŒÈ M  /    #if ocleanuM s i0AtI·(·)aÀ  if topLeveGl:
  ÿself._tearDownPreviousClass(None, result)6  ÓhandleModuleTB (/   g õstRunEntered = FalseZ creturnq 
  def debug(© )¼ ñ&"""Run the tests without collecting errors in a TestRÊ 1"""[  [ P = _Dd   (ë  t Q.run(( r, True)™ # &  ¿ _'SQSetUpË ,· ^Ù pƒ£ = getattrXD, '_"  Ó V 0', «¸ qcurrent ! =j @.__cÕ%__ý :if ) $= [ : ”  +�= ÖmÛ oFailed9 Ó ~ �, "__unitÎ’_skip__",!÷Š ‹ :tryr X .÷ RSetupž wÀexcept TypeE2
M #?õ may actually be a functionˆ  œ ‘# so its mR will. ¶builtin-typñ 2 Bpass-  s!~ûÐ 6, '$ ù6if  q is not
Ô ÷ _call_if_exists\s(vStdout'P š f  m 6  TE[Šion as e…  ' Õif isinstance‡ Žü 5   7rai9    )ù Á	°6  ñ Name = util.str¿(P 
 8 q_create³"OrULevelû × -e,{  G  	ôF &Õ  é 
Ì 0finÖž'restore) Ð [Œ !isNu  ? x1.do]‹Cleanupsi /   iif len².Ö_ŽŸions) > 0u  F pfor exc3	„ J  E  I Ìi,š <[1]Ö_À            ñ'info=exc)

    def _get_previous_module(self, result):,  0 ' M& } = None òClass = getattr(G 5, 'g ATest& !',C )D 4if e ! q is not& ˆ Œ 	8 #._Ë %__\ ereturn` Å 

bhandle dFixtur
Otest 8.Ré rcurrentm 0 = b @.__c</__¿ ;if 5 =Ì 
!ï ß  1œ ä ƒTearDown¢) - ¯ .EöSetUpFailed = Falsö:tryx Cr = sys. )s[º ]“ú except KeyErrorI Á  �   s… 0]a 7, ' V Tó _call_if_exists ºÆsetupStdout'Å —    n (/ ò Eù Šion as eø  A V   rcase.do‹Cleanupsd  ( h .xcj  - acreatew"Ora ULevel¬ Eexc,Ä A  
®K *	Z
l – Õif isinstanceÁ |_DebugRà 1  7raiæ 3 6Tru1 [Y'U4Qkfinallð ê 9urestore;ìxo <v , uÏ method_name) pan!,  ¶Öe{§Name = f'{c B} ({: 1})'º  í  — _._add+ b � ~G  l 	weption,S ˜  œ   À         inf£o=None):
   error = _E	 qHolder( UName)( óaddSkip = getattr(result, ' 1', \ 3 3if  q is not  ð and isinstance(exception, case.f GTest¤  « J › V, str: )§ FelseÝ  9 !if{ Jinfo   Ä A.addÿ ^ pys.exc_5 (^  3 b   I  A !)
òdef _handleModuleTearDown(self, B ö ‚previous. 0 = ( d._get_ !_mJ ‹4if # > !is}
areturnž  Ä #if… .X ¿SetUpFailed9 : :try! ˜  ´ 2ys. *s[“ ]> A Key…
J ¤ - t6Ø �f :, '" –
" �
| ó _call_if_existsgö, '_setupStdout'w E 	µ (2 ÿ EK as Ä D (if6.‘, _DebugR‹< 1  Uraise@ MÒcreateClassOrSULevel� ô -e,C K  ’J &
B
Gkfinallˆ › ÆrestoreÈ : Ì  c©"do1‹Cleanups× ( Û + �X o ”7 N ˜áñkPÍkòOtestø+ pÿ '& åqcurrent 0 = j @.__cè!__ž  · :if ) =7: 
Š 9   %if
ÿ 5  i S$>x', Falsx C R ß'ŠL ÐpreviousClass÷, "__unittest_skip__", False):
  ureturn
 ñtearDownClass = getattr(previous 9, '( …', None)F 9if ! q is not& 
€ ö_call_if_exists(result, '_setupStdout'Z  » :tryE  ¹ (1 �except E Žion as eC Õif isinstanceŠ q_DebugR˜ = x   Uraiseý     cCñ Name = util.str 
M
«  9 Áself._createpÕOrModuleLevelÆ ¢ -e,|  G  ÈI &Ù  í 
Ï ofinall¯ ørestoreú Ó 	Š1.do"‹Cleanupsù 0 jif lent.ž_žions) > 0 C ºfor exc in ~ G  B  F # =   _xc[1]' t   %6 M   
œ /Áinfo=exc)


W ó _ErrorHolder(object·1"""àaPlaceh!  Ûòa TestCase inside a ˆ€. As far1& G ðis concerned, this looks exactly likK  ‰ Š�. Used tog 1ertF °arbitrary e¸ �s into a1 ± suite run., Á ÷# Inspired by the ô Ò from TwistedŽ¢# http://t ômatrix.com/trac/browser/trunk% ò/trial/runner.py$ # pibute uÎ !by>.P_”¡_to_stringº ufailure¼! =T Ðdef __init__(åÓ, description½ 8  . ( =) M !idG : ç A 3 fshortDv A  ç5 c__reprµ n ("<—¸ �=%r>" % e Ñ (,)] /st\ Ê 5id(1 Àf run(self, £result):
  Ò# could call  ÷.addError(...) - but this test-like objectF  shG õn't be run anyway" Qpass
 `def __p ƒ__(self,x – preturn  R.run(™ )A ácountTestCasesG ? 10

m °isnotsuite(Â ) ñ"A crude way to tell apartè cY Q and : ñs with duck-typing"Î 6tryMBiterc  ±except TypeP) à ATrue*  ñFalse


class _DebugR²(q» ÀUsed by the SÝ  Å âhold previous H @when“�ning in dW .¿ _,  F Cw R= Non— ò_moduleSetUpFailed = ¥  ?ôEStop a"""Var} òutility functions."""

from colle ð import namedtuple, CÞ"er, tos.path( ðcommonprefix

__unitÖ1 = Oð
_MAX_LENGTH = 80
_PLACEHOLDER ó = 12
_MIN_BEGIN 5 :END [COMMO% CDIFF& o 1- \Ï  (h -+ � !+ $ h +F 5 ® ‚)
assertJ ž 4>=  shorten(s,²fixlen, suf Y0skiÌl)  úgVlen -, � 1if - >› æõs = '%s[%d chars]%s' % (s[:Y !],H E, s[v – 1:])m sÐ_Ó ³_repr(*argsÆ   1 = M‘(map(safe'  ,  )V  maa = max' !  if  þ 7<= èâ ™  4 œØ 2 = ¤  (  t   S  = ð  Ù4 _ p  X 3  (À -Ñ K×oˆ #if¢ n >8‚â XW 	{ D / + ´ 8) <\ð <4 = è( ,¬ Œ ,É Ü  > ™9 R + s[ °len:] for sŸz   v ´{ w Â 	€ É ­ Ñ Æ 	 ¯  ÛÙ  !, =¡ðtry:
        resñult = repr(obj)
    except E Aion:   2res1 �object.__: &__< òif not short or len(6 ø ) < _MAX_LENGTHU Rturn & k 're '[:6 ò] + ' [truncated]...'

def strclass(cls)^ H  "%s.%s" %  ó.__module__, cls.__qualname__)L óorted_list_difference(expected, actualg ð"""Finds elements in only oneñthe other of two, sa p input g 1s.
û Rû 0s a( -Q ` tuple= +  ‹‚The firs? ñ  contains thoseK = Ž  ‚ "¿ "r A but¬1in  Ô  P, and J ksecondd 	î A ^ G � .Ç PDupliË	O !ei.Ò are ignored.M !"" ‘i = j = 0 Ámissing = [] $unö  ¢while True' ˆ 6try   De = ; "[iM     3a =*[j Šif e < aL  4 š ’.append(ek   ai += 1¶    ® ‹ G == º  $  C  !el” >” — a— j— 	40[j]• ö   ™ A  ?elsÂ  ¾   @ ›     0 ` kfinallÿ 0   ½        . I dªIndexError2.1ext.yJ[i:]¢Ã, ‘ * Qbreak^d &, D 
ÿ¿unorderableóSame behavior asåB  ‡ f@istsÙs ó items (like dicts)�As it doe ñlinear search per8 Á (remove) itf  has O(n*n)$ £formance."?o– • V.pop(‹¤†.� (= - ü_Valueü*< Ì p# anythá@leftgh 8 isÆ på) àÀ three_way_còmp(x, y):
    """Return -1 if x < y, 0 “== y and  a> y"""9 r6 ±(x > y) - (; ô)

_Mismatch = namedtuple(' ò*', 'actual expected value')

def _count_diff_all_purpose(5 ,6 Ã 'Á ðs list of (cnt_act, 	 ñexp, elem) triples where the j  s k 1er'Ù #- ñ
ents need not be hashable$ as, t =q – "), Ò )( @m, n( @en(s" Ben(t âNULL = object( PresulX ![]> Rfor i¼ ó  in enumerate(sú  Á!if° @ is T Ö    rcontinuµ  ant_s = j 0i    m jg §range(i, mf  " ¡if s[j] ==r 
j  !  nes += 1V     9 ¢  r €, other_¡ ~ å t + … 
t… t¾ 
… !if3s !
×  5 = Ó[sYt›¼ å   Ä€.append(? !)
ò  î Íè ÍÅnFÅ	@ â 	!01~  wgýX?musùC¡#er• 4),  
ÿÕ 7 = Ñ é#sð‡s.items(§ G ×bt.get(0 0f²Q ™ ±} ‘ Nin t­ ² &Oin s? q .
; "à# IANA versionõÁke 2020a are®ñvalid PEP 440 identifiers;ôòrecommended
# way to translat^  UÓto use YYYY.n:0`n` óa 0-based index.
__9 ð__ = "2021.1"

# This¸Aoses… ‰originalÎ � number.
ã „_VERSIONJ Ða"
Africa/AlgÎ ô
Atlantic/Cape_Verde# ƒNdjamena À/Abidjan
Afrâica/Bamako
Afr Dnjul tConakry TDakar „Freetown DLome ¤Nouakchott ôOuagadougou
Atlantic/St_Helena& ECair‹ EAccr dBissau( N( $bi ¥Addis_Abab0 FAsma> ÔDar_es_Salaam6 uDjiboutF eKampalB ôMogadishu
Indian/Antananarivo UComor eMayottuMonroviR tTripoli< ”Mauritius‘ •Casablanc2 uEl_AaiudUMaput!BG%yrp vBujumbu÷ uGaboron! FHara/ UKigalþ —Lubumbash 5sak‹ „Windhoek­ ELagoº UBangu9 ¥Brazzavillz 7Dou[uKinshas\ YLibre0 ULuand  UMalab÷ UNiame”†Porto-No”eReunio4PSao_TœÇ5Mah— ÄJohannesburgÙ UMaserjMUBuKhartouD&Jus`Tunis
&0rctL0Cas¨ 3nta :Dav" dMawsonPKerguE “DumontDUr N XSyowa+ XTroll hVostok PRothe!psia/Kabë  �Yerevan
A BBaku
 !Dh  VThimp"Ch   bBrunei2 @Yang|  sShangha SUrumq ’Hong_Kong5 DTaipA 0Macè @ PNicos?  ùFamagusta
Europe/ cTbilis^  Di× 5 rKolkataf J¾ ’Pontianak `MakassÝ 7 QJayapH  FTehrRghdad5 ’Jerusalem RTokyo 4Amm2 bAlmaty pQyzylorÙ Y 0QosR bAqtobe) 4AqtDAtyr BOral! PBishk� H 4SeoÈtPyongyaYbBeirut3 K‚t_Lumpur Tching‚Maldives 3Hovç ”Ulaanbaat„Choibalsã ƒKathmand5PKaracG œ 3GazDHebr@Manij " QY cBahrai†bRiyadh� 3Ade SKuwaiÒ pSingapoÒ I PColom'  `Damasc\ Tushan^ ®k  “Phnom_Penk 1VieŠcshgabar 4DubÏDMusc ƒSamarkan1 Ta�n4 �Ho_Chi_Mib Ðustralia/Darwê  uPerth
A 0Euc" `BrisbaŠ QLindei ‡AdelaideI fHobart À/Melbourne
Aõustralia/Sydney
A ·Broken_Hill õ Lord_Howe
Antarctica/Macquarie
Indian/Christmas õocos
Pacific/Fiji uGambier †Marquesa/ WTahit1 5uam. eSaipan eTarawa •Enderbury ‡KiritimaP fMajuro" vwajaleiU UChuuk  fPohnpe� eKosrae VNauru Foume� …Auckland  yChathamMVcMurd� †RarotongF 7Niup WorfolŸ 6ala€ ¶Port_Moresb¶BougainvillH vPitcairö PPago_ ­ VMidwaG 6Api” µGuadalcanal0 fFakaofÊ TÆ 6tapŸ gFunafuŒ6Wak“ FEfat ôWallis
Europe/London dJersey WGuern ¥Isle_of_Ma1 ðDublin
WET
CET
MET
E ] dTiraneO tAndorra UVienn TMinsk uBrussel¥ ESofi* UPraguU ðCopenhagen
Atlant�aroe
AmerUÅDanmarkshavn "ScÌEsund NŸ7 EThulf T4nö „Helsinki° M´5ham! 6Parc0Ber$qPBusin¯  ”GibraltarM UAthenû †BudapestÞ …Reykjavi.5Rom©  VaIˆ @San_� $no^ 5RigJTVaduz eVilniux ¤Luxembourg! M¦  „Chisinau UMonace ”Amsterdam aOslo
Aæ r…gyearbye¨ dWarsaw. WLisboÐ Az­VMadeiI`Buchar$S´KaliningradS UMoscoa ¤Simferopol  A¿&khÙXVolgoB tSaratov1 6Kir FSama� ð
Ulyanovsk
Asia/YekaterinbM $Om rBarnaul* ”Novosibir %To)   dkuznet …Krasnoya. EIrku RChitaW 'Ya £VladivostoŸ sKhandyg, @Sakh>: rMagadan ¥Srednekoly• sUst-Ner< ƒKamchatk UAnadyÖ0BelN©vLjubljaPPodgo±b q5jevUUSkopj@ dZagreb, •BratislavÜ�Madrid
AfS @/Ceu!UCanarç…Stockhol®dZurich\ dIstanb¤ ð Europe/Kiev
Eurðope/Uzhgorod
Eur ðZaporozhye
EST
MST
HST ±5EDT
CST6CD õ7MDT
PST8PDT
America/New_York uChicago ÿNorth_Dakota/Center  J _Salem eBeulah GDenvJ µLos_Angeles# eJuneau USitka –Metlakatl uYakutat# •Anchorage 6Nom öAdak
Pacific/Honoluln uPhoenix; FBois< ƒIndiana/ Fpoli¸  g/MarenJ wVincennê  •Tell_Cityw  ­Petersburg 6Kno§ 0 }Winamac- FVeva^ öKentucky/Louisvillã  –MonticellfDetroij†Menomine> vSt_JohnwGoose_B} fHalifa» JGlac" uMonctonÅ §Blanc-Sabl fTorontœ yThunderk WNipig4 ˆRainy_Ri‚vAtikokan vWinnipeqVReginoÆSwift_Curren0Edm� G hVancouj ¶Dawson_Creew—Fort_Nels§ HCres ¦Pangnirtun• WIqalu‹vResolutŠ¶Rankin_Inle¦ ŠCambridgpYåVwknif? VInuvi§ ‡WhitehorÏ ¥VCancuÿ VMerid5†Matamoro _Ferre–jMexicofOjinagH †Chihuahu xHermosi§0Maz!� €Bahia_Ba!aƒ WTijuaÚGNassygBarbad³ °Belize
Atlag/Bermuå —Costa_Ricž (avb pSanto_D5!¦El_SalvadocwGuatemaç Port-au-PrHx¦Tegucigalpv HJama† –MartiniquàWManagG Pa9V GCaym`PuertoÛ qMP ’‡Grand_TuUàArgentina/Buenì'ir  fCordobÂ  OSalt HTucu£ 2 L„/oj5 gSan_JuÙ 6 FJujuŒ Cº'arÔ oMendozi 'Lu5 §Rio_Galleg[ ðUshuaia
America/Arubõa
America/La_Paz fNoronh UBelem gSantar †Fortalez1 eRecife2 †Araguain! eMaceio! FBahi †Sao_Paul  ¶Campo_GrandV VCuiab6 ¦Porto_Velh8 †Boa_Vist& eManausy vEirunepU –Rio_BrancE  ð 6iag ðPunta_Arenas
Pacific/Easter
A ctU@Palm dGBogo‰ fCuracaU ÆLower_Prince  ¥Kralendijk³ •Guayaquil{ õGalapagos
Atlantic/Stanley5 fCayennç GGuya�…Asuncion0 GLimaN §outh_Georg§–ParamaribÅ  „†_of_SpaiM vAnguill…fAntigu vDominic G\d wuadelou©uMarigot² –Montserra €St_Barth¾vSt_KittdgSt_LucÙ ‰St_Thoma# V™n] ToÔ  € Vevide Caã‘s
Etc/GMT EUTC
 �niversal AZulu	 ’Greenwich DMT-0
 +
 	 4-14 6-13 2 1 7 9 8
 7
 6
 5
 h g f ( +o + +2 +F +Z +n +‚ +– +ª %+1¿ &+1f Ñ12
Factory
AfÏdAsmera …Timbuktu+÷Argentina/ComodRivadav6Atk|§Buenos_Air˜0Catü³ÕCoral_Harbourk WCordo¥gEnsenaÚ <H_WayœeodthabD ¶Indianapoli’FJujuÔuKnox_IN3 –LouisvillòWMendo£ °Ereal4  ¼Vo_Acr4 WRosar§ 
va_Isabe8 vShiproc¡@Virgþ
S@ Po� ð sia/Ashkhabad
A `Calcut ƒhongqing Uhungk 0Dacu )  l h   rKashgar3 ‚Katmandu Mg & PRangoæ  DSaig ‚Tel_Aviv2  Th2 ´Ujung_Panda’ ¦Ulan_Bator"fFaeroe PJan_Mt€
Australö 'CT @Canb¯ Wurrie 7LHI 8NSW Gorth §Queensland y àTasmania
Austrñalia/Victoria
Austr GWest ôYancowinna
Brazil/Acre …DeNoronh DEast J óCanada/Atlantic
 0Cenp   7 4ern uMountai ÄNewfoundland$ VPacifQ µSaskatchewa7 óYukon
Chile/Continental t "IsU ðuba
Egypt
Eire
Etc/UCT
Europe/BelfÚ  ñ Tiraspol
GB
GB-2 ¡GMT+0
GMT- ñ	0
Greenwich
Hongkong
Icen ø+Iran
Israel
Jamaica
Japan
Kwajalein
Libya
Mexico/BajaNorte 4Sur óGeneral
NZ
NZ-CHAT
Navajo
PRC
+•/Johnston ePonape USamoa ETruk aYap
Po½ ðPortugal
ROC
ROK
Singapore
Turkey
9PUS/Al”

 aeutian `rizona 0US/�b-India    �US/Hawaii0   p-Starke bMichigY 53US/ò  # Õ ÿUTC
Universal
W-SU
Zulu
TZif2  @     ) 3 ñ5      	ÿÿÿÿ›` 0ÕÚð @œÙ®� 1�¤µ 1ž¹� 1Ÿ„— 1È	q @ÌçK( 1Í© 1Î¢C 1Ï’4 1Ð‚% 1Ñr @ÒN@�  1¤c @‹ 1„E 1t6 1d' 1T 1MD( 13ú 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ o1]Ù  !ð      CEST CET 
CET-1 °,M3.5.0,M10 //3mD�X      @ž¦,€5@Ÿºùp 1 † 1¡šÛ 1Ëˆþ 1Ò#ô 1Òa	•@úøg 0 1ûèI 1üØI 1ýÈ+ 1þ¸+ @ÿ¨ðU1 ˜ 1‡ï 1wï @qp	 @a€ 1Pî 1@í 10Ð 1�' 1	² 0	­£/ A 
ð” 1à“  1Ù°` 1Àu 1¹’ 1©’0 1™t 1‰t 1yV 1iV 1Y8 1I8 19 1) 1"7p 1ü 1 1òp 1áû 1Ñú 1ÁÝ 1±Ü 1¡¿ 1 v@ 1!�¡ 1"Uñ 1#j½p 1$5Ó 1%JŸ 1&µ 1'*� 1'þÑP 1)
c 1)Þ³ 1*êE 1+¾• 1,Ób` 1-žw 1.³D 1/~Y 10“& 11gv` 12s ð3GX     4Rêp    5' :  @62Ìp 07 P 8èð	 08æþ A 9ûÊ 1:Æà 1;Û¬ @<¯ü€ 1=»Ž 1>�Þ 1?›p 1@oÀ 1A„�` 1BO¢ 1Cdo 1D/„ 1EDQ ¡Eó·       6Áÿÿ«  ÿÿ¹°   ðCDT CST CWT CPT 
CST6CDT,M3.2.0,M11.1.0
TZif2í  @     & 3 ðj      ÿÿÿÿi‡(¸ @¬bÂ€ @±Ó”P @²t]@ AÈ[fÐ !ÓQ 1Ê;H @Ê¼mÀ 1Ì$e0 1ÌœO 1ÑÄ 1Ò;õ 1Ó£í 1Ô× 1÷`@ 1÷ÿ}P 1ù=D 1ùãS  1úÛ; 1û§†  1üÅ© 1ý‡h 1þ¸  @ÿ§ãÀð @ —âÐ 1‡Å 1wÄ @pâ@ @`áP 15  1@Ã 1H  1 ¥ 1÷{  1
 ‡ 1
ðj  1ài 1Ù†  1ÀK 1¹h 1²¢ 1}›0 1Qê€ 1f·  11Ì 1F™ 1[‚ "&p 1;d 1]  1F 1æ? 1û( 1Ï\` 1Û
 1¯> 1zS€ 1�  1 Z5 1!o 1"CQ0 1#Nä 1$#3 1%.Æ 1&Š 1'âp 1'þ§@ 1(÷Ò 1)Þ‰ 1*×´ 1+¾k 1,·– 1-žM 1.—x 1/~/ 10wZ 11gK 12W< 13G- 14@Y( 15Õ 262° !ý· "8818æÓ0 19û® 1:Æµ 1;Û� 1<¯Ò0 1=»r 1>�´ 1?›T 1@f[ "ED1EóŒ 1G$( 1GÜ© 2Iù !³P  1JãÛ 1Kœm 1LÌ÷ 1M…‰ 1N¿N 1Owà P•öP T ÿÿ²È  ÿÿ²À_1ÇÀY¤ LMT HMT a Y5Y/[//1]D�'      	u@¤c� @‹ 1„E 1t6 1d' 1T 1MD( 13ú 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ O1]Ù}ð     *0 EEST EET 
EET-2 Ñ,M3.5.0/3,M10
 4ñD Ø }ç   ‹ Z
EST5o À              @      PTZif2	  ðX      ÿÿÿÿž¦p @Ÿºë` 1 †  1¡šÍ 1Ëˆð 2Ò#ô 0`ûà( @úøXð 1ûè; 1üØ: 1ýÈ 1þ¸ Aÿ§ÿà‹ 0—þð 1‡á 1wà @pþ` @`ýp 1Pà 1@ß 10Â 1� 1	¤ 1	­”@ 1
ð† 1à…  1Ù¢` 1Àg 1¹„ 1©ƒ0 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC °Eó¨ð     :Áÿÿ¹° ÿÿÇÀ   ÿEDT EST EWT EPT 
EST5EDT,M3.2.0,M11.1.0
„ ë ³    3 �      w@}½M« 1È“´o@Èú{Ð 1Éüï 1ÊÇè 1ËË®Ç1Ìß) 1Í¬á  1ÎÆô 1Ï�f 1Ð©y 1Ñ„` @ÒŠ­PP 1è6c@ 1èô- 1ê¹ 1êÕ`0 1ëìúç@ìµm 0 1íÏ 1î—ò 1ï°³7@ðy%€  1ñ‘æ  1òZY  1ós  1ô;Œ  1õUŸ 1ö 1÷6Ò0 1÷ÿE0 1ù  1ùáÊ 1úù9  1ûÂý0 1üÛ¾ 1ý¥‚ 1þ¼ò0 0ÿ†¶gA  ž%—@gé€ 1YW0I A aÞ 1+¢ 1C0 1Õ0 1$E  1î	  1
x  1
Ï<  1çý 1±Á 1É10 1’õ0 1ªd  1t(  1‹˜  1U\  1n 17á 1OP0 10 1 “ 1úH  1p£ 1Û{  1ô< 1¾  1ÕpP 1Ÿ40 "¶0 1€g  1 —×  1!a›  1"z\ 1#D  1$b' 1%%S0 "&<w1'‡  1(öp 1(çº  1* { 1*Ê? 1+á¯@ 1,«s0 "-Âç1.Œ¦  1/ ÿ@0kÐ! 11õ 12Jî 13_× 14*Ð 15?¹ 16
² 17(Ö@7óÏP@ 19¸ 19Ó± 1:èš 1;³“ 1<È| 1=“u 1>¨^ 1?sW 1@‘z` 1A\s` 1Bq\ 1C<U 1DQ> 1Eý0 1F1  1Fàj 1H 1H·0 1Iðä 1J�¹  1KÚp 1La½  1L‰X  1L¤ú  1Su8 1S¬‰  1SÚ¼0 ð T$‚P/ _ð
  U    *0    	LMT EES àT 
EET-2
TZif2'  @     & 3 ð‘      ÿÿÿÿWÑ
Ü A›&³‘ 0Ö @œÏ0  1�¤Ã 1žœ� 1Ÿ— @ …º   1¡vü 1¢eœ 1£{È 1¤N¸ 1¥?û 1¦%` 1§'Æ 2¨*, !ëø( 2ª Ó !Õ 1«éð 1¬Çl 1­ÉÒ 1®§N 1¯ y0 1°‡0 1±’Ð 1²pL 1³r² 1´P. 1µIZ( 1¶0 1·2v 1¸ò 2¹X !ïÔ 1ºé 0 1»Øñ 1¼ÛW 1½¸Ó 1¾±þ( 1¿˜µ 1À› 1Áx— 1Âzý 1ÃXy 1ÄQ¤0 1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 1ÔIà 1Õ! 1ÖN¬ 1×,( 2Ø.Ž !ù• 2Úp !ëì 1Ûå8 1ÜËÎ 1ÝÄù 1Þ´ê 1ß® 1à”Ì 1árH 1âkt 1ãR* 1äT� 1å2 1æ=­  1ç) 1èT 1èû 1éýq 1êÚí 1ëÝS 1ìºÏ 1í³ú0 1îš± 1ï�g 1ðŸ} 1ñaI 1ò_ 1óJf 1ô_A 1õ!  1ö?# 1÷ ï 1ø 1øàÑ 1ùþç 1úÀ³ 1ûè 1ü{« @ýÇ»p(@pÆ  1)X 1P¨ 1	: 20Š !é 2	l !Èþ 1
ðN @² H 1Ð0 1‘ü 1° 1qÞ 1™. 1QÀ 1y 11¢ 1Xò @#ë�P 18Æ 1Í 2¨ !ã¯ 1øŠ 1Ã‘ @á§8 1¬® 1Á‰ 1Œ� 1¡k 1 lr 1!�M 1"LT 1#a/ 1$,6 1%JKX 1& 1'*- 1'õ4 2)
 !Õ 1*éñ 1+´ø 1,ÉÓ 1-”Ú 1.©µ 1/t¼ 10‰— …1]Ù / </ ð	ÿÿú$  ÿÿú     a!   A!    ¼ðDMT IST BST GMT 
IST-1GMT0,M10.5.0,M3 //1ØD ž  	 ß  -00 
<-00>0q D�Ÿ      1@]	Ë1›&­i"›Ö™IƒÀÿÿ®§N ÿÿÿÿ¯  y ÿÿÿÿ°‡0  1±’Ð 1²pL 1³r² 1´P. 1µIZ( 1¶0 1·2v 1¸ò 2¹X !ïÔ 1ºé 0 1»Øñ 1¼ÛW 1½¸Ó 1¾±þ( 1¿˜µ 1À› 1Áx— 1Âzý 1ÃXy 1ÄQ¤0 1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 @Ê&�Ð 1Ê—Y 1ËÑ 1Ìw; 1Í±  @Î`X( 1Ï�â 1Ðn^ 1Ñr 1Ñû2 1Òiþh 1Óc)` 1ÔIà 1Õ! 1ÕBý8 1Õßà0 1ÖN¬  1Öþ  1Ø.Ž 1Øù• 2Úp !ëì 1Ûå( 1ÜËÎ 1ÝÄù 1Þ´ê 1ß® 1à”Ì 1árH 1âkt 1ãR* 1äT� 1å2 1æ=­  1ç) 1èT 1èû 1éýq 1êÚí 1ëÝS 1ìºÏ 1í³ú0 1îš± 1ï�g 1ðŸ} 1ñaI 1ò_ 1óJf 1ô_A 1õ!  1ö?# 1÷ ï 1ø 1øàÑ 1ùþç 1úÀ³ "ûè81ü{« ÀýÇ»p    pÆ  1)X 1P¨ 1	: 20Š !é 2	l !Èþ 1
ðN @² H 1Ð0 1‘ü 1° 1qÞ 1™. 1QÀ 1y 11¢ 1Xò @#ë�P 18Æ 1Í 2¨ !ã¯ 1øŠ 1Ã‘ @á§8 1¬® 1Á‰ 1Œ� 1¡k 1 lr 1!�M 1"LT 1#a/ 1$,6 1%JKX 1& 1'*- 1'õ4 2)
 !Õ 1*éñ 1+´ø 1,ÉÓ 1-”Ú 1.©µ 1/t¼ 10‰— o1]Ù $  : @ 1  @ÿÿÿµ[@ ð       LMT BST G ð
DST 
GMT0BST,M3.5.0/1,M10
 a
TZif2B  
@     % 3 �Ÿ      @]	Ë 1›&­ï"›Ö1œÏ0 1�¤Ã 1žœ� 1Ÿ— 1 …º71¡vü 1¢eœ 1£{È 1¤N¸ 1¥?û 1¦%` 1§'Æ 2¨*, !ëø( 2ª Ó !Õ 1«éð 1¬Çl 1­ÉÒ 1®§N /¯ ?ÿ£ÀÿárH ÿÿÿÿâkt� ÿÿÿÿãR*  1äT� 1å2 1æ=­  1ç) 1èT 1èû 1éýq 1êÚí 1ëÝS 1ìºÏ 1í³ú0 1îš± 1ï�g 1ðŸ} 1ñaI 1ò_ 1óJf 1ô_A 1õ!  1ö?# 1÷ ï 1ø 1øàÑ 1ùþç 1úÀ³ 1ûè 1ü{« ÀýÇ»p    pÆ  1)X 1P¨ 1	: 20Š !é 2	l !Èþ 1
ðN @² H 1Ð0 1‘ü 1° 1qÞ 1™. 1QÀ 1y 11¢ 1Xò @#ë�P 18Æ 1Í 2¨ !ã¯ 1øŠ 1Ã‘ @á§8 1¬® 1Á‰ 1Œ� 1¡k 1 lr 1!�M 1"LT 1#a/ 1$,6 1%JKX 1& 1'*- 1'õ4 2)
 !Õ 1*éñ 1+´ø 1,ÉÓ 1-”Ú 1.©µ 1/t¼ 10‰— o1]Ù $  : @ 1  @ÿÿÿµ[@ ð       LMT BST G ð
DST 
GMT0BST,M3.5.0/1,M10
 a
TZif2B  
@     % 3 œ ˆ ƒ o ÿÿpÿÿs`  H®_HST10,D�E      R@…ic� AÊM10 !Û“ @ËKqx 1Ò Þ  @Ók×€ @Ô“X¸ @ÕB°8 1Ös: 1×>A 2Ø.2 !ù9 2Ú !Ù 1Ûíö 1Ü¸ý 1ÝÍØ 1Þ¢P 1ß¶õ 1à�ü @á–É(h 1âOi 1ãv« 1ä/K @å_Ç¨  1æ- 1ç?© 1çøIX 1é‹ 1éØ+ 1êÿm 1ë¸ 1ìßO 1í—ï 1îÈl` 1ïwÑ 1ð¨N 1ñW³ 1òˆ0 1ó@Ðp 1ôh 1õ ² 1öGô 1÷%~ 1øa 1ù` 1ùõC 1úåB 1ûÞ_€ 1üÎ^` ðý¾A¨ÿÿÿÿþ®@¸ÿÿÿÿÿ@ž#¨  0Ž"¸ 1~ 1n 1]ç 1Mæ @G(( @78 1&æ 1ƒ= 1	È 1	öÇ 1
æª 1Ö© 1ÆŒ 1›9 ¯ol¨ ,@  k
‘ ðp€   ~�  wˆ € LMT HK S ðWT JST 
HKT-8
TZif2<  @     & 3 0D  Š   ÿÿÿÿ‹`ƒ  @œ‘  @�Ñˆ� @žrQ€ 1ŸÕ( 1 S…  1¡¶6  1¤<'  1¤¹t  1ÆM  @Ç=' 8 @ÇÚ° 1É&C` 1ÉÃ& 1Ë% 1Ë¬B 1ÌÜÍ 1ÍŒ$ 1Î¼¯ 1Ïl 1Ðœ‘ 1ÑKè 1Ò…­ 1Ó+Ê 1Ôe� 1Õ9Ñ( 1ÖEq 1×³ 1Ø%S 1Øù• 2Úp !Ùw 1Ûå  1Ü¹Y 1ÝÎ4 1Þ¢u 1ß® 1à‚W 1á�ø 1âb9 1ãmÚ 1äB 1åM¼ 1æ!ý 1ç6Ø 1è 1éº 1éêü 1êöœ 1ëÊÞ 1ìÖ~ 1íªÀ 1î¶` 1ïŠ¢ "ð–81ñj„ 1ò_ 1óS ( 1ô_A 1õ3‚ 1ö?# 1÷d 1ø 1øóF 1ùþç 1úÓ( 1ûè Oü¼E ú-€ÿÿë`˜¡  ÿÿñð  øÿ+00 -01 GMT 
GMT0ñD�É      ‘@šl}È @ÒÛÈ‹ @»¢H @t-@ AŽ@0 !í: 1Ug( 1EJh17ì 1- 1( v 1(Û� 1)Ëœ "*¾¸1+¬Ð` 1,ŸVX1-Ž  1.€‰0 1/o7  10a½  11Pj  12Bð  132ï 14%u 15#0 "6¸16õV  17çÜ  18ÖŠ  19ÉP 1:¹ 1;«• 1<šB0 1=ŒÈ0 1>{v  1?mü  1@\©  1AO/  1B?. 1C1´ 1GâÉ0 1HÕO0 1IÅN 1J·Ô 1K¦�0 1L™0 1M‡µ  1Nz;  1Ohè  1P[n  1QKm 1R=ó 1S,¡0 1T'0 1UÔ  1V Z  1Vï  1WáŽ  1XÑ� 1YÄ 1Z²À0 1[¥F0 1\“ô  1]†z  1^u'  1_g­  1`W¬ 1aJ2 1b8à0 1c+f0 1d  1e™  1eûG  1fíÍ  1gÝÌ 1hÐR 1i¾ÿ0 1j±…0 1k 3  1l’¹  1m�f  1nsì  1obš  1pU   1qE 1r7¥ 1s&R0 1tØ0 1u†  1uú  1vè¹  1wÛ?  1xË> 1y½Ä 1z¬r0 1{žø0 1|�¥  1}€+  1~nÙ  1a_  1€Q^ 1�Cä 1‚2‘0 1ƒ%0 1„Å  1…K  1…ôø  1†ç~  1‡×} 1ˆÊ 1‰¸±0 1Š«70 1‹™ä  1ŒŒj  1�{  ðŽmž8    �]�H    �°P#8    ‘>ÐÈ @’1V¸ @“ H 1”Š  1•7  1•ó½  1–ã¼ 1—ÖB 1˜Äð0 1™·v0 1š¦#  1›˜©  1œ‡W  1�yÝ  1žiÜ 1Ÿ\b 1 K0 1¡=•0 1¢,C  1£É  1¤v  1¤ÿü  1¥ïû 1¦â� 1§Ñ/0 1¨Ãµ0 1©²b  1ª¤è  1«“–  1¬†  1­tÉ  1®gO  1¯WN 1°IÔ 1±8‚0 1²+0 1³µ  1´;  1´úé  1µío  1¶Ýn 1·Ïô 1¸¾¡0 1¹±'0 1ºŸÕ  1»’[  1¼�  1½sŽ  1¾c� 1¿V 1ÀDÁ0 1Á7G0 1Â%ô  1Ãz  1Ä(  1Äù®  1Åé­ 1ÆÜ3 1ÇÊà0 1È½f0 1É¬  1Êžš  1Ë�G  1ÌÍ  1ÍoÌ 1ÎbR 1ÏQ 0 1ÐC†0 1Ñ23  1Ò$¹  1Óg  1Ôí  1Ôõì 1Õèr 1Ö×0 1×É¥0 1Ø¸S  1ÙªÙ  1Ú™†  1ÛŒ  1Ü| 1Ýn‘ ¿Þ]?H ¯1  0õ ð"08   18   FP  8@   ?HLMT TMT +0330 +05 +04 Q30 
< ð>-3:30<+0430>,J79/24,J263/24
TZif3² @     & 3 ðd      ÿÿÿÿV¶Âú @ž0Eˆ AÈYÏ  !ú¦ @É8œ€ 1Ìåë 1Í¬þ 1ÎÇ 1Ï�ƒ 1Ð©¤ 1Ñ„} 1ÒŠ×0 1Óe° 1Ôl 1×Z0 1×ßX 1Ø/Ã 1Ùc 2Ú÷ !ëÐ 1Û´4 1Ü¹= 1Ýà� 1Þ´Î8 1ß¤¿ 1à‹v "áV€ 1â¾f 1ã6_ 1äžH 1åA 1ætð 1çÒ 2è&­  èzGP |‹à	 @ý°Ð @	öê` 1
¦3 1éü 1![ 1úÆ 1Žn 1¾ø@ 1w|0 1Ìÿ @`™PH 1 ‚± 1!Iµ  1"^ž0 1# ]  1$Z0  1% ? 1&í  1&Öæ0 1'ëÏ 1(À  1)Ôì0 1*©  1+»e  1,‰ 1-›G 1._©0 1/{) 10HÅ  11H– 12<n  131³P 14þ  15• 15ñ¦  @7€È @7Ïp 18ö_ 19ÜùH 1:Ðí ";® 1<£  1= ²H 1>ƒ‚ 1?|Ÿ0 1@s6 1AP¤  0BL�W A CHO 1D,q @Eöð	 0FS A Fìc 1Gì5 1Hçõ0 1IÌ 1J¾œ  1K«ù 1LŒ	 1M•° 1N‡›0 1Ot÷ 1P^B  wQTÙ€   6@  !™   øG *0    G A JMT IDT IS ðDT 
IST-2IDT,M3.4.4/26,M10.5.0
TZif2   @     ( PTZif2	  ð      ÿÿÿÿi‡#~ @“´þ3 @�p A	¤` 0­”ð 1
ð† 1à…  @Ù¢à 1Àg 1¹„ 1©ƒ0 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í `  aÿÿ¸   ÿÿÿ¹° ÿÿÇÀLMT KMT EST EDT 
EST5
  ×  O    3 �	      K@eÂ¤p 2×> 0íYð 1Øøú 1ÙÍ; 2Û  !­ 1Üæâ cÝŒÿð 0  ƒY ° Œ   ~� Ø ïJDT JST 
JST-9Õ D@    ½ @~6  @Áí5Ð @Éê
` 1ÏF�µ @ÿ†P-Ñ,v@  œÒ š°nAŒ  À ÐÿÿW@   ¨À Ì ÿ+11 +10 +09 -12 +12 
<+12>-12Û D Ã @¡òÁ$ 1Ý»±1Þ#­Û 1áxÒ @áçeà  1å/?À1å©Ì 1ëNÆ›1’B«1÷1ú+ù 1ê*  1Û_  1Ì¯ 1½ä 1´z 1Ÿ0 1“@ 1‚î  1 pJ 1!a~  1"RÏ 1#D 1$4@ 1%%70 1&@· 12Nñ 13D60 145j0 0P�™¢P QTÙ€	 CRi´€f v j�  \,     	    ¹CZ`CET EE^?ET-¯E�5      	‡1›Ÿ1›ÕÚz@œÙ®� 1�¤µ 1ž¹� 1Ÿ„— 1È	q 1ÌçKÏ1Í© 1Î¢C 1Ï’4 1Ð‚% 1Ñr @ÒN@�û 1¤c @‹ 1„E 1t6 1d' 1T 1MD( 13ú 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ o1]Ù  !P  `0 M\MXPMET-1 °,M3.5.0,M10 //3D ä û€ÿÿ��  MgOMST7o DX‹t1ž¦:œÐŸ»€ÿÿÿÿ †�ÿð ÿÿÿ¡šé€ÿÿÿÿË‰� AÒ#ôp 0a  @úøu 1ûèX 1üØW 1ýÈ: 1þ¸9 Aÿ¨  0˜ 0‡þ A wý @q€ @a� 1Pü 1@û 10Þ 1�5 1	À 1	­±@ 1
ð¢ 1à¡  0Ù¿G A Àƒ 1¹¡ 1© 0 1™ƒ 1‰‚ 1ye 1id 1YG 1IF 19) 1)( 1"Ep 1	
 1' 1ò&p 1â	 1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 1#jÌp 1$5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾£ 1,Óp` 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 18÷p 18ç 19ûÙ 1:Æî 1;Û» 1<°
p 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ °EóÅ     :Áÿÿ�� ÿÿ«    ñMDT MST MWT MPT 
MST7MDT,M3.2.0,M11.1.0
TZif2Ö  
@     % 3 �`      w@A·L¨ @°´²è @±Q‡X @²xåh @³Cå` 1´XÇ 1µ#Ç 1¶8© 1·© 1¸‹ @¸ìÅà0 1¹øm 1ºÌ§ 1»ØO 1¼ãè 1½®öp 1¾ÃÊ 1¿ŽØ 1À£¬ 1Ánº 1ÂƒŽ 1ÃNœ 1Äcp 1Å.~ 1ÆL�€ 1Ç` 1È,o 1È÷}p @ÒÚš@A	ýà !¬¥ 0
ï¥A žü 1ØÁ 1~Þ 1¸£ 1^À 1˜… 1>¢ 1xg 1„ 2XI !þf 28+ !çƒh 2!H !Çe 2* !§G 1á 1‡) 1Àî 1g 1 Ð 1 Fí 1!€² 1"0	h 1#iÎ 1$ë 1%.  1&B 1'ã 1'â$ 1(íÅ 1)Â 1*Í§ 1+«# 1,­‰ 1-‹ 1.�k 1/jç 10mM 11JÉ 12ViH 13*« 146K 15
� 16- 16ó© 17ö 18Ó‹ 19Õñ 1:³m 1;¿8 1<“O 1=žð 1>s1 1?~Ò 1@\N 1A^´ 1B<0 1C>– 1D 2Ex !ûô �FþZ` / /@  £Øtà¯È  ¡¸ 	  ¨À @¶Ð � LMT NZS 
 @DT 
 P-12NZ09.54//3D�E      »@A·D„ @ÒÚ–¼¿ ;À ¸£à    ^À�à    ˜… 1>¢ 1xg 1„ 2XI !þf 28+ 0çƒ`@ 2!H !Çe 2* !§G 1á 1‡) 1Àî 1g 1 Ð 1 Fí 1!€² 1"0	h 1#iÎ 1$ë 1%.  1&B 1'ã 1'â$ 1(íÅ 1)Â 1*Í§ 1+«# 1,­‰ 1-‹ 1.�k 1/jç 10mM 11JÉ 12ViH 13*« 146K 15
� 16- 16ó© 17ö 18Ó‹ 19Õñ 1:³m 1;¿8 1<“O 1=žð 1>s1 1?~Ò 1@\N 1A^´ 1B<0 1C>– 1D 2Ex !ûô FþZ` /@  «üáð¬D   Á\
  ³L LMT +1215 +134 ñ245 
<+1245>-12:45< �>,M9.5.0/ ð,M4.1.0/3:45
TZif2]  @     & 3 ða      ÿÿÿÿ^° @ž¦:� @Ÿ»€ 1 † 1¡šé 1¢eþ @£„   1¤Eà 1¤�¦  1Ë‰ @Ò#ôp  1Òa( 1÷/v 1ø(” 1ùX 1úv @úøu0 1ûèX 1üØW 1ýÈ: 1þ¸9 0ÿ¨ß P  ˜	 0‡þ A wý @q€ @a� 1Pü 1@û 10Þ 1�5 1	À 1	­±@ 1
ð¢ 1à¡  0Ù¿G A Àƒ 1¹¡ 1© 0 1™ƒ 1‰‚ 1ye 1id 1YG 1IF 19) 1)( 1"Ep 1	
 1' 1ò&p 1â	 1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 1#jÌp 1$5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾£ 1,Óp` 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 18÷p 18ç 19ûÙ 1:Æî 1;Û» 1<°
p 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ cEóÅ #	   4ñÿÿ�”  ÿÿ« ÿÿ��   *ðMDT MST MWT MPT 
MST7MDT,M3.2.0,M11D�      Š@~6C) 1 —¢Ú@¡yð 1ÈY^ 1É	ùâ1ÉÓ½¢1ËŠ  1Ë|@ 1Ò;> 1Ó‹{0 1ÔB­ 1ÕE"  1ÖL¿ 1×<¿ 1ØfP 1Ùò0 @ÙA|ðË@ºR  1i›²@ ~„  1!I} 1"g¡  1#)_ 1$Gƒ 1%|21&'e 1&ò^ 1(G 6(Ò@òáð  q×    ~�  p€ÿ LMT CDT CST 
CST-8
TZif2  @     ) 3 ðX      ÿÿÿÿž¦H  @Ÿ»� 1 †* 1¡š÷ 1Ë‰ @Ò#ôp  1Òa&8 @úøƒ  1ûèf 1üØe 1ýÈH 1þ¸G @ÿ¨*˜ @ ˜)  1ˆ 1x @q(� @a'  1Q
 1A	 10ì 1�C 1	Î 1	­¿@ 1
ð° 1à¯  1ÙÍ` 1À‘ 1¹¯ 1©®0 1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 1"Sp 1	 15 1ò4p 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç 1:Æü 1;ÛÉ 1<°p 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm °EóÓ      :Áÿÿ�€ ÿÿ��   ÿPDT PST PWT PPT 
PST8PDT,M3.2.0,M11.1.0·D�R      w@V¶ÐP @™¨*Ð A›` 0ÕÚð 1œÙ®¿1�¤µ 1ž¹� 1Ÿ„— @ š¶ ( 1¡e½ 1¦}|@ 1ÈvÞ¿1ÌçK 1Í©0 1Î¢C 1Ï’4 1Ð„º8 2Ñ•’!Š»@ 1Óbÿ 1ÔK#8 1Õ^­0 1Ö)´ 1×, 1Ø	– 1ÙÁ( 1Ùéx 1èTÒX @èñ´€  1éá¥ 1êÑ– 1ì–  1ìº³ 1íª¤ 1îš• 1ïÔZ 1ðzw 1ñ´< 1òZY 1ó” 1ô:; 1õ}:X 0ö~P ¤U€	 0‹ A „7 1t( 1d 1T
 1M6( 13ì 1#Ý 1Î 2¿ !ó° 1ã¡ 1Ó’ 1Ãƒ 1¼¯H !¬æA œ‘ 1Œ‚ 1|s 1 ld 1!\U 1"LT?1#<E 1$,6 1%' 1& 1'C71'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ p1]Ù 0  1@  °ß  °©ð      *0    /W3�EST CET E	  EE=qET-1CES™5™0.5.0/3›D‹›³@^= 1’æŽ[1›Km1›þÇ 1œœí à�ÉƒpÿÿÿÿžrpÿÿàÿÿŸª¶ðÿÿÿÿ _Tp 1¡‹ê 1¢AÙ 1£no 1¤#( 1¥O¢ 1ªï 1ªôŽ 1­É§ 1®§# 1¯ O  1°‡ 1±‰k 1²p" 1³rˆ 1´P 1·2L 2¸È !ÿ¹ 1¹ïª 1¼È·@ 1½¸¨ 1¾Ÿ_ 1¿˜Š 1Àšð 1Áxl 1Âh] 1ÃXN 1Ä?0 1Å80 1Æ:– 1ÇX¬ 1ÇÙß 2É/ !ñ  1Êâb( 2ËµR 0ì£à(2Ì€K Ü1Í•4  @ÍÃK`  1Îr¢  1ÎÅ¿H 1Ïu  1Ï¬g 2ÐR„ !¥¡  1ÑTø  1ÑŒI 2Ò2f !…ƒ  1ÓYÄ  1ÔIµ @Õ9Ñ h 1Ö)Â 1×³ 2Ø	¤ !ù• 1Ùé† 1Ü¹Y @Ý²„ 8 1Þ¢u 1ß’f 1à‚W 1árH 1âb9 1ãR* 1äB 1å2 1æ!ý 1ç)X 2è !û 1éêü 1êÚí 1ëÊÞ 1ìºÏ 1íªÀ 1îš± 1ïŠ¢ 1ðz“ 1ñj„ 1òc¯h 1óS  1ôC‘ 1õ3‚ 1ö#s 1÷d 2øU  óF     «* A › 1‹ @„7€	 1t( 1d @T� 1Cû 13ú 1#ë 1Ü 2Í !ó¾ 1ã½p 1Ó  1Ã‘ @¼½P 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ 1]Ù  H : & ! Pÿÿ÷cG@ á 	       €LMT WES   PMT CE €ST 
WET0 Ð,M3.5.0/1,M10
 a
TZif2S  
@     % 3 @)   © l@tÎð @ÃUI€ 1ÒTY 1Ó‹{ 2ÔB­Ô0E"   1ÖL¿ 1×<¿ 1Øf1Ùò0 1Ùç™  1Úÿ&  1ÛÈÍ  "ÜàX 1Ýª   1Þrs  1ßµd  1à|… 1á–—  1â]¸P 1ãwË  1ä>ì  "å0ü1æ!q 1ç¥  1è¤0 1èóØ@ 1éãØ  1êÕ  1ëÅ  1ì¶?  1í÷ü  "î˜¼1ïÙ/  @ðyøpH0üV A íŠ 1	Ý‰t@
Î½ð 1Û¡ ATÝp^/ @  qè=  p€� ~�   ~�ÿCST JST CDT 
CST-8ÿD�      ÿ@‹×ðx×@’æø 1ÒC'1×e�71×î�31Øøú 1ÙÍ-û"Ú×Û1Û­ 1Üæâ8 1ÝŒñ 1âO) 1äk·X @åh` 1æbp @çLè 1è/p ðèçôhÿÿÿÿêRxÿÿÿÿêÇÖ�hÿÿÿÿëï4x 1ì§¸ 1íÏ 1î‡š Àð5qx     £`� 1!ng 1"ƒB ƒ#NI� '  @  w9 ñwˆ   ~�   Œ  ð  …˜LMT KST JST KDT 
KST-9
TZif2<  @     & 3  Ž    ÷ @~6S£ 1†ƒ… @ºgN� @À
ä` 1Ê³å @Ë‘_ @ÒHmðh ð‘õ  a]  a]â  bpâ  g â ¡g    ix î p  p€ î pSMT +07  20 3 ï9 +08 
<+08>-8 D�s      Ð @V¶ÈØ @�‹õ˜ 1›ð @›Õ¾Ð @¢ecà @£{‚P 1¤N€  1¥?´  1¦%'  1§' 1ª((  1ªáý 1«ù‰  1¬Ã1@ 1È�? 1É 1ÉJõ0 1ÊÎ€ 1ËË® 1Òk	 1Ó¢9 1ÔC 1ÕL@ 1Ö){` 1×+ï 1Ø	] 1Ù—0 1Ùé? 1Úë³  1ÛÒ\@ 1ÜÔÐ  1Ý²> 1ñô¹ 1ôbï 1õh @ö8ÐÔ@n“p 29š  ûu A 	| 1	ÐË 1
ù^ @±þ€ 1Ù@ 1¤U 1¦­ 1„7 @øP( 1‰° @Ü°à 1æÐ`1Æï 1›1  1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 1%
 1&û 1''P 1'õ 1(å	 1)Ôú 1*Äë 1+´Ü 1,¤Í 1-‹ƒ@ 1.„¯ 1/t  10d‘ 11]¼  12r— 13=ž 14Ry 15€ 262[ !ýb 18x@ 18ÝD 19ûZ 1:½& 1;Û< 1<¦C 1=» 1>†% 1?›  1@f 1A„8 1BEé 1Ccþ 1D%Ë 1ECà 1FÉ¿@G#ßx1Gîæ 2IÁ !ÎÈ 1Jã£ 1K®ª 1LÌ¿8 1M�Ý 1N¬¡ 1Onn  1PŒƒ 1QWŠ 1Rle 1S8¾  1TLG 1UN 2V>ž !÷0 WÏ.P ?/ , P  ( hÃð*0      *0   8@·pIMT EES  ÀQ3 +04°O3>-3°D ˜  ß	 ¿  UTC 
UTC0o ÿ#ÀN      &ÿÿÿÁÿV¶ÀÇÿÿÿÿ›_ @�>òy Až*îù 0÷9i 1Ÿ„W @ Ølé A¡ 9€ 0<¦@ A¤mÀ 0=2° 2¥h != @§EP Àµ¤`    '§Ð @Ü@ AÛP 0úÀ 1ê  1ÛC  1Ì“ @¼ ð  1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 1%
 1&û @''p` 1'õ @(å€ 2)x¿ !Ôú 1*Äë 1+´Ü 1,¤Í 1-”¾ 1.„¯ 1/t  10d‘ 11]¼h 12r— 13=ž 14Ry 15€ 262[ !ýb 18x@ 18ÝD 19ûZ 1:½& 1;Û< 1<¦C 1=» 1>†% 1?›  1@f 1A„8 1BEé 1Ccþ 1D%Ë 1ECà 1F­ 1G#Â 1GîÉ 2I¤ !Î« 1Jã† 1K®� 1LÌ£8 1MŽo ÿTL`  	 + `
  #9šà#9   1‡  #w ð?—  8@  *0   FP      ! p LMT M PST MD ðSD MSK +05 EET EEST 
MSK-3
TZif2p  @     & 3 �'      	0 @¤c� @‹ 1„E 1t6 1d' 1T 1MD( 13ú 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ o1]Ù   P€   WÖ�WET 
WET0 Ð,M3.5.0/1,M10
 îD …  	 ð|  UTC 
UTC0
# ISO 3166 alpha-2 country codes
#
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
^ ðFrom Paul Eggert (20158 I02): úcontains a table of two-letterº €.  Colum. àre
# separated� €a singleH ð>.  Lines beginning with '#' are comments.
# All text uses UTF-8 encoding.  Th/ v  œ ha !leH ±as follows:W51. ~/-1€¤, current T)  5 AN9761÷8-11-06).  See: Updates ond  
#? ö https://isotc.iso.org/livelink	 òOpen/16944257
# 2.â ðusual English name for  5“d region,o ðchosen so that alphabð#etic sorting of subsets produces helpful lists.
#  ñThis is not the same as �English n !in àISO 3166 tableG b
# The  J  ƒ Àed by countr Qde.
#) &is* €intendedp ñan aid for users, to²  v ñm select time
# zone data appropriate< ðtheir practical needs.  It›  å u  
#b ðtake or endorse any position on legal! òterritorial claimû ã �-
#code	*$ofú $, 7 €y, area,K ðsubdivision
AD	A{ ðTra
AE	United Arab Emirates
AF	Afghanistan
AG	Antigua & Barbuda
AI	Anguilla
AL	Albania
AM	Armenia
AO" `ola
AQA !ar"ð
AR	Argentina
AS	Samoa (American)
AT	AustrO U  al ðW	Aruba
AX	Ã…land Is ð	s
AZ	Azerbaijan
BA	Bosni° €Herzegovm 0BB	¿ ð'ados
BD	Bangladesh
BE	Belgium
BF	Burkina Faso
BG	Bulga� ÐBH	Bahrain
BI' °undi
BJ	Ben @L	St"ð thelemy
BM	Berm0ð"BN	Brunei
BO	Bolivia
BQ	Caribbean NL
BR	Brazil
BSj °amas
BT	Bhu‰“BV	Bouvetø ð 
BW	Botswana
BYÃ parus
BZ óize
CA	Canada
CC	Cocos (Keeling)E ñs
CD	Congo (Dem. Rep.)
CF	Central Af™ 4
CG- ( �H	SwitzerŠö
CI	CÃ´te d'Ivoire
CK	Cookn ðL	Chile
CM	Cameroon
CN ðna
CO	Colombia
CR	Costa Rica
CU	CýóCV	Cape Verde
CW	CuraÃ§ao
CX	Christmaso p
CY	Cyp€CZ	CzechÇ ð!ublic
DE	Germany
DJ	Djibouti
DK	Denmark
DM	Domin€ %DO nD `Z	AlgeðEC	Ecuador
EE	EstoðEG	Egypt
EH	Western Sahara
ER	Eritrea
ES	SpWñET	Ethiopia
FI	FinWð FJ	Fiji
FK	Falk â Ðs
FM	Micrones5 vO	Faroe ñR	France
GA	Gabon
GB	Britain (UK)
GD	Gre'Gðorgia
GF	French GuibñGG	Guernsey
GH	Gh àI	Gibraltar
GLI e´ QGM	GaÉóGN	Guinea
GP	Guadeloupe
GQ	Equaä# RD  ° ¡S	South Ge’   &š  …Sandwichè  GT[ �temala
GU Cm
GWz à-Bissau
GY	Guy¹ ôHK	Hong Kong
HM	HearQ¤ & McDonal @s
HN0 óduras
HR	Croatia
HT	Haiti
HU	Hungary
ID	Ind‘`IE	Ire²ð
IL	Israel
IM	Isle5`Man
IN1 Qia
IOš �Indian OcTÀy
IQ	Iraq
IR sn
IS	Ic_ àT	Italy
JE	Jer§pJM	JamaÀñJO	Jordan
JP	Japan
KE	Kenya
KG	Kyrgyzð KH™ðbodia
KI	Kiribati
KM	Comoros
KN	St ôKitts & Nevis
KP	Korea (North)
KR 1Sou ð½W	Kuwait
KY	Cayman Islands
KZ	Kazakhstan
LA	Laos
LB	Lebanon
LC	St Lucia
LI	Liechtenstein
LK	Sri Lanka
LR	Liberia
LS	Lesotho
LT	Lithuania
LU	Luxembourg
LV	Latvia
LY	Libya
MA	Morocco
MC	Monaco
MD	Moldova
ME õ(tenegro
MF	St Martin (French)
MG	Madagascar
MH	Marshallõ 1MK	,p Macedoš ðML	Mali
MM	Myanmar (Burma)
MNt ògolia
MO	Macau
MPC 0ern� Fiana_ Qs ñtinique
MR	Mauritah SM  tserrat
MTv Sta
MU% `ius
MV €dives
MW ñawi
MX	Mexico
MY  ys‘ �Z	Mozambl óNA	Namibia
NC	New Calâ °NE	Niger
NF» Cfolk² 2
NG  7 òI	Nicaragua
NL	Nether, NO9 ñway
NP	Nepal
NR	Nauru
NU	Niue
NZw 0Zea4 ò
OM	Oman
PA	Panama
PE	Peru
PF	±p PolyneÍ �PG	Papua º ñGuinea
PH	Philippines
PK	Paki®QPL	Pog  PM	 Pierre & Mðlon
PN	Pitcairn
PR	Puerto REðPS	Palestine
PT	Portugal
PW rau
PY	P	ñy
QA	Qatar
RE	RÃ©union
RO	Rom×`RS	Serx`RU	RusÎ ðRW	Rwanda
SA	Saudi Ara$ –SB	Solomoˆð!SC	Seychelles
SD	Sudan
SE	Sweden
SG	Singapore
SHð ð Helena
SI	Slove_ðSJ	Svalbard & Ja�y> K$ �akia
SL	S*Áa Leone
SM	S) �rino
SN	S_ al
SO	Somaøñ SR	Suriname
SS	Y £ �T	Sao Tom{ðPrincipe
SV	El Salvador
SX² ÀMaarten (Dut«PSY	Sy1pSZ	Eswa4p (SwaziØ�)
TC	TurkîõCaicos Is
TD	Chad
TC� ð ern & Antarctic–ñds
TG	Togo
TH	ThaW ƒ
TJ	TajiGñTK	Tokelau
TL	East Timor
TM} 2menppTN	TuniÜ±TO	Tonga
TR$ Ðey
TT	Trinida{@Tobav ñV	Tuvalu
TW	Taiwan
TZ	Tanz8pUA	Ukra„QUG	Ug/óUM	US minor outlying i±óUS	United States
UY	Uruguay
UZ	UzbeØ ñVA	Vatican City
VÊõVincent
VE	Venezuela
VG	Virgi�Ž (UK)
VI ðS)
VN	Vietnam
VU	Vanuatu
WF	Walli¬ðFutuna
WS	Samoa (western)
YE	Yemen
Yûƒyotte
ZAQ°Africa
ZM	ZÒðBa
ZW	Zimbabwe
# Allowance for leap seconds added to each time zone file.

# This  þ	 is in the public domain& `generajQautomK�lly from@ JdataL -L p
# NIST§ 1matª -ª `.list ‰ ñ, which can be copied] à
# <ftp://ftp.}à.gov/pub/time/þ.leap-seconds.list>
# or <ftp://ftp.boulder.nist.gov/pub/time/= ÿ`.
# The NIST file is used instead of its IERS upstream counterpart
# <https://hpiers.obspm.fr/iers/bul/bulc/ntp‚  ü

# because under US law t– ñpublic domain
# whereas) ž  ¿ ñ's copyright and license statusÞ `nclearú ý For more about `, plea> $ee)ÁTP Timescaleb bLeap S’
ñ
www.eecis.udel.edu/~millsƒ.html>.
W ‘rules for…  áÁ are specifi“  Annex 1 („  … ñs) of:
# Standard-frequency   úð-signal emissionsþ IÃPnatio ÁTelecommunic ê Union - Radio ñSector
# (ITU-R) R< 2end; üTF.460-6 (02/2002)ôitu.int/rec/R-REC-4 -0 `02-I/>¦  ž
ª ’Earth Rotl  æðReference Systems Service ( ~ Àperiodicallyâsjðto keep UTC to within 0.9 s0UT1î qa proxy©‡ `'s ang7ðn space as measured by astronomers†  ­ É9she‚ ¦ data in aÁ!ed“;hb
 ‹_‹A.dat@ðSee: Levine J. CoordinatedáaversalÒ-(he �BURSIð Sci Bull. 2016;89(4):30-6. doi:10.23919/3 @RSB.& ˆ.7909995Æ °ieeexplore. ã.org/document/0 ¨re were noš Ps bef»P1972,vòno official mechanism
# ac®d¶ W€discrepa"ð between atomic -e (TAI)eoc's
# rs!. 4àfirst ("1 Jan ˆ "")Çlm!in° 	­ñ
# does not denote a& ò4; i ÙPstart� ¸ `curren! @fini¸ üf´I1AllM s ?S'¡ary (S) at1Pgiven9 ò  ç h`correcY 0 (+V -)2Jmade9  '@, so± š Ðunlikely
# ev£ Éof a negativR,ñ  w¦` look < P thisÆ Äð	YEAR	MON	DAY	23:59:59	-	S/ ypÆ esA q60	+	S
`  ­s	Jun	30_  oDec	31 /3	 	4 
5 
6 À
Leap	1977	Dÿec	31	23:59:60	+	S
Leap	1978	D 9 	Ÿ81	Jun	30Z /82 
3 
5 
7– 
´ 
/90< 	9´ 
9´ 
/94´ 	/95x 
7< 
¤?200Z ?200< 
1ð ?201†O2016Ò ø6
# UTC timestamp when this leap second list expires.
# Any additional+ ñs will come afterM  4 TU ED € line is( ð"mented out for now,
# so that pre-2020a zic imple1 az ñ s do not rejectj „ file.
#i A2021ú a28	00: –

# POSIXø s| £the data i M p:
#upda¤ À1467936000 (Sq-07-08 U 0:00K3)
#(’ 16406496. |21-12-2. C
#	U^ ôthrough IERS Bulletin C61
#	File�ð on:  28 December å ¡
# version Aa
# r7 np^ D "isÝ öe public domain.
R d 1916 o - Jun 14 23s 1 S á1919 - O Su>=1  40 -  7< ]Mar 2< 8 97 W 9 R  !20 FŒ  AO 23O † !214  † Â   Þ 2l 8 3‡ 2S 1 †  vN 19 1 2 á44 1945 - Ap M.!44ˆ XO 8 25 5 IS 16M 7· QAp 25Ò €  AS 26 ‚ 7rWy 6 0}  0O 2± 1 ‡H24 12  gS 22 3° !80° ˜ c  CO 31á ñZ Africa/Algiers 0:12:12 - LMT 1891 —À6
0:9:21 - P #91 °1
0 d WE%sT[10 Fd
1 d C À6 O 7
0 - WE' �56 Ja 29
P C  63“)14O 077 	M  79 6( 8� yN ô
Z Atlantic/Cape_Verde -1:34:4Û 0912… `1 2u
-ñ 0-02Â 02 S P1 -01 `5 O 15 "- # ð75 N 25 2
-1 - -01
Zð Africa/Ndjamena 1:0:12 - LMT 1912
1 - WA ð 79 O 14
1 1 WAS „80 Mar 8& $
ZR ø Abidjan -0:16:8R œ0 - GMT
L, � oBamako Onjul Conakry  _Dakar �Freetown! OLome ¯Nouakchott# ¿Ouagadougou$  útlantic/St_Helena
R K 1940 o - Jul 15 0 1 S ”O 1 0 0 - 11 -Ap0  JS 161 2g @4 - 4 
c 2L JO 273 33 \5 - N~ 52  J  f ® !57 PMay 1¯ 	 0195(Ë &584 	˜ `59 198 P  ˜ 6œ gS 30 3`66 199ê  j  8é  f)25O !83„   *12 4…  ¸ … !896   65 $90ƒ    ¸ 	`95 201$·Ap lastF 0sñ  0Ú   UTh 24ß A2006u KS 21 |lS Th>= d!Aur S È ZAu 20T 1˜ AuÏ	‡  0S 92 ß Ú  ÊSi !14¼ 58  `Jun 26 ì#206  �3Ø n 6 n ¦µCairo 2:5:9¢ð00 O
2 K EE%sT
R GH
N{ ¤0:20 +0020  2Ó4:�Ja 1 2 0ä>  3d S @ 4@ Í.2 d 5$ 5ûc !:3† 3† p51 1956+† ð PAccra”00:5¬ æp5 N 2
0ê  %sÕp2 F 8
0` -è 3z t46 Ja 6( ì°Bissau -1:2Ø = 0 `1 1u
-Ù  -0ž 075
Ý — N‡�bi 2:27:1¿ ™ „08 May
2ˆ 2ˆ 028 3Œa
3 - EŸ 30o L4 241 Q36 D @
2:4@R+0245é 7K —— ˜¿Addis_Ababa$ Osmar ßDar_es_SalaamE �Djibouti! oKampalg ‡MogadishcÌ àIndian/Antananÿarivo
L Africa/Nairobi Indian/Comor ”Mayotte
Z? öMonrovia -0:43:8 - LMT 1882
 M q919 Mar r4:30 -  €72 Ja 7
 ôGMT
R L 1951 o - O 14 2 1 S 2 ¤Ja 1 0 0 - 3 :O 9/ 4 / 5 0S 3E _ 6 0 Á82 1984 - Apz 3  5­ 	” 8e gAp 6 0Ä 8e OAp 4 :O 3G 7| 9|  O– !97É d  O{ / 2201?µMar lastF 1°  O 2wàTripoli 0:52:4#Ð920
1 L CE%sTÑ€9
2 - EE )82 ‡90 May 4" 096 �
' 77 O% ¨2012 N 10 N ¯ dO 25 2O P
R MUD<O3  � < þ 2WqMU 2008Hü !Su]8 A2009 6  TZPÐMauritius 3:5á@07
4“ p+04/+05  B 193N 0S 1b1ÛM EN 19  !40~ Fì Ï B 194wIN 180 50 PJun 1æ b  :O 2b 6E 2 3– 2  v “ 7oBun 2Ü,3 19 S§1 6 7!ay d 7'u  X!R 4 – :S 2à 7« ® 
ß  'AuõMÜ1 õ
­ ï0  º8Au ?B 201s ÝÔ 8Au Ä 2201÷!Ap PJul 3Ý óš ¼†: õ : !20V “:  c ¶ 0Ø ¶ 3  €
1 ' K 7  AuZ ®c 3O  A Ü 4 	C½ P8s   ½ 
¼ ý¤42  lI	¦ i 4 53  lÙ „Ù14   %2š Ÿ 3 *133   € *174 Y 4  š -  4  ò2s §ð9 3 -1 -
R M 2020 o ü- May 31 2 0 -
R M 2021 o - Ap 11 3 -1  4 *164 24 kMar 275  :y 84 34 +194  ZAp 304 44 04   · 44 54 KF 232  ;Ap Í 61 +151  æ 2d 73 ý   2 1– 82 .Ja—   4 5e 93 +14™  ;F 1c DG	Ê!30K :F 1` JD 22b 3*F ø  ,D ’ 3ö,Ja“  KN 28b ôIJa 9ö 3 ;N 2ñ :D 2'3	+N ¾ JD 17a O’  D‘ ,O ¶3 NÒQ3+O ¶ ;N 1Á KS 26# +N Á æSk
æ O‘ 4þ+S å OÎÁ 4ý Auk	b  :S 2µ4ÿ Aua
2  :S 2v4ç d 
õ  IS 13·4ç[Jul 2Y  L 
4Ò 4 r  3 
4Õ 3   ä 
4ð0Juny
þ  ln	dÜ 5 D4 lr	4 à �34  · 
x5ü 4 ß  ƒ 25 5 �   4 |5é Apê 	  4 
95pì
3   � î5,Apï  3 ñ5 a… yé5 4 16  é 
¢5í 4 ¡ +Ap5ëF£
   K ®5é+F Ñ  2 2— À060 o - F 1 ö3 -1 -
R M 2060 o - Mar 7 2 0 1 jJa 16 3  ;F 22 22 81  JF 19c  KD 311 3J :F 40  D’ 40 -Ja“  ;D 7a 51 *11c  KN 222 62 31  ON 141 JD 261 7I ,N V ,D ’ 80 <O 2% :D 2` 90 +13‘  :N 2V7:O 50  *N µ7þKS 200  *N R7åSØ 	G OÎy7æ AuÍ
2  9O 8ò 7å Au`
1  JS 302 æ 2 U7 JS 152 ç0JulÐ
e  *S è7Ð 2 1  â \Ó4 ^  ³ ¿×\Jun 2Â +Au› 8ò 3 Ü lp—8ß5 
ù :l 18ü0Mayu	6  ë 
j8å 4 �   ƒ 2Ñ8é Apê
h   4 Y8ë-Apì  4 Ð ë-Apî8 ¶ 
Ô8 a3Ô ymñ.Z Africa/Casablanca -0:30:20 - LMT 1913 O 26
0 M +00/+01 1984Çs16
1 -  
% @2018; Q8 3
1= e1/+00
v €El_Aaiunt U52:48t 034
7! -l 176 	ƒ ^ ©Maputo 2:1Ï  03¹ ¤
2 - CAT
L/ �Blantyre  �ujumbura! GaboronA OHara_ oKigali\ ŸLubumbash" Òsaka
R NA 199—  21vW1 WAT Ò2017 - S Su>=R ? #5 ! %Ap" -D Ìð	Windhoek 1:8:24 - LMT 18õ&92 F 8
1:30 - +0130 1903 Mar
2 - SAST 1942 S 20 2
2 1 ' 1 21 ,  90> ð 21
2 NA %s
Z Africa/Lagos 0:13:35 - LM] p05 Jul
‚ G 8 ( D14
0© 0© ê19 S
1 - WAT
Lf s oBangui ¯razzaville" oDouala Kinshas _Libre] 	_Luand> oMalaboz oNiamey ðPorto-Novo
Z Indian/Reunion 3:41:5Ú|�11 Jun
4þ4ªôSao_Tome 0:26:56­¶884
-0:36:4Á¥12 Ja 1 0uÅB2018 1¡R 2019 2( ¡ BMahež $48m 5907š BR SA‰@1943š€ Su>=15 ’$-
  3%  Ï 6Mar" 60 -Ü ØJohannesburg 8ü!SAúv	I poMaseru$ `babane´ àD 1970 o - MayD ` 0198ipO 15 0 È 1R S6 16 @Ap 3 51 S6 #2 6 ±Ap lastSu 0W ‰æKhartoum 2:10:q3µÑSD CA%sT 2000±P5 12
u EA A17 N7CATWŸuba 2:6:2P E21 FP „R n 1939Þ  â!3s¿ 	 ƒN 18 23s 5 4IAF 25  -5O 6E 2f  +9#d 4 XN 2 3a 30 !29y#S
1  ~Ap 17 23 !Ap• Ç 42 :O 40 4Á ózAp M>=1g 4� :O 8È 5 :S 1à !77 $E hS 24 0D!783 �	3  O¥2 8 2Jun v`88 199ØSˆ	: å  26‡ ; 9Ë‡ 2200ì  S1h @2006Ë – k 2Ü " Oª 2B 3@Tuni¼@40:4`@2881¸p2
0:9:2ŒPÄ1 0r 1ÿan CE%s+`ntarctPCasey)0 -0u069
¢ 0+08­ 19 Oà 
1S 0+11>Y75 2* ™11 O 28 2*  ×h21 17u+ 6+ Ð2
11 - +11 20ð18 Mar 11 4
8 - +08 2018 O 7 4
11  11 9* 87 3* x9 O 4 3* !20* 8) !20) 50:1+ ð
Z Antarctica/Davis 0 - -00 1957 Ja 13
7ƒ ¦07 1964 N
" E69 F 0200‹ a18 2
52 5µ ‹ g10 20u, k11 O 2, P2 F 2ë * 
¢ hMawson£ 04 F¢ 6p /6 „  ù
Z Indian/KergueleA 0¬ 
j çDumontDUrviller @47
1!+1#2#4E56 N# 
U WSyowaL aA29
3¿ `3
R TrÄ a5 ma -Äõ lastSu 1u 2 +02# 4# &O ! Z0 +00r UTrollr @2005002
0i *%s- eVostok. SD 16
^
. hRotherÏ `76 D
-Ì 0-03- ðsia/Kabul 4:36:4ß¡LMT 1890
4ô ¡4 1945
4:3U�0430
R AM::1 ok2s 1 -  2¼x µYerevan 2:5w ”924 May 2qåñMar
4 R +04/+05 1991|q31 2s
3 @3/+0­ p95 S 24 Â )97A `2011
4Æ S  ³ ZX 7Ø   óº4Õ 
" Ø 5’× °Baku 3:19:2 N× 242 SK'2s�h96
4 E ì $AZ P
R BD´9®“Jun 19 23Õ   D Q4Ï °Dhaka 6:1:4 Ï  `5:53:2 H0t941 O
6% 63|!42ÍD15
5 5 S- t51 S 30Ë±  
6» t+06/+07aàThimphu 5:58:3ú• ~947 Au m  87š Ì6k·Chagos 4:49Ú 4907n 	Y ,©Brunei 7:36  26Ž$
7æ 7æ 3» ÐYangon 6:24:4´º F880
 RO2 rM!
9É 9•^3I’
R Sh 191íPAp 12;1 D  m  40 S &40"7 0 4  ON 4 15  <N 1h 2h ao
h 5 S3 6  g  Ð 75  ›  O� 2ð8[Ð9 - May 1 0 1À D
R Sh 1948 ñ9 - S 30 24 0 S
R CN 1986 o - May 4 2 17  A19917 ‰Su>=11 2: #7   5Ap !  A ðZ Asia/Shanghai 8:5:43 - LMT 1901
8š 0C%s !49~ @28
8“   
B åUrumqi 5:50:20A ð 28
6 - +06
R HKÞ Æ ‘Ap 21 0 1à  ÕD 1 3:30s 0 -6 7ü SAp 13 :  N4; 8;  72;   ra52 - O#28$ } P9 195?$ ¼ u53 1964G 3Ä Ã $54# 1Marl 1l H `65 1973k 6l $ ³ 1# ² !73ô Dc !79  L  Ož KÂ äðHong_Kong 7:36:46(04 Ol 0 q
8 - HK3ó1 Jun 15 3
8 1 HKS óO 1 4
8 0:30 HKW PD 25
J)  5 N 18 2
8@–HK%sT
R fJÉ 5K H  b 0 ' E0   N ’r0  Wd 
c  f #52`rO  f°  52G $i >5õ  œ 	h 56„ h  60P  a	6 7l]75 - Q  Q ;Jul¹  0 PTaipe4 °	1896üC¼J37 OËSW T!f =0R _É v ApFA23 1û  öqN 17 23�6 ä)   )2 b C#3s* 4  b5  /:9 25  ^  !O [  í AO 31O 5 N # ã2a>=! ; ! ‹O lastSaB %51b^ =  LO 286  fÆx  ¹ � Ì ² Ÿ ¹‘  o5Û \  ­z!55´ <N 5— 6Ç ] Nð~  ½[]  ß8 ñ n¢# 6¤ 62zi 6i |" %W ‚ 7¨=  Ö ¥ ‚ GLÐ3 3:30 1 D
R ðn_ 1979 o - O Su>=16 3:30 0 S
Z Asia/Macau 7:34:10 - LMT 1904 O 30
8 - CST 1941 D 21 23
9 _ +09/+10 1945 S 30 24
8 _ C%sT
R CY| 5| ÊAp 13 0 1 S
 PO 12 � - 63 kMay 154  KO 114 P7 198½ "Apç 9 7T 0S 2R &0 m 8 ,O … ú9 1997 - S lastSuq  81  v8 - Mar"  à VàNicosia 2:13:2* Xð21 N 14
2 CY EE%sm‚98 S
2 E ™�FamagustE ?5:4E ð 2016 S 8
3 - +03 —7 O 29 1um L° sEurope/ ‹ ô Tbilisi 2:59:11&F880
 0TBMÍ 024 ½2y @1957(À
4 R +04/+05?1 � 31 2s
3 P3/+04  = e¶  4‰0
4  F 36 O�S
4 1 \ q  2 ¹2004 Jun 27u A2005� ï12
484°Dili 8:22:2iÎ!12!0+08!D2 F ! t E!763( ±2000 S 17
9a 9a ¸Kolkata 5:52#85° "8
  ~ Hj‚870
5:21·M P906
5à4- IµO  !63°2“ "15 + 22 S + I5 O ) ® åJakarta 7:7:12•67 Au 10
 13 Dë03:41 "
7G@+072” b32 N
7º 6+07¨ rpOl-23+ 8Ó dA1950 R 064
Ô4WIBÇ ÓPontianak 7:1” Û0S  Pa© TJa 29Ò 05 Sº � 4U  Ê4¨  # @WITAÙ8¶ ôMakassar 7:57:36 92y ±  N q 4¥ª  #  q  Jayapura 9ô}Q ¼ ê T4 S
9º9º!64 WI	i  ¡ 02,! 1‡ ¢   »†S 18 24  !80¸JS 22 !91 �  e  92Y5³ §4ƒ 9Ñ  SÃm 9wº  ,S º 9’9&7 1Œ  n  7 	( n €2001 200éð Mar 21 24 1 -
Rp i 2001 ò3 - S 21 24 0 -
R À4 o - Mar 20 1 S 4 54 O 4  h  84 h  h  d9 2011Ÿ k  n /12n  n  13n 5n  n  6n  n  7n 9n  n /20n  n  ö 02éJ n   2 n  o5 2027Ü 2 n  8: )2 t o30 203, t  32: t  t  4: 23 t  6: "t  t   3"Ê3 t 4"4"t  t 4"4"t  t   4"t  t   4"t  t   4"t  t 5"5"t  t 5"5"t  t   5"t  t   5"t  t   5"t  t 6"$62Út  t &63¶q  n   þ /66n  n  7n  n   ø /70n  n /71n  n 72/74n  n  cÉ7 À S 21 24 0 -�
R i 2076 ý8 - Mar 20 24 1 - S 0 49 o7 17  1S 2 4 t80 20827 n  n /83n  n  4n 6n  n  7n  n  O8 mal  j öZ Asia/Tehran 3:25:44 - LMT 1916
 T 4 ð30 - +0330 1977 N
4 i +04/+05 a9
3:30 ó330/+0430
R IQ 1982× Sy 1 0è 0198 O ³ z36 4U a5 - Ap7 :7  Ž 9® ÈS lastSu 1s X A6 19!  z# D t91 2007` (3s³   ³ 3\ UàBaghdad 2:57:4… VA890
 3BVB18
3S Ì p2 May
3/0+03>•
R Z 1940;3ÕZu 1 D 0S 3ÑZu 0 S yN 16 244 2U  ‡ #O Q 7 3  Ž  p  [4<  w5Z 8ª !22 52 D«  $Auu V 8u O9 - ’ Ò$Apä 8 5‹  AS 14‰ â #51¥ r‰  <N 1O5À k 9Q †  AO 18 k À 5 ¹5 2S 1)5 4  4Jun k  2S 1P 6 56  6  SÖ  66 ‡ 5  2S 2ð k ‡QAp 27ñ 5  ¢�7º @Jul �Ã Oî Â7·  > ƒ 3  u4 8 u Ð  µ pS 13 24³*8› @May Ñ	5  BAu 2 8„ pQ ž  éž T j 1;5  Sg R  É2  Bf i+p 78  S 1 bìd  SN2 9g #2—  35 À 1991 o - Maðr 23 24 1 D
R Z 1991 o - Au 31 40 S 2 `Mar 28 5  0S 5 3 33 hAp 2 0e   0 '0 / 4/ 1/  uy 	1 51  “ 33  IS 3 1 61  14¬ Ä  <S 1Å 74 +204  1S 1FÊ 84 	û  :S 6™ 91 *2*  È  CŒD2000/  Ç 0  @O 6 0 ÖXp 9 1/  S× À A2002`  Y22  :O 7a 31 8c  :O 31 41 !ApI ‡2200 0S 2’ ð5 2012 - Ap F<=1   ¶A2005N 1O 9j÷ Ô O . L ·6/ œOÇ—4200„)27/ 1…JS 12 U+O  :Ss_ €13 ma - m0F>=‘¢ ƒO lastSuj ñZ Asia/Jerusalem 2:20:54 - LMT 1880
 `40 - J ò918
2 Z I%sT
R JP 194ò pMay Sa>U4|  �1951 - S  C8 25º   !Ap 0Ê 350 > ` ¿ ÖTokyo 9:18:59» 07 D~P15u
9¨ J² B 197N1JunA1žJ p1975 - î ô-å   4 7by„6 !N %0 3 !J .@Ap 3a G  S H 8—!Ap` 0  ` s86 1988ä � : Í â  9Ï2O F j Š i8<6 !90 Y7 ¦ œ  0S 2 c 9À 1 
þ  9283{™  93 Ô 9î 8  [o 59 Sï W5 0s  ñ 0Jul\&s ]199 Á µ 4F9 "0200Ô q !  Th" A < k" %U2200†O7– ¾OE
 
SÆ’ 6Û ’ å 1m 0D 2wF20148Ç 	¥   U ÐZ Asia/Amman õ"2:23:44 - LMT 1931
2 J EE%sT
Z Asia/Almaty 5:7:48* ð24 May 2
5 - +05= ñ0 Jun 21
6 R +06/+07 1991 Mar 31 2s
5 P5/+06 p2 Ja 19 5 c2004 O3 6b 6� þQyzylorda 4:21:52”  Ñ 9+04” ¨ �81 Ap
5 1¤ ƒ 1981 O
e   2  Ã ¨ Ã 4Ã "4/ö a91 S 2Â Ü A19925 ÷ p 2018 DWÃ 	ïostanay 4:14:2œ ZË	Ô Â ïAqtobe 3:48:40ÈlÀ ‚pAqtau 3‡ kD  †
v)® @1994�5R©	‡Ç 2tyrÈ 7É 3�3OÉ C9&8Ë @Oral‘05:2’É 8¤ 6¤ åÛ  ÿ¤BR KG*0199¦ýAp Su>=7 0s 1 -
! ÇS lastSu 0 0  P7 200ú } " I2:30E %  :OE #  H ÏBishkek 4:58e c 3 A1 Auø 
5ù "+0ƒ» TAu 12ª ø ¡R 1948 o -z 1 Í D µS 12 24 0 S 94 KAp 33 Ð9 1951 - S Sae
9 $509 l !51  6S %55 5 ;S 8Ÿ %563 2Ä%1 Ô  r	Ô 5kA60 -˜ "£ ! À- S Sa>=17 2ð 4 0 S
R KR 1987 þ8 - May Su>=8 2 1 D! O 3@ ðZ Asia/Seoul 8:27:52 - LMT 1908 Ap
8:30 - KS �12
9 - J €45 S 8
9„ 0K%s  ’54 Mar 217 3KR  †61 Au 10. 
| �Pyongyang€ 3} QAu 24�  � A2015d 5| ³ A2018`4 23:3€  ±
R l 1920 o6�r 28 0 1T ¤O 25 0 0 -2 12 0Ap B0  O / 2/ 6a   O x 1 31 ZAp 220  0S 1H 1 5ü!61Æ 9y 14  O 6 7~ <Junh ­72 1977 - 4 3  f
j $78· 3. !S  �  84³ g M  9Ó Oî 8h  ¸ 
� !89� M 
‚ `90 199× 	!9 O O� Q93 maRŠr lastSu6  	9oS > 9> O ð Beirut 2:2“ jð880
2 l EE%sT
R NB 1935 1941S 1Ÿ ":2d  D $ -SðKuala_Lumpur 6:4 YÒ1
6:55:25 - Sé`5 Jun
� +0O`33
7 0p @+072@@36
7 $-  4ä7@+073& q42 F 16”0+09Á  $;12
) 082
?6+08´ ¢ching 7:21i 0926R@ @33
8'q+08/+08£ } k ôIndian/Maldives 4:54 † M060
$p+05
R X¯ ø81 !ApP1  I3  Å* K O!  ! KRX 200V"ApKaÖ<  @2006Ç #< 2A   | 
@ o15 201! � aË Hovd 6:6:3E °0…
 0+060P8
7 X6 ©îõUlaanbaatar 7:7:39A ŒA78
8A  ê9A àChoibalsan 7:3á >  µ8ÀAAp
9N P9/+10! Or 31f ñ Kathmandu 5:41:,h D20
5ü5üc86
5:4143 PK` b!ApxÓ ”  ¾ êÀR PK 2008 20ñP09 - N 1 0 0 -
R PK 2009 o - Ap 15 0 1 S
Z Asia/Karachi 4:28:12 - LMT 1907
5:30 - +0530 1942 S
 R1 +06 q5 O 15
 -+ ’51 S 30
5? à 1971 Mar 26
5’ PPK%sT� P 1999¡  + eAp F>=¢ 5R P U3 - O Ú  8 4Ù 1O 1ó ñ   5 44 2  6 7
	 g A20062 0S 21 a 7 *13K 8K  m Ø ZlastFP 88 Š2  ‰9S 4° !10.  K )26H  GAu 1ÔQ 20113  Ó0 0:ÿ SQ uc Ë 2 0u 3 ü   ³	­  12h 14 -¼ ä QTh 24?: 2… 0S 2� k 3 7R ¯*24 ° 8  AO 23Ï â1Ë#18œ ASa>=™ Õ ! %O  ¢ r 9r  6  ,v Z20 mat N <  ³-kÆGaza 2:17:52hð0 O
2 Z EET/EESTjP8 MayX€2 K EE%s �67 Jun 5. I e96
2 J# c99
2 P �2008 Au 2 -`  €98 S$ 010
� 0EETì0ê 27R
' H1 Au* 2 à ÐHebron 2:20:2±LJâ E ïRH 193»õ51 D »F8!0  0 5… : ì2  <Jul4 7Ï/5   ,[ÔManila -15:56ñ°844 D 31
8:Y#2899ñ‚1
8 PH PÝ 42 
dJ64 N" w°Qatar 3:26:R @920
_ 0+04}2:
“R+03
Lú8 tBahrainR ¨Riyadh 3:6ª!47,14I / J DAdena  dKuwaita ðSingapore 6:55:2ý¸ 601
 S@5¾  ¶0+07ð 3
¡€20 +0720 a6
7:20n 4	#7:Á7­a2 F 16Q0+09i{5 S 12
) 082
J4+08± àColombo 5:19:2Z¯ A880
 3DM¯ 6c42 Ja %0” 0+06~ Q<6 2E  96P 25
6B  lƒð 96 O 26 0:30
6 ð- +06 2006 Ap 15 0:30
5:30  À530
R S 1920 03 -( ÍSu>=15 2 1 S  !O  c 2 0 - B62 o; )297  :O 10 Á3 1965 - May j !63L JS 304 4 K 5 / 6 ZAp 24“ �6 1976 - K 7 8– 7 S° ü 8Ì "84ÿ 
þ  k 8ž IF 16�   O I d 7Í 1Mar} -8— 8³ :O 3d&884 
Ì%89 4 O  ® !901  B	®  |&910 0Es91 1992{0A9A)8 2  ù /26 YS 25 J 4d  ß¯ 	M 4
 v á 	5  G9G j ZlastMm 9: U  Z û0S 2³6200³ P FP  gN F>=1¿ 2200¶$Ap � +N 2 ´¹ 
i r10 2011�m R Q12 maï/r ¥  9 O  Þ ðZ Asia/Damascus 2:25:1Ô0LMTDÄ0
2 S EE%sT
- ºushanbe 4:3- 4 2
•ð+05 1930 Jun 21
6 R¾1/+0ž 1 ã  ± s
5 1 +05/Ý`1991 S1  Öx ÐBangkok 6:42:¢£ E880
 Bµ Q Ap
727
Lã > ð ¯Phnom_Penh ”Vientiane{ ÷ Ashgabat 3:53:3 ó  �  +0®ó 5ó Ø ó !
4 "4/%•92 Ja 19 :x «Dubai 3:41•o ¾ ( Û dMuscatA ðSamarkand 4:27:57/92º zP 1981L¢ kP81 O
;­"82  Üé Ç €Tashkent2!7:Á… 2
Yp ðHo_Chi_Minh 7:6:4 r p06 Jul
 6P 1�y4q 1942 D„ 3
I0+08 5¶q14 23
9`9 8S 2= 78 "55u 2  ÿ/59^  7& Dn 13J ð
R AU 1917 o - Jað 1 2s 1 D
R AU 1917 o - Mar lastSu  40 S  !42  -Ja:  : @S 27T t 43 1944w 
3w 4O 3< ñ Z Australia/Darwin 8:43:20 - LMT 1895 F
9 - ACS ð9 May
9:30 AU AC%sTØ cW 1974a ö ¢  5  Ü ASu>=5  8ž = 8[ = !91\ 8N 1 W 9l9 A20069 D�R AW 2007  ù  ; ” ² # W8 - Oè ò XqPerth 7W ŸW1D
8B@W%sT¼P3 Jul 0W A 
F ÀEucla 8:35:2r F 0:45I ·+0845/+0945O  'W   ®Q®4¼ 1R A 8FÚ û   89 1991û  ?  90! 2�ð"Ho O1993C !  Ò93 ‚	C ø Brisbane 10:12:"
1¤Eb!71 0Q A 	_÷Lindeman 9:55:56ÿ4 U4 6 E È  ¸R10 Ho&  aS+ _ 1985â A! 8}DO 19’"R  ~7; 7Ÿ	› U 77v 7] 6·  ã" 5€ E P   - z   ,227 Ä  ˆ7 Á,207 5l ) : lS +:Ap t †m: @8 maÀ)p D3200 O ÂßAdelaide 9:14/S/ ò1Ô z 1R A D  0191î@ Œ » A 8ŠÁû  C 6c @ �? !68 ‘ < 2¢Ð=  _ gA !  #7#D 8÷ " Äò È@ £ ƒ  82` B b E  84#  Ï #  É E 	…/87+À S
R AT 1987ñ o - O Su>=22 2s 1 D
R AT 1988 1990! klastSu!  91! 9!  B 1  ¶2005 - Mar C 20 Sd A2000‚ 'Au ƒ 2001 ma` B2006= pÀ ~ [ 7 { 8\ A? ðZ Australia/Hobart 9:49:16 - LMT 1895 S
10'@AE%s-q19 O 24 $U  !67 T  õ PV 19788O÷ ! 2» F Ù  3� ?  Ü y"  86™ º" 5œ# &87\! { f þÝ»! þ4Þ‡ ?95  	V   1$ ¦ …  	?   8R A  `  !øMelbourne 9:39:52$Fý!71 VN! '27Å 
1ƒ " 8< ä1R A @ J"  J8J# E 19Ÿ  "_ 7‡ = è  ;  90! € 	 96" ÊN C C	! F C  C C¿Sydney 10:4@N@ˆýBroken_Hill 9:25:48ŠQ- AES¿€6 Au 23
›"AC ò9 May
9:30 AU AC×#71 N  ³ S P
R LH’Ö îE 1 -  2% Ë0' 0! 5ö> 0Ž A Œ	B Ë O ‹ > � # �` Ž"  Ä Ð	d Ò:200Ò# Æ ´	a �	 � À- O Su>=1 2 ð%0:30 -
Z Australia/Lord_Howe 10:36:20 - LMT 1895 F
1 àAEST 1981 Mar
) ð0 LH +1030/+1130 _5 Jul   p ðntarctica/Macquarie Z 0-00j 99 Nj €16 O 1 2 P1 AED "17� qAU AE%s ¥9 Ap 1 0s
N 0948§ 0 25> - !67 T> @2010 ` @2011 A  ú
Z Indian/Christmas 7:2:52!w7 - +07/ °ocos 6:27:4• MQ900
6~ð +0630
R FJ 1998 õ9 - N Su>=1 2 1 - P9 200F  F lastSu 38  a2009 o< (299  Û  ?Mar8 ±10 2013 - Ow 2x  ? – 	v $12> !Ja? *18— !14?  2µ  14? 8¸ ^ ô ¤2015 ma - > 2\ ó  ; 8ö !20x KD 20 1T e6 ôZ Pacific/Fiji 11:55:44à°915 O 26
12­†+12/+13
6 ð Gambier -8:59:4Ò í`12 O
-Ö7-091 íMarquesas -9:10  W-09305 `Tahiti2 V58:16ž e   -1QbGu 195aJun 27AD
R  !611Ja .50 S 7 Ss6 1 2 M ˜a 26 0:1 4   i 2i  @Au 3X5 7)@71 -·Ñ ýr ! SZ ;© !73© JD 16s 7rKF 242 62 0MayÄ 
l  zAu 22 2Þ 7"ApQ  0u 2H Ý �uam -14:2ä À844 D 31
9:3 !90l1- GY€41 D 10
  €+09 1944M 7  10¾Gð@D 23¨…- ChST
LÄG| ÑiSaipanF@rawaä632:ã ˆ  Ñ7+12- ÷Enderbury -11:24 º  -13   @1979ë1ï 0-11Íï ^
0€KiritimaÎ]10:29X 03A-104*]    -1 9]  Â 7+14´ `Majuroá (24Œ â  ž +ž G14 Og 19S 3#-Ú …G1 Ap.  •Qa 30
ï Q 6£ 
C�Kwajalein’ é @ r =F 6p  { -  P1993 Â@0 24© ¼ ËÐChuuk -13:52:ô
52 - LMT 1844 D 31
10:7:8  90 ð  - +10 1914 O
9  09 `9 F
10  W41 Ap  U45 Au! ÷	
Z Pacific/Pohnpei -13:2o † 632:Ÿ ˆ 1i 1y ˆ  %37u ? 19– / – aKosrae• 48:4” T51:56 ” G� 1969 O
1Ÿ®+12 1999
1² ÀNauru 11:7:4‡Ëà921 Ja 15
11:3 @+113¿Š42 Au 29£=S 8* •79 F 10 2„  
R NC 1977  !ÕD Su>=1 0 1 - 8  #†F 27 0 0 Ø96 o - D 1 2s5 !97 PMar 2  4 -`Noumeaæ 05:4y æ !12æ 3 NC +11/+12ˆ RZ 192S •N 6 2 1 S 8k w4 2 0 M �1933 - OÙ 8  @<  ô"  ª ý 5% D  34p sŸAp lastSu! S  	f 4& Â? !74» Nž CPD
R kr 5:45b !75< Fu 1s 0k=  >  …3R N> 0198{OA %1 ~ -5   D D 6$  =ë à † ! F Š !89È ¢ å †  < ‚ `90 200¿? C  B E7 - Ä 5Å E " H Æ ¦2007 ma - È  @ Ê B2008@ &ApÏ @  € U€AucklandW'39î@68 N÷;€NZ NZ%sTÖ6 6×Chatham 12:13¡8J A2:15º 21(4I õ:45 k +1245/+1345
L› ðAntarctica/McMurdo
R CK²Æ0N 1Ã0@ ‚  ¦9,¥H!  ¥Î#0 D !èRarotonga -10:# ø  C 1-10[77`12
-10£ —-10/-0930)0Niu]H1:19®‚01
-11:2N  12©5 ½-½@78 O* h - -11X `orfolkÊ-114:E1Gð 51
11:30 - +113ð0 1974 O 27 2s
11:30 1 +12 –975 Mar 2 ò- +1130 2015 O 4     °9 Jul
11 AN* ô%/+12
Z Pacific/Palau -15:2:4 - LMT 1844 D 31
8:57:56 P901
9Z (09C ôort_Moresby 9:48:402 A880
 q32 - PM^ @95
1" 7+10G õBougainville 10:22:1z H Q 1942é     u5 Au 21m   Ù @28 2#‚  Pitcairn -Ã  :2¤  ø  -8‰Q- -08‰Á98 Ap 27
-8  I ðago_Pago 12:37:1ý J !89¦ ` 5
-11ã 4>  0911 ‡ - SST
L¢M ´°Midway
R WSÓ 00 o5 € lastSu .- 1 ÜAp Sa>=1 4 0  S: Wa 3 1 `2 ma -å .Su;  < u< XAApiaþ 3W
ý 6Zý cÐA1950‘WS -11/-1äÀ1 D 29 24
13w+13/+14~°GuadalcanalH3€�_912 OüpFakaofoj 8:24š 0—0-11o �  30~  @±3
R TO 1999j O ·IbTO 200  ¶S19 2s‚ ’2001 - N f2;  q 0="Ja¥8u 2@ !16u = !17 "JaZ 15 3: £�Tongatapu¨+19ð"12 @+122”%41ó î   >TO ðFunafuti 11:56:5¿ á101


‚@Wake, 66:2+ @R VU3Ð ƒD 22 12u( 4  c œ2 æ  83°  dSX22 24> $84!  A  (# *D  92# @3 - O?a>="  †Oc nAEfatè '13Ø �PJa 13”/VU¡ aWallis£5’McR G 19`May 21ii1 BST
 !O  E0 GM (MAp 85  1S 1Õ	6 8s2s m   S — ñn ' j 	8  Sá
8 &20p ¨  @O 25Ã ¨ 23 n  !O  	5 2m 67  O/	7 ¢ m 2:  Š2fS”" ð 0 GMT
R G 1924 ðo - Ap Su>=9 2s 1 BST
R G 1925 6" /16# a38 - OD 2! E0 GMD /7 c 
8c 9c 	/30B 
31 1932B 
3B 4 ä (35  & 36� 7� 
8B 9 �    Nb c4!F  23‚Æ!41^ 2May! … 1s 2 BDç4B 43Á u# 9# 	C `2 1944" +2" 
E ESA  16  	B D?M>=>   1Jul@ �  Š4Šg!46å Ê4†BMar @	œ  PAp 13¸ 
Ø  @u 10 9  -N ö4ñp 4‘ @O 31 	Ëê>Ap Ç LO 306 h50 195t # A{ 5%&53 1960ê5ƒ5Ã5Ã" c  ldi5,5,
6b B 6ê6ê š`lastSuMÕ$ ÒŠ¥ 64
 ñ F  :1j äLF 18a 7M8I? W$ ¯… 8Ë P95 - F Ë )1uÀ$ 81F 81u Ë 9:F " %2 " ðZ Europe/London -0:1:1r ðLMT 1847 D 1 0s
0 G %s 8 O 27
1 -Gb 1971 èu& `96
0 E$/lLh v Jersey
 _Guern  òIsle_of_Man
R IE‹  Š� U -1 - “ +#  *I3 2uE ]81 ma�0f �ˆ �	" 6e &O ó  ®QDubli®2¬ð80 Au 2
-0:25:21 - DMT 191ñ6 May 21 2s
-0:25:21 1 IST 1916 O  ð0 G %s 1921 D 6
 BGMT/( p40 F 25D 0= 4= 6 @- GMQ ƒ47 Mar 1 h k47 N 2+ r8 Ap 18 GA n À68 O 27
1 IE© ð/GMT
R E 1977 1980 -< ÆSu>=1 1u 1 S  Ào - S lastSu 40 -  8   ò 71u  o9 19958 q81 ma -Ú X u "96  Ov /W-´ s´ !  ˜ µ s�  ¶ 
 ·  	! ¸ 	y ¹ @ c — ƒAp 30 23²  I«   �"18�@M>=117   %S  ‡ ? !40Ÿ $ 2¨  2 Bp !43  q+293  0O 4 d P4 194ë!Ap„   Êj 4R O¬j 5 SÙ � 	» #779 82a7Ú
 Ù	  Ø 	u ×> e� Ô B  ö�0î  ± 	 °  ¯  q ® < R„@0Jul§ „ MS PD 28 4 M& ¨  ù¦31 22 2 MD8  Í R 9®8 38  Œ 0vaMSD
R r   Au"� #SK !21U BF 14F6  ÁcZ2 +058 @S 1 /6  ~ j  Þ ƒ  814~4  Ô 13 -î	5  
û-: P5 201p ¥ Å3 " $96" ÿB óZ WET 0 E WE%sT
Z CET 1 c C M M ‘EET 2 E E 0R q­2Jun[z  3¥ û °  €  a(0 3 7÷ ø4m 9 2   6  0 i 0 6 0 2`  OŽ ¦G ö 0  Ûó O` Ò 0 ð6 0 1 S
R q 1978 ðo - O 1 0 0 -
R q 1979  ºMay 5 0 1 S 0S 3/ 1 %801 31  9O 4a !810 ZAp 260  JS 271 21  ’ 21   O x ‘ 30 ZAp 180  ò %840 / ðZ Europe/Tirane 1:19:20 - LMT 1914
1 - CE ð40 Jun 16
1 q CE%s ¢84 Jul
1 E 
T ÕAndorra 0:6:4S 001
` WS  6 ge ·85 Mar 31 2T rR a 192�sAp 5 2s² @S 13 "  %46ò 4 å 0O 7 2 a7 19480]Su>=1  5@Ap 6 P 8j 8 3 g ‚  0S 2½ ‚ :ÀVienna 1:5:2€�¢893 Ap
1 ciE
1 a 040 9 2s&  45 2 P1 CES¸ 1 ä ÝR '81…Ÿ PMinskž D0:16Ùp880
1:5ÜM<124 Êa
2 - Eï3B 21
3 - MSKl1V*28´ V` 3
3 R) —/MSD 1990: %91+qs
2 R E“2201 2Û0 p+03
R bÑ§ c49 0D B1919ùaù#3s/  /hr 1 23; ˜OF 14 AO 23  æ‰ 2 ‰ 6  LO 256 	 6  ‚ ¡  227Á 2 �Á W 9s W 5ÙÝ ]75 75 O � ¨P V8 193{ ›�2�À €3 ½ 3J n 9– .3J1Ap 33 'ä4 '7Ap ã $ 4  ¹	œ %‚ $›N # N Ãé 1œ  1N 1g i4FMš 4Î 0S 1(i4Î  i
4 "S } d å  ï O‚hGð Brussels 0:17:3:é680
 BM1892M1, DP14 N >Ä 16, Ð
1 c CE%sT 19ô18 N 11 11u
0 b WE%sT 1940 May 20 2s
1 c C •4 S 3
1 b b77
1 E û
R BG 1979 o - Mar 31 23 1 S ”O 1 1 0 - ü80 1982 - Ap Sa>=9 !80U KS 29: 1 17 2S ðZ Europe/Sofia 1:33:16 - LMT 1880
1:56:5 I €94 N 30
€ !EEQ2 N 2í  r5
1 - C" 5«  # 6 &79ö  
2E;ä82 S 26 3
2 c  f91
2 e R7
2 E P
R CZ�5ß AAp MsN  N!2sü 6 66  Ç:6 24 6V ƒ9 - O SuT ŠT 7  8Š ! 5B àDAp 9 såPrague 0:57:44t650
 Pt:1 O^5w09
1ú tQ6 D 1‰@-1 G; P947 FX2+ 7; ŒVD 191 143 ‹ @S 30   4j <C15 0p Œ2ù Rž #94 1u 1-M � 4  0S 1 2 7»4 ² 4 @Au 1›ð™ 84 “š  @Au 8M  g ¬ Copenhagen°E0:20°9° Cur894
1 Dê "!" š,  r%õZ Atlantic/Faroe -0:27:, 908 Ja 11
� Wl8 E¡ 
R Th 1991  | iÎlastSu 2 1 D" %S   0ŒB P3 200 t ê@   O@  s2007 maé J8?  Ng | ðZ America/Danmarkshavn -1:14:4ó ¦ ºð Jul 28
-3 - -03!0t06 2 E @/-026.FGMT
a ÀScoresbysunda @27:50a   H 8a  ¨`-02/-0i!81Ú@29
-ðw-01/+00m “Nuuk -3:2Ye Æ L ÀThule -4:35:‰L 40A%sî ìpTallinnî Ü3 ë3 TÄY918 Ft—19 Jul
1:% 2ë yp0 Au 6
Â 0MSKýP1 S 1 Ð22
3 R MSK/MSš82†
ž0EES` 89 á
8 2 Ü09 OI4“ @2002 >/ FIš 2
sAp 2 24¼ À O 4 1 0 -
R€ FI 1981 ü2 - Mar lastSu 2 1 S
R" S  ö#3 0 -
Z Europe/Helsinki 1:39:49 - LMT 1878 May 31
 H 0921  
2c PEE%sT† a3
2 E  -
L] m �Mariehamn  ô 1916 o - Jun 14 23s¼  0191� qO Su>=1   ¼ 0R F  7<  ú 2< 8 97  7 9 R  !20 FŒ  AO 23O † !214  † Â  LO 256 26  † Þ2 1938 - O Saø #23< Ay 26X < 4 <r 2ù !25 <Ap .2†\Ap 17Q e=Ap O c 5 P c[Ap 20P 3c 6 2 J  8 / Q  re3<Ap Ö 3 µ3¢ ‡ k  Q ”317  2N 1k W4(FÖ 4% ™s5 0 2 MJ XO 6 00 : ™ 90  XN 2 30 P89 2a  :O 41 e3/  XO 8 1` zÊ^  RS 16 ¡å7Ž À 2J  S1ÓÅParis 0:9:21Ï9µUr 16
 PÎ1 s1
0 F WÐ&40–d
1 c C z4 Au 25. "5 » E
1 F+ b77
1 E ’
R DE 194Ñ  æ44 2ð O¯sÒ 4 79 	
   FUAp 6 CS ² / 11o 1  |%29Ô Ï ¥ 86 ² ³  0  So¢ Ä m  ‘Þ 6S 2> Õ šÐBerlin 0:53:2˜Z93 Ap“5� \ b2
1 Sor ’ 06
1w¼'80‘¥dZurich³†Busingen"õGibraltar -0:21:24U!80ð 0s
0 G %s 1957  4 � A- CE  gã‚UJul 7´  S ×  Ð41 o - Ap 7 0ô 1 S
R g 1942 o - N 2 3 0 - 3 ˆMar 30 01  @O 4  1 5H YJul 10   a 0 !75a ‡Ap 12 0sa  @N 26 ” %763 91 23  @O 10 3 ü7 1978 - Ap Su>=9 7S Sl '2s $78 4é ç !79  · ( 9µ  gS 29 2H &800 F CS 28GöZ Europe/Athens 1:34:52 - LMT 1895 S 14
 A @916 u H À:1
2 g EE%sTÛ1ö „30
1 g C 4 4) 88 E8 �
R h 1918 99C15 2ì  Å20 - S M>=15:  2ò 
6 !45
‡May 1 23P  1N 1; k I 4Õƒ· 5O 7m  î4µ  î4ì
  O-  %54¢ 29  Oé 1 Ó )22#5 OVb Ä6 1957 - Junƒ 
5  �S lastSur 5EAp 6c W  M }0 �1 1983 - EQ †9 ! p @ �áBudapest 1:16:õ�u0 N
1 cYe18
1 h 4}I7 23& )45& b84
1 E5 @
R wu Å1ÅBF 19* Ñ   ­6O 2+ ®EN 16F  #21ÕrN   ‹�Ù 5 3Î!ApÏ ¬‚  O è 2 4ö2F 2ö0 "40‰ b ’42 1g7  �4å ¢! 1ˆ! 3@ 6Ã ! 1B ! 2!  âÔ2b  O6s1;¡ ë Oç	› 5º 6z Y 6;
9 ð
Z Atlantic/Reykjavik -1:2Ÿ 7ñ 908
-1 w -01/+0c 8‘P7 1s
SpGMT
R I	  ŸC3 24' 0191Ô S· 2Š Ð  —  O+317 Ô  9 0O 6 M  2 L   	 þ 2  20M E M  @S 18 f < é  14 4 žŸ L 4…g 9å š kðI 1944 o - Ap 2 ô2s 1 S
R I 1944 o - S 17 2s 0 - 5 hAp 2 21  hS 15 10 60 3MarK d  ;O 6c 73 96 0—  0O 5 – 83 @F 29L d  0O 3 1 ð66 1968 - May Su>=22S : 6ž @S 24 ; 7; 99   9Œ 0Jun	¾ !70  r *31n  €S lastSu R 71 1972­ !71Z ? 2 O� W 3  © 3q ü  73q 4ã ‘  É 2¢7 U ã 5U 7U q U +30�  s7s  u² èu ä �"S S   öZ Europe/Rome 0:49:56 - LMT 1866 D 12
 R ¢93 O 31 231  
1 I CE%sT.3*V0
1 c  4 4) 8$ E$ )
L‰ • Vatican ð	San_Marino
R LV 1989 199¿  b¬Ê# Ò
 iga 1:36:3õ
 ¬  `918 Apâ$2
. @1 LS 1856 3 #- 5 95  4  9~/226  !26 011
ø EEd �40 Au 5
3
 SKy\1 JulxòO 13
3 R MSK/MSD(	!
¼!EE» 789  
2ZEÚp97 Ja 2† "E  P2000 jš A2001' 3
2 & ÀdZurichëeVaduz
yàVilnius 1:41:1Ç|2ŒW~0917W05:3# K P9 O 1P1- C 20 ½3”20 O 9
1 % D -D0n 2ª	¿/AuE2°C
2 Rb1991 S{F
2 c 8#P1998 ‚ƒ29 1u
1  ¾ É  31 ¸ G2003L†R LX 191!S14 23~  ä~ 1 ¯83  ã
4 L€Ap M>=159iR  S  U£ o é  +	¢   »3 P 2-F Ô  O23 îf 	2  O ¦	5  5 $25ÀR LX 1922 o û- O Su>=2 1 0 -
R LX 1923 o - Ap 21 23 1 S 7 27 47 lMar 298 4X /8 r 5; LAp 59 6 ,17 7 n 8 ,145 9 $20 ðZ Europe/Luxembourg 0:24:36 - LMT 1904 Jun
1"@CE%s �18 N 25
0 W ä29 O 6 2s
0 b  ö 40 May 14 3
1 c a4 S 18 $b Y b77
1 E 1
R � 7• ^S31 0s– Sx#0s” ”Ë5  @S 16O  5 b5 1979  015 # ! a80 - S@  A !80e¬ ; eÄMalta 0:58:4_0893Kr 0s
1 Iù  „ "3 D  
1*81±D 1997 ma -0 flastSu³   #O  3'– ð Chisinau 1:55:2Ü ù@880
 A - Cü à18 F 15
1:44:2Â B ó 31 Jul 24
2 z EP40 Au/  0EES74* 1åcì  44* Ñ24
3 R MSK/MS¸ 9u6 2
2 RX 9 e b7
2 MD 
Õ `MonacoÌF9:32m2Ì¡0:9:21 - PÁ !11=f29
0 F¡5¡6¡F­ ¡RN 191©æ· 0 1 NST
R  OfE0 AM Â12
5   S ø Ô7 8M º �Ap M>=1 2q ! SïM! y %22¡B Q22 19ÿë
„ $_Jun F‚  2] ¾a ò@ 6€  ã Q5Á S3Á My 22 3=  ¼= [  =    Ì ü Æ 37V  	 6  t3  X   ” 3  4ï  ˆ®  †2c-¿ÙAmsterdam 0:1Â435
 @N %s™ 7 
0»ôN +0020/+0120 19}6{F!45âo 2
1 NÚOÛ zN PS 30    ñ   ñ !R L `59 196R 7xF < # 5y5D 6h4SPðOslo 0:43 - LMT 1ö895
1 NO CE%sT 1940 Au 10 23
1 c Š5 Ap 2 2/ b80
1 E& ð
L Europe/Oslo Arctic/Longyearbyen
R O 1918 ô 9 - S 16 2s 0 - P9 o -l  15 31 S $44 3 WO 4 2J $450 W29 0 I  XN 1 00 60 X14 0s1  0O 7y ¬ !472 0May{ 	2 7K â {O Su>=19 89 PAp 18 œ ÿ 0 5m xJun 2 1m 5m !58O`lastSu  § 5n `Mar 30 o 5o  Â -31 t1961 - Ã 1¨$60Ã 38  61 1964 - V � u $62" &S    ° ZA Warsaw 1:2I `LMT 18k W 0915ª ¿¦"18Ss3
2 O EÔ™22 Jun
1 çJ3ÑA I44 O) r77
1 W-âW 1988ñ0R pÊ P S17 23:  k m å ÌtF 28 23Ì 2192v!14  i É1 T8 ÉR  2©KF 294 !21Ã4 k Ÿ	¡ 2 -O ž 2 Õ Ö c26 192a3M ¾ 2=Ap ¤ ó  U ó 2ó  – ®p 3Ú  6 a ç2932×‹  !32 V /3ú  Ap	`34 193�?O ST q�
ñ36« 3‹  Q ,26  A
¨  Nv	�4%f 40Ê‘5k �4g œ4ã!45rÝ 4h¢5 22s 2 M
ç  u Â 2ÙX j2¯ “ 3¿ ‹
W 3Ê  ” !Au“ 2y ¶  È¶ "Ap" 1› ®è@  › ¢š  ¦4 ] =   p #5W¾ pS?   ? 7L2À7 0s 1 S
R pð
 1977 o - S 25 0s 0 -
R p 8 À9 - Ap Su>=1  61 S   9 !O  8 a9 1982T ˆlastSu 1X !80q CMar  60s W $81? " 1" 3A 2 üZ Europe/Lisbon -0:36:45 - LMT 1884
 `912 JaÄ ðu
0 p WE%sT 1966÷  3 2
1 - CE  76'96 1*  83 •5 1s
0 W-B  92 7 S1 E CY 096 Ù @31 1r E0 ù
Z Atlantic/Azores -1:42:40¾ `1:54:3]HÒ ¾ à2u
-2 p -02/-0C 42Á b25 22s `+00 19 7u 1 4 34 -174 v3 Au 28 4 44 &22 h 44 6 4 54 1 4 54 œ ‘!-1é "1/5 € -1�$-0 ƒ#0 jQ 1993ƒ 28ƒ-�3 †pMadeira‡K7:36† F…;1u
œ  mpZ… ¸ +�…  ‚  ¡	…  4 	…  4 	…  4 	…  4 	…  4 	…  4 …,‚g“
R z 1932¬1y 2(é 0193`O_G 3?   2   &79Z 37 0B S_Õ  }wAp 5 235  5 15 9PA93 -7µ W " A L”õBucharest 1:44:24RV91 O
 BTó 31 Jul 24
2 z E=!81ƒ •29 2s
2 c )91( 97 e R7
2 E 
’ ð Kaliningrad 1:2U'9‚E
1 cµ4,b10
2 OG  ©#Ð7
3 R MSK/MSD»9£ 6£ R/ 3201¼ 7  MÃ+03 2014 O 2. V- EET¢ åMoscow 2:30:171680
 M/!16/3 á1:19 R %s 1919 A1 0u¨  2q
¶ P22 O
Eê‘30 Jun 215 Ý 9Ä  31Ä $2 Ý 2199F˜Z ÷  õ:MSK÷  6MSK÷ ø Simferopol 2:16,û 1ŽSø �24 May 2¼ -™ «41 NÑÀsT 1944 Ap 1ð3
3 R MSK/MSD 1990
3 -  ð Jul 1 2
2 - EET   ae EE%s �4 May
3 e5 F ó6 Mar 31 0s
3 1 ] €6 O 27 3 	v 7v 7= ÓlastSu 1u
2 Eo 0201o ƒr 30 2
4©  `O 26 2Y ¾ ð
Z Europe/Astrakhan 3:12:1Ê  LM» 2L  » ñ- +03 1930 Jun 21
4 R +04/+05 1989’ a   P3/+041  31|  ‘  2  29  b"+02 22012  27 2 Ã  ‘ 2201H	, Ú óVolgograd 2:57:40 - Ú P0 Ja ÜÛ    ¼ m61 N 1í 8»   » 2199» í E88@20 D3Ú6+03 åSaratov 3:4:18ý #19¶!0uV KÜï fW6 D 4î Ù 1Kir× O18:4Ø &´bÄ ÖSamara 3:20:2š�ž 35Ä/27Œ$2Â"2/þT91 S Ž b  ï 91q90 3c B2010‹½ô �UlyanovskkO3:36”%¼ä 211sCð	Asia/Yekaterinburg 4:2:3-t!16wÁ3
3:45:5 - Pfò15 4²!k5©^5/+06P k†9à 5 – u L 	S � a+05
Z É ¹Omsk 4:53:3›SN 14
, 	6¥ \6/+07¥ ‹ (19¥ 5 ¥  7 …)7 ¥ º ¥ °Barnaul 5:3“ fs9 D 10
, 	¥ 7¥ \7/+08¥ ‹ Ð1992 Ja 19 2sñ
7 R +07/+08 1995 May 28
6 ð	6/+07 2011 Mar 27 2s
7 -3   `4 O 26 6 6 6, ô
Z Asia/Novosibirsk 5:31:40 - LMT 1919 D 14 6
L ¼1930 Jun 21¨ � "31{  Ã «  1992 Ja 19 Ý 3Ý 3Ý +bJul 24_ 	Ý 2Tom× J9:51× /22Õ CA2002Õ /1 Ö ,÷5	Ö  ³akuznetÝ U48:48Ý  24~ Ü E"10J8m‘ˆ€Krasnoyae`6:11:2Qe 20cD( ' W6201(=¬ @IrkuYd6:57:5XE880
 I¹ %25~8­P8/+09Å5 º 9Í9Íº Ï º ÔChita 7:33:52¹ Å#5
-  ¦ 9¦ \9/+10¦ Œ 
Ã5 ¦ 1< M 	az 6201‰
Ò ½ "Yaw`8:38:53 „¿ i© öVladivostok 8:47:3Zt22 N 15Ü 	l 10ml10/+11mS
m	6 n y  N 	n„Yÿ Khandyga 9:2:13U?04
¼ �1 S 13 0s2 -- @�ØSakhalin 9:30û‡05 Au 234 A5
11~\1/+12~	¨ 7 7ÿ`lastSu	; Ÿ ÊÀ2s
11 - +11
ñLZ Asia/Magadan 10:3:12 - LMT 1924 May 2
10 - +10 1930 Jun 21
11 R +11/+12 1991 Mar 31 2s
10 P0/+11 q2 Ja 19 1 17 22017 !27  | Ñ+12 2014 O 26 ~ ¡2016 Ap 24 1• #1
Æ ÐSrednekolymskÌ @14:5Q Í {¶ õUst-Nera 9:32:54}�19 D 15
8æ )08{9C209/“_81 Ap�M�1 S 13 0si  1¥Ž�KamchatkaŠU34:36Ú v22 N 10I 	V2Ü `12/+13:V;8199V7 P2010 �#28)R©r· çAnadyr 11:49:5´  R £	µ 3µ  3/+14 1982¦1-˜ 1%Ï JðEurope/Belgrade 1:2» @884
ˆ CEç4@ñ  18 23
1 c CE%s 5% 5Qb 1 CES$  §2 - Q 8áb27
1 EM <
L �  ŸLjubljana# �Podgoric# �SarajevoE oSkopje  fZagreb  ePrague¶ ñratislava
R s 1918 o -æ†5 23 1 S ô1919 - O 6 24s 0 - 96 65 $24 1 ;O 4L %263 7M 6»‚ \Sa>=1: 7: 99 Õ 0Ô 2¸ *203 3L  º  ;O 2€ 3g 2M  3g 32 M93 L ™ 3™ ;O 7d !42ä ¾
e  WS 1 1›4m4ð1Ap 638 !  Ÿ@O SuV	? A5 19? ŠS lastSu^ ¨ 2Ap Ú /4  Ú P 7G"75c� ,! � 7Ð76 1977 - S lôastSu 1 0 -
R s 1977 o - Ap 2 23 1 S 8 s cO 1 2sJ bSp 196K ƒJun 3 123   4 03 !74e  3 H24 03  S® ° K "76¶ Q- May ´  Î ä 6 œ ZS 28 ‚ ç  ‚  L  0Au š  L ð+Z Europe/Madrid -0:14:44 - LMT 1900 D 31 23:45:16
0 s WE%s ó40 Mar 16 23
1 s C b79
1 E ð 
Z Africa/Ceutac _21:16c À38:44
0 - WEa !18`  K3WES 0O 7u + 28 › '29G u67
0 Sp¸ #84¸ a
1 - Ck *86³ ötlantic/Canary -1:1:3µ  22C  
-A ÷ -01 1946 S 30 1y  80‡W6 0s
¿ 180 ¶b1u
0 E– 
ŠôStockholm 1:12:12)8V:¡A - Sµ '00Â !16- 14S1 1 C. 6 ¦1+ 88  @R CHÀ Å  n  †0M>=C =  !O  2÷¸ ÕZurich 0:34:8´ p53 Jul 9P:29:4BBZ�894 Jun
1~ 88¥ ˜ ì6P ” Î  Û ÿ  #200 rÂ  EO 251 12 EAp 3° O  -!R  2/  ù*261  &O ‘1 Â b �4 1925 -¡	Æ 5e  M 4ß T	}   O ” ®  DWG ô 0S 2U/ Ã ,Ap0 � Û 4�
k`  � 47i €Ap Su>=1® £  5TO  c� 9 �  ,7 5  
P 5ç   K 2 6è G  3e OË f  V Ò 6Æ2  ì 7I   …b  73ï 	å  ^K`& ` 9 …  422 Ž � 7o 1  r7r Œ 015 )õ 71 Ä )2958Þ lç Œ  O~× 8½  ‹40 1~1    093 3r lêð s 1 S
R T 1986 ð1995 - S lastSu 1s 0 -
R T 1994 o - Mar 20 41 S c5 2006 = " 6" O] ðZ Europe/Istanbul 1:55:52 - LMT 1880
1:56:5a I à910 O
2 T EE%s� ÷78 Jun 29
3 T +03/+04 1984 N 1 2- ƒ2007
2 E< B2011Õ P7 1u
w FEET  8 0 40 "30 #- 0  1 0 b5 O 25 Q1 EES_ N5 N \ �6 S 7
3 -Å -
LEAsia+
=¨Kiev 2:2:47 K52¡ y´ B193071r óMSK 1941 S 20
1 c C_ð43 N 6
3 R MSK/MSD = l^Ø 1199? s9 3
2 ed Xs¶ ð Uzhgorod 1:29:1|ó9à`1 - CEÞ4Ž �4 O
1 1 CK@1944a'6
1 5Ø  
³ é 9À : 9!31Á (9AÎ  ZaporozhyeŠK0:40Œ  0+02>9�\Au 25Ž Q�º ­ €R u 1918 9°l2 1 D
! ¯12 0ð @ !42@F 9 6 W6 !45 ÚAu 14 23u 1 P XS 30 J -67 0197$Ap8 r ¨ 7”AJa 6Š  Š F4 6 LT 8“ ‡Ap Su>=1[  =3 ma:  8 N:  6 Z ©-\ÀEST
Z MST -7F  H 1H ÐEST5EDT -5 u ƒ€
Z CST6C s6 u C%sG  7M R7 u M PPST8P P8 u P ‘R NY 1920ž À¢J ð _1 1964! 5}=È  $55A a ðZ America/New_York -4î8} ³u2:3:58
Õ   !NY& ½2 5  6   67  Q
R ChC  ?%13Í 0192¶ ; 1; S ? 2õ j! 6  6ð Chicago -5:50:3£C6d9:24
-8ó   ðCh C%sT 1936 Mar 1ð 2
-5 - EST 1936 N 15 €6 Ch C%s u42
-6 u 6   67  ð#
Z America/North_Dakota/Center -6:45:12 - LMT 1883r ò8 12:14:48
-7 u Mx c92 O 2� ` “New_Salemc /39c '21c @2003c 6ò c aBeulah` ?7:7_ I2:53_ i10 N 7^ �R De 1920 ö1 - Mar lastSu 2 1 D
" Vo - O 50 S  1  —May 22 2  Æ65 1966 - Ap< Y ! \ ¼BDenv¯@59:5L ¯70:4ë  Ñ   $De½ 5Ì*46  5 £
R CA 1948Õ ƒr 14 2:1 9 EJa 1ð  5Jð 	: !  kS1A $621ÿLos_Angeles -7:52:58¢7:2
-8 u PÂ ö 8Ý   ö  +ÖJuneau 15:2:1ºp67 O 19 @33:3[ P:57:4Ë �p900 Au L  A - PÈ |g  X6•   69 £  80(2¥R9 u Yº %80J 8/ 30Ñ,  Å@30
- WAK%sTÜ ÖSitka 14:58:47Ü  : T:1:13SØ 2«  MetlakatlasF13:4©° Õ44:55
-8:46:1´ < X  Í@2015#s_� 2018 N 4 * @9 Ja2‹pYakutat�041:÷F8Ü  ˆ•8
-9:18:5" 
Ü  ¡Yh ô4 î  h ê%�Anchorageœ D0:24
œ p4:31:37œ E59:3”
œ  10ø� b10 u AÒr67 Ap
-" H#  £ # H$ à @Nome¿O58:2/ ð 3:29:35
-11:1:3­u·  ÓN”  ¼b11 u N“  U1 Æ   B1 Å  1 B1 Ä Àu AK%sT
Z Amðerica/Adak 12:13:22 - LMT 1867 O 19 ô 44:35
-11:46:38# À900 Au 20 12 ¢ - NST 194 Qu N%s 6 S67 Ap B1 !69 2u B1 €83 O 30 H e0 u AH pN 30
-1   ô
Z Pacific/Honolulu -10:31:26© ’896 Ja 13© �0:30 - H{ U33 Apl   @1 HD¶ —33 May 216  u u  ã s7 Jun 8£ N R
Z AmSõ Phoenix -7:28:13°883 N 18 11£  )R7 u Mß !44§ ± 0:1
-7 - M£  44£ 1 / %O  .  67< % †68 Mar 2R § PBoise¥ U44:49/¥ â2:15:11
-8 u P¥ 2 13û ½  74x † Y74 F # P
R In:Q1 o ->‡22 2 1 D õ1954 - S lastSu 2 0 S  #6   &Ap!  A zƒIndiana/ �polis -5:Ä‡ â “22
-6 u Câ 0 $In  ¦ *46  55Ÿ 24Q5 - Eµp57 S 29  ˆC 8+ 7 +  þR5 u E D71
- @2006  P
R MaC
 C; P4 196ÿ> ! A cqMarengo^O5:23@@4:370^ 51 $Ma^ 61í÷ ,1968Q6 1 C¡c74 O 2M"A 1971‡?V�6�  ü  R   53| Ÿ<    G? 5x  T31 0øX  ×6?X !609 Oó < 6q  62ì X ; Ë�Vincenne+050:}@9:53¼Ë
VÊ¨2¦ÊÞ ý2ØX s2007 N PØP
R Pe~D Ù  e! /61.‘Tell_Cityû 7:c.J12:5ú//Pe0 x9 )íN 9i9À 1 0 1 D
R Pñi 1955 1960 - S lastSu 2 0 S
R P  6  f4 - Ap! 41 D! $61! O   A ñ8Z America/Indiana/Petersburg -5:49:7 - LMT 1883 N 18 12:10:53
-6 u C%sT¤   3Pi   65� Ð25 2
-5 - EST„ `6 O 30 < %77 + A2006A 	+ €2007 N 4 ð5 u E%sT
R St 1947` 1! 5&F  f[56 - %a 5a /58†@ 9� @ eAKnox_06:3×`@3:30Q` 47 %St`29``3 O 27 `%91 `
 /uKP ™ P ! KP  K   KÑ+sWinamac.2À .5.6 P  61.y C Ž9œGP 1971 K€`Mar 11cƒ· QVevayµ 00:1Tµ @9:44¦ ¥  54¥ 3¥ 3¥   Â ò
R v 1921 o - May 1 2  S  ý0 40 ê 4  1 6i 9 70:1o 4 UJun 2¯ 8 $50(; ¨   5¦w 5� ègñKentucky/Louisville‹?3:2ÍI6:58Š 21 vl 42 ¨4] ’61 Jul 23@F1968› ]`4 Ja 6$ `6 1 CD'74™ÆLÇ  MonticelloÇ @39:2ÆRA20:3› ª 2- C}å @2000} A} 1R DL8Û  ž¸ qDetroit¬ 02:1«¬ !90¥� "15¥# mYŒ G!Dtì 9 7 SQ14 0:°º   )7(  75G  �(l Q
R Meq ü  ü ; 6ó×;  ¶ðMenominee -5:50:27 - LðMT 1885 S 18 12
-6 u C%sT 1946 $Me ð69 Ap 27 2
-5 - ES& !73 9 = Ð
R C 1918 o - Š14 2 1 D OM C 0 S !421 1F 9/ W 5 0Au H j3u 1 P gS 30 2J r74 1986~ alastSuS ‚ `74 200  %O  ‰ $87 ‡Ap Su>=1> Ñ2007 ma - Mar 8 N  : Y j7Ë &p 4  ES 17È  90 ƒMay 5 23D  2 d `20 193¢ 7 ¾ ; ! ý 3= [  36þ1á ‡y M>=9 0z  O  w} 4< #50<  } 
é   O2ï /51· š   l59 - S·  6ú öÙ Ø 8} ˜ W1 0:1× ô=  ! Û 8Ï? 02 DS } -894 @ öj  U1W8"  =<    ‚ òZ America/St_Johns -3:30:52 - LÇ%4
 2j NÅ&18 C 9 * !35Ð"30   042 I#11 G  ! … + i2011 N& 
¹ ðGoose_Bay -4:1:4ç ¹ 1- NW¸ ) ·  6‰ È A1966 15ÖP4 j ANà 14 C @
R HÔ6¤EAp 1( O  Å/ !20/  SX 0  @Au 2 2 12 6b 2/2SS 5 0ëL J Ap½ Z3 192   ´:S 4P 4ƒ ;S 1h ›JS 280  å 1´  0S 1så �2 
å  0S 2I 1 8çOyL ƒ oê ¯+S MR*S  3–á 3c3cJM>=23gµ !330€ O÷Í 3` I 2ÈÇ  !S H2 z1JunK 1   K  ] 3yàJun 1 0 1 D
R ñ	H 1936 o - S 14 0 0 S
R  7 ø8 - May Su>=1 0 1 D  !41; KM>=2> 9V  ; )288 Q40 198   X  46  ÷ 9 - Ap lastSu 2x   S · 51 1954?   ?  ~ 5~ 5  ? 62 1973~   O½ ð
Z America/Halifax -4:14:2Ê ð	LMT 1902 Jun 15
-4 H A%s  18 C 9  �42 F 9 2s %  46 %  74  
‰ ðGlace_Bay -3:59:4‹  9  v3H W 5W @- AS¨ )72 	t 0R ol3 15 -ç  38 1ù
  S�  ø  ™3£  % >  < ¯
  >   > ¯7v 9�çZSa>=29 %40è)199 %41 4  ª /72$ ª á!56Y « 5˜? CF`93 200> !Ap'@1 0:´  ¸ _ ! @  !  a üqMoncton… 9:Vù�883 D 9
-¦EØ	–3o–4ý € 7-  9  @20079 ž Blanc-Sabl§ g3:48:2¨ |5  ’0D ‹„
R t 191ñ”r 30 23:3Ü EO 26  %20Ô2• S1 *152  !S   ~™ 2B2B88    àÈ W ? i4 1927¶>©  >3  ? 2? 8„  >  F ? 3  /40¼  3?   45M½ Û ‹ø  º 4[   ´4   { Ï? ñNw 5“¶ < 5÷< 2' pÓ ® Ïn> lð Toronto -5:17:3m 95i3C Eêxt Û%5 %  [%5 %  g =Àica/Thunder_ñBay -5:57 - LMT 1895
-6 - CST 1910
-5 - E  42 PC E%s 7 t 3 ,  74 , ñ
Z America/Nipigonu 93:4w "5 /   1940 S 29C @1 EDn �42 F 9 2s ) X ðRainy_River -6:18:1Æ Ô 2C C¸ ] \6 1 C] "6 ) ] €AtikokanZ I6:28¶ 0 ¶ Y 
 ) q5 S 30 P2@
R Wpú6 o - Ap 23 0 1 D ¤S 17 0 0 S 81 H14 21  gO 27 21 !371 iMay 162  0S 2 c !422 }C 1 Wz !45 0Au z j3u 1 P ‰S lastSu€ 4â € 2€  JO 132 729R 4  q !50¨ q 	p  ‰"51 1960p   5p 9p Oý 6Œ 8 !638 &Ap9 ä  0S 24œ`66 198ê8 s`66 200Ã‘ sí $87  ¢Ap Su>=1 2@ ´€Winnipegÿ@28:3o Y�87 Jul 164W`1200 F0R rØŽ!Ap-   	§  `30 193  ¹™ 
  O·  1Ã = 8M  f:   Q ©  1k 9ˆ U  
9 &  5 &  &”8¸ … Ý  ø Ín+  v 5»<  GFbSw 195V:  ;  W6W> – > 6(> Ò ¿`Regina½5½Â905 S
-7 r M 60yb Ó	ðSwift_Current -7:11:2*R CR *46R m  50| $Sw+ *72+  e‚CST
R EdA3191Òî  Óï > F ÀS
R Ed 1920 ö1923 - Ap lastSu 2 1 D
R Ed 1920 o - O 50 S 1"  > S  !42= 1F 9U W8 !45 ÛAu 14 23u 1 P Q 79 ¬ 4 ; 72 1986ê `72 200! í ðZ America/Edmonton -7:33:52 - LMT 1906 S
-740M%s  87  C  ¤
R Va 1918¿  ø g rO 27 2 c C  C KS 30M 6: 6¡ 0S 2²‡ �7 1961 - ^9 6=ôVancouver -8:12:28>`884
-8#P<@8 C  
ÀDawson_CreekE 00:5¯‚D 4 Z 1947S Q72 Au —W- MSTZ �Fort_NelsÜ8:10:47ž  46[ @- PSèi  ø¼ ß 2015 Mar 8 2x CCresPI46:4s  � Mc H16 Os h18 JunR ?R Y_ 	^ 9ïaMay 25£ ø SN 1 0�  Ž  � 	Œ  63 Ê «D  ‰æ /80Å Z /80È? 7 ƒAp Su>=1ù hðPangnirtung 0 - -0s ’21
-4 Y A¤ 953A s
-5 C E `9 O 31 P6 C C a2000 OW, �wIqaluito 4± , YX )ˆResoluteY 7
o1
-6 Yž P- EST&1ã 01 3+ É 6É + 7ç1- à ¸Rankin_Inleå  57[ † Y ×Cambridge_Bayæ  20pYO 199”Ë P0 N 5˜ <- C#7 Ò.¨Yellowkniff)35€ 8� < gInuvik·  53éYúP 1979‚˜R ÷Whitehorse -9:0:1¤0ù Ð9 Y Y%sT 1967ð May 28
-8 Y P%sT 1980 C ð2020 N
-7 - MST
Z America/Dawson -9:17:40 - LM? ò 00 Au 20
-9 Y YT O73 Oh ùR m 1939 o - F 5 0 1 D
 PJun 2 30 S !401 9D 91 !41 wAp 1 0 / 3 AD 160 WG 4  
1 5` AF 121 ’  PJul 3a c `96 200§Ap Su>=1 2Ë  �O lastSu Z Ð 2200¹  ‰ <  S9 2 ma - u  3200 s ÜåCancun -5:47:4ÛP22 JaCà:12:56
-6 - CSöâ81 D 23
-5 m Eõ!98
  2) 0m C €2015 F 1 Y5 - ET`Meridax _58:28y !:3O x  M  À2‹ t ´ÈMatamoros -6´2¾ `31 23:¹× 8H u¼ @1989 Ë 0  f �onterreyf 01:1P i P18:44@ Ë l ] ‘exico_Cit_ G36:3_ ¡ Ê 4·` 1927 0!10¦ 3 ¹x30 N 15+ !31   I31 O' @2 Ap! @01 S ¢mF"6 ) Í pOjinaga(5Ej2’È K‰9Ú­ A 199˜ 8T33m MÙ0 u ä ðChihuahua -7:4:2A55:4? fç ‡Ø  HermosilloÙ V23:52°P@36:8Ù X4™) 2ÿ!49»4Û1- P´7rÀE1999¨ ç €Mazatlanå  ¥ä 5×= ¾Så !× Àrica/Bahia_Bñanderas -7:1 - LMT 1921 D 31 23:59
-7 - MS ñ7 Jun 10 23
-6 - C x30 N 15+ p31 May E 	* 91 O' H2 Ap! 4 8 24% ñ 49 Ja 14
-8 - Ps  70" ðm M%sT 2010 Ap 4 2L ð	m C%sT
Z America/Tijuanaæ F48:4é 2Y € 0:11:56R ë 	n 2ù ù ™ !31Ò `8 1 PD5x31 S 30½ å ' W' À45 Au 14 23u, C1 PP @N 12 ü  48í 5 e #5Ã @CA P$@19612 E  76 u 9 m 1200,  �2002 F 2Ä # 1 # À
R BS 1942 o.úU4 1 W 4 YU4 0 S 5 YF 1 02   R4 iO 17 2N ø64 1975 - O lastSu 2n   &Ap! 71 D0åNassau -5:9:30/`12 Mard5ï EW I@5 u   Ÿ B€ 7Ó -@2 2 _ 3R B 01970vO Su>=1Ÿ  P8 198t "Ap  5@ 9[  S
: #80 22  `õBarbados -3:58:29Ô  j B P32
-4® AG€R BZ 191™ 4%AO Sa¸ 14 0@0530ú ' 91- F' 8Ÿ4CST" $ 2½F1 CW õ,CP ND 15X P7 196œ¡ 
4È 6€¡ !73I1D 5�%CD 7ÄpF 9 0 0ýÕ 8ùLD 185 8O 0F 1ˆ6 šPelizek@52:4— „1 ÍPBZ %sg e…X1Ap  ;1 -   8Ï PAp 1355  SO” i ¥0a 1¡À Oê  Ñ 3 è "4  OU�M  ­4­ 7  8î
! Nô  j =  l S;  Z  1R B  #52® > 2ª
" A  Õ A !56X| >  …õZ Atlantic/Bermuda -4:19:1ûE890
 �Be BMT/Bô"30¯Ÿ e Ÿ m4 28™54 C 6Æu P
R CR+ ð9 1980 - F lastSôu 0 1 D
R CR 1979 1980 - Jun Su>=1 0 0 S! p91 1992! Ša Sa>=15B @91 o <ul ; 2 AMar 5  V ÷Z America/Costa_Rica -5:36:13 - LMT 1890
  SJ À921 Ja 15
-6¼ ÑC%sT
R Q 1928i  Â 1½ à  !O   � 2 a40 194Ö ÷ 8   S V  45> 6ö 5>   > &65® K W  0S 3Å ­ !661 jMay 292  5O 2µI 71 JAp 8/ ’7 1968 - ˜   g FZAp 147  $Ö77 - Ap lastSEo   V1 - O X  72h4 
r 7(Y 9 ‘  ø 7‘  78” µOžV  � Ó zÓ³ ° 8ÓP85 - [  !   69  ra 9>9 @  ùÿ3 ` Ÿ sS  9µ96 0 ¶KO 12 ï � �sÇS P8 200@I[ D2000  "ApÑ  b ² A20041 0_ ‚2006 201p  â2200º  ?  8] ÇL5 9] @ 1a  Kü #20 @N 13Y – 1 Ð  î –12 ma - N6 3 o Í ºQHavan¶@29:2O¶@29:3Hµ05 J£9 12
-5 Q ¸ DOŒò@1 EDÓ T2F 2Þ&ES  á7îá 0:30 -0430
R B !70Õ0F 2Ÿ'0 B 7SBJa 2k ¯  ;  óSanto_Domingo -4:3ó 04:4/!SD 33:1RDO %s`O 27
-0AST£00 Oä+Su E%s UD 3 1* P
R SV¤ Ð8�É ¯ é! SšÍ °El_Salvadorˆ@56:4Q Ë 0921m$SVµ GT¸ 3X6N 27 F0F 2@S 82  ¥ Œ¢  6S 2Ã W ‡%23þ  S g § Š"ApAf Ð2006 o - O 1 ôF0 0 S
Z America/Guatemala -6:2:4 - LMT 1918 O 5
-6 GT C%sT
R HT 1983 o - May 8 0 1 D
 4 ê7 - Ap lastSu ! 3! O   � A S8 199A ˜Su>=1 1s b ! A !1sÒ B ’2005 2006ƒ B ‚   A @ €12 2015 à  r A 68 2‚ &20! N 81 2€ _17 ma>  
< ŽôPort-au-Prince -4:49:20•A890
 R - PP§Ð7 Ja 24 12
-5¢E¬NlA1988‘ y° 
! S’NKí 1Ð @Au M¬JÎ ôTegucigalpa -5:48:52Ë `921 Ap_"HN_8 aJamaic4 :7:1þ #5: Kÿ 02 Fø @- ES¶ 74  u     ô’Martiniquba  "FFd p1 May
-Af  80â6 @1 ADy p80 S 28 @- AS.pNI 1979‡  Ä "MaQ%16E" 0JunI223 J@R NI„ 5 „@Ap 1  OÚL 66 %30Ã 6  ÔaManagu~045:<|`5:45:1ÅM034 µ  23É1- C"730 F–`5 F 16% !NIî è2º&1 £ @S 24* O  93ÓÄ ! 7 F Ô@PanazM5:18µ @19:3Cµ  08¾20W %
LG hCaymang  uerto_Ricož@24:2ç " 9 å!28�/ 42  3Pu A%s14?,ûM–°lon -3:44:49] !91†0 15F 7 Y›b3 - -0^P
-3 C G/-02»  Grand_Turkº @44:3È] ÜZ9‡Z$ ì 68 2� A2018 11í "5 . ‘
R A 1930‘ D q41 - 1  Þ÷ AO 150 A2 19 €  L 0L   k39 - Nf 4} <Jul   Æi M 4 � 4 !AuJ 0  0 ‰® 4 OH 6H 	 D6u6Þb  À - O 15 0 1 ÷	-
R A 1967 o - Ap 2 0 0  ö1968 - O Su>=1 0 1 8; 99  = !74U YJa 238  @May Q 2 !882 D h Õ89 1993 - Marˆ 7   2¦ 5o !99V Â A2000  W  £ S 22000D 3‹ €2008 200ó  4 ô  m 9 Ã m    = ðZ America/Argentina/Buenos_Aires -3:53:4jòLMT 1894 O 31
-4:16 C ð920 May
-4 - -04 1930 D A B/-03–pO 5
-3  P3/-02D9U 
,  Í 3. 
³ ‡Cordoba • ® I1ð3° ì y91 O 20« Ù 0ASalt× �21:40 - × ž —`8 O 18 /3ÃpTucumanÃ@20:55ì •Õ  è V4 Jun1200 / 1ÃrLa_Riojí07:2GN¬ 0199Ö0y 7§œ ¯bSan_Ju?34:£ M/;l 2QJujuy&?1:1&M Ó9r 4'0é8 "1 Ô:@r 17   ý6M ' å2 [À4/-03 2000 Mðar 3
-3 A -03/-02 2008 O 18 - ð4
Z America/Argentina/Catamarca -4:23:8 - LMT 1894 O 31
-4:16:48 - C °920 May
-4 W €4 1930 D  ~ à4/-03 1969 O 5}   ” b1991 M¬ > }91 O 20+  A 3W 0200} í   3é P4 Jun*   4 U aMendoz_35:16LÒ 4À @1990»5 1» :  å  :O 1% 2_	% 2J 	ˆ]QMay 2Š{ š2004 S 26³^ @R Sa�8 09 -ž Ô Su>=8 0 0 -
! 7!  |O ?1 -²�San_Luis±05:2I²I™ †2†­1®"¥36 "9„ ^ É^ Ê k 4n‰; à;l 2`‚@Ja 2¶ {"-0�0200m  11²Z [±Rio_Gallego__36:52þL ˜ \ Ÿ® 	A ð%-0næ%bUshuaiæ?3:1è y q&30Çq/Juë LåuCuracao WArubaø`La_PazGG32:3æ z : Cô3¤l P1 BSTûrr ZP4
R B P1 o -C@ 11 Í  G3EAp 13 23 02 Q49 19ˆD1 L !501  I 6  Q J $513   	e !534  †
~ 6 HD 9 ~ /640 5 @Ja 3I – 6  b  è —  Ç  660 þ 4  M 3  Q7 - Nâ g Ð85 o - N 2 0 ü1 -
R B 1986 o - Mar 15 0 0 0O 2 2 72 JF 140  0 80 7/  wO 16 0 _ 9/ ZJa 291  O¨ 1 !901 IF 110  0O 2 0 10 
‘ 9 0O 20 20 
� 9 ï !93/ @Ja 3x Pñ93 1995 - O Su>=¯ g 4 F  v> ¨æ  *O F9�F^G  / �
E O]® �F]`  7O 3Õ4200¤2t E200186 Ÿ1 2006 -  2200‚Nl �0O 1±³ A2004™:N 2e 5 ˆx   N ˆF AFù 2200 ÛÇ e8 2017å hR   æ 1æ  2¼ u  13Z 4!1Û ; 6; 9; øN‹1ð"Z America/Noronha -2:9:40 - LMT 1914
-2 B -02/-01Ò`0 S 17 -   `9 S 30 *  Ü  * @S 13 	* 02 O ' 
– ÐBelem -3:13:57• 3• P3/-02õ8• P2
-3 D 3D bSantarG Y38:48Ü 4G @4/-0Í8G  ‚0-04®�8 Jun 24\ �Fortalez835 ¡ 96¡ 6Ë 62Ë  „ 1Þ 3‚  6õ /O ò `RecifeËO19:37	– %15o – ‘AraguainaÐ2‰/19™ 5‡	83 Sž  2 $ ¬ * @13 S /`Maceio/Y22:52– OÑ* A6 S ¬ n îCÀerica/Bahia ñ-2:34:4 - LMT 1914
-3 B -03/-02 2003 S 2 - ¬ 2011 O 16* p12 O 21 * ÿ
Z America/Sao_Paulo -3:6:28q @1963G 3G  1 „ 1196 – Y ÀCampo_Grande\ ,38] 4Î X4/-038 Puiaba2 Y44:20� 2   %0-04 W4 O
-' Y ÿPorto_Velho -4:15:36^ �1988 S 12N  44J �Boa_VistaH ?2:4¥ G   1999 S 30Z  9 ¼ 0¼5 q `Manausn 0ë  m %8V m @1994<Þ €Eirunepeo ,39µ5µ 5/pq  5 ´ 5Þ q 
* q * �2008 JunÂÂ“13 N 10
-( w‘Rio_BrancÀY31:12À
q ÀI  bq ð R x 1927 1931 -s 0 1 -
 8  { …Ap 1 0 0 ×68 o - N 3 4u3 !69 ˜Mar 30 3u3  ;N 24 %704 *294 %71 +14 P0 197� zO Su>=9‰  72& ÷ Œ ! 	� !73[   : 4: O7 - Y !878  2’ 8/9#s ! /89Z 9JS 16’  91nÌ ! ³ 9³  – •9È  $  KS 27’ Ì;Ap – 99œ = @2000� © r * X  
« 2200t   « 2201=!Ap1š-V y 	¸ !Au 
}0201�1·\ +23] ! SA 2+@2016 m"Ma 	ä! ‚ 	Ê¤2019 ma -  ~  | ÷QntiagJ@42:4Gh 89™: S|H0 Ja– �Œ6 Jul
-4, 8 E  7/19+ @27 SéAx -0RÀ 1932 S
-4 -ò -04 1942 Jun
-5 - -05 QAu
-4 # €6 Jul 15 P1 -03& 06 S  6 % I7 ApG °7 May 21 23) xq ð!/-03
Z America/Punta_Arenas -4:43:40 - LMT 1890
 €2:46 - S ˜910 Ja 10j 1  ,  18 S+ Ë  19Ë +  27Î  5 ¥ "5/ 32 < *Á 2016 D 4
-3i ùPacific/Easter -7:17:28 E¦ 7º ñ7/-06 1982 Mar 14 3u
-6 P6/-05{antarct~`almer qq-00 196âA©  P9 O 5¤   T3/-02` yÕÐ  ÑR CO 1992 o -„3 0 1 -
 3 `Ap 4 0‡  Ÿ `Bogota@56:1 "84Û  S: B
A14 Nl5y !-0ÈS pCuracaoT T35:47W€912 F 123&43u- AST
L´G ÄßLower_Princes( ö Kralendijk
R ECEN 28 =F 5ðGuayaquil -5:19:2±  /05:1±Q 31& ECØ Ô4
Z b�GalapagosG @58:26 G 96  ×  86AD B�R FK 1937  ›…S lastSuÃ   8$2ùƒr Su>=19Í B 9þ:O 1: 4{4: Z 4 
Q 8 6 8¤8å&Ap± 0�± !84� JS 16� `85 200gSÈ  Ç Å8 6 !Ap  @ Y @2001 @ ! 15 2î	! a 11 2&÷	Z Atlantic/Stanley -3:51­# S÷1þ Ñ ­0-04w ¸3‡ Î FKÇÏ5(ü /  2010 S 5 21   £öpCayenne’ 2†3911bÖ vO67 OC `GuyanaB '52÷0915ãP
-3:4°@-034Š 75Y  Ÿ2 C1† � �4
R y 197, 8™Z 7 = 9M Q - Ap‘Á  8¨2¶ú  !901f #91 G. r_ Oì^ Í ª 3!� 9~9{  n Fãƒ à6 o - Mar 1 0 ö0 -
R y 1996 2001 - O Su>=1 0 1 ÷7 o - F lastSu 0 : 8: 5Mar<   @2002  o4 - Ap U3 - S y @2004= 9— 5˜ D2005 | 8œ v2010 ma= 	< v10 2012˜ ; 3; Y #22Z ÷Z America/Asuncion -3:50:40 - LMT 1890
 A  931 O 10
-À-04 1972 O
-ü 0-03 @4 Ap! ñy -04/-03
R PE 1938�6Ja ™ !Ap v 0193:S¶Y  A9 19³ â 4â t ®86 1987 - w  z /90¬  2  42  2 ~ LiÛA5:8:Åy  $36ŒÐ908 Jul 28
-5Mô-05/-04
Z Atlantic/South_Georgia -2:26:8A Í '0-025 ý Paramariboÿ4ÿ0911ÿ@40:58 Pÿ5 ›  !45  :3:P-0330r4 0 -  ð ðPort_of_Spain -4:6:Jø @912 Ç2=u- AST
L§
9 ½nguilla) Otigu( Dominic) oGrenad( Ÿuadeloupe¤ Marigot( �ontserra+ ßSt_BarthelemyY �St_Kitts) OLuciþ �St_ThomaS oVincenÕ ð Tortola
R U 192t!25  W0‰  ¡2G~8 38 3!O[	= 3= 4N –50a 2` p | !39óO·y 4?@O 27�	 15 /Au6  2 0D 1f 	� !43  Š  × … 5… 2May� 	7  0N 1tZ 5 6    ¡ S  h 6º g !65� 0Ap œ 1  ;S 20 í—  c 	— 6 Dd 7– @Ap 2¯ e  3JunÀ -
R U 1972 ð
o - Ap 23 0 1 -
R U 1972  ¦Jul 16 0 0 4 1a 13 -:3 PMar 14 0  ?S 1P JD 22‚ 5h  L 3L ‚ 6 JD 192 7  2 ³  :D 40 8é @9 - 3 KSu>=š 8P JD 178 9  5
� !80  N 58‚ 1ƒ 8c IF 28 0D 1“ —8{  b 51  :O 2“ 9“ :F 20 À90 1991 - O ú 2h  91 290O 1¸   !93Ð 22005S³6200å027 � UO 9 2˜—2006 2015™ 87   4Ø 1> ðZ America/Montevideo -3:44:5÷LMT 1908 Jun 10
 M €20 May
-[  -04 1923 O( ò30 U -0330/-03 1942 D 14
-3 P/-023p6X  ^ 1968& 7& 7L 1L !74¶« S   N	Z 
ð Caracas -4:27:4Ñ þ C890
 Q0 - C÷ p12 F 12  èA -04d &65«2007 D 9 3' @20166` 1 2:3^   -B  
Z Etc/GMTXC GMT 1UTC UUTC
L$         : “Universal&  CZulu  ]  + œGreenwich NMT-0 +  0ž €GMT-14 128+14 3X- +13 02 1C8+12 1Õ , 1 02  n  9 ž7+09* —8 8 - +08 17 7 7 16 6 6  5 :7+05 !4 Ð 0Ð 13 3< Î !2 Ì 0Ì  š7 +0Ê @+1 -Q- 02 -> -> @+3 -g '-0g 4+4 c¤ @+5 -¹ -¹ @+6 -â '-0â @+7 -'-0@+8 -4-4@+9 -]-]P+10 -   € 1Õ Ö 1ë 12 -â-âqFactoryÂ -0I!AfsƒNairobi  …Asmera
L dbidjan pTimbuktÉ´õArgentina/CatamarcaÐ ÁomodRivadavi` óFAdak0 ð tka
L America/Aúrgentina/Buenos_Aires Americ %
L A6 •Catamarca  0 vtikokan% Èoral_Harbour) Y WordobW  , fTijuan" ‡Ensenada# ƒIndiana/ FpoliÜ §Fort_Wayne2 ENuuk¦ wGodthab I Q  f 4 -UJujuy^  ( ? U/Knox%   7_IN' õKentucky/Louisville.  1 € fMendoz2 , uTorontoQ ‡Montreal# –Rio_Branc& ˜Porto_AcrJw C»U wRosarioT Ë¸Santa_Isabe{ eDenverH ‡ShiprockI  Š †_of_SpainðVirgin
L Pacific/Auckland Antarctë‘South_PolÅ ãsia/Ashgabat A `khabado   rKolkata qCalcutt}  ƒShanghai „hongqing<  Gungk CDhakY ODaccV  ?×   SUrumqp  Ka» Y � ’KathmanduŽ 1Kat � CMaca   ™ 7 bYangon4 R oDm ²Ho_Chi_Minh  FSaig ’Jerusalem „Tel_Avivq cThimphs   $bu ‚Makassar9 ¶Ujung_Panda<•Ulaanbaat& �lan_Batoñ ö tlantic/Faroe A 0eroÛ¶Europe/Oslo �Jan_Mayeá õustralia/Sydney A 0ACT©  ! qCanberr±& gHobartG PCurriŒ Z —Lord_Howe' ?LHIn 9NSW! @Darw÷z YNorth# xBrisbang `Queens	* xAdelaid* #	% Û zTasmani0Melè	v kVictor) WPerthIWestp ·Broken_Hill' YŽAwinnw »¨ŠBrazil/A¡Nì3ha  #De  q D ”Sao_Paulo% "Ea‘   dManaus ®   Halifax Ca–/Š_ „Winnipeg# 0Cenz" �D   !er¥e 0Edm±nC bMounta# „St_Johns# àNewfoundland
Lõ America/Vancouver Canada/Pacific
L# dRegina  ÇSaskatchewan% ¤Whitehorse) HYuko" óSantiago Chile/Continental
L v P/EastŒ #  gIslandk @Hava� 0uba fÈ ðCairo Egypt
L Europe/Dublin Eire €tc/UTC E  CT ' dLondon5 gBelfasF „Chisinau! pTiraspo· h A -GBT 7GB-~ �GMT GMT+0( 3tc/ - 	 €reenwichë àsia/Hong_Kong 
 @kong  tl^ô c/Reykjavik Ice8 7 ’Tehran Ir¶  ð Jerusalem IsraeÐ ƒJamaica   b  2 ‘Tokyo JapE ´¥Kwajalein 
  1 ˜ÁTripoli Liby¯x@TijuÆð Mexico/BajaNort¨… @MazaØ  $ 0Sur\ E  T_City% YGenerS@Auck
7 NZiàChatham NZ-CHAw 0Den`Navajom  ú ÇShanghai PRCF …HonoluluÀaJohnstøuPohnpei# PPonapè ! Pago_P @Samo- UChuukA GTruk„ 
 0Yap]Ù�Warsaw Po  ÑLisbon Portug,Aä 0Tai¨  ROâ  •Seoul ROK¤ingapore S
 W ð Istanbul Turkey  jATC Unað Anchorage US/AlP ` ÔBAdak Aeutii9 qPhoenix Prizon$ @ChicDrUS/Cent ƒIndiana/  ’sG  b- „ qNew_Yorˆ  #  erÉŽõ—US/Hawaii; M A/Kno©  `-Starkö“ pDetroit† iMichigë … US/Mountai� ; ¡Los_AngeleÅ ˜  MR4US/M÷ �Tà aniversÎ·Moscow W-SUÄðZulu
# tzdb timezone descriptions (deprecated T ðion)
#
# This file is in the p›ð2c domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
^ þFrom Paul Eggert (2018-06-27): Btende ða backward-compatibilLõaid for older programs.
# New À should use ª1970.tab. ò :lik! y (see
#5 ñ's comments), but with+àfollowing addil al restric !s:f1x !co6ð	s only ASCII characters.ð–
# 2.  The first data column contains exactly one country code.
#
# Because of (2), each row stands for an area that is the intersection
# of a region identified by ‘ u @ andl pa timez” ð8where civil
# clocks have agreed since 1970; this is a narrower definitz 0tha� t¨ 0of _  7 Q.tab.î T? PtableE ±intended asä !idï àusers, to helpî …m selectµ ñ s
# appropriate7 ñ
their practical needs.  I41not4p òto take or
# endorse any posÊ ñon legal or territorial claimsÍ Ì0-
#Îð#	coordinates	TZ			comments
AD	+4230+00131	Europe/Aw òra
AE	+2518+05518	Asia/Dubai
AF	+3431+06912 ÷$Kabul
AG	+1703-06148	America/Antigua
AI	+1812-06304 ôguilla
AL	+4120+01950‘ òTirane
AM	+4011+04430v ðYerevan
AO	-0848+É A4	Afw ñLuanda
AQ	-7750+16636	Antar‹ð/McMurdo	New Zeal„ 3 -  Á, South PoleI ¨6617+11031I aCasey	 & ˜835+07758& aDavis	 & ‰640+1400L ò DumontDUrville	 3-d' : ˜736+06253` rMawson	 ( ‰448-0640÷ rPalmer	 ( ‰734-0680° ƒRothera	 * Ø90022+0393524~ aSyowa	 * Ê720041+00232€ aTroll	 * ‰824+1065P rVostok	 ö 
AR	-3436-05827; rgTòna/Buenos_Aires	   ’ (BA, CF)D  12ê ?411D  ”Cordoba	AV p (most åós: CB, CC, CN, ER, FM, MN, SE, S` ¯2447-06525`  aSalta	 ò (SA, LP, NQ, RNž @2411>  p<Œ q/Jujuy	 C (JY2 16492 3p  ƒTucuman	 C (TM6  82/54J¥Catamarca	
 ó (CT); Chubut (CHG �926-0665MÁLa_Rioja	La 	 B (LR8 03138Eç ÐSan_Juan	San 	 C (SJ8  25[?849í  M03za	 C (MZ6  31#/62¦  n ALuisn  	 B (SL8 0513%/91[±Rio_Gallego< ³ta Cruz (SC> {8ËðUshuaia	Tierra del Fuego (THðS	-1416-17042	Pacific/Pago_ ã
AT	+4813+0162(Àe/Vienna
AU	ð-3133+15905	Australia/Lord_Howe	
  
 õ Island
AU	-5430+15857	Antarctica/Macquarie	
 5 §4253+14719i ñ Hobart	Tasmania^ §3749+14458) ôMelbourne	Victor, —352+15113, òSydney	New South Wales (most areas)i —157+14127= ¾Broken_HillB ¢YancowinnaB ©2728+15302B Áisbane	Queen6| §2016+14900: ‰Lindeman: £WhitsundayN¾ ˆ455+1383¹’Adelaide	ù Òð  12® 8305t ñ
Darwin	Northern Territory3 3#G1551§  Perth	West1 d å ˜3143+1285_Eucla>  à)
AW	+1230-0690mer^ðAruba
AX	+6006+01957	Europe/Mvðhamn
AZ	+4023+049´ àsia/Baku
BA	+4-T018259 ó
Sarajevo
BB	+1306-05937	Au ð
Barbados
BD	+2343+09025	AX ôDhaka
BE	+5050+00420Y °Brussels
BFÎ ±22-00131	AfÍ ôOuagadougou
BG	+4241+02319A ÀSofia
BH	+26Ï  50è w àBahrain
BI	-03 D2922Z ðBujumbura
BJ	+0629+002Ó z €Porto-Noô °L	+1753-062,ô PSt_Baó#lemy
BM	+3217-06446	Atlantic/Bermuda
BN	+0456+1145ÑBrunei
BO	-16É5809T�La_Paz
BQ0090€ U81636" ÐKralendijk
BRå  51ê  x¤ uNoronha� ! igs0 †127-0482t ò	Belem	Para (east); Amapa0 •343-03830‚ ñFortaleza	Brazil (n ò	ast: MA, PI, CE, RN, PB)H 8Ì E3454H òRecife	Pernambuco) 0712¡ %12) ÐAraguaina	TocbnÌ •940-03543+ ñMaceio	Alagoas, SergipeZ A1259Ë 1/ aBahia	 # 0233} 6N•Sao_Pauloî s7 )ò: GO, DF, MG, ES, RJ, SP, PR, SC, RSþ  20v'54X °Campo_Grandñto Grosso do Sul� €1535-056� •Cuiaba	Ma1 * 0022Ÿ4M*  Sa~ÚBwest� ‡0846-063‹ùÀ_Velho	RondooÖBR	+0249-0604ÿôBoa_Vista	Roraim( 08) 0]ó Manaus	Amazonas]¯ 6º'69¯  Ei'pe0 ³  95^ 5748»`Rio_Brsö	Acre
BS	+2505-0772… ±Nassau
BT	+�R08939£ðThimphu
BW	-2439+02555	Africa/Gaboõ>rone
BY	+5354+02734	Europe/Minsk
BZ	+1730-08812	America/Belize
CA	+4734-05243 ñSt_Johns	Newfoundland; Labrador (southeast)
C •439-06336C òHalifax	Atlantic - NS (most areas); PE> •612-05957> œGlace_Bay@ ³Cape Breton{ †606-0644= yMoncton; Áew Brunswicku ¦5320-06025u =oosu ô » B †125-0570z  Blanc-Sabl óST - QC (Lower North Shore» 36E7923ƒ ñToronto	Eastern - ON,D ~ A4901ÔsNipigon=  ãno DST 1967-73~ †823-0891qThunderx‚ # ( B Bay> ¥6344-06828¼ wIqaluit #NUñ *ö;¥6608-06544> »PangnirtungB  | Ö484531-091371€ ¡Atikokan	EyDON ( 0); Œ sCoral HF •953-09709„ ÐWinnipeg	Cent+  ñ (west); ManitobaÂ 0484> &43Â »Rainy_RiverA  â R, Ft Frances„ @7441HV94494ˆ‡ResoluteG  ¿  < Ö624900-092045Ä ËRankin_Inlet@ cÖ ? —5024-1043; qegina	C?#SK¼­õ ¥5017-107503ØSwift_Current; !id78 w333-113-0Edmé�n	MountaiëÀAB; BC (E);  Wª Ö690650-105031z ‚Cambridg²G  +| ¥6227-11421´ ¸Yellowknife INT (#Ö682059-133430y lInuvik: r –4906-1163r @Cres’M[ ä  â –5946-1201MÖDawson_Creek	7  1 CrL0St §E †848-1224å·Fort_NelsonD 2Ft  8 –6043-1350†£Whitehorse7 pYukon (Ç5 w404-139>› 
1 1ã 3-`Vancou.QPacif# m#ð
CC	-1210+09655	Indian/Cocos
CD	-0418+015fÙóKinshasa	Dem. Rep. of CongoÊ9 @1140/ “9 ¯Lubumbashi; ü ò F	+0422+01835	A; ‘Bangui
CG‘ 6‘ 7 Ðrazzaville
CHo„23+00832©ôZurich
CI	+0519-00402? ðAbidjan
CK	-2114-15946	Pacific/ñ-Rarotonga
CL	-3327-07040	America/Santiago	Chile (most areas)3 @53093 %553 ñPunta_Arenas	Region of Magallanes9 ò2709-10926	Pacific/Easter	 ñ
 Island
CM	+0403+00942	Af— ñ!Douala
CN	+3114+12128	Asia/Shanghai	Beijing Time* ¢4348+08735* ÕUrumqi	Xinjia) Op v36-0740Õ øBogota
CR	+0956-08 õ
Costa_Rica
CU	+2308-08222ð
Havana
CV	+1455-02331	Atl`ðc/Cape_Verde
CW	Ï f1-0690‰ð%Curacao
CX	-1025+10543	Indian/Christmas
CY	+3510+033€  ëNicosia	CyprusÅ0  070 "57òFamagusta	Northern ; ð
CZ	+5005+01426	Europe/Prague
DE	+5230+01{  êBerlin	Germany}  2 ¤4742+00841O ”Busingen		 õ 
DJ	+1136+04309ð jibouti
DK	+554y 4235G õ
Copenhagen
DM	+1518-06124•PDominµpDO	+182  &95   ý!o_& ôgo
DZ	+3647+00303… öAlgiers
EC	-0210-0795·ðGuayaquil	Ecuador (mainÛ)4 †054-0893¥Galapagos	
 0s
Ed…925+0244ë àTallinn
EG	+30-D3115£ ¡Cairo
EH	+uE0131I°El_Aaiun
ER#28&85Þ ösmara
ES	+4024-003¨ÉMadrid	Spain× Sƒu53-0051®aCeuta	 ‚, MelillY €2806-015™pnary	Ca ý T~f02+038ðAddis_Ababa
FI	+60þD2458
õHelsinki
FJ	-1808+17825y÷Fiji
FK	-5142-0575›�Stanley
F‰7yE5147< aChuuk	 ¢/Truk, Yap- •658+15813- ƒPohnpei	 r/Ponape. •519+16259. rKosrae	 ö 
FO	+6201-00646;ÐFaroe
FR	+485J4220ù ÑParis
GA	+002C$27õLibreville
GB	+513030-000073‹�London
GD” 03@4Gäòda
GE	+4143+04449D Tbilisi
GFP 25™ XðCayenne
GG	+492717-£ %21¼ ðGuernsey
GH	+053O&01špccra
GI” n5052¶ öGibraltar
GL	+6411-0514ÙN´AGree‰
” 3 0764“8	ñDanmarkshavn	National Park (east coast)r @7029%58kØScoresbysund	 ò/IttoqqortoormiitB •634-06847B aThule	 °/Pituffik
GÙ3¹5163k�Banjul
GN/u31-01349ÐConakry
GP	+1ñ614-06132	America/Guadeloupe
GQ	+0345+00847	Af! ð!Malabo
GR	+3758+02343	Europe/Athens
GS	-5416-036\ øtlantic/South_Georgia
GT	+1438-09031‚ ðtemala
GU	+1328+14445	Pacific£ ôm
GW	+1151-01535� ÷Bissau
GY	+0648-05810Z ðyana
HK	+2217+11409	Asia/Hong_Kong
HN– …06-08713< ôTegucigalpa
HR	+4548+01558ü €Zagreb
HÖ †832-0722| ôPort-au-Prince
HU	+4730+01905C ÀBudapest
ID	˜00+1Ç £ òJakarta	Java, Sumatra* p002+109o  Í òPontianak	Borneo (west, central)5  502924_ …Makassar4  ea4 s³ò ); Sulawesi/Celebes, Bali, Nusa Tengarra; Timorp g ’232+14042g ðJayapura	New Guinea (West Papua / Irian ( õ); Malukus/Moluccas
IE	+5320-00619ó
Dublin
IL	+314650+0351326u õerusalem
IM	+5409-0042»àIsle_of_Man
INs32+0882µ °Kolkata
IO	× 0+Üò5	Indian/Chagos
IQ	+3321+04425y �Baghdad
I.t540+051• @Tehrp AS	+6’ d2151	A,ô	Reykjavik
IT	+4154+01229,ôRome
JE	+491101-0020624 õ
Jersey
JM	+175805-0764736Ò Jamaica
JO5 57351ò	Amman
JP	+353916+1394441Ö ÐTokyo
KE	-0118 4649‚àNairobi
KG	+42µ  74u  ˜ Bishkek
KH¼s33+1045*àPhnom_Penh
KI	ë u5+17300÷ðTarawa	Gilbert Islands. ¦-0308-1710%øEnderbury	Phoenix1  ¹f2-1572_ ö Kiritimati	Line/ `M	-114×5316ôpomoro
K-@718-{- St_Kitts
KB„901+1254ê  yongyang
K7B2658\óSeoul
KW	+2920+0475£ÐKuwait
KY	+19s 6812s 0Cay³âKZ	+4315+07657S ñAlmaty	Kazakhstan (most areas)
3 4Î3652† ¥Qyzylorda	
 $/K ¡/Kzyl-Orda< “5312+0633o  Qod 4ay		 #/K 2/Ku 8 0< 57¡ rAqtobe	 0/Ak ) ”4431+0501�ðqtau	Mangghystau/Manki
 0 0707iÍqtyrau	A ñ /Atirau/Gur'yev1 @51131 2àQOral	”42
LAJD+102Ñ1Viej@e
LBý 53E"30x‘Beirut
LCQ1Ñ°St_Lucia
LI„09+00931À€Vaduz
LKÉ`56+079 ( Colombo
LR  	'10ŸPonrovW `S	-292¡7’ ¾Ðseru
LT	+5441õ+02519	Europe/Vilnius
LU	+4936+0060 ô
Luxembourg
LV	+5657+02406? ô"Riga
LY	+3254+01311	Africa/Tripoli
MA	+3339-00735 ô
Casablanca
MC	+4342+00723Z ôMonaco
MD	+4700+02850 õChisinau
ME	+4226+0191– PPodgo… ð
MF	+1804-06305	Ame òX/Marigot
MG	-1855+04731	Indian/Antananarivo
MH	+0709+17112	Pacific/Majuro	Marshall Islands (most areas)< •905+16720< ¥Kwajalein	
 å
MK	+4159+0212É ÑSkopje
ML	+12C4800CðBamako
MM	+1647+09610	Asia/Yangon
MN=‚55+10653 úUlaanbaatar	Mongolia ¶  6 ’801+091396 ðHovd	Bayan-Olgiy, Govi-Altai,  Ó, Uvs, Zavkha{ ƒ804+1143– òChoibalsan	Dornod, Sukh� ô
MO	+221150+113326 0MacéÕP	+1512+14545K@Saipn ºQ	+1436-061ç¡tinique
MR	t6-01557CÑNouakchott
MSGv3-06213*ñontserrat
MT	+35ç4431‹ôMalta
MU	-2010+05730I`Maurit_`MV	+04  (73  Ðldives
MW	-15Ä'35áölantyre
MX	+1924-09909œ òexico_City	Central Tim0 ¥2105-086460 ñCancun	Eastern Standard4 a - QuiùA Roos ¥2058-08937C iMeridan ð - Campeche, Yucat‘ÇX	+2540-1001² zonterre° ` - Dur³ü; Coahuila, Nuevo Leon, Tamaulipaag P50-09wßztamoros©  US¬ a ¢US border)ˆ313-1062?ô zatlan	MountainCòBaja California Sur, Nayarit, SinaloaV 0838V ®�ChihuahuaW  © þ w934-104ž lOjinagF ý c , (æ •904-11058ì¦Hermosillo‘ 4RSonorÒ ¥3232-11701B tTijuana®&‰ ) 04&51iÛBahia_BanderaÎ!-  D de ! ò 
MY	+0310+10142»ðKuala_Lumpur	Malaysò¢peninsula)6 ƒ133+1102¬öKuching	Sabah, Sarawak
MZ	-2558+032ÍàMaputo
NA	-2234706d°Windhoek
NC „16+16627ö/Noumea
NE	+1331+0020¡àiamey
NF	-2903I'58; ôrfolk
NG	+0627+00324y ðLagos
NI	+1209-08617	Amô-erica/Managua
NL	+5222+00454	Europe/Amsterdam
NO	+5955+01045  ÷>Oslo
NP	+2743+08519	Asia/Kathmandu
NR	-0031+16655	Pacific/Nauru
NU	-1901-1695 õiue
NZ	-3652+174469 ðAuckland	New Zea Ñ (most areas)9 ¥4357-176339 ƒChatham	 0 Is; òs
OM	+2336+05835¿  Muscat
PA	Õ ¢8-07932	Am4õPanama
PE	-1203-07703  Li ÕF	-1732-14934„ åTahiti	Societyƒ åPF	-0900-13930. ¥Marquesas	
 	3 ¥2308-134573 ƒGambier	 / Gb v30+1471b ðPort_Moresby	Papua WjGuineaVPB w613+155Ò ØBougainville	 ó 
PH	+1435+12100Xñanila
PK	+2452+06:2qrachi
P‰A15+07 ‰ÐWarsaw
PM	+47sE5620söMiquelon
PN	-2504-1300P÷Pitcairn
PR	+182806-066062Õò
uerto_Rico
PS	+3130+03428» PGaza	 d Strip$  20& R50542( ôHebron	West Bank
PT	+3843-00908:pLisbon	� ugal (main‘)1 ó238-01654	Atlantic/Madeira	 Ü a –744-025400  AzÙ	 õ 
PW	+0720+134291€Palau
PY8`16-057C éðAsuncion
QA	+2517+051	 ±ÀQatar
RE	-20Ëð5528	Indian/Reun8 äRO	+4426+02606ü ÀBucharest
RS  …50+02030  àelgrade
RU	+54Z pKalinin# §	MSK-01 -  7 Å54521+037370Ð`Moscow6 b+00 -  9ð!
# The obsolescent zone.tab format cannot repres! �ðSimferopol well.
# Put it in RU section and li©ñs UA.  See "territorial claims" aboveH ñrograms should use— A1970› Äinstead; see7 !UAV7¿v¦ r	Crimea(8úD4939~VKirov# + •4844+0442ÿ@Volg  d/  3 6„D4803^ ’Astrakhan3  » 3 0513f 46023 TSarat“  1  / …420+0482ä–Ulyanovskb  3 …312+0500ó @SamaY1SK+M “, Udmurti*’651+06036éÒYekaterinburgl ’2 - Uralsh 5B73241 $Om” @3 -  ' c2+0825|”Novosibir. G4 -  5 3«38345 rBarnaul‡  1 RAltai+ 6Éð8458	Asia/Tomsk	MSó!K+04 - Tomsk
RU	+5345+08707	Asia/Novokuznetsk	MS0 ‚Kemerovo3 ’601+092503 ™Krasnoyar2  R area: ƒ216+1042: EIrkuh C5 -  ”, Buryati7 ‚03+11328q RChita� ñ 6 - Zabaykalskyf “6200+1294f 'Yaf  1 £Lena River0 Â3923+1353314c wKhandygf ôTomponsky, Ust-Mayp ¢4310+13156< £VladivostoBˆ7 - Amurt Ã43337+1431338  W 3Nert  5 aOymyakv ª “5934+1504	rMagadanC8 -  - ¢4658+14242— wSakhali.  q Island6 £6728+153436 ¤rednekolymß i ; ñ (E); North Kuril IsE ¢5301+15839E ƒKamchatkÛ E9 -  1 “6445+17721 bAnadyrØ  . €Bering SHôW	-0157+03004	Africa/Kigali
SA	+2438+046Â õDRiyadh
SB	-0932+16012	Pacific/Guadalcanal
SC	-0440+05528	Indian/Mahe
SD	+1536+03232v ò'hartoum
SE	+5920+01803	Europe/Stockholm
SG	+0117+10351ðSingapore
SH	-1555-005®ðtlantic/St_Helena
SI	+4603+02` pLjublja  `J	+780€ p600	Arc@ ð	Longyearbyen
SK	+4809+01í£ ðBratislava
SL	+0830-0Ìã ôFreetown
SM	+4355+01228ƒ ðSan_Marino
SN	+144@ 4726@ ôDakar
SO	+0204+04522 ÐMogadishu
SR	u±0-05510	AmeÖàParamaribo
SS	= t1+03137B °Juba
ST	+00}5064õSao_Tome
SV	+1342-08912\ ðEl_Salvador
SX	+¹q05-0630Úƒ óLower_Princes
SY	+3330+0361…ðDamascus
SZ	-2618£ 0õMbabane
TC	+2128-07108‡ ô
Grand_Turk
TD	+1207+01503ã PNdjamôTF	-492110+0701303¢°Kerguelen
Th…608+0011C L!THc5+1003ƒôBangkok
TJ	+3835+068\°Dushanbe
TK9…22-171149òFakaofo
TL	-0833+12535Û°Dili
TM	+37©3582NôAshgabat
TN	+3648+01011ì  Tunis
TO	-ç 0-17ªðTongatapu
TR	+41…5285‹ÀIstanbul
TT	hP9-061ê ÊñPort_of_Spain
TV· v1+17913Ö àunafuti
TW	+25x3213IÁTaipei
TZ	-0¼ 5391‹`Dar_esTÀaam
UA	+5026¦$31.ñKiev	Ukraine (most!s)0 •4837+0221Ó òUzhgorod	Transcarpathia.  75‡ "ÌZNfozhye	 ð  and east Luganò0sk
UG	+0019+03225	Africa/Kampala
UM	+2813-17722	Pacific/Midway	 � Islands- ¥1917+16637- PWake	 ) ñ
US	+404251-0740023	Amex òNew_York	Eastern (most areas)9 Õ21953-08302459 uDetroit8 N- MI= å381515-0854534= ÷Kentucky/LouisvilleI FKY ( Œ ‹ î364947-0845057N «MonticelloN SWayneD Õ94606-0860929D ƒIndiana/ WpolisE /INÜ ¶4038-087314RB œ/VincenneG ÒDa, Du, K, Mn” P41030&]63611” {Winamac� rPulaskiB `382232Ö >204B hMareng Ñ …CrawfordC 0931Ï /16Ï  ¬Petersburgˆ $ik[@8445… ]50402Ç [Vevay= pSwitzerÏ† `415100† E3900D ÿ Chicago	Central� @7571¾ ?645 •Tell_CityB  - TPerryz 2174…&73z ÏKKnox= DStarü R45062&65�—Menominee;  (óWisconsin borderƒ ·70659-10117àÐNorth_Dakota/'erO …ND (OlivE P65042E 6243á	E  ö[SalemH ÄMorton rural“ @1551N 6464	N lBeulahK 4erc“ P39442E F4590*ïDenver	Mountai{3òv-116120Ë VBoise7 ò- ID (south); OR (east¿ Ö332654-112042€óPhoenix	MST - Arizona (except NavajoA ·40308-11814Á´Los_Angelesw-0611Êf149540°Anchorage	AµaÀ�581807-13¦9 dJuneau6 "-  p  571035-135? /VSitka6  5 @5073l F1343Ò—Metlakatl: xAnnetteIå593249-1394338s vYakutatu  § È643004-16524}&om$weµ¸515248-1763£ÓAdak	Aleutian’ s_ ä211825-1575130‘ø/Honolulu	Hawaii
UY	-345433-0561Î :ó"evideo
UZ	+3940+06648	Asia/Samarkand	Uzbekistan (² `Z	+4120 #910 �Tashkent/ Àkistan (eastôF)
VA	+415408+0122711	Europe/Vatican
VC	+1309-06114	America/St_Vincent
VE	+1030-06656	" õCaracas
VG	+1827-06437A ¡Tortola
VI 1 5> pSt_Thom@ ô<N	+1045+10640	Asia/Ho_Chi_Minh
VU	-1740+16825	Pacific/Efate
WF	-1318-17610	 õWallis
WS	-1350-17144; `Apia
YÖ ’245+04512w ÑAden
YT	-1247 ñ4	Indian/Mayotte
ZA	-2615+02800	Af.ñJohannesburg
ZM	-152# $17# �Lusaka
ZWÎ „50+03103 ð<Harare
# tzdb timezone descriptions
#
# This file is in the public domain.
' ùFrom Paul Eggert (2018-06-27):H ðcontains a table where each row stands for" ™ % �
# civil° ðstamps have agreed s@Ð 1970.  Columg ðre separated by
# a* 0gle� óB.  Lines beginning with '#' are comments.  All text uses
# UTF-8 encoding.  The cw !of,ã  I aÔ allows:Z11 òuntries that overlap= þ 0, a/ ‹ &a-Ì plist
#  ðof ISO 3166 2-ch*`ter co] `y codeÃ 1SeeZ Ò@'iso2  .tab'.
# 2òatitude and long Ï ’ ð's principal loca2Œ !inŒ À6709 sign-deŸãs-minutes-secoãCmat,7 Ðeither Â±DDMM TDMM o #SS $SS1 tfirst l°  (+£pnorth),å n¿  Peast)é 3|Ë P nameÓdàðvalue of TZ environÿP vari® >  qPPleasYP²theory.html. ¿0howˆ !sec sOThosenF �If multipŒ� sa¿,h $‰9c,¶Fcƒ3 1 k Ô ¸ ‚ 4&ßÁ; present ifûAonly …   ®  (If­cÅsÛ y 1ies˜ð most-populous cityº@usedÛ x
6   ê2ed ò#ine‘ 1; any o9/ iš p4 palphabe{Plly b hâƒsorted
#k . ¿ ð n (if possible)R �an order„œ‘ y×ñ(1) makes some geographical sense,vp(2) put � * *¦ ‘Crst,:-�does notô�radict (1í}' i�intendedUQn aidm@user¡Qo hel€�m selecto  õ±appropriate7 àtheir practicað’l needs.  It is not intended to take or
# endorse any position on legal or territorial claims.
#
#country-
#codes	coordinates	TZ	comments
AD	+4230+00131	Europe/Av òra
AE,OM	+2518+05518	Asia/Dubai
AF	+3431+06912 óKabul
AL	+4120+01950	U òTirane
AM	+4011+044307 ñYerevan
AQ	-6617+11031	Antarctica/Casey	 & ˜835+07758& aDavis	 & ‰640+1400L ò DumontDUrville	 3-d' : ˜736+06253` rMawson	 ( ˜448-06406( rPalmer	 ( ‰734-0680° ƒRothera	 * Ø90022+0393524V aSyowa	 * Ê720041+00232€ aTroll	 * ‰824+1065P rVostok	 ð
AR	-3436-05827	AmeryòArgentina/Buenos_Aires	   ’ (BA, CF)D  12ê ?411D  …Cordoba	V ó (most areas: CB, CC, CN, ER, FM, MN, SE, S` ¯2447-06525`  aSalta	 ò (SA, LP, NQ, RNž @2411>  Ëâ aJujuy	 C (JY2 16492 3p  �Tucuman	 sÃ¡n (TM7  82/54K¥Catamarca	
 ó (CT); Chubut (CHG �926-0665NÁLa_Rioja	La 	 B (LR8 @3132p Fè ÐSan_Juan	San 	 C (SJ8 02538 /49î  MŽ3za	 C (MZ6  31$/62¦  n ALuisn  	 B (SL8 0513%/91\±Rio_Gallego< ³ta Cruz (SC> |8ÌðUshuaia	Tierra del Fuego (TIðS,UM	-1416-17042	Pacific/Pago_ õ	Samoa, Midway
AT	+4813+0162ÔðVienna
AU	-3133+15905	Australia/Lord_Howe	
  
 q Island4 ¨5430+15857è¥Macquarie	
 5 §4253+14719i ãHobart	Tasmani’ p749+144$’ àMelbourne	Vict8Š €3352+151Š, øSydney	New South Wales³)= p157+1417= ¾Broken_HillB ¢YancowinnaB §2728+15302Ô áBrisbane	Queen6| §2016+14900: PLinde˜: £WhitsundayNs| ˜3455+1383¹’Adelaide	ù Òð  12® 8305t  Darwin	NorÔBn Te™y3 à3157+11551	Ausò	tralia/Perth	Western Aus õ (most areas)
AU	-3143+12852	& o/Eucla>  ð!)
AZ	+4023+04951	Asia/Baku
BB	+1306-05937	Americ òrbados
BD	+2343+090259 ô$Dhaka
BE	+5050+00420	Europe/Brussels
BG	+4241+02319 ó$Sofia
BM	+3217-06446	Atlantic/Bermuda
BN	+0456+1145u õBrunei
BO	-1630-06809° ðLa_Paz
BR	-0351-032® Î uNoronhai ‚ islands0 †127-0482N òBelem	ParÃ¡ (east); AmapÃ¡2 •343-03830€ ðFortaleza	Brazil (north< ò: MA, PI, CE, RN, PB)H  80H 5454H òRecife	Pernambuco) 0712£ %12) ÐAraguaina	Toc>nÎ 0940%43+ ñMaceio	Alagoas, SergipeZ A1259Ë 1/ aBahia	 # 0233} 6•Sao_Pauloî 4souî òGO, DF, MG, ES, RJ, SP, PR, SC, RSþ  20x'54X ñCampo_Grande	Mato Grosso do Sul� ¥1535-05605² hCuiaba1 * 0022×4)	fSantarÜBwestŽ ‡0846-063ŒðPorto_Velho	RondÃ´n¼ÆR	+0249-0604òBoa_Vista	Roraimaƒ 0308) 0_ó Manaus	Amazonas`. 6¼'69±  Ei÷'pe0 ´  95^ 5748öRio_Branco	Acre
BS	+2505-0772… òNassau
BT	+2728+08939ÝôThimphu
BY	+5354+02734ÀÀMinsk
BZ	+17…'88”÷Belize
CA	+4734-052‡ðSt_Johns	NewfoundƒÅ; Labrador (D)C  43e5336Þ vHalifaxÈI- NS"B; PE> 636595ÔœGlace_Bay@ ³Cape Breton{ 66644= yMoncton; 0ew –Qswicku 0532™)rMGoosu ô Ý 80512Þ&70z  Blanc-Sabl ðST - QC (Lower Nfc Shore» 366792 TþRto	Ea\Q- ON,D ~ –4901-0881sNipigon=  ãno DST 1967-73~ †823-0891�qThunderx‚ # ( B Bay> @6344Ø2ÐwIqaluit #NUñ \ ;!66l&54N»PangnirtungB  | Ö484531-091371€ ¡Atikokan	EyDON ( 0); Œ sCoral HF w953-097šÀWinnipeg	CenÓð - ON (west); Manñ(itoba
CA	+4843-09434	America/Rainy_River	Central - ON ( ñ  R, Ft Frances)F `744144H F4945J wesoluteG SNU (R < æ624900-0920459< »ankin_Inlet@ c• ? —5024-1043; ó
egina	CST - SK (most area¯ ¥5017-10750o ØSwift_Current; cidwestl •333-113288 ñEdmonton	Mountain - AB; BC (E); W> Ö690650-105031z ØCambridge_BayG  +| ¥6227-11421| ¹Yellowknife8 9T (#Ö682059-133430y lInuvik: r –4906-1163r ACresí [ ä  â –5946-1201MåDawson_Creek	M7  1 CrLsSt JohnE •848-12242é �Fort_NelshD 2Ft  8 ¥6043-135038 £Whitehorse{ ”Yukon (eaÒ–6404-1392µ› 
1 1ã 5307f `Vancou.‘Pacific -ÿmvñfC	-1210+09655	Indian/Cocos
CH,DE,LI	+4723+00832	Europe/Zurich	Swiss time
CI,BF,GM,GN,ML,MR,SH,SL,SN,TG	+0519-00402	AfÏðAbidjan
CK	-2114-1§	¬ ö	/Rarotonga
CL	-3327-0704'ëSantiago	ChileMpL	-53093 5CPñ_Arenas	Region of Magallanesl ¥2709-10926� rEaster	 ð Island
CN	+3114+121zñsia/Shanghai	Beijing Tð N	+4348+08735	A* ÕUrumqi	Xinjia) ÆO	+0436-0740¸ øBogota
CR	+0956-08 ö	Costa_Rica
CU	+2308-0822¨ðHavana
CV	+1455-023= tlCð
c/Cape_Verde
CW,AW,BQ,SX	Ø W1-069œõCuracao
CX	-1025+105438ð hristmas
CY	+35X 33‰  ò ëNicosia	Cyprus±0 ‚07+03357"òFamagusta	Northern ; ô
CZ,SK	+5005+01426—ðPrague
DE	+5230+01~ ´êBerlin	Germany€ DO  542 4235O ðCopenhagen
DO	+18285G …ðo_Domingo
DZ	+3647+003ïfé÷lgiers
EC	-0210-079âðGuayaquil	Ecuador (mainc)4 †054-0893�ñ Galapagos	GalÃ¡ —0s
Eþ …925+0244Ì óTallinn
EG	+3003+03115	�¡Cairo
EH	+þE0131©àEl_Aaiun
ES	+4×T00341%�Madrid	Spe» S…53-00519i `euta	C ð, Melilla
ES	+2806-ò01524	Atlantic/Canary	 öF Islands
FI,AX	+6010+02458	Europe/Helsinki
FJ	-1808+17825	Pacific/Fiji
FK	-5142-05751l õStanley
FM	+0725+15147< aChuuk	 ¢/Truk, Yap- •658+15813- ƒPohnpei	 r/Ponape. •519+16259. rKosrae	 ö 
FO	+6201-00646  ôFaroe
FR	+4852+00220ù ôParis
GB,GG,IM,JE	+513030-0000731) ðLondon
GE	+4143+04449	Asia/Tbilisi
GF	+0456-05b ð	America/Cayenne
GH	+0533Z Q13	Af õAccra
GI	+3608-0052t ô
Gibraltar
GL	+6411-05144	[ NZPGreenàÑ (most areas)3 ¥7646-018403 óDanmarkshavn	National Park (east coast? •029-02158? ØScoresbysund	 ó/Ittoqqortoormiit� …34-06847B aThule	 ô	/Pituffik
GR	+3758+02343töAthens
GS	-5416-03632ØõSouth_Georgia
GT	+1438-09031o öGuatemala
GU,MP	+1328+1444ÞôGuam
GW	+1151-01535ŸöBissau
GY	+0648-0581MóGuyana
HK	+2217+1140ÀHong_Kong
HN™ `06-087øÐTegucigalpa
H¼ h832-07:ôPort-au-Prince
HU	+4730+01905%ðBudapest
ID	-0610+1ª ›òJakarta	Java, Sumatra* ’002+10920* òPontianak	Borneo (west, central)5  50å 9j ú…Makassar4  B0, s™ò ); Sulawesi/Celebes, Bali, Nusa Tengarra; Timorp g ’232+14042œ ðJayapura	New Guinea (West Papua / Irian ( ð); Malukus/Moluccas
IÖ 32Ô%619ó
Dublin
IL	+314650+0351326u °erusalem
INßs32+0882“ °Kolkata
IO	µ0ùð
25	Indian/Chagos
IQ	+3321-"25W �Baghdad
Iòt540+051s �Tehran
ISí0{1ððReykjavik
IT,SM,VAŒ„54+01229õRome
JM	+175805-0764736 Jamaica
JOø  57ö 5ô ò	Amman
JP	+353916+1394441» ðTokyo
KE,DJ,ER,ET,KM,MG,SO,TZ,UG,YT	-011S 6âàNairobi
KG	+42¯  74�  A°Bishkek
KI	Æ u5+17300àåTarawa	GilbertÇÖKI	-0308-1710ÇøEnderbury	Phoenix1 +!V-1572_ ö Kiritimati	Line/  ƒ901+1254¸°Pyongyang
Kºp733+126 È òSeoul
KZ	+4315+076575úAlmaty	Kazakhstan¦3 ’448+065283 ¥Qyzylorda	
 $/K ð	/Kzyl-Orda
KZ	+5312+0633ô7	Asia/Qostanay		 #/K 2/Ku ò 
KZ	+5017+057108 ðAqtobe	AqtÃ¶be/Ak * ¥4431+05016* ò
au	MangghystaÅ«/Mankistau1  70[ $151 ptyrau	A ñÅ«/Atirau/Gur'yev2 ¢5113+05121c ðOral	West Kazakh¸ ã
LB	+3353+0353¶ óBeirut
LK	+0656+0795D  Colombo
LR ô618-01047	Africa/Monrovia
LT	+5441+02519	Europe/Vilnius
LU	+4936+00609 ô
Luxembourg
LV	+5657+02406! ôRiga
LY	+3254+01311y  Tripoli
MAÎ „39-00735 ô
Casablanca
MC	+4342+00723Z ôMonaco
MD	+4700+02850 ñ6Chisinau
MH	+0709+17112	Pacific/Majuro	Marshall Islands (most areas)
< •905+16720< ¥Kwajalein	
 Ô
MM	+1647+096H�Yangon
MN¡ ‚55+10653ÖûUlaanbaatar	Mongolia|  6 ’801+091396 ðHovd	Bayan-Ã–lgii, Govi-Altai,  Ó, Uvs, Zavkha| t804+114)ò	Choibalsan	Dornod, SÃ¼kh� ô
MO	+221150+113327 0MacOòQ	+1436-06105	AmeDñartinique
MT	+35ì4431�àMalta
MU	-2010nð30	Indian/Mauritd`MV	+04  (73  öldives
MX	+1924-09909} ñexico_City	Central Time0 ¥2105-086460 ñCancun	Eastern Standard4 p - Quin8B RooC •058-08937C iMeridan ò - Campeche, YucatÃ¡n@ ‡540-1001³ zonterre± ` - Dur6ü; Coahuila, Nuevo LeÃ³n, Tamaulipa«°X	+2550-097²˜ztamoros«  US® b ¢US border)É ˆ313-1062ùô zatlan	MountainFòBaja California Sur, Nayarit, SinaloaV 0838V O�ChihuahuaW  . ÿ w934-104ž lOjinagF þ c , (æ •904-11058ï¦Hermosillo‘ 7RSonorÒ ¥3232-11701B tTijuanaD&‰ ) 04&51iÛBahia_BanderaÏÄ- BahÃ­a de " ò 
MY	+0310+10142AðKuala_Lumpur	Malaysx¢peninsula)6 ƒ133+1102Zö)Kuching	Sabah, Sarawak
MZ,BI,BW,CD,MW,RW,ZM,ZW	-2558+032ÌeMaputo„y€
NA	-2234706ý°Windhoek
NC „16+16627?ð/Noumea
NF	-2903+16758	Pacific/ñ6Norfolk
NG,AO,BJ,CD,CF,CG,CM,GA,GQ,NE	+0627+00324	Africa/Lagos	West A ñ	 Time
NI	+1209-08617	Ame. ô*Managua
NL	+5222+00454	Europe/Amsterdam
NO,SJ	+5955+01045# ÷>Oslo
NP	+2743+08519	Asia/Kathmandu
NR	-0031+16655	Pacific/Nauru
NU	-1901-1695 õiue
NZ,AQ	-3652+17446< ðAuckland	New Zea ! tè ÕZ	-4357-176331 ƒChatham	 0 Is3 €s
PA,KY	¸ u8-07932õPanama
PE	-1203-07703  Li ÕF	-1732-14934l æTahiti	Societyk ÕF	-0900-13930. ¥Marquesas	
 	3 ¥2308-134573 ƒGambier	 / Gb v30+1471b ðPort_Moresby	Papua 7ðGuinea (most areas)
PB w613+155Ò ØBougainville	 ò 
PH	+1435+12100úñManila
PK	+2452+06:qrachi
PoA15+07 oÐWarsaw
PM	+47sE5620söMiquelon
PN	-2504-13003÷Pitcairn
PR	+182806-066062Õò
uerto_Rico
PS	+3130+03428» PGaza	 d Strip$  20& R50542( qHebron	fôBank
PT	+3843-00908pLisbon	� ugal (mainy)1 ó238-01654	Atlantic/Madeira	 Ü a –744-025400  AzÙ	 õ 
PW	+0720+134291€Palau
PY8`16-057C ð	Asuncion
QA,BH	+2517+051 ´ð Qatar
RE,TF	-20Ññ5528	Indian/Reunion	RÃ©	 õ, Crozet, ScatteredÅ äRO	+4426+02606&ðBucharest
RS,BA,HR,ME,MK,SI/ …50+02030/ àelgrade
RU	+54v pKalinin# §	MSK-01 -  7 Å54521+037370ï`Moscow6 b+00 -  ñ<
# Mention RU and UA alphabetically.  See "territorial claims" above.
RU,UAÔ 7vòSimferopol	Crimea¦ ”836+04939ü VKirov¡  + •4844+0442™TVolgoÐ  3 6D4803^ ’Astrakhanb  9 3 0513f 46023 TSarat“  1  / …420+0482b–Ulyanovskb  3 …312+0500ó @Sama1SK+Ë “, Udmurti*’651+06036 ÒYekaterinburgl ’2 - Uralsh 5Ó78 å$Om” @3 -  ' r2+08255X ”Novosibir. G4 -  5 3H38345 rBarnaul‡  1 RAltai+ 6€1845€Àa/Tomsk	MSK+ñ!04 - Tomsk
RU	+5345+08707	Asia/Novokuznetsk	MSK+0 ‚Kemerovo3 ’601+092503 ™Krasnoyar2  R area: ƒ216+1042: EIrkuh C5 -  ”, Buryati7 ‚03+11328q RChita� ñ 6 - Zabaykalskyf “6200+1294f 'Yaf  1 £Lena River0 Â3923+1353314c wKhandygf ôTomponsky, Ust-Mayp ¢4310+13156< £VladivostoBˆ7 - Amurt Ã43337+1431338  W 3Nert  5 aOymyakv ª “5934+1504	rMagadanC8 -  - ¢4658+14242— wSakhali.  q Island6 £6728+153436 ¤rednekolymß i ; ñ (E); North Kuril IsE ¢5301+15839E ƒKamchatkÛ E9 -  1 “6445+17721 bAnadyrØ  . ôBering Sea
SA,KW,YE	+2438+046« ñ„Riyadh
SB	-0932+16012	Pacific/Guadalcanal
SC	-0440+05528	Indian/Mahe
SD	+1536+03232	Africa/Khartoum
SE	+5920+01803	Europe/Stockholm
SG	+0117+10351	SÐSingapore
SR	s À0-05510	Amer^ ô
Paramaribo
SS	+0451+03137 ôJuba
ST	+0020+00644 õSao_Tome
SV	+1342-08912\ ó
El_Salvador
SY	+3330+0361CõDamascus
TC	+2128-07108@ ô
Grand_Turk
TD	+1207+01503� ôNdjamena
TF	-492110+0701303Y¥Kerguelen	
 €, St Pau3 |´, AmsterdamŽ±TH,KH,LA,VNÚ c5+1003TpBangkokb Áochina (mostkô s)
TJ	+3835+068-°Dushanbe
TK!…22-17114!òFakaofo
TL	-0833+12535ÁóDili
TM	+3757+0582ôAshgabat
TN	+3648+01011 Tunis
TO	-0-17÷’ðTongatapu
TR	+41VS2858	Vð-Istanbul
TT,AG,AI,BL,DM,GD,GP,KN,LC,MF,MS,VC,VG,VI	+1039-061(^ñ ort_of_Spain
TVÞ v1+17913ý àunafuti
TW	+25p3213AðTaipei
UA	+5026+03ˆ¦ ÊKiev	Ukraine… 0 •4837+0221Ö ñUzhgorod	Transcarpathia^ 0475� %^ Z9fozhye	 õ and east Lugansk
UM	+1917+16637Ö PWake	 TðUS	+404251-07400Ç'°New_York	Ea‰nÌ  9 P21953E0245"uDetroit8 N- MI= å381515-0854534= ÷Kentucky/LouisvilleI FKY ( Ý )
Ä î364947-0845057N ¡MonticelloN Àern - KY (Waõyne)
US	+394606-0860929	America/Indian ópolis	Eastern - IN (most areasJ Ý84038-0873143J ŒVincenneG ÒDa, Du, K, MnJ `410305” M3611J {Winamac� rPulaskiB `382232B >204B {MarengoB …CrawfordC 0931Ï /16Ï  «PetersburgF 4Pik[@8445… ]50402Ç [Vevay= £Switzerlan† `415100† E3900D ÿ Chicago	Central� @7571¾ ?645 •Tell_CityB ÔRPerry R41174…&73z KKnox= DStarü R45062&65�—Menominee; óMI (Wisconsin borderƒ Õ70659-1011757ý ÐNorth_Dakota/'erO …ND (OlivE P65042E 6243á	E ›New_SalemH ÄMorton rural“ @1551N 6464	N lBeulahK 4erc“ P39442E F4590*þ Denver	MountainÕÖ433649-116120Ë VBoise7 ò- ID (south); OR (east¿ å332654-1120424RóPhoenix	MST - Arizona (except NavajoA Æ40308-118143A ñLos_Angeles	Pacific^0611Êf149540°Anchorage	Aµaë Ç581807-13425dJuneau6 "-  †p  571035-135? à VSitka6  5 @5073l U134355 —Metlakatl:  Annette Is£s 0932•e394338> vYakutatu  4 Ö643004-1652426Nom$weµ¸515248-1763£ÓAdak	Aleutian’ ôs
US,UM	+211825-1575130”÷/Honolulu	Hawaii
UY	-345433-056124ÿ Áontevideo
UZ(ó0+06648	Asia/Samarkand	Uzbekistan (µ `Z	+4120 #910 ‰Tashkent/ ™@VE	+òe-06656B Caracas
VN Q45+10s ~ ôHo_Chi_Minh	Vietnamóõ 
VU	-1740+16825û ÑEfate
WF	-131N1�Wallis
WS …50-17144; ðApia
ZA,LS,SZ	-2615+028�f.@JohaÛ 
TZif2  @     ) 3  + ð   ÿÿÿÿ’æ’Hÿÿü8= ÿ   LMT GMT 
GMT0‚ À            S       PTZif2	  ð=      ÿÿÿÿš”4 A¡À´€ 0òäð A£4—  !Õi @¥Ë  @¥¶�p 1¦öþ  1§—Ð  1¨Ø2  1©y  1ªº· 1«[‰ 1¬›ê0 1­<¼0 1®}  1¯ð  1°^Q  1°ÿ#  1²@Ö 1²á¨ 1´"
0 1´ÂÜ0 1¶=  1¶¤  1·äq  1¸…C  1¹Æö 1ºgÈ 1»¨)0 1¼Hû0 1½‰]  1¾*/  1¿j�  1Àb  1ÁM 1Áíç 1Ã.I0 1ÃÏ0 1Å|  1Å°N  1Æð°  1Ç‘‚  1È1  1Ét 1Ê@  1ËU:0 1Ë‡<p@ÒáÓxP1Û¡Û  @ÜB« 1Ýƒ@ @Þ#Þ˜ 1ße“ 1àc 1áFÇ0 1áç—0 1ã'ú  1ãÈÊ  1å	.  oå©þ 7 @ÿÿÿÌL@° € 
    ÒLMT +0020 G
 Ÿ30 
GMT0
‰ O ¼ ¸ ‡ ¼@‹ÿÑü@±îÚX @´ÇàÐ 1Áí­ ÐÌlzÔ  "„m €#(   *0Ä 3&¬ ¾ `230 EAÈ ¯245 
EAT-3¿ D�"      § @kÉ›$ @‘`PO 1›Gx1›×,31œ¼‘ 1�ÀH 1ž‰þ 1Ÿ * 1 `¥ 1¡€ 1¢. 1£zL 2¤5� !¸8 "Æÿ 1ÇXº{1ÇÚ	3@Ï’4€ @ÐŠ   1Ñr 1ÒN$8 "ÔKÃ1åÎÓ  @ó\°ðN1xÁ 1CÈ 0Ï× A ­D 1xZ @hY	 @vCp @fB€ 1_| yO_  p  	 p  Ü6  1Ä@ à       ŽpPMT WES 0T C	 ¯CET 
CET-1ÖD•¬¿ ¬ BP   ¼‘’æ’Hÿÿü80   ›•I ‘  ‚ @†«pÑ 1ŒP`.1–ªC Ä¡Qïx   /�  D! ¼Œ © ß+0030 WAT 
WA´À              @      PTZif2	   + ó   ÿÿÿÿ’æ’Hÿÿü80 ÿ LMT GMT 
GMT0
O  9  S     3  ~ R   ‚  œ�8 ð	gaÿÿñd  ÿÿñð    ‘ ?-01• N À  ™ �‚FÅô  Œ„ 1  ¯CAT 
CAT-2D ò   @†«pÑ @ŒP`  1–ªC À¡Qïx   /ž    *     0 Áp+0030 W´ _WAT-1´ D7p@   O'@}½M« AÈ“´à 0ú{Ð 1Éüï 1ÊÇè @ËË®` 1Ìß) 1Í¬á  1ÎÆô 1Ï�f 1Ð©y 1Ñ„` @ÒŠ­P8 1è6c@ 1èô- 1ê¹ 1êÕ`0 @ëìúð( 1ìµm¿1íÏ 1î—ò @ï°³p  @ðy%€ 1ñ‘æ  1òZY  1ós  1ô;Œ  1õUŸ 1ö 1÷6Ò0 1÷ÿE0 1ù  1ùáÊ 1úù9  1ûÂý0 1üÛ¾ 1ý¥‚ 1þ¼ò0 2ÿ†¶F0ž%ð	 @gé€ @Yp 0I A aÞ 1+¢ 1C0 1Õ0 1$E  1î	  1
x  1
Ï<  1çý 1±Á 1É10 1’õ0 1ªd  1t(  1‹˜  1U\  1n 17á 1OP0 10 1 “ 1úH  1p£ 1Û{  1ô< 1¾  1ÕpP 1Ÿ40 "¶0 1€g  1 —×  1!a›  1"z\ 1#D  1$b' 1%%S0 1&<Ã 1'‡  1(öp 1(çº  1* { 1*Ê? 1+á¯0 1,«s0 1-Ââ  1.Œ¦  @/ à @0kÐ 11õ 12Jî 13_× 14*Ð 15?¹ 16
² @7(Ö`8 @7óÏP 19¸ 19Ó± 1:èš 1;³“ 1<È| 1=“u 1>¨^ 1?sW 1@‘z` 1A\s` 1Bq\ 1C<U 1DQ> 1Eý0 1F1  1Fàj 1H 1H·0 1Iðä 1J�¹  1KÚp 1La½  1L‰X  1L¤ú  1Su8 1S¬‰  1SÚ¼0 oT$‚P j@  Uc *0    	„ÏEEST EET 
EE36À              ðÅ      ÿÿÿÿ–Qùœ @Æÿ€ AÇX¬p !Ùí @Ò¡2ð AÛ5¤  !î' @û%r@ @ûÂïpU Ak„€ 0Æmð 0è A aG 1É?  1Žò0 1ÓQ 1'£ 1·¦0 1o0 1HAæ  1H»"  1J#  1J�Õ 1KÜÀ  1L]å 1M—¸ 1N4Œ@ @Oœ  1 2P» 11š  !g§ 2Q|‚ !ØË 2Rž !ls 2S7z "®! !ÜF@ 1TLU 2U\ !|à 1U« 2V,7 !÷> 2WS‡ !�¬( 2XT !×  2Y ô "XS !õ6  1Z· 1Z÷œ 1[%À 1[Õ 1\ÎC 1\üh 1^›° 1^Ó 1`rX 1` | 1b?Å 1bw$ 1dl "dM 1eí 1f8 1gº� "gñà 1i‘( 1i¿M 2kgÐ •À 1m5= "ml° 1oä0 1o:	 1pÙQ "q¨ 1r¯ù "rç¨ "t†°"t´¨ 1vT0 "v‹¨ 1x*µ0 1xXÙ 1yø" "z/¨ 1{ÎÉ "|¨ 1}¥q  1}Ó• 1rÞ "ª¨ 1�I… "�€¨ 1ƒ -  "ƒN¨ "„í0"…$¨ 1†ÄA0 1†òf( 1ˆ‘® "ˆÉ¨ 1ŠhV "ŠŸ¨ 1Œ>ý  "Œm¨ 1Žj "ŽC¨ 1�ã0 "�¨ 1‘¹¹  "‘ç¨ 1“‡& "“¾¨ 1•]Î0 1•‹ò 1—+; "—b¨ 1™â "™9¨ 1šØŠ  "›¨ 1œ¥÷ "œÝ¨ "ž|ð"ž³¨ " Sà" �¨ 1¢ ³0 "¢X¨ 1£÷Z` 1¤% 1¥ÄÇ "¥ü¨ 1§›o "§Ò¨ 1©r  "© ¨ 1«?ƒ "«v¨ 1­+0 "­M¨ 1®ìÒ  "¯¨ 1°º? "°ñ¨ 1²�ç0 1²¿ "´^H"´•¨ 1¶4û "¶l¨ 1¸£0 "¸9¨ 1¹Ù "º¨ 1»¯·0 "»ç¨ 1½†_  "½´¨ 1¿SÌ "¿‹¨ "Á*1ÁX˜ 1Â÷à@ "Ã/¨ 1ÄÎˆ "Å¨ 1Æ¥/  "ÆÓ¨ 1Èrœ "È©¨ 1ÊID0 "Ê€¨ 1Ìë  "ÌN¨ 1ÍíX "Î$¨ 1ÏÄ 0 1Ïò$ 1Ñ‘m "ÑÈ¨ 1Óh "ÓŸ¨ 1Õ>¼  "Õl¨ 1×) "×C¨ 1ØâÐ0 "Ù¨ 1Ú¹x  "Úç¨ 1Ü†å kÜ¾D      / z@ÿÿøä@ q     ñLMT +01 +00 
<+01>-1
TZif2,  
@     % 3 +?1~6µW1žÖuw@Ÿ¡n` 1ªï 1ªçn  1­É§w1®§2 1¯ O  1°‡ 1±‰z 1²p0·ŸÀp    k„€   À Æmð    è A aG @É?€ @Žòp 1ÓQ 1'£ 0·¦ P Œ�	 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& @'C�H 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ o1]Ù  / @ÿÿû‡        à    LMT WE PST CE ð	ST 
CET-1CEST,M3.5.0,M10 ƒ/3
TZif2Q  @     # 3  + ð   ÿÿÿÿ’æ’Hÿÿü8=  ¸  ¦ ŸGMT 
GMT0‚ Æë @   @‹ÿÑü @±îÚX @´ÇàÐ 1Áí­ ÐÌlzÔ  "„( #(à *0 
  &¬ 4ÿ+0230 EAT +0245 
EAT-ÃE¿ ¬ %  f@†«pÑ @ŒP`  1–ªC À¡Qïx   /u²2 Uu ©ÿ+0030 WAT 
WAT-1´D�º      ¤ @¼Hðà” 1Ñ°( 1HAæ1H»"0J#O A J�Õ 1KÜÀ  1L]å 1M—¸ 1N4Œ`@Oœ  1 2P» 11š  !g§ 2Q|‚ !ØË 2Rž !ls 2S7z "®! !ÜF@ 1TLU 2U\ !|à 1U« 2V,7 !÷> 2WS‡ !�¬( 2XT !×  2Y ô "XS !õ6  1Z· 1Z÷œ 1[%À 1[Õ 1\ÎC 1\üh 1^›° 1^Ó 1`rX 1` | 1b?Å 1bw$ 1dl "dM 1eí 1f8 1gº� "gñà 1i‘( 1i¿M 2kgÐ •À 1m5= "ml° 1oä0 1o:	 1pÙQ "q¨ 1r¯ù "rç¨ "t†°"t´¨ 1vT0 "v‹¨ 1x*µ0 1xXÙ 1yø" "z/¨ 1{ÎÉ "|¨ 1}¥q  1}Ó• 1rÞ "ª¨ 1�I… "�€¨ 1ƒ -  "ƒN¨ "„í0"…$¨ 1†ÄA0 1†òf( 1ˆ‘® "ˆÉ¨ 1ŠhV ð ŠŸµ     Œ>ý    Ñ Œm"     Žj  !CÉ 1�ã 1�q 1‘¹¹ 1‘çÞ 1“‡& 1“¾… 1•]Î 1•‹ò 1—+; 1—bš 1™â 1™9A 1šØŠ 1›® 1œ¥÷ 1œÝV 1ž|ž 1ž³ý 1 SF " �¨ 1¢ ³ "¢X¨ 1£÷Z( 1¤% 1¥ÄÇ "¥ü¨ 1§›o "§Ò¨ 1©r  "© ¨ 1«?ƒ "«v¨ 1­+0 "­M¨ 1®ìÒ  "¯¨ 1°º? "°ñ¨ 1²�ç0 1²¿ 1´^T "´•¨ 1¶4û "¶l¨ 1¸£  "¸9¨ 1¹Ù "º¨ 1»¯·0 "»ç¨ 1½†_  "½´¨ 1¿SÌ "¿‹¨ 1Á*s0 1ÁX˜ 1Â÷à "Ã/¨ 1ÄÎˆ "Å¨ 1Æ¥/  "ÆÓ¨ 1Èrœ "È©¨ 1ÊID0 "Ê€¨ 1Ìë  "ÌN¨ 1ÍíX "Î$¨ 1ÏÄ 0 1Ïò$ 1Ñ‘m "ÑÈ¨ 1Óh "ÓŸ¨ 1Õ>¼  "Õl¨ 1×) "×C¨ 1ØâÐ0 "Ù¨ 1Ú¹x  "Úç¨ 1Ü†å Ü¾D  / zðÿÿó   ÿÿñð   „     ± LMT -01 + ð0 
<+01>-1
TZif2*  @     & 3  + ð   ÿÿÿÿ’æ’Hÿÿü8= @   � ŸGMT 
GMT0‚ Q�‚FÅô  Œ‚ " ‚ ¯CAT 
CAT-2ƒ Ço@   	ˆ@m{A@ @‚FÏh @Ì®Œ€ @Ížop 1ÎŽn BÏ~Qp@  @3 Zd*0  ?`SAST 
 AF#¾ ž @¶£ÚÜŒ @ žà @z4P 1}ù @[gÐ 1`~ 1=ì 1@` 1 0 1 B 1	 S  1
 $ 1
á‡  1à 1Ä 1¿è 1¥?0 @©`h 1†s  1ˆç 1g¦  1hÉ 1J+ 1H« 1+_0 1(� 1’  1o 1íÆ  1ñ‹p 1ÐK 1Ñm 1±~0 18€E´o`P `  ¤¯ ½p	  *0 „CÃ EÀ          T_Zif2  
ð      ÿÿÿÿ‹ÿÑü @±îÚX @´ÇàÐ 1Áí­ ÐÌlzÔ  "„W  #(= ñ*0 
  &¬ LMT +0230 EA
 ¿45 
EAT-3
TŒ  R @      3 #¿ § 0¶£Ú7 P  žà	 @z4P 1}ù @[gÐ 1`~ 1=ì 1@` 1 0 1 B 1	 S  1
 $ 1
á‡  1à 1Ä 1¿è 1¥?0 @©`h 1†s  1ˆç 1g¦  1hÉ 1J+ 1H« 1+_0 1(� 1’  1o 1íÆ  1ñ‹p 1ÐK 1Ñm 1±~0 @8€E € oYøäP  Í €/ ð*0    	  *0 Í�CAST CATÐo
CAT-2ÊD õP   Ê�‚FÅô  Œ˜ B  Œ /T ƒ J   ƒ @†«pÑ @ŒP`  1–ªC À¡Qïx   /ž �‚   Gï030 WAT 
WAT-17D °   ´ ÿN	Ÿ”’æ’Hÿÿü8 Ÿ õ_
GMT0êø	6Õcƒ p    ¤SÀ              @      PTZif2	   + ð   ÿÿÿÿ‚FÅô  Œ0 ÿ  LMT CAT 
CAT-2
P  :  T     3 �      	ƒ @m{A@ @‚FÏh @Ì®Œ€ @Ížop 1ÎŽn àÏ~Qp  @j  F d*0  ¼ `SAST 
 ¾ ÿ|\@‹ÿÑü @±îÚX @´ÇàÐ 1Áí­ ÐÌlzÔ  "„s"#(s€ 
  &¬ /ÿ+0230 EAT +0245 
EAT-3;D¿ § @Zz¦œ @ _lœž ÑÊZnÿÿõä   Pÿÿõ’³  ñ ­ ßMMT GMT 
GMT0¤ Dc° g[@’æ€d[@fqp °&Þ`    ]@ ]QWAT W�_WAT-1_D :    @†«pÑ @ŒP`  1–ªC `¡Qïx , /© 7‚   ¹ `+0030 ¹ 
´ I u”’æ’Hÿÿü8™  < � •I‚ o ´  ¸™ °   o@^<ý0d@’æŽ€»@ZIˆ `\*»�% Px ÷c r1  ßfx(Àf2             ó      ÿÿÿÿ’æ’Hÿÿü8) óLMT GMT 
GMT0
TZif2   S    # 3 �       ‚ @¡òÁ$ @Ý»± @Þ#­` 1áxÒ @áçeà Aå/?p !©Ì @ëNÆðp @’B` A÷p 0ú+à 1ê*  1Û_  1Ì¯ 1½ä 1´z 1Ÿ0 1“@ 1‚î  1 pJ 1!a~  1"RÏ 1#D 1$4@ 1%%70 1&@· 12Nñ 13D60 145j0 0P�™— P QTÙ€	 aRi´€    0 @  \, ð    	    ¥ÿCEST CET EET 
EET-2¯D"¯@YFô‡@‘`PO 1Æ:ˆ�1ÇXž·1ÇÛ" 1ÊâT @Ë­ið( 1ÌçKÏ@Í©� AÍÂ  !Ì° 1Î¢5 1Ï’4 1Ð‰ã@ 1Ñr 1ÒNW1Çßg1‰¬_1ªd 1t 1"£: 1#<( 1$, 1%
 1&<Ã( 1'' 1Bt !C<–P D%ç�s@ECý 1FÉ 1G#ß 1Gîæ IÁ @  	ŒF  1ñA ÇÁ PMÀÅo
CET-1ÁD�5      q@m{Kx @‚FÏh @Ì®Œ€ 1Ížo1&§°1-ŒÇq1.iñ 0/}éÊ A 0Hþ 11g212(à 13Fç 14ü115&É 15ñÞ 17« 17ÑÀ 18æ� 19±¢ 1:Æo 1;‘„ !<¯:A =qf 1>�n€ 1?Zƒp 1@oP 1A:e "BO©1CG 1D/  1Dú) 1Fö 1FÚ 1Gøp 1HÃ'` 1I×ô 1J£	 1K·Ö 1L‚ë 1M—¸ 1NbÍ 1Owš 1PB¯ 1Q`·` 1R"‘ "S@ð1T®p 1U {  1Uë� 1W ] 1WËr 1Xà? ¯Y«T @  B "l€ 
  *0
r!99ÿ+0130 SAST WAT CAT 
CA?G0T  ‹   !f@?ÂýÑ @}‡Z^ @Ë‰DÐ 1Ò#ôÞ@ÒaP@ @úÒU° @þ¸qP @ÿ¨T@Ý 1 ˜S÷1ˆ6 1x5 @qRÀ  @aQÐ 1Q4 1A3 11 1�m 1	ø 1	­é@ 1
ðÚ 1àÙ  1Ù÷` 1À» 1¹Ù 1©Ø0 1™» 1‰º 1y� 1iœ 1Y 1I~ 19a 1)` 1"}p 1	B 1_ 0+"A òP @â3°Ð 1Ò2 1Â 1² 1¡÷ 1 vG` ð !�Ù°    "V)@   Ð #jö0    $6@ 1%JØ 1&í 1'*º @'ÿ	À  1)
œ 1)Þë 1*ê~ 1+¾Í @,Óš°( 1-ž¯ 1.³| 1/~‘ 10“^ 11g®` 12s@ 13G� 14S" 15'r 163 17T 18!p 18ç6 19ü 1:Ç 1;Ûå 1<°4p 1=»Ç 1>� 1?›© 1@oø 1A„Å` 1BOÚ 1Cd§ 1D/¼ 1ED‰ ¿Eóï@ 	?	    «â  ÿÿZb ¡eP ÿÿs` qÿÿeP   � ÿÿ�p ð2LMT NST NWT NPT BST BDT AHST HDT 
HST10HDT,M3.2.0,M11.1.0
TZif2 ¨ 
@     % 3 ðT   
   (ÿÿÿÿ?ÂýÑ @}‡AH @Ë‰6À AÒ#ôp 0aB0 @úÒG  @þ¸c@ 1ÿ¨F¡1 ˜EÑ1ˆ( 1x' 1qD‘1aC¡1Q& 1A% 11 1�_ 1	ê 1	­Û@ 1
ðÌ 1àË  1Ùé` 1À­ 1¹Ë 1©Ê0 1™­ 1‰¬ 1y� 1iŽ 1Yq 1Ip 19S 1)R 1"op 1	4 1Q @+X1òB @â%  1Ò$ 1Â 1² 1¡é 1 v9` 1!�Ë 1"V @#jè @ 1$5ý 1%JÊ 1&ß 1'*¬ 1'þûP 1)
Ž 1)ÞÝ 1*êp 1+¾¿ 1,ÓŒ` 1-ž¡ 1.³n 1/~ƒ 10“P 11g ` 12s2 13G‚ 14S 15'd 162ö "7à18p "8çà19ûõ 1:Ç
0 1;Û× "<°à1=»¹ ">�à1?›› "@oà1A„·` "BOà1Cd™ 1D/®° 1ED{ OEóá0ÉC ÄøÃ!sx `É �pÉA�p±½ � ÿÿ�€ #É£AST AWT APÁAÂY KÔÏKST 
AKST9AKÑU üP   ™�“73¬ÿÿÆTà DÇÀ ¶ _
AST4SD‚ o�3      1–ªtµ@¸Ià 1¸ý@½1¹ñ4 @ºÞt  1Ú8® 1Úëú @Üá° 1Ü¹Y  1Ýû 1Þ›Þ 1ßÝš 1àT3 1ô—ÿ0 1õ^ 1öÀd  1÷p 1øQ, 1øÇÅ  1ú
Ò0 1ú¨ø  1ûì  1ü‹}õ1ÉŽUðx×      5°     °3Ï     !�i0 1"È @#X° @#âp  1%7ò 1%ÔÇ 10€y0 11M0 12W   13j  148T  14øÁ 16  16Ïh0 17öÆ0 18¸…  19ßã  1:�,  1;Èÿ  1<o 1=Ä‘  1>Nð 1Pƒe oQ 9  ðÿÿÒÐ  ÿÿãàÿÿÕÐ LMT -02 -03 
<-03>3
TZif2þ  @     & 3 ð      ÿÿÿÿ“.#  ö˜ìHÿÿ¿]— ¢À¸ ÿÿÇÀ 
— ß430 AST 
AST4— D�O      � @i‡� @¸õ�× @+Ú@ 1üð—@
ÏtÀ 1—Ê 1±ù 1xþ—1“-0 1Z1  1t`  1dC 1U”  1FÈ 18 1'ü@ 1L0 1	/  1ú€  1êc  1Û³  1Ìè 1¾8 1®0 1Ÿl0 1�O  1€Ÿ  1 p‚  1!aÓ  1"S 1#DX 1$4;0 1%A; 1&n  1'¿ 1'ö¢  1(îŠ 1)°H  1*Ï½` 1+¹	  1,««  1-p  1.ŒÞ  1/Oî 10n  116h0 12W.  13²  147 14øÏ  16ò 16áë  17öÔ 18ÁÍ 19Ö¶ 1:¡¯ ";¿à 1<¯¶@ 1=q�  1>�˜ 1?Z­€ 1@oz 1Aqî 1B3¬@ 1CQÐ 1DŽ 1E1² 1Eóp 1GÎP 1GÓR 1Hú° 1I³4 1JÚ’ "KÁP1L§ÿ 1M¡p 1N‡á 1O€ÿ ŸPpþ@ 7@ÿÿÉðL#ÉðLé  XAó4ó14>4ùð ,M10.1.0/0,M3.4	 tD�      l@rî„d @ž¸¡€ @Ÿºùp @ÈøW` 1Ëˆþ 1Ò#ô @Òa	ðùpÿÿªì  ¹°Ï¡«  ÿÿ¹°    ò ðCDT CST CWT CPT ETOEST5à DPT   
^ À @?ÂýÑ @}‡Z^ @Ë‰DÐ Ð  P@ @úÒU° @þ¸qP 1ÿ¨T|@ ˜SPt1ˆ6 1x5 1qRL@aQÐ  1Q4 1A3 11 1�m 1	ø 1	­é@ 1
ðÚ 1àÙ  1Ù÷` 1À» 1¹Ù 1©Ø0 1™» 1‰º 1y� 1iœ 1Y 1I~ 19a 1)` 1"}p 1	B 1_ 1+"1òP 1â3L1Ò2 1Â 1² 1¡÷ 1 vG` 1!�Ù 1"V) 1#jö\1$6 1%JØ à&í@    '*º0  á  'ÿ	À    )
œ0 !Þë 1*ê~ 1+¾Í @,Óš°  1-ž¯ 1.³| 1/~‘ 10“^ @1g®@( 12s@ 13G� 14S" 15'r 163 17T 18!p 18ç6 19ü 1:Ç 1;Ûå 1<°4p 1=»Ç 1>� 1?›© 1@oø 1A„Å` 1BOÚ 1Cd§ 1D/¼ 1ED‰ ¿Eóï@ 	?	    «â  ÿÿZb ¡eP ÿÿs` qÿÿeP   � ÿÿ�p ð2LMT NST NWT NPT BST BDT AHST HDT 
HST10HDT,M3.2.0,M11.1.0
TZif2 € 
@     % 3 ð=      ÿÿÿÿ–ªk A¸Ià 0ý@  @¹ñ40 @ºÞt  1Ú8® 1Úëú @Üá° 1Ü¹Y  1Ýû 1Þ›Þ 1ßÝš 1àT3 1ô—ÿ0 1õ^ 1öÀd  1÷p 1øQ, 1øÇÅ  1ú
Ò0 1ú¨ø  1ûì  @ü‹} è 1ÉŽ!1x× 1 51 3Ï 1!�i  1"È 1#X  @#âp @ 1%7ò 1%ÔÇ 1'!0 1'½ã0 1) ñ 1)”‹  1*ê0 1+k2  1,Àµ  1-fÄ  1. — 1/F¦ 10€y 11M0 12W @ 13j  148T  14øÁ 16  16Ïh0 17öÆ0 18¸…  19ßã  1:�,  1;Èÿ  1<o 1=Ä‘  1>Nð 1NšH  oOI’  (@ÿÿÛäô ãàÿÿÕÐ Ðÿ -02 -03 
<-03>3ªDp'     O`ÿÿ¥¶èpr1¯ònª@¶fV` 1·CÒ 2¸6 0ý†ð 1Ëêq @Ø‘´ðò@  p€ @1g„ 12s 13Gf 14Rø 15'H 162Ú 17* 08÷7 A 8ç 19ûÙ @:õ�	 0;¶Ñ A <°
 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ 1Ft 1G$A 1Gø‘€ 1I# 1IØs 1Jä 1K¸U CLÍðù? `ÿÿ�Tä ��Ø€«  ÿÿ�€! « ÿÿ¹°öðMST CST PST MDT C½PCST6C¼4´o,M10.5¼Fp
     m`ÿÿ©y$åê@¸…cå[A òà 0”ŒÐ 1—  1tn 1vâ 1TP @_ÿ`( s0>P @ÿÿÈ È ÕÐå@ÇÀ PBMT A»�ST 
AST4ùD£!ttç £ÀÿÿºÞt ÿÿÿÿÚ8‘®0ÿÿÿÿÚëú @Üá° @Ü¹Y  1Ýû 1Þ›Þ 1ßÝš 1àT3 1ô—ÿ0 1õ^ 1öÀd  @÷ @ 1øQ, 1øÇÅ  1ú
Ò0 1ú¨ø  1ûì  Àü‹}     ÉŽ0 1x× @ 5° 1 3Ï 1!�i  o"È  ðÿÿÒŒ  ÿÿãàÿÿÕÐ LMT -02 -03 
<-03>3
TZif2`  @     & 3 �b      1“^Ùò @ŸŸ;à @ EQØ 1¡ @¢.nX 1£^ÿ 1¤P 1¥>á 1¥î2 @§'þ`( 1§Î 1©à 1©­ö 1ªçÂ 1«—` 1¬Ç¤ 1­vô 1®§† 1¯VÖ 1°‡h 1±6¸ 1²p„p 1³š 1´Pf 1´ö| 1¶0H 1¶ß™p 1¸* 1¸¿{ 1¹ð 1ºŸ] 1»Ù)` 1¼? 1½¹ 1¾_! 1¿˜í 1À? 1ÁxÏ 1Â(p 1ÃX± 1Ä 1Å8“ 1Åçã 1Ç!¯p 1ÇÇÅ 1É‘ 1É§§ 1Êás 1Ë�Ä` 1Ì@" @Ò#ôpH@ÒÆqP 1Ö)úX 1ÖÙJ8 1Ø	Ü 1Ø¹, 1Ùé¾ 1Ú™ 1ÛÒÚH 1Üxð 1Ý²¼ 1ÞXÒ 1ß’ž 1àAïx 1ár€ 1â!Ñ 1ãRb 1ä³ 1å2D 1åá• 1çap 1çÁw 1èûC 1é¡Y 1êÛ% 1ëŠup 1ì» 1íjW 1îšé 1ïJ9 1ð„` 1ñ* 1òcç 1ó	ý 1ôCÉ 1ôéß 1ö#« 1öÒüp 1ø� 1ø²Þ 1ùão 1ú’À 1ûÌŒp @ür¢X AbÛ` 0¹ÐP 1aq O«7P°Ì/3 €ÿÿ­P÷ ²¨÷¡«  
ÿÿ¹°  	ÿ
530 CST CWT CPT CDT 
CST6D P   u@^=9 1ž¸…=1ŸºÝ�1Ëˆâ ¥Ð`íÐÿÿÊtÙ  ÕÐÙ @ÇÀ Ö! Ó ÿADT AST AWT APT 
AST4Í D�!      Å 1–ª@¸WðÕ 1¸ýNò@¹ñB@ 1ºÞ‚ä1Ú8¼ 1Úì @ÜïÀ  1Ü¹g  1Ýû# 1Þ›ì 1ßÝ¨ 1àTA 1ô˜0 1õl 1öÀr  1÷,p 1øQ: 1øÇÓ  1ú
à0 1ú©  1ûì  @ü‹‹°š@Éœ@ 1xå @ CÀ 1 3Ý 1!�w  1"Ö 17öÔ  18¸“„19ßñ  O9é°§JÿÿÇ À ´ Œ1-04�/4>®E@    nð^œ4ðÿÿÿÿ˜XUp    ñ*sP    +¾]@ÿÿº�   ðÿÿÇÀÿÿ¹° LMT BMT -04 -05 
<-05>5
TZif2A  @     & 3 ðZ      ÿÿÿÿ^À @ž¦H  @Ÿ»� 1 †* 1¡š÷ @¨FL  1Ë‰ @Ò#ôp @Òa  @úøu 1ûèX 1üØW 1ýÈ: 1þ¸9 0ÿ¨§ P  ˜	 0‡þ A wý @q€ @a� 1Pü 1@û 10Þ 1² 1	À 1	­±@ 1
ð¢ 1à¡  0Ù¿G A Àƒ 1¹¡ 1© 0 1™ƒ 1‰‚ 1ye 1id 1YG 1IF 19) 1)( 1"Ep 1	
 1' 1ò&p 1â	 1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 1#jÌp 1$5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾£ 1,Óp` 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 18÷p 18ç 19ûÙ 1:Æî 1;Û» 1<°
p 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ ïEóÅ =@ÿÿ“¹ñ��ÿÿ�€ ÿÿ«  qÿÿ��  ËðPDT PST MWT MPT M ÿDT 
MST7MDT,M3.2.0,M11.1.0çDp=     ™ `ÿÿrœ¨LŸ@¢’�0 @¶{R@ @·É° 1¸� 1¸Ôp  1º}1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  "ý¬01þœ5 @ÿŒ4@¨@£J° @$o  1#”µ 1$” 1%7ò 1%ðv @'!0( 1'ÐX 1) ñ 1)°: 1*àÓ @+™W ( 17öÆ@ 18¿* 2Gw	 !Ü  1Hú¢ I¼a  '  @ÿÿÉ4â1ÃÐ › â ÕÐâ‚ãàÿÿÕÐ§C§Q3 -02«?3>3ÄD�>   	   %¤@¡òÍ€ ƒ1÷/Z“@ø(…ð<ÃcÀ  !�¯€    "U�ÿ    #jÌ A $5á 1%J® 1&Ã 1'*� 1'þß	 1)
r 1)ÞÁ 1*êT 1+¾£ @,Óp€ 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 08÷_ A 8æþ @9ûÊð	 A:éP !Æî( 0;Û» A <°
x 1=»� 1>�ì 1?› 1@oÎ 1A„›h 1BO° 1Cd} 1D/’ 1ED_ ¿EóÅ I+ w q ÿÿ«  Ñÿÿ�� ÿÿ¹°      ð !-00 MWT MPT MST MDD òT CDT CST EST 
MST7MDT,M3.2.0,M11.1.0
TZif2x  	@     $ 3 p[     º áÿÿ–ªz4ÿÿÿÿ¸Wð 0ýN° @¹ñB@ @ºÞ‚0 1Ú8¼ 1Úì @ÜïÀ 1Ü¹g  1Ýû# 1Þ›ì 1ßÝ¨ 1àTA 1ô˜0 1õl 1öÀr  1÷,p 1øQ: 1øÇÓ  1ú
à0 1ú©  1ûì  @ü‹‹°è @Éœ@ 1xå @ CÀ 1 3Ý 1!�w  1"Ö 1#X  @#â~0( 1%8  1%ÔÕ 1'!0 1'½ñ0 1) ÿ 1)”™  1*ê0 1+k@  1,ÀÃ  1-fÒ  1. ¥ 1/F´ 10€‡ 11[0 12W.@ 13x  148b  14øÏ 16 - 16Ïv0 17öÔ0 18¸“  19ßñ  1:�:  1;É  1<o 1=ÄŸ  1>Nþ 1?’ 1@.à 1A‡ 1BýP 1CQÐ 1C÷ß 1EMaP 1Eàû0 1G”  1G·£  1Hú°  1I—… 1JÚ’ 1K€¡0 1Lºt 1M`ƒ 1NšV 1OI 0 1PƒsP 1Q G  1RcU 1S ) 1TC7 1TéF0 1V# 1VÉ( 1Xû 1X©
 1YâÝ 1Zˆì 1[Þnp o\hÎ0 F ÿÿÌÌ  ÿÿÕÐÿÇÀ LMT -03 -04 
<-04>4¸D�*      x@¥¶Ú`È1†Õ 11ggP12rú 13GI 14RÜ 15'+ 15Ä  @62Ìp@ 07 A 8è   !õ@1;¶Â  1<¯ü 1=»Ž 1>�Þ 1?›p 1@oÀ 1A„�` 1BO¢ 1Cdo 1D/„ 1EDQ 1Ff 1G$3 1Gøƒ� 1I 1IØe 1Jã÷ 1K¸G 1LÍp 1M˜) 1N¬õ 1Ox 1PŒ× 1Qa'` 1Rl¹ 1SA	 1TL› pTÍÝ  / Pÿÿ®¨ÿ¡«  ÿÿÇÀæ ÓD× ã_
EST5.À              ð      ÿÿÿÿi‡@ @“,< @ö˜ìH* @G[’p ðW%©pÿÿÁ@  ÿÿÁD ÿÿÀ¸ ÿÿÇÀ LMT CMT -0430 à 
<-04>4
TZif2D  @     & 3 �=      ® @rœ¯, @¢’�0 1¶{RÎ @·É° 1¸� 1¸Ôp  @º}À 1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  "ý¬01þœ5 @ÿŒ4@ˆ@£J° @$o  1#”µ 1$” 1%7ò 1%ðv @'!0( 1'ÐX 1) ÿH 1)°: 1*àÓ  @+™W ( 17öÆ@ 18¿* 1@»ñ  @@ÕÀ  1Gw	 AGÜ ~ ‚ "   ÿÿÂT¶ ÃÐ¶ ÇÀ¶÷ÕÐÿÿãàÿÿÕÐ Â� -03 -02Ä?3>3ÄD�      Œ@‘ô+�  œ`ÿÿÎð±  ÇÀ± @ÕÐ Ÿ 1-04›  [— T@i‡&— @‹ôaè—  µp—  µ— "¹°—  øŸEST 
EST5,D¯ð� @^þ  @ž¦,€ @Ÿºùp 1 † 1¡šÛ @¢Ët  @£ƒ÷ð 1¤EÒ  1¥cÙ 1¦SÙ  1§—0 1¨3» 1¨þ³  1ª� 1ªÞ• 1«ó 1¬¾w 1­Óa 1®žY 1¯³C 1°~; 1±œ_p 1²gX` 1³|A 1´G: 1µ\# 1¶' 1·< 1¸þ 1¹ç 1¹æà 1»` 1»ÆÂ 1¼äæ 1½¯Þp 1¾ÄÈ 1¿�À 1ÀZÖ 1Á°<0 1Â„Œ 1ÃO„  1Ädn 1Å/f 1ÆMŠp 1ÇH 1È-l 1Èøe@ 1ÊN 1ÊØG 1Ëˆþ 1Ò#ô 1Òa	8 1ÓuóX 1Ô@ë 1ÕUÕ 1Ö Í 1×5· 1Ø ¯ 1Ù™ 1Ùà‘ 1ÚþµX 1ÛÀs 1ÜÞ— 1Ý©�h 1Þ¾y 1ß‰r 1àž[ 1áiT 1â~= 1ãI6 1ä^ 1åW<P 1æG<p 1ç7 1è' 1é   êåQÿÿêöâ 1ëæâ  1ìÖÄ 1íÆÄ 1î¿á` 1ï¯à` 1ðŸÃ 1ñ�Â 1ò¥ 1óo¤ 1ô_‡ 1õO† 1ö?i 1÷/h 1ø(…` 1ùJ 1úg 1úøgp 1ûèI 1üØI 1ýÈ+ 1þ¸+ @ÿ¨ð81 ˜ ð‡ïð    wï     q�p    a€ 1Pî 1@í 10Ð 1�' 1	² 0	­£/ A 
ð” 1à“  @Ù°ð 1Àu 1¹’ 0©’ A ™t 1‰t 1yV 1iV 1Y8 1I8 19 1) 1"7p 1ü 1 1òp 1áû 1Ñú 1ÁÝ 1±Ü 1¡¿ 1 v@ 1!�¡ 1"Uñ 1#j½p 1$5Ó 1%JŸ 1&µ 1'*� 1'þÑP 1)
c 1)Þ³ 1*êE 1+¾• 1,Ób` 1-žw 1.³D 1/~Y 10“& 11gv` 12s 13GX 14Rê 15': 162Ì 17 18èp 18æþ 19ûÊ 1:Æà 1;Û¬ 1<¯üp 1=»Ž 1>�Þ 1?›p 1@oÀ 1A„�` 1BO¢ 1Cdo 1D/„ 1EDQ oEó·  $ ' = $ :ðÿÿ­Ô  ÿÿ¹°ÿÿ«      ! ñ'LMT CDT CST EST CWT CPT 
CST6CDT,M3.2.0,M11.1.0
TZif2i 
@     % 3 ð      ÿÿÿÿ¥¶èp @¯ònà @¶fV` 1·CÒ 2¸6 !ý†ÊJ Hˆ 162ÚÒ17* 08÷ A 8ç 19ûÙ @:õ�	 0;¶Ñ R <°
�˜c @ÿÿœŒ^7�� ^ j XMP  ÐDT MDT 
MST7MT4Lo,M10.5TF�      <@rî„d @ž¸¡€ 1Ÿºùd1ÈøWL1Ëˆþ 1Ò#ô @Òa	ð»pÿÿªè 
F è "¹°F FB N_
EST54D=à 4@rœ­°Ø @¢’�0 @¶{R@ 1·É 1¸� 1¸Ôp  @º}À  1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  "ý¬01þœ5 @ÿŒ4@ý@£J° @$o  1#”µ 1$” 1%7ò 1%ðv @'!0( 1'ÐX 1) ÿH 1)°: 1*àÓ  @+™W ( 17öÆ@ 18¿* 2Gw	 !Ü  1Hú¢ `I¼a € "   ÀÿÿÃÐ  ÿÿÃÐ ðÿÿÇÀ ÿÿÕÐÿÿãà ÿ LMT CMT -04 -03 -02 
<-03>3
TZif2  @     ) 3 ð
      ÿÿÿÿi‡*M @£èM@ A6I` 0·nP 1+ 1—P 1'—à @(n¶Ð  1)wÂ s)ÂÙÐ aÿÿ±3   Ðÿÿ¹°	ÿÿ«  í  SJò ÏDT CST 
CST6è D@    à @^=p¼ @›ÖKp °žù; ÿÿ’Ä©  �� ÿÿ�€ £ PMST Pž OMST7ž DYž @–ª{”– A¸Wð 0ýN° @¹ñB@ @ºÞ‚0 1Ú8¼ 1Úì @ÜïÀ 1Ü¹g  1Ýû# 1Þ›ì 1ßÝ¨ 1àTA 1ô˜0 1õl 1öÀr  1÷,p 1øQ: 1øÇÓ  1ú
à0 1ú©  1ûì  @ü‹‹°þ@Éœ@ 1xå @ CÀ 1 3Ý 1!�w  1"Ö 1#X  @#â~0( 1%8  1%ÔÕ 1'!0 1'½ñ0 1) ÿ 1)”™  1*ê0 1+k@  1,ÀÃ  1-fÒ  1. ¥ 1/F´ 10€‡ 11[0 12W.@ 13x  148b  14øÏ 16 - 16Ïv0 17öÔ0 18¸“  19ßñ  1:�:  1;É  1<o 1=ÄŸ  1>Nþ 1A‡ 1Bý@ 1CQÐ 1C÷ß 1EMa@ 1Eàû0 1G”  1G·£  1Hú°  1I—… 1JÚ’ 1K€¡0 1Lºt 1M`ƒ 1NšV 1OI 0 1PƒsP 1Q G  1RcU 1S ) 1TC7 1TéF0 1V# 1VÉ( 1Xû 1X©
 1YâÝ 1Zˆì 1[Þnp o\hÎ0 D@ÿÿËl¤BÕÐF ¤,4,?4>4¦D¦f@“.#  ö˜ìHÿÿ¿]—  À¸;BÇÀ 
— P430 A=?AST— E"Ã� 0›€ILA M|£@3ú� 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ @¼½@ 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 20d­ ?çN0„Pÿÿî€· ÕÐ·@ãàì ˆT¿2 GMT 
GMT0V,À              ð]   	   %ÿÿÿÿ}†Ž´ @ž¸Ë° @Ÿ»#  1 Ð @¡¢Ò€ 1Ë‰( @Ò#ôp @Òa4  @÷/v� @ø(¢d @0ì� @ir  1YU 1IT 197 1)6 1"S0 1	 15 @ò4 @ 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç 1:Æü 1;ÛÉ 1<°p 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm 1EóÓ` 1G-Š@ 1GÓµ 1Il 1I³— 1JíN 1Kœ³@ 1LÖj@ 1M|• 1N¶L 1O\w 1P–. 1Q<Y 1Rv 1S; 1TUò 1Tü 1V5Ô 1Vå:p 1Xñp 1XÅ 1YþÓ 1Z¤þ 1[Þµ 1\„à 1]¾— 1^dÂ ÿ_ž\ð =ñÿÿ}L  ÿÿ�€ÿÿ�p   pÿÿ�� !   ð !LMT YDT YST YWT YP ðDT PST PDT MST 
MST7
TZif2 @     & 3 �:      ½@^=t8 1ž¸½ý1Ÿ»Õ1Ë‰ õ &( 1ÕUñý1Ö ê 1×5Ó 1Ø Ì 1Ùµ 1Ùà® 1ÚþÑH 1ÛÀ� 1ÜÞ³ 1Ý©¬h 1Þ¾• 1ß‰Ž 1àžw 1áip 1â~Y 1ãIR 1ä^; 1å)4 1æGXp 1çQ` 1è': 1èò3 1ê 1êÒ 1ëæþ 1ì±÷ 1íÆà 1î‘Ù 1ï¯ü` 1ðq» 1ñ�Þ 1òÁp 1óoÀ 1ô_£ 1õO¢ 1ö?… 1÷/„   01ùf 1ú„P 1úøƒp 1ûèf 1üØe 1ýÈH 1þ¸G 1ÿ¨*Í1 ˜)Í1ˆ 1x 1q(-1a'=Bð�ë ò Pÿÿ�HÊ ��Ê �€Ê@��²Ê  ¸ Ÿ§_WT PP«O�a      K"^˜1ž¦:k1Ÿ» 1 † 1¡šé 1¢eþ @£„ 8 1¤Eà 1¤�¦  1Ë‰ Û( Ð” 1ùX( 1úv 1úøu£1ûèX 1üØW 1ýÈ: 1þ¸9 0ÿ¨ŠA  ˜³1‡þ 1wý @q€ 1aÃ1Pü 1@û 10Þ "�1	À 1	­±@ 1
ð¢ 1à¡0 0Ù¿O A Àƒ ð ¹¡     ©    P ™ƒ  @‰‚ 0ye A id 1YG 1IF 19) 1)( @"E€ 1	
 1' @ò&� 1â	 1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 0#jÌG A $5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾£ 1,Óp` 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 18÷p 18ç 19ûÙ 1:Æî 1;Û» 1<°
p 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ cEóÅ #	   4ñÿÿ�”  ÿÿ« ÿÿ��   ñ#LMT MDT MST MWT MPT 
MST7MDT,M3.2.0,M11.1.0
TZif2é  
@     % 3 ðP      ÿÿÿÿ…½"[ @™<”  @Ëˆðp 2Ò#ô 0`ûà @×5¨ð 1Ø ¡ @û3�Œ 1ûè; 1üØ:  @ýÈàˆ @@ßp A0Â` !� 1	¤ 1
 £ 1
ð† 1à… 1Ù¢@ 1Àg 1¹„ @©ƒðH 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC ¯Eó¨ð 7Bÿÿ²%y` ÿÿ¹°y¡ÇÀÿÿÇÀ PCST E ÿWT EPT EDT 
EST5EƒU ®0  ¡ °ÿÿ“73¬ÿÿÆT¼ @ÇÀ ¤ ŸAST 
AST4D�Y      Å1ˆÞÎÅ@ž¸¯� @Ÿ»€ 1 ˜‘ 1 Ò… 1¢Šè 1£„-1¤jÊ 1¥5Ã  @¦Sç8 1§¥ 1¨3É 1¨þÂ0 1Ë‰0 ]!a 1ÕUã( 0Ö ÜäA a·@Pü€ 1@û 10Þ 1 Ý 1	À 1
 ¿ 1
ð¢ 1à¡ 0Ù¿? A Àƒ 1¹¡ 1© g×	À    YG     °IF    9) A )( @"E€ 1	
 1' @ò&� 1â	 1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 0#jÌG A $5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾£ 1,Óp` 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 18÷p 18ç 19ûÙ 1:Æî 1;Û» 1<°
p 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ gEóÅ '    ñÿÿ•   ÿÿ« ÿÿ��   ñ#LMT MDT MST MWT MPT 
MST7MDT,M3.2.0,M11.1.0
TZif2á  
@     % 3 ð!      ÿÿÿÿ–ªˆ€ A¸f  0ý\À @¹ñPP @ºÞ�@ 1Ú8Ê 1Úì @ÜýÐ 1Ü¹u  1Ýû1 1Þ›ú 1ßÝ¶ 1àTO 1ô˜0 1õz 1öÀ€  1÷:p 1øQH 1øÇá  1ú
î0 1ú©  1ûì"  @ü‹™Àè @ÉªP 1xó @ QÐ 1 3ë 1!�…  1"ä 1,ÀÑ @-fà@( 1H` ORÀû`ÿÿ¾€Ò ÇÀÒ ¹°Ò@ÇÀ Ìÿ -04 -05 
<-05>5´DT   ´@£Õ¦ Ä @ šÜà 1!\›Ì 1"z¾ A#<}PÔ @ÿÿ¬`¸  ¹°¸ @«  ² ßCDT CST 
CST6° D�^      $1¥¶öd@©yOp @¯ò|ð 1¶fd 2·|!
ò 1Ëê�0 1Ò#ô  1Ò™º 1×Y( 1Ø‘´( @â~K�H 1ãIR 1ä^- 1å)4 @æGJ  1çQ 2è', !ò3 2ê !Ò 1ëæð 1ì±÷ 1íÆÒ 1î‘ÙŽ@à¯ p1ÙÍ 1À‘ 1¹¯ 1©®˜1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 1"S®1	 15 1ò4p 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç 1:Æü 1;ÛÉ 1<°p 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm 1F‚ 1G$O 1GøŸp 1I1 1IØ� ðJä�    Kœ³ O Aðÿÿ’L  ÿÿ�� ÿÿ�€  !   LMT MST P ÿDT PWT PPT 
PST8PDT,M3.2.0,M11.1.0
TZif2  @     ) 3 ð�      ÿÿÿÿ^=v‡ @ž¸½  @Ÿ»� 1Ë‰ @Ò#ôp @Òa& @ÕUñ  1Ö ê 1×5Ó 1Ø Ì 1Ùµ 1Ùà® 1ÚþÑH 1ÛÀ� 1ÜÞ³ 1Ý©¬h 1Þ¾• 1ß‰Ž 1àžw 1áip 1â~Y 1ãIR 1ä^; 1å)4 1æGXp 1çQ` 1è': 1èò3 1ê 1êÒ 1ëæþ 1ì±÷ 1íÆà 1î‘Ù 1ï¯ü` 1ðq» 1ñ�Þ 1òÁp 1óoÀ 1ô_£ 1õO¢ 1ö?… 1÷/„ 1ø(¢@ 1ùf 1ú„ 1úøƒp 1ûèf 1üØe 1ýÈH 1þ¸G @ÿ¨*Ð@ ˜)  1ˆ 1x @q(� @a'  1Q
 1A	 10ì 1 ë 1	Î 1
 Í 1
ð° 1à¯ 1ÙÍ` 1À‘ 1¹¯ 1©®p 1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 1"Sp 1	 15 1ò4p 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç 1:Æü 1;ÛÉ 1<°p 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm 1EóÓ` 1G-Š@ 1GÓµ 1Il 1I³— 1JíN 1Kœ³@ 1LÖj@ 1M|• 1N¶L 1O\w 1P–. 1Q<Y 1Rv 1S; 1TUò ¿Tü  tRÿÿŒùºº ºP² º¶ Ê_
MST7¨D�&      p1^þH@ž¦,€ 1Ÿºù˜1 † 1¡šÛ 1ÊW" 1ÊØG 1Ëˆþ È 	ð@ @Óuó  1Ô@ë 1ÕUÕ 1Ö Í 1×5· 1Ø ¯ 1Ù™ 1Ùà‘ 1ÚþµX 1ÛÀs 1ÜÞ— 1Ý©�x 1Þ¾y 1ß‰r 1àž[ 1áiT 1â~= 1ãI6 1ä^ 1èòP  ê“Qÿÿþ¸ @ÿ§ÿàè@ —þð 1‡á @D/vp AEDC` 3ó¨ðYdÀ2 ñÿÿ¯:  ÿÿ¹°ÿÿ«     ÿ4 ÿÿÇÀLMT CDT CST CWT CPT EST EDT 
EST5EDT,M3.2.0,M11.1.0
TZif2   @     ( 3 ð'      ÿÿÿÿ–ªk A¸Ià 0ý@  @¹ñ40 @ºÞt  1Ú8® 1Úëú @Üá° 1Ü¹Y  1Ýû 1Þ›Þ 1ßÝš 1àT3 1ô—ÿ0 1õ^ 1öÀd  1÷p 1øQ, 1øÇÅ  1ú
Ò0 1ú¨ø  1ûì  @ü‹} è @ÉŽ0 1x× @ 5° 1 3Ï 1!�i  1"È 1#X  @#âp ( 1%7ò 1%ÔÇ 17öÆ 18¸… 19ßã@ 19òJ 1;Èÿ  o<o  @ÿÿÛè ãà@ÕÐ ÿ -02 -03 
<-03>3äDpO     }`ÿÿ€ñ¨4¬@ž¸…` @ŸºÝP 1Ëˆâ @Ò#ôp @Ò`íÐ 1àž? @ái8P,@`ï` 1PÒ 1@Ñ 10´ 1 ³ 1	– 1
 • 1
ðx 1àw @Ù”ÐH 1ÀY 1¹v @©uà 1™X 1‰W 1y: 1i9 1Y 1I 18þ 1(ý 1"p 1ß 1ý 1ñüp 1áß 1ÑÞ 1ÁÁ 1±À 1¡£ 1 uò@ 1!�… 1"UÔ 1#j¡p 1$5¶ 1%Jƒ 1&˜ 1'*e 1'þµP 1)
G 1)Þ— 1*ê) 1+¾y 1,ÓF` 1-ž[ 1.³( 1/~= 10“
 11gY` 12rì 13G; 14RÎ 15' 162° 17ÿ 18Ìp 18æá 19û® 1:ÆÃ 1;Û� 1<¯àp 1=»r 1>�Â 1?›T 1@o¤ 1A„q` 1BO† 1CdS 1D/h 1ED5 ŸEóšà'M@ÿÿÇÌL ÕÐL ÇÀh ÕÐÿÿÕÐXÿADT AST AWT APT 
AST4AT3n  P   &  T3 "T0›€h7 A M|@3ú� 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ @¼½@ 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ O1]ÙÞBÿÿÏ€Ûs ÿÿãà' 3 +'P<-02>±5.0/-2,M10. 1AD�˜   
   !ð^=<$ÿÿÿÿž¸~ŒÿÿÿÿŸ°ºÖ|ÿÿÿÿ¾žMl @À¸18 @Áyï¨ 1Â˜ 1ÃYÑ 1Äwõ 1Å9³ @Æa¸( 1Ç• 1È@ó @É²( 1Ê Õ 1Êâ” 1Ì · @Ò#ôp  @Ò`æÈ @ÓˆDØ @ÔJH 1Õh& 1Ö)å 1×H 1Ø	Ç 1Ù'ê 1Ùé© @ÛX8 1ÛÒÅP 1ÜÞt 1Ý©m  1Þ¾V 1ß‰O 1àž8 1ái1 1â~ 1ãI 1ä]ü 1å(õ 1æGp 1ç` 1è&ú 1èñó 1êÜ 1êÑÕ 1ëæ¾ 1ì±· 1íÆ  1î¿¾P 1ï¯½` 1ðŸ  1ñ�Ÿ 1ò‚ 1óo� 1ô_d 1õOc 1ö?F 1÷/E 1ø(b` 1øÚk @ù.`AúKÐ 0øJà 1ûè- 1üØ, 1ýÈ 1þ¸ Pÿ§ñÐ  0—ðà 1‡Ó 1wÒ @pðP @`ï` 1PÒ 1@Ñ 10´ 1 ³ 1	– 1
 • 1
ðx 1àw 1Ù”` 1ÀY 1¹v 1©up 1™X 1‰W 1y: 1i9 1Y 1I 18þ 1(ý 1"p 1ß 1ý 1ñüp 1áß 1ÑÞ 1ÁÁ 1±À 1¡£ @ uÖüð @!�il 1"U¸ @#jwÜ 1$5š @%Jgì 1&| 1'*I @'þ™| 1)
+ 1)Þ{ 1*ê 1+¾] 1,Ó*` 1-ž? 1.³ 1/~! 10’î 11g=` 12rÐ 13G 14R² 15' 162” 17ã 18°p 18æÅ 19û’ 1:Æ§ 1;Ût 1<¯Äp 1=»V 1>�¦ 1?›8 1@oˆ 1A„U` 1BOj 1Cd7 1D/L 1ED 1Eó~` 1G-5@ 1GÓ` 1I 1I³B 1Jìù 1Kœ_@ 1LÖ@ 1M|A —N¶P '   / 	,  X ñÿÿÇ\  ÿÿÎ” ÿÿÜ¤ÿÿÎÈ Ø ð'ÜØÿÿÜØÿÿÕÐÿÿÇÀ ÿÿãàLMT NST NDT NPT NWT ADT AS ðDT 
AST4ADT,M3.2.0,M11.1.0
TZif2Z @     & 3 �L      4@i‡0 @“´þ@ @‰eð 1yHT1iG 1Y* 1I) 19 1) 1")T1í 1 @ò
pP 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC 1Eó¨` ÐG-_à    GÓŠð €   IAà  0³lð 1Jí# @Kœ‰p @LÖ@` 1M|k 1N¶" 1O\M 1P– 1Q</ 1Ruæ 1S 1TUÈ 1Tûó Z¤Óð 4ðÿÿ½P  ÿÿ¸ ÿÿ¹° ÿÿÇÀ ð$ LMT KMT EST EDT AST 
EST5EDT,M3.2.0,M11.1.0
TZif2ë  @     & 3  + 0  — °ÿÿ“73¬ÿÿÆT² @ÇÀ   ” OAST4‚ Æð	      ÿÿÿÿŸ�êÜ<1U¬@Í–Ð 1,x @ÏäP 1'êî‰1(È\  1DTR  cEKP @ÿÿ«$L ¹°ÿÿ«  RPCDT CêOCST6VD@    Ô @i‡&X @¶¤B¼ 1+ü´ À+qæ@ÿÿµ(§  ¶h¥AÇÀ«­ ÿQMT -04 -05 
<-05>5³ D ƒ ³ « @˜Ùyˆ« @
}´< P'û0ª  Éxª  ËDª AÕÐ 
Iª ‘-0345 -03°  ¬ /4>µE�§      ¬ @€ñ«  @šäÞÀ @›Ö0 @ž¸…` @ŸºÝP @¢�@ 1£0±  1¤zV 1¥ 1¦S @ @¦üR°( 1¨<½  1¨Ü4 1ªŸ 1ªÍ:0 1«ü� 1¬¿‘ 1­îØ 1®Œþ 1¯¼E 1°U 1±®œ 1²KpP 1³Ž~ 1´$»  1µn` 1¶À  1·NB 1¸ 1¹$é  1¹çù 1»Ë 1»Ñ@ 1½ ]0 1½�1  1¾ò´ 1¿�Ú  1ÀÓç0 1Á^G 1Â�Ž  1ÃPž 1Ämp 1Å0€ 1Ær< 1Çb 1È6n@ 1Èù~` 1ÊP 1ÊÙ` 1Ëˆâp@Ò#ôp@@Ò`íÐ @ÓuÖà 1Ô@Ï 1ÕU¸ 1Ö ± 1×5š 1Ø “ 1Ù| 1Ùàu 1ÜÞ{X 1Ý©tÈ1Þ¾] 1ß‰V 1àž? 1ái8 1â~! 1ãI 1æGP 1çP 1è' 1èñú 1êã 1êÑÜ 1ëæÅ 1ì±¾ 1ñ�¦P 1ò‰P 1óoˆ 1ô_k 1õOj 1ö?M 1÷/L 1ø(i@ 1ù. 1úK 1úøJ` 1ûè- 1üØ, 1ýÈ 1þ¸ 1ÿ§ñ'1 —ðë1‡Ó 1wÒ 1pð1`ïû1PÒ 1@Ñ 10´ 1 ³ 1	– 1
 • 1
ðx 1àw ðÙ”Ð    ÀY`    °¹vÐ    ©uà 1™X 1‰W 1y: 1i9 1Y 1I 18þ 1(ý @"PH 1ß 1ý @ñü` 1áß 1ÑÞ 1ÁÁ 1±À 1¡£ 1 uò@ 1!�… 1"UÔ 1#j¡p 1$5¶ 1%Jƒ 1&˜ 1'*e 1'þµP 1)
G 1)Þ— 1*ê) 1+¾y 1,ÓF` 1-ž[ 1.³( 1/~= 10“
 11gY` 12rì 13G; 14RÎ 15' 162° 17ÿ 18Ìp 18æá 19û® 1:ÆÃ 1;Û� 1<¯àp 1=»r 1>�Â 1?›T 1@o¤ 1A„q` 1BO† 1CdS 1D/h 1ED5 oEóšà /1 a 0 ñÿÿÄ`  ÿÿÕÐÿÿÇÀ   ð#LMT ADT AST AWT APT 
AST4ADT,M3.2.0,M11.1.0
TZif2f @     & 3 ðj      ÿÿÿÿi‡(¸ @¬bÂ€ @±Ó”P @²t]@ AÈ[fÐ !ÓQ 1Ê;H @Ê¼mÀ 1Ì$e0 1ÌœO 1ÑÄ 1Ò;õ 1Ó£í 1Ô× 1÷`@ 1÷ÿ}P 1ù=D 1ùãS  1úÛ; 1û§†  1üÅ© 1ý‡h 1þ¸  @ÿ§ãÀð 1 —âP1‡Å 1wÄ @pâ@  1`á@15  1@Ã 1H  1 ¥ 1÷{  1
 ‡ 1
ðj  1ài 1Ù†  1ÀK 1¹h 1²¢ 1}›0 1Qê€ 1f·  "101F™ 1[‚  "&p 1;d 1]  1F 1æ? 1û( 1Ï\` 1Û
 1¯> "z01�  " Z01!o 1"CQ0 1#Nä 1$#3 1%.Æ 1&Š 1'âp 1'þ§Ð 1(÷Ò 1)Þ‰ 1*×´ 1+¾k 1,·– 1-žM 1.—x 1/~/ 10wZ 11gK 12W< 13G- 14@Y( 15Õ h16ý· hÓ0 hµ hÒ0 h´ h!f[0 HŒ 1G$( 1GÜ© 2Iù !³P  1JãÛ 1Kœm 1LÌ÷ 1M…‰ 1N¿N 1Owà P•öP T@ÿÿ²Èc1²À c€ÿÿ¹° ]õHMT CDT CST 
CST5CY/[//1]D�      @¥¶èp @¯ònà @¶fV` 1·CÒ 2¸6 0ý†ð 1Ëêq @Ø‘´ð½@  p€ @1g„ 12s 13Gf 14Rø À5'H    62Ú€! 1 ð	ÿÿ—ø  ÿÿ�� ÿÿ«  ÿÿ�€  ÿLMT MST CST PST MDT 
MST7
TZif2  @     ) 3 ð&      ÿÿÿÿ^þ  @ž¦,€ @Ÿºùp 1 † 1¡šÛ 1ÊW" 1ÊØG 1Ëˆþ 1Ò#ô @Òa	ð8 @Óuó  1Ô@ë 1ÕUÕ 1Ö Í 1×5· 1Ø ¯ 1Ù™ 1Ùà‘ 1ÚþµX 1ÛÀs 1ÜÞ— 1Ý©�h 1Þ¾y 1ß‰r 1àž[ 1áiT 1â~= 1ãI6 1ä^ 1èòP  ê‰Qÿÿþ¸ @ÿ§ÿà8@ —þð 1‡á @D/vp AEDC` 2ó¨ðÕ3	 ä B @ÿÿ¯:d 5¹°í ¹°ÿÿ¹° € ÿÿÇÀù"CDùÐCWT CPT EST EÿEST5EDT,M3.2.0,M11.1.0D�;      »1àN31÷/h 0ø(”P ‰� 	 @id 0YG A IF 19) 1)( @"E€ 1	
 1' @ò&� 1â	 1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 0#jÌG A $5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾£ 1,Óp` 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 18÷p 18ç 19ûÙ 1:Æî 1;Û» 1<°
p 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ ŸEóÅ #t  «·	É ƒ-00 PDDº¾M½U�<      !½1Ìl¡µ˜0`ûà @÷/>P @ø(iÐÒ 1iGð1Y*ð1I) 19 1) 1") 1í 1 1ò
 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 08æþGA 9ûÊ 1:ÆÑ 1;Ûž  1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda €o *( ­  x„PÿÿÕÐ–AÇÀ Ò    ØE�D•E¥ ª¡À11.1.0
TZif2  @     ) PTZif2	  ð      ÿÿÿÿi‡#~ @“´þ3 @�p A	¤` 0­”ð 1
ð† 1à…  @Ù¢à 1Àg 1¹„ 1©ƒ0 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í `  aÿÿ¸   ÿÿÿ¹° ÿÿÇÀLMT KMT EST EDT 
EST5
  ×  O    3 �;      K@rœ®¸ @¢’�0 @¶{R@ @·É° 1¸� 1¸Ôp  @º}À 1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  "ý¬01þœ5 @ÿŒ4@ˆ@£J° @$o  1#”µ 1$” 1%7ò 1%ðv @'*WÀ( 1'âÛ 1(îŠH 1)°:  @*àÓ0  @+™W  17öÆ( 18¿* 2Gw	 ?Ü {�  0 €ÿÿÂÈ @ÃÐ š  ñ ÕÐÿÿãàÿÿÕÐ ¬ÿCMT -04 -03 -02 
<-03>3²D�S   
   &z@?ÂýÑ @}‡2Å @Ë‰  AÒ#ôp !a&-@þ¸G  @ÿ¨*21 ˜):1ˆ 1x @q(�  1a'j1Q
 1A	 10ì 1�C 1	Î 1	­¿@ 1
ð° 1à¯  1ÙÍ` 1À‘ 1¹¯ 1©®0 1™‘ 1‰� 1ys 1ir 1Yc 1IT 197  1)6 1"Sp 1	 15 1+( 1òB
1â%€ 1Ò$ 1Â 1² 1¡é 1 v9Z1!�Ë 1"V 1#jè` 1$5ý 1%JÊ 1&ß 1'*¬ 1'þûP 1)
Ž 1)ÞÝ 1*êp 1+¾¿ 1,ÓŒ` 1-ž¡ 1.³n 1/~ƒ 10“P 11g ` 12s2 13G‚ 14S 15'd 162ö 17F 18p 18ç( 19ûõ 1:Ç
 1;Û× 1<°&p 1=»¹ 1>� 1?›› 1@oê 1A„·` 1BOÌ 1Cd™ 1D/® 1ED{ ¯Eóá0  ?	 @  Ó{Š �û  �€�€��ÿÿ��� ���ñ�€ÿÿ�p ÿÿ�€ !NðPST PWT PPT PDT Y `ST AKD �ST 
AKST9 ÿ ,M3.2.0,M11.1.0ÆÀ     TZif2    ð]      ÿÿÿÿ^þ  @ž¦,€ @Ÿºùp 1 † 1¡šÛ 1Ëˆþ 1Ò#ô @Òa	ð( @ÕUÕ  1Ö Í 1×5· 1Ø ¯ 1Ù™ 1Ùà‘ 1ÚþµH 1ÛÀs 1ÜÞ— 1Ý©�X 1Þ¾y 1ß‰r 1àž[ 1áiT 1â~= 1ãI6 1ä^ 1åW<P 1æG<p 1ç7 1è' 1èò 1ê  1êÑø 1ëæâ 1ìÖÄ 1íÆÄ 1î¿á` 1ï¯à` 1ðŸÃ 1ñ�Â 1ô_‡ 1úøg0 1ûèI@ 1üØI 1ýÈ+ 1þ¸+ Aÿ¨ð”!˜ 1‡ï 1wï @qp	 @a€ 1Pî 1@í 10Ð 1�' 1	² 0	­£/ A 
ð” 1à“  1Ù°` 1Àu 1¹’ 1©’0 1™t 1‰t 1yV 1iV 1Y8 1I8 19 1) 1"7p 1ü 1 1òp 1áû 1Ñú 1ÁÝ 1±Ü 1¡¿ 1 v@ 1!�¡ 1"Uñ 1#j½p 1$5Ó 1%JŸ 1&µ 1'*� 1'þÑP 1)
c 1D/vH 2EDQ ¡ó·       6  €ÿÿ®ÊSñ¹°ÿÿ«  ÿÿ¹°  ñ( LMT CDT CST CWT CPT EST 
CST6CDT,M3.2.0,M11.1.0
TZif2ç  
@     % 3 �      °@“.#  ö˜ìHÿÿ¿]Å  À¸ ÿÿÇÀ 
³ p-0430 A© OAST4— D “ P   � @i‡d A¸–ä ¡îÕÔÿÿÀ    AÎ,¦ ¦ ÿCMT BST -04 
<-04>ª E@   ª š @i‡#¼ @Œt@Ô @ÃÏJP @ÄEã@ @Å/JÐ @Æ-À 1Ç, @ÇÿÀ±AÄP 0�]@ @ù÷Ð 1 p�  1%žã 1&| 1-%0 y-›œ@ @ÿÿ·Ä ·¬  ÇÀŠ@¹°  1-05?5>5ÅD�}      ë 1^ó 1ž¦H\@Ÿ»� 1 †* 1¡š÷ 1Ë‰ T&@Öþt\0 1Ø€­( 1ÚþÃ 1ÛÀ�  1ÜÞ¥ 1Ý©¬ 1Þ¾‡ 1ß‰Ž 1àži 1áip 1â~K 1ãIR 1ä^- 1å)4 1æGJX 1çQ 2è', !ò3 2ê !Ò 1ëæð 1ì±÷ 1íÆÒ 1î‘Ù 1ï¯îX 1ðq» 1ñ�Ð 1òÁ 1óo² 1ô_£ 1õO” 1ö?… 1÷/v 1ø(¢@ 1ùX 1ú„ @úøƒ  1ûèf ðüØe ÿÿÿÿýÈHÿÿÿÿþ¸G  ÿ @¨*  0˜)  1ˆ 1x @q(� @a'  1Q
 1A	 10ì 1�C 1	Î 1	­¿@ 1
ð° 1à¯  1ÙÍ` 1À‘ 1¹¯ 1©®0 1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 1"Sp 1	 15 1ò4p 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç 1:Æü 1;ÛÉ 1<°p 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm ±EóÓ     Zñÿÿ‘&  ÿÿ��ÿÿ�€   ð#LMT PDT PST PWT PPT 
PST8PDT,M3.2.0,M11.1.0
TZif2ü @     & 3 �u      …@^þ  @ž¦,€ @Ÿºùp 1 † 1¡šÛ @¤s÷  1¥ 1ÊN  1ÊØG 1Ëˆþ 1Ò#ô @Òa	ð0 1Óu×h 1Ó¤	 1Úþµ( 1ÛÀs  1ÜÞ— 1Ý©�  1Þ¾y 1ß‰r 1àž[ 1áiT 1â~= 1ãI6 1ä^ 1å) 1æG<¨ 1ç7` 1è' 1é   ê›Qÿÿêöâ 1ëæâ  1ìÖÄ 1íÆÄ 1î¿áP 1ï¯à` "ð  1üØ:( @ýÈàà 1þ¸ @ÿ§ÿà€@ —þð 1‡á 1wà @pþ` @`ýp 1Pà 1@ß 10Â 1� 2	² !­”@ 1
ð†  1à… 1Ù¢` 1Àg 1¹„ 1©ƒ0 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b "@oØ1A„` 1BO”  1Cda 1D/v 1EDC EEó¨ðÇÒ	'    @ÿÿ¯š+ ¹°Æ « Æ ¹°ÿÿ¹° € ÿÿÇÀÒðCDT CST CWT CPT EST EDT 
EST5EDT,M3.2.0,M11.1.�0
TZif2  @     ) 3 ð      ÿÿÿÿ“.# ÿö˜ìHÿÿ¿]  ÿÿÀ¸ ÿÿÇÀ 
LMT -0430 AST 
AST4— D)— � @–ªh| A¸Ià 0ý@  @¹ñ40 @ºÞt  1Ú8® 1Úëú @Üá° 1Ü¹Y  1Ýû 1Þ›Þ 1ßÝš 1àT3 1ô—ÿ0 1õ^ 1öÀd  1÷p 1øQ, 1øÇÅ  1ú
Ò0 1ú¨ø  1ûì  @ü‹} @ÉŽ0 1x× @ 5° 1 3Ï 1!�i  1"È 1#X  @#âp ( 1%7ò 1%ÔÇ 10€y0 11M0 17öÆ  18¸…  19ßã  19òJ 1;Èÿ  o<o  @ÿÿÞ„ö¢ãàÿÿÕÐ öß2 -03 
<-03>3öD�      ¶@i‡,d @½-Hè@Ct` @	¤>P AQøà !Ôo 11Ú 1´Q 1)a‘1*ÁK 1+CÝ  12Éï 1BXÀ 1C?i @DTn€P ÓEY` @ÿÿ¯ ¯ «  ÿÿ¹°   !ÿMMT CST EST CDT 
CST6'D D'A¸Wð !ýN•@¹ñB@ 1ºÞ‚•1Ú8¼ 1Úì @ÜïÀ  1Ü¹g  1Ýû# 1Þ›ì 1ßÝ¨ 1àTA 1ô˜0 1õl 1öÀr  1÷,p 1øQ: 1øÇÓ  1ú
à0 1ú©  1ûì  1ü‹‹•@Éœ@o1xå @ CÀ 1 3Ý 1!�w  1"Ö 1,ÀÃ O-fÒ0Ë@ÿÿÇ¼® ÕÐÃ$ÇÀÃ3½Ã/4>¹E { T\�“73¬ÿÿÆTŽ @ÇÀ *;M@    ‚ @i‡Ä @‘£ÈD^1MnF@4°å1ÿÿÆ+ Æ¼Ù@ÇÀ 	ô © AFFMTéAÐíH § „í1¥¶Úç0"Uñ± P #j½ð	 01gv P 2sp	 03GX A 4Rê 15': 162Ì 17 18è@ 18æþ 19ûÊ 1:õï1;¶Â 1<¯ü 1=»Ž 1>�Þ 1?›p 1@oÀ 1A„�` 1BO¢ 1Cdo 1D/„ 1EDQ 1Ff 1G$3 1Gøƒ€ 1I 1IØe 1Jã÷ KKœ—€¤Àÿ4ÿÿ¢@  ÿÿ«  ÿÿ¹°LMT CST CDT 
CST6CDT,M3.2.0,M11.1.0
TZif2    @     ' 3 ð      ÿÿÿÿ¥¶èp @¯ònà @¶fV` 1·CÒ 2¸6 0ý†ð 1Ëêq @Ø‘´ðp @  p€ @1g„ 12s 13Gf 14Rø 15'H 162Ú 17* 08÷7 A 8ç 19ûÙ @:õ�	 0;¶Ñ P <°
�Ih @ÿÿœ<[ ��[ «  ÿÿ�€ m gMg€ST PST MoPMST7Mo4go,M10.5oFT=   o@rœ²G@¢’�0 @¶{R@ @·É° 1¸� 1¸Ôp  @º}À 1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  "ý¬01þœ5 @ÿŒ4@ @£J° @$o  1#”µ 1$” 1%7ò 1%ðv "'8 1'ÍÃ @(úgÀ8 1)°H 1*àáX @+™W  17öÆ 18¿* 1@° 1AV>8 1Gw	 GÜ    - Àÿÿ¿|Î ÃÐÎ ÇÀÎðÕÐÿÿãàÿÿÕÐ ÔÿCMT -04 -03 -02 
<-03>33DRÄŒ@awIc @ž¦,€ 1ŸºùC1 † 1¡šÛ 1Ëˆþ 1Ò#ô 1Òa	C@Óuó 8 1Ô@ë 1ùJ( 1úg 0þ¸+sP @ßp	 20Ð !�';1	² 0	­£ A 
ð” 1à“  1Ù°›1Àu 1¹’ 1©’0 1™t 1‰t 1yV 1iV 1Y8 1I8 19 1) 1"7p 1ü 1 1òp 1áû 1Ñú 1ÁÝ 1±Ü 1¡¿ 1 v@ 1!�¡ 1"Uñ 1#j½p 1$5Ó 1%JŸ 1&µ 1'*� 1'þÑP 1)
c 1)Þ³ 1*êE 1+¾• 1,Ób` 1-žw 1.³D 1/~Y 10“& 11gv` 12s 13GX 14Rê 15': 162Ì 17 18èp 18æþ 19ûÊ 1:Æà 1;Û¬ 1<¯üp 1=»Ž 1>�Þ 1?›p 1@oÀ 1A„�` 1BO¢ 1Cdo 1D/„ 1EDQ AEó· ]!    &@ÿÿ­Ý�@¹°C � ¹°� ¹°�A¹° �DÀ—WT CPT ESÈÀM3.2.0,M11.1Ÿ.0
TZif2  @     ) 3 ð      ÿÿÿÿ¥¶Ú`8 1†Õ @LKP 01gv P 2sp	 03GX A 4Rê 15': 162Ì 17 @8èð	 08æþ A 9ûÊ @:õ€ 1;¶Â ˆ<¯ü€ ðÿÿ«ü  ÿÿ«  ÿÿ¹°  ÿLMT CST EST CDT 
CST6CDT,M4.1.0,M10.5/F�,      /@?ÂýÑ @}‡0 @Ë‰  AÒ#ôp !a&W@þ¸G  0ÿ¨*oP  ˜) ÿ 1ˆ 1x @q(� @a'  1Q
 1A	 10ì 1�C 1	Î 1	­¿@ 1
ð° 1à¯  1ÙÍ` 1À‘ 1¹¯ 1©®0 1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 1"Sp 1	 15 1V5âp @VåH0È 1Xÿ  1XÅ* 1Yþá 1Z¥ 1[ÞÃ 1\DF8 ¯\„î0 
  p  Ö&+ „¦  �€1¡��ÿÿ�� Ðÿÿ�p ÿÿ�€CðPST PWT PPT PDT AKS  Q  09AKS13.2S1[‚Dp     �  ‚è;@¯ònà3@¶fV` 1·CÒ 2¸6 0ý†ð 1ÅÞ° @Æ—4P 1ÉUñ8 1ÉêÝ 1ÏÆ 1Ï·V 1Ú™ @ÛvƒÐ›ÚT�  
  @ÿÿ£´ ��´$« åë¨Mç  _DT CWï]+@‘¶8¨4@ncÀ 1 uäD@!�w@ 1"UÆ 1#j“  1$5¨ 1%Ju 1&Š 1'*W 1'þ§^1)
9 1)Þ‰ 1*ê 1+¾k 1,Ó8` 1-žM 1.³ 1/~/ 10’ü 11gK` 12rÞ 13G- 14RÀ 15' 162¢ 17ñ 18¾p 18æÓ 19û  1:Æµ 1;Û‚ 1<¯Òp 1=»d 1>�´ 1?›F 1@o– 1A„c` 1BOx 1CdE 1D/Z 1ED' BEóŒÐ
 @ÿÿËX, ÇÀ, ÕÐ,"ãàÿAST -03 -02 
<-03>3<-02>,MÂQ�’      ‚@^í¼ 1€ñ¶r1ž¸…¢"Ÿº’@»<8Ð  @»´#@ 1½ 1½” 1¾ûü à¿sç@ÿÿÿÿÀÛÞÐÿÿàÿÿÁSÉ@ÿÿÿÿÂ»ÀÐ 1Ã3« 1Ä›¢ 1Å� 1Æpø 1ÇÍ 1ÈHñ 1Èí¯ 1Ê^ @ÊÖËÀH @Ëˆâ` AÒ#ôp !`í  @ÓuÖà 1Ô@Ï 1ÕU¸ 1Ö ± 1×5š 1Ø “ 1Ù| 1Ùàu 1Úþ™X 1ÛÀW 1ÜÞ{ @Ý©tPX 1Þ¾] 1ß‰V 1àž? 1ái8 1â~! 1ãI 1ä^ 1å(ü 1æGp 1ç` 1è' 1éä 1êã 1êöÆ 1ëæÅ 1ìÖ¨ 1íÆ§ 1î¿ÅP 1ï¯Ä` 1ðŸ§ 1ñ�¦ 1ò‰ 1óoˆ 1ô_k 1õOj 1ö?M 1÷/L 1ø(i` 1ù. 1úK 1úøJp 1ûè- 1üØ, 1ýÈ 1þ¸ Pÿ§ñÐ  0—ðà 1‡Ó 1wÒ @pðP @`ï` 1PÒ 1 ³ 1	– 1
 • 1
ðx 1àw 1Ù”P 1ÀY 1¹v 1©u` 1™X 1‰W 1y: 1i9 1Y 1I 18þ 1(ý 1"p 1ß 1ý 1ñüp 1áß 1ÑÞ 1ÁÁ 1±À 1¡£ 1 uò@ 1!�… 1"UÔ 1#j¡p 1$5¶ 1%Jƒ 1&˜ 1'*e 1'þµP 1)
G 1)Þ— 1*ê) @+¾]|@@,Ó*l 1-ž? 1.³ 1/~! 10’î @1g=ü( 12rÐ 13G 14R² 15' 162” 17ã @8°ì8 18æÅ 19û’ 1:Æ§ 1;Ût 1<¯Äp 1=»V 1>�¦ 1?›8 1@oˆ 1A„U` 1BOj 1Cd7 1D/L 1ED Eóšà  /  )  @ñ	ÿÿÃD  ÿÿ¹° ÿÿÕÐÿÿÇÀ   àLMT EST ADT A ðWT APT 
AST4ADT,M3.2.0,M11.1.0
TZif2c @     & 3 p     › Qÿÿ¥¶Ú=0"Uñ? P #j½ð	 01gv P 2sp	 03GX A 4Rê 15': 162Ì 17 18è@ 18æþ 19ûÊ @:õ€ 1;¶Â j<¯ü€ @ÿÿ¡ôC « C@¹°1àCST CDT 
CST6C%4o,M10.5%F�V   	   &Ò@Œ4å3 @¢’‡³ 1¨ÿÛr@©ñ° @ªâY8 @«ÒC0 @¬ÃŒ¸ 1­³v  1»ôµ 1¼¿µ 1½Ô— 1¾Ÿ— 1¿´y 1Ày 1Á”[ 1Â_[ 1Ã}x` 1Ä?= 1Å]Z 1Æ 1ÇR 1È<€ 1É 1Éè 1Ê‹Ÿ 1ÍÆ @Í•f(  1ì…@ 1ìò5 1íEJ @í…Ö   1÷r 1÷ú 1üþ>@ @ýö(ÍA –u0 0ØR  AWŠ° 0Æ:  1– @ßÚ˜ 1ÆŸ8 À	ZN0    	Ûs �    0 0‡  1ç 1_i 1ÙÖ 1?K @‰-°( 11¢ 1!ÃT  @"'x  1#¡ä  1$”  1%Jg 1%ç<  1'!0 1'ÐX  1)
+  1)°: 1*àÓ  1+� 1ALö @BF/À` @CH£Ð 1Dœ @EKP 1Eó~ 1Gg  1GÓ` 1HèI 1I³B 1JÈ+ @Kœ_@8 1L¨ 1M|A 1N‡ï 1O\# 1Pq` 1Q< 1RPî 1Sç 1T0Ð �TûÉ@ s     aÿÿËM   ðÿÿÇÀ ÿÿÎÈ ÿÿÕÐ ð ÿÿÜØÿÿãàÿÿêè LMT MMT -04 -0330 A -02
 ð2 -0130 
<-03>3
TZif2 @     & 3 ð¬      ÿÿÿÿrîxì @ž¸“p @Ÿºë` @ ‡.È @¡š±@ @¢”ð 1£U© 1¤†] 1¥(x0 1¦f? @§Nà( 1¨F! 1¨ì0 1ªÉ` 1ªÕM0 1«ü« 1¬µ/ 1­Ü� 1®• 1¯¼o 1°~-@ 1±œQ 1²gJ  1³|3 1´G, 1µ\ 1¶' 1·;÷ 1¸ð 1¹%� 1¹æÒ 1»õ 1»Ïî` 1¼ä× 1½¯Ð 1¾Ä¹ 1¿�² 1À¤› 1Áo” 1Â„} 1ÃOv 1Äd_ 1Å/X 1ÆM|€ 1Ç: 1È-^ 1Ëˆð 2Ò#ô !`û  1Óuä@ 1Ô@Ý @ÕUªÐH@Ö £À 1×5Œ 1Ø … 1Ùn 1Ú3v�1Úþ§P 1Ütà 1ÜÞ‰ 1Ý©‚ 1Þ¾k 1ß‰d 1àžM 1áiF 1â~/ 1ãI( 1ä^ 1å)
 1æG-  1ç&  1è' 1éò 1êñ 1êöÔ 1ëæÓ 1ìÖ¶ 1íÆµ 1î¿ÓP 1ï¯Ò` 1ðŸµ 1ñ�´ 1ò— 1óo– 1ô_y 1õOx 1ö?[ 1÷/Z 1ø(w` 1ù< 1úY 1úøXp 1ûè; 1üØ: 1ýÈ 1þ¸ @ÿ§ÿà8@ —þð 1‡á 1wà @pþ` @`ýp 1Pà 1@ß 10Â 1 Á 1	¤ 1
 £ 1
ð† 1à… 1Ù¢` 1Àg 1¹„ 1©ƒp 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC oEó¨ð À/ `ñÿÿµ”  ÿÿÇÀÿÿ¹°   ÿ$LMT EDT EST EWT EPT 
EST5EDT,M3.2.0,M11.1.0
TZif2  @     ) 3  + 0  — ²ÿÿ“73¬ÿÿÆT²     ŸAST 
AST4‚ D°]      ÿÿ‚  BŠ @ËôïP @ÐúGÀ 1Ñ#4 @Ò#ôp 1Òxš 1õOx @ö?[` 1÷/Z @ø(wà 1ù< 1úY @úøXð 1ûè; 1üØ: 1ýÈ 1þ¸ @ÿ§ÿàB@ —þð 1‡á 1wà @pþ` @`ýp 1Pà 1@ß 10Â 1 Á 1	¤ 1
 £ 1
ð† 1à… 1Ù¢` 1Àg 1¹„ 1©ƒp 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC @Eó¨ð‡? CBÿÿ·v¾p h pP|p[¯î@^ð�Ž1ž¦¦1ŸºëÆ1 †  1¡šÍ 1¢eâ 1£ƒé¦1¤j® 1¥5§  1¦SÊ¶1§‰ 1¨3¬ 1¨þ¥0 1ªŽ 1ªÞ‡ 1«óp 1¬¾i 1­ÓR 1®žK 1¯³4 1°~- 1±œQp 1²gJ` 1³|3 1´G, 1µ\ 1¶' 1·;÷ 1¸ð 1¹Ù 1¹æÒ 1»õ` 1»Æ´ 1¼ä× 1½¯Ðp 1¾Ä¹ 1¿�² 1À¤› 1Áo” 1Â„} 1ÃOv 1Äd_ 1Å/X 1ÆM|p 1Ç: 1È-^ 1ÈøWp 1Ê@ 1ÊØ9 1Ëˆð ^!`û8 1ÓuäX 1Ô@Ý 1ÕUÆ 1Ö ¿ 1×5¨ 1Ø ¡ 1ÙŠ 1Ùàƒ 1Úþ§X 1ÛÀe 1ÜÞ‰ 1Ý©‚x 1Þ¾k 1ß‰d 1àžM 1áiF 1â~/ 1ãI( 1ä^ 1åW.P 1æG-p 1ç7 1è' 1éò àêñðÿÿÿÿêöÔàÿÿàÿÿëæÓðÿÿÿÿìÖ¶à 1íÆµ @î¿Ó` @ï¯Òp 1ðŸµ 1ñ�´ 1ò— 1óo– 1ô_y 1õOx 1ö?[ 1÷/Z 1ø(w` 1ù< 1úY 1úøXp 1ûè; 1üØ: 1ýÈ 1þ¸ Pÿ§ÿà  0—þð 1‡á 1wà @pþ` @`ýp 1Pà 1@ß 10Â 1� 1	¤ 1	­”@ 1
ð† 1à…  1Ù¢` 1Àg 1¹„ 1©ƒ0 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC oEó¨ð /1 a 0 
ñÿÿºž  ÿÿÇÀÿÿ¹°   ð#LMT EDT EST EWT EPT 
EST5EDT,M3.2.0,M11.1.0
TZif2. @     & 3 �J      8@rî�@ 1ž¸“ø1Ÿºë@ÈøIP 1Ëˆð 2Ò#ô !`ûÈ1 Á¨¨1
 £ ¨ÿî{3Oÿÿ­@C‰�T   
   &#@?ÂýÑ @}‡OÒ @Ë‰DÐ 3!aPc@úÒU° 1þ¸q[@ÿ¨T@³@ ˜SP ðˆ6@    x5P    qR�À    aQÐ 1Q4 1A3 11 1�m 1	ø @	­éP0 1
ðÚ 1àÙ  @Ù÷@ 1À» 1¹Ù 1©Ø0 1™» 1‰º 1y� 1iœ 1Y 1I~ 19a 1)` 1"}p 1	B 1_ @+x @òB° @â%  1Ò$ 1Â 1² 1¡é @ v90( 1!�Ë 1"V @#jè  1$5ý 1%JÊ 1&ß 1'*¬ 1'þûP 1)
Ž 1)ÞÝ 1*êp 1+¾¿ 1,ÓŒ` 1-ž¡ 1.³n 1/~ƒ 10“P 11g ` 12s2 13G‚ 14S 15'd 162ö 17F 18p 18ç( 19ûõ 1:Ç
 1;Û× 1<°&p 1=»¹ 1>� 1?›› 1@oê 1A„·` 1BOÌ 1Cd™ 1D/® 1ED{ ¿Eóá0 	?	    ¶n  ÿÿdî ¡eP ÿÿs` qÿÿeP  Ñÿÿ�p ÿÿ�€ ð!LMT NST NWT NPT BST BDT YST AKD �ST 
AKST9 ð,M3.2.0,M11.1.0
TZif2ý @     & 3 ð'      ÿÿÿÿ–ªed A¸;Ð 0ý2� @¹ñ&  @ºÞf 1Ú8  1Úëì @ÜÓ  1Ü¹K  1Ýû 1Þ›Ð 1ßÝŒ 1àT% 1ô—ñ0 1õP 1öÀV  1÷p 1øQ 1øÇ·  1ú
Ä0 1ú¨ê  1ûëø  @ü‹o�è 1É€'1xÉ 1 '1 3Á 1!�[  1"º 1#X  1#âbŸ1%7ä 1%Ô¹ 17ö¸ 18¸w 19ßÕ@ 19é@ 1;Èñ  o<o � @ÿÿáœ4 ñðÿÿãà ñ -01 -02 
<-02>2ä3Ò   à   &  ä3 "ä0›€h7 A M|«13úÔ 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½$1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ O1]Ù»@ÿÿÏ€· ÕÐë3ãà·3·13>3½ ¯±5.0/-2,M10. 1Ñµ?�#      u@¥¶èp @¯ònà @¶fV` 1·CÒ 2¸6 0ý†ðú01gv P 2sp	 03GX A 4Rê 15'Hy@62Ú€ 17* 08÷ A 8ç 19ûÙ 1:õQ1;¶Ñ 1<°
 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° ð Cd}€    D/’�   Ð ED_€    Ft� 1G$A @Gø‘ 1I# 1IØs 1Jä `Kœ¥� o ð	ÿÿž  ÿÿ�� ÿÿ«  ÿÿ¹° °LMT MST C ðDT MDT 
MST7MDT,M3.2.0,M11.1.0
TZif2’  @     & 3 ð      ÿÿÿÿi‡&  ‹ôaèÿÿµp»  µ» @¹° ¯ ßCMT EST 
EST5• D�=   
   )� @£ÕR€ @Ëˆâ` AÒ#ôp 0`íÐ @÷/0@ @ø([Àõ @i9à @YÐ 1I 18þ 1(ý @"P  1ß 1ý @ñü` 1áß 1ÑÞ 1ÁÁ 1±À 1¡£ 1 uò@ 1!�… 1"UÔ 1#j¡p 1$5¶ 1%Jƒ 1&˜ 1'*e 1'þµP 1)
G 1)Þ— 1*ê) 1+¾y 1,ÓF` 1-ž[ 1.³( 1/~= 10“ @1ggðÀ 12rú 13GI 14RÜ 15'+ 162¾ 17 18Ú˜ 08æþ? A 9ûÊ 1:ÆÑ 1;Ûž  @<¯îp! 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC ¿Eó¨ð 
# $	
   �  ¨àÕÐÿÿÕÐÿÿÇÀÒAãà   {  {  ! ð%-00 AWT APT AST ADD BT EDçšïE–U�      Ù@‘Ž¸ @¾*KÄ @Òb,´ô @¾1¸8@ÿÿÌH  Ì<¨ ÌL  ÎÈi@ÕÐ ´�PMT -0330 � 
<-03>3¼D@   ¿ I@^°³ @ž¦:� 1Ÿ»Ì1 † 1¡šé 1Ë‰ @Ïß( @Ï�å¬ 1Ð� 1úøuP EûèX t ¢ –îú  « ú ��ô @« ô  K [#MWSð D-ð ° @i‡P @œnqü£1FÄ@ï@ 1ñî´1áÑ 1ÑÐ 1Á³ 1±² 1¡• 1 ‘” 1!�w \¯l\‘ \s \U \7 \TŒ\6 \Y8 \; \1BOx° 1CdE° 1D/Z 1ED' 1O\Mü1P–` 1Q</ 1Ruæ 1S 1TUÈ 1Tûó 1V5ª PXÄñðp @ÿÿ¼0" ¼DðÇÀ	ÿÿ¹° LMT PPMT ÿEDT EST 
EST5EDT,M3.2.0,M11.1.0
TZif2  @     ) 3  + ð   ÿÿÿÿ“73¬ÿÿÆT  ÿÿÇÀ LMT A” OAST4‚ D�      ‚ @–ª†� A¸f  0ý\À @¹ñPP @ºÞ�@ 1Ú8Ê 1Úì @ÜýÐ 1Ü¹u  1Ýû1 1Þ›ú 1ßÝ¶ 1àTO 1ô˜0 1õz 1öÀ€  1÷:p 1øQH 1øÇá  1ú
î0 1ú©  1ûì"  @ü‹™Àj@ÉªP 1xó @ QÐ 1 3ë 1!�…  1"ä 1H` oRÀ bÿÿÀp�`ÿÿ¹°«œÿ -04 -05 
<-05>5¢DV   ¢ ‚èjA¸Wð 0ýN° 1¹ñB*@ºÞ‚0 1Ú8¼ 1Úì 1Üï:1Ü¹g  1Ýû# 1Þ›ì 1ßÝ¨ 1àTA 1ô˜0 1õl 1öÀr  1÷,p 1øQ: 1øÇÓ  1ú
à0 1ú©  1ûì  @ü‹‹°Š@Éœ@ 1xå 1 CŠ1 3Ý 1!�w  O"Ö°�`ÿÿÄ� ÕÐ�@ÇÀ &@-03 Ž Š/4>,E (  b@zæ•¹ 1Ëö2ú @Ò#ôp ÀÒ`íÐÿÿÂ©  -aÿÿÕÐ ¯  ÕŸAPT AWT 
ÝH�t      ™ @i‡ü @�0GF 1›\åE@Ÿ|âÆ 1¡ qÉ 1°^w 1±w=Ã1²A }1³Xp  1´"48 1µ9¤  1¶g  1·×  1·ä›  ¸=!Ç  1Ìn0 1Ìlç0 1Õ3U0 1Õv’ 1ýÑ< 1þ’úC1ÿÌÍ#1 rÜ#1uP 1@I 1U2 1 + 1>OC1  1¼ 1ßï 1þ 1	¿Ñ 1
Ýõ @¨î0›1½× 1ˆÐ 1�¹ 1h² 1†Õp 1H” 1f· 1(v "F�1’` 1&{  1ñt 1] 1ÑV 1æ? 1±8 1Ï\p 1‘ 1¯> 1pü 1�  1 p 1!o 1"9û 1#Nä 1$Ý 1%8 ` 1%ù¿ 1&òø 1'Ù¡ 1(÷Ä 1)Â½` 1*×¦ 1+¢Ÿ 1,·ˆ 1-‚� 1.—j 1/bc 10€‡p 11BE 12`i 13=×` 14@K 15D 16¸ 17Õ0 18  18Ë  19é+` 1:ªê 1;É 1<ŠÌ 1=¨ï 1>j® 1?ˆÑ 1@SÊP 1Ah³ 1B3¬ 1CH• 1DŽ 1E1²p 1Eóp àG”@    Gï0  à  Hñv@    I¼o0 1JÑX @K¸ ° 1L±: 1MÆ  @NP‚À 1Oœ®  1PBÙ 1Q|� 1R+ö0 1S\r 1TØ 1W7æ@ 1W¯ì0 ´XC†° o Kð
ÿÿ½„  ÿÿ½º ÿÿ¹° ÿÿÇÀ  €ÿÿÕÐ ð LMT SMT -05 -04 -03 
<-03>3
TZif2 @     & 3 ðJ      ÿÿÿÿrî‡( @ž¸¡€ @Ÿºùp @ÈøW` 1Ëˆþ 1Ò#ô @Òa	ðh @ Ï€ @	²p 1
 ± 1
ð” 1à“ 1Ù°0 1Àu 1¹’ 0©’7 A ™t 1‰t 1yV 1iV 1Y8 1I8 19 1) 1"7p 1ü 1 1òp 1áû 1Ñú 1ÁÝ 1±Ü 1¡¿ 1 v@ 1!�¡ 1"Uñ 1#j½p 1$5Ó 1%JŸ 1&µ 1'*� 1'þÑP 1)
c 1)Þ³ 1*êE 1+¾• 1,Ób` 1-žw 1.³D 1/~Y 10“& 11gv` 12s 13GX 14Rê 15': 162Ì 17 18èp 18æþ 19ûÊ 1:Æà 1;Û¬ 1<¯üp 1=»Ž 1>�Þ 1?›p 1@oÀ 1A„�` 1BO¢ 1Cdo 1D/„ 1EDQ PEó· j  -@ÿÿ§X?€¹°ÿÿ« ? ¹°91¹°3ÿCDT CST CWT CPT 
CST6CDT,M3.2.0,M11.1.0CD | C#@çŒn  1÷/L31ø(wlÃÿ¥  $ * ^ à³	ø  „ -00 CD´_DT ES´]p'     „`ÿÿ–ªg¸´A¸Ià 0ý@  @¹ñ40 @ºÞt  1Ú8® 1Úëú @Üá° 1Ü¹Y  1Ýû 1Þ›Þ 1ßÝš ààT3 ÿÿÿÿô—ÿ°ÿÿàÿÿõ^ ÿÿÿÿöÀd0 @÷  1øQ, 1øÇÅ  @ú
Ò° 1ú¨ø  1ûì  Àü‹}     ÉŽ0 1x× @ 5° 1 3Ï 1!�i  1"È 1#X  @#âp ( 1%7ò 1%ÔÇ 17öÆ 18¸… 19ßã@ 19é@ 1;Èÿ  o<o  ðÿÿßH  ÿÿãàÿÿÕÐ LMT -02 -03 
<-03>3
TZif2’  @     & 3 �5      D@†ý“ @ž¸¯� @Ÿ»€ @µeOð @¶0Hà 1·E1 1¸* 1¹% 1¹ð @»0p( 1»Ïî 1¼î @½¹` 1Âr0 1Ãaë  1ÄQê 1Å8“  1Æ1Ì 1Ç!¯  1Èé@ 1É
Ì  1ÉúË 1Êê® 1Ë‰° 1Ò#ô @Òa h @ÓcŒ 1ÔSo 1ÕUã 1Ö Ü 1×5Å 1Ø ¾ 1Ù§ 1Ùà  1ÚþÃX 1ÛÀ‚ 1ÜÞ¥ 1Ý©ž1Þ¾‡ 1ß‰€ 1àži 1áib 1â~K 1ãID 1ä^- 1å)& 1æGJp 1çC` 1è', 1èò% 1ëæð 1ìÖÓ OíÆÒR/  ƒPÿÿ�äb « b¡�� ÿÿ«     tÿ
MDT MST MWT MPT CST 
CST6~D�:      ¦1Õû�1÷/LÖ@ø(wàÆ0iV P Y8ð	 0I8 A 9 1) @"7p	 0ü A  @ò€ 1áû 1Ñú 1ÁÝ 1±Ü 1¡¿ 0 v/ A !�¡ 1"Uñ 1#j½p 1$5Ó 1%JŸ 1&µ 1'*� 1'þÑP 1)
c 1)Þ³ 1*êE 1+¾• 1,Ób` 1-žw 1.³D 1/~Y 10“& 11gv` 12s 13GX 14Rê  5'GQ  62Ì 17  18èp 18æþ 19ûÊ !:ÆWA ;Û¬ 1<¯üp 1=»Ž 1>�Þ 1?›p 1@oÀ 1A„�` 1BO¢ 1Cdo 1D/„ 1EDQ �Eó·  * !« P ÿÿÇÀ« «  	ÿÿ¹° ’ -00 CDDšTCDT E¢ÿCDT,M3.2.0,M11.1.0´D�      ´1–ª†Ò1¸f¢@¸ý\À @¹ñPP @ºÞ�@ 1Ú8Ê 1Úì @ÜýÐ 1Ü¹u  1Ýû1 1Þ›ú 1ßÝ¶ 1àTO 1ô˜0 1õz 1öÀ€  1÷:p 1øQH 1øÇá  1ú
î0 1ú©  1ûì"  @ü‹™Àb@ÉªP 1xó @ QÐ 1 3ë 1!�…  1"ä 1H` ORÀi ö@ÿÿÀplÁ ¹°l@ÇÀ `q-04 -05Ô:5>5¢À              @      PTZif2	  ð=      ÿÿÿÿrœ­° @¢’�0 @¶{R@ 1·É 1¸� 1¸Ôp  @º}À  1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  "ý¬01þœ5 @ÿŒ4@{@£J° @$o  1#”µ 1$” 1%7ò 1%ðv @'!0( 1'ÐX 1) ÿH 1)°: 1*àÓ  @+™W ( 17öÆ@ 18¿* 2Gw	 !Ü  1Hú¢ I¼a  "   aÿÿÃÐ   ðÿÿÇÀ ÿÿÕÐÿÿãà ÿ LMT CMT -04 -03 -02 
<-03>3
‘ Ð  À    3 ^ÄŒ@¥¶ö€ @©yOp @¯ò|ð 1¶fd @·  1¸
ò 1Ëê�0 1Ò#ô  1Ò™º 1×Y( 1Ø‘´( @â~K�8 1ãIR 1ä^- 1å)4 @æGJ  1çQ 2è', !ò3 2ê !Ò 1ëæð 1ì±÷ 1íÆÒ @î‘Ùø 1à¯ì1ÙÍ 1À‘ 1¹¯ 1©®Ü1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 @"S�p 1	 15 1ò4p 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç 1:Æü 1;ÛÉ 1<°p 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm 1F‚ 1G$O 1GøŸp 1I1 1IØ� 1Jä `Kœ³ Î/Ñù( @ÿÿ’Lí€�� ÿÿ�€í ��í ��í@��íPMST P ÿDT PWT PPT 
PST8PDT,M3.2.0,M11.1.0D�      �@–ªzH 1¸W¹1¸ýN­1¹ñB½1ºÞ‚�1Ú8¼ 1Úì 1ÜïÍ1Ü¹g  1Ýû# 1Þ›ì 1ßÝ¨ 1àTA 1ô˜0 =!Àr  1÷,p 1øQ: =1ú
à0 1ú©  1ûì  @ü‹‹°�1Éœå1xå @ CÀ 1 3Ý 1!�w  ð"Ö°    H`q@/ ðÿÿÌ¸  ÿÿÕÐÿÿÇÀ  ÿ LMT -03 -04 
<-03>3
TZif3  @     ) 3 ðz      ÿÿÿÿi‡Æ @�0GF @›\åP 1Ÿ|â @¡ qÀ 1°^w @±w=@ @²A Ð 1³Xp  1´"48 1µ9¤  1¶g  1·×  1·ä›  1¸ý\ 1¹Ç  1Ìn0 1Ìlç0 1ÓÜ�  @ÔÉ°` 1Õ3U 1Õv’( 1ýÑ< 1þ’ú  @ÿÌÍÀø @ rÜ° 1uP 1@I 1U2 1 + @>O@( 1  1¼ 1ßï 1þ 1	¿Ñ 1
Ýõ @¨î08 1½× 1ˆÐ 1�¹ 1h² 1†Õp 1H” 1f· 1(v 1F™ 1’` 1&{ 1ñt 1] 1ÑV 1æ? 1±8 1Ï\p 1‘ 1¯> 1pü 1�  1 p 1!o 1"9û 1#Nä 1$Ý 1%8 ` 1%ù¿ 1&òø 1'Ù¡ 1(÷Ä 1)Â½` 1*×¦ 1+¢Ÿ 1,·ˆ 1-‚� 1.—j 1/bc 10€‡p 11BE 12`i 13=×` 14@K 15D 16¸ 17Õ0 18  18Ë  19é+` 1:ªê 1;É 1<ŠÌ 1=¨ï 1>j® 1?ˆÑ 1@SÊP 1Ah³ 1B3¬ 1CH• 1DŽ 1E1²p 1Eóp 1G” 1GïP 1Hñv 1I¼o 1JÑX 1K¸ 0 1L±: 1MÆ  1NP‚` 1Oœ®  1PBÙ 1Q|� 1R+ö0 1S\r 1TØ 1W7æ@ 1W¯ì0 1YÈ 1Y�Î 1Z÷ª 1[o° ´\©g° A / M@ÿÿ½ºÕ€½º ÿÿ¹°Õ@ÇÀ á á áSå5å í é14>4ïÓ,M9.1.6/24,M4
 2x  þ   &  3 b@i‡ @ºßB` AúKÐ !§Ãj@ÿ§ñÐX @ C{È 1‡Ó @úH ApðP !Ý 1PÒ 1¿‰ 10´ 1 ¼@ 1	– @9û¼à8 •:)á` pÿÿ¾xQ ¾`QAÇÀ	WpÿÿÀ¸W! Q DMT EDT ES?ß430 AST 
AST4=Dp[     Ý`ÿÿ–ªr´-A¸Ià 0ý@  @¹ñ40 @ºÞt  1Ú8® 1Úëú 1Üá¿1Ü¹Y  1Ýû 1Þ›Þ 1ßÝš 1àT3 1ôZ	 1õ^ 1öÀd 1÷p 1øQ, 1øÇÅ  1ú
Ò` 1ú¨ø  1ûì  @ü‹} u1ÉŽ?1x× 1 51 3Ï 1!�i  1"È 1#X  @#âp @ 1%7ò 1%ÔÇ ð'!0    '½ã     )° ñ0    )”‹  @*ê° @+k2  1,Àµ  1-fÄ  1. — 1/F¦ 10€y 11M0 12W @ 13j  148T  14øÁ 16  16Ïh0 17öÆ0 18¸…  19ßã  1:�,  1;Èÿ  1<o 1=Ä‘  1>Nð 1?‘þ 1@.Ò 1A†ø 1BïP 1CQÂ 1C÷Ñ 1EMSP 1Eàí0 1G†  1G·•  1Hú¢  1I—w 1JÚ„ 1K€“0 1Lºf 1M`u 1NšH 1OI’0 1PƒeP 1Q 9  1RcG 1S  1TC) 1Té80 1V# 1VÉ 1Xí 1X¨ü 1YâÏ 1ZˆÞ 1[Þ`p o\hÀ  FðÿÿÔL  ÿÿãàÿÿÕÐ LMT -02 -03 
<-03>3
TZif2& @     & 3 ð"      ÿÿÿÿ›€L8 @Mn@ @4$À 1#ùP@Ü� 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ @¼½0 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ Ÿ1]Ù 
Bÿÿëh·€ ÿÿñð   ò &ÃQ1 +00Çñ1>1<+00>,M3.5.0/0,M10
 1ßDaßß@^° @ž¦:� @Ÿ»€ 1 † 1¡šé 1¢eþ @£„   1¤Eà 1¤�¦  1Ë‰ @Ò#ôp  1Òa( 1÷/v 1ø(” 1ùX 1úv 1úøug1ûèX 1üØW 1ýÈ: 1þ¸9 0ÿ¨DA  ˜ç1‡þ 1wý @q€ 1a¯1Pü 1@û 10Þ 1�5 1	À 1	­±@ 1
ð¢ 1à¡  0Ù¿O A Àƒ 1¹¡ 1© 0 1™ƒ 1‰‚ 1ye 1id 1YG 1IF 19) 1)( 1"Ep 1	
 1' 1ò&p 1â	 1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 1#jÌp 1$5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾£ 1,Óp` 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 18÷p 18ç 19ûÙ 1:Æî 1;Û» 1<°
p 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ EEóÅÅ% Ú:@ÿÿ�” « Íð �� ÿÿ« ÿÿ« ÿ$LMT MDT MST MWT MPT 
MST7MDT,M3.2.0,M11.1.0
TZif2  @     ) 3 ðS   	   "ÿÿÿÿ?ÂýÑ @}‡3™ @Ë‰  AÒ#ôp 0a& @þ¸G  @ÿ¨*h @ ˜)  1ˆ 1x @q(� @a'  1Q
 1A	 10ì 1�C 1	Î 1	­¿@ 1
ð° 1à¯  1ÙÍ` 1À‘ 1¹¯ 1©®0 1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 1"Sp 1	 15 1+( @òB°È 1â%€ 1Ò$ 1Â 1² 1¡é @ v900 1!�Ë 1"V 1#jè` 1$5ý 1%JÊ 1&ß 1'*¬ 1'þûP 1)
Ž 1)ÞÝ 1*êp 1+¾¿ 1,ÓŒ` 1-ž¡ 1.³n 1/~ƒ 10“P 11g ` 12s2 13G‚ 14S 15'd 162ö 17F 18p 18ç( 19ûõ 1:Ç
 1;Û× 1<°&p 1=»¹ 1>� 1?›› 1@oê 1A„·` 1BOÌ 1Cd™ 1D/® 1ED{ ¯Eóá0 	?    Ò§  ÿÿ�' ¡�€ ÿÿ��  Ñÿÿ�p ÿÿ�€ ¬ðPST PWT PPT PDT YST AKD �ST 
AKST9 ¼S çP   Œ�“73¬ÿÿÆTÔ @ÇÀ ° A– ?ST4>D»~ @   ‚ @^=4ì @œÏb @�¤æü @ž¸~Œ @ŸºÖ| @ ¶ˆÜ @¡8ÿL @¢•\ 1£„ü 1¤tû 1¥dÞ 1¦^0 1§DÀ 1¨=ù 1©$¢ 1ªÛ 1«„ 1«ý½ 1¬äf 1­ÝŸ @®Í‚Ìh 1¯½� 1°­d 1±¦žp 1²�F 1³†€ 1´m( 1µfb 1¶M
 1·FD 1¸,ì 1¹&& 1º	p 1»B` 1»õë 1¼ï$ 1½ÕÍ @¾žMlˆ @¾Ï¨ @¿µ¯ @À¸18 1Áyï 1Â˜ 1ÃYÑ 1Äwõ 1Å9³ @Æa¸0 1Ç• 1È@ó @É²( 1Ê Õ 1Êâ” 1Ì · Î0`æÈ( @ÓˆDØ @ÔJH 1Õh& 1Ö)å 1×H 1Ø	Ç 1Ù'ê 1Ùé© @ÛX8 1ÛÒÅP 1ÜÞt 1Ý©m  1Þ¾V 1ß‰O 1àž8 1ái1 1â~ 1ãI 1ä]ü 1å(õ 1æGp 1ç` 1è&ú 1èñó 1êÜ 1êÑÕ 1ëæ¾ 1ì±· 1íÆ  1î¿¾P 1ï¯½` 1ðŸ  1ñ�Ÿ 1ò‚ 1óo� 1ô_d 1õOc 1ö?F 1÷/E 1ø(b` 1ù' 1úD 1úøCp 1ûè& 1üØ% ðýÈÈÿÿÿÿþ¸Øÿÿÿÿÿ§0êÈ  0—éØ 1‡Ì 1wË @péH @`èX 1PË 1@Ê 10­ 1 ¬ 1	� 1
 Ž 1
ðq 1àp 1Ù�` 1ÀR 1¹o 1©np 1™Q 1‰P 1y3 1i2 1Y 1I 18÷ 1(ö 1"p 1Ø 1ö 1ñõp 1áØ 1Ñ× 1Áº 1±¹ 1¡œ @ uÏôð @!�bd 1"U± @#jpÔ 1$5“ @%J`ä 1&u 1'*B @'þ’t 1)
$ 1)Þt 1*ê 1+¾V 1,Ó#` 1-ž8 1.³ 1/~ 10’ç 11g6` 12rÉ 13G 14R« 15&ú 162� 17Ü 18©p 18æ¾ 19û‹ 1:Æ  1;Ûm 1<¯½p 1=»O 1>�Ÿ 1?›1 1@o� 1A„N` 1BOc 1Cd0 1D/E 1ED 1Eów` 1G-.@ 1GÓY 1I 1I³; 1Jìò 1KœX@ 1LÖ@ 1M|: oN¶H ) ) 
  'V ÁÿÿÎ”  ÿÿÜ¤ QÿÿÜØ "È   ð
ÿÿêèLMT NDT NST NPT NW ðDT 
NST3:30NDT,M3.2.0,M11.1.0
TZif2l @     & 3  + 0  ¥ °ÿÿ“73¬ÿÿÆTÌ @ÇÀ ¨ ŸAST 
AST4‚ ÿËñ      ÿÿÿÿ†ý– @ž¸¯� @Ÿ»€ 1Ë‰ @Ò#ôp @Òa  @Óv 1ÔSo 1ÕUã 1Ö Ü 1×5Å 1Ø ¾ 1Ù§ 1Ùà  1è', 1é 1ëæð 1ìÖÓ 1íÆÒ 1î‘Ë 1ï¯îˆ 0ðq­ç­ a�APÿÿšèÎ « Ž ��é€« ÿÿ« µ 1«  ŽðMDT MST MWT MPT CöOCST6öD�      8@¤LKDÉ @ šÜà @!\›P 1"z¾ 1#<} 1D]Œ CDÖÈÐë @ÿÿ®<à  ¹°à @«  ´!CDÂ À 
CST6
TZif2  @     ) PTZif2	  ð"      ÿÿÿÿ›€wü+ @'õzà @(å]Ð 1)Õ\ 1*Å? @+¾y` @,ÓFP 1-ž[ 1.³( 1/~= 10“
 11gY@ 12rì 13G; 14RÎ 15' 162° 17ÿ 18Ìp 18æá 19û® 1:ÆÃ 1;Û� 1<¯àp 1=»r 1>�Â 1?›T 1@o¤ 1A„q` 1BO† 1CdS 1D/h 1ED5 oEóšà ÿ'ÿÿ¿„  ÿÿÕÐÿÿÇÀ LMT ADT AST 
AST4ADT,M3.2.0,M11.1.0
” S Ã    3 �N      Ç@rî‚, @�${à @Ëˆðp 2Ò#ô !`û?@ —þð` "‡_1wà 1pþ@`ýp  "P_1 Á "	O1
 £ "
ðO1à… 1Ù¢` 1Àg 1¹„ 1©ƒ` 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")  1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC ¯Eó¨ð 5@ÿÿ¬TS «  ÿÿ¹° Y!  ePCST E ÿWT EPT EDT 
EST5EqU^q@¥¶ö€a1©yOa@¯ò|ð 1¶fd @·  1¸
ò 1Ëê�0 ‘!™º( 1×Y( 1Ø‘´( @â~K�8 1ãIR 1ä^- 1å)4 @æGJ  1çQ 2è', !ò3 2ê !Ò 1ëæð 1ì±÷ 1íÆÒ @î‘Ùé@à¯  1ÙÍ 1À‘ 1¹¯ @©®   1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 @"S�H 1	 15 1ò4p 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç ð:Æü     ;ÛÉ    <°      =»« 1>�ú 1?›� 1@oÜ @A„©�  1BO¾ 1Cd‹ 1D/  1EDm 1F‚ 1G$O @GøŸ 8 1I1 1IØ� 1Jä ïKœ³  Aðÿÿ’L  ÿÿ�� ÿÿ�€  !   LMT MST P ðDT PWT PPT 
PST8PDT,M3.2.0,M11.1.0
TZif2×  @     & 3 ð¬      ÿÿÿÿrîxì @ž¸“p @Ÿºë` @ ‡.È @¡š±@ @¢”ð 1£U© 1¤†] 1¥(x0 1¦f? @§Nà( 1¨F! 1¨ì0 1ªÉ` 1ªÕM0 1«ü« 1¬µ/ 1­Ü� 1®• 1¯¼o 1°~-@ 1±œQ 1²gJ  1³|3 1´G, 1µ\ 1¶' 1·;÷ 1¸ð 1¹%� 1¹æÒ 1»õ 1»Ïî` 1¼ä× 1½¯Ð 1¾Ä¹ 1¿�² 1À¤› 1Áo” 1Â„} 1ÃOv 1Äd_ 1Å/X 1ÆM|€ 1Ç: 1È-^ 1Ëˆð 2Ò#ô !`û  1Óuä@ 1Ô@Ý @ÕUªÐH@Ö £À 1×5Œ 1Ø … 1Ùn 1Ú3v�1Úþ§P 1Ütà 1ÜÞ‰ 1Ý©‚ 1Þ¾k 1ß‰d 1àžM 1áiF 1â~/ 1ãI( 1ä^ 1å)
 1æG-  1ç&  1è' 1éò 1êñ 1êöÔ 1ëæÓ 1ìÖ¶ 1íÆµ 1î¿ÓP 1ï¯Ò` 1ðŸµ 1ñ�´ 1ò— 1óo– 1ô_y 1õOx 1ö?[ 1÷/Z 1ø(w` 1ù< 1úY 1úøXp 1ûè; 1üØ: 1ýÈ 1þ¸ @ÿ§ÿà8@ —þð 1‡á 1wà @pþ` @`ýp 1Pà 1@ß 10Â 1 Á 1	¤ 1
 £ 1
ð† 1à… 1Ù¢` 1Àg 1¹„ 1©ƒp 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC PEó¨ðr /0 . ;@ÿÿµ”¿€ÇÀÿÿ¹°¿ ÇÀ¿@ÇÀ¹ÐEDT EST EWT Eµ_EST5Eµ
À              @      PTZif2	   + ÿ   ÿÿÿÿ“73¬ÿÿÆT  ÿÿÇÀ LMT AST 
AST4
O  i  S     3 ��      ‚ @^=vì @ž¸½  @Ÿ»� 1Ë‰ @Ò#ôp @Òa& @Óv  1ÔA 1ÕUñ 1Ö ê 1×5Ó 1Ø Ì 1Ùµ 1Ùà® 1ÚþÑX 1ÛÀ� 1ÜÞ³ 1Ý©¬x 1Þ¾• 1ß‰Ž 1àžw 1áip 1â~Y 1ãIR 1ä^; 1å)4 1æGXp 1çQ` 1è': 1èò3 1ê 1êÒ 1ëæþ 1ì±÷ 1íÆà 1î‘Ù 1ï¯ü` 1ðq» 1ñ�Þ 1òÁp 1óoÀ 1ô_£ 1õO¢ 1ö?… 1÷/„ 1ø(¢@ 1ùf 1ú„ 1úøƒp 1ûèf 1üØe 1ýÈH 1þ¸G @ÿ¨*à@ ˜)  1ˆ 1x @q(� @a'  1Q
 1A	 10ì 1 ë 1	Î 1
 Í 1
ð° 1à¯ 1ÙÍ` 1À‘ 1¹¯ 1©®p 1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 1"Sp 1	 15 1ò4p 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç 1:Æü 1;ÛÉ 1<°p 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm ¿EóÓ  g@ÿÿŒ”€��ÿÿ�€ ��ÿÿ��ÿPDT PST PWT PPT 
PST8PDT,M3.2.0,M11.1.02D ]´k�]   	   %|@}†Šœ @ž¸Ë° 1Ÿ»#T1 Ð @¡¢Ò€ 1Ë‰( Ä4L1÷/vœ”1û_<¼ÿÀ�    5'V   à  62è�    78  A8 !ç 19ûç 1:Æü 1;ÛÉ @<° ( 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm 1EóÓ` 1G-Š@ 1GÓµ 1Il 1I³— 1JíN 1Kœ³@ 1LÖj@ 1M|• 1N¶L 1O\w 1P–. 1Q<Y 1Rv 1S; 1TUò 1Tü 1V5Ô 1Vå:p 1Xñp 1XÅ 1YþÓ 1Z¤þ 1[Þµ 1\„à 1]¾— 1^dÂ ÿ_ž\ð =ñÿÿ�d  ÿÿ�€ÿÿ�p   pÿÿ�� !   ð !LMT YDT YST YWT YP ðDT PST PDT MST 
MST7
TZif2ë @     & 3 ð}      ÿÿÿÿdä°” A›ûà 0ÃºP @ž¸¡€ @Ÿºùp 1Â ; @ÃO„ð 1Ëˆþ 1Ò#ô  1Òa	 @Óˆh   1ÔS` 1ÕUÕ 1Ö Í 1×5· 1Ø ¯ 1Ù™ 1Ùà‘ 1Û  1ÛÈ\ 1ÜÞ—h 1Ý©�h 1Þ¾y 1ß‰r 1àž[ 1áiT 1â~= 1ãI6 1ä^ 1å) 1æG<` 1ç4` 1è' 1èò  êÒQÿÿêÑø 1ëæâ  1ìÖÄ 1íÆÄ 1î‘¼ 1óo¤` 1ô1b 1ùJ 1úv( 1úøg 1ûèX 1üØI 1ýÈ: 1þ¸+ 0ÿ¨¿A  ˜ 1‡þ 1wï @q€	 1a 1Pü 1@í 10Þ 1 Ï 1	À 2
 ± !ð¢ 1à“ 0Ù¿O A Àu 1¹¡ 1©’ 1™ƒ 1‰t 1ye 1iV 1YG 1I8 19) 1) 1"EX 1ü 1' 1ò 1â	 1Ñú 1Áë 1±Ü 1¡Í 1 v@ 1!�¯ 1"Uñ 1#jÌ 1$5Ó 1%J® 1&µ !'*LA 'þÑ8 1)
r 1)Þ³ 1*êT 1+¾• 1,Óp 1-žw 1.³R 1/~Y 10“4 11gv8 12s 13GX 14Rø 15': 162Ú "7Ø18÷ "8æØ19ûÙ 1:Æà 1;Û» "<¯Ø1=»� ">�Ø1?› "@oØ1A„›` "BOØ1Cd} 1D/„ @EDQp1 AEó·   \@ÿÿ¤ìS ¹°% « % ¹°ÿÿ¹°ÿCDT CST CWT CPT 
CST6CDT,M3.2.0,M11.1.0D�S      ¶@?ÂýÑ @}‡7¿ @Ë‰(° æ 4  @þ¸U0 "ÿ¨»@ ˜70n"ˆ»1x 1q6Ûða5°    Q     A‘°    0ú  !�Q 1	Ü @	­Í0 1
ð¾ 1à½  @ÙÛ  1ÀŸ 1¹½ 1©¼0 1™Ÿ 1‰ž 1y� 1i€ 1Yc 1Ib 19E 1)D 1"ap 1	& 1C @+x 1òBx 1â% 1Ò$ 1Â 1² 1¡é 1 v9H 1!�Ë 1"V 1#jèx 1$5ý 1%JÊ 1&ß 1'*¬ 1'þûP 1)
Ž 1)ÞÝ 1*êp 1+¾¿ 1,ÓŒ` 1-ž¡ 1.³n 1/~ƒ 10“P 11g ` 12s2 13G‚ 14S 15'd 162ö 17F 18p 18ç( 19ûõ 1:Ç
 1;Û× 1<°&p 1=»¹ 1>� 1?›› 1@oê 1A„·` 1BOÌ 1Cd™ 1D/® 1ED{ ¯Eóá0 
/    Î�  ÿÿ} ¡�p ÿÿ�€   ñÿÿ�p LMT YST YWT YPT YDT AK �ST 
AKST9 ð,M3.2.0,M11.1.0
TZif28 @     & 3 ð=      ÿÿÿÿ¾*  @Ë‰� AÒ#ôp a 1÷/Z @ø(…ð` 1idÊ0YG A IF 19) 1)( @"E€ 1	
 1' @ò&� 1â	 1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 0#jÌG A $5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾£ 1,Óp` 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 18÷p 18ç 19ûÙ 1:Æî 1;Û» 1<°
p 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ PEóÅ/ #v q ÿÿ«  Ñÿÿ�� ÿÿ¹° ð-00 MWT MPT MST MDD ¯T 
MST7MDTÙ[Á@rœ¨L @¢’�0 @¶{R@ @·É° 1¸� 1¸Ôp  @º}À 1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  "ý¬01þœ5 @ÿŒ4@1£Jc1$oc1#”µ 1$” 1%7ò 1%ðv 1'!ã1'ÐX 1) ñ 1)°: 1*àÓ 1+™Wã17öÆ@ 18¿* 2Gw	 ð Ü     Hú¢°    I¼a  '  ðÿÿÉ4  ÿÿÃÐ ÿÿÇÀ ÿÿÕÐÿÿãà ÿ LMT CMT -04 -03 -02 
<-03>3
TZif2  @     ) 3 ð=      ÿÿÿÿrœ¯, @¢’�0 @¶{R@ @·É° 1¸� 1¸Ôp  @º}À 1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  "ý¬01þœ5 @ÿŒ4@ˆ@£J° @$o  1#”µ 1$” 1%7ò 1%ðv @'!0( 1'ÐX 1) ÿH 1)°: 1*àÓ  @+™W ( 17öÆ@ 18¿* 1@»ñ  @@ÕÀ  1Gw	 ?GÜÄ Ì¯ÿÿÂTÄÿÿÿU­`ˆÿnÀ'!0    'ÐX �    ) ÿ@ 0°:  @*àÓ0 @+™W  @7öÆ° 18¿* 2Gw	 !Ü  1Hú¢ I¼a  "   aÿÿÃÐ   ðÿÿÇÀ ÿÿÕÐÿÿãà ð LMT CMT -04 -03 -02 
<-03>3
TZif2ª  @     & 3 ð;      ÿÿÿÿrœ®¸ @¢’�0 @¶{R@ @·É° 1¸� 1¸Ôp  @º}À 1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  "ý¬01þœ5 1ÿŒ4|@£J°�1$o„1#”µ 1$” 1%7ò 1%ðv @'*WÀ0 1'âÛ 1(îŠH )Ä ´%´OÿÿÂÈ²>² °,‚²ÿo!!V1'ÍµÂ2(&&²! ñ º"@»0 1@ÕŽÊ1y  OÿÿÁTÍ=Í/²Íÿ/Àÿÿÿþœ50ÿÿÿÿÿ°Œ4@    £J° @$o  1#”µ 1$” 1%7ò 1%ðv "'8 1'ÍÃ @(úgÀ8 1)°H 1*àáX @+™W  17öÆ 18¿* 1@° 1AV>8 1Gw	 GÜ    - ðÿÿ¿|  ÿÿÃÐ ÿÿÇÀ ÿÿÕÐÿÿãà ð LMT CMT -04 -03 -02 
<-03>3
TZif2²  @     & 3 ð=      ÿÿÿÿrœ²d @¢’�0 @¶{R@ @·É° 1¸� 1¸Ôp  @º}À 1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  "ý¬01þœ5 ÿÄ%0!0À1'ÐXÔ1) ñ 1)°: 1*àÓ Ä»0 ?@ÕÄ. ÈÄÄ;Ä ®Ô”Äÿ€ÿxÄx)0€v/Â¬²>²/±¼²ôÀ°ÿÿÿÿøCÀÿÿÿÐÿøÇÓ0ÿÿÿÿùôw@ @úÓ6° @ûÃ5À 1ü¼S  1ý¬R  1þœ5 ÀÿŒ4@    £J° @$o  1#”µ 1$” 1%7ò 1%ðv @'!0( 1'Íµ 1(&&H 1) ñ 1)°: 1*àÓ @+™W 0 17öÆH 18¿* 1@ºŸ 1A0@ 1Gw	 GÜ  "    ðÿÿ¿Ä  ÿÿÃÐ ÿÿÇÀ ÿÿÕÐÿÿãà ð LMT CMT -04 -03 -02 
<-03>3
TZif2³  @     & 3 �>      •@rœ¯´ 1¢’��"¶{�1·É½1¸�­1¸Ôp  1º}Í1ºµ£  1»ø±  1¼–×  1½Ùä  1¾x
  1¿»  1ÀZ� 1Á�� 1Â;Ã0 1Ã~Ð0 1Äö  1Å`  1Åþ*  1ÇA7  1Çà¯ 1È�”  1ÊM¡0 1Êî†  1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  ÍV!ý¥¥"'@'ÍÃ°È@(GÀ ­!“üH 1GÓR@ 1HñvÍ1I³4 OJÑX@ÍAÉ _ÿÿÁÌÍ?Í/®¤Íÿkš!ÐX•1) ÿ�’»Â1@ËÑ8 ’ 1Hú¢Õ?I¼a¢! ªØÿÿÂÜÖ=Ö/±ˆÖ„À0ÿÿÿÿÇA7ÀÿÿÿÐÿÇà¯0ÿÿÿÿÈ�”@ AÊM¡° 0î†À 1ÎMÿ  1Î°í 1Ó)5  1ÔCd 1ô=  1ôŸö 1õl 1ö2P 1öæŸ0 1øC  1øÇÓ  1ùôw  1úÓ6  1ûÃ5  1ü¼S  1ý¬R  1þœ5 ÀÿŒ4@    £J° @$o  1#”µ 1$” 1%7ò 1%ðv @'!0( 1'ÐX 1) ñ 1)°: 1*àÓ @+™W ( 17öÆ@ 18¿* 1@¹N  @@ÕÀ  1Gw	 GÜ  ' ðÿÿ¿ø  ÿÿÃÐ ÿÿÇÀ ÿÿÕÐÿÿãà ð LMT CMT -04 -03 -02 
<-03>3
TZif2’  @     & 3 &c@   ü@^þ  @ž¦,€ @Ÿºùp 1 † 1¡šÛ 1ÊW" 1ÊØG 1Ëˆþ 1Ò#ô @Òa	ð8 @Óuó  1Ô@ë 1ÕUÕ 1Ö Í 1×5· 1Ø ¯ 1Ù™ 1Ùà‘ 1ÚþµX 1ÛÀs 1ÜÞ— 1Ý©�h 1Þ¾y 1ß‰r 1àž[ 1áiT 1â~= 1ãI6 1ä^ 1èòP  ê‘Qÿÿþ¸ @ÿ§ÿà8@ —þð 1‡á @D/vp AEDC` Qó¨ð !   B @ÿÿ¯:d €¹°ÿÿ« õ ¹°õ ¹°õ@¹° !ûÿDT CST CWT CPT EST EDT 
EST5EDT,M3.2.0,M11.1.0D�]      »óu1åW<ã1æG<c1ç7 1è' 1êÑø  1ëæâ  1ìÖÄ 1íÆÄ 1î¿áS1ï¯àS1ðŸÃ 1ñ�Â 1ô_‡ 1úøg0 1ûèI@ 1üØI 1ýÈ+ 1þ¸+ 1ÿ¨s0 ˜bA ‡ï 1wï 1qƒ@a€ 1Pî 1@í 10Ð 1�' 1	² 0	­£/ A 
ð” 1à“  1Ù°` 1Àu 1¹’ 1©’0 1™t 1‰t 1yV 1iV 1Y8 1I8 19 1) 1"7p 1ü 1 1òp 1áû 1Ñú 1ÁÝ 1±Ü 1¡¿ 1 v@ 1!�¡ 1"Uñ 1#j½p 1$5Ó 1%JŸ 1&µ 1'*� 1'þÑP 1)
c ËQP AEó· ÂÉÑ  '  
  �ÿÿ®Êüo
CST6Cø.À    TZif2     ð*      ÿÿÿÿ^þ  @ž¦,€ @Ÿºùp 1 † 1¡šÛ 1Ëˆþ 1Ò#ô @Òa	ð( 1ÜÞ— 1Ý©� 1â~= 1ãI6 1ä^ 1å) @æG< 8 1ç4@ 1è' 1èò 1ê  1êÑø 1ëæâ 1ì±Ú 1íÆÄ 1î‘¼ 1ï¯à` 1þ¸ Aÿ§ÿàû 0—þð 1‡á 1wà @pþ` @`ýp 1Pà 1@ß 10Â 1� 2	² !­”@ 1
ð†  1D/v 1EDC ±Eó¨ð    % 
 @ÿÿ¯è ñ¹°ÿÿ«  ÿÿ¹°  ð2 ÿÿÇÀLMT CDT CST CWT CPT EST EDT 
EST5EDT,M3.2.0,M11.1.0
TZif2Ý  @     & 3 �8      ¿7-@äg=àH M1ðŸÃw1ñ�Â'1ò¥ 1óo¤ 1ô_‡ 1õO† 1ö?i 1÷/h 1úgW1úøgw1ûèI 1üØI 1ýÈ+ 1þ¸+ 1ÿ¨'0 ˜WA ‡ï 1wï 1q7@a€ 1Pî 1@í 10Ð 1�' 	£/ A 
ð”  1à“  1Ù°` 1Àu 1¹’ ŸQ0 1Eó·@ ?G-m§ ¯½  ¯ÿÿ®-µ¯«[%â9«…û‹
öº   ¿ÿÿ®© µ_CST6CµU
9Ül-‚<  Oÿÿ°@qÀT CST CWT CPÿT EST EDT 
EST5EDT,M3.2.0,M11.1.0
TZif2  @     ) 3 ð)      ÿÿÿÿ^þ  @ž¦,€ @Ÿºùp 1 † 1¡šÛ 1Ëˆþ 1Ò#ô @Òa	ð( @Óuó  1Ô@ë 1àž[( 1áiT( 1â~= 1ãI6 @äg=à0 1å) 1æG<@ 1ç4@ 1è' 1èò 1ê  1êÑø 1ëæâ 1ì±Ú 1íÆÄ 1î¿áP 1ï¯àp 1ðqž  1ñ�Â 1ò¥  1óo¤ 1ô_‡ 1õO† 1þ¸0 @ÿ§ÿàH@ —þð 1‡á @D/vp 2EDQ  ó· Á G-mð    Ðÿÿ­ñÏ ñ¹°ÿÿ«  ÿÿ¹°  ÿ ÿÿÇÀLMT CDT CST CWT CP.e/.I1ÕUÕ¾1Ö Í~1×5· 1Ø ¯ 1Ù™ 1Ùà‘ 1Úþµ®1ÛÀs 1ÜÞ— 1Ý©�Î1Þ¾y 1ß‰r Ž!^0 1åW<P Ž!7 Ž&!‘¼@ Ž^'!_àW^ndoÿÿ®Ïd�ud!1¤s÷1¥ì1ÊNÌ1ÊØG ²×ú1Ó¤	( TFâT1é $â!öâ â!ÖÄ âô1üØ:( 1ýÈZl1wàÚ@pþ`Ã1`ýÒ1Pà 1@ß 10Â 1� 2	² !­”@ 1
ð†  1à… 1Ù¢*1Àg 1¹„ 1©ƒ0 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži ð.³6`    /~Kp    0°“`    1ggð 12rú 13GI 14RÜ 15'+ 162¾ 17 @8Úà8 18æï 19û¼ 1:ÆÑ 1;Ûž @<¯îp( 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC cEó¨ð #	   '    ñÿÿ¯š  ÿÿ¹°ÿÿ«     ð2 ÿÿÇÀLMT CDT CST CWT CPT EST EDT 
EST5EDT,M3.2.0,M11.1.0
TZif2( @     & 3 ðW      ÿÿÿÿ^þ  @ž¦,€ @Ÿºùp 1 † 1¡šÛ 1Ëˆþ 1Ò#ô @Òa	ð( @üØI  1ýÈ+ 1þ¸+ "ÿ¨0 ˜— 2 ‡1wï 1qÂ@a€ "P1@í "01�' "	0	­£/ 2 
ð1à“  1Ù°b1Àu 1¹’ 1©’0 1™t 1‰t 1yV 1iV 1Y8 1I8 19 1) 1"7° 1ü 1 1òp 1áû 1Ñú 1ÁÝ 1±Ü 1¡¿ 1 v@ 1!�¡ 1"Uñ 1#j½p 1$5Ó 1%JŸ 1&µ 1'*� 1'þÑP 1)
c 1)Þ³ 1*êE 1+¾• 1,Ób` 1-žw 1.³D 1/~Y 10“& 11gv` 12s 13GX 14Rê 15': 162Ì 17 18èp 18æþ 19ûÊ êVæ	 
 
éOÿÿ°tÌ	AÇÀÒÌDÐÌ[ þP   „@^° @ž¦:� 1Ÿ»´1 † 1¡šé 1Ë‰ Ì´@úøu8 1ûèX 1üØW 1ýÈ: 1þ¸9 "ÿ¨@ ˜ý"‡1wý 1qd@a�  1Pü 1@û 10Þ 1�5 1	À 1	­±@ 1
ð¢ 1à¡  0Ù¿G A Àƒ 1¹¡ 1© 0 1™ƒ 1‰‚ 1ye 1id 1YG 1IF 19) 1)( 1"Ep 1	
 "t1ò&p 1â	  1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 1#jÌp 1$5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾£ 1,Óp` 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø ð5'H    62Ú€    7*€    8÷ A 8ç 19ûÙ 1:Æî 1;Û» @<°
�	 0=»� A >�ì 1?› 1@oÎ @A„›€ 1BO° 1Cd} 1D/’ 1ED_ 1EóÅ` 0G-|/ A GÓ§ 1I^ 1I³‰ 1Jí@ 1Kœ¥@ ±LÖ\€    <ñÿÿ •  ÿÿ« ÿÿ��    ñ( LMT MDT MST MWT MPT CST 
CST6CDT,M3.2.0,M11.1.0
TZif2Ê  
@     % 3 ðY      ÿÿÿÿ^° @ž¦:� @Ÿ»€ 1 † 1¡šé 1Ë‰ @Ò#ôp  @Òa  @úøu 1ûèX 1üØW 1ýÈ: 1þ¸9 0ÿ¨Ÿ A  ˜£1‡þ 1wý @q€ 1a³1Pü 1@û 10Þ 1�5 1	À 1	­±@ 1
ð¢ 1à¡  0Ù¿O A Àƒ 1¹¡ 1© 0 1™ƒ 1‰‚ 1ye 1id 1YG 1IF 19) 1)( 1"Ep 1	
 1' 1ò&p 1â	 1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 1#jÌp 1$5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾•X @,Óbp 1-žw 1.³D 1/~Y 10“& 01gv' A 2s 13GX 14Rê 15': 162Ì "7Ø@8èð "8æØ19ûÊ 0:Æà A ;Û¬ "<¯Ø1=»Ž ">�Ø1?›p "@oØ1A„�` "BOØ1Cdo 1D/„° 1EDQ AEó· ÔÛ#/ 	Oÿÿ¡Ô	A¹°ÚÚDÞÿÿR£î1,Óp1-ž… 1.³R 1/~g 10“4 11g„>12s 13Gf 14Rø 15'H 162Ú ð7*    8÷     8ç�    9ûÙ A :Æî 1;Û» @<°
�	 0=»� A >�ì 1?› @@oÀ€	 @A„�p 1BO¢ 1Cdo 1D/„ 1EDQ ±Eó·     ." ñÿÿ í  ÿÿ« ÿÿ��   pÿÿ¹° ð, LMT MDT MST MWT MPT CDT CST 
CST6CDT,M3.2.0,M11.1.0
TZif2ä  @     & 3 ð      ÿÿÿÿþÌ€8 @JÚ  @K�Êð 1N©œ 1OCÍ~1X
;( 1Z¤®@[¹@( 1\� @]–E0 0^cÅ X _x <f ÿ   p€   š° -00 +08 +11 
<+11>-11ó Dó @çœ@ û @öGß 1þG«ž 1JÚÃ 1K—úÛ 1N©ª aOC÷À Í ( P   bpÆ $FPÆ P7 +05Æ _07>-7Å D ´0  c`ÿÿÔ¼v€½ @Þ4`` Uç<€Q Œ  a 10— _10>-1PE[]ˆ 1|]1›Õx  1œ¼/ 1 ‡´¨ 1×h 1ûÂ� 1ü²~ 1ýÇY 1þv°8 2ÿ§;m!V’`1‡ 1?¯ 1p9 1 1P 1ö8 2/ý !Ö 2	ß !µü 1
ïÁ 1Ÿ@ 1ØÞ 1~û 1¸À 1^Ý 1˜¢ 1>¿ 1x„ 1¡ 2Xf !þƒ 18H 1O 1!dp 1ã1 1F 1§c 1á( 1‡E 1Á
 1g' 1—²8 1 Y~ 1!€Î 1"B› 1#ië 1$"} 1%IÍ 1&_ "')81'ô¶ 1(íá@ 1)Ô˜ 1*ÍÃ 1+´z 1,­¥ 1-”\ 1.�‡ 1/t> 10mi 11]Z 12V† 13=< 146h 15 16J 16ý  17ö, 18Üâ 19§é 1:¼Ä 1;¿* 1<¥á( 1=Ÿ 1>…Ã 1?~î 1@e¥ 1A^Ð 1BE‡ 1C>² 1D.£ 1E” 1FK  2G± ÷Ø1Hç“ "I×Ø1JÇu 0M—Hû  >7J d !  °  	¶°AEST AEDT 
 0-10 @,M100,M4 //3hD d l 1â 28PJÚ"@ ² *T` 6 O5>-5˜ À              @      PTZif2	  ð`      ÿÿÿÿA·L¨ @°´²è @±Q‡X @²xåh @³Cå` 1´XÇ 1µ#Ç 1¶8© 1·© 1¸‹ @¸ìÅà0 1¹øm 1ºÌ§ 1»ØO 1¼ãè 1½®öp 1¾ÃÊ 1¿ŽØ 1À£¬ 1Ánº 1ÂƒŽ 1ÃNœ 1Äcp 1Å.~ 1ÆL�€ 1Ç` 1È,o 1È÷}p @ÒÚš@A	ýà !¬¥ 0
ï¥A žü 1ØÁ 1~Þ 1¸£ 1^À 1˜… 1>¢ 1xg 1„ 2XI !þf 28+ !çƒh 2!H !Çe 2* !§G 1á 1‡) 1Àî 1g 1 Ð 1 Fí 1!€² 1"0	h 1#iÎ 1$ë 1%.  1&B 1'ã 1'â$ 1(íÅ 1)Â 1*Í§ 1+«# 1,­‰ 1-‹ 1.�k 1/jç 10mM 11JÉ 12ViH 13*« 146K 15
� 16- 16ó© 17ö 18Ó‹ 19Õñ 1:³m 1;¿8 1<“O 1=žð 1>s1 1?~Ò 1@\N 1A^´ 1B<0 1C>– 1D 2Ex !ûô �FþZ` / /@  £Øtà¯È  ¡¸ 	  ¨À @¶Ð � LMT NZS 
 @DT 
 ÿ	-12NZDT,M9.5.0,M4.1.0/3
à s      3 �R      »Aö˜­  0æŸ° AøCÀ 0ÇÓ0 @ùôw@ 1úÓ6  1ûÃ5  1ü¼S  1ý¬R  1þœ5 1ÿŒ4ƒ@£J°� @$o  10¼ @]À 1ÑV 1æ? 1±8 1Ï\@ 1‘ 1¯> 1pü 1�  @ 0H 1!o 1"9û 1#Nä 1$Ý 1%8 ` 1%ù¿ 1&òø 1'Ù¡ 1(÷Ä 1)Â½` 1*×¦ 1+¢Ÿ 1,·ˆ 1-‚� 1.—j 1/bc 10€‡p 11BE 12`i 13=×` 14@K 15D 16¸ 17Õ0 18  18Ë  19é+` 1:ªê 1;É 1<ŠÌ 1=¨ï 1>j® 1?ˆÑ 1@SÊP 1Ah³ 1B3¬ 1CH• 1DŽ 1E1²p 1Eóp 1G” 1GïP 1Hñv 1I¼o 1JÑX 1K¸ 0 1L±: 1MÆ  1NP‚` 1Oœ®  1PBÙ 1Q|� 1R+ö0 1S\r 1TØ 1W7æ@ 1W¯ì0 dXC†° 5    "ð  ÿÿÇÀ ÿÿÕÐÿÿãà ÿ	 -00 -04 -03 -02 
<-03>wE ¢P   • 4-ÆŒ Œ 3„ À              @      PTZif2	  ð`      ÿÿÿÿA·L¨ @°´²è @±Q‡X @²xåh @³Cå` 1´XÇ 1µ#Ç 1¶8© 1·© 1¸‹ @¸ìÅà0 1¹øm 1ºÌ§ 1»ØO 1¼ãè 1½®öp 1¾ÃÊ 1¿ŽØ 1À£¬ 1Ánº 1ÂƒŽ 1ÃNœ 1Äcp 1Å.~ 1ÆL�€ 1Ç` 1È,o 1È÷}p @ÒÚš@A	ýà !¬¥ 0
ï¥A žü 1ØÁ 1~Þ 1¸£ 1^À 1˜… 1>¢ 1xg 1„ 2XI !þf 28+ !çƒh 2!H !Çe 2* !§G 1á 1‡) 1Àî 1g 1 Ð 1 Fí 1!€² 1"0	h 1#iÎ 1$ë 1%.  1&B 1'ã 1'â$ 1(íÅ 1)Â 1*Í§ 1+«# 1,­‰ 1-‹ 1.�k 1/jç 10mM 11JÉ 12ViH 13*« 146K 15
� 16- 16ó© 17ö 18Ó‹ 19Õñ 1:³m 1;¿8 1<“O 1=žð 1>s1 1?~Ò 1@\N 1A^´ 1B<0 1C>– 1D 2Ex !ûô �FþZ` / /@  £Øtà¯È  ¡¸ 	  ¨À @¶Ð � LMT NZS 
 @DT 
 ÿ	-12NZDT,M9.5.0,M4.1.0/3
à s      3  + P   »5ç±XOÿ *0 -00 +03 
<+03>-… E � P   µ 0BG ` BF�Ÿ    > © ” Q2 +00˜ Ð0>0<+02>-2,M33a/1,M10
 ± E —  µ 6@éX‰€ ¨ $T`66ž O6>-6»D@:   6»@rî$l A›'ã  "Ô{!·M @ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‚% 1Ñr 1Òb 1ë¯ 0 1ì¨L 1í˜= 1îˆ. 1ïx 1ðh 1ñX 1òGò 1ó7ã 1ô'Ô 1õÅ 1öðX 1÷/ @÷ðÒ�A@MD 13ú 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ b1]Ù À/ ð
  
        	LMT CES €T 
CET-1 °,M3.5.0,M10 €/3
TZif2<  @     & 3  + ð   ÿÿÿÿÕ6´  +Ì= @*0 � ¿+03 
<+03>-… E�3      … @ª{Ü @µ£ï0ˆ @'}  @² A±  0ùå� 1éä  1Û  1Ìi @¼vÀ  1¬g 1œX 1ŒI 1|: 1 l+ 1!\ 1"L 1#;þ 1$+ï 1%à 1&Ñ @'ý@` 1'ôî @(äíP 2)x• !ÔÐ 1*ÄÁ 1+´² 1,¤£ 1-”” 1.„… 1/tv 10dg 11]’h 12rm 13=t 14RO 15V 2621 !ý8 18N@ 18Ý 19û0 1:¼ü 1;Û 1<¦ 1=ºô 1>…û 1?šÖ 1@eÝ AƒòÀ   + @  H$ðFP   bp  T`  "Y‘5 +07 +06aO6>-6æD�F      Y@¶£ÖÐš @ryà 1«±@$7` 1íÞ  1
j  1
Ï  1çï 1Úu  1É#0 1’Ê 1© 1r¬ 1­Õ 1Ÿ	 1’ý 1‚àP 1 rß 1!bÂ 1"RÁ "#K€ 1$d¼ 1%+À@ 1&7o 1'¢ 1(s� 1(âJ@ 1)ä¾  1*Ëf  1+»e  1,«H 1-›G 1.xµ 1/„d0 10X¥ 11dF 12AÂ 13D( 14!¤ 15$
 16† 27z“ !ê¢@ 18â| 19Ó¿ 1:Â^ 1;³¡ 1<£’ 1=“ƒ 1>ƒt 1?˜O 1@cV 1Anö8 1BLr 1C<c 1D,T 1EA/ 1F6 2G! !ì 1I
.H 1IËú 1Jê 1K«Ü 1LÉò 1M”ù 1N©Ô 1OtÛ 1R³^POS4Ÿ`Ô$ @  !°Z *0ö" öEö EET 
EET-2 öC4/24ù?5/1D ÜP   @ªœ 1µ£Œ$1'|1OL1NÁ 1ù‘ 0é�@ A ÚÄ 1Ì 1¼"C1¬ 1œ 1‹õ 1{æ 1 k× 1![È 1"K¹ 1#;ª 1$+› 1%Œ 1&} 1'¨Ã1'ô™ @(ä˜ðY2)x@ !Ô{ 1*Äl 1+´] 1,¤N 1-”? 1.„0 1/t! 10d 11]>h 12r 13=  14Qû 15 ð61Ý`    6üä`    8ù�à    8ÜÆ` 19úÛ 1:¼¨ 1;Ú½ 1<¥Ä 1=ºŸ 1>…¦ 1?š� 1@eˆ 1Aƒž8 1BEj 1Cc€ 1D%L 1ECb 1F. 1G#D 1GîK 2I& !Î- 1Jã 1K® @LÌ2ð¨ ¬M�ÿp - #   p  ¦dL ð¨À   Äà  ¶Ð  ð"  ¨À  š° LMT +12 +14 +13 +11 
<+12>-12
TZif2I  @     & 3  R Ð   ÿÿÿÿª”à @µ£ý@@ @Î0 A±  0ùó  @éò° 1Û' 1Ìw @¼„Ð 1¬u 1œf 1ŒW 1|H 1 l9 1!\* 1"L 1#< 1$+ý 1%î 1&ß @'P` 1'ôü 1(äû¯2)x£ !ÔÞ 1*ÄÏ 1+´À 1,¤± 1-”¢ 1.„“ 1/t’8 10dƒ 11]®/12r‰ 13=� 14Rk 15r 262M !ýT 18j@ 18Ý6 19ûL 1:½ 1;Û. 1<¦5 1=» 1>† 1?šò 1@eù œA„à " . A  /Ž 8@i€FP   T`i T`iAFPc 04 +05 +06__05>-5^DG3   ^(Žh^1'‹61À¸ fÆ„n10du 11] Î12r{ 13=‚ 14R] 15d 262? !ýF 18\@ 18Ý( 19û> 1:½
 1;Û  1<¦' 1=» 1>†	 1?šä 1@eë @A„ Ðf, - # @  5˜…
g amg`V   Å/�Dg¿ÕÍˆ tƒv  6¼} T`M FPäFFPÞ6â?
<+ÞIwÀ    À     À¿0    ùó  @éò° @Û'  1Ìw @¼„Ð 1¬u 1œf 1ŒW 1|H 1 l9 1!\* 1"L 1#< 1$+ý 1%î 1&ß @'P` 1'ôü @(äû` )x£`  p  6¼% ð8@   T`  FP  ðLMT +04 +06 +05 
<+05>-5
TZif28  @     & 3  R Ð   ÿÿÿÿª“P "µ¤× 2Îg!±Wo‰ ð 1)ÔÞ‡1*ÄÏ 1+´À 1,¤± 1-”¢ 1.„“ 1/t„ 10du 11] ×12r{ 13=‚ 14R] 15d 262? !ýF 18j÷@8Ý6àˆ 19ûL 1:½ 1;Û. 1<¦5 1=» 1>† 1?šò 1@eù œA„à + % A  0õ *0X@FP ^ X2T`^r  8@ d3`h4hM06  –   `@i†±Ü 1ž0< 10h€@úÀ@1è½ @ÛC@ 1Ì“h1½È 1­Ç  1œt@ 1Œe 1|V 1 lG 1!\8 1"L) 1#< 1$, 1%ü 1&í 1'€0'öxw P (çº€	 0)Øý A *Ê? 1+º0 1,«s 1-›d 1.Œ¦ 1/|— 10mÚ 11_ 12P_ !3@¿ A 41’ 15!ƒ 16Æ  27· !óù 18å< 19Ö~ 1:Æo 1;·² 1<§£ 1=˜å 1>ˆÖ 1?z 1@k[ 1A\ž 1BL� 1C=Ñ 1D-Â 1E 1Fö _G 8€Æ @  )¤C  ) ö *0Œ"8@ÞBâ ~vO3>-3ÞD�      n1¡ò�ÎPŠ’À.…† ¢  z3˜ H@B   k@ª•D  1çÚ’ 1'™~Íö1úà1ê   1Û5Ð 1Ì… 1¼’Æ1¬ƒ F!õ
&A(å	pä!Ôú 1*Äë @1]Ù 12r´ 03=­ A 4Rˆ "5~162j 16ýq 18††18ÝS 19ûh ð:½5     ;ÛJ€    <¦Q�€    =», 1>†3 1?› 1@f 0A„+' A BE÷ 1Cd 1D%Ù 1ECï 1F» 1G#Ñ 1GîØ 2I³ !Îº 1Jã• 1K®œ 1LÌ±8 1MŽ~ 1N¬“ 1On` 1PŒu 1QW| 1RlW 1S7^ 1TL9 1U@ V,€  ?  * `  .¼ ð*0   FP  8@  ðLMT +03 +05 +04 
<+04>-4
TZif28  @     & 3 ð      ÿÿÿÿV¶…Ä  ¢jgÄ  ^<F  ^<¨ @bp œ B  7˜ O7>-7˜ D�C      � @¡Õ}ü @µ£á ’ @'o� 0¤ P £	 1ù×¨1éÖ  0Û A Ì[ @¼h° 1¬Y 1œJ 1Œ; 1|, 1 l 1!\ 1"Kÿ 1#;ð 1$+á 1%Ò 1&Ã @'ï0` 1'ôà @(äß@ 2)x‡ !ÔÂ 1*Ä³ 1+´¤ 1,¤• 1-”† 1.„w 2/th !ÇLØ 10dgH @1]’ÀX 12rm 13=t 14RO 15V 2621 !ý8 18N@ 18Ý 19û0 1:¼ü 1;Û 1<¦ 1=ºô 1>…û 1?šÖ 1@eÝ 1Aƒò8 1BE¿ 1CcÔ 1D%¡ 1EC¶ 1Fƒ 1G#˜ 1GîŸ 2Iz !Î� 1Jã\ 1K®c 1LÌy8 1MŽE 1TKóOVöê@ˆ‡/ p  N„G T`á p€‰ bp‰$bp‰�6 +08 +0ñN é  ‰é@V¶Â¸ @¢ecà @£{‚P @¤N€` @¥?´Ð 1¦%'  1§' 1¨)ó 1¨ë²0 1è*… 1èô- 1ê¹@ 1êÕ`0 1ëìì  1ì¶”  1íÏq 1î™ 1ï°¥0 @ðzLÐ*1¦^:1+w @Cà @«P 1$7  1íÞ  1
j  1
Ï  1çï 1±— 1É#0 1’Ê0 1© 1r¬ 1ô.0 1Ñœ 1Õb  1²Ð@ 1¶•  1”  1 —É  1!u7  1"£,  1#W¼ 1$g_  1%8ï0 1&<µ 1'#  1(è0 1(ûV  1* m 1*Î	 1+´Î0 1,¤±0 1-”° 1.„“ 1/t’ 10du 11]®@ 12M‘@ 13=� 14-s 15r 16U o6ýTà +@  !HŒ *0    	·ð EEST EET 
EET-2 Ò,M3.5.0/0,M10
 Í+À              ñ4      ÿÿÿÿª~ @µ£ï0% @'}  @² A±  0ùå� 1éä  1Û  1Ìi @¼vÀ  1¬g 1œX 1ŒI 1|: 1 l+ 1!\ 1"L 1#;þ 1$+ï 1%à 1&Ñ @'ý@` 1'ôî 1(¾£ 1)ç7¸ 1*Ä¥¨ 1+Ç 1,¤‡ 1-¦û 1.„i 1/†Ý 10dK 11f¿ 12MgÈ @3=‰Øh @4RVÈ 15k 1628 16ýM @8UH  18Ý/ 19û7 1:½ 1;Û @<¦.X( 1=ºû 1>† 1?šÝ 1@eò 1Aƒù` 1BEÔ Bû’   / P  Eðp ðFP   bp  T`  ðLMT +05 +07 +06 
<+06>-6
TZif28  @     & 3 �      j@­ŠD  ºgGˆ  k¼F  ix¨ Bp€ 
œ q730 +08š O8>-8š D’ @&º( @Cçë0 @‡�¼º 1ÊÛŒ @Ìq @Ì•2¨ áÒt˜  Rï RÐÇ €KF   MXo@[hÓ  HMT MMT IS{ß630 
IST-5:30Ü DTB   à@¡Ûù ´ 0µ£ÅoP 'Sp	 @‡à 1†0@ù»` 1éº  1Úî  1Ì? 1¼L 1¬= 1œ. 1Œ 1| 1 l 1![ò 1"Kã 1#;Ô 1$+Å 1%¶ 1&§ 1'ÓP1'ôÄ 1(äÃ 2)xk !Ô¦ 1*Ä— 1+´ˆ 1,¤y 1-”j 1.„[ 1/tL 10d= 11]hh 12rC 13=J 14R% 15, 262 !ý 18$@ 18Üð 19û 1:¼Ò 1;Úè 1<¥ï 1=ºÊ 1>…Ñ 1?š¬ 1@e³ 1AƒÈ8 1BE• 1Ccª 1D%w 1ECŒ 1FY 1G#n 1Gîu 2IP !ÎW 1Jã2 1K®9 1LÌO8 1MŽ 0TKÉ×O VöÎPe ya  j& p€ï Œ ^ ~�ï ~�  Œ  õ Â +1Ê9ÊO9>-9îD3îæ@†Óç(ï 1Üþ @éÈ€ Î"È 1¬!Þ1œ 1Œ 1{æ 1 kå 1![È 1"KÇ 1#;ª 1$+© 1%Œ 1&‹ 1'¨>1'ô§^1(äŠ 1)Ô‰ 1*Äl 1+´k 1,¤N 1-”M 1.„0 1/t/ 10d 11]L` 12M/p 13=. 14- 15 ð6ó`    :é¥�    À;´ž€    <¤�� 1=”€ 1>„ 1?tb 1@da 1ATD 1BDC 1C4& 1D$% 0ECG P Gïªð	 @Uš  AVap !õ| �WåCp �  kXG ðbp   p€   ~�   Œ  ðLMT +07 +08 +09 +10 
<+08>-8
TZif2B  @     & 3 ð      ÿÿÿÿ~6C) @ —¢€ @¡yð 1ÈY^ @É	ùp @ÉÓ½  1ËŠ  1Ë|@ 1Ò;> 1Ó‹{0 1ÔB­ 1ÕE"  1ÖL¿ 1×<¿ 1ØfP 1Ùò0 1ÙA|{@ºR À 1i››1 ~„{1!I} 1"g¡  1#)_ 1$Gƒ @%|8 1&'e 1&ò^ 1(G o(Ò@ @  q×A 3~�¥ “ÏCDT CST 
CST‰ÿÐ�      â@V¶™$ @‡�½ @ËZ( @Ì•+  @Òu€81@1¦ ( 12q jðD?ê(  JÜ  Jäú MXú T`  [h €   T` mMp530 +06 3Ÿ530>-5:30	D ó A   ç @i††¼ß @ÊÛ†° 1Ìq@Ì•2¨ AÝ¨Ò˜Ó !;Äað K<Ø�  TÄ  RÐî  [hî AMX â p  bpè Hè 6è î 7ðO6>-6ç DcðÇ @¡ò«x 1¢�/€1£^��1¤a 1¥> 1¦@ó 1§a 1¨ Õ 1©}Ð1ñ�RÐ1ò[œ  1ós(  1ô;~ 1õU­ 1öT0 1÷6á0 1÷ÿ6 1ùÚ 1ùá» 1úùH 1ûÂï@ 1üÛÍ 1ý¥t 1þ½ P 1ÿ†§00 ž4sA gÛ«1gÛ1I  1aì 1+“ !C¥A Ç0 1$S  1íú  1
‡P 1
Ï.  1è 1±³ 1É?0 1kY0 1ªs  1L�  1ôÅ 1Ûm 1×J 1½ò 1U# 1Šå 1 Gz 1!‰P 1"<t 1#kž 1$2¿p Ð%%Ep    &D€ €   ''p  0ö[à @(ç�P @)â` 1*Ê 1+²+ @,£_Ð 1-›G0 1.Œ|  1/|{  10m¯  11_  12P4 13>â 141h0 15Ä 16›  17šP 17óÏ  18å 19ÖT 1:ÆS0 1;·‡0 1<§†  1=˜»  1>ˆº  1?yî  1@k? 1A\s 1BLr0 1C=§0 1D-¦  1Eý 1F6  1G*> "Gõp 1Iq@ 1IËú  1Jê  1Kµ@ 1LÉä 1M”ù oN©ÆP N@  "‡ð*0    	LMT EES €T 
EET-2 Ò,M3.5.5/0,M10
 `
TZif2>  @     & 3 ð      ÿÿÿÿi††¼ @ÊÛ†° AÌq 0•2¨ @Ý¨Ò˜X @J;Ä ð K<Ø�  TÄ ðRÐ   [h   MX   T`   bpí ÑHMT +0630 +05 ï6 +07 
<+06>-6ç D�      Ç @’æÄ @Ë™2ð´ 1ê0N@9Ã™ @  u¼  p€Ì @~� º q+08 +09ª O9>-9ª D ¼P   ¢ �¡ò™¨  3Ø� B8@ ‰ 4… O4>-4… D�      … @ªƒ€ @µ£ï0ˆ @'}  1²@±  @ùå� 1éä  1Û  1Ìi @¼vÀ  1¬g 1œX 1ŒI 1|: 1 l+ 1!\ 1"L 1#;þ 1$+ï 1%à 1&Ñ @'ý@` 1'ôî (Ê�P  `  @€,  FPãAbp© "f5™1+06nO5>-5nD0V  †   f@¥w,š 1	í¯»1
Ý’Ë1úd 1¾Æ»1¤9»1Šá  "„û1uO 1cý  1Sà0 1M@ 13Â 1#Á  1¤ 1£ 1ó† 1ã… "Óû1Ãg 1¼„` 1¬ƒP 1œf 1Œe 1|H " lk1!\* 1"L)  1#< 1$, "%û1&í 1'€ 1'õ
p 1(äí 1)Ôì "*Äk1+´Î 1,¤±  1-”° 1.„“ 1/t’ 10du 11]®` 12M‘€ 13=� "4-k"5k162x¶16ý 18”Ö18Ýa 19ûv 1:½C 1;ÛX 1<¦_ 1=»: 1>†A 1?› 1@f# 1A„98 1BF 1Cd 1D%ç 1ECý 1FÉ ðG#ß    Gîæ    I‘Á    IÎÈ 1Jã£ 1K®ª @LÌ¿�  1MŽŒ 1N¬¡ 1Onn 1PŒƒ 1QWŠ 1Rle 1S7l 1TLG 1UN 2V,) !÷0 @WÐÐ` oYõ( ?`  Ôb ð*0    	  *0 LMT EES ÀT +03 
EET-2 Ñ,M3.5.0/3,M10
 p4
TZif3H  @     & 3 ðs      ÿÿÿÿ}½J° AÈYÏ  !ú¦ @É8œ€ 1Ìåë 1Í¬þ 1ÎÇ 1Ï�ƒ 1Ð©¤ 1Ñ„} 1ÒŠ×0 1Óe° 1Ôl @è6c`P @èô-P 1ê¹ @êÕ`Ð @ëìúð 1ìµm0 1íÏ 1î—ò @ï°³p  1ðy%X 1ñ‘æ  1òZY  1ós  1ô;Œ  1õUŸ 1ö 1÷6Ò0 1÷ÿE0 1ù  1ùáÊ 1úù9  @û'BPHA|‹à !ý°,@	öê` 1
¦3 1éü 1![ 1úÆ 1Žn 1¾ø@ 1w|0 1Ìÿ 1`™` 1 ‚± 1!Iµ  1"^ž0 1# ]  1$Z0  1% ? 1&í  1&Öæ0 1'ëÏ 1(À  1)Ôì0 1*©  1+»e  1,‰ 1-›G 1._©0 1/{) 10HÅ  10ç 11dFH 12AÂ 13D( 14!¤ 15$
 16† 17a 18DX 18ÿ}H 19ï`X 1:ß_ 1;ÏB 1<¿A 1=¯$ 1>Ÿ# 1?� 1@ 1A\� 1B^ç @CA·ð€1D-¦p 1Eýp 1FÙ  @Fèop  1Gì 1H·P 1IËú 1J <8 @K­.œ( 1La½  1M”ù 1N5ÂP 1OtÛ( 1P[‘8 1QT½ 1RD   1S4Ÿ 1TIl 1UÒ( 1V)\ 1VõÂ¨ 1XÊ 1XÕ¤ 1Yó¬ 1Zµ† 1[ÓŽ 1\�C@ 1]³bP O^~w`’/ 
A " 1    
±!½·{IDT IST»a4.4/48¼ 9½2k  ¹   &  ½3 �      @~6C) 1 —¢å1¡yÅ1ÈY^ 1É	ùå1ÉÓ½å1ËŠ  1Ë|@ 1Ò;> 1Ó‹{0 1ÔB­ 1ÕE"  1ÖL¿ 1×<¿ 1ØfP 1Ùò0 1ÙA|Í@ºR À 1i›a@ ~„  1!I} 1"g¡  1#)_ 1$Gƒ 1%|Ñ1&'e 1&ò^ 1(G ?(Ò@¡@  q×i  ~�h@p€ «PCDT C¢QCST-8‰F?uF‰F	ÀÿÿÿÿÍ¬þ ÿÿÿÿ±ÎÇ ÿÿÿÿÏ�ƒ 1Ð©¤ 1Ñ„} @ÒŠ×€  1Óe° 1Ôl @è6c` @èô-P 1ê¹ @êÕ`Ð @ëìúð 1ìµm0 1íÏ 1î—ò @ï°³p  1ðy%X 1ñ‘æ  1òZY  1ós  1ô;Œ  1õUŸ 1ö 1÷6Ò0 1÷ÿE0 1ù  1ùáÊ 1úù9  Áû'BP    |‹à 0ý°Ð @	öê` 1
¦3 1éü 1![ 1úÆ 1Žn 1¾ø@ 1w|0 1Ìÿ 1`™` 1 ‚± 1!Iµ  1"^ž0 1# ]  1$Z0  1% ? 1&í  1&Öæ0 1'ëÏ 1(À  1)Ôì0 1*©  1+»e  1,‰ 1-›G 1._©0 1/{) 10HÅ  10ç 11dFH 12AÂ 13D( 14!¤ 15$
 16† 17a 18DX 18ÿ}H 19ï`X 1:ß_ 1;ÏB 1<¿A 1=¯$ 1>Ÿ# 1?� 1@ 1A\� 1B^ç @CA·ð€1D-¦p 1Eýp 1FÙ  @Fèop  1Gì 1H»  1IËú 1J <8 1K«Ü 1La½p @M”ùœ8 1N5Â0 1N\  1N„Ü 1OtÛ8 1P[‘ 1QT½ 1RD   1S4Ÿ 1TIl 1UÒ( 1V)\ 1VõÂ¸ 1XÊ 1XÕ¤ 1Yó¬ 1Zµ† 1[ÓŽ 1\�C@ 1]³bP o^~w` / 
?   @   çñ*0    	  *0 €LMT EES ðT IDT IST 
EET-2 â,M3.4.4/48,M10 p9
TZif2T  @     & 3 �	      1ˆŒCï@‘£+
 1Í5æ 1ÑYÎï1Ò;>ç@Õ2»  1ä¶ä  0í/˜o ñ 
=Ç   d €cö   bp‘p€   ~� Pÿ+07 +08 +09 
<+07>-7ì DEì ¼ @…ic� AÊM10 !Û“ @ËKqx 1Ò Þ  "Ók“@Ô“X¸ @ÕB°8 1Ös: 1×>A 2Ø.2 !ù9 2Ú !Ù 1Ûíö 1Ü¸ý 1ÝÍØ 1Þ¢P 1ß¶õ 1à�ü @á–É(h 1âOi 1ãv« 1ä/K @å_Ç¨  1æ- 1ç?© 1çøIX 1é‹ 1éØ+ 1êÿm 1ë¸ 1ìßO 1í—ï 1îÈl` 1ïwÑ 1ð¨N 1ñW³ 1òˆ0 1ó@Ðp 1ôh 1õ ² 1öGô 1÷%~ 1øa 1ù` 1ùõC 1úåB 1ûÞ_€ 1üÎ^` 1ý¾A 1þ®@ Aÿž#¨@0Ž"¸ 1~ 1n 1]ç 1Mæ @G(( @78 1&æ 1ƒ= 1	È 1	öÇ 1
æª 1Ö© 1ÆŒ 1›9 @ol¨Ì>ÿ À  k
    p€ À  ~�  wˆ € LMT HK S ÿWT JST 
HKT-8
TZif2  @     ) 3  R Ð   ÿÿÿÿ†Óü”8 @ê  @éÖ� 0Û A Ì[ @¼>€ 1¬= 1œ  1Œ 1| 1 l 1![ä 1"Kã 1#;Æ 1$+Å 1%¨ 1&§ 0'Å_ P 'ôÄ	 0(ä§ A )Ô¦ 1*Ä‰ 1+´ˆ 1,¤k 1-”j 1.„M 1/tL 10d/ 11]h` 12MKp 13=J 14-- 15, 16 @:éÁ°9 1;´º1<¤¹ 1=”œ 1>„› 1?t~ 1@d} 1AT` 1BD_ 1C4B 1D$A @E_ X 1U¨ 1Vop 1VõŠ WåQ€ @  UìV €T`   p€\@bp Vÿ+06 +08 +07 
<+07>-7RD�B      R@V¶‚? @¢¿ 1µ£Ó’1'aò @•ð´ 0• P ùÉp	 1éÈ  1Úü  1ÌM 1¼ZJ1¬K 1œ< 1Œ- 1| 1 l 1!\  1"Kñ 1#;â 1$+Ó 1%Ä 1&µ 1'áš1'ôÒ @(äÑ0� 2)xy !Ô´ 1*Ä¥ 1+´– 1,¤‡ 1-”x 1.„i 1/tZ 10dK 11]vh 12rQ 13=X 14R3 15: 262 !ý 182@ 18Üþ 19û 1:¼à 1;Úö 1<¥ý 1=ºØ 1>…ß 1?šº 1@eÁ 1AƒÖ8 1BE£ 1Cc¸ 1D%… 1ECš 1Fg 1G#| 1Gîƒ 2I^ !Îe 1Jã@ 1K®G 1LÌ]8 1MŽ) �TK×   + `  aÁŽ aÁâ@bp 8 î     ô1IMTð1+09ü ø/8>JF�s      è@V¶ÈØ @�‹õ˜ A›` 0Õ¾Ð @¢ecà @£{‚P 1¤N€  1¥?´  1¦%'  1§' 1ª((  1ªáý 1«ù‰  1¬Ã1@ 1È�? 1É 1ÉJõ0 1ÊÎ€ 1ËË® 1Òk	 1Ó¢9 1ÔC 1ÕL@ 1Ö){` 1×+ï 1Ø	] 1Ù—0 1Ùé? 1Úë³  1ÛÒ\@ 1ÜÔÐ  1Ý²> 1ñô¹ 1ôbï 1õh @ö8ÐÂ1n“è29š  ûu A 	| 1	ÐË 1
ù^ 1±þ 1Ù@ 1¤U 1¦­ 1„7 @øP9 1‰° @Ü°à 1æÐH1Æï 1›1  1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 1%
 1&û 1''P 1'õ 1(å	 1)Ôú 1*Äë À+´Üp    ,¤Íp€    -‹ƒð @.„¯p 1/t  10d‘ 11]¼  12r— 13=ž 14Ry 15€ 262[ !ýb 18x@ 18ÝD 19ûZ 1:½& 1;Û< 1<¦C 1=» 1>†% 1?›  1@f 1A„8 1BEé 1Ccþ 1D%Ë 1ECà @FÉ�È AG#ß !îæ 2IÁ !ÎÈ 1Jã£ 1K®ª 1LÌ¿8 1M�Ý 1N¬¡ 1Onn  1PŒƒ 1QWŠ 1Rle 1S8¾  1TLG 1UN 2V>ž !÷0 WÏ.P ?/ , P  (ðh   *0     ð   8@LMT IMT EES ð	T +03 +04 
<+03>-3
TZif2G  @     & 3 ð       ÿÿÿÿ?fI` @©x…à 1ºÞ @Ë¿ƒˆ @ÒVîp @×<Æ @Úÿ&  ðôµ¾ˆ  d |  d í ðg    ix   ~�   p€   bp ó  BMê €720 +073 ÿ9 +08 WIB 
WIB-7ø D0      À @ºÁ˜ @ÐX¹ð °ôµ¢h  ƒèË  ~�+  …˜Ë @~� ¹  +0© p930 WIT« 1T-9« 32   Ÿ   &  £3 �d      › @V¶Âú 1ž0E“1ÈYÏƒ1Èú¦ @É8œ€  1Ìåë 1Í¬þ 1ÎÇ 1Ï�ƒ 1Ð©¤ 1Ñ„} 1ÒŠ×0 1Óe° 1Ôl 1×Z0 1×ßX 1Ø/Ã 1Ùc 2Ú÷ !ëÐ 1Û´4 1Ü¹= 1Ýà� 1Þ´Î8 1ß¤¿ 1à‹v "áV€ 1â¾f 1ã6_ 1äžH 1åA 1ætð 1çÒ 2è&­  èzGP |‹à	 @ý°Ð @	öê` 1
¦3 1éü 1![ 1úÆ 1Žn 1¾ø@ 1w|0 1Ìÿ @`™PH 1 ‚± 1!Iµ  1"^ž0 1# ]  1$Z0  1% ? 1&í  1&Öæ0 1'ëÏ 1(À  1)Ôì0 1*©  1+»e  1,‰ 1-›G 1._©0 1/{) 10HÅ  11H– 12<n  131³P 14þ  15• 15ñ¦  @7€È 17Ï«18ö_ 19ÜùH 1:Ðí ";® "<£ƒ1= ²H 1>ƒ‚  1?|Ÿ0 1@s6 1AP¤  0BL�_ A CHO 1D,q 2Eö!S 1Fìc 1Gì5 1Hçõ0 1IÌ 1J¾œ  1K«ù 1LŒ	 1M•° 1N‡›0 1Ot÷ 1P^B  JQTÙ€Ûè¹ @  !™   øÌÆJÊðDT IST IDDT 
IST-2IDT,M3.4.4/26,M10.5.0
TZOif2  @     ) /TZ3 ð      ÿÿÿÿi†š   Ðù×@  @àF ð8@   ?H LMT +04 ÿ30 
<+0430>-4:30
l  M  ›     3 �@      — @§R–Ä @µ£šÐ@ 0')  P ]° A\À 0ù‘0 1é�  1ÚÄ  1Ì @¼"`  1¬ 1œ 1‹õ 1{æ 1 k× 1![È 1"K¹ 1#;ª 1$+› 1%Œ 1&} 1'¨91'ô™ @(ä˜ðp 2)x@ !Ô{ 1*Äl 1+´] 1,¤N 1-”? 1.„0 1/t! 10d 11]>h 12r 13=  14Qû 15 261Ý !üä 18ù@ 18ÜÆ 19úÛ 1:¼¨ 1;Ú½ 1<¥Ä 1=ºŸ 1>…¦ 1?š� 1@eˆ 1Aƒž8 1BEj 1Cc€ 1D%L 1ECb 1F. 1G#D 1GîK 2I& !Î- 1Jã 1K® 1LÌ20M�ÿp   + p  ”¼„ š°Í ¶Ð  ¨À  !Ù 11 +13 +12Ûo12>-12×D�      Ï@‰~ü¤ @Ì•2¨ @Òt˜ @Ý¨à¨³ 1O«Ï1<¯EÇ@=Ÿ(  1HA  1IG 1IäÝ ¡Jì{  @  >Ü/  MXú ñ[h
  FP   T`  �0530 +06 ÿ5 PKST PKT 
PKT-5
D  „ò �°þºd  R° BT` ˜ 6�_06>-6… D �  f@¡ò}„€ @0¨ Oü >BPÜ 
” ,1545œ �545>-5:4&E¡ Ž�C      Ç@¡Ûäë 0µ£Å;P 'Sp	 1‡1†Ø1ù»è1éº  1Úî  1Ì? @¼L�8 1¬= 1œ. 1Œ 1| 1 l 1![ò 1"Kã 1#;Ô 1$+Å 1%¶ 1&§ @'Ó` 1'ôÄ @(äÃ  2)xk !Ô¦ 1*Ä— 1+´ˆ 1,¤y 1-”j 1.„[ 1/tL 10d= 11]hh 12rC 13=J 14R% 15, 262 !ý 18$@ ð8Üð�    9û    À:¼Ò�    ;Úè 1<¥ï 1=ºÊ 1>…Ñ 2?š¬ 0òäp( 0@e¥ P Aƒº€	 0BE‡ A Ccœ 1D%i 1EC~ 1FK 1G#` 1Gîg 2IB !ÎI 1Jã$ 1K®+ 1LÌA8 1MŽ @NnP TKÉ     + ) p  O ðp€   Œ   ~�  €  š°    ð LMT +08 +10 +09 +11 
<+09>-9
TZif2N  @     & 3 ð      ÿÿÿÿ&º( @Cçë0 @‡�¼º 1ÊÛŒ @Ìq @Ì•2¨ ð Òt˜  RØs  RÐë  KFÓ  MXë 1[hÙ  HMT MMT ISå ß630 
IST-5:30Ü D ÜP   ¬ @¡ùò @µ£á © 1'o›0¤ A £ƒ1ù×1éÖ  1Û  1Ì[ @¼h° 1¬Y 1œJ 1Œ; 1|, 1 l 1!\ 1"Kÿ 1#;ð 1$+á 1%Ò 1&Ã @'ï0` 1'ôà @(äß@ 2)x‡ !ÔÂ 1*Ä³ 1+´¤ 1,¤• 1-”† 1.„w 1/th 10dY 11]„h 12r_ 13=f 14RA 15H 262# !ý* 18@@ 18Ý 19û" 1:¼î 1;Û 1<¦ 1=ºæ 1>…í 1?šÈ 1@eÏ 1Aƒä8 1BE± 1CcÆ 1D%“ 1EC¨ 1Fu 1G#Š 1Gî‘ 2Il !Îs 1JãN 1K®U 1LÌk8 1MŽ7 OTKå ¼Ó × `  W� T`æ p€Ñ bpæ bpÑBp€ Å6É!07ÁO7>-7åD0  l   Ý@~6Uª @†ƒ…£ @ºgN� @À
ä` 1Ê³å @Ë‘_ @ÒHmðÐ @‘õÉ€  _V  a]ä  bp^  g Þ  g ê @ix Á€   p€ ð S¹`7 +072» 73 9 ÁO8>-8 DÁ™1­Šð @ºgGˆà A¿{'€ 0óP 1Á]¬ 1ÁÕ  @Ã>à  @Ã¶ÓÐ 1Å   1Å˜  1ÇG  1Çy:  1ÈãÌ 1É[¿ 1ÊÄÿ0 1Ë<ó0 1Ë‘X   Xm $gÞ ixZAu0
BNH"+0:8F8@L ,D  �Õ6´  +ÌB*0 • 3ÅO3>-3ÅÀ            PTZif2	  ðG      ÿÿÿÿ…i[Ž AËGuð 0òÊà @ÌûºP @ÍÓþ` @Î�¥Ð @Òazp 1Óxø 1ÔB­8 1ÕK« 1ÖtL 1×?S 2Ø/D !øú  2ÚÕ !ØÜ 1Ûí· 1Ü¸¾ 1ÝÎê0 1Þ¡Ú 1ß¶µ 1à�¼ 1á–— 1âO) 1ãvy 1ä/ 1å_–H 1æí @ç?©¨° @çøI¸ 1é‹ 1éØ+ 1êÿm 1ë¸ 1ìßO 1í—ï @îÈl(8 1ïwÑ 1ð¨N 1ñW³ 1òˆ0 @ó@Ð8( 1ôh 1õ ² 1öGô 1÷%~ @øS( 1ù` 1ùõ5 1úåB 1ûÞ_€ 1üÎ^` 1ý¾A 1þ®@ Aÿž#¨Û0Ž"¸ 1~ 1n 1]ç 1Mæ @G(( @78 1&æ 1ƒ= 1	È 1	öÇ 1
æª 1Ö© 1ÆŒ 1›9 Ïol¨ ,@  jr“ ðp€   Œ   ~�  ÿLMT CST +10 +09 CDT 
CST-8
ä X @      3 ÿÿÿ�B      ¶@ª6  @µ£¨àW@'7P @kÀ AjÐ 0ùŸ@ 1éž  1ÚÒ  1Ì# @¼0p  1¬! 1œ 1Œ 1{ô 1 kå 1![Ö 1"KÇ 1#;¸ 1$+© 1%š 1&‹ @'¶ð` 1'ô§ 0(ä§ B )xO !Ô‰ 1*Äz 1+´k 1,¤\ 1-”M 1.„> 1/t/ 10d  11]Lh 12r' 13=. 14R	 15 261ë !üò 18@ 18ÜÔ 19úé 1:¼¶ 1;ÚË 1<¥Ò 1=º­ 1>…´ 1?š� 1@e– ÐAƒ¬p    BExð ð    CcŽp    D%Zð 1ECp 1F< 1G#R 1GîY 2I4 !Î; 1Jã 1K® 1LÌ28 1M�ÿ @TK¬àX Wœ    + p  �`N ðŒ    ¨À  š°    ð LMT +10 +12 +11 
<+11>-11
TZif2?  @     & 3 ð      ÿÿÿÿ¡ò]� 1ºÕ @Ëˆ€ ±ÒVîp  o oðÁ €p€   ~�Á @p€ » M¿ Ð08 +09 WITA 
 /-8¾ D
¾ ¦ 1áÜ 1{?¾ 1Áœô¾ @Â0p  @Ëòç  1Ð©% 1âl9 1âÕ¢Ö @uF€6@fzðÖï1ÿÿ qf~�  ú  ô ÿPDT PST JST 
PSTî F ×P   Æ �¡ò™¨  3Ø³ @8@ ‹ 0+042_04>-4sD�1      … @¥w¸€ 1	í¯(@
Ý’Ð 1úd @¾ÆP 1¤9ú1Šá  1„ 1uO 1cý 1Sà0 1M@ 13Â 1#Á  1¤ 1£ 1ó† 1ã… 1Óh 1Ãg 1¼„` 1¬ƒP 1œf 1Œe 1|H 1 lG 1!\* 1"L) 1#< 1$, 1%î 1&í 1'p 1'õ
p 1(äí 1)Ôì 1*ÄÏ 1+´Î 1,¤± 1-”° 1.„“ 1/t’ 10du 11]®` 12M‘p 13=� 14-s 15r o62x @  H• *0Ì@  	;ð EEST EET 
EET-2 Ñ,M3.5.0/3,M10
 UE@È@ª À]@µ£á ¨ @'o� 0¤ P £	 1ù×°1éÖ  0Û A Ì[ @¼h° 1¬Y 1œJ 1Œ; 1|, 1 l 1!\ 1"Kÿ 1#;ð 1$+á 1%Ò 1&Ã @'ï0` 1'ôà 0(äßÈ B )x‡ !ÔÂ 1*Ä³ 1+´¤ 1,¤• 1-”† 1.„w 1/th 10dY 11]„h 12r_ 13=f 14RA 15H 262# !ý* 18@@ 18Ý 19û" 1:¼î 1;Û 1<¦ 1=ºæ 1>…í 1?šÈ 1@eÏ 1Aƒä8 1BE± 1CcÆ 1D%“ 1EC¨ 1Fu 1G#Š 1Gî‘ 2Il !Îs 1JãN 1K®U 1LÌy0@MŽEÀx<eÀ+ ð  QÀ    T`   p€  bp  ðLMT +06 +08 +07 
<+07>-7
TZif28  @     & 3 ðC      ÿÿÿÿ¡Û$ @µ£á @ @'o� 0¤ P £	 @ù×€ 1éÖ  0Û A Ì[ @¼h° 1¬Y 1œJ 1Œ; 1|, 1 l 1!\ 1"Kÿ 1#;ð 1$+á 1%Ò 1&Ã @'ï0` 1'ôà @(äß@ 2)x‡ !ÔÂ 1*Ä³ 2+´¤  þN' A ,¤£( 1-”” 1.„… 1/tv 10dg 11]’ª12rm 13=t 14RO 15V 2621 !ý8 18N@ 18Ý 19û0 1:¼ü 1;Û 1<¦ 1=ºô 1>…û 1?šÖ 1@eÝ 1Aƒò8 1BE¿ 1CcÔ 1D%¡ 1EC¶ 1Fƒ 1G#˜ 1GîŸ 2Iz !Î� 1Jã\ 1K®c 1LÌy8 1MŽE 1TKó0[W“ÌÀÁÑ / ñ M¼xñrUA   ñ2³@¶ñQ@'} ª 2²é!±	1ùåÙ1éä  1Û  1Ìi 1¼v91¬g 1œX 1ŒI 1|: 1 l+ 1!\ 1"L 1#;þ 1$+ï 1%à 1&Ñ 1'ý¡1'ôî @(äíP¨ 2)x• !ÔÐ 1*ÄÁ 1+´² éÿÊåá þ `  DÊ� FPÐ bpÐ T`Ð1T`Ö" Ö5Ò Þ ÖO6>-6ÖD�3      Ý@ª“Ü 1µ¤-1'‹F2ÀÝåóÍ1éò  1Û'  1Ìw @¼„Ðè 1¬u 1œf 1ŒW 1|H 1 l9 1!\* 1"L 1#< 1$+ý @%üàP 1&í @'` 1'õ
 1(äû 2)x£ !ÔÞÀ 1*ÄÝ 1+´Î 1,¤¿ 1-”° 1.„¡ 1/t’ 10dƒ 11]®h 12r‰ 13=� 14Rk 15r 262M !ýT 18j@ 18Ý6 19ûL 1:½ 1;Û. 1<¦5 À=»`    >†`€    ?šò` 1@eù ¨A„à     P  0$G ð*0   FP   T`    ð  8@ LMT +03 +05 +06 +04 
<+05>-5
TZif2H  @     & 3 ð      ÿÿÿÿV¶…Ä  ¢jgÄ  ^<F  ^<¸ @bp   B¤ 7˜ O7>-7˜ D�      � @‹ÿŽ  1ºß @Ëy¤ @ÒVîp 1×<Æ 1Úÿ&  @ôµ¾ˆº ð!Út€  f€  f€Î  ix†¡~�   p€  p  bp æ Pæ ÿ	30 +09 +08 WITA WIB 
WIB÷ F0  Ÿ �@‹×ñœß @’æø @Ò/apÃ 1UÎ ÐZìup  uä  wˆ= #~�Ü Ê ïKST JST 
KST-9®D	F@¡ò�0Ž @Š’ÀF 0P  8@œ "*0F Ú ê ÞO3>-3˜ D�3      ?@ªˆ\ @µ£ý@’ @'‹° @À  2± 0ùó  1éò  1Û' 1Ìw @¼„Ð  1¬u 1œf 1ŒW 1|H 1 l9 1!\* 1"L 1#< 1$+ý 1%î 1&ß 1'21'ôü 1(äû2)x£ !ÔÞ 1*ÄÏ 1+´À 1,¤± 1-”¢ 1.„“ 1/t„ 10du 11] h 12r{ 13=‚ 14R] 15d 262? !ýF 18\@ 18Ý( 19û> 1:½
 1;Û  1<¦' 1=» 1>†	 1?šä 1@eë NA„ ÐO [µ 	   P  ;¤QO ùcI gO6>-6gD4g/† g«•Ÿ1)ÔÐ'g± 0O\Ø oÓÀ" ð  =`    8@   FP   T`    ðLMT +04 +05 +06 
<+05>-5
TZif2>  @     & 3 0  Œ   ÿÿÿÿV¶‰Ñ @¡òsQ @Ëòü ÀÑšgð  Z/X  Z/4  [hÀ @~� ´ R¸ q630 +09¶ Ÿ630>-6:30» D æ P   £ �Õ6´  +Ì  @*0 ” 1+03Š O3>-3… D�	      … @ˆŒC€ @‘£+
 1Í5æ @ÑYÎp @Ò;>ð @Õ2» 1ä¶ä  0í/˜· ‘ 
=Ç 01  d  cömðbp 	  p€   ~� ß P u+07 +08vO7>-7ì D�B      ¼ @†ðÍ¸ @Ò0²ð¨ @'7P @kÀ AjÐ 0ùŸ@ 1éž  1ÚÒ  1Ì# @¼0p  1¬! 1œ 1Œ 1{ô 1 kå 1![Ö 1"KÇ 1#;¸ 1$+© 1%š 1&‹ 1'¶  1'ô§ 0(ä§o B )xO !Ô‰ 1*Äz 1+´k 1,¤\ 1-”M 1.„> 1/t/ 10d  11]Lh 12r' 13=. @4R€a 15 261ù !ý  08 A 8Üâ 19úø 1:¼Ä 1;ÚÚ 1<¥á 1=º¼ 1>…Ã 1?šž 1@e¥ 1Aƒº8 1BE‡ 1Ccœ 1D%i 1EC~ 1FK 1G#` 1Gîg 2IB !ÎI 1Jã$ 1K®+ 1LÌA8 1MŽ 1TKº SVö² â¸ % O p  …È_  ~�í€¨À  š° š° BŒ  îÐ9 +12 +11 +10Þo11>-11óDß¯@ª…7ó1µ£ýÓ@'‹°µ @À  2± 0ùó  1éò  1Û' 1Ìw 1¼„1¬u 1œf 1ŒW 1|H 1 l9 1!\* 1"L 1#< 1$+ý 1%î 1&ß 1'[1'ôü @(äíPW�ª@  >É¬ “s�Van@‹×ðxn@’æø 1ÒC'=1×e�M@×î�` 1Øøú @ÙÍ-à 1Ú×Š( 1Û­ 1Üæâ 1ÝŒñ 1âO) 1äk·X @åh8 1æbp @çLè 1è/p 1èçô  1êR 1êÇÖ 1ëï4 1ì§¸ 1íÏ ðî‡šhÿÿÿÿð5qx     ¡£`�    !ng 1"ƒB ƒ#NI� '  @  w9 ñwˆ   ~�   Œ  ð  …˜LMT KST JST KDT 
KST-9
TZif2<  @     & 3 ð      ÿÿÿÿ~6C) @ —¢€ @¡yð 1ÈY^ @É	ùp @ÉÓ½  1ËŠ  1Ë|@ 1Ò;> 1Ó‹{0 1ÔB­ 1ÕE"  1ÖL¿ 1×<¿ 1ØfP 1Ùò0 @ÙA|ð¸ @ºR  1i›W@ ~„  1!I} 1"g¡  1#)_ 1$Gƒ @%|( 1&'e 1&ò^ 1(G o(Ò@ @  q×A  ~�  p€ �ïCDT CST 
CST-8‰D    Y@~6S£ 1†ƒ… @ºgN� @À
ä` 1Ê³å @Ë‘_ 1ÒHm9ð‘õ  a]Ì  a]k bpk g k¡g    ix wê ê pSMT +07  20 3 Ï9 +08 
<+08> F�A      Ð @ª3ä @µ£¨àÄ @'7P @kÀ AjÐ 0ùŸ@ 1éž  1ÚÒ  1Ì# @¼0p  1¬! 1œ 1Œ 1{ô 1 kå 1![Ö 1"KÇ 1#;¸ 1$+© 1%š 1&‹ 1'¶x1'ô§ 0(ä§o B )xO !Ô‰ 1*Äz 1+´k 1,¤\ 1-”M 1.„> 1/t/ 10d  11]Lh 12r' 13=. 14R	 15 261ë !üò 18@ 18ÜÔ 19úé 1:¼¶ 1;ÚË 1<¥Ò 1=º­ 1>…´ 1?š� 1@e– 1Aƒ¬8 1BEx 1CcŽ 1D%Z 1ECp 1F< 1G#R 1GîY 2I4 !Î; 1Jã 1K® 1LÌ28 1M�ÿ TK¬à   + `  �† Œ €¨À  š°û š°"¨Àß°+10 +12 +11åo11>-11æD0)  � æ@tÎðæ1ÃUIÿ1ÒTY ?&!ç™_1Úÿ&_1ÛÈÍ_"ÜàX 1Ýª   1Þrs  1ßµd  1à|… 1á–—  1â]¸ˆ 1ãwË  1ä>ì  1å0  1æ!q 1ç¥ 1è¤0 1èóØ@ 1éãØ  1êÕ  1ëÅ  1ì¶?  1í÷ü  1î˜Ä 1ïÙ/  1ðyøþ0üV¸A íŠ @	Ý‰€ 1
Î½&1Û¡ �TÝp @  qèE  p€�z"~�n Ý n éåÀ              @      PTZif2	  ð      ÿÿÿÿªƒ	 @µ£ï03 @'}  @² A±  0ùå� 1éä  1Û  1Ìi @¼vÀ  1¬g 1œX 1ŒI 1|: 1 l+ 1!\ 1"L 1#;þ 1$+ï 1%à 1&Ñ @'ý@` 1'ôî (äíP  `  @÷, ðFP   bp  T`  ÿLMT +05 +07 +06 
<+05>-5
; V  j    3 �4      f@V¶º 1ªš @çÚPH 1'™æ 1Î†1Íæ @ú°  1ê   1Û5  1Ì… @¼’à  1¬ƒ 1œt 1Œe 1|V 1 lG 1!\8 1"L) 1#< 1$, 1%ü 1&í @'`` 1'õ
 @(å	p 1)ÔÞ¸ 1*ÄÁ¨ 1+´À 1,¤£ 1-”¢ 1.„… 1/tv 10dYÀ 11]’À 13=fà 14RA 15V 162# 16ý8 18@8 18Ý 19û" 1:¼ü 1;Û 1<¦h 1=ºæ 1>…û 1?šÈ 1@eÝ 1@ÝÇ` @A„ðÐ �BEép  !    p  )ÿ@  )ÿjð*0 	  FP  8@   p!TBu3y4uO4>-4uDÉum@šl}È @ÒÛÈ­ @»¢H 1t-"Ž]1í: 1Ug( @EJ¸( 17ì 1- 1( v 1(Û� 1)Ëœ 1*¾" 1+¬Ð` @,ŸV8@ 1-Ž  1.€‰  1/o7  10a½  11Pj  12Bð  132ï 14%u 15#0 16©0 16õV  17çÜ  18ÖŠ  19É  1:¹ 1;«• 1<šB0 1=ŒÈ0 1>{v  1?mü  1@\©  1AO/  1B?. 1C1´ 1GâÉ0 1HÕO0 1IÅN 1J·Ô 1K¦�0 1L™0 1M‡µ  1Nz;  1Ohè  1P[n  1QKm 1R=ó 1S,¡0 1T'0 1UÔ  1V Z  1Vï  1WáŽ  1XÑ� 1YÄ 1Z²À0 1[¥F0 1\“ô  1]†z  1^u'  1_g­  1`W¬ 1aJ2 1b8à0 1c+f0 1d  1e™  1eûG  1fíÍ  1gÝÌ 1hÐR 1i¾ÿ0 1j±…0 1k 3  1l’¹  1m�f  1nsì  1obš  1pU   1qE 1r7¥ 1s&R0 1tØ0 1u†  1uú  1vè¹  1wÛ?  1xË> 1y½Ä 1z¬r0 1{žø0 1|�¥  1}€+  1~nÙ  1a_  1€Q^ 1�Cä 1‚2‘0 1ƒ%0 1„Å  1…K  1…ôø  1†ç~  1‡×} 1ˆÊ 1‰¸±0 1Š«70 1‹™ä  1ŒŒj  1�{  1Žmž  1�]� 1�P# 1‘>Ð0 1’1V0 1“   ð”Š8    •7È    •°ó½¸    –ã¼È 1—ÖB @˜ÄðH @™·v8 1š¦#  1›˜©  1œ‡W  1�yÝ  1žiÜ 1Ÿ\b 1 K0 1¡=•0 1¢,C  1£É  1¤v  1¤ÿü  1¥ïû 1¦â� 1§Ñ/0 1¨Ãµ0 1©²b  1ª¤è  1«“–  1¬†  1­tÉ  1®gO  1¯WN 1°IÔ 1±8‚0 1²+0 1³µ  1´;  1´úé  1µío  1¶Ýn 1·Ïô 1¸¾¡0 1¹±'0 1ºŸÕ  1»’[  1¼�  1½sŽ  1¾c� 1¿V 1ÀDÁ0 1Á7G0 1Â%ô  1Ãz  1Ä(  1Äù®  1Åé­ 1ÆÜ3 1ÇÊà0 1È½f0 1É¬  1Êžš  1Ë�G  1ÌÍ  1ÍoÌ 1ÎbR 1ÏQ 0 1ÐC†0 1Ñ23  1Ò$¹  1Óg  1Ôí  1Ôõì 1Õèr 1Ö×0 1×É¥0 1Ø¸S  1ÙªÙ  1Ú™†  1ÛŒ  1Ü| 1Ýn‘ ¿Þ]?H ¯1  0õ ð"08   18   FP  8@   ?HLMT TMT +0330 +05 +04 Q30 
< ð>-3:30<+0430>,J79/24,J263/24
TZif3z @     & 3 ðd      ÿÿÿÿV¶Âú @ž0Eˆ AÈYÏ  !ú¦ @É8œ€ 1Ìåë 1Í¬þ 1ÎÇ 1Ï�ƒ 1Ð©¤ 1Ñ„} 1ÒŠ×0 1Óe° 1Ôl 1×Z0 1×ßX 1Ø/Ã 1Ùc 2Ú÷ !ëÐ 1Û´4 1Ü¹= 1Ýà� 1Þ´Î8 1ß¤¿ 1à‹v "áV€ 1â¾f 1ã6_ 1äžH 1åA 1ætð 1çÒ 2è&­  èzGP |‹à	 @ý°Ð @	öê` 1
¦3 1éü 1![ 1úÆ 1Žn 1¾ø@ 1w|0 1Ìÿ @`™PH 1 ‚± 1!Iµ  1"^ž0 1# ]  1$Z0  1% ? 1&í  1&Öæ0 1'ëÏ 1(À  1)Ôì0 1*©  1+»e  1,‰ 1-›G 1._©0 1/{) 10HÅ  11H– 12<n  131³P 14þ  15• 15ñ¦  @7€È @7Ïp 18ö_ 19ÜùH 1:Ðí ";® 1<£  1= ²H 1>ƒ‚ 1?|Ÿ0 1@s6 1AP¤  0BL�W A CHO 1D,q @Eöð	 0FS A Fìc 1Gì5 1Hçõ0 1IÌ 1J¾œ  1K«ù 1LŒ	 1M•° 1N‡›0 1Ot÷ 1P^B  wQTÙ€   6@  !™   øG *0    G A JMT IDT IS ñDT 
IST-2IDT,M3.4.4/26,M10.5.022P  ð           TZi?f2  
ð      ÿÿÿÿÕæt.  !aM¨  T ÿMX   T` 
LMT +0530 +06 
<+06>-6
TZig  H @      3 š ‡	44@eÂ¤p 2×> 0íYð 1Øøú 1ÙÍ; 2Û  !­ 1Üæâ cÝŒÿð 0  ƒ�° Œ   ~� sïJDT JST 
JST-9oD�C      ½ @¡åNÙ @µ£á ¯@'o� 0¤ P £	 @ù×€ 1éÖ  0Û A Ì[ @¼h° 1¬Y 1œJ 1Œ; 1|, 1 l 1!\ 1"Kÿ 1#;ð 1$+á 1%Ò 1&Ã @'ï0` 1'ôà @(äß@ 2)x‡ !ÔÂ 1*Ä³ 1+´¤ 1,¤• 1-”† 1.„w 1/th 10dY 11]„h 12r_ 13=f 14RA 15H 262# !ý* 18@@ 18Ý 19û" 1:¼î 1;Û 2<¦ !Îé 1=ºô¸ 1>…û 1?šÖ 1@eÝ @AƒòÀà 1BE¿ 1CcÔ 1D%¡ 1EC¶ 1Fƒ 1G#˜ 1GîŸ 2Iz !Î� 1Jã\ 1K®c 1LÌy8 1MŽE 1TKó  WIøÀ   < p  O§¿  T`R p€  bp   ë Xq+08 +07`O7>-7ñDñé@¡ò]� 1ºÕ @Ëˆ€ ÀÒVîp  oðº "oðº ! Ÿp  p€ º M º €9 WITA 
 /-8¾ D × Â ¯@†ÓîLž 1Üw1éÈ—1Úü¶ 1ÌM @¼0p( 1¬/ 1œ 1Œ 1{ô 1 kó 1![Ö 1"KÕ 1#;¸ 1$+· 1%š 1&™ 1'¶p 0'ô¶g A (ä˜ 1)Ô˜ 1*Äz 1+´z 1,¤\ 1-”\ 1.„> 1/t> 10d  11]Z` 12M=p 13=< 14- 15 16 @:é³ A 1;´¬1<¤« 1=”Ž 1>„� 1?tp 1@do 1ATR 1BDQ 1C44 1D$3 1EQ÷1Uš 1Vap 1Võ| OWåCp; O@  d4®  bp\ ~�3p€ `7 +09  p/8>RÀ            RTZif2    Ð   ÿÿÿÿ†ÓîL) @Ü� @éÈ€ @Úüð 1ÌM @¼0p 1¬/ 1œ 1Œ 1{ô 1 kó 1![Ö 1"KÕ 1#;¸ 1$+· 1%š 1&™ 1'¶p 0'ô¶g A (ä˜ 1)Ô˜ 1*Äz 1+´z 1,¤\ 1-”\ 1.„> 1/t> 10d  11]Z` 12M=p 13=< 14- 15 16 @:é³ A 1;´¬1<¤« 1=”Ž 1>„� 1?tp 1@do 1ATR 1BDQ 1C44 1D$3 @EQX 1Uš 1Vap 1Võ| WåCp @  d4V ÿbp   ~�  p€ LMT +07 +09 +08 
<+08>-8
 P @      3  + P   R‘°þºd  R= 2` � 6… O6>-6… DB� @   … @¡ÛÝº 0µ£Å‡ A 'So@kÀ AjÐ 0ùŸ@ @éžP 1ÚÒ  1Ì# ÷!@ ÷ ÷å ÷Ç ÷© ÷‹ ÷§¯0(ä§‡ B )xO !Ô‰ ÿk ÿM ÿ/ ÿLh 12r' 13=. 14R	 15 261ë !üò 18H 18ÜÔ 19úé 1:¼¶ 1;ÚË 1<¥Ò 1=º­ 1>…´ 1?š� 1@e– 1Aƒ¬8 1BEx 1CcŽ 1D%Z 1ECp 1F< 1G#R 1GîY 2I4 !Î; 1Jã 1K® 1LÌ28 1M�ÿ 1NmôØŽTKºð /  ' �  †F�"p€gà   š°   ¨À €  Œ   " ò8 11 +12 +10o10>-10D „P   û@V¶…Ä  ¢jgÄ  ^<Ã  ^<Ã @bp ¥ B(  O7>-7˜ DTA   r@§YG]˜ "µ£ò@'E`š 2y“0xà 1ù­ƒ1é¬  1Úà  1Ì1 1¼>º’  ’!| ’ä ’Æ ’¨ ’;’µÂ2)x] š‰¯  šk šM š/ š!r5x š!R š!1ù 16ý  18@ ð 8Üâ€    9úø    À :¼Ä€    ;ÚÚ A <¥á 1=º¼ 1>…Ã 1?šž 1@e¥ 1Aƒº8 1BE‡ 1Ccœ 1D%i 1EC~ 1FK 1G#` 1Gîg 2IB !ÎI 1Jã$ 1K®+ 1LÌA8 1MŽ TKºð   + `  {£V ð~�   š°  Œ     ð LMT +09 +11 +10 
<+10>-10
TZif2?  @     & 3  ç Ð   ÿÿÿÿ¡Ûê^ 0µ£Å? P 'Sp	 @‡à A†ð 0ù»` 1éº  1Úî  1Ì? @¼L�  1¬= 1œ. 1Œ 1| 1 l 1![ò 1"Kã 1#;Ô 1$+Å 1%¶ 1&§ @'Ó` 1'ôÄ @(äÃ  2)xk !Ô¦ 1*Ä— 1+´ˆ 1,¤y 1-”j 1.„[ 1/tL 10d= 11]hh 12rC 13=J 14R% 15, 262 !ý 18$@ 18Üð 19û 1:¼Ò 1;Úè 1<¥ï 1=ºÊ 1>…Ñ 1?š¬ 1@e³ 1AƒÈ8 1BE• 1Ccª 1D%w 1ECŒ 1FY 1G#n 1Gîu 2IP !ÎW 1Jã2 1K®9 1LÌO8 1MŽ OTKÉ Ïæ y¢� p€æ Œ æ ~�æ ~�æ$Œ æ8â î�
<+09>-9åD0  Œ   Ý@V¶‰Ñ @¡òsQ @Ëòü ÀÑšgð  Z/À  Z/4  [h   ~� šRž1630¤ ¶ �630>-6:3 E�B      £ @›_	' 0¡± Pÿµ£ý@« @'‹° 1À @¿0 @ùó  1éò  1Û'  1Ìw @¼„Ð  1¬u 1œf 1ŒW 1|H 1 l9 1!\* 1"L 1#< 1$+ý 1%î 1&ß @'P` 1'ôü 1(äû82)x£ !ÔÞ 1*ÄÏ 1+´À 1,¤± 1-”¢ 1.„“ 1/t„ 10du 11] h 12r{ 13=‚ 14R] 15d 262? !ýF 18\@ 18Ý( 19û> 1:½
 1;Û  1<¦' 1=» 1>†	 1?šä 1@eë 1A„ 8 1BEÍ 1Ccâ 1D%¯ 1ECÄ 1F‘ 1G#¦ 1Gî­ 2Iˆ !Î� 1Jãj 1K®q 1LÌ‡8 1MŽS �TL@   + `  8Ùž 4Áé 8@é T`£ðFP   FP  T` ûPû�4 +06 +05™_05>-5³À   TZif2      ð>      ÿÿÿÿªšH @çÚP2 @'™À @Î0 AÍ@ 0ú° 1ê   1Û5  1Ì… @¼’à  1¬ƒ 1œt 1Œe 1|V 1 lG 1!\8 1"L) 1#< 1$, 1%ü 1&í @'`` 1'õ
 @(å	p 1)Ôú 1*Äë 1+´Ü 1,¤Í 1-”¾ 1.„¯ 1/t  10d‘ 13=�` 14Rk 15r 262M !ýT 18jx 18Ý6 19ûL 1:½ 1;Û. 1<¦5 1=» 1>† 1?šò 1@eù 1A„8 1BEÛ 1Ccð 1D%½ 1ECÒ 1FŸ 1G#´ 1Gî» 2I– !Î� 1Jãx 1K® 1LÌ•8 1MŽa N¬w`  #   0 @  )¸rð*0   FP  8@  ðLMT +03 +05 +04 
<+04>-4
TZif28  @     & 3 �Š      ¼@^=� @’æª  1›K‰ 1›þã 1œ�	 1�ÉŸ 1žŽ 1ŸªÓ1 _p 1¡Œ 1¢Aõ 1£n‹ 1¤#)( 1¥O¿ 1ª 1ªô« 1­ÉÄ 1®§@ 1¯ k  1°‡" 1±‰ˆ 1²p> 1³r¤ 1´P  1·2h 2¸ä !ÿÕ 1¹ïÆ 1¼ÈÔ@ 1½¸Å 1¾Ÿ{ 1¿˜§ 1À› 1Áx‰ 1Âhz 1ÃXk 1Ä?!0 1Å8M 1Æ:³ 1ÇXÈ 1ÇÙû 2ÉK !ñ< 1Êâ( 2Ëµo 0ìÀ `2Ì€h Ü1Í•Q  @ÍÃg€  1Îr¿  1ÎÅÛH 1Ïu3  1Ï¬„ 2ÐR¡ !¥½  1ÑU  1ÑŒf 2Ò2ƒ …°1ÓYá  1ÔIÒ @Õ9í@h 1Ö)Þ 1×Ï 2Ø	À !ù± 1Ùé¢ 1Ü¹u @Ý² À8 1Þ¢‘ 1ß’‚ 1à‚s 1árd 1âbU 1ãRF 1äB7 1å2( 1æ" 1çEX 2è6 !û' 1éë 1êÛ	 1ëÊú 1ìºë 1íªÜ 1îšÍ 1ïŠ¾ 1ðz¯ 1ñj  1òcËh 1óS¼ 1ôC­ 1õ3ž 1ö#� 1÷€ 2øq !ób”@›)P1‹ @„E� 1t6 1d' @T&  1D	 14 1#ù 1ê 2Û !óÌ 1ãË1Ó® 1ÃŸ @¼Ë P 1¬¼ 1œ­ 1Œž 1|� 1 l€ 1!\q 1"Lb 1#<S 1$,D 1%5 1&& 1'Qh 1'õB 1(å3 1)Õ$ 1*Å 1+´øÐ 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ O1]Ù$ H B: /   ðÿÿçð  ÿÿå( ÿÿñðÿÿãàp@     f  |ðHMT -01 -02 +00 WñET 
<-01>1<+00>,M3.5.0/0,M10
 �1
TZif2  @     ) 3 ð_      ÿÿÿÿi‡F 1œÌ® @�·K6 @ž¸mÆ 1Ÿ„¸ @´Ãæ @Ëb¦à @ÌÓ¼Ð 1ÍžÑ 1ÎÆ @Ïuy` @Ð¯0P 1ÑU[ 1Ò� 1Õqh 1Ö<0 1×Z„@ 1×ää  1Ù:f 1ÙÄÆ 1Û#ƒ0 1Û¤¨ 1Ýe 1Ý„Š 1ÞãG 1ßm¦P 1æl	@ @ç7Ð@ ³` @	–P 1
 • 1
ðx 1àw 1Ù”0 1ÀY 1¹v @©uà8 1™X 1‰W 1y: 1i9 1Y 1I 18þ 1(ý 1"p 1ß 1ý 1ñüp 1áß 1ÑÞ 1ÁÁ 1±À 1¡£ 1 uò@ 1!�… 1"UÔ 1#j¡p 1$5¶ 1%Jƒ 1&˜ 1'*e 1'þµP 1)
G 1)Þ— 1*ê) 1+¾y 1,ÓF` 1-ž[ 1.³( 1/~= 10“
 11gY` 12rì 13G; 14RÎ 15' 162° 17ÿ 18Ìp 18æá 19û® 1:ÆÃ 1;Û� 1<¯àp 1=»r 1>�Â 1?›T 1@o¤ 1A„q` 1BO† 1CdS 1D/h 1ED5 ¿Eóšà EÁÿÿÃ:  ÿÿÑJ ðÿÿÕÐÿÿÇÀ LMT BST BMT ADT AST 
AST4ADT 2._1.1.0 D�#       @¦\ð @ÔA÷ è0M6 P 3ú�	 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ @¼½@ 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ 1]Ù @ÿÿñ�ä!ñðK�    Þ -01 WET WEÛ@WET0
  Ü à1àÞD Ú  Ö@’æª  @Ì•œ  1Òt|>À÷@ÿÿéôÇ  ãà ÿÿñð " Ç  2 Ë ¥¯ D uP   Ÿ @‹m¤X5uÆÀ„Ë�    /t¼� ÿ   0d­�    1]Ù @ÿÿù¨, ð     LMT WE ð
ST 
WET0WEST,M3.5.0/1,M10
 c
TZif2;  @     # 3 ð       ÿÿÿÿ‹m¤X8 1#ëÑ 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ @¼½@ 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ ¹©:¹@rî$lÁA›'ã  0Ô{` 1È·M @ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‚% 1Ñr 1Òb 1ë¯ 0 1ì¨L 1í˜= 1îˆ. 1ïx 1ðh 1ñX 1òGò 1ó7ã 1ô'Ô 1õÅ 1öðX 1÷/ 1÷ðÒ‘1MDé13ú ‰áA_A  
! \  	\ð CEST CET 
CET-1 ][//3]D�Š      t@^=X 1’æœü@›K{€ 1›þÕ 1œœû 1�É‘ 1ž€ 1ŸªÅÔ1 _b 1¡‹ø 1¢Aç 1£n} 1¤#( 1¥O± 1ªý 1ªô� 1­É¶ 1®§2 1¯ ]  1°‡ 1±‰z 1²p0 1³r– 1´P 1·2Z 2¸Ö !ÿÇ 1¹ï¸ 1¼ÈÆ@ 1½¸· 1¾Ÿm 1¿˜™ 1Àšÿ 1Áx{ 1Âhl 1ÃX] 1Ä?0 1Å8? 1Æ:¥ 1ÇXº 1ÇÙí 2É= !ñ. 1Êâq( 2Ëµa 0ì±ðX2Ì€Y Ü1Í•C  @ÍÃYp  1Îr°  1ÎÅÍH 1Ïu%  1Ï¬u 2ÐR’ !¥¯  1ÑU  1ÑŒW 2Ò2t …°1ÓYÓ  1ÔIÄ @Õ9ß0h 1Ö)Ð 1×Á 2Ø	² !ù£ 1Ùé” 1Ü¹g @Ý²’°8 1Þ¢ƒ 1ß’t 1à‚e 1árV 1âbG 1ãR8 1äB) 1å2 1æ" 1ç7X 2è( !û 1éë
 1êÚû 1ëÊì 1ìºÝ 1íªÎ 1îš¿ 1ïŠ° ð ðz¡0ÿÿÿÿñj’0ÿÿÿÁÿòc½°ÿÿÿÿóS® 1ôCŸ 1õ3� 1ö#� 1÷r 2øc  óT°    › A ‹ @„7€	 1t( 1d @T� 1Cû 13ú 1#ë 1Ü 2Í !ó¾ @ã½ 8 1Ó  1Ã‘ @¼½ 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ 1]Ù H : / aÿÿð(   Náÿÿñð     ð LMT FMT +00 -01 +01 WEST WET 
WET0 Ð,M3.5.0/1,M10
 a
TZif2C  
@     % 3 @D   ± »@‹`ƒ  @œ‘  @�Ñˆ� @žrQ€ 1ŸÕ( 1 S…  1¡¶6  1¤<'  1¤¹t  1ÆM  @Ç=' 8 1ÇÚë1É&C` 1ÉÃ& 1Ë% 1Ë¬B 1ÌÜÍ 1ÍŒ$ 1Î¼¯ 1Ïl 1Ðœ‘ 1ÑKè 1Ò…­ 1Ó+Ê 1Ôe� 1Õ9Ñ( 1ÖEq 1×³ 1Ø%S 1Øù• 2Úp !Ùw 1Ûå  1Ü¹Y 1ÝÎ4 1Þ¢u 1ß® 1à‚W 1á�ø 1âb9 1ãmÚ 1äB 1åM¼ 1æ!ý 1ç6Ø 1è 1éº 1éêü 1êöœ 1ëÊÞ 1ìÖ~ 1íªÀ 1î¶` 1ïŠ¢ "ð–81ñj„ 1ò_ 1óS ( 1ô_A 1õ3‚ 1ö?# 1÷d 1ø 1øóF 1ùþç 1úÓ( 1ûè oü¼E  .Pÿÿë`˜A   ŸGMT 
GMT0ñD P   ™�i†ýÀÿÿÝÀ»@ãà Š ¿-02 
<-02>2„ Q‘’æ’Hÿÿü8 „ M‘F      0‡¼ @“D_< @ÃOZÀ @Ä60 1Å/< 1Æå @ÇY@ 1Çÿ×1Èø; 1ÉÞã 1ÊØ 1Ë¾Å 1Ì·ÿ @Í6�0å Aþ@ !Ó¼ú@ñÄ  1ªd  1Ñ¦ 1ŠF 1¨[( 1j68 1 ˆ= 1!J 1"h 1#)ú 1$H 1%	Ü 1&1H 1&é¾ 1(  @(ÒÚÀx 1)ðâ 1*²¼ 1+ÐÄ 1,’ž 1-°¦ 1.r€ 1/�ˆ Ð0RbÀ    1y¤° ð    2;@    3Y†° 14a 159h 15ûC 17J 17Û% 18ù, 19» @:Ù*Ð@ @;‘Êà @<ÂGP 1=q¬ 1>¢) @?ZÉ` 1@‚ 1A:« 1Baí 1C� 1DAÏ 1Dúo 1F!± 1FÚQ 1H
Íp 1HÃm` 1Iê¯ 1J£O 1KÊ‘ wLƒ1à X  qÿÿÉÄ   ðÿÿÕÐÿÿÇÀ ÿÿãà ð LMT SMT -03 -04 -02 
<-03>3
TZif2û  @     & 3 ðS      ÿÿÿÿs< AœNÂ€ 0¼/  2ËT³ !Çe 1Ì·V 1Í§G 1Î s  @Ï‡)€x 1p9 0 A P 1ö8 2/ý !Ö 2	ß !µü 1
ïÁ 1Ÿ@ 1ØÞ 1~û 1¸À 1^Ý 1˜¢ 1>¿ 1x„ 1¡ 2Xf !þƒ 18H 1‰h 2!d !Ç� 2F !§c 1á( 1‡E 1Á
 1yœ 1—²P 1 Y~ 1!€Î 1"B› 1#ië 1$"} 2%IÍ !ïê 2')¯ !ÏÌ 2)	‘ !¯® 1*és 1+˜ÊX 1,Ò� 1-x¬ 1.²q 1/XŽ 10’S 11]Z 12r5 13=< 14R 15 261ù !ý  18p 18Üâ 19§é 1:¼Ä 1;ÚÚ  1<¥á 1=º¼ 1>…Ã 1?šž 1@e¥ 1Aƒº8 1BE‡ "Cc81D.£ "EC81FK  1G#` oG÷¢  >@  �Äh  š°  Œ  	x°AEDT AEST 
 0-10 °,M10.1.0,M4 /ˆEVT   ˆ ‹x@{p AœNÉˆ 0¼6 2ËTº !Çl 1Ì·] 1Í§N 1Î z  @Ï‡0ˆé 1p@ @# 1P" 1ö? 20 !Ö! 2	æ !¶ 1
ïÈ 1Ÿ @ 1Øå 1 1¸Ç 1^ä 1˜© 1>Æ 1x‹ 1¨ 2Xm !þŠ 28O !ç¦h 2!k !Çˆ 2M !§j 1á/ 1‡L 1Á 1y£ 1—¹P 1 Y… 1!€Õ 1"B¢ 1#iò 1$"„ 1%IÔ 1&f 2')¶ !ÏÓ 2)	˜ !ËdH 1*éz 1+˜Ñ 1,Ò– 1-‹( 1.²x 1/tE( 10’Z 11]a 12r< 13=C 14R 15% 262  !ý 18H 18Üé 19úÿ 1:¼Ë 1;Úá 1<¥è 1=ºÃ 1>…Ê 1?š¥ 1@e¬ 1AƒÁ8 1BEŽ "Cc81D.ª "EC81FR  1G#g ðG÷©/ 3ð  �ì    ~�   “¨	  …˜ LMT ACS @DT 
 ð-9:30ACDT,M10.1.0,M4 €/3
TZif2G  @     & 3 ð      ÿÿÿÿríŸ AœNÂ€ 0¼/  2ËT³ !Çe 1Ì·V 1Í§G 1Î s  @Ï‡)€x 1p9 0 B %IÍ !ïê 2')¯ !ÏÌ 2)	‘ [¯®  @  �x ¡š°  Œ  	8pEDT AES8oEST-10!D�U      	@sˆd @v¥à @{p AœNÉˆ !¼6A2ËTº !Çl 1Ì·] 1Í§N 1Î z  @Ï‡0ˆÜ 1p@ @# 1P" 1ö? 20 !Ö! 2	æ !¶ 1
ïÈ 1Ÿ @ 1Øå 1 1¸Ç 1^ä 1˜© 1>Æ 1x‹ 1¨ 2Xm !þŠ 18O 1�h 2!k !Çˆ 2M !§j 1á/ 1‡L 1Á 1y£ 1—¹P 1 Y… 1!€Õ 1"B¢ 1#iò 1$"„ 2%IÔ !ïñ 2')¶ !ÏÓ 2)	˜ !¯µ 1*éz 1+˜ÑX 1,Ò– 1-x³ 1.²x 1/X• 10’Z 11]a 12r< 13=C 14R 15% 262  !ý 18p 18Üé 19úÿ 1:¼Ë 1;Úá 1<¥è 1=ºÃ 1>…Ê 1?š¥ 1@e¬ 1AƒÁ8 1BEŽ "Cc81D.ª "EC81FR  1G#g �G÷© >@  „œ™ Œ ÃA~� 	ÉÉ‘É ÎfSÎAs<•Î<1PÞ1ö8 2/ý !Ö 2	ß !µü 1
ïÁ 0ŸCA ØÞ 1~û 1¸À 1^Ý 1˜¢ 1>¿ 1x„ 1¡ 2Xf !þƒ 18H 1‰h 2!d !Ç� 2F !§c 1á( 1‡E 1Á
 1yœ 1—²P 1 Y~ 1!€Î 1"B› 1#ië 1$"} Þ 1 0*és A +˜ÊX 1,Ò� 1-x¬ 1.²q 1/XŽ 10’S 11]Z 12r5 13=< 14R 15 261ù !ý  18p 18Üâ 19§é 1:¼Ä 1;ÚÚ  ð<¥á     =º¼     >0…Ã  0?šž A @e¥ @Aƒº€	 0BE‡ A Ccœ 1D.£ 1EC~ 1FK  1G#` oG÷¢  >@  �Äh ðš°  Œ  	LMT AED °ST 
AEST-10 °,M10.1.0,M4 €/3
TZif2?  @     & 3 ð^      ÿÿÿÿt. ä @›Õx€ @œ¼/  1�ÚD 1ž€a 1Ÿº& 1 `C 1ËT³( 1ËÇe 1Ì·V 1Í§G 1Î s  1Ï‡) 1ûÂ� 1ü²~ 1ýÇY 1þv°  0ÿ§;¿ A  V’�1‡ 1?¯ 1p9 1 1P 1ö8 2/ý !Ö 2	ß !µü 1
ïÁ 1Ÿ@ 1ØÞ 1~û 1¸À 1^Ý 1˜¢ 1>¿ 1x„ 1¡ 2Xf !þƒ 18H 1O 1!dp 1ã1 1F 1§c 1á( 1‡E 1Á
 1g' 1—²8 " Y°1!€Î 1"B› 1#ië 1$"} 1%IÍ 1&_ "')81'ô¶ 1(íá@ 1)Ô˜ 1*ÍÃ 1+´z 1,­¥ 1-”\ 1.�‡ 1/t> 10mi 11]Z 12V† 13=< 146h 15 16J 16ý  17ö, 18Üâ 19§é 1:¼Ä 1;¿* 1<¥á( 1=Ÿ >è!~î è!^Ð è!>² è!” è/±àA21  Š›ëyT
   ë@s’XÛ@{p AœNÉˆ 0¼6 2ËTº !Çl 1Ì·] 1Í§N 1Î z  sÏ‡0ˆ @  z¨² ~�j ¡“¨	  …˜ èpCST ACDè�CST-9:30ÕDÕÊ @t¦
° AœNÔ 0¼@” 2ËTÄ !Çw 1Ì·h @Í§YÄ 2	ñ !¶ 2X !§u 2)%R 0¯¿”0 1Eq´ 1F\ 1G#r  1Gîy 2IT ?Î[[ @  xÐG  ‰@{ 
5á+0945 +0845 
< o>-8:45:D˜À  ?¯     p�9€     A P 1ö8 2/ý !Ö 2	ß !µü 1
ïÁ 1Ÿ@ 1ØÞ 1~û 1¸À 1^Ý 1˜¢ 1>¿ 1x„ 1¡ 2Xf !þƒ 18H 1O 1!dp 1ã1 1F 1§c 1á( 1‡E 1Á
 1g' 1—²8 1 Y~ 1!€Î 1"B› 1#ië 1$"} 1%IÍ 1&_ 2')¯ !ô¶ 1(íá@ 1)Ô˜ 1*ÍÃ 1+´z 1,­¥ 1-”\ 1.�‡ 1/t> 10mi 11]Z 12V† 13=< 146h 15 16J 16ý  17ö, 18Üâ 19§é 1:¼Ä 1;¿* 1<¥á( 1=Ÿ 1>…Ã 1?~î 1@e¥ 1A^Ð 1BE‡ 1C>² 1D.£ 1E” 1FK  oG±  I1  Š›ðš°  Œ  	LMT AED °ST 
AEST-10 °,M10.1.0,M4 �/3
TZif2ª  
@     % 3 ð8      ÿÿÿÿswÜ8 @þfà A8@ø !çŠ¼@!]x 1Çl 1? 1§N 1á! 1‡0 1Á @yŽp8 1—ªP 1 Yp 1!€Ç  @"BŒð  1#iã  1$"n 1%IÅ 1%ïÛ 1')§ 1'Ï½ 1)	‰ 1)¯Ÿ 1*ék 1+˜¼` 1,Òˆ` 1-xž 1.²j 1/X€ 10’L 11]L 12r. 13=. 14R 15 161ò 16üò 18p 18ÜÔ 19§â  1:¼¶ 1;ÚÒ  1<¥Ò  1=º´ 1>…´ 1?š– 1@e– 1Aƒ³@ 1BEx 1Cc• 1D.•P 1ECw 1F<  1G#Y sG÷“ð / @  •$|òŒ    ¡¸	  “¨   š°¡ÁST +1130 +10 A1 
< û >-10:30<+11>-11¶´D�      ´@rí¢Ô AœNÂ€ 0¼/  2ËT³ !Çe 1Ì·V 1Í§G 1Î s  1Ï‡)*p?/0%ïê /!ÏÌ 2)	‘ !¯® 1*és 1+˜ÊP 1,Ò� O-x¬€U@  ‹¬2 EDù´ÀŸð    *ékø  à  +˜¼p    ,Òˆx 1-xž 1.²j 1/X€ 10’L 11]L 12r. 13=. 14R 15 161ò 16üò @8ø` 18ÜÔ 19§â  1:¼¶ 1;ÚÒ  @<¥Òð( 1=º´ 1>…´ 1?š– 1@e– 1Aƒ³@ 1BEx 1Cc• 1D.•P 1ECw 1F<  1G#Y sG÷“ð / @  •$œ ñŒ    ¡¸	  “¨   š°LMT AEST +1130 +10 A1 
< ð>-10:30<+11>-11,M10.1.0,M4 `
TZif2^  @     & 3 ðS      ÿÿÿÿs… AœNÂ€ 0¼/  2ËT³ !Çe 1Ì·V 1Í§G 1Î s  @Ï‡)€x 1p9 0 A P 1ö8 2/ý !Ö 2	ß !µü 1
ïÁ 1Ÿ@ 1ØÞ 1~û 1¸À 1^Ý 1˜¢ 1>¿ 1x„ 1¡ 2Xf !þƒ 28H !çŸh 2!d !Ç� 2F !§c 1á( 1‡E 1Á
 1yœ 1—²P 1 Y~ 1!w” 1"B› 1#ië 1$"} 1%IÍ 1&_ 2')¯ !ÏÌ 2)	‘ !¯® 1*és 1+˜Ê` 1,Ò� 1-x¬ 1.²q 1/t>( 10’S 11]Z 12r5 13=< 14R 15 261ù !ý  18H 18Üâ 19§é 1:¼Ä 1;ÚÚ  1<¥á 1=º¼ 1>…Ã 1?šž 1@e¥ 1Aƒº8 1BE‡ "Cc81D.£ "EC81FK  1G#` oG÷¢  >@  ‡èh ¢š°  Œ  	›D 
¦{-10AEDT†//3ˆS <xˆÕ1‰ðˆ>!€ÎX ˆ0%ïê ˆ6!XŽx ˆ£À  FK     G#Ï`€    G÷¢  >@  �Ä_ ðš°  Œ  	LMT AED °ST 
AEST-10 °,M10.1.0,M4 €/3
TZif2?  @     & 3 ð
      ÿÿÿÿs’X @{p AœNÉˆ 0¼6 2ËTº !Çl 1Ì·] 1Í§N 1Î z  sÏ‡0ˆ @  z¨Ž  ~�j ¡“¨	  …˜ ý pCST ACDý �CST-9:30ê DT   ê @t¦äÒ AœNÞ  0¼K  2ËTÏ !Ç� 1Ì·r @Í§c Ä 2	û !¶ 2b !§ 2)%\ 0¯Ê 0 1Eq¿ 1Fg 1G#|  1Gîƒ 2I^ ?Îe p @  lœG  ~�2#p€2W2W2_WST-82D21ríŸÜ@œNÂ€*@œ¼/  2ËT³ !Çe 1Ì·V 1Í§G 1Î s  1Ï‡)\1p9 0Ú B %IÍ !ïê 2')¯ !ÏÌ 2)	‘ .¯®”@  �x R!DT= ‹=1 Ô @p@ˆ @# 1P" 1ö? 20 !Ö! 2	æ !¶ 1
ïÈ 1Ÿ @ 1Øå 1 1¸Ç 1^ä 1˜© 1>Æ 1x‹ 1¨ 2Xm !þŠ 28O !ç¦h 2!k !Çˆ 2M !§j 1á/ 1‡L 1Á 1y£ 1—¹P 1 Y… 1!€Õ 1"B¢ 1#iò 1$"„ 1%IÔ 1&f 2')¶ !ÏÓ 2)	˜ !ËdH 1*éz 1+˜Ñ 1,Ò– 1-‹( 1.²x 1/tE( 10’Z 11]a 12r< 13=C 14R 15% 262  !ý 18H 18Üé 19úÿ 1:¼Ë 1;Úá 1<¥è 1=ºÃ 1>…Ê 1?š¥ 1@e¬ 1AƒÁ8 1BEŽ "Cc81D.ª "EC81FR  1G#g FG÷©�• /@  �ì˜× æÖUSº@s<™ºÀËÇe€ÿÿÿÿÌ·V€€ÿÿÿÿÍ§G€ @Î s  ±Ï‡)€    p9 0 A P 1ö8 2/ý !Ö 2	ß !µü 1
ïÁ 1Ÿ@ 1ØÞ 1~û 1¸À 1^Ý 1˜¢ 1>¿ 1x„ 1¡ 2Xf !þƒ 18H 1‰h 2!d !Ç� 2F !§c 1á( 1‡E 1Á
 1yœ 1—²P 1 Y~ 1!€Î 1"B› 1#ië 1$"} 2%IÍ !ïê 2')¯ !ÏÌ 2)	‘ !¯® 1*és 1+˜ÊX 1,Ò� 1-x¬ 1.²q 1/XŽ 10’S 11]Z 12r5 13=< 14R 15 261ù !ý  18p 18Üâ 19§é 1:¼Ä 1;ÚÚ  1<¥á 1=º¼ 1>…Ã 1?šž 1@e¥ 1Aƒº8 1BE‡ "Cc81D.£ "EC81FK  1G#` oG÷¢  >@  �Äh ðš°  Œ  	LMT AED °ST 
AEST-10 °,M10.1.0,M4 €/3
TZif2?  @     & 3 ^7@   H@t. ä 1›Õx`1œ¼/`1�ÚD 1ž€a 1Ÿº& 1 `C 1ËT³( 1ËÇe 1Ì·V ¨ ` 1ûÂ�0 1ü²~ 1ýÇY 1þv°8 0ÿ§;¿ A  V’�1‡ "?°è–!O¸ è!ã1 è!g' è%1&_p è!ô¶ 1(íáX 1)Ô˜ 1*ÍÃ 1+´z 1,­¥ 1-”\ 1.�‡ 1/t> 10mi è!V† è!6h è!J 6è17ö, è!¿*` è!Ÿ è!~î è!^Ð è!>² è!” è/±àA21  ŠƒëySë@s…‹1œNÂsëË Ä‹RÀ   ^Ý     0˜¢  0>¿ A x„ 1¡ 2Xf !þƒ 28H 0çŸ€	 2!d !Ç� 2F !§c 1á( 1‡E 1Á
 1yœ 0—²G A  Y~ 1!w” 1"B› 1#ië 1$"} 1%IÍ 1&_ 2')¯ !ÏÌ 2)	‘ !¯® 1*és 1+˜Ê` 1,Ò� 1-x¬ 1.²q 1/t>( 10’S 11]Z 12r5 13=< 14R 15 261ù !ý  18H 18Üâ 19§é 1:¼Ä 1;ÚÚ  1<¥á 1=º¼ 1>…Ã 1?šž 1@e¥ 1Aƒº8 1BE‡ "Cc81D.£ "EC81FK  1G#` oG÷¢  >@  ‡èh ðš°  Œ  	LMT AED °ST 
AEST-10 °,M10.1.0,M4 €/3
TZif2?  @     & 3 ð      ÿÿÿÿt¦ä AœNÞ  0¼K  2ËTÏ !Ç� 1Ì·r @Í§c h 2	û !¶ 2b !§ 2)%\ 0¯Ê 0 1Eq¿ 1Fg 1G#|  1Gîƒ 2I^ ?Îe † @  lœG  ~�H#p€HWHWH_WST-82D�U      @sˆd @v¥à @{p AœNÉˆ 0¼6 2ËTº !Çl 1Ì·] 1Í§N 1Î z  @Ï‡0ˆÛ 1p@ @# 1P" 1ö? 20 !Ö! 2	æ !¶ 1
ïÈ 1Ÿ @ 1Øå 1 1¸Ç 1^ä 1˜© 1>Æ 1x‹ 1¨ 2Xm !þŠ 18O 1�h 2!k !Çˆ 2M !§j 1á/ 1‡L 1Á 1y£ 1—¹P 1 Y… 1!€Õ 1"B¢ 1#iò 1$"„ 2%IÔ !ïñ 2')¶ !ÏÓ 2)	˜ !¯µ 1*éz 1+˜ÑX 1,Ò– 1-x³ 1.²x 1/X• 10’Z 11]a 12r< 13=C 14R 15% 262  !ý 18p 18Üé 19úÿ 1:¼Ë 1;Úá 1<¥è 1=ºÃ 1>…Ê 1?š¥ 1@e¬ 1AƒÁ8 1BEŽ "Cc81D.ª "EC81FR  1G#g �G÷© >1  „„óŒ    ~� 	  “¨  …˜�aEST AC DÝÏCST-9:30ACDTßU0      …@–ª†� A¸f  0ý\À @¹ñPP @ºÞ�@ 1Ú8Ê 1Úì @ÜýÐ ðÜ¹u@ÿÿÿÿÝû1PÿÿÿÿÞ› ú@ÿÿÿÿßÝ¶P 1àTO @ô˜Ð 1õz 1öÀ€  @÷:À 1øQH 1øÇá  1ú
î0 1ú©  1ûì"  Àü‹™À    ÉªP 1xó @ QÐ 1 3ë 1!�…  1"ä 1H` oRÀ ðÿÿÀp  ÿÿÇÀÿÿ¹°  ð LMT -04 -05 
<-05>5
TZif2x  @     & 3 �'      @–ªed 1¸;@¸ý2� @¹ñ&  @ºÞf 1Ú8  1Úëì @ÜÓ  1Ü¹K  1Ýû 1Þ›Ð 1ßÝŒ 1àT% 1ô—ñ0 1õP 1öÀV  1÷p 1øQ 1øÇ·  1ú
Ä0 1ú¨ê  1ûëø  @ü‹o�è @É€  1xÉ @ '  1 3Á 1!�[  1"º 1#X  @#âb( 1%7ä 1%Ô¹ 17ö¸ 18¸w 19ßÕ@ 19é@ 1;Èñ  O<o �àü@ÿÿáœê ñðêBãà äQ1 -02ä?2>2äD[ä r´¬A¸Ià !ý@\@¹ñ40 1ºÞt\1Ú8® 1Úëú @Üá°  1Ü¹Y  1Ýû 1Þ›Þ 1ßÝš 1àT3 1ôZ	 1õ^ 1öÀd 1÷p 1øQ, 1øÇÅ  1ú
Ò` 1ú¨ø  1ûì  1ü‹}l@ÉŽ0¬1x× @ 5° 1 3Ï 1!�i  1"È 1#X  1#âp¼1%7ò 1%ÔÇ 1'!0 1'½ã0 1) ñ 1)”‹  1*ê0 1+k2  1,Àµ  1-fÄ  1. — 1/F¦ 10€y 11M0 12W @ 13j  148T  14øÁ 16  16Ïh0 17öÆ0 18¸…  19ßã  1:�,  1;Èÿ  1<o 1=Ä‘  1>Nð 1?‘þ 1@.Ò 1A†ø 1BïP 1CQÂ 1C÷Ñ 1EMSP 1Eàí0 1G†  1G·•  1Hú¢  1I—w 1JÚ„ 1K€“0 1Lºf 1M`u 1NšH 1OI’0 1PƒeP 1Q 9  1RcG 1S  1TC) 1Té80 1V# 1VÉ 1Xí 1X¨ü 1YâÏ 1ZˆÞ 1[Þ`p O\hÀ „� @ÿÿÔL¸ ãà¸$ÕÐ¸Q2 -03¸?3>3¸D¸ D€A¸Wð !ýN01¹ñBÆ1ºÞ‚01Ú8¼ 1Úì 1ÜïÖ1Ü¹g  1Ýû# 1Þ›ì 1ßÝ¨ 1àTA 1ô˜0 1õl 1öÀr  1÷,p 1øQ: 1øÇÓ  1ú
à0 1ú©  1ûì  1ü‹‹ @Éœ@¨1xå 1 C&1 3Ý 1!�w  1"Ö 1,ÀÃ O-fÒ0ØÀÿÿÿÇ¼  ÿÿÕÐÿÿÇÀ LMT -03 -04 
<-04>4
TZif2  @     ) 3 ð§      ÿÿÿÿ€ñ«  @šäÞÀ @›Ö0 @ž¸…` @ŸºÝP @¢�@ 1£0±  1¤zV 1¥ 1¦S @ @¦üR°( 1¨<½  1¨Ü4 1ªŸ 1ªÍ:0 1«ü� 1¬¿‘ 1­îØ 1®Œþ 1¯¼E 1°U 1±®œ 1²KpP 1³Ž~ 1´$»  1µn` 1¶À  1·NB 1¸ 1¹$é  1¹çù 1»Ë 1»Ñ@ 1½ ]0 1½�1  1¾ò´ 1¿�Ú  1ÀÓç0 1Á^G 1Â�Ž  1ÃPž 1Ämp 1Å0€ 1Ær< 1Çb 1È6n@ 1Èù~` 1ÊP 1ÊÙ` 1Ëˆâp@Ò#ôp@@Ò`íÐ @ÓuÖà 1Ô@Ï 1ÕU¸ 1Ö ± 1×5š 1Ø “ 1Ù| 1Ùàu 1ÜÞ{X 1Ý©tÈ1Þ¾] 1ß‰V 1àž? 1ái8 1â~! 1ãI 1æGP 1çP 1è' 1èñú 1êã 1êÑÜ 1ëæÅ 1ì±¾ 1ñ�¦P 1ò‰P 1óoˆ 1ô_k 1õOj 1ö?M 1÷/L 1ø(i@ 1ù. 1úK 1úøJ` 1ûè- 1üØ, 1ýÈ 1þ¸ @ÿ§ñÐ@ —ðà 1‡Ó 1wÒ @pðP @`ï` 1PÒ 1@Ñ 10´ 1 ³ 1	– 1
 • 1
ðx 1àw 1Ù”` 1ÀY 1¹v 1©up 1™X 1‰W 1y: 1i9 1Y 1I 18þ 1(ý 1"p 1ß 1ý 1ñüp 1áß 1ÑÞ 1ÁÁ 1±À 1¡£ 1 uò@ 1!�… 1"UÔ 1#j¡p 1$5¶ 1%Jƒ 1&˜ 1'*e 1'þµP 1)
G 1)Þ— 1*ê) 1+¾y 1,ÓF` 1-ž[ 1.³( 1/~= 10“
 11gY` 12rì 13G; 14RÎ 15' 162° 17ÿ 18Ìp 18æá 19û® 1:ÆÃ 1;Û� 1<¯àp 1=»r 1>�Â 1?›T 1@o¤ 1A„q` 1BO† 1CdS 1D/h 1ED5 oEóšà /1 a 0 JÿÿÄ`dp pÿADT AST AWT APT 
AST4ADT,M3.2.0,M11.1.0ˆD}ˆ@dä°”è1›ûÀ1›Ãº@ž¸¡€ 1Ÿºù1Â ; @ÃO„ð 1Ëˆþ 8!a	 @Óˆh   1ÔS` 1ÕUÕ 1Ö Í 1×5· 1Ø ¯ 1Ù™ 1Ùà‘ 1Û  1ÛÈ\ 1ÜÞ—h 1Ý©�ˆ 1Þ¾y 1ß‰r 1àž[ 1áiT 1â~= 1ãI6 ðä^€ÿÿÿÿå)pÿÿÿÿÀæG< ÿÿÿÿç4ð 1è' 1èò 1ê  1êÑø 1ëæâ 1ìÖÄ 1íÆÄ 1î‘¼ @óo¤€H 1ô1b 1ùJ 1úv( 1úøg 1ûèX 1üØI 1ýÈ: 1þ¸+ Aÿ¨  !˜ 1‡þ 1wï @q€	 1a 1Pü 1@í 10Þ 1 Ï 1	À 2
 ± !ð¢ 1à“ 0Ù¿O A Àu 1¹¡ 1©’ 1™ƒ 1‰t 1ye 1iV 1YG 1I8 19) 1) 1"EX 1ü 1' 1ò 1â	 1Ñú 1Áë 1±Ü 1¡Í 1 v@ 1!�¯ 1"Uñ 1#jÌ 1$5Ó 1%J® 1&µ 2'*� !þÑ8 1)
r 1)Þ³ 1*êT 1+¾• 1,Óp 1-žw 1.³R 1/~Y 10“4 11gv8 12s 13GX 14Rø 15': 162Ú "7Ø18÷ "8æØ19ûÙ 1:Æà 1;Û» "<¯Ø1=»� ">�Ø1?› "@oØ1A„›` "BOØ1Cd} 1D/„ @EDQp1 aEó·  !   V@ÿÿ¤ìSñ¹°ÿÿ«  ÿÿ¹° ð#LMT CDT CST CWT CPT 
CST6CDT,M3.2.0,M11.1.0
TZif2Ô  @     & 3 �¬      Æ@rîxì @ž¸“p @Ÿºë` @ ‡.È @¡š±@ 1¢”î1£U© 1¤†] 1¥(x0 1¦f? @§Nà0 1¨F! 1¨ì0 1ªÉ` 1ªÕM0 1«ü« 1¬µ/ 1­Ü� 1®• 1¯¼o 1°~-@ 1±œQ 1²gJ  1³|3 1´G, 1µ\ 1¶' 1·;÷ 1¸ð 1¹%� 1¹æÒ 1»õ 1»Ïî` 1¼ä× 1½¯Ð 1¾Ä¹ 1¿�² 1À¤› 1Áo” 1Â„} 1ÃOv 1Äd_ 1Å/X 1ÆM|€ 1Ç: 1È-^ 1Ëˆð 2Ò#ô !`û  1Óuä@ 1Ô@Ý @ÕUªÐH@Ö £À 1×5Œ 1Ø … 1Ùn 1Ú3v�1Úþ§P 1Ütà 1ÜÞ‰ 1Ý©‚ 1Þ¾k 1ß‰d 1àžM 1áiF 1â~/ 1ãI( 1ä^ 1å)
 1æG-  1ç&  1è' 1éò 1êñ 1êöÔ 1ëæÓ 1ìÖ¶ 1íÆµ 1î¿ÓP 1ï¯Ò` 1ðŸµ 1ñ�´ 1ò— 1óo– 1ô_y 1õOx 1ö?[ 1÷/Z 1ø(w` 1ù< 1úY 1úøXp 1ûè; 1üØ: 1ýÈ 1þ¸ 2ÿ§ÿ�0—þð@1‡á 1wà @pþ` 1`ý^1Pà 1@ß 10Â 1 Á 1	¤ 1
 £ 1
ð† 1à… 1Ù¢` 1Àg 1¹„ 1©ƒp 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) ð")`    íð     `    ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± @ v ð0 1!�“ 1"Uâ @#j¯à 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC oEó¨ð /. , =ñÿÿµ”  ÿÿÇÀÿÿ¹°   ð#LMT EDT EST EWT EPT 
EST5EDT,M3.2.0,M11.1.0
TZif2# @     & 3 ðY      ÿÿÿÿˆÞÎà @ž¸¯� @Ÿ»€ 1 ˜‘ 1 Ò… 1¢Šè @£„   1¤jÊ 1¥5Ã  @¦Sç 1§¥ 1¨3É 1¨þÂ0 1Ë‰0 @Ò#ôp( 1Òa 1ÕUã( 0Ö Ü¿ P a�	 @Pü€ 1@û 10Þ 1 Ý 1	À 1
 ¿ 1
ð¢ 1à¡ 0Ù¿? A Àƒ 1¹¡ @© 	 0™ƒ A ‰‚ 1ye 1id 1YG 1IF 19) 1)( 1"Ep 1	
 1' 1ò&p 1â	 1Ò 1Áë 1±ê 1¡Í 1 v@ 1!�¯ 1"Uÿ 1#jÌp 1$5á 1%J® 1&Ã !'*G A 'þß	 1)
r  1)ÞÁ 1*êT 1+¾£ 1,Óp` 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 18÷p 18ç 19ûÙ 1:Æî 1;Û» 1<°
p 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ IEóÅÁü9@ÿÿ• Ê « Ê ��Ê‘« ÿÿ« ÊÐMDT MST MWT MÊ_MST7MÊU SP   R@^=4ì @œÏb @�¤æü @ž¸~Œ @ŸºÖ| @ ¶ˆÜ @¡8ÿL @¢•\ 1£„ü 1¤tû 1¥dÞ 1¦^0 1§DÀ 1¨=ù 1©$¢ 1ªÛ 1«„ 1«ý½ 1¬äf 1­ÝŸ @®Í‚Ìh 1¯½� 1°­d 1±¦žp 1²�F 1³†€ 1´m( 1µfb 1¶M
 1·FD 1¸,ì 1¹&& 1º	p 1»B` 1»õë 1¼ï$ 1½ÕÍ @¾žMlˆ @¾Ï¨ @¿µ¯ @À¸18 1Áyï ðÂ˜8ÿÿÿÿÃYÑ¨ÿÿÿÿÄwõ�8ÿÿÿÿÅ9³¨ @Æa¸ 1Ç• 1È@ó @É²( 1Ê Õ 1Êâ” 1Ì · @Ò#ôp  @Ò`æÈ @ÓˆDØ @ÔJH 1Õh& 1Ö)å 1×H 1Ø	Ç 1Ù'ê 1Ùé© @ÛX8 1ÛÒÅP 1ÜÞt 1Ý©m  1Þ¾V 1ß‰O 1àž8 1ái1 1â~ 1ãI 1ä]ü 1å(õ 1æGp 1ç` 1è&ú 1èñó 1êÜ 1êÑÕ 1ëæ¾ 1ì±· 1íÆ  1î¿¾P 1ï¯½` 1ðŸ  1ñ�Ÿ 1ò‚ 1óo� 1ô_d 1õOc 1ö?F 1÷/E 1ø(b` 1ù' 1úD 1úøCp 1ûè& 1üØ% 1ýÈ 1þ¸ Pÿ§êÈ  0—éØ 1‡Ì 1wË @péH @`èX 1PË 1@Ê 10­ 1 ¬ 1	� 1
 Ž 1
ðq 1àp 1Ù�` 1ÀR 1¹o 1©np 1™Q 1‰P 1y3 1i2 1Y 1I 18÷ 1(ö 1"p 1Ø 1ö 1ñõp 1áØ 1Ñ× 1Áº 1±¹ 1¡œ @ uÏôð @!�bd 1"U± @#jpÔ 1$5“ @%J`ä 1&u 1'*B @'þ’t 1)
$ 1)Þt 1*ê 1+¾V 1,Ó#` 1-ž8 1.³ 1/~ 10’ç 11g6` 12rÉ 13G 14R« 15&ú 162� 17Ü 18©p 18æ¾ 19û‹ 1:Æ  1;Ûm 1<¯½p 1=»O 1>�Ÿ 1?›1 1@o� 1A„N` 1BOc 1Cd0 1D/E 1ED 1Eów` 1G-.@ 1GÓY 1I 1I³; 1Jìò 1KœX@ 1LÖ@ 1M|: oN¶H ) ) 
  'V ÁÿÿÎ”  ÿÿÜ¤ QÿÿÜØ "È   ð
ÿÿêèLMT NDT NST NPT NW ðDT 
NST3:30NDT,M3.2.0,M11.1.0
TZif2l @     & 3 ��      V@^=vì @ž¸½  @Ÿ»� 1Ë‰ Î0a& @Óv  1ÔA 1ÕUñ 1Ö ê 1×5Ó 1Ø Ì 1Ùµ 1Ùà® 1ÚþÑX 1ÛÀ� 1ÜÞ³ 1Ý©¬x 1Þ¾• 1ß‰Ž 1àžw 1áip 1â~Y 1ãIR 1ä^; 1å)4 1æGXp 1çQ` 1è': 1èò3 1ê 1êÒ 1ëæþ 1ì±÷ 1íÆà 1î‘Ù 1ï¯ü` 1ðq» 1ñ�Þ 1òÁp 1óoÀ 1ô_£ 1õO¢ 1ö?… 1÷/„ 1ø(¢@ 1ùf 1ú„ 1úøƒp 1ûèf 1üØe 1ýÈH 1þ¸G @ÿ¨*à@ ˜)  1ˆ 1x @q(� @a'  1Q
 1A	 10ì 1 ë 1	Î Ð
 Í     
ð°� ð    à¯     ÙÍ 1À‘ 1¹¯ @©®  1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 @"S�H 1	 15 1ò4p 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç 1:Æü 1;ÛÉ 1<°p 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm ¿EóÓ  gñÿÿŒ”  ÿÿ��ÿÿ�€   ð#LMT PDT PST PWT PPT 
PST8PDT,M3.2.0,M11.1.0
TZif2X @     & 3 ð5      ÿÿÿÿ†ý“ @ž¸¯� @Ÿ»€ @µeOð @¶0Hà 1·E1 1¸* 1¹% 1¹ð @»0p( 1»Ïî 1¼î @½¹` 1Âr0 1Ãaë  1ÄQê 1Å8“  1Æ1Ì 1Ç!¯  1Èé@ 1É
Ì  1ÉúË 1Êê® 1Ë‰° 1Ò#ô @Òa h @ÓcŒ 1ÔSo 1ÕUã 1Ö Ü 1×5Å 1Ø ¾ 1Ù§ 1Ùà  1ÚþÃX 1ÛÀ‚ 1ÜÞ¥ 1Ý©ž1Þ¾‡ 1ß‰€ 1àži 1áib 1â~K 1ãID 1ä^- 1å)& 1æGJp 1çC` 1è', 1èò% 1ëæð 1ìÖÓ OíÆÒËæ
Pÿÿ�ä† « † ��† « ÿÿ«    Œÿ
MDT MST MWT MPT CST 
CST6~D�]   	   %¦@}†Šœ @ž¸Ë° @Ÿ»#  1 Ð 1¡¢Ò61Ë‰( î 4 ( 1÷/v^1ø(¢61û_8¸ÿ¢ ¾1G-ŠÀ1GÓµ(1Il 1I³— 1JíN 1Kœ³ø1LÖjø1M|• ÐN¶L�    O\w  ð    P–.�    Q<Y  1Rv 1S; 1TUò 1Tü 1V5Ô @Vå: 0 AXñ !Å 1YþÓ 1Z¤þ 1[Þµ 1\„à 1]¾— 1^dÂ ÿ_ž\ð =ñÿÿ�d  ÿÿ�€ÿÿ�p   pÿÿ�� !   ð !LMT YDT YST YWT YP ðDT PST PDT MST 
MST7
TZif3 @     & 3 ðz      ÿÿÿÿi‡Æ @�0GF @›\åP 1Ÿ|â @¡ qÀ 1°^w @±w=@ @²A Ð 1³Xp  1´"48 1µ9¤  1¶g  1·×  1·ä›  1¸ý\ 1¹Ç  1Ìn0 1Ìlç0 1ÓÜ�  @ÔÉ°` 1Õ3U 1Õv’( 1ýÑ< 1þ’ú  @ÿÌÍÀø @ rÜ° 1uP 1@I 1U2 1 + @>O@( 1  1¼ 1ßï 1þ 1	¿Ñ 1
Ýõ @¨î08 1½× 1ˆÐ 1�¹ 1h² 1†Õp 1H” 1f· 1(v 1F™ 1’` 1&{ 1ñt 1] 1ÑV 1æ? 1±8 1Ï\p 1‘ 1¯> 1pü 1�  1 p 1!o 1"9û 1#Nä 1$Ý 1%8 ` 1%ù¿ 1&òø 1'Ù¡ 1(÷Ä 1)Â½` 1*×¦ 1+¢Ÿ 1,·ˆ 1-‚� 1.—j 1/bc 10€‡p 11BE 12`i 13=×` 14@K 15D 16¸ 17Õ0 18  18Ë  19é+` 1:ªê 1;É 1<ŠÌ 1=¨ï 1>j® 1?ˆÑ 1@SÊP 1Ah³ 1B3¬ 1CH• 1DŽ 1E1²p 1Eóp 1G” 1GïP 1Hñv 1I¼o 1JÑX 1K¸ 0 1L±: 1MÆ  1NP‚` 1Oœ®  1PBÙ 1Q|� 1R+ö0 1S\r 1TØ 1W7æ@ 1W¯ì0 1YÈ 1Y�Î 1Z÷ª 1[o° ´\©g° A / M@ÿÿ½º
€½º ÿÿ¹°
ðÇÀ ÿÿÇÀÿÿÕÐøóSMT -05 -04 -03 
<-04>4<-03>,M9.1.6/24,M4
 Df Bj@¹Ç@ˆ bÿ(Àû0    #Nä@  á  $Ý0    %8 À !ù¿ 1&òø 1'Ù¡ 1(÷Ä @)Â½°( 1*×¦ 1+¢Ÿ 1,·ˆ 1-‚� 1.—j 1/bc @0€‡@8 11BE 12`i 13=×` 14@K 15D 16¸ 17Õ0 18  18Ë  19é+` 1:ªê 1;É 1<ŠÌ 1=¨ï 1>j® 1?ˆÑ 1@SÊP 1Ah³ 1B3¬ 1CH• 1DŽ 1E1²p 1Eóp 1G” 1GïP 1Hñv 1I¼o 1JÑX 1K¸ 0 1L±: 1MÆ  1NP‚` 1Oœ®  1PBÙ 1Q|� 1R+ö0 1S\r 1TØ 1W7æ@ 1W¯ì0 1YÈ 1Y�Î 1Z÷ª 1[o° \©g° / 4aÿÿ™x   Ðÿÿ« ÿÿ��  ó& ÿÿ¹°LMT EMT -06 -07 -05 
<-06>6<-05>,M9.1.6/22,M4
 `
TZif2, @     & 3 0 ¿  GMT 
GMT0o ¼‘ÿÿñð  -01h?1>1à M�ÿÿs`  -10q O10>1RN@ÿÿePr ã O11>1ä P W@r 2ä O2>12VO ãàÇr ?02>q P ÕÐq 3ã O03>3â O ÇÀq 4q ?4>4q O ¹°q ‚?5>5q O « q 6â ?6>6q O ��q 7q ?7>7q À              @      PTZif2	   / ÿÿÿ�€  -08 
<-08>8
>  B  d 3 Pÿÿ�pq 9q ?9>9q M ¡ ¿  GMT 
GMT0o Oÿ  +01 
<+01>-1r OpŒ   +10r _10>-1å P š°s å 1å æ P ¨Às 2æ _2>-12YO ¶Ðs 3s _3>-13s O Äàs 4s _4>-14s O  ±YO02>-XP *0r XO03>-WP 8@r WO04>-VP FPr 5É_05>-5ÈO T`r 6r O6>-6r O bpr 7r O7>-7r O p€r  ®_+08>-¯N@  ~�r  ¯_+09>-°qÀ              @      PTZif2	   / # ¯GMT 
GMT0
<  @  ? 3 o �UTC 
UTCo ÿ“ða      !ÿÿÿÿQl A›.ì 0ÕÖ\ @œÙ¸ 1�¤¿ 1ž§% 1Ÿ— @ �AŒ  1¡vø 1¢p# 1£VÚ 1¤P 1¥6¼ 1¦%[ 1§'Á 1¨^ã 2©£ !îZ( 1ªç… 1¬'â 1¬Çg 1­íf 1®§I 1¯Î™ 1°‡+ 1±± 1²pH( 1³’R 1´P* "µsX 1¶0 1·T¹ 1¸î 1¹@x@ 1¹ïÐ 1»q 1»Øì 1¼ù¥ 1½¸Î 1¾ÚØ 1¿˜° 1À½] 1Áx’ 2Â§Ë !Ü]P@ÃXtp01ÄÄ 1Å8V @Æ`÷ð 1Ç!r @ÈD²P @ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‚% 1Ñr @ÒN@�¼1¤c @‹ 1„E 1t6 1d' 1T 1MD( 13ú 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ o1]Ù   / @  ”�A¤ ð@  °   À      LMT NST AMT +0020 +0120 CET CEST 
CET-1CEST,M3.5.0,M10 //3ëD@   ç‡@~6³” 0ÔAÛÑ  ï¡? A  lÖ ñ A ••W�…DÀZif2          ð@      ÿÿÿÿªEt @µ¤P. @'™À @Î0 0Í0 P ú° 1ê   1Û5  1Ì… @¼’à  1¬ƒ 1œt 1Œe 1|V 1 lG 1!\8 1"L) 1#< 1$, @%
ðP 1&û @''p 1'õ @)Ôì` 1*Äë 1+´Ü 1,¤Í 1-”¾ 1.„¯ 1/t  10d‘ 11]¼X 12r— 13=ž 14Ry 15€ 262[ !ýb 18x@ 18ÝD 19ûZ 1:½& 1;Û< 1<¦C 1=» 1>†% 1?›  1@f 1A„8 1BEé 1Ccþ 1D%Ë 1ECà 1F­ 1G#Â 1GîÉ 2I¤ !Î« 1Jã† 1K®� 1LÌ£8 1MŽo 1TL8{V÷p P  q  -„ð 0   FP  8@  ðLMT +03 +05 +04 
<+04>-4
TZif28  @     & 3 �7      Î@t?˜D @›€!€ A¹|éà 0Æ¯Ð 1Éòc @Ê¨P 1ÌçK@ÍªLð 1Î¢  @Ï“ip Aßž` !·
&1	ì^F2ô  Í®§ A ½Ÿ @¤U€	 1Œ] 1„7 @jü 1d{Ž1Rª 1F‚H 13Â` @#ë�( 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½` 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ A1]ÙŽK”¤ A  <+<… *0…ð        ‹pAMT EES @T CE �ST 
EET-2 Ñ,M3.5.0/3,M10
 ªE # €R@]	Ë A›&­  0Ö  1œÏ0 1�¤Ã 1žœ� 1Ÿ— 1 …º( 1¡vü 1¢eœ 1£{È 1¤N¸ 1¥?û 1¦%` 1§'Æ 2¨*, !ëø( 2ª Ó !Õ 1«éð 1¬Çl 1­ÉÒ 1®§N 1¯ y0 1°‡0 1±’Ð 1²pL 1³r² 1´P. 1µIZ( 1¶0 1·2v 1¸ò 2¹X !ïÔ 1ºé 0 1»Øñ 1¼ÛW 1½¸Ó 1¾±þ( 1¿˜µ 1À› 1Áx— 1Âzý 1ÃXy 1ÄQ¤0 1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 @Ê&�€1Ê—Y 1ËÑ 1Ìw; 1Í±  1Î`X21Ï�â 1Ðn^ 1Ñr 1Ñû2 1Òiþh 1Óc)` 1ÔIà 1Õ! 1ÕBý8 1Õßà0 1ÖN¬  1Öþ  1Ø.Ž 1Øù• 2Úp !ëì 1Ûå( 1ÜËÎ ÐÝÄù ÿÿÿÿÞ´ê ÿð ÿÿÿß® ÿÿÿÿà”Ì  1árH 1âkt 1ãR* 1äT� 1å2 1æ=­  1ç) 1èT 1èû 1éýq 1êÚí 1ëÝS 1ìºÏ 1í³ú0 1îš± 1ï�g 1ðŸ} 1ñaI 1ò_ 1óJf 1ô_A 1õ!  1ö?# 1÷ ï 1ø 1øàÑ 1ùþç 1úÀ³ 1ûè 1ü{« ÀýÇ»p    pÆ  1)X 1P¨ 1	: 20Š !é 2	l !Èþ 1
ðN @² H 1Ð0 1‘ü 1° 1qÞ 1™. 1QÀ 1y 11¢ 1Xò @#ë�P 18Æ 1Í 2¨ !ã¯ 1øŠ 1Ã‘ @á§8 1¬® 1Á‰ 1Œ� 1¡k 1 lr 1!�M 1"LT 1#a/ 1$,6 1%JKX 1& 1'*- 1'õ4 2)
 !Õ 1*éñ 1+´ø 1,ÉÓ 1-”Ú 1.©µ 1/t¼ 10‰— o1]Ù $  : @ 1  @ÿÿÿµ[@ ð       LMT BST G ð
DST 
GMT0BST,M3.5.0/1,M10
 a
TZif2B  
@     % 3 $Î@   Ï@^<ðH @Ê5à @ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‚% 1Ñ¡Œ 1ÒN@—g!Ó  g!¼½g!œŸ g!|� g!\c g!<E g!' g!Cp g1(å% )g!Å g!¤é g!„Ë g!d­  g&@  8x Úæà`CET CEÜPCET-1 ÞÜ//3ÞD@<   v¾@o¢aø A›` 0ÕÚð 1œÙ®Þ1�¤µ 1ž¹� 1Ÿ„— 1È	q !r@Ñ¶– ` AÒX¾€ !¡O 1ÓcP 1ÔK# 1Õ9Ñu2Õgç !¨s8 1Ö)´0 1×, 1Ø	– 1ÙÁ( 1Ùéxþ1MD 13ú®!Ü 1ó¾ žÁ
”Ó 
  @  ˆ¶  ¢ð 	  *0LMT CEST CET CEMðT 
CET-1CEST,M3.5.0,M10 Ÿ/3
TZif2  @     ) 3 ð=      ÿÿÿÿI’ø 1lÏê @›` @›ÕÚð @œÙ®� 1�¤µ 1ž¹� 1Ÿ„— 1È	q @ÌçK( 1Í© 1Î¢C 1Ï’4 1Ð‚% 1Ñr 1Òb 1Ó€0 1ÔIÒ @Ô“´ H 2Õr !L8 1Ö)´ 1×, 1Ø	– 2Ùp 0éx @d'� 1T 1MD 13ú 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ {1]Ù     @  ˆQðˆ         LMT PMT À CET GMÓa�f      ;@V¶ßæ @mèÈ  @˜DI€ A›%p Û@ŸÎø00 1 `¥1¡~»@ 1¢. 1£zL 1¤5� 1¥^#  1¦%5 1§'› 1¨* 2©} !î4( 1ªç_ 1«×P 1¬ÇA 1­É§ 1®§# 1¯ O0 1°‡ 1±‰k @²pL   1³r² 1´P. 1µIZ;1¶0 1·2v 2¸ò !ÿã 1¹ïÔ 1ºÖ‹0 1»Øñ 1¼Èâ 1½¸Ó 1¾Ÿ‰( 1¿˜µ 1À› 1Áx— 1Âhˆ 1ÃXy 1Ä?/0 1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 1ÈJ ;!n^#;!N@ 1Ó‘@û1ÔK#ë1¤c 1‹S1„E 1t6 ÿ1 / 2  @  0 D2   DPP J`BMT WEN  S SOa17  © _@lÏà 1·°Ò 1¹>ó"1¹ïœ 1ºß� 1»Ï~ @¼È©à0 1½¸š 1¾¨‹ 1¿˜| ÐÀˆmàÿÿÿÿÁx^àÿáÿÿÿÂhOàÿÿÿÿÃX@ 1ÄH1 1Å8" 1Æ( ÀÇà    ­Ñ` @SàP @MÐ 13Ð @#Ý€ 1Î 2¿ !ó° 1ã¡ 1Ó’ 1Ãƒ 0¼¯7 A ¬  1œ‘ 1Œ‚ 1|s 1 ld 1!\U 1"LF 1#<7 1$,( 1% 1&
 1'5h 1'õ
¨ 1(äû 1)Ôì 1*ÄÝ 1+´Î 1,¤¿ 1-”° 1.„“ð 1/t’ 10du 11]®12r{3=» !@  x¬ ðx   *0    LMT BMT EES €T 
EET-2 Ñ,M3.5.0/3,M10
 p4
TZif2H  @     & 3 �D      -@k‘œ A›` 0ÕÚð @œÙ®� 1�¤µ 1ž¹� 1Ÿ„— @ šÄ  1¡dy 1¢p 1£M– 1ÉóµP 1ÌçK 1Í©( 1Î¢C 1Ï’4 1Ð‚% 1Ñ™x�@ÒŠÉpX 1ÓP¦0 @ÔK€ 1Õ9Ã( 1Ö)´ 1×¥ "Ø	p 1ÙÁ0 1Ùéx 1â¢¨È 1ãQòˆ 1ä‚§ 1å1þ( 1ætþ 1çà 1èTà @èñÂ�H@M'ð @3Þp 1#Ï 1À 2± !ó¢ 1ã“ 1Ó„ 1Ã‘H @¼½@ 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ o1]Ù /A  ä �    	C  CET 
CET-1  þ3þD0%  ”  V1$ðê^@qÔ† AÊj  !âq 1Ë÷L 0ÌÂSÅ A #ë1Ü 2Í !ó¾ 1ã¯ 1Ó  ±1  ! ú]  ñ&ñ â ñc�<   	   &Ù@V¶Èø @žkŸ @·°Ò 1¹>ó'1¹ïœ 1ºß� 1»Ï~ 1¼È©Ÿ1½¸š 1¾¨‹ 1¿˜| 1Àˆm 1Áx^ Œ € 1È¼“h @Êw}P 7ðN�`    '§Ð    ±Ü@    ÛP 0úÀ @êÐ 1ÛC  1Ì“ @¼ ð 1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 1%
 2&û 0CLà` A'5€ !õ& 1(å @)Ôì` 1*ÄÏ° 1+´Î 1,¤± 1-”° 1.„“ 1/t’ 10du 11]®` 12r{Ð Œ3=­  ~ * @  � ðô   x   *0        €  8@ ð "LMT CMT BMT EES @T CE ðST MSD MSK 
EET-2  °,M3.5.0,M10 €/3
TZif2y  @     & 3 03  Ç   ÿÿÿÿi†Ï´ @qï4 A›Œ` 0Õ¾Ð @ÈCWp @ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‚% 1Ñr 1Ò$( 1Óy… 1Ô­ 1Õ^­ 1Õßà 1×GÉ @×¿ÂÀ 1MD @3ú� 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ 1]Ù @  Ì/ ÌÛA –„C€ |`
CET-1 oU0‘  0  7@WÑ
Ü A›&³‘ !Ö‡@œÏ0  1�¤Ã 1žœ� 1Ÿ— @ …º   1¡vü 1¢eœ 1£{È 1¤N¸ 1¥?û 1¦%` 1§'Æ 2¨*, !ëø( 2ª Ó !Õ 1«éð 1¬Çl 1­ÉÒ 1®§N 1¯ y0 1°‡0 1±’Ð 1²pL 1³r² 1´P. 1µIZ( 1¶0 1·2v 1¸ò 2¹X !ïÔ 1ºé 0 1»Øñ 1¼ÛW 1½¸Ó 1¾±þ( 1¿˜µ 1À› 1Áx— 1Âzý 1ÃXy 1ÄQ¤0 1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 1ÔIà 1Õ! 1ÖN¬ 1×,( 2Ø.Ž !ù• 2Úp !ëì 1Ûå8 1ÜËÎ 1ÝÄù 1Þ´ê 1ß® 1à”Ì 1árH 1âkt 1ãR* 1äT� 1å2 1æ=­  1ç) 1èT 1èû 1éýq 1êÚí 1ëÝS 1ìºÏ 1í³ú0 1îš± 1ï�g 1ðŸ} 1ñaI 1ò_ 1óJf 1ô_A 1õ!  1ö?# 1÷ ï 1ø 1øàÑ 1ùþç 1úÀ³ 1ûè 1ü{« @ýÇ»p˜@pÆ  1)X 1P¨ 1	: 20Š !é 2	l !Èþ 1
ðN @² H 1Ð0 1‘ü 1° 1qÞ ð ™.     QÀ    Á y     1¢ 1Xò @#ë� 18Æ 1Í 2¨ !ã¯ 1øŠ 1Ã‘ @á§8 1¬® 1Á‰ 1Œ� 1¡k 1 lr 1!�M 1"LT 1#a/ 1$,6 1%JKX 1& 1'*- 1'õ4 2)
 !Õ 1*éñ 1+´ø 1,ÉÓ 1-”Ú 1.©µ 1/t¼ 10‰— …1]Ù / </ ð	ÿÿú$  ÿÿú     a!    ð LMT DMT IST BST GMT 
IST-1GMT0,M10.5.0,M3 €/1
TZif2A  @     & 3 ðs      ÿÿÿÿWÑ
 A›&­  0Ö  1œÏ0 1�¤Ã 1žœ� 1Ÿ— 1 …º( 1¡vü 1¢eœ 1£{È 1¤N¸ 1¥?û 1¦%` 1§'Æ 2¨*, !ëø( 2ª Ó !Õ 1«éð 1¬Çl 1­ÉÒ 1®§N 1¯ y0 1°‡0 1±’Ð 1²pL 1³r² 1´P. 1µIZ( 1¶0 1·2v 1¸ò 2¹X !ïÔ 1ºé 0 1»Øñ 1¼ÛW 1½¸Ó 1¾±þ( 1¿˜µ 1À› 1Áx— 1Âzý 1ÃXy 1ÄQ¤0 1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 @Ê&�€1Ê—Y 1ËÑ 1Ìw; 1Í±  @Î`X( 1Ï�â 1Ðn^ 1Ñr 1Ñû2 1Òiþh 1Óc)` 1ÔIà 1Õ! 1ÕBý8 1Õßà0 1ÖN¬  1Öþ  1Ø.Ž 1Øù• 2Úp !ëì 1Ûå( 1ÜËÎ 1ÝÄù 1Þ´ê 1ß® 1à”Ì 1árH 1âkt 1ãR* 1äT� 1å2 1æ=­  1ç) 1èTøè1ó¾è!Ó  è!¼½�è!œŸ è!|� è!\c è!<E è!' è!Cp è1(å% )è!Å è!¤é è!„Ë è!d­  è/ $  : @ /@ÿÿúü?@ `    ÊA  ¾¶pBDST CE ÓST 
CET-1CEST¼Ë//3ÄD�Ÿ      @]	Ë Ä´Àÿ²pL ÿÿÿÿ³r²� ÿÿÿÿ´P. @µIZ  1¶0 1·2v 1¸ò 2¹X !ïÔ 1ºé 0 1»Øñ 1¼ÛW 1½¸Ó 1¾±þ( 1¿˜µ 1À› 1Áx— 1Âzý 1ÃXy 1ÄQ¤0 1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 @Ê&�¨ 1Ê—Y 1ËÑ 1Ìw; 1Í±  @Î`X( 1Ï�â 1Ðn^ 1Ñr 1Ñû2 1Òiþh 1Óc)` 1ÔIà 1Õ! 1ÕBý8 1Õßà0 1ÖN¬  1Öþ  1Ø.Ž 1Øù• 2Úp !ëì 1Ûå( 1ÜËÎ 1ÝÄù 1Þ´ê 1ß® 1à”Ì 1árH 1âkt 1ãR* 1äT� 1å2 1æ=­  1ç) 1èT 1èû 1éýq 1êÚí 1ëÝS 1ìºÏ 1í³ú0 1îš± 1ï�g 1ðŸ} 1ñaI 1ò_ 1óJf 1ô_A 1õ!  1ö?# 1÷ ï 1ø 1øàÑ 1ùþç 1úÀ³ "ûè81ü{« ÀýÇ»p    pÆ  1)X 1P¨ 1	: 20Š !é 2	l !Èþ 1
ðN @² H 1Ð0 1‘ü 1° 1qÞ 1™. 1QÀ 1y 11¢ 1Xò @#ë�P 18Æ 1Í 2¨ !ã¯ 1øŠ 1Ã‘ @á§8 1¬® 1Á‰ 1Œ� 1¡k 1 lr 1!�M 1"LT 1#a/ 1$,6 1%JKX 1& 1'*- 1'õ4 2)
 !Õ 1*éñ 1+´ø 1,ÉÓ 1-”Ú 1.©µ 1/t¼ 10‰— o1]Ù $  : @ 1  @ÿÿÿµ[@ ð       LMT BST G ð
DST 
GMT0BST,M3.5.0/1,M10
 a
TZif2B  
@     % 3 @#   ˜ @Sº&› @¤so @ËÎQ` @ÌÀå`P @#Ý€ 1Î 2¿ !ó° _!Ó Ÿ_!¼½_!œŸ _!|� _!\c _!<E _!' _!Cp _1(å% )_!Å _!¤é _!„Ë _!d­  _? @  e eK1*0ã  ÝpHMT EES €T 
EET-2 ß3ß//4áD�Ÿ      á@]	ËÑ1›&­Ð"›Ö 1œÏ0 1�¤Ã 1žœ� 1Ÿ— 1 …º1¡vü 1¢eœ 1£{È 1¤N¸ 1¥?û 1¦%` 1§'Æ 2¨*, !ëø( 2ª Ó !Õ 1«éð 1¬Çl ð­ÉÒ ÿÿÿÿ®§N ÿÿÿÿ¯ y� ÿÿÿÿ°‡0  1±’Ð 1²pL 1³r² 1´P. 1µIZ( 1¶0 1·2v 1¸ò 2¹X !ïÔ 1ºé 0 1»Øñ 1¼ÛW 1½¸Ó 1¾±þ( 1¿˜µ 1À› 1Áx— 1Âzý 1ÃXy 1ÄQ¤0 1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 @Ê&�Ð 1Ê—Y 1ËÑ 1Ìw; 1Í±  @Î`X( 1Ï�â 1Ðn^ 1Ñr 1Ñû2 1Òiþh 1Óc)` 1ÔIà 1Õ! 1ÕBý8 1Õßà0 1ÖN¬  1Öþ  1Ø.Ž 1Øù• 2Úp !ëì 1Ûå( 1ÜËÎ 1ÝÄù 1Þ´ê 1ß® 1à”Ì 1árH 1âkt 1ãR* 1äT� 1å2 1æ=­  1ç) 1èT 1èû 1éýq 1êÚí 1ëÝS 1ìºÏ 1í³ú0 1îš± 1ï�g 1ðŸ} 1ñaI 1ò_ 1óJf 1ô_A 1õ!  1ö?# 1÷ ï 1ø 1øàÑ 1ùþç 1úÀ³ "ûè81ü{« ÀýÇ»p    pÆ  1)X 1P¨ 1	: 20Š !é 2	l !Èþ 1
ðN @² H 1Ð0 1‘ü 1° 1qÞ 1™. 1QÀ 1y 11¢ 1Xò @#ë�P 18Æ 1Í 2¨ !ã¯ 1øŠ 1Ã‘ @á§8 1¬® 1Á‰ 1Œ� 1¡k 1 lr 1!�M 1"LT 1#a/ 1$,6 1%JKX 1& 1'*- 1'õ4 2)
 !Õ 1*éñ 1+´ø 1,ÉÓ 1-”Ú 1.©µ 1/t¼ 10‰— o1]Ù $  : @ 1  @ÿÿÿµ[@ ð       LMT BST G ð
DST 
GMT0BST,M3.5.0/1,M10
 a
TZif2B  
@     % 3 �s      @V¶ÈØ @�‹õ˜ A›` 0Õ¾Ð @¢ecà @£{‚P 1¤N€  1¥?´  1¦%'  1§' 1ª((  1ªáý 1«ù‰  1¬Ã1@ 1È�? 1É 1ÉJõ0 1ÊÎ€ 1ËË® 1Òk	 1Ó¢9 1ÔC 1ÕL@ 1Ö){` 1×+ï 1Ø	] 1Ù—0 1Ùé? 1Úë³  1ÛÒ\@ 1ÜÔÐ  1Ý²> 1ñô¹ 1ôbï 1õh @ö8ÐP1n“ÿ29š  ûu A 	| 1	ÐË 1
ù^ @±þ€ 1Ù@ 1¤U 1¦­ 1„7 @øP( 1‰° @Ü°à @æÐð 1Æï 1›1  1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 1%
 1&û 1''P 1'õ 1(å	 1)Ôú 1*Äë 1+´Ü 1,¤Í 1-‹ƒ@ 1.„¯ 1/t  10d‘ 11]¼  12r— 13=ž 14Ry 15€ À62[ð    6ýbð�    8xp 0ÝDð 19ûZ 1:½& 1;Û< 1<¦C 1=» 1>†% 1?›  1@f 1A„8 1BEé 1Ccþ 1D%Ë 1ECà @FÉ�p AG#ß !îæ 2IÁ !ÎÈ 1Jã£ 1K®ª 1LÌ¿8 1M�Ý 1N¬¡ 1Onn  1PŒƒ 1QWŠ 1Rle 1S8¾  1TLG 1UN 2V>ž !÷0 WÏ.P ?/ , P  (ðh   *0     ð   8@LMT IMT EES ð	T +03 +04 
<+03>-3
TZif2G  @     & 3 ðŸ      ÿÿÿÿ]	Ë A›&­  0Ö  1œÏ0 1�¤Ã 1žœ� 1Ÿ— 1 …º( 1¡vü 1¢eœ 1£{È 1¤N¸ 1¥?û 1¦%` 1§'Æ 2¨*, !ëø( 2ª Ó !Õ 1«éð 1¬Çl 1­ÉÒ 1®§N 1¯ y0 1°‡0 1±’Ð 1²pL 1³r² 1´P. 1µIZ( 1¶0 1·2v 1¸ò 2¹X !ïÔ 1ºé 0 1»Øñ 1¼ÛW 1½¸Ó 1¾±þ( 1¿˜µ 1À› 1Áx— 1Âzý 1ÃXy 1ÄQ¤0 1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 @Ê&�€1Ê—Y 1ËÑ 1Ìw; 1Í±  @Î`X( 1Ï�â 1Ðn^ 1Ñr 1Ñû2 1Òiþh 1Óc)` 1ÔIà 1Õ! 1ÕBý8 1Õßà0 1ÖN¬  1Öþ  1Ø.Ž 1Øù• 2Úp !ëì 1Ûå( 1ÜËÎ 1ÝÄù 1Þ´ê 1ß® 1à”Ì 1árH 1âkt 1ãR* 1äT� 1å2 1æ=­  1ç) 1èT 1èû 1éýq 1êÚí 1ëÝS 1ìºÏ 1í³ú0 1îš± 1ï�g 1ðŸ} 1ñaI 1ò_ 1óJf 1ô_A 1õ!  1ö?# 1÷ ï "ø 1øàÑ 1ùþç  1úÀ³ "ûè81ü{« 1ýÇ»(@pÆ  1)X 1P¨ 1	: 20Š !é 2	l !Èþ 1
ðN @² H 1Ð0 1‘ü 1° 1qÞ 1™. 1QÀ 1y 11¢ 1Xò 1#ë(18Æ 1Í 2¨ !ã¯ "ø€1Ã‘ 1á§€1¬® 1Á‰ 1Œ� 1¡k 1 lr 1!�M 1"LT 1#a/ 1$,6 1%JKX 1& 1'*- 1'õ4 2)
 !Õ 1*éñ 1+´ø 1,ÉÓ 1-”Ú 1.©µ 1/t¼ 10‰— o1]Ù $  : @ 1  @ÿÿÿµã@  <€   6ðBST GMT BDST 
GMT0BST,M°3.5.0/1,M10
 
TZif2  @     ) 3 ðP      "ÿÿÿÿo¢[H A›` 0ÕÚð @œÙ®� 1�¤µ 1ž¹� 1Ÿ„— 1È	q @ÌçK( 1Í© 1Î¢C 1Ï’4 1Ð‚% 2Ñr 0|wà0 1Ñ•„p @ÒŠ­P @ÓY¶àÀ @'§Ð @Ü@ 0Û° P úÀ 1ê  1ÛC  1Ì“ @¼ ð  1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 0%O A &
 @'5€	 1'õ& 1(å 1)Õ 1*Äù 1+´ê 1,¤Û 1-”Ì 1.„½ 1/t® 10dŸ 01]ËW A 2r¦ 13=­ 14Rˆ 15� 262j !ýq 18†@ 18ÝS 19ûh 1:½5 1;ÛJ 1<¦Q 1=», 1>†3 1?› 1@f 1A„+8 1BE÷ 1Cd 1D%Ù 1ECï 1F» 1G#Ñ 1GîØ 2I³ !Îº 1Jã• 1K®œ 1LÌ±8 1MŽ~ hTL+p [ / `  8] ð    	  *0      8@ !  €LMT CES 0T E	 ÿEET MSD MSK +03 
EET-2ˆD&ˆ@V¶Çd1ª§ 1µ¤ @ÊÍ.Ð Ìh@ÎÍ¨pô 8w
@2&û !� Ø00Ôì`° 1*ÄÏØ1+´Î 1,¤± 1-”° 1.„“ @/t¼�0 10d­ Þ1]Ù % 1  {Aœ ö !   KM	 @K CES D )",M«3«//4%D�?      =@¡ 9€1µ¤1'™@Î0%1Í@ú° 1ê   1Û5  1Ì… 1¼’•1¬ƒ 1œt 1Œe 1|V 1 lG 1!\8 1"L) 1#< 1$, *%õ1''•1'õ )õë 1+´Ü 1,¤Í 1-”¾ 1.„¯ 1/t  10d‘ 11]¼M12r— 13=ž 14Ry 15€ 262[ !ýb 18x@ 18ÝD 19ûZ 1:½& 1;Û< 1<¦C 1=» 1>†% 1?›  1@f 1A„8 1BEé 1Ccþ 1D%Ë 1ECà 1F­ 1G#Â 1GîÉ 2I¤ !Î« ðJã†ð    K®�ð    ÀLÌ£p    MŽoð {TL` P  `  .˜K ð*0   FP  8@  ðLMT +03 +05 +04 
<+03>-3
TZif28  @     & 3 ð‹      ÿÿÿÿ^= @’æŽ€ A›Kmp !þÇ 1œœí 1�Éƒ 1žr @Ÿª¶ð( 1 _T 1¡‹ê 1¢AÙ 1£no 1¤#( 1¥O¢ 1ªï 1ªôŽ 1­É§ 1®§# 1¯ O  1°‡ 1±‰k 1²p" 1³rˆ 1´P 1·2L 2¸È !ÿ¹ 1¹ïª 1¼È·@ 1½¸¨ 1¾Ÿ_ 1¿˜Š 1Àšð 1Áxl 1Âh] 1ÃXN 1Ä?0 1Å80 1Æ:– 1ÇX¬ 1ÇÙß 2É/ !ñ  1Êâb( 2ËµR 0ì£à02Ì€K Ü1Í•4  @ÍÃK`  1Îr¢  1ÎÅ¿H 1Ïu  1Ï¬g 2ÐR„ !¥¡  1ÑTø  1ÑŒI 2Ò2f …°1ÓYÄ  1ÔIµ @Õ9Ñ h 1Ö)Â 1×³ 2Ø	¤ !ù• 1Ùé† 1Ü¹Y @Ý²„ 8 1Þ¢u 1ß’f 1à‚W 1árH 1âb9 1ãR* 1äB 1å2 1æ!ý 1ç)X 2è !û 1éêü 1êÚí 1ëÊÞ 1ìºÏ 1íªÀ 1îš± 1ïŠ¢ 1ðz“ 1ñj„ 1òc¯h 1óS  1ôC‘ 1õ3‚ 1ö#s 1÷d 2øU 0óF H0«* A › 1‹ @„7€	 1t( 1d @T� 1Cû 13ú 1#ë 1Ü 2Í !ó¾ 1ã½p 1Ó  1Ã‘ @¼½P 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ 1]Ù  H : & ! Pÿÿ÷cG@ á 	       pWEST WE PMT CE €ST 
WET0 Ð,M3.5.0/1,M10
 œD�$      l@^<ðH 1Ê5Ô@ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‚% 1Ñ¡Œ 1ÒN@”1ã¯ d¹b@  8õ v@ ëÝðCET-1CEST,M3.5.0,M10.5.¯0/3
TZif2  @     ) 3 ðŸ      ÿÿÿÿ]	Ë A›&­  0Ö  1œÏ0 1�¤Ã 1žœ� 1Ÿ— 1 …º( 1¡vü 1¢eœ 1£{È 1¤N¸ 1¥?û 1¦%` 1§'Æ 2¨*, !ëø( 2ª Ó !Õ 1«éð 1¬Çl 1­ÉÒ 1®§N 1¯ y0 1°‡0 1±’Ð 1²pL 1³r² 1´P. 1µIZ( 1¶0 1·2v 1¸ò 2¹X !ïÔ 1ºé 0 1»Øñ 1¼ÛW 1½¸Ó 1¾±þ( 1¿˜µ 1À› 1Áx— 1Âzý 1ÃXy 1ÄQ¤0 1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 @Ê&�€1Ê—Y 1ËÑ 1Ìw; 1Í±  @Î`X( 1Ï�â 1Ðn^ 1Ñr 1Ñû2 1Òiþh 1Óc)` 1ÔIà 1Õ! 1ÕBý8 1Õßà0 1ÖN¬  1Öþ  1Ø.Ž 1Øù• 2Úp !ëì 1Ûå( 1ÜËÎ 1ÝÄù 1Þ´ê 1ß® 1à”Ì 1árH 1âkt 1ãR* 1äT� 1å2 1æ=­  1ç) 1èT 1èû 1éýq 1êÚí 1ëÝS 1ìºÏ 1í³ú0 1îš± 1ï�g 1ðŸ} 1ñaI 1ò_ 1óJf 1ô_A 1õ!  1ö?# 1÷ ï "ø 1øàÑ 1ùþç  1úÀ³ "ûè81ü{« @ýÇ»p˜@pÆ  1)X 1P¨ 1	: 20Š !é 2	l !Èþ 1
ðN @² H 1Ð0 1‘ü 1° 1qÞ 1™. 1QÀ 1y 11¢ 1Xò @#ë�P 18Æ 1Í 2¨ !ã¯ 1øŠ 1Ã‘ @á§8 1¬® 1Á‰ 1Œ� 1¡k 1 lr 1!�M 1"LT 1#a/ 1$,6 1%JKX 1& 1'*- 1'õ4 2)
 !Õ 1*éñ 1+´ø 1,ÉÓ 1-”Ú 1.©µ 1/t¼ 10‰— o1]Ù $  : @ 1  @ÿÿÿµ[@ ð       LMT BST G ð
DST 
GMT0BST,M3.5.0/1,M10
 ?D�d      @„¢­¼ A›Œ` 0ÕÚð @œê§à @�¤™p 1ž¹�g2Ÿ„— !àÄ 1 `¥0 1¡~å/1¢. 1£zi�1¤5� 1¥^?8 1¦%5 @§'ª X 1¨* 1©š0 1©î4X 1ªçn  1«Ø¢ 1¬ÇP 1­É§0 1®§2 1¯ O  1°‡ 1±‰k  @²p0€` 1³rˆ  G1¸ÿãÈ ¹G!Ö‹G!Èâ G!Ÿ‰0 GÀÿÿÀ› ÿÿÿÿÁx‘— ÿÿÿÿÂhˆ 1ÃXy @Ä?/  1Å8[ 1Æ:Á 1ÇXÖ 1ÇÚ	 1ÈB0 @ÌçK0 @Í©� 1Î¢C 1Ï’4 1Ðo° 1Ñr 1ÒN@( 1Ó‘@ ±ÔK#�    ¤c @‹ 1„E 1t6 1d' 1T 1MD( 13ú 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ a1]Ù / Q6 <  @  Ä�     	        ° LMT CES 0T W	  WET 
CET-1 °,M3.5.0,M10 �/3
TZif2I  
@     % 3 �O      �@~6µ  @žºÅð 1Ÿ 9 1 � @¡�l€ Aªïp !çn  1­É§  1®§2 1¯ O  1°‡ 1±‰z 1²p0@ 1³rˆ  1´P 1ÂÉì@ 1ÃX]( 1ÄH? @Ämàh @Å9t` 1Ç![0 1ÇõŽ  1ËõÞ 1Ì•q 1ÍÃK 1Î Õ` 1Ï£- 1Ð€· 1Ñƒ 1Ò`™ 1Óbñ 1Ô@{ 1ÙFp @Ùé[ð@AÍà 0ô’p 1	í¯ 1
Ôt 1» 1«0 @¤9`( 1Šý —ÿ[_ %AÿÿüŒƒ‚   ‚ pR   ‚|s(WEŠ�_PV   Ó á@p½Ód 1›8ø‘1›ÕÌ‘1œÅËá1�· ±1ž‰þ  1Ÿ   1 `¥  1¡~­  1¢\7  1£L 1Èl5  €!�âh1Ðn^ €!LÒ8 1Ó>1 1ÔIÒˆ1Õ÷` 1Ö)—  1Öë€  1Ø	–  1ù3µ 1ùÙÄ  1ûÒ0 1û¹´ 1üü´ 1ý™– 1þåÐ 1ÿ‚³Y1 Å²A1b• 1œZ 1Bw 1…v  1+“ 13 1
$ 2 !Ú4 1	÷@
Â€1Öö 1¡ï 1¶Ø 1�Ñ ð–º�    a³€    v œ�    A•€ @E[ 0*² A #ë  1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ o1]Ù A@  œSð    	LMT CES €T 
CET-1 °,M3.5.0,M10 €/3
TZif2<  @     & 3 ð#      ÿÿÿÿSº&› @¤so @ËÎQ` @ÌÀå`P 1#Ý 1Î 2¿ !ó° Á? @  e eK *0    ÛPHMT Eß EET 
EET-2 ß%/3á4áD�D   	   &É@V¶Ê( @ªª8 1µ¤á@Ê^pÐ @ÌçK @Í©� 1Î¢C 1Ï’4 2Ð
	0'§Ðò @Ü@ AÛP 0úÀ 1ê  1ÛC  1Ì“ @¼ ð  1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 1%
 @'õpX 1(å‰1)Õ 1*Äù 1+´ê 1,¤Û 1-”Ì 1.„½ 1/t® 10dŸ 01]ËO A 2r¦ 13=­ 14Rˆ 15� 262j !ýq 18†@ 18ÝS 19ûh 1:½5 1;ÛJ 1<¦Q 1=», 1>†3 1?› 1@f 1A„+8 1BE÷ 1Cd 1D%Ù 1ECï 1F» 1G#Ñ 1GîØ 2I³ !Îº 1Jã• !K®†A LÌ±8 íMŽ~  / A  y  È
¡    *0 ë€  8@     "(M(€T MSK CES D=¿+03 
<+03>-	E�f      ø@nŸ” @‘xO A›Gxð 0×,p 1œ¼‘ 1�ÀH 1ž‰þ 1Ÿ * 1 `¥ 1¡€ 1¢. 1£zL 1¤5� 1¥^#8 1¦%5 1§'› 1¨X& 1©} 1©î4 1ªç_ 1«×P 1¬ÇA 1­É§ 1®§# 1¯ O0 1°‡ 1±‰k 1²p" ð³rˆpÿÿÿÿ´Ppÿÿÿÿµ°I/ðÿÿÿÿ¶/æp 1·2L 2¸È !ÿ¹ 1¹ïª 1ºÖ`0 1»ØÆ 1¼È· 1½¸¨ 1¾Ÿ_( 1¿˜Š 1Àšð 1Áxl 1Âh] 1ÃXN 1Ä?0 1Å80 1Æ:– 1ÇX¬ @ÇÚ	 ˜ 1Ê[ @ÊâTà 1Ë­i @ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‰ñ( 1Ñr °ÒN@�    »9 P «ð	 1¤c @‹ 1„E 1t6 1d' 1T 1MD( 13ú 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ 1]Ù # / @  ì’ 1    �      Ð LMT PMT WES   @MT C  CET 
CET-1 °,M3.5.0,M10 �/3
TZif2X  
@     % 3 Ni@   &š@V¶ÀÇ 1›_ @�>òy Až*îù 0÷9i 1Ÿ„W @ Ølé A¡ 9€ 0<¦@ A¤mÀ 0=2° 2¥h != @§EP @µ¤`¨ @'§Ð @Ü@ AÛP 0úÀ 1ê  1ÛC  1Ì“ 1¼ 1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 1%
 1&û @''p€ 1'õ @(å€ 2)x¿ !Ôú 1*Äë 1+´Ü 1,¤Í 1-”¾ 1.„¯ 1/t  10d‘ 11]¼h 12r— 13=ž 14Ry 15€ 262[ !ýb 18x@ 18ÝD 19ûZ 1:½& 1;Û< 1<¦C 1=» 1>†% 1?›  1@f 1A„8 1BEé 1Ccþ 1D%Ë 1ECà 1F­ 1G#Â 1GîÉ 2I¤ !Î« 1Jã† 1K®� 1LÌ£8 1MŽo @TL`š¯j	 —Q
  #- #9‚ 1‡‚ #w €?—  8@ˆ *0   FP”€   *0!   š MMT MST MD ðSD MSK +05 EET E¥_
MSK-ŒE�1      @¥w¸l@	í¯à 1
Ý’ô1úd 1¾Æ$1¤9D1Šá  1„ 1uO 1cý 1Sà0 1M@ 13Â 1#Á  1¤ 1£ 1ó† 1ã… 1Óh 1Ãg 1¼„` 1¬ƒP 1œf 1Œe 1|H 1 lG 1!\* 1"L) 1#< 1$, 1%î ð&íà    'P    'õ
�`    (äíP 1)Ôì 1*ÄÏ 1+´Î 1,¤± 1-”° 1.„“ 1/t’ 10du @1]®àH @2M‘Ð 13=� 14-s 15r o62x @  HU ð*0    	LMT EES €T 
EET-2 Ñ,M3.5.0/3,M10
 p4
TZif2>  @     & 3 ð:      ÿÿÿÿrî$l A›'ã  0Ô{` 1È·M @ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‚% 1Ñr 1Òb 1ë¯ 0 1ì¨L 1í˜= 1îˆ. 1ïx 1ðh 1ñX 1òGò 1ó7ã 1ô'Ô 1õÅ 1öðX 1÷/ @÷ðÒ�ø @MD 13ú 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ ?1]Ù�Í@  
>  ¦"¦C¦ CET 
CET-1 ¦¤3¤D�e      t@kÉ›Ï @‘`PO A›Gxð 0×,p 1œ¼‘ 1�ÀH 1ž‰þ 1Ÿ * 1 `¥ 1¡€ 1¢. 1£zL 1¤5� 1¥^#8 1¦%5 1§'› 1¨X& 1©} 1©î4 1ªç_ 1«×P 1¬ÇA 1­É§ 1®§# 1¯ O0 1°‡ 1±‰k 1²p" 1³rˆ 1´P 1µI/  1¶/æ 1·2L 2¸È !ÿ¹ 1¹ïª 1ºÖ`0 1»ØÆ 1¼È· 1½¸¨ 1¾Ÿ_( 1¿˜Š 1Àšð 1Áxl 1Âh] 1ÃXN 1Ä?0 1Å80 1Æ:– 1ÇX¬ @ÇÚ	 x@Èl'à $!Oá( 1Ð‰ñH ,!N@¼0»9}P «ð	 1¤c 1‹41„E 1t6 1d' 1T üñ? €  @  1¡ 1         ß! åPPMT WC@WET G AO WEMQ#À            C    �    TZif2	  ð$      ÿÿÿÿ^<ðH @Ê5à @ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‚% 1Ñ¡Œ @ÒN@�k 1ã¯ 1Ó  1Ã‘ @¼½  1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ o1]Ù @  8à ð    LMT CE ð	ST 
CET-1CEST,M3.5.0,M10 ?/3
« Z Þ�=      ¾@I’ø 1lÏê @›` @›ÕÚð 1œÙ®æ1�¤µ 1ž¹� 1Ÿ„— 1È	q "r!b 1Ó€@ 1ÔIÒ @Ô“´ x 2Õr !L8 1Ö)´ 1×, 1Ø	– 2Ùp !éxî1d'ž1T 1MD 13ú 1#ë 1Ü 2Í !ó¾ ¦Â+     @  ˆe$ˆ¿`     ËPÏSÐOT GMÓa�5   	   &;@V¶Í^ @ž¹‡þ 1Ÿ„Ž @ ˆF~ 1 Ë‚ @­çñÞ 1È¯dó@ÊbeP Ë@Ð�‰p@'§Ð @Ü@ AÛP 0úÀ 1ê  1ÛC  1Ì“ @¼ ð  1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 0%O A &
 @'5€	 1'õ& 1(å 1)Õ 1*Äù 1+´ê 1,¤Û 1-”Ì 1.„½ 1/t® 10dŸ 01]ËW A 2M¼ 13=»c14R– 15� "62“16ý 18”c2:½C9@ + / @  ¢r  ¢‹@$²P�   *0 — €  8@  !£ö RMT LST EET MSK~`MSD EE‡PEET-2 ‡%/3‰4‰D0W  É   v@>(èL @p¼�p 2›8ø !ÕÌw1œÅË‘1�· ®1ž‰þ  1Ÿ   1 `¥  ð¡~­`ÿÿÿÿ¢\7pÿÿÿÿ£L `ÿÿÿÿÈl5ð @ÌçK @Í©� 1Î¢C 1Ï’4 1Ðn^ 1Ñr 1ÒLÒ8 1Ó>1 1ÔIÒ @Õ÷p@ 1Ö)—  1Öë€  1Ø	–  1ù3µ @ùÙÄà( 1ûÒ0 1û¹´ 1üü´ 1ý™– 1þåÐ Pÿ‚³p  0Å²ð 1b• 1œZ 1Bw 1…v  1+“ 1n“ 1u 2E: !ëW 1
.W  1
Ë9 19 1« 1äà 1Šý 1Íý  1t 1­ß 1Sü @MD  @3ú� 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ 1]Ù A@  ´Sð´       LMT RMT CES €T 
CET-1 °,M3.5.0,M10 €/3
TZif2F  @     & 3 �@      ã@¡ 9€Û@µ¤P@ @'™À @Î0 0Í0 P ú° 1ê   1Û5  1Ì… @¼’à  1¬ƒ 1œt 1Œe 1|V 1 lG 1!\8 1"L) 1#< 1$, 1%
Ã1&û 1''³1'õ @(å€p 0) Ç P )Ôì`	 1*ÄÝ 1+´Î 1,¤¿ 1-”° 1.„¡ 1/t’ 10dƒ 11]®x 12r‰ 13=� 14Rk 15r 262M !ýT 18j@ 18Ý6 19ûL 1:½ 1;Û. 1<¦5 1=» 1>† 1?šò 1@eù 1A„8 1BEÛ 1Ccð 1D%½ 1ECÒ 1FŸ 1G#´ 1Gî» 2I– !Î� 1Jãx 1K® 1LÌ£@]MŽoðú^ !q  .ôt0äà8@   FP  8@ð@*0ðÿ+03 +04 +05 
<+04>-4ÜD0W  Œ   Ô@>(èL 1p¼�§2›8ø !ÕÌÏ1œÅË¯1�· _1ž‰þ  1Ÿ   1 `¥  1¡~­  1¢\7  /£L�ÿSÀ #ë�    Ü‚�    Í !ó¾ 1ã¯ 1Ó  1Ã‘ @¼½0 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ 1]Ù A@  ´ð´       LMT RMT CES €T 
CET-1 °,M3.5.0,M10 €/3
TZif2F  @     & 3 ð$      ÿÿÿÿ^<ðH @Ê5à @ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‚% 1Ñ¡Œ 1ÒN@KÂ/ @  8x$è â CEÝSÞa�@      ž@¡ 9€Æ@µ¤P¦ @'™À @Î0 0Í0 P ú° 1ê   1Û5  1Ì… @¼’à  1¬ƒ 1œt 1Œe 1|V 1 lG 1!\8 1"L) @#<(ð@ 1$, 1%
 1&û @''p  1'õ @)Ôì` 1*Äë 1+´Ü 1,¤Í 1-”¾ 1.„¯ 1/t  10d‘ 11]¼X 12r— 13=ž 14Ry 15€ 262[ !ýb 18x@ 18ÝD 19ûZ 1:½& 1;Û< 1<¦C 1=» 1>†% 1?›  1@f 1A„8 1BEé 1Ccþ 1D%Ë 1ECà 1F­ 1G#Â 1GîÉ 2I¤ !Î« 1Jã† 1K®� 1LÌ£8 1MŽo 1TL8LXCNpÙ    a  +| *0Ú FPÂ 8@   8@æÿ+03 +05 +04 
<+04>-4´D�K   	   "Î@V¶Ä @ª¤  @µ¤` @Ë�Ð Ä"ÏŸž@'§Ðf2Ü!Û&1úö1ê  1ÛC  1Ì“ 1¼ n1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 !�.  þÏ� 1+´ÎÖ1,¤± 1-”° 1-ÂÆ� 1.„…  1/t„  10dg 11]   02r¦ç A 3=»O14R– 15� 162x À6ý    8”�€    8Ýa @9ûv� 1:½C 1;ÛX 1<¦_ 1=»: 1>†A 1?› 1@f# 1A„98 1BF 1Cd 1D%ç 1ECý 1FÉ 1G#ß 1Gîæ 2IÁ !ÎÈ 1Jã£ 1K®ª 1LÌ¿8 1MŽŒ 1N¬¡ 1Onn 1PŒƒ 1QWŠ 1Rle @S7^€Ø íTL`        `  øW ðà       *0     €  8@   ð
 LMT SMT EET MSK CET CES 0D E	 À
MSK-3
TZif2`  @     & 3 ð$      ÿÿÿÿ^<ðH @Ê5à @ÌçK @Í©� 1Î¢C 1Ï’4 1Ð‚% 1Ñ¡Œ 1ÒN@a1ã¯ 1Ó  1Ã‘ 1¼½™1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ o1]Ù @  8x" ÞÒ`
CET-1Ý°,M3.5.0,M10 /ÞE�-      ¾@V¶Î$ @rÃã Þ0r$ Ö @cïP @U?à @MÐ 15! 1,í @Àp 1Ï 1ó°o1ã¡ 1Ó’ 1Ãƒ 0¼¯/ A ¬  1œ‘ 1Œ‚ 1|s 1 ld 1!\U 1"LF 1#<7 1$,( 1% 1&
 1'5h @'õ
` 1(äíÈ 1)Ôì 1*ÄÏ 1+´Î 1,¤± 1-”° 1.„“ 1/t’ 10du 11]®ø 12r{è ß3=» @  Ü‘ "h/ 1 1A %AIIPEET-2 N%/3P4.D0%  «   @@TÕŸ” @|Usb A›Œ` 0ÕÚð× 1MD–13úF1#ë 1Ü 2Í !ó¾ 6Ã/ @  ì1 ] 2 ADÀ              ð4      "ÿÿÿÿV¶ÌÌ 2žY- 0¹�� 1Ÿ„— @¡ +p @¤soL @È°µà @ÊÆ—P @ÌçK 1Í©0 1Î¢C 1Ï’4 @ÐtËà @'§Ð @Ü@ AÛP 0úÀ 1ê  1ÛC  1Ì“ @¼ ð  1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 0%O A &
 @'5€	 1'õ& 1(å 1)Õ 1*Äù 1+´ê 1,¤Û 1-”Ì 1.„½ 1/t® 10dŸ 01]ËW A 2r¦ 13=­ 14Rˆ 15� @62x	 16ý @8”� û<¦_� / 0  à  Ð       à   *0   8@ ÐLMT TMT CES ð T EET MSK MSD E `
EET-2 Ñ,M3.5.0/3,M10
 p4
TZif2±  @     & 3  R P   [@–ª4h 1Èm‡‹s1Í¸é31(9ã@ï>`h 1
x 1
Ðqƒ@éOp 1´H  1Òk  1”* 1°ü  1t 1�Þ 1Sî 1pÀ 1;¹ 1H¹ 1² 11ÕP 1üÎp 1 ”  1Û_  1Ì¯  1¼½ë1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'C1'õ4 1(å% 1)Õ 1*Å 1+´ø ",¤@1-”Ú 1.„Ë 1/t¼ 10d­ o1]Ù @  ˜v3 ‘ s CEn�ST 
CET-1~^\3\D�<   	   &T@V¶Èø @žkŸ @·°Ò A¹>ó` !ïœ 1ºß� 1»Ï~ 1¼È©1½¸š 1¾¨‹ 1¿˜| 1Àˆm 1Áx^ 1ÂhO 1ÃX@ 1ÄH1 1Å8" 1Æ( 1Ç 1È¼“h ?Êw}g!N�dgw
ì2&û !CLo!ÔìÀ 1*ÄÏ1+´Î 1,¤± 1-”° 1.„“ 1/t’ 10du 11]®` 12r{7 oL F. * 0  #0 ô¶ x1D*0G G  G@8@M! "ÚPMT BMHS  ç  SVDZQóAÀ            ð B      ÿÿÿÿ¡ 9€ Àµ¤P    '™À @Î0 AÍ@ 0ú° 1ê   1Û5  1Ì… @¼’à  1¬ƒ 1œt 1Œe 1|V 1 lG 1!\8 1"L) 1#< 1$, @%
ðP 1&û @''p 1'õ @(å€ 2)x¿ !Ôú 1*Äë 1+´Ü 1,¤Í 1-”¾ 1.„¯ 1/t  10d‘ 11]¼h 12r— 13=ž 14Ry 15€ 262[ !ýb 18x@ 18ÝD 19ûZ 1:½& 1;Û< 1<¦C 1=» 1>†% 1?›  1@f 1A„8 1BEé 1Ccþ 1D%Ë 1ECà 1F­ 1G#Â 1GîÉ 2I¤ !Î« 1Jã† 1K®� 1LÌ£8 1MŽo @TL`H{V÷p p  a  -N ð*0   FP  8@  ð!  *0    LMT +03 +05 +04 +02 
<+04>-4
TZif2–  @     & 3 %øð@jî° @È	q� @ÌçK 1Í© 1Î¢C 1Ï’4 @Ð¡žà  1Ñåý8@'§Ðx 2Ü !Û@1ú1ê  1ÛC  1Ì“ 1¼ @ 1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, (!�. @'õB ˜ 2)ÔìŠ!ÄÏ˜ 1+´Î 1,¤± 1-”° 1.„“ @/t¼�8 10d­ a1]Ù - 4 @  è9  ó" ó í! í  óðCET CEST MSD MSK EET E `
EET-2 Ñ,M3.5.0/3,M10
 IP   Ú1$ðê
@qÔ† AÊj  !âq 1Ë÷L 0ÌÂSð A #ë*1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ @¼½A 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë  0 0  à 6 ú@  #BM  	`
CET-1óñ3D0W  ” ñ@>(èLá@p¼�p 2›8ø !ÕÌë@œÅËð @�· ` 1ž‰þ  1Ÿ   1 `¥  1¡~­  1¢\7  1£L 1Èl5  [!n^s1Ñrk1ÒLÒ8 1Ó>1 1ÔIÒ 1Õ÷` 1Ö)—  1Öë€  1Ø	–  1ù3µ 1ùÙÄ  1ûÒ0 ð û¹´ðÿÿÿÿüü´pÿÿÿÁÿý™–ðÿÿÿÿþåÐ Pÿ‚³p  0Å²ð 1b• 1œZ 1Bw 1…v  1+“ 1n“ 1u 2E: !ëW 1
.W  1
Ë9 19 1« 1äà 1Šý 1Íý  1t 1­ß 1Sü @MD  @3ú� 1#ë 1Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ 1¼½H 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ 1]Ù A@  ´Sð´       LMT RMT CES €T 
CET-1 °,M3.5.0,M10 €/3
TZif2F  @     & 3 �8      ³@o¢_/ A›` !ÕÚÃ@œÙ®� 1�¤µ 1ž¹� 1Ÿ„— @¢p  1£D[ 1È	q 1ÌçK 1Í© 1Î¢C 1Ï’4 1Ð‚% 2Ñr !E 1Óc0 1ÔK# 1Õ9Ã 1Ö)´ "×,p 1Ø	–1M'ã@3Ð`ø »á/ #@  Q4A –	– ƒ? CE’a�3   	   &R@V¶ÌD @œOP @¡…J˜ 1¢ñ0š1£fxª@È¬Ïp @ÊY*Ð z00=àö @'§Ð @Ü@ AÛP 0úÀ 1ê  1ÛC  1Ì“ 1¼ r1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 0%o A &
 @'5€	 1'õ& 1(å 1)Õ 1*Äù 1+´ê 1,¤Û 1-”Ì 1.„½ 1/t® 10dŸ 01]ËW A 2r¦ 13=­ 14Rˆ 15�R262x !ý 18”%û>†A� , �  ¼`  °2h €   *0  €  8@  !‰QWMT K#’T EET MSK/PMSD E8`
EET-2 4%/3646D�A      Žà¡õFÜÿÿÿÿµ¤P  à  '™À    Î0 AÍ@ 0ú° 1ê   1Û5  1Ì… @¼’à  1¬ƒ 1œt 1Œe 1|V 1 lG 1!\8 1"L) @#<(ð@ 1$, 1%
 1&û @''p  1'õ @)Ôì` 1*Äë 1+´Ü 1,¤Í 1-”¾ 1.„¯ 1/t  10d‘ 11]¼X 12r— 13=ž 14Ry 15€ 262[ !ýb 18x@ 18ÝD 19ûZ 1:½& 1;Û< 1<¦C 1=» 1>†% 1?›  1@f 1A„8 1BEé 1Ccþ 1D%Ë 1ECà 1F­ 1G#Â 1GîÉ 2I¤ !Î« 1Jã† 1K®� 1LÌ£8 1MŽo 1TL81[Ôí y_ç²`     �  )¤�ð 0   8@   FP ðLMT +03 +04 +05 
<+03>-3
TZif28  @     & 3 ðR      ÿÿÿÿV¶ÐP @™¨*Ð A›` 0ÕÚð @œÙ®� 1�¤µ 1ž¹� 1Ÿ„— @ š¶   1¡e½ 1¦}|@ @ÈvÞ 1ÌçK 1Í©0 1Î¢C 1Ï’4 1Ð„º8 @Ñ•’p0 1ÒŠ»@ 1Óbÿ 1ÔK#8 1Õ^­0 1Ö)´ 1×, 1Ø	– 1ÙÁ( 1Ùéx 1èTÒX @èñ´€X 1éá¥ 1êÑ– 1ì–  1ìº³ 1íª¤ 1îš• 1ïÔZ 1ðzw 1ñ´< 1òZY 1ó” 1ô:; 1õ}:X 0ö‡P ¤U€	 0‹ A „7 1t( 1d 1T
 1M6( 13ì 1#Ý 1Î 2¿ !ó° 1ã¡ 1Ó’ 1Ãƒ 1¼¯H 1¬  1œ‘ 1Œ‚ 1|s 1 ld 1!\U @"LT	 1#<E 1$,6 1%' 1& @'C�( 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë 1/t¼ 10d­ R1]Ùf2	  /1  • °xð      *0    ~pWMT CES 0T E	  EET 
CET-1 °,M3.5.0,M10 /›E�$      ³@^<ðH @Ê5à K!‚%û1Ñ¡Œ 1ÒN@[1ã¯ 1Ó  1Ã‘ 1¼½Ó1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c +r V @  8«$ý ë CEæSÞÀ              @      PTZif2	  ð'      $ÿÿÿÿV¶Ã @ª£0 @µ¤` @ÊªçÐ @ÌçK @Í©� 1Î¢C @Î½Öpc @'§Ð @Ü@ AÛP 0úÀ 1ê  1ÛC  1Ì“ @¼ ð  1¬‘ 1œ‚ 1Œs 1|d 1 lU 1!\F 1"L7 1#<( 1$, 1%
 1&û 1''  1'õ 1(äí˜ @)Ôì`x 1*ÄÏ 1+´Î 1,¤± 1-”° 1.„“ @/t¼�0 10d­ ß1]Ù  % @   ø; ð Ð     
  *0     €  8@ ðLMT +0220 EET MSK CET CES 0D E	 `
EET-2 Ñ,M3.5.0/3,M10
 /4
ý ‘  ,    3 0%  Á    @$ðê€ @qÔ† AÊj  !âq 1Ë÷L 0ÌÂS_ A #ë81Ü 2Í !ó¾ 1ã¯ 1Ó  1Ã‘ @¼½A 1¬® 1œŸ 1Œ� 1|� 1 lr 1!\c 1"LT 1#<E 1$,6 1%' 1& 1'Ch 1'õ4 1(å% 1)Õ 1*Å 1+´ø 1,¤é 1-”Ú 1.„Ë  / „@  ú]A #BMø `
CET-1óñ3ñDñÙ@‹ÿÑü @±îÚX 1´Çà1Áí­ ÐÌlzÔ  "„² #(Ñ  *0ï@&¬ Ñ �+0230 EAá�45 
EAT-¿ E�      ¯ @‰~÷œ–  0æÝ°  Cä  FP¤ BT` ž ï5 +06 
<+06>-6WD s œ p�s©ä  c� Bbp ‰ 7… O7>-7… L
�|U&¤  ZÜ… $[h… 1630‡ Ÿ630>-6:30Œ Dh¬	Ð@Úab€  J _q-00 +05IO5>-5D.À              ð      ÿÿÿÿ‰„  3ü ð8@ LMT +04 
<+04>-4
TZif2   V    & 3  � P   … @V¶Ÿ  í/Ã˜  DèF  Dè   FP ” M˜ 5˜ O5>-5˜ DE   ˜ @‰˜Š Aí@ 0Ûr0 AI–à `Î�Ð³ 5³ ‚FP  8@³ ?+05KQ ³ P   C@‹ÿÑü @±îÚX @´ÇàÐ 1Áí­ ÐÌlzÔ  "„Ä  #(f *0 
  &¬ l€+0230 EA
¯245 
EAT-3rD 5 �€‘Ì9€  4š  H�U�^      ‡@¥¶ö€4@©yOp @¯ò|ð 1¶fd @·  1¸
ò 1Ëê�0 1Ò#ô  1Ò™º 1×Y( 1Ø‘´( @â~K�8 1ãIR 1ä^- 1å)4 @æGJ  1çQ 2è', !ò3 2ê !Ò 1ëæð 1ì±÷ 1íÆÒ @î‘ÙA@à¯  1ÙÍ 1À‘ 1¹¯ @©®   1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 @"S�H 1	 15 1ò4p 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç 1:Æü 1;ÛÉ 1<°p 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm 1F‚ 1G$O 1GøŸp 1I1 1IØ� 1Jä @Kœ³ ¾o Aðÿÿ’L  ÿÿ�� ÿÿ�€t@�� ! qPMST P ÿDT PWT PPT 
PST8PDT,M3.2.0,M11.1.0†D@   IE1¥¶èÁ@¯ònà‘@¶fV` 1·CÒ 2¸6 !ý†Ù1Ëêq  é 	@  p€ 11g„É12s 13Gf 14Rø 15'H 162Ú 17* 08÷? A 8ç 19ûÙ 1:õ¹1;¶Ñ @<°
�Á Ñ( ðÿÿœ<  ÿÿ�� ÿÿ«  ÿ0ÿÿ�€ ÿÿ« LMT MST CST PST MDT 
MST7MDT,M4.1.0,M10.5.0
TZif2   @     ( 3 ð      ÿÿÿÿ¥¶èp @¯ònà @¶fV` 1·CÒ 2¸6 0ý†ð 1ÅÞ° @Æ—4P 1ÉUñ8 1ÉêÝ 1ÏÆ 1Ï·V 1Ú™ @ÛvƒÐ  01gv P 2sp	 03GX A 4Rê 15': 162Ì 17 @8èð	 08æþ A 9ûÊ @:õ€ 1;¶Â `<¯ü€ `  Àÿÿ£  ÿÿ�� �� ÿÿ¹° 	œïCDT CWT 
CST6CœU�      \@n=É  1‘ü @Úb8ì @LŸ'° @M—+à AN}â` 0ý‹  ðOwà  °€ñ  _   ^H÷ ðs`
ÿÿeP   ¶Ð   Äà™€-1130 -1 ð1 +13 +14 
<+13>-13<+14>,M9�#/3®//4¨D Ô P   @A·L¨ @°´²è @±Q‡X @²xåh 1³Cå˜1´XÇ 1µ#Ç 1¶8© 1·© 1¸‹ 1¸ìÅ˜1¹øm 1ºÌ§ 1»ØO 1¼ãè 1½®öp 1¾ÃÊ 1¿ŽØ 1À£¬ 1Ánº 1ÂƒŽ 1ÃNœ 1Äcp 1Å.~ 1ÆL�€ 1Ç` 1È,o 1È÷}p @ÒÚš@¼1	ýÔ1	¬¥ 0
ï¥A žü 1ØÁ 1~Þ 1¸£ 1^À 1˜… 1>¢ 1xg 1„ 2XI !þf "8D1çƒh 2!H !Çe 2* !§G 1á 1‡) 1Àî 1g 1 Ð 1 Fí 1!€² 1"0	p 1#iÎ 1$ë 1%.  1&B 1'ã 1'â$ 1(íÅ 1)Â 1*Í§ 1+«# 1,­‰ 1-‹ 1.�k 1/jç 10mM 11JÉ 12ViH 13*« 146K 15
� 16- 16ó© 17ö 18Ó‹ 19Õñ 1:³m 1;¿8 1<“O 1=žð 1>s1 1?~Ò 1@\N 1A^´ 1B<0 1C>– 1D 2Ex !ûô lFþZ`Ç / /@  £Ø|à¯È  ¡¸ 	  ¨À @¶Ð   €NZST NZM  ¶  P-12NZ3D ·  ó@V¶R( @rí¤� "ÌC«1Ò+l@Tž×€:A  ‘à €‰ð   Œ à  ~�   š° Ú ñPMMT +10 +09 +11ó_1>-11É &À              ðE      ÿÿÿÿA·D„ @ÒÚ–¼* A	ýà !¬¥ @
ï¥` 1žü 1ØÁ 1~Þ 1¸£ 1^À 1˜… 1>¢ 1xg 1„ 2XI !þf 28+ !çƒh 2!H !Çe 2* !§G 1á 1‡) 1Àî 1g 1 Ð 1 Fí 1!€² 1"0	h 1#iÎ 1$ë 1%.  1&B 1'ã 1'â$ 1(íÅ 1)Â 1*Í§ 1+«# 1,­‰ 1-‹ 1.�k 1/jç 10mM 11JÉ 12ViH 13*« 146K 15
� 16- 16ó© 17ö 18Ó‹ 19Õñ 1:³m 1;¿8 1<“O 1=žð 1>s1 1?~Ò 1@\N 1A^´ 1B<0 1C>– 1D 2Ex !ûô FþZ` /@  «üI ¬D}ð	Á\
  ³L LMT +1215 +134 ñ245 
<+1245>-12:45< �>,M9.5.0/ ð,M4.1.0/3:45
TZif2]  @     & 3 ( @á¿4 @~6&´ @˜£à @ 9ùð @Éê
` QÒð/@ÿÿ<Ìj  ŽL  Œ ÷ B~� ñ Q0 +09ç Q0>-10Ã 3)   ¿    &  Ã 3 @f   Ç › @i‡B @¹Ç@ˆ @ýÑ<@ @þ’ú° @ÿÌÍÀX @ rÜ° 1uP 1@I 1U2 1 + @>O@( 1  1¼ 1ßï 1þ 1	¿Ñ 1
Ýõ @¨î08 1½× 1ˆÐ 1�¹ 1h² 1†Õp 1H” 1f· 1(v 1F™ 1’` 1&{ 1ñt 1] 1ÑV 1æ? 1±8 1Ï\p 1‘ 1¯> 1pü 1�  1 p 1!o 1"9û 1#Nä 1$Ý 1%8 ` 1%ù¿ 1&òø 1'Ù¡ 1(÷Ä 1)Â½` 1*×¦ 1+¢Ÿ 1,·ˆ 1-‚� 1.—j 1/bc 10€‡p 11BE 12`i 13=×` 14@K 15D 16¸ 17Õ0 18  18Ë  19é+` 1:ªê 1;É 1<ŠÌ 1=¨ï 1>j® 1?ˆÑ 1@SÊP 1Ah³ 1B3¬ 1CH• 1DŽ 1E1²p 1Eóp 1G” 1GïP 1Hñv 1I¼o 1JÑX 1K¸ 0 1L±: 1MÆ  1NP‚` 1Oœ®  1PBÙ 1Q|� 1R+ö0 1S\r 1TØ 1W7æ@ 1W¯ì0 1YÈ 1Y�Î 1Z÷ª 1[o° O\©g°ó
/ 4aÿÿ™x   Ðÿÿ« ÿÿ��  q ÿÿ¹° àEMT -06 -07 -0‘-06>6<-05b1.6/22ð6/22
TZif2        @     # PTZif2	  ð      ÿÿÿÿ’õÂ´+ Ay™@ !úÌ @Ò÷Ð @ÂÚÀ 1²Ù 1¢¼ @›öP 1‚ž 1{Ø 1 k»@ 1![º 1"K� 1#;œ 1$+ 1%~ 1&a 1&û` 1'ëC 1(ä|p 1)�Q 1*éH o+a3@ @  �Ì“ ÿ¨À  š° LMT +12 +11 
<+11>-11
# G  R    3  RP   V@~7Ud8 1Vð/9°ÿÿ_œ  ÿÿW@ ÿÿeP   ¶Ð ¨ ±-12 -11 +13¬ _3>-13¬ D@~7Uˆ¬  Ný™°ÿÿ_x£ AeP � E™ 37   A   &  E3 ™ 1š±=@6;à@ @6×ú` 28$4 !·Ü 1K,  1K® 1LÂê 1MrA 1N¢Ì 1OÄ 1P‚® 1Pú¦ 2RkÊ !Úzc1TTç  1Tºj 1V4É 1VšL 2Xå !z. 1YýÇ 1ZZ 1[Ý© 1\9ò 1]ÆÆ@ 1^Ô 1_Þ O`ñ`Éß1  § ¶ÐÑ$¨ÀÑ3Õ Ñð2>-12<+13>,M11.2.0,M O3/99<D Î @èp6ü  ¨ùP ¨À Ê r� † D q   Ä@¶¤L€1ÄD1+
i`+qôPw ¬ Ô ¹°w‚¹°ÿÿ« Nÿ -05 -06 
<-06>6¯ D	5�”PHÿÿ�|” "�p51-09„ /9>¹R�”O3Œ  •ô8"š°„ 'Q�      ?@áÅÌ @~6-L @Ë7•à @Ð.‰ð @ì7¾  1ï6ø  û›3`ÿÿþ?'Œ 1ÿ  @ÿ]XðÉ 1 —, @Fup	 0w A &W 1p— 1ÌÑ0 1‘ 1|‡9 1¿”I1e£0 ›:C^` Pÿÿ64: ‡< Œ , ~�Ï š°  Œ  ðGST +09 GDT ChST 
 ?-10hÀ          Ÿ   TZif2  
ð      ÿÿÿÿtàp¾ A»CH 0!qX @Ë‰=È AÒ#ôp 0aI8 ñÕ�sHÿÿl  ÿÿlX ÿÿzh  ÿÿÿs` LMT HST HDT HWT HPT 
HST10
ª  Ç @      3 Ý Ê�      Š@~7H€0Uò À /+ ÿÿl€– j – s` 
  Äà Šÿ-1040 -10 +14 
<+14>-14‹D	hAá´´¶ 064 @˜•Ð @ 9ùð 1Áí5 @Éê
` 1Ò @ÿ†Pß ð6‹g@ÿÿGL  ˜Ì  š°ð~�   Œ    ¨À ð ‘+11 +09 +ò 2ò _1>-11ò D V  Â @~6  Ú 9ÏF�Ú 0,vÚ v  œàÑ  Œ Ñ ¡~� ÿÿW@ × ×  Ó ’09 -12 +1Û _2>-12Û D X5@~6€Û Å1Ï=G= Å 5a   ¶µÚ I ]P   
Ò �”PLHÿÿ}8C"zhÁ�-0930 
< O>9:3½E ‡  ä‹ 1n=È  ‘û  ±x”  _ø "ePš �SST 
SSTÒF n  r@£ç+š 2Ì�é0C'ð°@!¨èß@  œ| #¡¸‘
´{S+1130�®O E · ã@~7TL· @ÜC5`Ÿ AtÊ8) `´L ` ) ^H"eP9@-112) ´ 0-11ü?11>fF 4  § @~6ˆ 1ÜAø*@	Êh· 1	µç 1Væ ð]˜¯ð  �x    �ð€   ¡¸ 
  ¯È  š°   ¨ÀLMT +1112 a30 +12 1
 ð 
<+11>-11<+12>,M10.1.0,M4 Ÿ/3
TZif2  @     ) 3 ð      ÿÿÿÿ’õÄt8 @æºP @V»À 1Æœ @7ï@ @2 Kð a3Dp @  œ A¨Àô î ì Ü Æ DÆ Æ 1n=È ð‘û  ±x  ÿÿ_ø @eP ™ ¯SST 
SST11’ Q@áÏlš  ~66ìÿÿ,”+!~ �’ 0+09'_09>-9” LŒ 07.ô€ @5DB”  †  ˆx ÿÿ�€ 
&ÿ-0830 -08 
<-08>8™ D …P   ™ @á¹, @~6 ¬ @˜•Ð @ 9ùð 1Áí5 @Éê
` ð ÒðÿÿBÔÔ  ”T  š°‹ ~�   Œ  Ò @+11 j0+10nqÖ ÿk|1V¶Zk@rí¤�k ‰øy ‰ðy@Œ  	s!PM÷p_0>-10pD0  x   š @~7JÈŒ @¬( @?µ @y�  1— 1Yc 1ÿy 19E @è•˜( A"a  !Èw 1C 1¨Y 1â% 1ˆ; 1Â 1h 1¡é 1 Gÿ 1!�Ë 1"1p 1#jèp 1$þ 1%JÊ 1%ðà 1'*¬ 'ÐÂ @ÿÿj8À lXÀ s` 
ÿÿzh�0-10Æ1Ê 93ˆO-10>‡F�      ‡@áÅÌ @~6-L @Ë7•à 1Ð.‰Í@ì7¾  1ï6ø  û›Æ `ÿÿþ?'Œ 1ÿ  1ÿ]Xr0 —,ŽP Fup	 0w A &W 1p— 1ÌÑ0 1‘ 1|‡9 @¿”€ 1e£0 A:C^`=) Pÿÿ64)  ‡´  Œ ZKAš°Q]ðGST +09 GDT ChST ÿ 
ChST-10
TZif2  @     ) 3 ñ      ÿÿÿÿn=È ð‘û  ±x  ÿÿ_ø ÿeP LMT SST 
SST11’ D ½  – Š �”PU¸ÿÿsÈƒ "s`ƒ ¯-10 
<-10>F	… �~6Ì  ¢4T"¨À… ß+12 
<+12>-12D�
      �@~6¸ @ÉsB�‰ @7ûGÐ 18Ó} @:P @:r¸@ 1;ãê 1<Rš 1X×( sXz Ð @  ­H.  ­pj  ¶Ð 
  ÄàëÑ+1220 +13 +14í _3>-13í Dí å @á¿4 @~6&´ @˜£à @ 9ùð @Éê
` BÒðÍ @ÿÿ<ÌÉ  ŽL  Œ Ï B~� É Q0 +09Ã /0>MG66œ6^† p¨  ¬X¼YÏ°0T    (j@?ÂýÑ @}‡AH @Ë‰6À AÒ#ôp 0aB0 @úÒG  @þ¸c@ @ÿ¨F0|1 ˜E‡1ˆ( 1x' @qD°  @aCÀ 1Q& 1A% 11 1�_ 1	ê 1	­Û@ 1
ðÌ 1àË  1Ùé` 1À­ 1¹Ë 1©Ê0 1™­ 1‰¬ 1y� 1iŽ 1Yq 1Ip 19S 1)R 1"op 1	4 1Q @+À 1òB @â%  1Ò$ 1Â 1² 1¡é 1 v9` 1!�Ë 1"V @#jè @ 1$5ý 1%JÊ 1&ß 1'*¬ 1'þûP 1)
Ž 1)ÞÝ 1*êp 1+¾¿ 1,ÓŒ` 1-ž¡ 1.³n 1/~ƒ 10“P 11g ` 12s2 13G‚ 14S 15'd 162ö "7à18p "8çà19ûõ 1:Ç
0 1;Û× "<°à1=»¹ ">�à1?›› ð@oê°    A„·     ÀBOÌ°    Cd™  1D/® 1ED{ ¿Eóá0 	?	 ¡  Äø  ÿÿsx ‘` ÿÿ�p qÿÿs`   � ÿÿ�€ ð#LMT AST AWT APT AH PHDT Y	  KDT AKST 
 ð9AKDT,M3.2.0,M11.1.0
TZif2ï  @     & 3 ðT   
   !ÿÿÿÿ?ÂýÑ @}‡Z^ @Ë‰DÐ AÒ#ôp 0aP@ @úÒU° @þ¸qP @ÿ¨T@p @ ˜SP 1ˆ6 1x5 @qRÀ @aQÐ 1Q4 1A3 11 1�m 1	ø 1	­é@ 1
ðÚ 1àÙ  1Ù÷` 1À» 1¹Ù 1©Ø0 1™» 1‰º 1y� 1iœ 1Y 1I~ 19a 1)` 1"}p 1	B 1_ @+" À 1òP 1â3y1Ò2 1Â 1² 1¡÷ 1 vG` 1!�Ù 1"V) @#jö0P 1$6 1%JØ 1&í 1'*º 1'ÿ	P 1)
œ 1)Þë 1*ê~ 1+¾Í 1,Óš` 1-ž¯ 1.³| 1/~‘ 10“^ 11g®` 12s@ 13G� 14S" 15'r 163 "7à18!p "8çà19ü 1:Ç0 1;Ûå "<°à1=»Ç ">�à1?›© "@oà1A„Å` "BOà1Cd§ 1D/¼° 1ED‰ OEóï@ÑC «âË Zb  ePÑ s`Ñ€s`ÿÿePÑAs`ÝË! ÑðNST NWT NPT BST BÆ Ù Ø
HST10HÉUp     ± Qÿÿ^¡@ž¦:�¡@Ÿ»€ 1 † 1¡šé 1Ë‰ @Ïß  @Ï�å¬ 1Ð� @úøu ðûèX ÿÿ–î2ð« ÿÿ�� ÿÿ« ÿMDT MST MWT 
MST7¹D�¯        @^þ  1ž¦,Ø 1Ÿºù±1 † 1¡šÛ @¢Ët ( @£ƒ÷ð 1¤EÒ  1¥cÙ 1¦SÙ  1§—0 1¨3» 1¨þ³  1ª� 1ªÞ• 1«ó 1¬¾w 1­Óa 1®žY 1¯³C 1°~; 1±œ_p 1²gX` 1³|A 1´G: 1µ\# 1¶' 1·< 1¸þ 1¹ç 1¹æà 1»` 1»ÆÂ 1¼äæ 1½¯Þp 1¾ÄÈ 1¿�À 1ÀZÖ 1Á°<0 1Â„Œ 1ÃO„  1Ädn 1Å/f 1ÆMŠp 1ÇH 1È-l 1Èøe@ 1ÊN 1ÊØG 1Ëˆþ 1	8 1ÓuóX 1Ô@ë 1ÕUÕ 1Ö Í 1×5· 1Ø ¯ 1Ù™ 1Ùà‘ àÚþµ€ÿÿÿÿÛÀsðÿÿàÿÿÜÞ—€ÿÿÿÿÝ©�p 1Þ¾y 1ß‰r 1àž[ 1áiT 1â~= 1ãI6 1ä^ @åW<ð@ @æG<  1ç7 1è' 1é  1ê  1êöâ 1ëæâ 1ìÖÄ 1íÆÄ 1î¿á` 1ï¯à` 1ðŸÃ 1ñ�Â 1ò¥ 1óo¤ 1ô_‡ 1õO† 1ö?i 1÷/h 1ø(…` 1ùJ 1úg 1úøgp 1ûèI 1üØI 1ýÈ+ 1þ¸+ Pÿ¨ð   ˜ A ‡ï 1wï @qp	 @a€ 1Pî 1@í 10Ð 1�' 1	² 0	­£/ A 
ð” 1à“  1Ù°` 1Àu 1¹’ 1©’0 1™t 1‰t 1yV 1iV 1Y8 1I8 19 1) 1"7p 1ü 1 1òp 1áû 1Ñú 1ÁÝ 1±Ü 1¡¿ 1 v@ 1!�¡ 1"Uñ 1#j½p 1$5Ó 1%JŸ 1&µ 1'*� 1'þÑP 1)
c 1)Þ³ 1*êE 1+¾• 1,Ób` 1-žw 1.³D 1/~Y 10“& 11gv` 12s 13GX 14Rê 15': 162Ì 17 18èp 18æþ 19ûÊ 1:Æà 1;Û¬ 1<¯üp 1=»Ž 1>�Þ 1?›p 1@oÀ 1A„�` 1BO¢ 1Cdo 1D/„ 1EDQ oEó·  $ ' = $ :@ÿÿ­ÔÅð¹°ÿÿ«  ÿÿ¹°  ! ñ'LMT CDT CST EST CWT CPT 
CST6CDT,M3.2.0,M11.1.0
TZif2i 
@     % 3 �&      ’@^þ  1ž¦,1Ÿºù"1 † 1¡šÛ 1ÊW" 1ÊØG 1Ëˆþ 1Ò#ô 1Òa	1Óuó1Ô@ë 1ÕUÕ 1Ö Í 1×5· 1Ø ¯ 1Ù™ 1Ùà‘ 1ÚþµX 1ÛÀs Š51èòP j1þ¸ 2ÿ§ÿË!—þª1‡á 2D/vŠ0DC`XCEó¨ð_#	 @B Nÿÿ¯:		ˆ ÿÿÇÀ ¯EDT 
EST5EUp¯     ™ bÿÿ^ð�Û@Ÿºë` 1 †  1¡šÍ 1¢eâ @£ƒéà  1¤j® 1¥5§  1¦SÊc1§‰ 1¨3¬ 1¨þ¥0 1ªŽ 1ªÞ‡ 1«óp 1¬¾i 1­ÓR 1®žK 1¯³4 1°~- 1±œQp 1²gJ` 1³|3 1´G, 1µ\ 1¶' 1·;÷ 1¸ð 1¹Ù ð¹æÒ`ÿÿÿÿ»õðÿÿÿÿ»°Æ´`ÿÿÿÿ¼ä×ð @½¯Ðà 1¾Ä¹ 1¿�² 1À¤› 1Áo” 1Â„} 1ÃOv 1Äd_ 1Å/X @ÆM|pH 1Ç: 1È-^ 1ÈøWp 1Ê@ 1ÊØ9 1Ëˆð 2Ò#ô !`û8 1ÓuäX 1Ô@Ý 1ÕUÆ 1Ö ¿ 1×5¨ 1Ø ¡ 1ÙŠ 1Ùàƒ 1Úþ§P 1ÛÀe 1ÜÞ‰ 1Ý©‚x 1Þ¾k 1ß‰d 1àžM 1áiF 1â~/ 1ãI( 1ä^ 1åW.P 1æG-p 1ç7 1è' 1éò 1êñ 1êöÔ 1ëæÓ 1ìÖ¶ 1íÆµ 1î¿Ó` 1ï¯Ò` 1ðŸµ 1ñ�´ 1ò— 1óo– 1ô_y 1õOx 1ö?[ 1÷/Z 1ø(w` 1ù< 1úY 1úøXp 1ûè; 1üØ: 1ýÈ 1þ¸ Pÿ§ÿà  0—þð 1‡á 1wà @pþ` @`ýp 1Pà 1@ß 10Â 1� 1	¤ 1	­”@ 1
ð† 1à…  1Ù¢` 1Àg 1¹„ 1©ƒ0 1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ 17 18Úp 18æï 19û¼ 1:ÆÑ 1;Ûž 1<¯îp 1=»€ 1>�Ð 1?›b 1@o² 1A„` 1BO” 1Cda 1D/v 1EDC oEó¨ð /1 a 0 
ñÿÿºž  ÿÿÇÀÿÿ¹°   ð#LMT EDT EST EWT EPT 
EST5EDT,M3.2.0,M11.1.0
TZif2. @     & 3 �      p@tàp¾ A»CH 0!qX @Ë‰=È `0aI8 ð Õ�sHÿÿlè ¡lX ÿÿzh  pÿÿs` î ÐHST HDT HWT Hî OHST1Ý E]Ý ­ @^þ  @ž¦,€ 1ŸºùÝ1 † 1¡šÛ 1Ëˆþ í 	Õ@ÕUÕ 8 1Ö Í 1×5· 1Ø ¯ 1Ù™ 1Ùà‘ 1ÚþµH 1ÛÀs 1ÜÞ— 1Ý©�h 1Þ¾y 1ß‰r 1àž[ 1áiT 1â~= 1ãI6 1ä^ 1åW<P 1æG<p 1ç7 1è' 1èò  ê�QÿÿêÑø 1ëæâ  1ìÖÄ 1íÆÄ 1î¿á` 1ï¯à` 1ðŸÃ 1ñ�Â 1ô_‡ 1úøg0 ÀûèIðÿÿÿÿüØI €ÿÿÿÿýÈ+ð @þ¸+  Pÿ¨ð   ˜ A ‡ï 1wï @qp	 @a€ 1Pî 1@í 10Ð 1�' 1	² 0	­£/ A 
ð” 1à“  1Ù°` 1Àu 1¹’ 1©’0 1™t 1‰t 1yV 1iV 1Y8 1I8 19 1) 1"7p 1ü 1 1òp 1áû 1Ñú 1ÁÝ 1±Ü 1¡¿ 1 v@ 1!�¡ 1"Uñ 1#j½p 1$5Ó 1%JŸ 1&µ 1'*� 1'þÑP 1)
c 1D/vH 2EDQ ¡ó·       6  ñÿÿ®Ê  ÿÿ¹°ÿÿ«     ñ( LMT CDT CST CWT CPT EST 
CST6CDT,M3.2.0,M11.1.0
TZif2ç  
@     % 3 �P      �@…½"[ 1™<” @Ëˆðp 2Ò#ô 0`ûà 1×5¨È1Ø ¡ @û3�Œ 1ûè; 1üØ:  @ýÈàˆ 1@ßx@0Â` "�1	¤ 1
 £  1
ð† 1à… 1Ù¢@ 1Àg 1¹„ 1©ƒØ1™f 1‰e 1yH 1iG 1Y* 1I) 19 1) 1")p 1í 1 1ò
p 1áí 1Ñì 1ÁÏ 1±Î 1¡± 1 v @ 1!�“ 1"Uâ 1#j¯p 1$5Ä 1%J‘ 1&¦ 1'*s 1'þÃP 1)
U 1)Þ¥ 1*ê7 1+¾‡ 1,ÓT` 1-ži 1.³6 1/~K 10“ 11gg` 12rú 13GI 14RÜ 15'+ 162¾ "7ˆ18Úp "8æˆ19û¼ 1:ÆÑ0 1;Ûž "<¯ˆ1=»€ ">�ˆ1?›b "@oˆ1A„` "BOˆ1Cda �C AEó¨ð�/ 6@ÿÿ²%ƒA«  qqÿÿÇÀ  ƒSwPEWT EƒŸDT 
EST5EƒU�a      C@^° @ž¦:� @Ÿ»€ 1 † 1¡šé 1¢eþ 1£„«1¤Eà 1¤�¦  1Ë‰ »!a( 1÷/v "ø(ã1ùX 1úv  @úøup 1ûèX 1üØW 1ýÈ: 1þ¸9 0ÿ¨ÊP  ˜	 0‡þ A wý 1qƒ@a� 1Pü 1@û 10Þ 1�5 1	À 1	­±@ 1
ð¢ 1à¡  0Ù¿G A Àƒ 1¹¡ 1© 0 1™ƒ 1‰‚ 1ye 1id 1YG 1IF 19) 1)( 1"Ep 1	
 "S1ò&p 1â	  1Ò 1Áë 1±ê 1¡Í 1 v@ ð!�¯€    "Uÿ    #0jÌ  @$5á 0%J® A &Ã 1'*� 1'þß	 1)
r 1)ÞÁ 1*êT 1+¾£ @,Óp€ 1-ž… 1.³R 1/~g 10“4 11g„` 12s 13Gf 14Rø 15'H 162Ú 17* 08÷_ A 8ç 19ûÙ 1:Æî 1;Û» 1<°
p 1=»� 1>�ì 1?› 1@oÎ 1A„›` 1BO° 1Cd} 1D/’ 1ED_ cEóÅ #	   4ñÿÿ�”  ÿÿ« ÿÿ��   ñ#LMT MDT MST MWT MPT 
MST7MDT,M3.2.0,M11.1.0
TZif2é  
@     % 3 ð}      ÿÿÿÿ^À @ž¦H  @Ÿ»� 1 †* 1¡š÷ 1Ë‰ @Ò#ôp  @Òa& @Öþt\ 1Ø€­( 1ÚþÃ 1ÛÀ�  1ÜÞ¥ 1Ý©¬ 1Þ¾‡ 1ß‰Ž 1àži 1áip 1â~K 1ãIR 1ä^- 1å)4 1æGJX 1çQ 2è', !ò3 2ê !Ò 1ëæð 1ì±÷ 1íÆÒ 1î‘Ù 1ï¯îX 1ðq» 1ñ�Ð 1òÁ 1óo² 1ô_£ 1õO” 1ö?… 1÷/v 1ø(¢@ 1ùX 1ú„ @úøƒ  1ûèf 1üØe 1ýÈH 1þ¸G "ÿ¨@ ˜) È"ˆ1x 1q(Ê@a'   "Q1A	 "01�C "	1	­¿@ "
ð1à¯  1ÙÍj1À‘ 1¹¯ 1©®0 1™‘ 1‰� 1ys 1ir 1YU 1IT 197 1)6 1"S° 1	 15 1ò4p 1â 1Ò 1Áù 1±ø 1¡Û 1 v+@ 1!�½ 1"V 1#jÚp 1$5ï 1%J¼ 1&Ñ 1'*ž 1'þíP 1)
€ 1)ÞÏ 1*êb 1+¾± 1,Ó~` 1-ž“ 1.³` 1/~u 10“B 11g’` 12s$ 13Gt 14S 15'V 162è 178 18p 18ç 19ûç 1:Æü 1;ÛÉ 1<°p 1=»« 1>�ú 1?›� 1@oÜ 1A„©` 1BO¾ 1Cd‹ 1D/  1EDm AEóÓ çîE] :@ÿÿ‘& �� �€@��ÐPDT PST PWT P_PST8PUp     — `ÿÿn=È® ‘û  ±x»  _ø @eP ½òSST 
SST11
/*
    CSS file for pydoc.
 ò ontents of this& ð.are subject to change without notice.

*/
# -*- coding: utf-8 ð
# Autogenerated byÀ Sphinx on M òay  3 16:52:46 2021
topics = {'assert': 'The " ö" statement\n'
  /'* &  Af V ðs are a convenient way to in� º debugging    Lionsc ü into a program:  2   L –_stmt ::=ý öexpression [","  ]G   EÄsimple form,U D Ð", is equivalú ,toF  �   if __-__Ý  gif notk ‚: raise ŒionError^   Ä �extendedÆ '1,h 2Ô 
«â R1ã (³,2)à  VThese‘0ces¥ume that "xz" and "N"¢Mrefecñ to the built-in variables with those names.  In- Ocurr� ] šaation,+ X 	µ Þis "True" undœ ñnormal circumstances, "False" when optimizr  ½›requestedü Œ(commandbAlineE °on "-O").  fã ò	 code generator emits no ;forg ,ana Ë`· ûat compile time. b LNoted  it £unnecessar´@clud/†e sourceº  ÷^b ‚failed ie±  ml ûge; it will be displayed as part ofÆ -thÅ Ìstack trace.  `Assignksš	£re illegalËAvaluô‘
ò Ÿa  S¢determined¼ 8pinterpr  Û0rts´ 0,
 ¶›  º©  ' ¸  #½– )  f È@used"‚(re)bindÊ  s7	e ø ðmodify attributes or itemsá0mut8ƒ objects
À            z '\n'
  þ0'   assignment_stmt ::= (target_list "=")+ (starred_expression P h| yiel% )w b  •  w  b (","  �)* [","]E 
 ?   E ¯identifier5 +  r| "(" [l î _] ")"9 [9 ]9 Ïattributerefi Ïsubscription0 olicing+ $"*h.  €(See sec� ð Primaries for the syntax defini$  (*/*,k *ù ’*, and *sÝ /*.WG 'Anâ` stateì¡ evaluates¹ Õô² €(remembeé /atj ÷this can be a single Y ðor a comma-separated n ,ƒ s OlattÆeÁing a tuple)ÊÑ  `result* ®object to i oeach oŽ Ö« ±s, from lefL oright. Ak2 is&ñed recursively depend° nqform of ¹ š k (Yp). When&Ð v @partQ £a mutable /(aÑ¨e ¸reference, ­C or ©)Ük ?musB «0mat	1perû  €Ø¶ ÿdecide about itsÑ �validity6º ñmay raise an exce_" iiq pis unac!  -o.  Ther  _rulesj ñ
observed by various types³ ß  s“ ¯d are give‘@withl x â \ Üq '(s½ Ç �standard‘ Q ¯hierarchy)ä! of^ƒ o‡ œ1, otßally enclosedY iõ±parenthesesn qu4�brackets,éð recursively defºined as '
  ¾'follows.\n  õ* If the target list is a singl ÿwith no trailing{  ocomma,e ñ  optionally in parentheses,} Robjecx @ssigÞ to thath  ª â £Else: The h ñmust be an iterable á  	ïsame number of€  _itemsç  asÏ Tre ar:sñ  X · aP, and*   !ms. ¯aSðfrom left to right,
  k  correspondªy /  ´contains onÜ ’ prefixed>/an. �asteriskÆ `  callÎã â€œstarredâ€��·7É/at¡p  least<Dmany€·h  *o, minu *!. y0firX : U ¥z ,ì ×n  éÖ 
 òP befo‰3he ZW– g Rfinalk o0¿ �� Qafterék ’ g C A.  A36`remain×‡]Ž iOthenh z» — )  (« ë@ can4oempty)~ M€'6/ofž‚$i ?are3,­„` à–A@ment$anÌ-to¬ïis recursively” 3defBã C- >ÿn identifier (name):l   3• 9 ð does not occur in að "global" or "nonloc :'
  Î'statement\n  , ñin the current code block: ñname is bound to ~object Q M k d ­  Z ospace.0  ß  * OtherwiseŸ �  *­  � l  \ Vouter¯ ç determined by~,d  Ïrespectivelyè 1Theq  z"re|òif it was already”ÿ.  This may cause†  ?theä øreference count forá“previousll   :g o reachl Qzero,£ 8ingf  to be deal¿ted and itsc  Ádestructor (l €has one)± Ÿbe called€A* If¡ `target…Õan attribute 6 : ©primary®  ßexpression inª  aP  j ðevaluated.  It should yiel {?witg¦assignable² @s; iÒ  isb 1notÞ ÿcase, "TypeError"Â  /is· Arais£ DThat•  isX an aske,Œ     /edd  Ó /tok  "Ggive‚Ï `it canÍ wperformh  ñ,/£º Ö �an except²`(usualû0ut g ¯necessarilì$"A M)oƒ  Note: uðis a class insta¥  ‹à  ÓNPoccurÐ both sides oe¤ <¡ operator,Uf  `ight-h‘  C l eÿp, "a.x"±0 acG0 eiÊ  aß B zt  ñn%#D uexists)F52Se lefÂ k Ô Ï  ¤ lways set šÎ Pcreat_it if?py± Ðus, the two oúccurrences of "a.x" do not '
  î'necessarily\n ñ  refer to the same attribute: if ÿ right-hand sideg  ¯expressionf sg va classf ,c 8lefb Ÿcreates al  ?newe winstancÂ 1 as^ `target/ æ ¿assignment:I  V¹ ?Cls7 #   Px = 3	  #ô �variableb  Â � = Cls()% 
.e  . à.x + 1   # wri3 Àas 4 leavingQ /.xK Oas 3h  ñ  This description doesxf` applyê* /orO hps, such­²properties ƒd with " _y()".O  2* IÀÿiP5subÁ æ: The primary Ä? in- /th¹C ‘ð is evaluated.  It should yield either a mute  @sequK Ð ¤  object (/‘a list) oU 0appí% ø0dicÂOary)Ob  Next›2	"ê ­   ‘s’û æ  Á ø   i µ Cmust€ an integer�@f it²�negativeN “Oâ€™sm `lengthL Paddedý0it.1€e result˜ !e � /beÚ$on� i ¾ @ lesÙ!anÞ9 ¡  Œ  , ­ í  ž G_askedl 2to )d  $ed�²to its item¢Ïthat index. E Šj 6    !ou¤�range, "IN `Error" ‚raised (‹  ¿ iÔ  f 5ed 0can8qadd newÏ ¦a_ á MÚ’€,. kÀ     '  subsù0cript must have a type compatible with the mappingâ€™s key '
   '; >,\n X  andE 0 is ðn asked to creat€ ïkey/datum pairf  PwhichŽ sk  ¬ BsubsÛ  toi ÿ assigned object.  This can eithei ¯replace ani €existingb/value³ 2@same   ß, or insert aØ  ?newh  B _ a(if noX 
j $ – Oed).M  ö   For user-defi%!s,;ð"__setitem__()" methodÂéacalled4k �appropriì�rguments« A* If” `target„ ña slicing: The primary expression in3 ­ Ÿreference« @is eSðated.  It should yield a muta"@sequG \Û ¯(such as ak Qlist)”eªu bj /ofm   /amÖ  ¤r.  NextßQlower ·upper bound@_s areg  òpinsofar|yC  ‘Âent; defaultY Azero~  · ¤ò  v<Sength=½ s4£  `�integers.Có@ / iZ‚negative9› ! l† ‘"ddÒif<Presul;Ó † RclippP Élie between 6	‰ C› ¦úclusive.  FinallyÞ Õ&is¬l /thw ¥L N2s oÍœÉ Í¹ { 8 <i ¡may be difã`t from‹©C mË � 9 thus chang ½¯ Z ¢F " ií i * Î [Ÿallows it,`*CPyth@mplei atÐdetail:** In ú the current '
  þ'implementation, the\n' ðsyntax for targets is taken to be9 � same as' Ïexpressions,x  ?andh ƒinvalid p ñis rejected duringh ¡code gener¶ o phasef causingj ÿless detailed error messages.1  �Although– `definiG  of assignZ dÿies that overlaps betweeni  Åð left-hand side 	   Irigh ÿre â€˜simultaneousâ€™o  O(forl 0exað "a, b = b, a" swµ ö two variables),Î �*within*h  Sjcollec/Ged-ta q occur ù 1to-ê çŸsometimesÏ `result;€in confu•ñ .  For instanceùp follow+ programÎ  _printi Ÿ"[0, 2]":†  p   x = 7 /1]! _i = 0 Õ, x[i] = 1, 2Ù0# i�qupdatedÚ n) iv( d ï ?(x)  �See alsoð**PEP 3132** - Extended Iterh UnpackÈ÷ ÂThe specificªRhe "*°Ÿ" featureÜÞ 0AugÒ(edßAstatC= f  z  ƒ ÞQombinø p, in a õ/le¾ ¬ ,¤j  K Try op^oand anò æ$ a<_�_stmt ::= © 
 /op»  (Ræ_list | yield_ ¦   S ] .  { ÿidentifier | attributeref |‡  �subscrip¹o| slicšWaugopo   y ’"+=" | "- * @ ƒ!"/ #"/ % M**="ÇÀ  '         °    | ">>=" "<< & ^ p|="\n'
,  ' ð(See section Primaries for the syntax defini$ As of ^last d _threei Ÿsymbols.)  ðAn augmented assign ¡ evaluates‡ ÿtarget (which, unlike˜  onormalh [ Pstatee ñs, cannot be an unpacking) andy û ¯expressiong Òlist, perform¼ Àbinary opera\Á specific tod @typepl µ l "on? "wo] Ands,¹ 7 ~ dresultk �original; c.i BThe  … is onlyŸod once6 J îU Ú€"x += 1"  �Ïrewritten asj €"x = x +E ðto achieve a similar, but üPexactÓ /qu‘effect. Iol Á0ver_, "x",¿ Also, when‡ Ÿpossible,i  ¬0act¨ O$ispÿed *in-place*, meaning thaÄPrathe aÊPcreat? Ça new object_  Z Æ£,“¯3oldC Ø ÿis modified insteadSUúB Y s»ª _left-¥ hÔside *before*K …e right-( o.  Forä ïexample, "a[i]l ò+= f(x)" first looks-up1 "eDn it� Bes "0  ¤ ~�k T!dd÷? ô0ly,`  dƒI@backNe Í "¸AWithƒQexcep#ofÀQ�o tuplesttmultiplˆsV Oin aá usingle ö>i  � done byˆQ @ ã ï"le.Îsame way as ‘.µ  SŽðly,\n'
           ñ'with the exception of ñpossible *in-place* behavior," !'
D  ž'binary\n Qopera_ ðperformed by augmented assign 1 is_ bsame a Q onormalk …  r /s.&  òFor targets which are attribute references¢ ~caveat ¢ _aboutg ÷class and instancd �s appliesú ¿for regular` 2â � kAnnota„s  Žs3 = 3  *{ Oion* 0comÌ 6ß, in a single ¯ O, ofk pa variaÐ'orÓaý  ø ‘Aan o'al‘ Q r :  3   n 6ed_ï�_stmt ::=~ÿ  ":" expressionM x
 æ["=" (starred_M / |? Hyiel% /)]t  sThe difb from ›% A  -sÝat onlyŠ  âj ¯is allowed×¢simple nam[€ò@, iffžor modum_cope,¤ $heäAions?Revalu_€nd storeù Îupecial r Dm„ k –3"__X t €__" thatiPa dic?²ary mapping£j l 60(ma~d(Èprivate) to á J ‡ o. Thisá ¸ i[Awrit§ � íòutomatically creKt#@tart±C" body execu$ I½1fouµ� tuÎs zt œb�¶s¤ƒ but notwÀ.\n'
         S'\n'
  õ''If a name is annotated in a function scope, then this1 P _locali ‚for thatM 2. Al ñions are never evalu‚ ‚and stor� i � l ° /s.   IfÛ � right hy !id·present, an¾assignment ˜ �performsi ·the actual D dbeforeû 4ingk o(whereN ßapplicable). Ä Cnot È  …/an¶   ex# Osionj etarget·e interpret³sE+ q exceptp # Olastk ò"__setitem__()" or  Battr OcallÜŸSee also:m  ñ  **PEP 526** - SyntaxÊ @Vario¼C ò    The proposalùvadded sP o ò _typesœ /ofe v’ �s (includL fclass   Ñ�instance_  ) /),h  ? tead of * ngðÐm through comvi1484iŸType hint;±T >ð"typing" module tovÉaö   Odardó ¨ ™	”È’can be us¢ostaticj  analysiÖ @tool|_d IDE@RChang| 0ver»” 3.8: Now­ 'edh¿s allow samOÙ ‘ièeaäregularì È õPreviously, someN u ÿ(like un-parenthesized tupl¸° )Æ!ca›arPerror8û,
 'async': 'Coroutine %'* 
] F@'New.ƒ5d h1 O � o`definiz, = 		, À '\n'
      ñ    '   async_funcdef ::= [decorators] "  €" "def" ' °name "(" '
D  ù'[parameter_list] ")"\n# *  û["->" expression] ":" suite?  ð*Execution of Python coroutines can be suspended and resum t½ Kmany_ Õpoints (see *X ð*).  Inside the body€ a{ 
Z  1 ¥ ,_ q"await"– cðidentifiers become± óerved keywords; : P A#s,´H fora a with"@only{used inL î ï ¾  è Kies.)  @Func. ‘s definedr Ž @ösyntax are always8M 9 s, even ifqôy do not contain3 orh —8» ¡It is a "S¡ 0Err<`to use ¨yield from¬& i
	ê Ð 8of %ß ˜ ¬An examplefA :h  á “Ï(¨11,  ,2)@ Ÿ®do_stuff()Q  # ¿e some_/, ;  3The´ª›statement( = (  ú ‘_for_stmtÜl 5  AAn * ðhronous iterable* provides an "__a ì__" method thaÈ ñ directly return: ^  ±tor*, which¬Kcall— 	“ ±code in its‰ Fnext‰ `„` allowŸ‚nvenientü  à_ over“ 	  &1 ~  foi @ing É Žf Ô 1p TARGETû LITER:  ¥Ž   SUITEF Oelse2 	23   Is semantiž�y equival&,toX < !  J@ = (¸ `  ?€ = type( %).` R @runnD_= Tru9À    '   whilõ e running:\n'
  '
 ?try  ! òTARGET = await type(iter).__anext__ ] ÿ
except StopAsyncIterations ¯ � = FalseY ?lseD ^SUITE: e6 2 23  ÐSee also "__a‘__()" and û )" for details.D  ðIt is a "SyntaxError" to use an "a7 Q ù	" statement outside the ÔKbodyb ðof a coroutine func�˜ E 4The‹ GwithŒ ) = )  1   ê __ “_stmt ::=t %"  7  AAn *G ò	hronous context manager*m* 1tha‰	M<abl~ðto suspend execuJÀ in its *entc  ß*exit* method ]Ýfollowing codÚç -ò  EXPRESSION as ±åM  ðis semantically equivalv,toW < $  iF = (˜ )( a-" =RŸU /__3 ?xit2 ?xit1 Uvalue»r (k ` Chit_°{3 <‡1 = … :  \Ž2   „ k 1 9   ¥ <Tru¡' cif notµa�ù ÿ, *sys.exc_info())j  J ?rai�0fin9 | ª (  a V¡ fNone,  ?N	–>— þ ©—> —˜¥  ™ ‹#à Gb ð	  **PEP 492** - Coroutinões with async and await syntax\n'
  '
 ñThe proposal that made coroutines a  Àer standalon incept P /ina rPython,� ó dded supporting˜ .8  û -[ Footnotes ]-  @[1] Ô  ex¡ aion isÁ ðagated to the invocat  Êstack unlessÑ [there`  5ið"finally" clause which happensh �raise anoH 
Z ž û  _ T†Enew &   cb sº @old ƒ¬to be lostD ² �[2] A strq€literal ¦ a aW Pfirstã‘tement inn 	á@func3a  ´ @bodyjãtransformed inm8 ú	â€™s "__doc__" attribute?anda   DQefore— 	R B*docß *3(_classš  û 
›namespaceü @itemP  
ê v = ç ö
,
 'atom-identifiers': 'I 0 (N )e  ¯ .'* -  6An † d occur\0an ¦   a Z.  SeóŽ   1'sec Ç x  áðkeywords for lexical defini¬ e U 0NamÕ u  'O @bind$ ?forx @docu&A ofÙ  5 A Šc   'X 2Whew ) 3Aboun´õan object, evaluz  ÍÐ ›tom yield¸ ‡  'ô\ !. � ¨  Anot ƒ  ¿ °@emptÛr œ Oe itæ C ŸfError"ì9"�**PrivateŠÓe mangling:**Ó 	¡ó Ã PtextuÙÈ,s ×9   'aý(sspSbegin‡€two or m·pundersc {  characters¶APdoes œðend in two or morÿ	e underscores, it is '
  ÿ	'considered a *private\n/ òname* of that class. P6   ÿs are transformed to a plonger + u °before codeË �generated7 § them.  Thv _ationt pinserts: t Û Ò è, with leading\` remov:n>4Xsingl•v › Âed, in frontleŠ ð .  For example,Á å ÿdentifier "__spam"w `occurrÞ Bin a×r çd "Ham" will bbØò S"_Hamv .w FThis+µ is indepenÁ þ ¿syntacticalò pcontext:_whichx Pthe i_  °is used.  IØ
æ  Ô uë  extremely Ët (  er8ðn 255 characters), iÑBmentdefinedë Rtrunc+ ?mayu thappen.Ø Ô ÷€sts onlyf	3í /nol ó˜ pis doneþó,
 'atom-literals': 'L Q #'*   ÀPython suppoâ!stÕ¤and bytes ‚   ovariou�'numerici H :   $  ‚ R ::= Ÿ L " |¤  B Ç`| inteBò| floatnumber | imag J  REvaluÃEof a° õ yields an objec˜¯given type®"'(å ,o — îÆ ,Å  ‰bpoint Â @, co!x )’¦'Ü” q  ß e0 @ mayÛ�approximY!in]@casej p« o  h ‹sinary (È #) æ±s.  See sec³O forPpdetailsXÒÀ       '\n'
  þ0'All literals correspond to immutable data types, and hence '
 P _the\n ÿ'objectâ€™s identity is less important than its value. f Multiplk e= –ations ofà Òwith the sameb � (either ¸  , Ó Qccurr!inB õprogram text or a different o. )Ö ¯may obtainp » La b æ Ô   õe.\n',
 'attribute-access': 'Customizing      � _   '* 6   The followˆ ñmethods can be defineªc® e„ò  ž @meanH /ofr ì ð (use of, assignmÉ0to,{@deled ct ß"x.name") forw 0cla€nstancesš]  Å D `.__getÇ �__(self, � )8  Ò   Called wheà}defaultb fails{a× × T   "AˆeError"š"Ó ¦Ï__()" raisesH P l @becaê*-*˜@not ‹”j ¶  w  —Ä  /ø0treè0r "± ";J ERof a ² Å
„property5j’).  This bë rshould 1r 
Rretur2§(computed)5€ ç Ç hð w 
Pexcep“A"`   NotDQat ifL²Ps fouRhrougH¶ ÿnormal mechanism,· 
Ô k Ø0is ~c|A.  (�/is(	0intTðonal asymmetry\n'
              ð'   between "__getattr__()" and s Ô.) This is '
D 	 ÿ'done both for\n' ñ   efficiency reasonss ÿbecause otherwisek ± ¯would havex 
òno way to accessj  ù ÿ	ibutes of the instance. ƒ ÏNote that atu 
PleastV ÿ variables, you can fake totalr ßcontrol by not ùinserting any values inÜ ÷ r ïdictionary (bus @teadå { @themu !anÑÐ object).  Se;¬ã›™Ámethod belowSaÑnÂactually get`­
dGover!/.;  ö .bÎ ¿self, name)=  ñ   Called uncondi© é °to implemenœ!trr äÛ  esOo 
%‚class. I3 Ï also define)ÛÖ,w 
 �°latter willûT be cý lÈþj o 0 ei`u 
 ^ ð	s it explicitly or raise¬C "AtYError".`6¸s 
!shÄRretur©§(computed)ŠÌŒ v /anm 
¿ ` excepC¡. In order'Ovoide ÿinfinite recursion ix tCV, itsªa}  aalwaysä}  Qbase yî 
q Q withAsamezã 
 (/ity oneeds,/0exa†?, ""["0   †:ý  À              ' ñ%This method may still be bypassed when looking up '
9  ƒ'specialM ?s\n) : ÿ"as the result of implicit invocation via languagex �yntax orr Ðbuilt-in func_ ‰s. See S¸ ê ?up.M  ÿ'   For certain sensitive attribute accesses, raises anÙ Pauditu_eventw 
Ð"object.__getn ð__" with arguments $ _" andq o"name"û "€ s€ p(self, S �, value)Ã  t   Callˆ(anMPssignÞ 0 is �empted. â îAis cS v 
pinstead› ©AnormÝñchanism (i.e. storeÊã y  in% q qance diŸpary). *A*à  †  ÛI  ,o *Ž 7 w 
* 0 toôaQ ed /it	"–   If "__	P)" wa‚2to b  ` 0an cò *ï ?, iashouldØ i¥ base clasÝ DCsame—x Ïfor example,=
 Txï øS#N° QÔ  :QÓ 
m-Ù Q„N1, "b#W0del'__WP%MLike¢@but ÷ f b@dele'e ¿"Q
ó ¥1.  �­@onlyv úe  ¯ed if "delt @obj.û?" ib¡meaningful× Àthe object.\On'
  /'\ ÿ)   For certain sensitive attribute deletions, raises an j ïauditing eventx 
Ð"object.__delo ð__" with arguments $ _" andq "name".j  € ¯ir__(self).  ò   Called when "dir()" is c son the p / AÍ ÿsequence must bet 
•returned.r �convertsn   U Oto a{ @listis 
 so^ /ito"Z €Customiz8Xmoduloaccess= = =  €Special _„s "__get¥ �@"__d7ß" can be also^used too c"e ð [ to mks. TheŒ ‰@func¶/ a† –f Álevel should„ ept oneŒ` whichÕ 5 v  .o of anë  FZ H§²òcomputed value orpo	$"A§_Error	I– ×ôis not found on ap§� throughÓ onormalë Álookup, i.e.ÌðK`__()", U
~i¢searched isÝ­ ctaabeforeZ oË\H@, it#øÍ (ó! ø  FPresulI Z7/edŠ"FÀ*
ý%noü s,
Œ / a® ƒ�of string¤‘at represë  s~ossibles #on®Ð. If\n'
       û*'present, this function overrides the standard "dir()" '
H  ï'search on a\n% module.!  òFor a more fine grained customiza½ f¶ h ¬ ÿbehavior (settingw ðattributes, properti ñetc.), one can sety ù Å"__class__" S v !ofì  -ñ object to a subG Á of "types.MSoType".ñ  =�example:v  ß   import sys' 
Qfrom š 2 ¡ 9  2   ò rVerboseN (  ö )Ñ ›ÿ def __repr__(self4 "4   “return f'|   {= ï.__name__}'\n"Ñ 
 \ ” 0set— ,, value¤ ’print(f'SÉ  {P o}...')ž  �  ¦super().__Œ  C † É     '.…$s[0%].3 = TÉL  ?NotÍ%’Defining £ T "__gŠP" andÐ ! ×Oonly® P  affÈð lookups made us†  h thï access syntaxÒ¯â€“ directv N f ð ÿglobals (whether by code withinu  © C O, orí 	ð via a reference¾= Tâ€™s „ !diwary) is{ "un@/ed>"ð Changed in versè@3.5:ú_ ˜Ú „Š� ¯now writabÏ$:New� 7� ‡g"__dir� ‰?sÀ             '\n'
  ¯'See also:#  ÿ  **PEP 562** - Module __getattr__ and __dir__H 	÷   Describes the "E "F "G Ï" functions Ö Aon mŒ /s.v  !ÃImplementing² _ptorsL = 2   The follow ñmethods only apply when an instance ofN(Oclas¼ pcontainm  ”q ñ (a so-called *d· !* O )–�appears i¤ æ c*ownerN   (z e € must beE oeitherá 
K Bâ€™sœ u !diS`ary or]  w Ð   afor onW/itÐparents).  In  x 0exaSÀs below, â€œz  >ðibuteâ€� refers toK   hÏwhose name iÞ h 4key$„propertyý ;70â€™‘ 	?__"S"qobject.Ö…__(self,§!, m o=None), B   C�kto get)e Ò " (Üet 
paccess)2.ofx$atm �p 2 . 	 op4al 0@argu›" iCï r  , whileå 
*½ *Y  L thak/wa/¿ed through,x 
@or ""Ö ®– Š N ôî $»"ƒ   This ÿÁshould returÝŸ computed›Pvalue0�raise an
Q"Attr±Error" exce÷É À              ò*'   **PEP 252** specifies that "__get__()" is callable '
?  ÿ'with one or two\n) ÿ+   arguments.  Pythonâ€™s own built-in descriptors support| Othisq 
Ü ðcation; however, itÜ blikely÷ ?somä ÿthird-party toolu IhaveÇ XÉrequire both	0
!ç 
´“attribute½@mplený ÿ always passes inU
¡ x 
ówhether they are å dOnot.>  ¡object.__s‡ÿself, instance, value)?  ð   Called to set·  5e on ani $ *s **!ofC _ownerw 
Pclassv Ra newÃ 1, *Ë *%"ð    Note, adding¶/ )"|t"__delechangesÉ ¿the kind ofÈ 
œÍ wâ€œdataíð â€�.  See Invok› àDé/foA0morS_tails0"U
XQ/Y TlT†
p T+ 20nam0Z  ,  ,a^Atime0ownµ ! *h *ƒÏcreated. The
“ò has been assignè*Í d*:€  &"Ä ‚ “as onlyUð ed implicitly ašê "type"w ð	constructor, so it will ÿneed to be called '
  ÿ'explicitly with the\n- B ÿ appropriate parameters when a descriptor is add| ¯to a classs ÿfter initial creation:6  Ã "  w / AD * O   p£ "  û ¦ = custom_
/()� ‚A.attr =F 0 "– ^ ð.__set_name__(A, 'E _')\n"ïY 'Y QSee C_ ng'ÿ	object for more details.N  ÿ   New in version 3.6J "@The ð Áibute "__objN0__"}áinterpreted byÏ Ùÿ"inspect" module a“ * Iifyi#³where this .Ÿwas definR(settI ir sÐly can assistFÐruntime intro›  ? ofòrdynamicÛ¨Zqs). ForIðables, it may indicthat ans €instance— a
ñgiven type (or a subÓ)Ñ ex¤ÿed or required asw Ÿthe firstæ @posi1Ðal argument (èòexample, CPython setsàE2 )s àunbound methodT  =@re iq  ‚  edÙ/C)"y PInvokmD¤t=  \  ¾In general,n-<†c@â€œbv/ngq øbehaviorâ€�, one whos*ïaccess has bee¶ overridden?¯x !inc™ protocol: ž�get__()",  · ë ?andl €"__delet÷ð)". If any of those ÿmethods are defined for '
  ÿ'an object, it\n' ÿis said to be a descriptor.5  !Thž Ñault behavior§ ðattribute access ist Oget,Ã s Ÿor deleteu Fthe ` Ufrom þ ÿâ€™s dictionary. For instance{ ¿"a.x" has ax ðlookup chain starting with "a.__w ÿ__[\'x\']", thenN �"type(a)9  °and continub pthroughP <ÿ base classes ofw €" excluda Cmeta< "±However, if¥  )°ed-up valueü¡Í v £Qone oI Æ · )oñ Python may override“ 1def¥u ½?andw TinvokQ 9‚ f ead.  Wher& Ÿis occurs· inž q £precedencew÷depends on whichÁˆ m w– Lè 
0how˜ !y 3 ocalled"  *Qpoint¿ S ca¯'*0bin¬,kx". How7"rrgumentC gmbled BO"a":E  ¿Direct Call% 1   þ €implest ÕÐleast common W ô ïwhen user codedu /lyr 
 N9kesÙ:7ï"x.__get__(a)"Ó"IM" B’� 
3If ¹ þ’zi¶ðtransformed into™t 
 X/: _ #, ‚	$Cn!¨@, "Au ã Àmed into theO '
  �'call:\n ÿ   "A.__dict__[\'x\'].__get__(None, A)".B  ßSuper Binding' ð   If "a" is an instance of "sD p", then " bO ð 2 ?(B,q 
ñobj).m()" searches "obj.__class__.__mro__" fory BQbase 6 O "A"v 
ðimmediately prece€ "B" ande  ý Pvokes ã ð descriptor with, w 
çmçOobj,n 	
$6For×ÂsÕeðÛ pÿinvocation dependsý —on which X ømethods are defined.  A# {  cat  3 O anyw bcombin¤  ÅO�)", "__s\)öl ñ "__delete__()".$/itt ƒdoes notÔ  h Ä u >�accessing1ïÿattribute will returnw  thF�ñobject itself unlesÌ!reÝŸ value in  P E ?â€™Ú% ¹bionary$ A îâsp �?/orì 
“B, itÕ Gdata?@; if { sneitherH w ka non-e Û.  Normally,  î “ _ bothp "¯˜#,O/le‘ u �have justxw ¤J.  D[sñ¢ @ Rº x p(and/or1q)Hÿd always override aL!re`iœOin a8À¿n contrast,eÀ           '¿can be\n'
  ÿ
'overridden by instances.2  òPython methods (including "static �()" and “ e"class, O) arÁ ðimplemented as non-data descriptors.  Accor‹ ?ly,y þ O canç �redefineÅ @eö ÿ
.  This allows individualv /tou öacquire behaviors that differ from otherÃ? oft ‘the same kí"ÐThe "propertyÓËfunction is •!a “ñ«Š 	Â	ªEnot ‡ Ú $ a¼ t � Ÿ__slots__# = #  *a *eò
 us to explicitly declareumembersO(lik_&Aies)ðPdeny eAcreaïÑof *__dict__*$ èß*__weakref__*â (unlessÒ  @d inm bï* or availableâ ßin a parent.)w   ë@spac41vedm0 usÙú j† ÿsignificant. AttributyÀlookup speed�G be D  lye ro� as wellÉ"uobject.U  ôMQ vari� as·  ž string�0ter; ,Ùsequenc#   âU fs with} ªnames usedØ ¡Yë 
’reserves 1forudƒ s
ppreventÇâ Pautom= r	ZÐ '
            Ö'for each\n'
 
 ß'   instance.&  !ÿNotes on using *__slots__*N - 4  à* When inherit… øfrom a class withoutš o, the ,ï*__dict__* andx  S qweakref- ±ttribute ofa r „ Ÿll alwaysw Ïbe accessibl¥#3* Wì a› Å •variable,¯s cannot bÏassigned new	^  s Q ‘listed inß definition. ¿Attempts tot 	œ “ to an unu Š ¿ name raisen$"A®¯Error". Ifs 	‚dynamic { @mentæDnew w Ás is desiredanç /adW
4"\'ƒ0\'"ç  ¯qsequenc^tstringshÊ�‘  declaraœ x ¢ƒ,¶eK 1/ngx �á 1 do‚€support † ` refer5 R? it¬ 	= x 	X  o uis needû?addâ à   9ãr 	þ
fË-N �are impleðQed at×¢Ÿ level byç @crea�× 	ädescriptors (Ik  ÄD )?êi ü.  As ax 	sresult,#a@used|0set½Oaultë `values§ u 	d3 edGy¹; otherwise(À            ÿ 'the class\n'
  ð'  attribute would overwrite ? ÿdescriptor assignment.P  ñ* The action of a *__slots__* declara ÿ is not limited » !to¢ á ÿwhere it is defined. }  ßed in parentsv ßare availableî  L Rchild‚Òes. However,  1sub¼ ßes will get ax ¯*__dict__*u 	0andÚ pweakrefY`unless*cy also & }b�(which shw 	ñonly contain namesâ€ny *addiÖAal* q )>$I31Ã 1s aR × Ãoa baseJD ,� instancÈ
@variìv Ad by< d L † i4ÿinaccessible (except byR	Ðretrieving it¸‡Ödirectly fromŠ Ä¢ o). Thi
arender)P meanz !of` ¦program un?!In v Ÿfuture, aä 	ÿcheck may be added to prevent this+$‰Nonemptyå2doeX„work for™o derivi iÈ 	4â€œ%ÿ-lengthâ€� built-in types such as "int",�€"bytes" É"tuple"$°Any non-strÌAiterÇpÎsÆ¡ . Mappings±	e¤be used; hô 	4he uspecialkƒ ® p 
É  ²ðvalues correspondþ ¿to each keyO$1*__K T
 M!s  uif bothW?hav… ª ?samz

 À           'ô* Multiple inheritance with m ÿslotted parent '
  ÿ'classes can be\n( ô  used, but only one\ ÿis allowed to haveo €attributr 0rea¡ /byv 	 Ç ð s (the other ba¯ Bmustj `empty ' ¿ layouts) -€ ¯violationsu 	ÿraise "TypeError"..  ñ* If an iterator isE€ for *__´ ¿s__* then a´ sdescripB c7w  ` peach of\ � ñâ€™s values. However," ö¦ q 	Ö€ will be÷ ™ý  BE,
 '+ ô-references': 'A  s  Ê/'*  2  5An � …  µÃa primary foè/by±ž ÿperiod and a name:~  &  œ uref ::=” ï"." identifierH  5TheV ae-0ate×�an objectV_a typæÏthat supportm+ w Ós, which mosty ¿s do.  This,O §  isÛnó 2ask¶pproduce3 ka whose¿  …*y †§ | s  �~ñ
 customized by overriding– z 	`"__getHÀ__()" methodt÷¯ I ¼{òis not availableQexcep§ ƒ 
Â3/ iöePd.  OØ3wiso Z 8 }en xÕ‚ 	P/edz ‚determing^ &. Yû * ƒ x 	 A Fsame8øáá may yield difì ¼0ðugassign': 'Augmentðed assignment state
 is\n'
  /'* 2    0Aug` 
w öis the combination, in a single— -, – Oof ah   I qry operQ  and aní :@    D   a¾ _5�_stmt ::= `target
 .op¬ ö
(expression_list | yield_ )y [ 	”!  y þidentifier | attributeref |… €subscripg¯ | slicingw ,opr   ð ’"+=" | "- * @ ¨!"/ #"/ % O**="| g  R| ">>/ "<< & ^ |D W  �(See secü ÑPrimaries for�Ðsyntax defini$ As of NlastK_threeg  �symbols.Í/   An1‚evaluate î(which, unlike” onormalf  ²PÀs, cannot be¡unpacking)0 •É¬e   Ö’, perform¸ Š±specific to\@typehj ² j  "on= "woåAnds,µ 6 | dresulti Žoriginal5\.g  BThe  ” is only —od once5 H  ä Ð€"x += 1"˜ •€rewritteËh  €"x = x +C ¡to achieveK°milar, but òPexactÏ Îqual effect.Ihj  @ verÓ_, "x"&¾ Also, whend Ÿpossible,g   „0act¤ Í$isdÿed *in-place*, meaning tha° Pratheë/anj  Pcreat= Ça new objectS  X ¸ì,‡>old× B j  `is mod±Ÿd insteadGUöåÍ üœ ­¦ MÀ         'le‰ft-\n'
  õ'hand side *before* evaluating the right-( }.  For I ïexample, "a[i]j  ò+= f(x)" first looks-up0  ",l Dn it Bes "0  ¢ o �performsi   µ  addition, > plastly,^ `writesm ó  result back toˆ .Q    AWithE Pexcepj ¡ of assign9�o tuples€ þmultiple targets>Oin ag  ñsingle statement&g   À done by aug 'ed P I Ps is Ô1ledÈ ÷same way as normalJ .s.² ¯Similarly,h  w ™òpossible *in-place* behaviorÞ ëobinaryf  Qopera|/ed ï   ç a i ø i  ‚  p s& )óòwhich are attribute referencesû ž ncaveatq_about�  Bclasgwinstancb ps appli‡Ïs for regula¿ » DÝ à,
 'await': 'A	 º expression… +'*   bSuspenuQexecuÁñof *coroutine* on an *‚ 0abl œbject. Ca ñ only be used inÌaN P funce *¶'š 1   q _ê a ::= " m" primƒ?  New in ver$@ 3.5p  I? JBË· arithmeticT
Ž  Wf,  BThe v l Q haveø`conven alè LoritlÐ'levels.  Not7 pat someóWtheseÆ Q alsovyUzcertainÎL'nonŒÐ'numeric typek ¡Apart from¨ Spowerh * K1re  <twoµ  , " û…dicativ³ "or;% 8,veM ûLors:  F   mBu | M"*"  $@" |N  °Y ?"//F   F À      '       Ám_expr "%" u D\n'
 �   '   a S ::= / | >"+" - L  ú-The "*" (multiplication) operator yields the product of its ¦ ¯arguments.d  ô must either both be numbers, or one . - ,bek nc ±integer andª o_ k ñbe a sequence. In! Àformer case, Q ’ ô are converted to a common typep $n ?+ed¬ @toge� ‰ Elatt‰ § p repetiŠq is per° Üd; a negative² 3 7facº†an empty;  g@" (at	0is g"nd	übe used for matrixG Só.  No builtin PythEps imple<U this{3a ÿNew in version 3.53 Û €/" (divi6 )Ä "/ ffloor  s(qquotienUtheir¼@s.  n vnumeric T\firstÐ i3. D° }î— «s a float,{Mwhil'
ä 	N `resultæ1 anì@ger;ö    Œ
õ=thaÆ  of•hematicalPQ withN 1â€˜‡ �â€™ funcèRappli[-th· � &. Òby zero raise T"Zero)kError"Pexcepo )%Woduloáremainder fromÜ >y ,ofí Q1 byC osecond?

†G ` M	# A<Fight€ KM ZLéµPs mayÖ•;ingMpoin5pò, e.g., "3.14%0.7" equals "0.34" (since   
Œ"4*0.7 +Ä A ".)­ mÖkg alwayQp³<sam†=sigˆ!asÂ^ and (orpÐ); the absoluöte value of the result '
  Z'is\n ñstrictly smaller thanA labsoluW ësecond operand_ L[1].a  ðThe floor division I bmoduloX ñtors are connected by” 
¼ œfollowingd ÿidentity: "x == (x//y)*y + (x%y)".  F„  z 
i Lalsod œ Awithž àbuilt-in functÚ Ä"divmod()":  Œx, y) ==Q ¥ #,   /[2KqIn addij Ñto performingŽ 	R � ±on numbers,! 
ä <"%"’ åptor is ’ overload‘ ;¶ng objects ‚ œold-style` A  µ 0att¸ (g ðknown as interpolaã @).  =¯syntax forP âis described iØý
Python Library Reference,O eÅbprintfÃ @ Str© BForm´ ñ!Yˆ	©1or, Ã¡L© o º°not defined$„ complexû°.  Instead,_@vertº
k ab 1loa¡SpointL 0 us ª v"abs()"ùïif appropriate$T"+" (Ð)
q yields²0sumß itrguments± #ar ó must either both beÀ 6s o @sequsa  Ó 
=sam¿AtypeOœ  Ærer case×lÉ j edla”;mon' O Ç  nd] è=  geÉ 2. IÌIlattu Ç -ar± Ïconcatenated“¡-" (subtra–3difC < �
<Œt  Ï…numeric & 1Tfirst¡ú  7 ) K ð,
 'bitwise': 'BinÐ @<ionó? '* - ' @Eachæ  "nthree p t has a ªt priorityñ� 'level:d     ð_expr ::= shift_expr | and_expr÷ "&" shift_expr\n'
  q'   xor ‚ ::= and | 5"^" A @ A N $|  5"|"M @  1Theµ û)operator yields the bitwise AND of its arguments, which á Mmustd Íbe integers.  ’ ?^" ’ 	óXOR (exclusive OR)¡ N ±  ¢  ’  |’ 3(inŽ C) ORŽ � ¨ N� ò,
 'bltin-code-objects': 'Code O Q v* ( 	 	l | Á are used by)Pimple‹ation toù � ÿrepresent â€œpseudo-y 	ðcompiledâ€� executable Python ñ  such as a funcƒ 
—€ ýbody. They diffe¥- FfromU ÿ pbecauseû ÿy donâ€™t contain aü 
pference#Othei} 
cglobalõ  Xpenvironi=.  ’ô freturn°_builtv
Cin "z6()"pand canA¡extracted &~ •@î	pthrough[`ir "__áð__" attribute. See also% m"; �" modulexæ‘ 	˜Accessing� ð raises an audit  evÓ"ý `.__getÍ ?__"x 	Fwithn ? & ""Ö '9” Ñ ^Àed or evaluaÝRby paÞ °it (insteadûaÚ 	ãsource string)
  "Ü k@or "~    ©/inç^[ã P uÿstandard type hierarchy for more… À   'informatóion.\n',
 'bltin-ellipsis-object': 'The E ! O _\n'
  .'* 2  RThis ’ ÿ is commonly used by slicing (see › 
S* ÿs).  It supports€ ðno special operations.  There’ ¯exactly on€ `Î , named "Ñ" (a built-in;  È d"type($ O)()"Ïproduces thez rsinglet1þ	S  It1·written as Þ Šor "..."”Knull�ONullŒˆ™ ' |breturnwAfuncß that donâ€™t}@'exp )G / ay Zvalue§ ‰ý'¢ Qy i›o "Noney	   u
'qo'same g¯	_   R 1Rsã3ypeO		QA   0 'Tl c°s representŒu variouê ¦  f/AnS" 'J Pâ€™s 0 / iÁ 
Sacces56theLË M%)"Þ/arÓ'‘	51 on¨  Ø  Yò standard module sÁ�'definesþ_s fory 	Eall c 9 )sdÇÁ s Åölike this: "<class \'int\'>yaooleanoB LÄ 	kO$  ò   or_test  ::= and | Ð"or" and_testX\n'
  ò'   and_test ::= not | U"and" D 7  D ÿcomparison | "not= 	O ðIn the context of Boolean operations,ž ð also when express  ã >aree qused byf ñrol flow statements,ƒ ýfollowing values are_ ¾interpretedg Àas false: "F ð", "None", numeric zeroå ƒall typeÜ ^emptyQ qstringsÿ  "àainers (includ« " `, tuplN nlists,K 0dicL0ari& 2setV `frozen ß).  All other)ðtrue.  User-defined objects can customizev‚ir truthq ob Qproviý þa "__bool__()" method.ü  3The`#orµðyields "True" if i#0rgu## iÛ,£ ëd IOwise’ Ø1 "xõ y" first e”�ates *x*;Ÿ ?*x*– >its’  D e5 ’returned;î ¥ A, *yQ j d�  œ`resultnmQ h 4is b ü $?or û  i,§˜ ú ê üie ú 0Notaat neiy�r "or" reâ ct,$1and;Ž ?the/ � 4 to•Øç�, but raz ) }he last_ ña'p.  Thiscðsometimes useful, e.g.,º0"s""  a Û -ngi Nthatd òshould be replacÒ“a default¸ ^ RÙgf ó "s or \'foo\'"  rdesiredh £.  Because>0hasck Žcreate ai 2newK  Â/@s a Ï þq regardless5 ‡  5  j ñÀ            ÷4 'argument (for example, "not \'foo\'" produces "False" rather '
   ñ'than "\'\'".)\n',
 'break': 'The " p" statew (\nD /'* $  1   U ”_stmt ::=e (  Š û*may only occur syntactically nested in a "for" or "while"P  loop, but :9 €function< Áclass defini ¿within thatQ  .  òIt terminates the nearest enclosing ˜ Pskipp  %  op{ 9al { "eÚb ‘clause if^  L � has one› f36 &is« Dd by¥,Y Ücontrol targeàkeeps its curr°Ovalu† DWhenj „ passes g Qout o¦ 7try’ “+ a0finö  Å Dat "%   � is execuD�before reG P leav�	‚;the ; i H ’ able-typesQ`EmulatG  Š objectsG ¢_s2  i 0.__{ ð__(self[, args...]ý
x 	 'P °   Called w´ §€instanceG0â€œi ´edâ€� as a V;�Gm Ï'this methodw i�±ed, "x(arg1È ò2, ...)" roughly translkoQ "¡6(x)xQ 1Q ÑÈ ù ³ª
e <0'A       ´ (e.g., a *+/*)Ü‹possiblyn Àempty series)**;s*:+  !  • ‰	  œÔprimary "(" [R Ú_list [","] |yücomprehension] ")‚   uÃG n m !osf4al_k sg 
d þstarred_and_keywords]Ô Y 	  ´  4 e > |y    ` &9 ð\n'
          ' ø  positional_arguments ::= œitem ("," u)*\n'
  )' Q 8   Q `assigna ö_expression | "*"  Q òstarred_and_keyword¢ (: 3 |  _y )J ‹  Ü N  ñ 	Þ 	_ û    sJ L( ™ ó 	ô « © M ‰," "**" ¬ R¥	C  ¥ßidentifier "=˜]RAn opGð trailing comma may be ñ×ent after theLK andQ ¡  ”°but does noF AfectG «semantics.C  Ts ðrimary must evaluate to a callable obj[ Ì(user-define� @funcí Çs, built-in  ¦methods of V ‹s, class›  : ( ° instances,$C all  Ps haveaL 0"__Ë b__()" P E areà u).  AllY{s) O %�d befores a ð is attempted.  Please refßAo se#O F: YyBs fo`syntax7ÿformal *parameter* listã$Ifß Ô },¾ yæ û first converted toª L 0, a® �llows.  FD 1, aœ  · êunfilled slots�iõ@creaz þ ô ó  b  If² !re³ N2­ &â �placed inC ð Nš �.  Next,zKeachO }V  Qis us6  dŸ1minH  correspondª 1 (iÓ M  @same`  ž	Ða -R name§ < m § <Pso onþU
£‚already Ö ê "TypeError!ceô @rais‚Otherwis� ¯  qe) ä ´ > 
¬ ¼ ,u  7ºit (even if¯ ;the` ô U ¡"None", itL sð slot).  When alõl arguments have\n'
  ñ#'been processed, the slots that are still unfilled  Ywith O ,tha ñcorresponding default value fromr €function  0ini *. Z "(D; À I s• €calculatÇ ªonce, when` "isc »ed; thus, aQ ñmutable object such as a list or di« `ary usS Ö 	Kwillb óbe shared by all callpõdonâ€™t specify an¿4*ors Î í ðis should usually be avoided.)  If+!reL	Ä ;anyÃ  ] às for which no` v Ì i—a» »"TypeError"a Pexcepò is raised.  Otherwise¨’#f ŽŒ "is—
Â s`  çÚ Ä    �..  ð **CPython imple\a¬ ½detail:** A 0mayh<vid"”built-in ±s whose posñal parameters do notÌz names,UKeven± iÛyÚ0â€˜6 Tdâ€™ ô @purpq aof doc-Ñ R, andÚR  ‰�efore can�  ÕRuppli×`keywor´3In . µ isÑ h	 <cas œ ired in Cžúuse "PyArg_ParseTuple()" top Ã %ir^sô	mù žJÅnGmformalŒ Ë� ¿G, a   p, unles“_  us€ zðsyntax "*identifier"–€present;aPthis – µ*atÂ w ¿ ¢€ receive¡ t‘„ contain€  Ô (ssÞ	Ma 0(orbempty Y Øpre were|[ N )áCany ¹Q doesqÉ _a= Üø ¯  eÎ"Q Á ÂÀ in this casµe, that '
  ™'formal\n û.parameter receives a dictionary containing the excess keywordL Ôarguments (us2 + 1s a7 Qs andK . P valuw sO  correspondL & ø), or a (new) empty®  if[ zre wereþ +no_ 
Ë  � +s.(  Ic ð syntax "*expression" appears in‡ A funHj call,� "8 b `must eð òate to an *iterable*.  Eleg@fromj 4se   [s areQ ptreated‚!y AaddièTl pos 	P  For` 
»  Î b õ"f(x1, x2, *y, x3, x4)", if *y*Î sÏ û sequence *y1*, â€¦[*yM*,d òthis is equivalentM  � Ÿ with M+4É 0 *xg 	ø=*x2b Ž � ¿ *x3*, *x4*A(Ö o#­ †�althoughK
2G	› ;mayû Xô *after* explicit‡¼@, it$0pro¨*edº‹*before*_  Ù§K   (©jany "*åækâ€“ sehlbelow)0;So:u  ü   >>> def f(a, b)1 a   ...ÏRprint& G ,..} \ Þf(b=1, *(2,))8 >2 1  ” ?f(a8 	ñ Traceback (mostH!ntô_ lastÉ ð
  File "<stdin>", line 1,;Š<module>Ž ô"   TypeError: f() got multipleF=forx 'a'\n":1 2ƒ ' Il€unusual z Mboth ó
ü	õ	a  to be used §Asame[@, so ‘practice PconfuŒZ doesý;not_ \arise-$ ï
ð	I ñ ã  *mapping*»ePtKŠof whichÍ å Àreated as adõditional keyword arguments.  If a õ is already\n'
  õ	'present (as an explicit9 R ù, or from another G »unpacking),a ða "TypeError" excepµ » is raised.1  ð!Formal parameters using the syntax "*identifier"¨ ("* Q ôcannot be used as posIï ` slotsL -asQ _namesÆ ñChanged in version 3.5: Func€calls acú any number of "*"m;andƒ U"**" „/s,Ó ús may follow iterableY B ` ­("*"), and	W !diÎ 7aryŽ 
d (¬ )/ðOriginally propošìby **PEP 448**2 ¢  A Bñ always returns some valueòsibly "None", unless it‰s¨ +anb »².  How this\  Ìñcomputed depends on£@typeÅ;theP  ° ƒoobjectà  If© [isâ€”H  a×³r-defined fa:' ñ   The code block for² 2  Ö @execÖ Q, pasw it% M 9Rlist.] @firs/ ¯m pwill dod Jbind{,   Ÿ  to‹  z "s;“¢is describp	¨!se¡À ‰9 E2WheÈ¼ Rs a "i"P Pstate‹,– @spec¡s´ 7 >!of x	±  &¥a built-inî ¹omethodø`result3up Ipinterpret; see BW  s %	  ¬€èsý   l"d ¢ ;‚a class 'Ð  ÓA new instancm#at6  gih I Ÿ q  9€rrespondÞ>uses ^ ¿€ed, with`	<º> EA tha¢�one longe Ðan the argumeðnt list of the call:
 U\n'
  ð'   instance becomes& û first argument.6  ua classJ :  @   T„ % ðmust define a "__› Ñ__()" method;� �effect i� )n µ >theb �same as iñ #atM A wasý  edÅ A,
 '¬ Q': 'C� ‹ kitionsU *    AQ ç $s !0objÕ €(see secu 	Þ  ŽKdard_ ü type hierarchy)d. "  Ž 0defíñ::= [decorators] ""% n;q[inheriZ] ":"tOsuitv 5  e T"(" [7_‚_] ")"ž y  9 «identifier,  f ñis an executable state¸y¥ 	k   ` Àusually give¹ #  EBbase.1es ÁAMetaF¬es for mor!0advZñ	d uses), so each item inéa úshould evaluate to a€j ¬ Oñwhich allows sub+ aing.  ã es without(, @, byÌ¡ault, fromº " "‹ ›"; hence,©  �L FooÈ ®l   pas�E ûis equivalent to  s (­ C{ Í0â€™r5ite©‡ edßSa new™`ion fri =ž ñNaming and binding), us  D ðly created local 9Qspace4 Øoriginal glob0 B. (Uâ,Ä×û contains mostlyž 2fun«Ú‚s.)  WheÃq†finishesû ,Í,itÝ7%ýis discarded but itsü Úis saved. [3]b AÄ £  ù¬Tj 'ñ µ? Ù  	7 ù`  1"ndX ˜ ± N šattributeµ !dih0ary¬§rú Á 0bouk bo this™Ð object in thõe original local\n'
  »'namespace.   ThI ðder in which attributes are defined  ûthe class body isM vpreserv- 2new1 ùâ€™s "__dict__".  Note that this is À ‹reliableb öonly right after “ ñ is created and * 2for€ "esl 	d <wer` í Qusing]  Ïition syntaxQC Š  4 òcan be customized heavily c AmetaS/esY 0es R @alsoW Pdecoró ó: just like when   Æ 	ô @funcÍ +s,Z ¿   @f1(arg) 2 Æ œ Foo: pas0 û	is roughly equivalent to'  "  Îf     3 = » Œ(f2(Foo)Ä X  `evaluap rules < ^JPor exáBsion  ksame a½;forb w˜`ors.  x `result t¸�bound to|S ËBhangw0ver¢ a 3.9: �ies may/û  with any valid­ Æ"assignment_ô á". Previously,  ýgrammar was much moRñrestrictive; see **PEP 614**dodetailþQ**Prop !erM±note:** Var)s©¿	a© mý;ã yðshared by instance¾I 
¹A V ¸`be setK‚a methodŠ`"self.é  =“ ue#CBothñ,an¥Š ¯�accessibl^d È B notÝ	6â€œ{ L"â€� J%an÷ m @ hid!  4Ð 	n  à ¬³ ¿Rway. ½r úPbe usãs|defaultw Å* T, but‚ utiws-!reeJleadÜ punexpectÈ ªDescriptor³ #to¡OvËŸ`differðimplementation detai…ls.\n'
  ' ›See also:  ý  **PEP 3115** - Metaclasses in Python 3000: ÷"   The proposal that changed the declaration of m[ 9to ¾ ?the` òcurrent syntax, anZ ôsemantics for how ´ OwithJ } ÿ are constructedJ#!29#C¿ Decoratorso Radded§  < q.  Func# Ý 	omethod_ d} ð were introducedµÓ08**Ü ö,
 'comparisons': 'C 
_ P&'*    æUnlike C, all r B opeSAhave&Isame„ Ÿpriority,m àwhich is lower|n tiÿany arithmetic, shifting ori kbitwis€… » •.  Also uå Áexpressions ù Á"a < b < c" Þ ÍP è ’interpret.K is¦0ven alÚpmathemaúÙH ,(  Ž    ::= or_Â   (©_è $or /)*J 	/  J �"<" | "> !== > < ?!="O ¸  õ| "is" ["not"] |
 ?"inG \ ãð yield boolean values: "True"p"False"-S• Y ^ `can beúÿined arbitrarily, e.g., "x < y <= z"‚iDe pequival$toE  &K ‚, exceptù0"y"u eò Ÿated only.�once (butfpboth ca!"zU Fnot F !atâBwhen– t  � k 0fouÆo4fx)x`FormalZ if *a*, *b °c*, â€¦, *y 0z* åe£ 8¨  _*op1*cE*op2W 2opNT  /JØ@ors,Éÿn "a op1 b op2 céO... � pN;is öT àand b op2 c anû d ... y opN '
  ß'z", except\n  ÿ that each expression is evaluated at most once.D  QNote ^ ÿ"a op1 b op2 c" doesnâ€™t imply any kind ofÁ ÿcomparison betweenp ñ *a* and *c*, so{ ð, e.g., "x < y > z"Ü ÿ perfectly legalu (thoughj ÿperhaps not pretty)S fValue ê s& = &  ðThe operators "<", ">  == > <  DC"!="Ž e@the  e¨ ñof two objects.  ~  1 do9°need to hav'_e saml /ypw’Chapter Oo ,¨ Átypes states £ † aë ç ? (iuPaddit20to ^ g `identiú C Sof anq  …n oratherÂ€abstract> r ð	in Python: For example, A ea ¯no canonicã_accesÁ¦method for´ Bâ€™sMz.  Alsok ¿requirementG	?theÛ ! €should b`nstruc‹ÿin a particular way,n  öj  bAriselöall its data attributes. Cr4<  ¿ò an ª !no'@of wqA ô`.  One¹Ø �think ofn ðthem as defining
±e Andirÿ¯, by meansm  Æ?heiŽ I•aã 
€Because ˆ =rs are (ž S or iª R) sub" #"k"“yqinheritsdefaultâZÄhavior from P  »4ý /ca�customizÖ/ire !byû< ª_*rich„g
Õ À      'methoû,ds* like "__lt__()", described in Basic customization.\n'
  ' ÿ.The default behavior for equality comparison ("==" and "!=") e  �is basedm Àon the ident[ !of ÿobjects.  Hence,| l  /off áinstances withb 7samw presults=æ ,Ö d  ! j ;of x ”differentð Fies { Q $inp ¡.  A motivÒ“Nthis­!isã ¼  ¿desire thatn Call |ð should be reflexive (i.e. "x is y" implÄ _"x ==ü?y")zAË Zorderh`<", "> 2<="� ">sois not~ Ÿprovided;ì ÿn attempt raises "TypeError"m] -n ”ñlack of a similar invariant asÔðH   ³~  ^  SÃO N,2
±l ÅÂare always u±P, may=¯in contras¤Oto wŽ1typ³rll need¶ @have?aensibl«0iniä ú ½Û PvalueÔÖ  -¨l�.  Such ‡ o\ej _theirf ¯Êðin fact, a numberÌ ƒbuilt-in� r Odonen  æ~ Eåfollowing listVP¾   §  mœ  ?mosd`importñ
á « 1* N&s€ F snumeric/#(N  Õ¯s â€” int,±ofloat,D 7@lex); o  ï  NÃdard librarys  P"frac�3s.F
 /m ¢"decimal.D ð" can be compared wiû
thin and across their '
  Ÿ'types,\n  `  with; ÿ! restriction that complex numbers do not supporti _orderh  N ±arison.  Wi½ Ñthe limits of… «   involved, yj N el ò
mathematically (algorithm ‘) correctý Pout l@/ofj ¯precision.m  P  The-2-a->ñ	 values "float(\'NaN\')"À˜ ¢"decimal.D 2 q ñare special.  Any �!edÇy eaÏ_ to að 5not¶ l Ì ñ is false. A counter-intuitive implicaNiœa2n  s á  Pequal¾  ãðselves.  For exa±Ÿ, if "x =¾ ‚ , "3 < x",5 2< 3” A A= x"x ?all+ÿ ¯, while "xp !G  @rue.°is behaviorF ÌBlian�Ÿ IEEE 754ps* "Noneº @NotI	bmentedÂ �singleton-Ÿ**PEP 8**Õ badvise²Ò  ± Rfs for ] Ð should alwayæ Q doneg_ "is"q  or k °not", never þßity operators'ñBinary sequences (insta °of "bytes" “   ¿array") canº b€!!edù ¥ç#ey¡L ²lexicograph¾  uptnumeric]D0ele/mString&0str0omp•¡ Ð ´ èÊ ±al Unicode  €points ()`resultÄ  built-i˜1funÇl ƒ"ord()")K ÿir characters. [3]8  $  # ˆb^0can³Pbe diplíd·S°À(instances oûf "tuple", "list", or "range") can be '
  ¿'compared\n  ñ  only within each of their types,   ÿ restriction thatm � Os don ònot support order Ÿ ÷ ison.  Equality  acrossm _thesei ½  ³ ³ults in ine] R, and~ ?ingk 6ÿaises "TypeError".›  ³  Sequences� ûe lexicographically us° /ofN  correspond2 ðelements.  The built-in containersìe % _assumiPident< Ñ objects are l0 to9bmselve~ qat lets ÓobypassÖ U  ®tests for ~ ÿto improve performanc t©1mai ª ðir internal invariaN¦  :  LÍå öˆ between—1llegöworks a%�follows:‰  æ  * For two co| t <Ï,`y mustk(Å/sa. jpe, haveO  , r length˜„@pair‰� 	ÛÐ $  ó® d–(9ÿexample, "[1,2] ==Ê �(1,2)" imâ  false becausÒ  z@ is ë1theâ )8* C‡ k4mI!edP2 c0 7 ¢ir first u&@- _,x] </ KO,y]"—!haûÀ value as "xP ¹y").  If a ä˜ßO doe› �Qexist¹a shortqã ¦<ÿ î C .Ù F!<  3]4_ trueúð* Mappings (instances of "dicðt") compare equal if and only ;'
  'they\n  T  havH ð*(key, value)* pairs. Ed 3ityu Ïison of the Q  @keysŽ n \ ÿs enforces reflexivity.3  w  Order’  s ("<", "> @<=",… ¿ ">=") rais­ ¿"TypeError"~ à* Sets (instanÆ ðof "set" or "frozen ƒ) can be¨ /ed1`within® ë `acrossp�ir types¬ û   They define o6ð
 operators to mean subset� ­ �superset« `tests.t ôose relations do not† RtotalŒ Ÿings (form �example,m €he two s�q"{1,2}"¸ P"{2,3 !rew %S, norÞ sn oof onel tanotherE sCone  ò).  Accordingly,š $  º/noEðappropriate arguments $BfuncQ¡which depeø Sk  ò?ingØ {hp "min()A1max	  Wÿ"sorted()" producK"unddj ðresults given a list@¾¯as inputs)ÛC‘J Y g qits eleLd @* Mo¨  ý’ built-in…9#noÝ† omethod_iË  oed, so& ¨€ inheritò 3Haulte �behaviorÇ SUser- p classeQÀat customizen iR h -_shoulë follow somøðnsistency rules, Ÿpossible: *††  aGae. In ¬ words,¾ Ÿidenticall £  objects ` 	mµ …�"x is y" Ïies "x == y"|  ð * Comparison shûould be symmetric. In other words, the '
  Ï'following\n  ñ  expressions shh AhaveO Ïsame result:?  ‚ ð "x == y" and "y /x"/  D !D ?!= D !<‡ >B #† >† Ä* Comparisonaõbe transitive. The §Ä°(non-exhaus2 )3ðexamples illustratÇa¼!1> yºñy > z" implies "x €  È<P +<=Q ?< z½* Inverse cWª1 in½ÿboolean negation.ZE½ [¡2h › E+anot x ¯  �ŒG >Óÿ(for total ordering]\ 
>a\ <\ 2 ‰last two¦‚apply to¹ "ly» /edà`collecÿs (e.g.É ðto sequences, but Ë  ð
ts or mappings). See alsofO "T_Tß()" decoratorƒ I *P"hashC EEÿ	consistent with equalityëÏObjects thatn R  areD d !eib
 � p value,bwŸmarked ask  unG Oable±Python does `enforcåe�cy rules$_fact,?theœ Ânot-a-numberç s3an a 6   th‚ ù‰ i  À         'Meûmbership test operations\n'
  /'= /  3Theg ðors "in" and "not  ˆ dfor meœ Ÿ.  "x in “  /s"f óevaluates to "True" if *x* is a] ‚ of *s*,‚ oFalse"e ¯otherwise.m 2"x ¾ ñ s" returns the negN h Â ÿ s".  All built-Ô equence… .ðset types support thØ Ðs well as dicÈPary, N_whichÜ ‚ un 0wheý Ï T 0 haFó	given key. For containerœ ¯_uch ak ñ	list, tuple, set, frozen  | !, e 1lleÜ 0s.d),œ ˜£expression@ y"þ¡equivalentQany(x  _ ox == e) FOe ink ?y)".  -  astring~!by­ Ô,® ½ ùS ConlyÜm  C subm  ó y*†(n 
 ÿÿis "y.find(x) !=/-1ê bEmpty f Às are alwayspsideredpJbe a� ?anyi uÒ d €, so """³"abc"" will�õ•òuser-defined classes ;  lC "__ë_s__()3`methodËÃ Fin y,ä9"y.] &x)& _a tru› íeÆm "ÚRÇ<  «	oûobut dol F Aiter[ A áº(Qsome ÷ _ "z",@ °»l   5s zz* p,€producedlƒ ² _atingn ðover "y". If an excep  ] ‘raised du ™ M oon, itÜ  ÔOs ifm ÒU Fthatn À            ‹  '\n'
  ÿ0'Lastly, the old-style iteration protocol is tried: if a class Q  definesm ð
"__getitem__()", "x in y"^ a"True"^ pnd only Pthere /a m  Onon-j ñnegative integer index *i* such that~ ïs y[i] or x ==d    Ÿ", and nom 1lowb j araisesW "I| ÀError" excepZo.  (Ifq Pany oø m A  f Pd, it  as2R"in"  ç 8 E /).e  T#p€or "not j 2is ó‘d to haveõ ßinverse truthæ �value ofk  Ä š D ÿIdentity comparison–=  R  as "is"+ÿ"is not" test for an objectâ€™:i± :™n +@trueë ”)1*x*y b*y* ar…Csameu /. …/Anf O¨ •  `ñdetermined usingé³"id()" func×p  èo ‚y" yield/
:'À. [4]\n',
 'ÎÀound': 'Comp ® statementâ.'* † \ ò contain (groups of)ª� ;ym~'affecty !orV 0rol8 ` execuH� of thosea  2Žsome wayÖ.'IÓ‘'general,1ð span multiple l½ , althoughm Ð~'simpleË aincarn7Ÿs a wholer  ` may b M edd =one3 ‹ «  ƒ0"ifPSwhile‚fp ·  %` tradif-alv  ä>rolß @flow¬ö
structs.  "try" specifiesÜ� handlers’>/ore nleanupe Bcode. d Ã !, à *f"with"yd àallows the\n'
  ñ	'execution of initializa vand fin øcode around a block '
P l 'of\n  8 u.  FuncY ‘class defu ýons are also syntacticallya @comp‚ g ¾statements.  $A K  : � consistsþone or more â€˜clauses.â€™  A˜  g R �a header [aU RsuiteS BThe d & … aR ¯particularÂ Gòl at the same indentÖ�_level1 JEach� ð
 begins with a uniquely i] íifying keyword ñ NendsÎ N `colon.Y° is a group‹¡s¢¿trolled by  DK xcan be ÏAsemir þ-separated simple¡ | &onTqline as Ö€, follow {j& ?â€™ � ,o?it ±  Â ¦ å= ong®subsequentÈ  ± �s.  Only¶ °latter formd"a z ~ °contain nesÊ 9e -;d ðis illegal, mostly becSí it wouldnâ€™tÔ b” ôclear to which "if"¬a†U"else d _  ^long:Ë  Ä   if test1:
 ¾2: print(x)1  Aátnote th¢Œ° binds tigh˜2thao. iî?thiK’ntext, soe iG ‹0exaë`, eithŽ llzn"f"/th‚ "ö 0)" §¾M/edM–x < y < zG;Q$y)
 z[ŸSummariziÎÈÁ_stmt ::= if ¹	æ |€/le3 ?for1 ?try1 Iwith2 À         '    Ù| funcdef\n'
 '  | class1 ÿ async_with_stmti 8 ?for7 "Ö TsuiteÑ P ::= ˜ õ _list NEWLINE |
 |INDENT Ðstatement+ DE" Ø & o k �compoundé ¡  I H Qimple2 v (";" s Ž)* [";"]“  ¥Note that ¬ ós always end in a "ý" possibly followedNby ag "%¥".  Also nw ðoptional continua  f5useŠ ~^beginf  e¢ a keyword× QcannoÞ Frt aæ þ, thus there are noQ ñ(ambiguities (the â€˜dangling "else"â€™ problem is solve7oPython  g `requirT ¶nested "if"« þs to be indented).C  °The formattZ  ofì à grammar rulesÞ Ö Í & 0sec€s· nplacesf Ceach®  o,Áseparate lin�   Orityµ a  Ç 
$ = $  Z  Á@used8 � di€al execu :G  R   if› «¾ `assign1ñ_expression ":" �E  ì @("elH /)*J [¸| (óIt selects exactly one VÄ �s by evalÄ!ngo¹ü s@ ­ bX Puntil"  “f£true (see «~ BooleaiAoperM¶ 1forŸ QdefinåÊ  \ °and false);# nFá  Œ Ñ  .edÊ (J @no ocQ partd +heÞ V `]ed orzR÷PIf al SsÌÁ  âÐe suite of thøe "else" clause, '
  \'if\n þpresent, is executed.'  þThe "while" statement9 = '  `  ¸ óused for repeatedÊ °ion as long û .and  exs: Žis true:%  1   ù •_stmt ::=	`assign
_\ Ÿ":" suiteK µC   [×5 ]6  EThis×ly tests the ˆ  and, if itH ï 6< g RfirstÌ ;J a ñis false (which may be‡ : •?tim   aested)> >1 of !ø0if Æ×c Ñ dÍ 1andP ÿ loop terminates‡A "breakü‡Qed inX ó » _  ¥  ƒ ¡ swithoutY 1ing< 	ÿ Bâ€™s�ý .  A "continue"¤#¹ AskipT restƒÕ  AMgoesl NbackÏ !to—È ™rP "7for„%  %  \   4|ñ to iterate over•!el s!asequencë P(such¯ð	a string, tuple or list)	 Rothert b _bjectª7for¨/ptarget_` W "in"$ :@ Á¿%	©š  £AvaluãPonce;¹ý should yield ankš/blk o7 'nL0torÔ"crF S ÐTresulê%"e5-@".  . G3hen³0ed ¹ ®Oeach® mc ±provided by]Ô ðtor, in the ordeør returned by the '
  ÿ'iterator.  Each\n!  Pm in G � is assigQ !toQ ñtarget list using �standardp ^rulesf 3forZ Áments (see Ak   ` state
 ps), ande n _ suit×  d  âexecuted.  Whe> ðitems are exhausted (whichì ½immediatelyÉ wC Ì €sequenceB `empty Ý $n kñ raises a "StopI‚Mion"d ¾exception),g  Îý  žñhe "else" clause, if present,Š þ ?n Oloopg  ®erminates.  –A "break"³ yGƒhe first¹t_ Î~” swithoutY t	 Bâ€™sc î.  A "continuee[Í ¹ 	Qskips´ qrest of ‘ ¡Ê � ™  Ï > @next' m,3 	Ù  ØAther_-noÆ D Ê  èÀT 0or-y@ mak¨‡#s õ”variablesÓõ  w  ÐThis overwritb  ll¬Dviouaìo Fose q c žincludingõ  th; Dmade§ Ÿ¬fç ::  0   ¤iJ Ÿrange(10):  ]�print(i)I  $ Pi = 5	  0# tñ will not affectª N E 	 P# bec	1 i S %berAten ]L S@X 	 p# index > §  =Nam> .Œ ÿ @deleŽh ’-isñ�finished# 3but/ •,Zy p “have beenˆe¼^to atË 4all^ ¤ €.  Hint:` à built-in funcÊ! "#3()"›Ñ .and <¢of integerß † 'ðemulate the effect of èPascalâ€™s '
  œ'"for i\n ð#:= a to b do"; e.g., "list(range(3))" returns the  � "[0, 1,g N2]".e  ^Note:  ñ  There is a subtlety when� qsequenc  ñbeing modified by" ñ Oloopg ð(this can only occur 5„mutable k !s,&s).  AnP Àinternal cou  Â @usedmõ	keep track of which item$ µ _next,f Aand ¹ òis incremented on eaV ¢ration.  W5 æ “ g ?hase rK  º  þPength·  j ZÀ terminates.»iŠOmeang qthat ifL Âsuite deletewòcurrent (or a previous)8É @fromH Î ´ ,!  ZD ñwill be skipped (siYRt get„ g �index ofg  ´ Üçàhas already beÆ`reatedIŽLikewiseWg )¢inserts anÌ iabeforeñ ” i ?thef 5  )tº C agap M0timj Qroughr 6 (% / ‚1lea(�nasty bug!atž‚be avoidâ0makõaµ ñtemporary copy us* d sliceÁ7whoÛÚi _ !  Ÿx in a[:]Ï ‚þif x < 0: a.remove(x)U  áThe "try" statð7 = %  \  P specQps excepL€ handlerpÍd/or cleanup?codO  Upa group‡Ç sB ¤ ð   try_stmt  ::= 1 | 2 8 *  8 EA":" D2 Á	 "("ð
" [expression ["as" ident(@r]] U öe /)+g q["else"F 6 ]5 	À       ["finøally" ":" suite]\n'
  ø'   try2_stmt ::= "tr3 2 B k  "fini 6  òThe "except" clause(s) specify one or more & ìion handlers. É ~When noh = °occurs in t| é y N, nof ? isO �ecuted. r 'an8 a y­, a search¸ ofor anh  ô � is star| 0 Th S  in5!ts× ï g è Ð   ‘urn untilvøis found that matche\ �ion.  And ¾expression-Ð Cless+îP, if 2 öent, must be last; iy >anyN æ Š FB
\ a with � b  ” ,Ð 8µ f ñ is evaluated, ae¾  Ó  ]f žresultinge `objectÞòâ€œcompatibleâ€�Å  O ï 6An 3 h @ i Z ifiiÝPclasssQa basç   fVh ‘ g � ,J ðtuple containing“BitemŒz h  Š c « › ‹ .0  &IfòÑ
 6e¼¬ø Qh °Einue~@surre Acode^ošpinvocatü_stackâ  /[1Ü � I3Õ a  of“theader   á ø Tf braisesX  9 2ionG@orig,	PÔ ï €canceledh T ¶r­3new â  á=he ql  ßo‰  €@call}Qck (i¬0tre4 asócentire@�statement5dÍ  g Ë)ã 3 �‰ H? À clause is føound, the exception is '
  ì'assigned to\n  > ñtarget specified afterY ó"as" keyword in thatn h ®clause, ifg Ápresent, andY ²  4  â€™s suiteÀ ãexecuted.  Alln S ; ò s must have an < ðable block.  Whe¸ ¿e end of th$ - > isg ƒreached,[  d÷continues normally2­entire try!®statement.g  (T— Rmeanseòif two nested handlers exist foŸMsameg [Nion,g 
 Í boccursÜ· Y+te inner€ ,m >thef  ou@´ € will no¥ Å ÿ^ion.)?  Äßè•has been Þ¢using "as ÐP", itPó~clearedf "atœ (X¦1.  ¥_is asæS #  À  E5 /N:#  ¯/fož . wà `ranslaÓ5 † ?try£ §   `   finA ^del N£  l‹ ²ñ&beúðto a different n-to«bª *`to refòo3þJÿEgNs aryY0becQ withcÑtraceback att`0 to mÐyá=m aÃ § ?encÊ  Vcycleb  st^ °frame, keep“all localð1at " h Oalivd  Puntil§ ñ next garbage collecNà àSBeforµ Ögá, details abou¨R ¯ # žSstoreµÐe "sys" modult `d can E}ccessed>viab  F Ñ.exc_info()".X  ð returns a 3-tuplPnsist�‹�i Ê QclassIÀtion instancøe and a traceback object '
  |'(see\n ý.section The standard type hierarchy) identifying the point ind /thc  Ñprogram where@ Qexcepw ýoccurred.  "sys.exc_info()" valuesd /ard  °restored tob ´ir previousG S(befo€ Pcall)� Â žreturning+¢from a fun3õthat handled an Ö .<   qoðal "else" clause is executed ifÐ Ý control flow`leaves( g ö "try" suite, no¥ Á was raised,CBno "þ -",c "� Ÿinue", org  `break"Catement_ Æ D.  Eós8 E
ô ˜æ&noq byñ  ç0ced™"€Fs†ÀIf "finally"xópresent, it specifies a â€˜cleanupâ€™õ1r. 7» s#Ýq, inclu¾ Eany Â  Ò	=s. “^If ang  Ó\o ] oIcsò7is R,PP 	ðis temporarily sav¸ ÈCå .Ifg tilY © itš2re-®0 atª S end Õ l � h ¡ B.  I+ }e   o“ ‡ …¬ f …�is set aŸÇ4ext¸ 6newa .“ Î . =Ã"“6or ¾¡Ð '®discarded:ù  ï   >>> def f()3  a   ...«?try!  & ?1/0f E ÏI í? 42O   Í ?f() K )  2!anforma‘“availableÎ BÀ       'durixng\n'
  þ'execution of the "finally" clause.4  ò%When a "return", "break" or "continue" statement is z led in – >thee °"try" suite­ !a  6â€¦³ a ,Ì h .isg Falso� Qâ€˜onM ¾way out.â€™5  QThe rS valu³ Afuncnñis determined byc Mlast¤ Uc î ¯ �.  SinceN Êe alwayy-s,k ad ~ ¼¹2T willm Úbœ h û 5oneË :$  ÿ   >>> def foo()5  a   ...ô>try! "!  & ´‹'try'\n"/- (R 1 V ß Û   ¹ 'T 0 P'Addi| al informa � on excep Ñs can be founš!se°N E4 1, a, 	S Rusing‡Iraisý-tozgeneratö œ ?mayœ  k e ¥¶RChang�@versð
3.8: Prior to Python 3.8,ÞÉÖŠ(‘was illegw¶c@ dueo àa problem with+ O AimplC½ç E  1"d “& =  &  ^  ñ@usedç @wrapÝ ë w­of a block § d `methodDfA a  óext manager (see Á  WS¸S‘b @ContM MM ös). This allows commonƒ§"Žn Ousagâ €patternsðbe encapsulated for× @veni7/re’!  EÐ_stmt ::= "wi÷th" with_item (", ø)* ":" suite\n'
  7'  9 þ::= expression ["as" target];   The execut? €of the "™ ±" statementp € one â€œ° Üâ€� proceeds   .asg Žfollows:  01. – xcontextÞ (� î �given inµ ‡ Å ^O") i”  ô
   evaluated to obtain a z Žmanager.£  2µ ; ÿâ€™s "__enter__()" is loaded for later usee 3e ?xitd /4d É `methodÐ invokedÃ s5. If a£  was incluÉ¹~,ßmreturnm Á$Nfrom|bassignñ/it³    Note¼© ¾Å ó guarantees that ik	Ädng s�Áout an error0nû ßwill always b0€  called 0us,¡ R á occurs during�H-to–/thd ›€ list, iZ’ll be treˆ¥he same asÑ _ �  ‹  ¿MDÿ would be. See step 6 below6e� ñ1ò7= U£ì _ P +nå Qexcep´@causÐ 9 1 ËbÕ@itedd�s type, +,M?andb ðtraceback are pasf  –0rguøsi  ÜÂ ¾. Otherwisef Othre…"None" aW  o osupplib ) îPas exÿ @ due§  É1Q, andÄA(S h ÷  ¹ Ë0falý  # ¡i#À        'rer¸aised.\n'
  ñ'   If the return value was true, ü
exception is suppressed, N ?andc QexecuA ácontinues with^ ñstatement following "" "P 3 Ò  1 ä BsuitÝ ýexited for any reason other than anÞ h 	E€from "__l P__()"?Pignor<Fand J�proceedsf !at!±normal loca\ Í  Ê€kind of x  Í tÏOaken07The‹^code:‡  "  ÔÿEXPRESSION as TARGETA  ‡^SUITEM   {ðemantically equival8/to`  B æ   manager = (§ )+ 1ent) Stype(8 A).__ /__4 mxit = 3 ?xit2 o!= V g ] Bhit_ƒŽ = False'  o   try  € " =ù@  * §2   “ a 	· ?Tru¶   a ‘   if not·
ÿ, *sys.exc_info())i  F rèÅ 0fin7? ~ ¯ +  j  ]¦ fNone,  S – W@more¥¡n one item^ )4ext²as are  { Z3.ifc ’multiple M 9ßs were nestedê  K ß0A()~ Ba, B
 b?   "?   6] Ý2 0 Ÿ • ' ¼  Ã À ð Changed in vers+°3.1: SupporÚ4r mŒÛÁ!exYOions¨See alsýÀ            ø'  **PEP 343** - The â€œwithâ€� statement\n'
  '  / ü(specification, background, and examples for the Python P "t "h ˆ .!  @FuncŸ p defini s8 =  &  >A f` k ¡es a user-z &ed+ mobjectN(seec "seÀ qþ	tandard type hierarchy):7  !  ‚ 1defÁ
 ñ::= [decorators] "def"1 �name "("° ÿ[parameter_list] ")Æm ÿ["->" expression] ":" suitü  6   ” D 
  ³  +ð  2   =  "@" assignè_” ê NEWLINEd 
c  d 5def! N (",F" 0)* # P"/" [	 bß_no_posonly]]�   %| ƒ ©G E . Ò #Ê �starargsÈ Ñ N Ï , !  Ï F"*" g]¤Ò F"**"Z±]Ï  /| I Ê 
	  kÀidentifier [TÐ,yH   N I ["=±›  )B   M › =  Uöis an executable¢c.  Its ia Obindõ  “ ¸   ½ !in¨Ñcurrent local ¡space to a2 ÇÖÏ Á(a wrapper ad É Ecode$‘ ).  Thi·  "  q € containorreferen«  ß Ê ðglobal '
         ð    'namespace\n'
  õ 'as the global ) ñ to be used when% þfunction is called.Q  EThe ; adefiniF údoes not executed ¼body; this ´ Ngetsg F od onlyµ 
N [2]@  A· 0mayþwrapped by one or more *decorator*Q äexpressions. D)   È are evaluat{Pi
 dRed, i¸@scop^¢at containõE 1 •-. n/Th7 °result musta°able, which#PinvokÅ :ithÜÎ nobject0�Ñ argument. P�returned +en Pbound· Ïa ê  áh ªinstead of¨ ˜ Å.  Multiple Þsª}applied4.ine 0nesÓðfashion. For examp5 µ ßfollowing codt S ¿   @f1(arg) 2 1defÛ(): pasC 7 þ	is roughly equivalent to*  ?   s !  ” 3 = Ó @(f2(¹)Ý  d  except tha  ‘aiginalU pinÅtemporarily 51 �,"“ "ùpChanged‡0ver÷s 3.9: FH#s LV,=anyR^validö p"assign_Gá". Previously,Ôñgrammar was much®P ÿrestrictive; see **PEP 614** for details W9	ð parameters* hav•eW 5m * ^* "="š *ß *Ó  ‰Ù1saiýU pâ€œdefa¡V Q~ues.â€�l  ›&a < wÂaÄU t„  correspond¸F*µ*êh qbe omitBrom G¸F2cas$Œ Eâ€™s‰ p ™ à is\n'
         ñ6'substituted.  If a parameter has a default value, all following\n'
 J  '> üs up until the â€œ"*"â€� must also havea k â€” 'U �this is\n ñ!a syntactic restriction that is not expressed by‹ Žgrammar.O  3**Dÿ Ù 	ps are eÿated from left to right whenË  ef 2fun¸ adefiniÃ qis execš@** TRmeansÝ  T'ê  -­ Ronce,   H   isî–ined, andj MsameË ~â€œpre-Ï @comp¸  î !e‹u‚ò for each call. Ö  ê �speciallyf žimportanth  to underst­ o¯°iÆýmutable object, suchl  ðg plist orª_qary: ifM<pmodifieŸf m (e.g.f .byd ðappending an itemG a { !),i 	‡ Q�in effecta ‹ dâ G�is generp #w/¡was intend¡A way arou	�j  ‚sÑ ‚"None" a» Tðexplicitly test @it iµže body ofi hf  | , h:V    â ñ ðs_on_the_telly(penguin=º )L  á3if *  „ - ,  3 - O= []� % .‘("propert
 ¡_zoo")> dreturn— '  Fp ‡’ semanticÓ�described“°more detail "se§y_Callsn $A £ñô  always assignsI!toU±sþ0men” Î  "= 3‚, either–1posSpal arguM "s, É ~keywordd 9 oW ÖÆ > ‹ Bformï id¸ Afierùm ¤ «Pent,  �’itializedÂtuple receiv.~y exces5÷ Ï À         'pañrameters, defaulting to the empty tuple. If ˜form\n'
  ð'â€œ"**identifier"â€� is present, it °initializedd Þa new orderedU @mappŽ `receiv
 ýany excess keyword argumentÁ ,a ¥ >newe ä k oå äsame type.  Pa#q after ì á .orP  	4are° w-only pT qnd may  -beµ žpassed byk 
® abefore¯ /¯  ‡ ¡positionalŠ U › ‹  F €.L  ðChanged in version 3.8: The "/" funcŸ "q syntax$ /us:·to indicate¬ ò Z ýs. See **PEP 570** for�detailsß , Ôð have an *annotaÙ #* c Hœ:r  ex7  ·E`follow ¥±@ nam±'Ana8ˆ — ,f ©even those³ "æJ or ø-. Ï FÔsŒ h � �â€œreturn8— 	z  Z:-> ”Ú >thej *`list. vs¡�ps can b íy valid PythonÔ …   Í Â1enc<Ð Ás does not c
S�semanticsï a¸ ²  O  ¤ @ues ÙÄavailable as ?of O  !dic0ary•\‡ Asâ€™Ms¨ d_6"__† Ns__"µ �attribut D Æ ` objecR"K �" importq?frow À"__future__"` ,!Œ@rvedžstrings ad oruntim9 €which en_sQÁtponed evalu×Ð.  Otherwise,Ny•81 ³!whoe1def0 onÛ Àexecuted.  I˜i­s0M• •ð be evaluated inñ a different order than they appear i H '
  œ'source\n ^code.  ö$It is also possible to create anonymous functions ( =not’ ^boundh ðto a name), for immedid 0useÞ pexpressc þ.  This uses lambdaQ 0 °, describedJ !seª ! L: €s.  NoteStS² b  #Ðmerely a shorŸdÈ Åa simplified%c `defini@;Ê a8 ( Æ ða â€œ"def"â€� statem ðcan be passed arop /org  pssignedßqanother‘¿ just like Š  bó ^2ÃeÃ @formIýactually more powerful sinceÉ /itÉ  QllowsËPexecuWÆ of multiple-Às and annota& sõ**Programmerâ€™s note:** Fðare first-class objectkAÃ ÇÌ ØË ü>sidŒ> !žs a localQ �ï-Preturû*or9ý.  Free variables¾ ?useÎ ŽHnest÷ o aaccessž£ \ !of N³ Í ¡containing9 ¤def.  See ã0Nam  æ@bind  ]b odetailþ _  :�  õ  **PEP 3107** -#& Au7  ãñe original specific§Y¿” 1484“ ¯Type Hints‰ D� Fa?‘ndard mea| SE0: tS eOhintc¢ 1526¢ aSyntaxö V‰@pAbilityÏ�  € mq declarO�s, inclu¶ À aPinsta¤ 7  ì !63ì ðPostponed Evaluationø of Annotations\n'
  ' °Support for ö	ward references within aH L by J ¯preservingf @  O p stringr ðm at runtime instead» _eagerO Qevalu× ."  ÏClass defini= X ;A cZ e Ces a ð object (see sec~ M TheTŽstandardw þtype hierarchy):"  "   0def÷ñ::= [decorators] "¸ "% ýname [inheritance]ž Ÿ":" suitek ;  k ÿ"(" [argument_list] ")"< ‰ ‚  < �identifiA � ðis an executable stateŠ !. z® Ú ¬ f ±usually givÚ &  ´BbaseC"esâAMetaÒ  esíO mor3 0advgñd uses), so each item in the d sshould  me to aœp µ yñwhich allows sub. aing.  õ0out72 ,(Ñdefault, fromÆ "" "‘ @"; hl,²  ÇO Fooø  Ûo   pasï N þis equivalent to"  ‚ (Â ‚Š  ‰0â€™–`ite is2º ed	Sa newÌ`ion fr«µ \º 0Namsñand binding), us  W ðly created local …`space 4 e /thÉ Øoriginal globC B. (U5,Ö <þ contains mostly´ 2fun"«r.)  Whe5 ÑMshes ion, it   Tðis discarded but6 �is saved.o ^[3] AÐ ¯  7ávŒ ìD ø ž  … Of À     'classeñs and the saved local namespace for Øattribute '
  ì'dictionary.\n ‘The classS p is bouq co this ‘object ink �originalj œ d ­ €  .  ’ Pordero ewhich Ü Ðs are defined   ¿ ~body isP `preser;¿ 2new× €â€™s "__!ò __".  Note thatý -isã Žreliableh ò only right afte–œ  HareatedÍ*  ¸ "esr š?werf  ü QusingŽ iâ syntaxfCôc– òion can be customized heavily i Cmeta® _ !esX @also] Pdecoró: just like when   Ò 1fun¾.s,r ¿   @f1(arg) 2 Û Ÿ Foo: pasE 6 þ	is roughly equivalent to*  "  �r 	    3 = Ð �(f2(Foo)Ù  a  DaevaluaUrules*nPor exBsionY N>samCa> h žÂ`ors.  ~ `resultPtâUpê &\Bhangÿ0ver¾ a 3.9: Óies mayoþ  with any validÆ Æ"assignment_á". Previously,kÿgrammar was much mo¤Prestruñve; see **PEP 614**†detailsî Q**Proy !er±±note:** VarŠsjaµ j;ò ypðshared by instanceæI #D kh!seM‚a method¢`"self.  =« ue“CBoth.È nÍ £ 5�accessibláº á B not$] 6â€œ‘ O"â€��  š%ans ƒ hides a¹ é g ü ð\n'
            ð( 'when accessed in this way.  Class attributes can be u+ has '
  ¼'defaults\n Çfor instanceQ ñ, but using mutable values thereq Mleadk .toe àunexpected res‰ Ú.  Descriptor¿ •to create˜ Q @vari” þs with different implementation details.B  žSee also:  ð  **PEP 3115** - Metac– es¬¿Python 3000= ð   The proposal that changedar declarÅ Gof m^ .tot/hef 1cur¢syntax, an`  semantics Dhow ½  QM † a`onstruØb5!295Ç`Decorax +Radded³  +? q.  Funcú é ìomethode d†   wá‚introduc|î?8**ë e ŸCoroutine… = 8  0Newc@versä?3.5“ -$ f7`definiBx - 	/  �   async_o –def ::= [y1] "  q" "def"– �name "("ôÿ[parameter_list] ")"s 	 À["->" expresC¯] ":" suitG T PExecu#C of écÞ�be suspen§ ‹ ÷mmed atÉ Nmanye Õpoints (see *^ ±*).  Inside'@body† %a # `  m ® ,e q"await"{ðidentifiers become´ý erved keywords;e J c f#s,ß st Ä"8EonlyÈ.inO ç × o bodieã!s è!ed{ — t) ßfalwaysZŽ „  s, even if–óy do not contain 3 ork ÎZÀrds.\n'
      T'\n'
  ð'It is a "SyntaxError" to use üyield from" expression inside N Žthe bodyh þ	of a coroutine function.*  ¿An example G :5  Á   async def� ‘(param1,  /2)F  %Ï  do_stuff()W  & µawait some_ç / A  RThe "¬ f�žstatement+ - +  Ó_for_stmt ::=z $"  8  AAn *± ðhronous iterable* provides an "__a ï__" method tha×  ñ directly return= a  þtor*, which can call� 	™ ±code in its� Fnext� �Ÿò allows convenient ê_ overœ   5s‡  for @ing Ø Á r õ àp TARGETOITER@   Û�   SUITEL Oelse8 29   Is semantiÅ�y equivalD/toa  B !  n@ = (Í « c€ = type( %).“ X @runnen= True#     —3le ; Â  [?try  $ ¤"= c
» ¿»  B Àexcept StopAI� •y »  = Fals÷   \ ?    % ?O�See alsoÔ Ù‘__()" and ')Ö detailf!n. M%" ¨O out!XÐThe "async wiøth" statement\n'
  /'- ,  ñ	   async_with_stmt ::= " %"  :  AAn *8 ýhronous context manager* is a * @that Û Nableg ðto suspend execution in its *enti þand *exit* methods.I  þThe following code:%  E/ÿ EXPRESSION as TARGETG  Å^SUITES  ÿis semantically equivalent to`  B $  ŠF = (§ )+ aKƒ = type(ÃB).__ /__6 ?xit5 ?xit4 âvalue = await _ q f �hit_excepk OFals' 9 ?try+ ‹«1 = ‘ @  * ²2   “ a 	· ?Tru¶   a •   if not4xitÿ, *sys.exc_info())p  M ?rai`   finI? … ¶ +  j ¿	­ fNone,  l i¦See also "n@()" Ö L  ¯for detailáIhó
a "SyntaxError" to use anøÈuœ outside ¡/thÃ ð	body of a coroutine func¨†ÿ o ,ô  **PEP 492** - Ct sÆ Þ: sù H 0    ‘proposal –FmadeÈ  ¿    er’nndalon1con›/ing rPython,– Àdded supportv¡ )þ -[ Footnotes ]-n  1[1]æ «: s Ó `agated the invoca² é Ÿck unlessr  ì"eP" cladÐwhich happensn  … another` À       'exce¸ption.\n'
  ' ÑThat new exce) ÿ causes the old one to be lostG  Y ñ[2] A string literal appea a] ñfirst statement int ¦ @funcÁ g  À ñ	body is transformed intoK ; ü
â€™s "__doc__" attribute l ?andg žthereforeX B*docë *38_class³ 
›namespace_item | @ õ,
 'context-managers': 'With SðC# # M# Ç  à  /'* 9  3A *£  £ *G°an object tSdefin, ™   ”'runtime O /tov ðbe established when execut*†a "with"M. Th¦ v   dÁ w ShandlÇ Qentry#,éÐ¡exit from, |desired t   ò x 1forQ ã Qon of Pblock tcode.  d£ïs are normallyx  invoked usW ÉY‘ (describ/1 secò  † ›s Çá), but can als8ð used by directl~0vok› ð Þtheir methodsV †  '� �Typical Ë%ofžJ°include savŠ /anðAestoºnvariouq �   `'kindsÙbglobalÊ , ïf $un ¯resources,y1cloÄ^openeœ t   @'filG ?etc."PFor mÞ inDap= on6_, see®Ñ_ Type¾#„ÿ.__enter__(self)î À       '   Eÿ)nter the runtime context related to this object. The '
  Ÿ'"with"\n  ò   statement will bind` òmethodâ€™s return value€ s Ÿtarget(s)v ±pecified inî á"as" clause of š O, ifã Oany.k  ?ò__exit__(self, exc_type
 ñ ¿, tracebackÔ i q   ExitÓ Ô1¯parameterst 
�describex €exceptiol@at cg ç^Oto bÕ $Qed. Išx 
¯Bwas 7  …`out an`‰ ¯, all threv @argušs›v 
Ÿbe "None""   Ú Ÿ ñ  is supplied, a"e p wishes	X ; @ress}¸ 
™°(i.e., prev�ðit from being propagÿ/),
Ÿit shouldr 
Ìba trueÓÀ. Otherwise,² ¦y	�processet Ànormally upoÝ ÈU¸%0NotãEat "Ë#)"ªs0 no@@rais- r paÌ ?-inC
µ;*iès caller1¿sponsibilit #ŸSee also:‹  ñ   **PEP 343** -$0â€œ‰6â€�ôB 	!  7 sª ca? , Sgroun²examples fo·Python ’” @,
 'U€inue': 'ð" "Ì /'* ö ' !  y u ¦_stmt ::= w 1  . ð	 may only occur syntacti2ðy nested in a "f¨or" or '
  ¬'"while"\n ðloop, but not nested in a functionO Áclass defini mwithing Othatd ð.  It continues A ó the next cycle of ý arest enclosingg  µ .h  dWhen "v �" passes‡ prol outu òa "try" statementž aP ð"finally" clause, ò   � is execuMmbeforeÄ  reI c Pstartõ  î " ô ð,
 'conversions': 'ArithmeticÚ  [ _   '* +  Q‘a descripvof an a„ ðoperator below ur Í { � ophrasej 0â€œ5 Ànumeric argu›Ss areç  ^ðto a common typeâ€�•,isq o _meansn Ç p ½ Aimplaæ fÐ built-ii Ÿs works aj �follows:m  µ* If eitherí  HÞ °plex numberÞ 1e o( æ k  1 S ;  *s  wiõiª Afloa¼Upoint± ù k Ä m  ù Ç  Z ¸ %óboth must be integers and noT U ~ ´  �necessary‡
` ]Ê �Some add6ð al rules apply S„certain w¯s (e.g., aÀ0str>as œ ƒ Fleft=!toOuâ€˜%â€™c �).  Extenë sÚ¤ S Ÿtheir ownß ¤ I � behavior¤qustomiz? ¦0Bas¡ T ¥*  ÿobject.__new__(cls[, ...])1  ñ   Called to create a new instanc´*cls*. · D  '"‹  )"]¾Q  '  „ðic method (special-cased so you nee²ðt declare it '
        ×'as such)\n'
  ÿ-'   that takes the class of which an instance was requested P oas itsm õfirst argument.  The remaining ¿s are thoseh �passed to´ o ñobject constructor expression (ð 3allH ü ?). t « Oturnq Pvalue>ð"__new__()" should bÒ ce new ˜ ZL¯(usually aq C ¯of *cls*).ž  ð   Typical imple˜ñ ations create a³ i  8³ =/byl Pinvokë D Qsuper4 Xâ€™s 4Ïmethod usingN "B 4().nñcls[, ...])" with appropriÊ xsá0andOndmodify¿ bnewly-&d'ÿas necessary beforÅ reMá 
/itÏ)IfJ1is u`ed dur¼ ~  ü Ó2it ¨ Ö%aor subÕ ”,W  Kh f 
ñb__initX$@will]æ ?likq"> Eself),p pwhere */ 2* i" Á 8 ËÄÞ òÙo  J �same as wz 	è7¹/or.tdoes noå	ðS,/DthenÔÓ * Ø ˜¿ ‚ $be©Ö ;ñptended Y lyàUallow›eã«ŸimmutableÔ qtypes (iðint, str, or tuple)o €customizÔ ?n >�ion.  Itr ðis also commonly overridde à custom metaclÍasses in '
  ¿'order to\n ÿ   customize class creation.3  ÿobject.__init__(self[, ...])3  Ð   Called aft½ òhe instance has been§ oed (byú ÿ"__new__()"), buto ðbefore it is returned to the cŒ ÿr.  The arguments arex _thosel p°] sðonstructor express�¯  If a bask ± /anr "”¡)" method,Ú rderivedøYâ€™s + 1@ /ifq �any, mustÍ qlicitlyG bÿto ensure properE EQializ‹0 of± r #Cpart0 61; fZoample:G †"super()ÆQ[argsÄ"    BecauseVŠ@ and  à ›ï work togetherÇc"?ingÀ „7s (ü ÇÓ à,€ /to‚o öit), no non-"None" value may beJ£	Ÿ; doing s«Rwill TÐa "TypeError"ä  p 0ais6Ÿt runtime³?c.__delÂ»&@when´„ [Sabout­ ‘destroyedZ/is†_is al	žpd a fin0’er or (im^aly) a l _.TÜFôm Â$Ri "c? r ?if Q0@deleÖo  KSA   IVñpossible (though not recommended!)¤ q3Àthod\n'
      ù-'   to postpone destruction of the instance by creating a '
I  ÿ'new reference\n$ r ñit.  This is called object *resurre† Ÿ*.  It isN  implementa· ÷-dependent whether "__del__()"n Ã osecondn @timeZ En a © ½ €is aboutVbP_oyed;1/th'cÚnt *CPython* ë Q only=¯s it once.¹   ]ù not guaranteed that7±methods areq /edÐ ?fork às^ ¡still exis©nl�terpreter /tsÐ _Note:„  ¼ð"del x" doesnâ€™t di„bG "x.G1â€”± â_formea  decr³ e3à count for "x"rpone, an“es0lat/"	 *"ed½}"x"â€™s{ Ïreaches zero}*«ª’detail:**Í qQsibleë ŠIPcyclek@prevó ±8 NTof an]OfromH goÙ/to%0  I¬¶1se,‡ wÑPbe la�odetect( Òodeletek!by^ *_ ðic garbage collectoràA common cause´“Þ  f e�@when3PexcepT� has beef Pght iþ_localLvariabl� üqe frame‡L n“ Î… , whichq à (	ôts own tracebackR = pŒ  7là ¹ st?ghtSi*eq QåSee also: Docuå7 Ÿ"gc" modulð \n'
             ò'   Warning:\n'
  ' $ ÿ!Due to the precarious circumstances under which a ¿"__del__()"l 	ÿ"methods are invoked, exceptions that occur duringn °their execu8 r 	j @gnorj rand a w,° is printed Ï"sys.stderr"v �instead.o 	ßIn particularŽ!'* Ke can b+ð when arbitrary codeÆ ’_being« 	 A `includp‡from anyg 0thr÷ O  If² q Pneedsmãtake a lock orw pother b  � Û Ïresource, itq €may deadO   a`$e >    alÜ ye ” On byä   pp ÀPgets XCrrup^¬eÝHb 	\ d3{ opreterÌ ÿ shutdown.  As aq 	°  consequenp õglobal variables it Ùoaccessw (fr ‰modules)§àhave been dele\oor setq Ÿto "None"k ð  Python guarantee(2at é °s whose nam{ ?ginß ßwith a singleâ OQscore
Ì |Üþ @ bef% '¥ p  e ‚; if no > PreferÛ–Esuchö t ¿exist, thisr  \²help in assÌPimporºmá_stillÅPavailiq !atÂBtime' «™ { /_calleÇg ÿobject.__repr__(self),  A   C{  eŸ  L ð()" built-in funcÒ $qcompute× �À          'âý€œofficialâ€�\n'
  ÿ.'   string representation of an object.  If at all possible, Q Othisl ðhould look like a valid Python ex… s� athat c/ /bel used too †recreateË à with the same} �ue (given% Ó ¿appropriatek Âenvironment)0 
w is not5ap!of‡ r Oformk ð	"<...some useful descrip¸r...>" sgÏbe returned.B3The# o Àvalue must b±0 ï class definesk 0"__cŸ__()" butq  1a"__str- ,()n @ pis alsoOd wh½Pâ€œinP%�instances•í iè Ÿrequired.á  p   This1’typicallyß ðfor debugging, so it' Ÿimportantp« /th³ �ò } * Iÿ-rich and unambiguousÔ #Ë_self)ÿ  ò   Called by "str(T !)"›  ÈÐbuilt-in funcº ˜"t~?andp Q"prin'  to compute‚ J± or nicely 1 ?abl¦0q ‡y¢­‰;n @É�ómethod differs from "R ß1in ¢ PthereÁnºSexpec‹K ²<m Q?: a„ð more convenientÝ`concis “0can {E!e% ault imple/p<è	Ö?typXy"Ö À         '  ý calls "object.__repr__()".\n'
  ' A ßbytes__(self)-  Ñ   Called by H Ñ to compute a €-string ¨ ¿esentation « _of anl ³ ñ This should return a "€ #" % F  5 ƒ__format#,  Ospec)Rthe "L ð()" built-in funcA, anD¯extension,¾ ‚   evaluZ2of k Cted }�literalsh  Ž i R"str.< ?()"m pmethod,ì`producì2â€œ; dtedâ€�z ÷:2e *d _’ô * argument is ar Othat_¯contains aÜ pdescrip–@ of ,s tÅo ïs desired. Thel ‚interpreïp d Ø  uph ˆ ?typm @mple	?ingk "ßÿ)", however most classes will eitherÙ �delegateh 0dto oneIø Ê €s, or us<Žsimilarh ˜ syntax	�   See Fú’ SpecificLÐMini-LanguageW  aü"¹ Ó¸ €standardP 1matYº % € €e must bUûÛ�   ÙÐhanged in verQ 3.4:òI  â¨@" it`o 0raiða "TypeError" if p—ó d any non-emptyêèCÔ '7:N¼À__(x, \'\')"\Û ?nowÏ pequivalœ0to Yq(x)" raYEthanstr(x),n„ À".\n'
        W'\n'
  ÿ'object.__lt__(self, other)1 e1 /eq1 nb gÄ gb ð*   These are the so-called â€œrich comparisonâ€� methods.7 T ócorrespondence between operator symbols andR  names â_is asm ð follows: "x<y" ¿ Ds "x@y)", = e 1  N 1 n 6"x=J 5  5 K "x!  u >– r 	1.__I  4;"x>i Oy)".H  [   A ç’¢may return�ingleton¥ÿ"NotImplemented"q ôif it does not i5 f #ÿion for a given pairw /ofi @arguŽ ñ
s. By convention, "False"€@"Tru /reb "ed‘ n §successful3 . However,Þ #se\Ts can]¯any value,r @o ifX q dÿis used in a Boolea»ßcontext (e.g.p i	PcondiHñ of an "if" statûá), Python willŽX"bool())op Ô to determine÷ ÿresult is true o$fíÒBy default, "f"®Qs "__û¿)" by usingê Cis",î?ingÑD ¼ •Acasem Ë ï:r  Ô &xyr [else ºP. ForÞ ½ >b
 º°Ïdelegates too 3 ÇqinvertsÃÌàunless it is '-
  ÿ'"NotImplemented".\n'( ÿ'   There are no other implied relationships among the K ¯comparisonl ñoperators or defaultn ¨ l �; for exa¿ ,p �truth ofn P"(x<yj âx==y)" does nor ÿy "x<=y". To automaticallyß 0gen¼ eo ’ordering æ  8ö from a single root O, seO ô"functools.total_` /()Ï� 1SeeKñ
paragraph on "__hash__()"v@some�oortant	onotes æ	Pcreat	*^ ÿable* objects which support customh Pj1andÅ usq p as dic½�ary keys4	Àswapped-arguUQ versz  ofZ¯se methodsÏ ¿(to be usedr @whenM e left k ¹8 …fp 1butJ _rightr 	d P); ra,"lt ZD"__g rBeachAOâ€™ss Qrefle›g eg  :re R è N s Ã )eqk nk ¦their own Q .r Iðm ™1nds�ðof different types, Ž — nd0l  2 _ is ao `directç#in ’subclass ›N— l  W ,r h”#edìa 	Î ß has priorityf h1wis•Ü ¹ c	b ´.  Virtual ø  |¤i p ¯considered.ß.P_self)h  ñ   Called by built-in i¬ L ¨ >Ðfor operation]s '
  ß'on members\n! ò"   of hashed collections including "set", "frozen ?andq "dict".n 0"__n ÿ!__()" should return an integer. The only requireo �propertyp ñ"is that objects which compare equal have the sameÝ ¿value; it iPñadvised to mix togethera  û  G sx t —   Tonent' á Ù å óalso play a part inë @isonr . Os byã packingo @them§ o a tuple  Ø  , Ñ  ¯. Example:K  ÃEdef (_self)G 0   E Š  ((4 r.name,  3ick color))€  o   NotÍ ""’ °)" truncate‘eúped from ?â€™Ñocustom¦ )  aQmetho‹ š@sizepa "Py_s __t". OThisé
ð  typically 8 byÛ ñon 64-bit builds4 î'322 <K  If%ð  usõ!te atEÞ Ÿ /ofL	 different Ò  0 s, be sureàQcheckÙÏwidth on allq Ÿsupportedq 	– à.  An easy wayi Bdo t�ÿ with "python -cm 0"imm _ sys;p 	 print(sys.¦a_info.Ë /)"ÅP  žð class does not defin% ™"eqø—/it¾ ?notl X  W ¼ Q aÁ0 eiu@; if°. T3"__™ o 1butÏ ^@, it)Ástances will% Ÿbe usableß pas item; q  Ô C •.cÀefines mutabmle '
  ï'objects and\n" ±   implemen( ÿ "__eq__()" method, it should noti D g q"__hash[ ¶, since the �ation of ' /abÔ `collec, sm ñrequires that a keyâ€™s[ ñ  value is immutj 1(if� $F@ v Y qchanges8¡will be in_ Rwrong… �bucket).N  ð   User-defined classeØ (ve»0and  Jq¶áOs byo Ðdefault; withÅ rm, all ÿ	s compare unequal (excep' D k °themselves)²G "x.4p returnÍ¿ appropriatùŠOsucho 	±at "x == y"‡aies boç   is M K0(x). %  ?y)"ÑAÆ«�overrides¿‰ � Adoes€ûÑdù •qhave ith  ¼ ' Èÿicitly set to "None". q 1WheÚm “ R äaõ #isb °, instances  d /òo Ü ‰raise an(Ð"TypeError" w· Ÿa programÛ ¿attempts too qretrievÊ"irÚ|,ÂŽ @also`correc[Ý Ïidentified aÚ un®µÆ Ächecking "isB_(obj,µ B�.abc.HashQ ½!4If ËkÀ@needH Ã?ainp?the³  ˜¤%	Xpfrom a ‰"ntZ,¬j ¿interpreterr @must¶ãtold this explbtw£/ =M €<ParentC®>Õ, oÀthat does noýt override "__eq__()" wishes to '
  ¿'suppress\n €   hash ' òort, it should inclul  # ÿ__ = None" in thep ?clam 	ádefinition. A - q which   es its ownã w  å ¼ Othat× ñexplicitly raises a "TypeError" wå  beè Porrec* h Ïidentified aHÿable by an "isinstance(obj,/Pollec s.abc.HashE �)" call.à  �   Note:  5 By‚Qault,Ý6"__ÿvalues of str and bytesÓ ¿objects areq 	ðâ€œsaltedâ€� with5�unpredict� random ~ ¿.  Althoughw Otheyp 	‘remain co•ts  inu ÿ
individual Python process´ j  Þ ? no€(  Ë ð between repeate^Avocaù XyŽ .This iz   intended@prov$Bprot[@ agaŒ/ a;ÿ	denial-of-service causedO	ðby carefully-chosen inputs ˜ 1oitL_worst{ ?cas&
pperformF ' a ` inser<ÿ, O(n^2) complexity. j /Sei 
ñhttp://www.ocert.org/advisories/ ï-2011-003.htmlh ?for8	òdetails.ChangingãQs aff; ^Aiter g PorderOsets'ÚF h ð never made guarante0bou©1is V  – �o(and iô
@typi¹@y va8 ùa32-bit<!64 ¯builds).SeKOalsoK	ÿ"PYTHONHASHSEED"D …�à version 3.3: †~"iz…Pis en– ü“0def@‡ /õ .__bool__(self)³ À            } '\n'
  ÿ.'   Called to implement truth value testing and the built-in Q Ÿoperationq ÿ&"bool()"; should return "False" or "True".  When thisn ßmethod is notr ðdefined, "__len__()"5 cû p, if it )  í à  Pobjec0 r €considerY2rueb ps resul: ÿ nonzero.  If a clasä ” sl yneitherÝ nE __jî ÿ, all its instancen ?arej Ö ó.\n',
 'debugger': '"pdb" â€” The Python D! Z /'* -  þ**Source code:** Lib/pdb.py-  = 2X   rmodule "Öö an interactive sÏ  WûN'forb k€programsYát supports setÅ`(condi íal) breakpointN'ande Ásingle steppt¶ °line level,g0peci ž of stackÈ orames,g  !li,€e“_ V ”arbitraryh  š>'thÕ�'contextI #ny£ f“ <FalsoA½post-mortemÈ ©>ingÊ  Hrcan be ms under § … 0rolJ
Ÿ±'Dk  er­ãextensible â€“Â’actually aAd as£Í'q° €"Pdb". TrÀis currently· 0ocu²ed but easi ­erstood byOread G6!. *Í o‚face use½ m:@s "b] TÏ _"cmd"F@â€™s‹!mp”`"(Pdb)ÿ Àypical usagePrun a*  \æ ÓLÜ a ï »:-  `   >>>•ort pdb# "my(( À          " ø  >>> pdb.run('mymodule.test()')\n"
  þ'   > <string>(0)?()\n'% ï(Pdb) continue# H 1H %ÿ"   NameError: 'spam'¶ n ­  ðChanged in version 3.3: Tab-complet òvia the "readline" b 3.ise ôavailable for commands and ñ arguments, e.g.m }currentc oglobalg  ðnd local names are offered a c 1 of` 4"p"€ .N  "`ópy" can also be invoka ý script to debug otherÀ & ~s.  Forg 0exax:  Ð   python3 -m 2 my_ >.py/  OWhenÄ ,M ÿwill automatically entÓ  ¾post-mortemd bging iy program be  ð ed exits abnorml _.  Afn h € {o Q(or aB S b þ… )ê Ç ú b qrestart>@  ¥ !    Ö �preservesI­â€™s state^(suchj ñ as breakpoints),ðin most cases is more useful than quitt~ Ï /th» ysr upon Ð «  Š:New;52: '�now accepÖ� "-c" opO>tha×execute@ 2sC1givµð a ".pdbrc" file, see DzSger ChÉ #7É mÉ Õ3�s similar( UVway "Çó" does. As with aW,<Ö Ãr pause [ É€just bef: | `first Ò¶ FpThe typ+` usageã ÈQ into8v¿from a runn³� Qðto insert\n'
      T'\n'
  ð '   import pdb; Î.set_trace()0  ñat the location you want to break into$ üdebugger.  You can � Nthend Ástep throughJ ýcode following this statement, and continuec ~runningf bwithouÏ « 2 usa 4e "R ®" command.D  °New in versñ3.7: The built-in "&ýpoint()", when called¼  £ c ‘defaults,Sÿbe used instead of "ä"Æ  ² Ðtypical usageßþinspect a crashed program is:§  g   >>>‚# �mymodule( ! _.testÁ@   TÝñback (most recentso last)¼  .ðFile "<stdin>", line 1,ß<˜ >™ "  : %./Ÿ $py@ 4@  ¯ <     2Í \ 
3\ 2] ¯print(spamï à   NameError: % H  Åopdb.pm¦ )> ü ?(3)Ô 	?-> – O(Pdb°  ž  ¹œ� definesA<@func¹Òs; each enter% �f ðin a slightly differT?wayM @  =Grun(ÄÑglobals=None,_ ÷ ¡   Executeï *Y °* (given as³  trß orÄ T}object)y^under¸ 4   qQrol. ß ý
prompt appears before anyd Õ/isf eÍ !d;` :2set`:sô8typ¨A, or0 É/cae =   h7"" "W °"next" (allbs“)ós are explained below)* opCal *ó*Ì ´ *b?ls*@arguû s ’ð ify the environøment in which the code is '
  ü 'executed; by\n ¡   defaultE Ñdictionary of ðmodule "__main__"d mused. k @(See5 g pexplana_ \  built-in "¥ À()" or "eval 1fun� >s.)Q  qpdb.run> ôexpression, globals=None, loc V ¡   EvaluatÚ & *[ ð* (given as a stringÁ a‹joobjectu  ô   under debugger control.  When "× ä)" returns, it ‡>the0   È e|È °.  Otherwisä 4is z ë~similare od  ¬ N()".  ²Tcall(s ÿ , *args, **kwds/ H p   Callz$ *I F* (aÉ ¢or method ‡}, not aÖ Æv  b   witjö0rgu†s§Ì §	ÃÈ �whateverÌ Ë  V îx6The-mpromptÊ appearsf aas soo¹ :h ¯is enteredÀñset_trace(*, headerjC ‹ Ep î þa‹ õ  Rðstack frame.  This—U�useful t–Qhard-!àa breakpoint aÎ ð in a program, eÝ-if[`a !is[oR beÆ Þ �d (e.g. wØa‚0serÁfails).  If § 2, *d*¡printed toA¾console jus_befor›  ¥ obeginsü t`hanged†0verm` 3.7: žãkeyword-only a*½ b  Ápost_mortem(fOback`  H -H 9 ï âZ% *` *$á OIf nb? $is®qit usesŸ'on|0cepöN tha¬i¶Ðcurrently bei÷ng handled (an exception must be bei$ 8'
  œ'if the\n ð   default is toJ nused).,  Žpdb.pm()  ð   Enter post-mortem debugg¹ o¡ ÿ traceback found inJ ¥"sys.last_1 "² ð The "run*" funcB“s and "seM ü()" are aliases for 7Þinstantiating¢ tf ’Pdb" clasa @callé   smethod ô ýsame name.  If youp Owantg  ño access further features,F @haveÔpdo this nrself:K  "º  âñPdb(completekey='tab', stdin=None 3out "|Cskip ÿnosigint=False, readrc=TrueE"X ­#he@"erh0   *Ò A*, *Î *  áout* argumentsmpassed›t]Zpunderlyöƒ"cmd.CmdP; see’r descriË ÃeÅ  [¨ µ, if given,°an iterablepÉŸglob-stylÂ Rmodul�¢ patterns.A»þer will not step into frames+/haÆ P   or¢ate in a mv ñ that matches onÀ Wthese‹ Ð =[1]Ë' T   Byú€, Pdb seèerö «ýSIGINT signal (whichÙ _is se¢q   whenê usý0resU¢"Ctrl-C" o ‚console)/   Èi aË ð"continue" command. TñQallowø Rbreak¡ Ú ;Ñc  again by pÁ ÒÂ µ ¥K  /ou, ‡iå r,�$ *0*À ?tru^ ñé N ï =@rols{ ‚u?Pdbùð load .pdbrc fil01romñ _ystemÔ0Exag ,ð  to enable tracøing with *skip*:\n'
  ' " °import pdb; P.Pdb(D ÿ=['django.*']).set_trace()\n"\ ð'   Raises an audit¢  event "pdbg "² Ýno arguments.¦ ¸  \ óNew in version 3.1: Theþ P O &2O –nosigint*S ü  Previously, a hnSIGINTÈ ÿ   handler was never set by Pdb« zChangedþ 6¯ greadrc­ ‡  À   run(state…ô, globals=None, loc )> °eval(expres‘C !ÿcall(function, *args, **kwdsx 	“‡ª á   See the docsao A for € ÿs explained aboveŸt þDebugger Commands# = #   ìcS ° recognizedLÝ w €are list ¾elow.  MostQ M  can be abbæa: pto one #ðwo letters as indic# ;?e.g3 ð"h(elp)" means that either "h"b s"help" † Ýused to enterd  ê  / Î Õ (but not "he_ ’", nor "H Hq  _ELP")·  AŸ Œ *@must+Psepar ~Áwhitespace ( s· .or±  tabs).  Op�%alo s ÃPenclo`in squ ~bracket_ Ÿ("[]") inf  3he ¿ � syntax;öS Ú  7�be typed lternative	H 
\ º 	a±]tical/ba ?("|�Ú E! bða blank line repeathee lastý PMed. ˆ AExce„N: ifh  s	J  Ë0a "d"_ ,qnext 11Š Æ£ 5 \x ?3 † ð debugger doesnâø€™t recognize are assumed to be '
  œ'Python\n ástatements andI ñexecuted in the context of Þprogram beingQ ²debugged.  t  c qcan als¢ ýprefixed with an³ Ÿexclamati¸ ðpoint ("!").  This is a powerful wayyinspectº Ê @; it] Ðeven possible\ àchange a varia �or call aÍ @funcÊ .2@When Pexcep$ p occurs€fsuch aC,É * >namì.ise @prinÔ"bu§Rrâ€™s_  ã Bnot Ö d©  V DThe J p supporI¢liases.  A
  øý have parameters"^whichc �allows oniÐcertain level‘±adaptabilitï°^underQ aexaminWä pMultipl mmands mayc entered on¢àingle line, seè oyè O";;"y  B(A sD 4";"Œsused as� Ý [ „or for mœ Ó"co¬ ÿ i®  § A thaØ0pasg !to\µÐparser.)  No ;lligencnRappliŒ± 1ing_ ™ ; Ainpu„ rsplit aœÍ ^firstÊ  Iq pair, ›#if(¸amiddle&@ quo�ostring~ ^ ñ	If a file ".pdbrc" exist— Š2use>ðhome directory or¹Ä >thed vcurrent= ,Â 1rea “� ã ~had bee2^typedg W©gprompt7ðparticularly use@ _Å aÏ^.  Ifg Aboth2s*¬ ¹‘)1is è ß'/anÊ � ` defin`Ahere^ñbe overridden by_Qlocal“ óCÐyÆversion 3.2: Ç1now ‡ÍK 94inu#Ring, Ñ4s " "1`"next"3­reviously,Ðthese\n'
      ô'commands had no effect.\n'
$  ' ƒh(elp) [C ]"  ó"   Without argument, print the list of available ] "s.9  — ad *7 M* asi phelp ab„ Dthatc A.  " c Opdb"f �displays» �full docÔ pation (Ó �docstringØ   "P ñ module).  SinceW Ê 0ý must be an identifier,Í ¸ Uexec"G ñ entered to get !on} 5"!"J  ~w(here)  A   P÷ña stack trace, with| òmost recent frame a$Ÿ¿bottom.  Ang âarrow indicate­EcurrY ó, which determin$ h `contexŸg ° ws@Qd(own@?unt>2Mov	Ã ý *count* (default one) levels down in"?theË ‘Â (to a newer‡)Ü "u(Ú L upØ  V®Ä Þ iØ _n oldÙ ðb(reak) [([filename:]lineno | funcû ) [, condi ]Ý B a *P *ºpset a b|  $reø   � ª € e ¬ g o]first; C ut¢dPstateÝÐiN%atA.  TíÐne number mayÓÆ �prefixede + a ê  ‡Ð and a colon,Îtspecify8 pof anotherd  ]   (probablyV 4phasnâ€™ˆÐen loaded yet½ Ü 8 Î /isd ðsearched on "sys.path".  Notìrat eachþÆ s’Ÿassigned ànumber to whicø h all the other breakpoint commands refer.\n'
  ' ñ   If a second argument is present, i Pan ex ¼sion which ` Omustd ñevaluate to true beforeÇ Á ¯is honored½ uWithout¹ a, list#X ÿs, including for ea¸  + D,¿  nønumber of times that}Ñhas been hit,Ù ocurren! ig÷ @ cour1andB °associated Ÿ it{oif any!tÙ ð [([filename:]lineno | funcQ F) [,_ .]] Ç   Temporary,iƒð	moved automatically whenP/isd PfirstQU. Theå3s a<qsame asÚ"í "†cl(ear) #bpê?... †E a *fN *² q, clear˜ M« qsEa"Pthis X #. o ±space separ#ú'of� Ë -s,e � tWthoseD sp 
e? Î Ê ms (bute ¿e 0asks0fir?on)¶Ÿdisable [¤!D= PgivenD/a QÂ ø Âe2.  d  kaB` means÷^canno(_causef  ­ pprogram; stop execu¹ , ubunlike`z ]«  Ìh Premai¤ nxJ s ”àcan be (re-)enŒ©, ¸#Eh — É Ÿs specifi*i_8[iß1Set€ F < s Ÿ@› .Y‹; îromitted=	l Àis set to 0.ø  A breakpoint becomes '
  œ'active\n ð   when the ignore count is zero.  W  @non- ,* # P ñdecremented each time7 ¨ @is r aed and › . g Óis not disablG °any associa~ ýcondition evaluates to^true.d  P ¥bpnumber [ ]0  å   Set a new *< Q* forõ À, an expressÃ ]which¼ Omustg ò  ñ  á @ befÞ ée  ç ho÷md.  If` ¤ g �is absent¯ µy existing Û  b Òremoved; i.e.Bíumade unY /al´„mmands [´©ópecify a list of coL  ®E*b =*. I/Th~T òthemselves appear o—`followUílines.  Type ac   ¥pcontainC ¡just "end"rerminatŸ‹ 0. Aznample:Q  jV(Pdb)$1( ðcom) p some_variÀ- ?end!  v   b   To ‹F allª gfrom aF0, tb""ka‘ ¬� it immed‡rly withuP; tha]•, give no‡ Î@   WM 6no nP arguq', ³ Qreferð ó/la(Ç?set… ·You can use8Ì  \þstart your program upIOgainv   )Qimplyc  Â "ÆTinue"g ±, or "step"  þ]otherf É‘@resu7Pexecu2“  > S% [  i  P   Q ½ (currentlyŸ Û ,e ä ð"next", "return", "jøump", "quit" and their '
  ü'abbreviations)\n  Ð   terminatesD P commP õlist (as if that =wasg ¿immediatelyd ý&followed by end). This is because any time you resumef PexecuÊ d ñ(even with a simple next or step),\  maƒ ÿ counter anotherQ õbreakpointâ€”which could have its own 0Ï, leading toS òambiguities about X  = B to â .e.=  Q   IfÓ  @°the â€˜sile° ™˜ -in×, _usualg smessage² Pstoppä Vat a % ÎÒnot printed. äg  €/beh ×desirable forZ  ™ m  re$`  ã}pecific'¯ /ndg 0the·qntinue.F`none oé!e ?sÏ  Ÿmthing,n ?youf  see no sig�!att. Greachedï s(Äk  A   E*et àcurrent line, ¾ Ž °first possiuª�occasionb 0(ei9  in a func˜)�is calledzoþ ‰ ‚  1 i /thº _ ))_n(extë Ç "Coz‘ion until:>µ  a‘ Á ¡ ? isf è ðit returns.  (The difference between "z ×k "Ë"f i(# ê¤s inside a“« ,z#lek P �Î; s@ý
(nearly) full speed, only! r0g  Y ð ¡   jt .Ñ�unt(il) [µ>no]p  p   WithŒ¿argument, c	 ] hŸOnumbO@greas2thaä  |3is %äÀ         '  ô With a line number, continue execution until( w4 8'
  '? ,\n ü.   greater or equal to that is reached.  In both cases, also M Ÿstop whenh þthe current frame returns./  ð   Changed in versû ò3.2: Allow giving an explicit9¥ 
t !r(¡ )Ž     ›	ú 1unc¶ý `c(ont(÷)� 'u, only ¥Á a breakpoiní*¿encountered/aj(ump)v.no" p   Set 3nex°{dwill bå�O½ �available° ?thed £bottom-mosyó.  This lets you jump back andZme codeäoagain,h "orI pforwardHBskipH ×  l Àdonâ€™t want# ?run^À   It shouldRnoted©qnot all~ Ps are Íowed â€“ forÆ ¿instance itË 0is U Ppossin!to] 1 inð	e middle of a "for" loopD–1out' h ÿ"finally" clause
þl(ist) [first[, last]]`  Ó   List sourcá  ‚›Qile. | » ­arguments,ElK /11g  ´ ‹0oun¥ú   'È | �previousc ?ing  £ ` "." aj § #, – ‡  ‚ -. k  mË Done _ aÅaÁ<? tw %  K sL   pgiven rßA; ifesecond/  Ž[Oless³ AthanE #1, iàiÌ0pre8 3 ß\ T T¿Åic 8Ó�is indicae by "->"m OIf a&À exception iñs being debugged, the line where Øexception '
  l'was\n ñ   originally raised or propagated is indic íby ">>", if itd odifferh Afrom£ qcurrentº .“  à   New in versÜ �3.2: The�  markerK Þll | longlistj  ù   List all source code forÍ Afuncw�or frame�  °   InterestÈ ºRs areÁ Ad asW "œ "@  ž : na(rgs)R  �   Printï Rargum½Qst of Ñ� €p expresÐu  ¢   Evaluaté*? * ‰ Ñcontext and p¼ ø/it¥ b »� ^Note:  ˆ"Š ð()" can also be usÉ0buthTnot aà`r commÃ =â€”j?thiÂ ¡  executesœvPython } ¥¦ 2Lik¢4"p"Ã ", ˜“ d<Æ §pretty-ROPed usM ÿ!"p " modulÇowhatisŒDtypeÎ •Së  ß   Try to get–²given objec¯display it— r: i [Ó ]Â  C   D¤  Ë$wAchanŸeach timeQ 	 0@stopÇ€&§L wWithout) , ¨õ ô Ê Ê Ó~ e ’ À     '\n'
    ö'   New in version 3.2.\n'
% N   ' ðundisplay [expres> ](  ¤   Do not B Fthe E � any more—   ßcurrent frame�  §   WithoutF µ, clear allh d `s for ] ê m · � - X$ŽinteractT  Ä   Start an 8  iv8ñterpreter (usingë ü "code" module) ú _whosee ñ
global namespace contains^ F(# ¢and local). e �found inh  J €_ scopí9 l$palias [Ø ¯ [command]Ä`Create{G €called *N P* thaŽƒecutes *] }*.  The Ü ðmust *not* be encloseCð	 quotes.  Replaceable pa&�ters canj bâð
indicated by "%1", "%2", Ñòso on, while "%*" is rt 1 J?allË  à  ƒ. If no ý  U agiven,­]b ?forb ~„is shownc ãarguments are f  ^ e d olistedp z AL`es may¨ ne= ? ‡1 Û"th�!at¡blegallyg �typed at$òpdb prompt.  Notew@nal   ^s
@*canSg  overridden&˜.  Such a³bthen h+ ]untili /thtV  ö¡removed.  E añcursively applied toø ªOfirs1 ¡   word of6 
a line;ºQother$ sl  %d ?lefc Oalon© As1Ñexample, heren ±two useful  es (especi
  we’ ôd¿!inò ð".pdbrc" file):\n'
     U'\n'
  	 ' ÿ$  # Print instance variables (usage "pi classInst")I üalias pi for k in %1.__dict__.keys(): … p} ×("%1.",k,"=",6 ?[k]o ¸ in self© ¬ ( : "unß Nname  ñ	   Delete the specified F .0  ¾! statement  ƒ   Execur Å(one-line) *H *• � ¡context ofŸ ”Ocurrw    • ðck frame. The exclamation poJÿcan be omitted unlessi OfirsÞ  t   wordŸ À a resem›ýa debugger command.  To setca.eglobalî`, you » aprefix° `assignƒf _ withb "c "4É1 onX Psame ž~, e.g.:¡  "®b(Pdb) Y € list_op{)s; Ï = ['-l']\n"öH e % îrun [args ...]2 restart$ 
6 C   R9  �Ì`d PythHñrogram.  If an argu†-is|Ÿsupplied,f ²it is split»±"shlex" and‹Qresul%  us ©?newO ñ"sys.argv". History, breakûQs, ac�` × r´ ´? arM @   pésrved. "a"È  f c_"run"K_q(uitI ã ‘Quit fromÃ  ^Bhe p™‚ being eqd› Daborted  e O cod ¤ öEnter a recursive�that stepÉQroughÈ  ] ‡Wd `(whichÛ  v°rbitrary ex�sî'orÚ toô/ine  ýnq environ)7mretvalX À'\n'
         ñ'   Print the return value for Dlast ñof a function.\n'
F  ' þ -[ Footnotes ]-!  °[1] Whethern ürame is considered to originate in a certain ‘ Pmodul? g  µ Ñdetermined byî  "__name__"Y  f� pglobalsô ø,
 'del': 'The "del" statementi .'* 	  	 ó    del_stmt ::=Y ªtarget_lis[ 	; @Dele“ (ñ recursively defÝ Àvery similar> Ø  way assign· :9'is] E A. Ra”ðthan spelling it out-ùfull details, here are someP AhintI=	8'Í n    Û  leTReach % ª, from lef+€to right½t  � removes@bindí �of that ! m  JXlocalA)orñ <5 ³space, depeR 3n wì K Y  ocÂ S2a "= "Q m $  7 s$àcode block.  Iª et  ©unbound, aI ñ"NameError" excepEïwill be raised6ñttribute references, subscriX às and slicings– ®y'passed� !to|Ðprimary objecipvolved;-õ(X  W ©in generalP €equivaleíoû @ qn emptyŸ !e èe6¨ type (butãIeven^ 1thiÔ S š #edÀ )OpChangedÕðversion 3.2: Previouslyn°was illegalËdû1e aë	’   [0 ifH f!ase�ee variab. RKnest‘\1\n'0ict!Di ¢ydisplay>  ý] 'A dR  Õ¤a possiblyªPeries«ëkey/datum pair benclosVØcurly braces:,…  ‹Cict_Ò  +"  •�{" [key_q —! |³  _comprehenº]-I '"}Á wE  d  ö e (","  Š)* [","]· &  "  B   H `expres‹ 0 ":Þð pression | "**"Ô or_expr\n'
  ð'   dict_comprehension ::= , !es 8":"  , ;_foJ 
X AW øionary display yields a new  zobject.B 
 ú4If a comma-separated sequence of key/datum pairs is given, they areQ QevaluF ñfrom left to righ	 `define= € entriesf Hthe ? <å :_ 0ach”  Ü  � `used aÿ �key into^ C  € Astorv 
O ácorresponding è ñ.  This means that you can specify_ @same‰ 
P ñmultiple times in, D‘list, and Wfinal±Iâ€™s Leb 2for•  í awill bØ ’ last oneŸõ
÷A double asterisk "**" denotes *;úunpacking*. Its operand” @must‡ ra *mapp.   E« P item­Padded‘ ò:newI y ‘.  Later ”s replace ûalready set by earlie9vº v) t â s4
0NewÏ1ver»d3.5: Uv¾ šps, origç*lyë Ppropoºïby **PEP 448**„ 
ý ¯T,– Pcontr 0to cb  S*s,ƒ —needs two…&s AwithÀlon followedo ¼ZusualP ‘â€œforâ€� Pâ€œif Âclauses. Whe	–  "ruP	ý0resN*ngf  ø Ë� elements‰` inserÁx h<ord7×Ÿ produced“
âRestrictions oß 6typÖ ¯ « £  ž$ed±: inÝ !seK à The standard P ñ hierarchy.  (To summarize‰ Š( O Phould›ð*hashable*, which excludes all mut VÊs.)  ClashesQ ñbetween duplicatÚ Ñnot detected;ß’Tœ (textual@mostÆ WÓ!) ± d ïaÓä K� prevail²pChangedZ ¶`8: PriDÁo Python 3.8E ¿	�	§	=À  'the evaluô,ation order of key and value was not well-defined.  In\n'
  ×'CPython, the: eE ±ated before økey.  Starting with L J3.8,^  U  — ?is R  f Àe, as proposp ñ!y **PEP 572**.\n',
 'dynamic-features': 'InteracŒ %  % 	Œ ò   /'* ;  ±Name resolu” `of freVñriables occurs at runtime,£D ž  ¿'at compileu  F ñ. This means that®`follow©ÿcode will print 42:Q  Ÿ   i = 10# 
def f()b à Œ ?(i)N 
 q /42# 
/f(C : PThe "•1()"7P"exec 1funUAs do ¸have accessðÈ  2'tou?ullt ò environment for-v£€names.  Dss may bL?vedu !inu Olocav  qglobal g 0pacŒf< ªcaller.  F«?arew  Wè?vedí � ånearest enclosì  … c, but ( ¢ º o.  [1]w ØË û åØÑ op¦/alç @argu«Os top roverrid"Å  w •q {Ÿf only on[  ? ist ðspecified, it is u: RDboth4@else(�if" stateÒ 	Z  
  
 N 	� ScondiY Q
'Q  WÀf_stmt ::= "ª Qassig(€_expressêŠ":" suit'� O("elD -)*‡ D @  ["?%" t 
sÄ óIt selects exactæod´ Ds by  Ü 	Y;'onã b6ð until one is foôund to be true (see section Boolean '
  `'opera 8s\n àfor the defini! 2 ofT °and false);# ú	n that suite is executedP (6 Ñno other partP øhe "if" statementB ú  or evaluated).Q òIf all expressions are™ ,˜ ’  ¶  f úelse" clause, ifN  E Hent,  q �,
 'excepes': 'E 	B Q%'*   P À pa meansµbreaking ou-°normal flow# ²� controlj ð	of a code block in order0Ðhandle errorsx¨` ad Acond.us.  An /  Y±*raised* at¡±point where n   � * iœê ðdetected; it mayô*È Qd* byS €surroundGû (orQ oby any:: ì€directly)%in qinvokedy 3 × ó i  r„� occurred…¯ª ; ñThe Python interpreter s8s a‹@when5B?s a �run-timek ¢ Ð(such as divi� tPzero)ûŒ ÿprogram can alsoP `xpliciQ¯ ® 1ithS" ,.¸  Oi r*µspecified wb ¢try" â€¦ "¹	m n  /Th!„"finallyp «.é Pbe us2"o � ye  cµ/upÑ fò which does not å 2Å zion, bu[•œ/anj K š ý p !inl Upreceh·³AusesG ‘â€œtermin•�â€� modelBwß @ing:&Æ ¨ Å < !er�AfindZw¾�happened § DCinueË ;/at™  anA /erk Slevelwtq  +RrepaiXcˆ Ö ó { Oretrtiðfailing operation ð(except by re-entering the offend špiece '
  ®'of code\n AfromF _top)."  ‚When an • ñion is not handled at all,Z i­ opreterœ  ¯terminatesi `executa !ofM ñprogram, or returns to its h ¿active mainm  Ÿloop.  Inl óither case, it prints a stack traceback,÷   w ‚Wl Ï"SystemExit"vEðions are identified@clasò stances.  The "‰ " �clause ixÃselected dep]!on�h Ž"ino :0Omusth  �reference? R  àra base    œ3eofØ y p  _can bìbreceiv/ ·­`r and 6  carry addir al informa i  _aboutÕ x’ional conS ê_Note:, %  ‚ message! ‘Spart ®¢Python APIFi�contentÑ  may change :ƒone vers¢b  to  next with($warningÓ  ”ashouldX`be relë!onîÿode which will run undbmultipl ¾ s%F®¯rSee alsö qdescrip5yP"try"GÑtement in sec"  ¥?try3staB  o"raiseX   ¹ G á ÿ -[ Footnotes ]-œ  â[1] This limitH¡occurs bec ˆ œP thatFò/ed¸   byWsÉa  opere sI  þ�available‘ k 1timˆ` modulþh  €compiled@,
 '“ ¥model': 'E’ ÷ *'* "   ÐStructure of éa program\n'
  /'= )    „A Python_ ñ is constructed from code blocks. A * *+ Œ a piecej  ,ofk �text thatJ Pexecur ý as a unit. The b Ïfollowing arh � ð!s: a module, a function body, and a class defini .l OEachË  @commD ðtyped interactivelyË a,ò.  A script file (a Ó _givenh   as standarf ¢put to thes ñpreter or specified =Ÿ h ?lin2argumen^ )Ð Õ h /(aÍ  . ­ -onÍ %  ª Q with" É O"-c"c   opÈ´  AB run$”top level¢>(as Bj  ²"__main__")# –	½ !us£e "-m" b~is alsoj aej  Ï1strT ¯dpassed…built-iníÐ  "eval()< Ð"…=()"õ˜    AÄ ý C  N Órin an *  ‡aframe*L �containsg  ð some administrax€ informaÿ0 (uáfor debugging)óGdAOmineg Qwhere8 Fhow ¼  š €inues af€ú!?â€™x > /hal ¯completed.ð   1Nam¯nd binding8  )%   Be  of namB- Y  *NO p* referÝ¡objects.    ÷ ¡roduced by� C0ope8?onsp ‰x sk 1s: ‚@l paÝ@ters½ t‹/s, €"import"÷àtements, classð and function defini ùs (these bind '
  m'the\n †class orQ ³name in the] ¡ng block),{ Îtargets thatg /arg ð	identifiers if occurringi þan assignment, "for" loop header,e �or afterÑ  A"as"V Ð "with" state[  æ þ"except" clause. The "import"h < i  !of#ò form "from ... K 1 *"†`s all RsL edœ ‹; ²ed module, ¬ @ thoÕPeginn3 × þ an underscore. » PThis � »  ñmay only be used atÌ y  level.8    "A ÓX "del|iÏso considere¢ 0bouÚo×tÏ @purpq(though´ ñactual semantics are to un Æõ ‘)á GEach  E©Y Ï s ™Bin a.“«ed by aK ‹1 Ü w ¥ òi Atop-Åf 2ode¡ AIf aÄB is ¤æ @, it ña local variable !K,š  Punles(0cla qas "nonX "¿"global".  ”  æ0i  çÀ ] Á @.  (Ñ sÒ enO h  ck•É Bk #.)È c  H�_Ð  O f  P… but notfVthereÝ U*freeÜ *ü¬1encÔ
 ðprogram text refß!to˜¿ *�Oing*Ä  - ™¢ establish+ Â`followý" `resoluôŽ_rulesà Š  R[ !ofös&  - &    “A *scope*© FÀe visibilityec	NÀk.  If '
     Æ'a local\n'
  
 ò)'variable is defined in a block, its scope includes that =.  Q oIf thej  ^ Âition occursh Afunc q 3theq îextends to anyj 1 sj  QcontaÊ `within‘ Ý öing one, unless a , O f Ÿintroducej ða different bind` 1forq _name.ž    0Whes 2  ˆ$us…Bcodek Š  °resolved usm  .ƒnearesti  Qenclo9 Ô@.  Toâet of all such`s visi € Š j 4h  ‘is called
& ÿâ€™s *environment*#Ànot found at³ ñ, a "NameError" excepQ.isÎ¯raised. If¶   M1curÎ  q%a ¢ B, an× ¯Rrefer¤n uK@has Ö ¡yet been bß wPvalueê  œ ^pointf PwhereiÓ  ¤ 0is S º A "Un_ L3"L  ; iD€subclassE‹àQIf a ¨ BQoperaÃ)2anyå Ð ·.de
i,¿  1use¢  Jo M   9   aG¡reated as Û0encóom æ@R ``n leadËe§?s wó _¢ aÎ  `   before itªØs "ruÔÿsubtle.  Python lackÊRdeclavsâoallows™ñ�­µ  Ð NÃ ° eŸ �¨å& N canj bgAtermþ„by scann)@entiã!exðù ³‚“Ì  ¥sè r à"global" state	ó Ç ¸™  K  ³ 
š À    'specifiñed in the statement refer to ðbinding of that name3 9'
  n'the\n �op-level9 ö	space.  Names are resolv† t0 K  z A ? byj  `search«  Î Wglobau a, i.e.Ò H Ô -e j _modulÎ tcontaine ñ code block, and^ †builtinsð , e ‡ Ì  ™ ˆ $ "T Œ".  The Ý B is ÿ .edÎ ¯first.  Ifj   , Š  C rnot fouÉ "re¸ | Ð  + Î  ¢ i  "µ "hòmust precede all usesieo .H     _  1haszs²¡scope as aZ  ×É Ÿoperationi  * Q ÷Ve ànearest enclos!r Ÿfor a freg ovariabi	 ¯ 87—R A  ’rtreatedã Ö E Pˆnonlocal±!ca¢‚correspo >s.7{ /toJ Ápreviously brË s\•Q@func™âkÝ Ð"SyntaxError"&@rais%Àt compile tiÐ Ýre given Ndoesi ?notÍ  Pexist¸ 7any° Ÿ L   ÌR * >m� ¿ ó automatically có /å± Þ ah  T ‚importedºc main   ascript Olway  � /edf  0"__P ?__"ž1  ÁClass definiìgs^@argu m�"exec()" P"eval }/arÇpspecial³ < Ö0extz {”u \. A c“ e i  Í   £  utâ¾E0mayí½ í ð s.ßs+ \_encesh  bfollow‡±ormal rules>Ñ ð with an exceptioYn '
  }'that\n ý0unbound local variables are looked up in the global namespace. P ?Thef  2 1 ofJ ñ	class definition becomes žattributeÆ 0dic/ oary ofi   ¦ \ °. The scopet � p  edÏ !a ' ž block isk ¯limited toh 	A ð; it does not exten9 Î Bcode& sŠ 2¿methods â€“i ò is includes comprehensions and generator expres Osinc? @theyÛi  €implemenó ±using a funoHÀ.  This mean©!atà Ñ Ÿfollowingf  ¯will fail:    #  ¨A1 âoa = 42>  # ðb = list(a + i for i¯range(10))<   cBuilti‹prestricBPexecuªG  - 4    ¥**CPython »ar @ detañ ** Users shouldš_touchL  C"__bÊ 1__"Î2is Î Oly ad .. 7t c  @wantVðto override valueßI‚ `» c�"import"h   "K �" module*µmodify its bÿs appropriately.Q     [c ® PassocI ad withÕ 	 ü!a Ï …h  Ñis actually f§!by– I!upa  Ú À Ü æ h Ài   E Ò0; tã3Xbe a s4r aR(e ¯latter cas
 Ÿm”Hâ€™s] Ðis used).  By« ault, whenÑ  9 l Ÿ"__main__
g , ¼!e À4-inÐ 4;t m oin any> SotherH o �an aliasz È SfCtD¡ k  Ê4elf´À           'Y\n'
  '  ÿInteraction with dynamic features4  - 4    ±Name resolu ðof free variables occurs at runtime, not Û compileg   8 ÿ$. This means that the following code will print 42:J    Ÿ   i = 10 def f()M šp ?(i)@  \ /42 /f(5 ,  ðThe "eval()" and "exec 1funúAs doZáhave access to%jOfullf  ò environment forÙv]€names.  ðss may bøoved ing Olocah  Á qglobal Y 0pac*fF ªcaller.  FI1areà Í ?vedÑ  ™ ånearest enclosÐ  w T, butÁ ” b ¥ o.  [1]i   “ ß ­ ™ op(pal argui ¥Q  �override˜  X S6æ.  If only one  Ä iñspecified, it is usedû_both.˜   AExceé u = M  a€of breakÏRout o?°normal flow ocontro–Bof aFPblockPorderFô	handle errors or other eè çPcondiï :&An.  j€*raised*
 É poµBwherô¹ |  Ç�detected;Æ�*³ Qd* byE€surround0,æ .or,oby anyž 8 ‚`direct}Er in qinvokedw 3 Ó î g   ï >?red‹ ‡€Python iqpreter k8s aƒ@when/<>s a@run-z¢  ž à(such as divisÓby zero).  A Š ÿprogram can alsoO `xpliciJÐraise an exceùption with the "raise" statement. '
  Q'Exce7 -\n ÷handlers are specified` ±try" â€¦ "eG 	k l ?Thef  ö"finally" clause of such a¹ ó  can be used to� yc cleanupg  òcode which does not á ,Á þion, but is executede ¯whether anh  I Á occurred orn !inj  preceding “ .C    `Python sE  â€œterminaó�â€� model<RerrorÛ ~ing: anÂ ¥ k  rsÀfind out wha/óppened and continue( y/atm _outeri  Sleveloto  “arepairä c ÌÖ  y Oretrú t]@failkAoper+" (ü À by re-enter!  d QoffenšApiec‰ ´Ì  Afromµ Otop)Ô@When1‘  Ai— d P1ll,X i© npreterÏ/es›  È _ !ofK €program,˜preturnsTAits f ¯active mai: �loop.  Iûiò case, it printsÈâck traceback, ó   w zg!  µ iÔ Ï"SystemExit"néÏRidentÐ byzsþ °stances.  T@† "qªœ Pselec83depOoúPclass£ ó "inm :*Nmustf �reference·Ú P  Öca baseÖ  ”3eofÔ w n cg   °@ived3 º ! � 5  carry addiŒ’al informoÚ abP®pPional`Q à_Note:¾    %  ‚ message �Dpart¤v2API>i|  ?ent¦Ñ  may change "€one versÙ3of `  toáQ next] !8}warningÏ À '  and shouù%ld not be relied on by code which will run under '
  ½'multiple\n ÿ  versions of the interpreter.1    �See also? ´descriptionR ñ"try" statement in sec" >The¯ ?tryf  @ ¯and "raiseV   \ F Ü ÿ -[ Footnotes ]-˜    ñ [1] This limitaê áoccurs because+Âðthat is executedÛ¦Othes¾a  operc sG  *Áavailable ati 2timr `module( c €compiledð,
 'exprlists': 'Expres'  ô  * #    0   i \ _\  º7::= W ("," �)* [","]O ustarredL 0   O  BitemQ  .)**d » d  8| (` O ","d % Ñ º  Ñ `assignP_x a"*" or !   ðExcept when part¶aç÷ or set display, an‡# P   containingðleast one comma yields a tuple.  `lengthy — ’+ j  !isÞ`number> 	se <  Sf  /arO`evalua…ðfrom left to rightX”  ÀAn asterisk ‹"de;Q*iter”òunpacking*.  ItsÁ~nd must‡_be ani  Q  G  Ea M`pandedÍÀo a sequence% H.s,i Ki   ar2cluP s"ewÁ,,*,ò v1sitl Ïc  e0Newàº} 3.5: I` # ô© ø Ÿoriginallubpropos–¿**PEP 448**¨  —Ptrail ‘is requirÈ ly``create§ðingle tuple '
         â'(a.k.a. a\n'
  ò&'*singleton*); it is optional in all other cases.  A 3  L ¯expressioni  ðwithout a trailing comma doesnâ€™t create" Áuple, but ra} l ¯yields thel  ævalue of that — U. (Tog ’n empty tn ouse anÖ  % Opairj  óof parentheses: "()".)\n',
 'floating': 'F ý  point literalsS /'* )  d ð are described by6p follow‡~lexicalP `defini.s:  1   ó Ânumber   ::=ð    |‹Qonent A   £ A ð[digitpart] frac� 5 |  O "."K 6expm Œ (5 |™ )˜ H 5 “  r (["_"]‰ /)*; °  : ƒ 2"."2  Ñ 4 · 3 4 ñ ("e" | "E") ["+ -z H Z BNoteõ the integer andý  Ê!ts.aalways& |rpreted 'ug ñradix 10. For examË�"077e010"`alegal,| adenoteÈ] sameg Lh ð as "77e10". The¨‘owed rangûD ßRq/ it i¥ Pmenta] -dependentî 	 /·Ý, underscores´ .ar•p'supporJ2for® grouping.à  DSomeQsÝâ «@3.14d ¬q   .001 @e100	    1e-1 !0e †'# n_15_93¯   ChœdV0ver'w 3.6: UK «5nowÏ ,v 6b qpurpose³« \� orˆ ,°"for" stateõH 	  	 M   à�used to äqte overt!elq ¾a7‰'sequenc7ò'(such as a string,«� or list)	 œj ðble object:\n'
    Q'\n'

 ó&   '   for_stmt ::= "for" target_list "in" expression Œ:" suiteM Y  ”["else" ". ]/ 	 7Thef  { úis evaluated once; it should yield an iterabl‹ £object.  A! ¡tor is creN ðfor the result of 	‘ *"eô @".  ¥ ÷  K ¤then execuŸ  KP each” mN °provided byj  ! ‘rator, in Îorder return' 7.  µIEach^ AitemI 0urn› PassigG !to] ÐUQusing éstandard rulesQ  E Áments (see AV   ` state
 ps), andP È 	O &@.  W6 z ´ @s ar÷@hausE@(whi>ð s immediately w3 ÿ *thì€sequenceú …empty or øð raises a "StopI0Xtion"TPexcep )),»  « Ô á Ô°clause, if Aent,€ d Jloop] ©erminates. 	 –A "break"vw>Rfirst’% tU  – u swithoutD 	× Bâ€™sN  B§ "continueƒ 	£ à„8he � QskipsŠ 4resj] :Ùg 
Œ ° @ @next9 m,á 	º  �Ather0no 4 	«  wm â@for-6@ mak7÷#s P@varissñ a
] ÐThis overwritM  ll0hvious bZ Fose \ ™includingÌ  th1 Dmadeˆ ªÎ ŽÈ :5 	 ÿ  i@ šrange(10)0 Ê¬  print(i)?   Pi = 5	  0# tù ñ will not affectÆ^I @ 	 P# becj1 i N %beOEten -ôN 	 p# indexþ  è	˜ 	 ONameòÅ æ @deleÇ± Q Fºis finished[3but¯ Ã,,yó  [ “have been5 edŒ)at¡ 4all` z ð.  Hint: the buiólt-in function "range()" returns an\n'
  ð%'iterator of integers suitable to emulate the effect+ øPascalâ€™s "for R 	` @:= aG òb do"; e.g., "list(› '3)�  e   Ù "[0, 1, 2]".P 	 YNote: 	 ñ  There is a subtlety whenÎ qsequenc  ñbeing modified by" Ö Kloop] ð(this can only occur "mu>a !s,ø  Ú js).  A„ zÀrnal counter³ @used: keep tracky¥which item$ [next,œ Aand Ÿ òis incremented on eaA  ra"B.  W Ì ~ ;hasP r6  � �he length�  ¯å 1 &À terminates.‚(isLmean] qthat ifB  {‘e deletes òcurrent (or a previous)Hfrom_ ;theº   ,M  ,: ñwill be skipped (siRt getz Xindex^ +of]    ”Ÿàhas already beo`reatedü�Likewise,ò aº  °uite insert¸¸ i½RbeforŸŠ ï ®     t› C aga[ $0timU Qrough: Û
‹Ý 1lea¬�nasty bugA!at‚be avoidW0makja› ñtemporary copy us% d slicejfwhole ÐL	H 	 â �šx in a[:]+    ñif x < 0: a.remove(x)\n',
 'formatstrings': 'F ! S x Syntaxw  Q  /'*  +  ’The "str.‡  Çrmethod à2e "� ÷ter" class shareµ�   '®9sam"   !'sÍ Âp  ø a (alth
#1cas—ÀD   '” 	—   A'sub® e@Pdefinopeir own„ 3mat€  ™  = t # ) i[m   0'reÅ¤n#ofd  ç ! l ls, but itam ?lesh �sophisticï ¦,}ÿparticular, does not support«Parbitð
expressions.\n'
           T'\n'
  ÿ0'Format strings contain â€œreplacement fieldsâ€� surrounded by S Ïcurly bracesv ô"{}". Anything that is not‚ Sed inE   j ÿonsidered literalp °text, whichM ÿcopied unchanged to the output.  If you need z ¯to includer a¼   characterÏ  d ©  “ ÿ it can be escapVŸdoubling:q ï"{{" and "}}".%  ýThe grammar for a ý 7¯as follows… ` pT _Q¡ ::= "{" [ ¿_name] ["!"u conversion&  :"¬ ßmat_spec] "}" 
d �   1argx ò  ("." attribute |ˆ a"[" elÏ_index "]")*~ 
h } ~ ÿ[identifier | digit+]H 
¢  Æ G = 

µ  Š  ‚w 1 | Ì _H 
)  F … ·<any source÷oexceptI_]"> +k 
ôi k �"r" | "s aøâ%C  õ ‚<describh ™?nex§ �section>©  `In les3±rmal terms,g	Z¯start with-ah *Ù*J  Tsn ðobject whose valueÌ touÜf1?tedq  eainsert=	<± instead of} ë m  ZO. ThI	ß Pis opŒCally�4Fa  *,*C*à Spreceá an exclamav ñ  point "\'!\'",oak *Fw*s ` colonf `:\'". 2se Öïy a non-defaul±À 'format for� the\n'
  ÿ'replacement value.)  €See alsoc ð Format Specification Mini-Language sec f óThe *field_name* itself begins with an *arg! �that is õ �either aÔ ònumber or a keyword.  If itâ€™s a " ÿ, it refers to am @posió /alo @argu€w, and ig } h  dn 3 k Ï 0theÊ terical <‚s in a fÌostringl Ïare 0, 1, 2,q 0â€¦O �sequence,'ñy can all be omitted (not just some)¼µ Oberst “  } "wih pautomatê €ly inserw 1in *oorder.ç oBecausAt0is Æ ñ quote-delimited¾ €possible/Þ s;yÚ Áarbitrary diG  ¡keys (e.g.^ ² s "\'10\'"Èl ¡"\':-]\'")A/inv 
!. Ž/*Îÿbe followed by anyL9Ÿ of indexr  z÷	ttribute expressions. An  G   «o @"\'.- oselect5 H  * 5d az  usû@"get  ()", whilek– z  ofë:å A"\'[ ƒP doesX  ƒ lookup � ï__getitem__()";pChanged†0verGQ 3.1:Å› þ… ‚iÔ6 ¼bÎ�for "str.›!at; so“t{} {}\' oa, b)"©`quival�/toHm{0} {1W *14*Q8?terÝ Some simpl€}ÿà examples:\n'
  ]'\n'
 ð& '   "First, thou shalt count to {0}"  # References f.  M ÿpositional argumentw ÀBring me a {f ž Ï# Implicitlyq r— 3the› † qFrom {}í †  Sa¥ 2s ", 0- O{1}"ò üMy quest is {nameq 	ikeywordú "`  'H O'\n"ÞñWeight in tons {0.w | B# \' Ï\' attributew ?'ofeô ñUnits destroyed: {players[0]ƒ !# €@ ele1? of{ "ú I /'.þ – ÿ$The *conversion* field causes a type coercion befor¿formatting.l N" 0lly^Pe jobß 7 € a value€done by É]2"__: O__()g`methodf  H ] ðtself.  However,psome caó i‘t Ïdesirable toã @forcÄ7bto be § Pted aQ stê�, overridö q ?ownh Qdefin_ Þ c  {R  By Ð ‹Aù Oto aM'“ Ýq @call¬ 
xÊnØé  & PlogicÈ× �bypassed(ƒ @ThreŒ¬ð flags are currenpsupport\�"\'!s\'"õ `which × sp ¦"str()" onF , V rV A Q "rep, /an£'7 a7 r Ž ¯ "ascii()" SÅŸexamples:c   ú€Harold\'¦ clQ {0!s˜��# Calls â— t ÷1outcBholy"!rw s `t Àt\n'
         ö '   "More {!a}" 
 ø
# Calls ascii() on the '
%  ÿ'argument first\n%  ðThe *format_spec* field contains a  ÿification of how� _valuem ñshould be presented, including such detaiù Š owidth,ú @lignû ,r 0pad[ �, decimaly 0cisÉ ñand so on.  Each º Ÿ type canq ¯define itsq rown â€œRtÖ õmini-languageâ€� or interpretTÝ	�.v  ÑMost built-inÚ ÷s support a common « 9	À , whichp Ðis described r °he next sec=¿ Ašsan also9 b Àsted replace¼Ù¸ÿ within it. ThesV A D may/ ak _ name™aconver‰Pflag ŽŠ
pÏ, but deeperl 1nesh_is noþ�allowed. Þ 	+Õ   ‡‡ r /arápubstitu�0befä R 	Ä@ str&is š }?Thi²Ó s‰² Dof aÊoj¿dynamicallyÎ ß/edž1See} F=” examplesì XU some ` do FSpec•MdLd9 = 9  3â€œŒ B!sã“are used Wœqïv/edt O a]4matK3to ™ ›¢individual	 s � p ‡p S(see æ S·aSyntax°  ìÓ¡literals).kÀ            ð    'They can\n'
 
 ÿ%'also be passed directly to the built-in "format()" H ÿ function.  Eachn E ñ
table type may define hows $   specificaV ? isw t½ m Ïinterpreted.#  FMostû  © ³s implement¥  llowing op¡ _s for£ Ð j 	æ ós, although some ofm  {tn ?aren Oonlyl ±upported byX qnumericŠs#ðA general conven ¦Ðthat an empty;matÌ@�produces¼  Œðsame result as if you had called "str¡!onß ovalue.'aA non-¥ r ·» @typim ¡y modifiesj • B5TheD m  î»a *standard<er* is:­  #  F _hú?::=ñ [[fill]align][s ò#][0][width][grouping_òà][.precision][$]† 1ill   † ÿ <any character>= “ 9    = �"<" | "> = /^"C  Ï  ;  C +7 -  =  : 0   = odigit+q -4 !"_k ,k Ro k  {/   4 !"bk c d e E f ‡ "F !"g G n o s x X %Î ÁIf a valid *Ù*  ue< ¥ UPd, it´™receded¶`by a *º*q b ›0canV 	|@ and†Paultsúoa spacb/ifj @omitl0 ItÎ ‘not possií²o use a lit6urly brg ß(â€�"{"â€� orr Pâ€œ"}# ) $Ð*fill* characýter in a formatted string '
  ÿ'literal or when\n&  usA ’the "str.[ ÿ()" method.  However, it is possibleu ¿to insert aq ðcurly brace with a nesÍ ðreplacement fiel} OThisj ÿlimitation doesnâ€™ts qaffect å á @func? .6  €The mean7!ofU Ñvarious align¿  opZ s0aÀ �follows:g  /  &+-   
 +y 1| O×  k|‡ M #  ž|Ž 0 = | 
 y ‘| "\'<\'"á �| Forces	¶Á to be left-/ed- þ!in9 `availaV/  { 
t  @| spD (t#i� pdefault"_ mosty ‘objects).I  y mh j' t
O"\'>mOrighn"ô |/  m!mnumberhX y L a F
 m=m@paddòÜ¨@d af“¯  lÐsign (if any)õ ô 
m¡but before‘digits.  qis usedä| Pprint­ �/s S� %a â€˜+0 r120â€™. Óå} ú ùOonlyö Bvali× ðnumeric types.  It becÍomes the '
  ÿ'default when â€˜0â€™  |\n. G   |D ó| immediately precedm _fields gwidth.G  y ‘ &+-   
 +ò 	q"\'^\'"¨ i| Forcæ ÿto be centered withinü  ˆ‘availableP m_spaceNa  P ‚~™òNote that unless a minimum |gÏ is defined,1 n °will alwaysì Ç²same size a`�data to f, oit, so at� l ÿalignment option has no meaning in this case.D  ¤The *sign*\ ÿis only valid for number types, and caÎŸbe one ofo  '¯following:%  /  =æ è' ò
Ozð'M�\ P w&|=   
 y f| "\'+ùqindicatüPat a Jp should2useCâ Áboth positiv4f we~as nega> a ¹sô Z h M
 t
O"\'-m® ð only for negati0ve  P|\n'
	 
 W'   | ÿ| numbers (this is the default C §behavior).I  y N &+-   
 +ò 	Cspac� indicateë Òat a leading % Ÿshould beþ àused on positinò kð, and a minus signP AnegaP &¦
ry E _ a' k‚ñThe "\'#\'" option caus�ð
e â€œalternate formâ€� to�lË 0for©q Ðconversion.  ~ 
a  æðdefined differently} ô% p Qtypesk $isâ  
 ‘nly valid[ Àinteger, flox/ndn complexl CFor Q ÿs, when binary, octal, or hexadecimalk Ÿoutput ism  �!, ¹0add8ñ e prefix respec¹Ÿ"\'0b\'",l   o  or_0x\'"x  toÞ Ÿ pvalue. ó ;&( ß-mrp  heÊ  ó!ofS C Œÿalways contain aâ ko-pointj pcharactÿeven if no digits follow it. Normally,m 2± appears inÞ 6resì  seÙ 10s o¶HBif a« Ý À sÁ pIn addiî,ÿ@"\'g ý@"\'G g {¿s, trailingr ÷zeros are not removed fromè .=   1@"\',¡ ö ¥"alùPuse o
QcommaÛ ÿthousands separator‹  Ü°a locale awÑ 4  , s  —@"\'n– ù†À            ý'presentation type\n'
  Ÿ'instead.  ð Changed in versd ñ
3.1: Added the "\',\'" op‚ ¯(see also † Ï**PEP 378**)‹ Tm _m qsignalsˆ ÿuse of an underscore for aŠ Ÿthousandsú ‘separatorE ý floating point uQs and* ÷ integerk N  U³d\'".  For > v n €"\'b\'",G o	 x @"\'x ¼ A"\'X ?ÿs will be inserted every 4Sbdigitsµ s _otherÉ  �, specifydDthisPiZo _errorEÐ6ÐcÐ?515Ð€*width* â … decimalëRdefinÿ e minimum totalafield R ,{`includT 0anyƒufixes, é!s,	£aformatód¯characters‚cIf notØ@ied,§n  ® c¯determinedâ  by; Ü content‹ 6 ðWhen no explicit alignment•`given,)!ce7 îµ× Oby aq õ zero ("\'0\'") D� enables Ñp-aware , A-pad{ o ¯or numericp   �TQ is equivalá ·to a *fill*ˆ  of4 ž …with ano *@*Š �@"\'=Ê3   ì`*precis$Pnumbe2dic•Phow mÖ(— shouldq ðbe displayed aftern—öNs Ovalu‰Ze¯ thpfÓ @A"\'F„`or befÂ  � m À            ý  'decimal point\n'
  ò 'for a floating+ ÿ value formatted with "\'g\'" or J ÿ"\'G\'".  For non-s ónumber types the field indicat smaximum osize -x �in othern ÷words, how many characters will be used fromŽ ã Ïcontent. Theo ð	*precision* is not allowb ¢or integerb/s.E  �Finally,§ *@Á* determinesã  O°data shouldÞ Ê Ÿpresentedƒ ñThe available str5M Sation×Oare:Æ  /  ß&+-   
 +y b| Type|‡ @Meanì %  �|Ž 0 = | 
 y |äsä à 2| Sß õ isÔdaefaultî1 Y Qs andR ô |   _| mayº0omi”.-  ô mh j' t
5Nont Xsame asO0"\'š÷ ô ~ý ú R  SÿÀn'
           d'   '
  6'|=   
 ?|\na Á   | "\'b\'"x ÿ| Binary format. Outputs the number in® qbase 2.H  { “ &+-   
 +ô cô óCharacter. Converñ ¡integer to ° Ócorresponding÷ ô |#   ´| unicode c�  beforeaŒprintingc L  y ½ a c' mdm’Decimal I]c)10ô †oô _OctalT?¦8ð  êô †xô ?Hexò &`16, usQolower-ô 
Ucˆpletters‚ ¼¿digits abov^9f v  "I¯I .
 UXm=?uppmÿnmN‚. This ipsame asM ì,ÂÐexcept that iýt uses the |\n'
  W'   | ñ| current locale setting to insertN K ðappropriate numberY y ¯separator ^ °characters.W  y a &+-   
 +k	BNone¼ ß| The same asô "\'d\'"ñ  Ë{ ô c� °In additionZ ¡âabove presenta ÿypes, integers can(Ïbe formattedr Awith»AfloaÒ_pointq  ß listed belowp ÿ (except "\'n\'"s Pand "ð°"). When doKQso, "‡ °()" is used@convb« $
p Qto a X  f ß ˆUbefor%Oing.D   ª�availabl¥ Ô !" ø �Decimal"A¿values are:r  /  Q ± ³' ½
5Typ½¥@Mean}â P Ä&|=   
 y |÷Ae\'"ß ò | Scientific noºÏ. For a give³`precis @"p",@@matsS { 
 !  |ÎàNin s‡  õ]ãletter â€˜eâ€™V x
'® í šacoeffiƒ Q from� v ‘exponent.ÿv º
y j @has Pbdigit åÀ and "p" '
   ü	'digits after the  |\n'
( w  '   | ÿ| decimal point, for a total of "p + 1" L Âsignificant ‚ .y ÷With no precision given, uses a }  � #6"x  Ò ò &	ü û Ï"float", andõ €hows allt  y •coefficie0t DƒP". Ifð a followä+ !
û iÒ /soò àremoved unlessó ò  j p"#" optá/isb Pused.Y  y 5&+-   
 +O	q"\'E\'"½ 1| Sá P notaù à. Same as "\'e+ ® “except itn upperÌÀcase â€˜Eâ€™n  Ÿseparator{Ÿcharacter€s†fH t�| Fixed-ÂtFËUü z1"p"û0matáô 
= a`numberoaM wãëˆactly "pÃê1ing
	Í$. Zz õ oò ˜
ƒWx 	¤ ø ¼ò 	š#Ïlarge enoughíuto showºò ¶sÀ, the decimaýl point is also '
  ð 'removed unless  ?|\n* @   |   ð| the "#" optiong 8 Sused.5  
y Y &+-   
 +ò 	q"\'F\'"º ‚| Fixed-X@notaú ÿ. Same as "\'f\'",kÿbut converts "nan" to ö 
oá"NAN" and "inf< _"INF"qy X c e' ogoðGeneral format.  For a given precis{° Ñ"p >= 1", thiÚ maroundsã`number«ÿ "p" significantæadigits¨Athen8y ê z ÷result in either f~ô > 0 or5 { æ
_`scientÛ  ÙÀ, depending á/tsó Ámagnitude. Au   y Ç`of "0"IptreatedT�equivalepGto ak o 1*3TheB ¡e rules arÐ�follows:÷ Ïsuppose thatò  9Ü± ë @with† 2senWu @typehe%  z Ømÿ"p-1" would have expongC"exp,¿n, if "m <=y ñexp < p", where "mé -4ÜS floa5Ø!-6' ì  _‘"Decimals	#e Ï isR 5mat|y 6pre‘|y 

w-Lr Oê@wise¸¯ ÚÀ    | formatýted with presentation type "\'e\'" '
  @'and3 0cis0   ?|\n, B   |"  ÿ| "p-1". In both cases insignificantu ñtrailing zeros areQ  y öremoved from the s 0d, Ô   Å ñdecimal point isz y Talso ~  if| !reÁ n 0ainØ z Àigits follow&  Pk it, unlesst  Ô#Ô!opèŸis used. pW*noéô `given,a 7s aD gof "6"{îdø rlæñ"float". For "De¹!",ïcoefficient of÷  Sresulèò Hform^m Î oüx bvalue;í  y sÑ  <3 noÄÜQ for Z sv ÿsmaller than "1e-6"k²in absolutee Eo QwherevØDplac6 y YleastDa ™DlargÐ /1,õ  ëbfixed-Ðy `ñotherwise.  Positiveõ Anega" áÊ¨nfinity, pf Q  Äy Aans,rz ] Ö at)Ãas "inf", "- 0 /0"ò S"nan"t  y `respec.¡ly, regardÊ.è 2pre•.m  y K &+-   
 +®	@"\'G“ ª �| General¶ mat. Same x0\'g& _excep1°switches toéE0 =if ÜÀ       '   |  ö| the number gets too large. The '
- 
 ÿ'representations of infinity |\n4 D   |A  ÿand NaN are uppercased,r Gtoo.>  y ‘ &+-   
 +ò 	q"\'n\'"± 1| Ni ZQis is}ÿ same as "\'g\'"òexcept that it use> ö 
oðcurrent locale setting to inser[ î¥appropriat* Áö 	ï  ¿| separatorÚ¯charactersáP  a	èk%è@Perc FƒMultipli±loby 100 ¿displays inmÿfixed ("\'f\'") format, followed by av  ‚ !Gsign‹aohBNoneÿ| For "float" thY)0whenc	
Uo’-point no Ø@used[ç-presult,ÒÎ m
y 2alwðcludes at least pdigit p v  ó�decimal ¼ .ò  �precision‡dð "as4 Èoneededd5to <y ò	given value faithfully. ÿDÏ >G
k„s either¢ p0\'Gï`dependI/onó #he¶ !ofä  èð"context.capitals"Ó;ÑÊë? Ð  The   |\n'
  W'   | ÷| overall effect is to match the output of '
8  ³'"str()" as O |\n* y ¢altered byi ¿ther formatl ¤modifiers.l 	 y ‘ &+-   
 +ò  Fú �examples= = &  ôThis section contains r  ä ò Ó.ˆ Úosyntax’?andk ãcomparison witKrld "%"-\ _ting.>  aIn mos� © Qcases<¤  Þ `imilarÄ # ?oldº 
ˆ ,q » Aaddi6!ofq ‚"{}" andÝ ð":" used insteadJs�"%". Foro Šð, "\'%03.2f\'" can be translatedÝ Q"\'{:# O}\'"HtThe newm>Ñalso supports   á �differen” op�s, shownØ !in5•followings¸ `AccessA �arguments>1pos�:  ð"   >>> '{0}, {1 42}'úp'a', 'b oc')\n"þ  C Ÿ'a, b, c'# f  `  c ß  # 3.1+ onlyM p 2m Ö 0Ö  cÖ aÖ f r*'abc')ž€# unpack·E'ÌŸ sequence°'— i0}{1}{ù !brÒ1cadš $# x ?s' ˜ tindices€@repe~ž pabracad 9'> 'ÚOnameÖÀ  >>> 'Coordýinates: {latitude}, "
  b"{long" ”'.format(4 Ÿ='37.24N'< ; ï='-115.81W')\nh ”   'Coordš [ %, : 9 P>>> c< T = {'ž 6':   'Œ /':é £ }j 
§ A"!**¯ =O'\n'Ä ð'Accessing argumentsâ€™ attribu9  1   s = 3-5j& "& ð('The complex number {0} is Pÿed from the realž€part {0." ?} '¢‘...  'andQ ¤imaginary A   D}.')Ìc…	º  (ò )½ g áO3.0 — _-5.0.Ô 'GÏclass Point:q * þ ÿ   def __init__(self, x, y);   2 A.x,  1y == v 3stru o  ª  o �return 'Þ !({v x‘ 5y})�  = ËÀ  ÍBstr(€ o4, 2)).  º § ' µ> ‰_items›K ÷_(3, 5µ  ã á'X: {0[0]};  Y 51]}G“BX: 3: 5ø `Replac�A"%s"O"%r"ó #ð"repr() shows quoÁp {!r}; ÆÏ) doesn\'t: T{!s}" ²\'test1\',   2\¤9 ?   } : >1\'‚  ^ /2"Å PAlign. Atext2pspecify a width@Ð"   >>> '{:<3ý0}'.format('left aligned')\n"
  I"   ) " / ': ˜>>> '{:>3w Orighx l 
; x ^x ocenterë s 0  ë *t ÿ  # use '*' as a fill s�'char\n'Ž* £  *£ 'Q ð'Replacing "%+f", "%-  and "% f" 
 pspecify' a sign:O   E–+f}; {:+fˆp3.14, - )&show itoalwaysg  '+H R0000;S   —  —  — a spaceœ ÿfor positive numberª 	 ª "-ª -ª only th« à"minus -- same�2'{:Y /f}.'³ qx^2"%o	 pconvertg º Ÿvalue to ÿ'different bases’@'   ’"# ÿ also supports binaryÄC ñ"int: {0:d};  hex x "oc o Obin:Ê d{0:b}"—?42)ßm $42j Q2a;  g 5 d  10 Æ¶ ð# with 0x, 0o, or 0boprefixM6ó #ô #õ #ö %&0xø &0oú  0bú /10ü X4'UsrPcommaÿa thousands separatorW ^,í¯1234567890q	Ï1,234,567,89Î aExpresÓ ða percentage:\n'
    ['\n'
 ÿ   '   >>> points = 19) ¯total = 22( "Q ò'Correct answers: {:.2%}'.format(r /P O)\n"�   L H 86.36%'3 ç òUsing type-specific ‰ _ting:Ì M ã ÿ import datetimeD - 5d =* .3 ÿ	(2010, 7, 4, 12, 15, 58)K   ¬ö'{:%Y-%m-%d %H:%M:%SXdM	 p ÿ -07-04 12:15:58I0Nes2p argume4ðand more complex exa	 sVÞ ÿ"for align, text in zip('<^>', ['left', 'center', :¯'right']):( n 1...±'{0:{fill}{y 6}16O „  ,  = p ' " ¾ j?...ÛÚ < š »  '^  
 ^, 	>  ¡ ?>>>¡  Q octe(0[19°Ÿ68, 0, 1]7  ¬ ³l02X}{: *Z ½	�C0A80001ì £ Ÿint(_, 16‰¯3232235521¸ L  
¯ width = 5'  Ñ0numÉßrange(5,12): 6  2™ : @base; o'dXob'Î Ó prØ¥  }{G }Ö?numÉ") = ,à =A ¯), end=' '¡ 1· ~ ~ F  À 5   /10¨ , 6   ?110_b 71  /11b 81  10  100b 91  !111 b  V @   A7  121 Ä  V A   B1 ð3  1011\n',
 'funÁction': 'Fun p defini hs\n'
  /'*  &  >A f` k ¡es a user-z &ed+ |object … N(seec "seÀ þThe standard type hierarchy):7  !  ‚ 8defû  ñ::= [decorators] "def"1 �name "("° ÿ[parameter_list] ")"w d  ÿ["->" expression] ":" suitü  6   ” ?   ³  +y  7   = ö "@" assignment_” ê NEWLINEd 
^   d 5def! N (",F" 0)* # P"/" [	 bß_no_posonly]]� y  %| ƒ ©G E .  Ò "Ê �starargsÈ × Ñ N Ï , !  Ï F"*" g]¤Ò F"**"Z±]Ï  /| I Ê 
	  ™Àidentifier [TÐ,yH   N I ["=±›  )B   M › =  Uñ is an executabl teºc.  Its =ion¿Obindõ 1theá  ½ 0in  Ñcurrent local ¦space to a2 ¿ÖÏ ñ(a wrapper aroundd É �code for  I ‘ ).  Thi·  "  q € containorreferen« Ê mglobal õ Û ¶ !as� 9 )   beØRd whe0’ ®is called.Q   Ò; %Ÿ“ does notÒe‰ ) ¬body; thisÏ À'gets\n'
     õ$'executed only when the function is called. [2]\n'
<  	 ' A= adefiniH þmay be wrapped by one or more *decorator*Q äexpressions. D)   ° are evaluaË Æ ­ Ö g ­ Red, iúscope that contains1 Þ <.  k >Thec °result musta[°able, whichnÊinvoked withp c nobjectf a¨ Ñðargument. The returned +en �bound toj a /?namÎ  ¡instead of> . ˜ Å.  Multiple Þsª}applied4.inÍ 0nesÓðfashion. For examp5ªÏollowing cod¦  S ¿   @f1(arg) 2 1defÛŽ(): pass%  þ	is roughly equivalent to*  ?   s !  ” 3 = Ó @(f2(‹)Ý  d bexceptæ N�originalU ¹õis not temporarily 51 B ,"“ .".�  pChanged‡0ver÷s 3.9: F“#s LV,=anyR^validc p"assign_Gá". Previously,Ôñgrammar was much®P ÿrestrictive; see **PEP 614** for details W„	ð parameters* hav•eW 5m * ^* "="š *ß *Ó  ‰Ù1saiýU pâ€œdefa¡V Q~ues.â€�l  ›&a < ÂaÄU t„  correspond¸F*µ*êh qbe omitBrom G¸F2cas$Œ Eâ€™s‰ p ™ / iÐ psubstit h.  If ß Mhas Þ Tall f’» ‘ ¡s up untilh’â€œ"*"â€�Balsoêa M â€””Othis¿ ð
a syntactic restriction tøhat is not expressed by the grammar.\n'
  ' ð**Default parameter values are e üated from left to right when c >thef ñ function defini ðis executed.** This means tÝ  É \ ê  I .isf ­ Ronce,   H  "is‚ ved, andj MsameË ~â€œpre-i @comp¸ 2â€�- ‹u‚ò for each call. Ö  ê �speciallyf žimportanth  to underst­ oaÁ °ý
is a mutable object, suchl Nas ag Álist or a di§qary: ifM<pmodifieŸf m (e.g.f .byd ðappending an itemG a { !),i dˆ reQ�in effecta ‹ dâ G�is generp #wRñ
was intended.  A way arou	 ist r ‚sÑ ‚"None" a» Tðexplicitly test Qit inæ }body ofÓ 7
 , h:V    ! ñ ðs_on_the_telly(penguin=º )L  )3if *   - ,  3 - O= []� % .‘("propert
 ¡_zoo")> dreturn— '  Fp ‡’ semanticÓ�described“°more detail !se ž_Callsn %A j âalways assignssê&llas` 0men” Î  "ž 3‚, either–1posSpal arguM "s, Ð~keywordd 9 oW ÖÆ C.  I°orm â€œ"*id¸ Pfier"m ¤ «Pent,  �‘itialized'Ò tuple receiv.~y exces5÷ Ï / s, 1 N !to…Remptyk .Ö H ç è ?is Ç ¯new orderel @mappŽ æ ¢Ê‰Ðing to a '
    †'new\n'
 ý4   'empty mapping of the same type.  Parameters after â€œ"*"â€� or\P  ¡identifier( ÷are keyword-only pT qnd may  <be   žpassed by» S ª arguments® abefore¯ /‡ ¡positionalŠ U › ‹  F } L  ðChanged in version 3.8: The "/" funcŸ "q syntax$ Nusedg ·to indicate¬ ò Z ýs. See **PEP 570** for�Ždetails.f  , Ôð have an *annotaÙ *cAformœ:r `expres ·f `follow¯ ¬±@ nam±'Ana8ˆ \— ,f ©even those³ '"*Ýh or "* -. Ï FÔsŒ h � �â€œreturnW— 	z  Z:-> ”Ú >thej *`list. vs¡�ps can b íy valid PythonÔ …   Í Â1enc<Ð Ás does not c
n€emanticsï a¸ ²  O  ¤ @ues `Äavailable as ?of O  !dic0ary•\‡ Asâ€™Ms¨ d_6"__† Ns__"µ �attribut D Æ ` objecIm"K �" importqNfrome ð"__future__" is ,!Œ@rvedžstrings ad oruntim9 €which en_sQÁtponed evalu×Ð.  Otherwise,Ny•81 ³!whoeQdefin­ Û Àexecuted.  I˜i­s0M0 •$be¸ ˆða different order thab Ÿey appear_sourc/ Ocode �  ItÚ @alsoU si¾`to cre¹•anonymous4s (FE`ðbound\n'
         ð)    'to a name), for immediate use in expressions.  This Às lambda\n'
H  '0 °, describedJ ‘section L:  N ìNote that the J b ñ is merely a shorthandÈ òa simplified fun{ c `defini– ;Ê a8 ( Æ ýa â€œ"def"â€� statement can be passed aroundÓ /org  €ssigned ‹another‘¿ just like Š  bó Ï 2ÃeÃ @formIþactually more powerful sincœ/itÉ  QllowsËPexecuWÆ of multiple- s §`annota& .s.N  ó**Programmerâ€™s note:** Fßð	s are first-class objectkAŒÇl ØË ü>sidŒ> !žs a localQ ƒï-Preturû*or9ý.  Free variables¾ Nusedf !inHnest÷ o aaccess £ \ !of N³ g ¡containing9 ¤def.  See ã0Nam  æ@bind  ]b odetailþ _ ^also:�  õ  **PEP 3107** -#& Au7  ãñe original specific§Y ¿” 1484“ ¯Type Hints‰ D� Fa?‘ndard mea| S† 0: tS eOhintc¢ 1526¢ aSyntaxö V‰@pAbilityÏ�  € mq declarO�s, inclu¶ À aPinsta¤ 7  ì !63ì `PostpoŒQEvalu¡  w0qSupport'@forw¢øreferences within.= byÏ doerving« )  @  O C strW°m at runtim²Pstead» LeagepÀ  '     evalòuation.\n',
 'global': 'The " ö" statement\n'
  /'* &  2   Z –_stmt ::=k öidentifier (","  ,)*H  ´ Á is a declarí ú which holds for the Ø  „ ,re` ñcurrent code block.  It means thatK glistedº ‹s are toe ba €interpre? #as%se ñwould be impossiblS `assign] a_ cÄ Pvaria< uwithoutz@, al „gh free ) ìs may refer toO e $s N Sbeingm#edÂ  ^	7F dNames 85n a– {� must not usano<sam¿ ¡d °ð textually preced® ¹ì¶ ?«defined as«lformal² ñ parameters or iñfor" loop control target, "class" e iÕ,Q @func $   "P'rtå,o ÿa annot8�**CPython¤ le19 ° detail:** £G9imp% ,oe-norð enforce some of‘se restriÝ ñs, but programs sh9 9Labus+Mthis(preedom,©Qfuturu¬ ‹ @them3‹silentlyÝ]changë t 8 �Ç ³ gPÝ pmerâ€™se]Äòqirectiv' o aparserNò Àapplies onlyL A 0 #d Ög@time O n L -@. InE �ticular,× Èaâ
ˆ Ö,ngb "orƒ‘object su¾ d¹  ™ öbuilt-in "exec()" ùd0affX  L 	;*ª @ing*wV ‘call, and— ® 7 ±rsuch a Ø  š"unn _ed by÷ sù
-thN§ i  R » õ  Ÿ !. {ÅÐapplies to thVe '
  º'"eval()"\n ó)and "compile()" functions.\n',
 'id-classes': 'Reserved  û  of identifiers^  € /'* 3  Certainy û (besides keywords) hav� speciald õmeanings.  Thesem 6areç ðd by the patterns	Vh ¿leading andl Ptrail  ÿunderscore characters:3  <"_*Ô~ á   Not importe³ Ã"from module 2 *"ì  
6J ß? "_l ¡is used in@inteÊ Aive  Àpreter to stê  ?oresultr   ofE î €   last Í ua¨r; it isW € £"builtins"ð /. h  �When notj "in¼ 0actÈ Pmode,u has no36 é Š /noÔ pdefinedV˜b‘   See sez {ŸŸstatement8 ¸ ONote@ � r AnameÞ iÐ5tenÑCconj_ withw  .n—Aaliz	 R; refú ô@docuÐ  O forê¤  "gettextÆ1 m@binformF ot/isá @convœ/on@_"__*_çsSystem-Í 43s, � ñlly known as â€œdÚ2â€�( .¡  fP]  zo wQ ¿/itü Aimpl;%d a(inclu§ žñstandard library). Current sú Ê  • Q gdiscus
Sns method@ ê ¾ 9ÿ elsewhere. Morej ô will likely be $àin future versÉ žïPython.  *Any*‰ ouse ofk ½  ï€ any conœ , that doe�t followc  ¯explicitlyg  ed{,Lpsubject8�breakageƒpout war­ÚÀ         '\n:'
  Ž'"__*"\n ð   Class-private names.  N þ in this category, when used M Awith2 ek àcontext of a cx ð definition, are re-written toi / aj  Ïmangled forml Ñto help avoid× r ó hes between â€œ÷ àâ€� attributes  Þ �base andp qderivede sCpSee secÛ á Identifiers ([¦).\n',
 'i H': '* Ïand keywordsv  ? '* -  o à(also referredAas *!*)�Îdescribed by–O 'thú÷ 'following lexical÷s	±/ '®  The syntax£: © Python is ª0d o¼Ÿe Unicode¯ standarÒð 'annex UAX-31, Û� elaboraÒ œ¢changes asÐ  _elow;m 0ee aÙ À**PEP 3131**Õÿ  further detail$W…€ ASCII r¥   (U+0001.. ð7F), the valid charact�÷ ½r´  º P @same3in �A2.x:k cuppercD!2low! n 1let¡ ò "A" through "Z"Ç àunderscore "_"¥�, exceptMÕ   ­ _firstm _ —digits "0{ /9"¸À3.0 introduc7!ddù(al‚Áfrom outside9¾  Ùº íHsee Tp).  ForP 'sen à b  �Aificîk @usesQ € version“ WqCVP Data” l  €includedÅB""uÇÏdata" module�ç ¬runlimitt  length.  Cžqis signü /ntd 6   ñ   ::= xid_start
  ÿ_inue*P@ .  ¿ @ 9<al€in gener3“ðies Lu, '
            ñ)'Ll, Lt, Lm, Lo, Nl, the underscore, and characters with$ !'
D  ÿ'Other_ID_Start property>\n-  ø	   id_continue  ::= <allm  in$ sN , plus I  � !in› ñ
categories Mn, Mc, Nd, PcÍ o¦ É O    É CŸ Ì Axid_©  Ì ¿ whose NFKCÑ õnormalization is in "_  i 6/*"\' \J “ $? ‰ úÃThe Unicode « y  Ps menõ °ed above stOfor:J  ð* *Lu* - uppercase let½/   D lD ?lowD )tD _titleˆ 'mD �modifierË #oC ø@ "NE� numbers7 P* *Mn� ÿ nonspacing markC cC @ ocombinJ # NdJ decimalÏ "PŒ ñconnector punctu¯Õ h1 — ûexplicit list of° ÿ PropList.txt toƒÿ  support backwards compatibility6  5* *¶  ¹ �likewise5  `All idñ Ùñs are converted intoÍR form2_while8�parsing;n ï PrisonVx ±is based ona .@  aA non-¢ °tive HTML fŸ  ¿ Ÿ ÑWvalidë ¼ Å?form 3ÿ4.1 can be found at0 ðhttps://www.unicode.org/Publûic/13.0.0/ucd/DerivedCoreProperties.txt\n'
  ' �Keywords2 =   ñ The following identifiers are used as reserved { _, or Å  #*kœ O* ofn öthe language, and cannot bl ˆordinary� /. p �They musSðbe spelled exactlyÊ ßwritten here:¤  ‚   False¸Rawait e b impor ?pas¡c   NonG c breakH Bxcep= "in �   raise‘ 4TruI Rclass6 pfinally i  I _eturnJ  ‰ 1 ‘   continY 3for q lambda ?tryG p 1def. s   from ÿ nonlocal   whilÚ CasseJ de. @ Aglob<    3 o  with‘ 2ync( 4eli’ 	  È   yieldI  R'�Xes ofÆI ² 4  �Certain | ¤ (besides ¥o) haveXspecialf õmeanings.  Theseo  /?Pd by íqpattern
2 @leadx/an{Ptrail! ÿunderscore charactersÀO"_*"Ð ‘t¼e¸ "²cmodule 2 *"ñ  S 7þ Or "_n "isV!in!@inteÏ Aive  Àpreter to stï  Foresultt  ofF Ú òlast evaluation; it isY #d ‚ Á"builtins" mô m@Whenxl "inÀ 0actÌ Pmode,u has no9Aýi Ø �defined.n pSee secÖ  ˆ§Ÿstatement9 N ?Notþð  name "_" is ofûten used in conjunction with\n'
  ' pinterna* Aaliz	 ñ; refer to the document _ for M  ?thee ñ"gettext" moduleE ²more informZ on this^ `conven¥ .f  "__*__" ô	   System-defined names,‘ ò
lly known as â€œdunderâ€�( .¥ OThes_ T are q !by^�ßpreter and itUimple†Ô ¡(including\ ñstandard library). Current sþ Î Í /arË cdiscusj !ÓSpecial methoJ2 se Ô 0 ßelsewhere. Mol Öwill likely b<ÿin future versions of Python. Ð P*Any* ? of>1 @ anyL ¼ÿ, that does not followk ¯explicitlyi R ed’ À, is subjectt�breakageº¿out warningûùÒClass-privateí @.  N  <„Äcategory, whXÆ  \i·-0con> Ÿ0a cz iÍ,pre-writÀ to/ aW€mangled 1YÂto help avoi‰t °hes betweenÍû  Î‘attributeAâ  @base˜r qderivedg …ses. Seeü Idµqfiers (a)Åñ,
 'if': 'The "if" statßh -'*   H  T °Acondq€al execu}:A  â   if_stmt ::=  `assign€p_expresu˜ ":" suitþW\ @("elâ B +)*ƒ =   ["/"p ]-  ðIt selects exactly one~ ©¬ Äs by evaluat)Ô }9'onÙ bL QuntilV �is foundµ—e true (s ÁBoolean operäs¬  š – Ÿ¨  F  5pfalse);É b"atk ÙÄð ed\n'
       '(ð:and no other part of the "if" statement is executed or evaluated).\n'
    ñ'If all expressions are false,W Usuited  else" clau  7if\L  C Hent,{  m ô,
 'imaginary': 'I — literalsG  — ]   '* %    ] Ò Ádescribed byØ ôfollowing lexical 'ƒ pdefinit:j    0   ê ónumber ::= (float p| digit¶ß) ("j" | "J")J    !An] G:ó yields a complex k ²with a real&Þ `of 0.0¡ø CK #reß@ed ap @pairà  G^pointE� â ÊAhave�Ásame restricr0 on þir range.  To create ag ÿ 7 �  vnonzero‹, add a È 6 .tok ?it,g  ð
e.g., "(3+4j)".  Some exa—s* 	½sV°3.14j   10. 1 10 P .001
 A1e10  ) "e- ó  ¢_15_93j\n'˜@port•TCm Gé –  §&   Z Q_stmt_ #"io úmodule ["as" identifier] (","�/'m, /)*v  k  ó| "from" relative_O ‹ ~ x � o ¿ R D µ 4,"(&u 	¹ 3¯ [","] ")"P xo/"*? & ¹ -(Ó W".")*)‚  á C S"."* \ l| "."+9   bbasic «`4(noM)ø| in twoP Mstepö'& `1. fin•­ Ð, loading andö initializing it if necessary\n'
  ' ñ2. define a name or âs in the local �pace for jscope ] \whereb !  0 ü"import" statement occurs.1  2Whe‹ : û contains multiple clauses (separated by commas)§ -th¥ ôtwo steps are carried out P !lyû Ceachm �, just as_ LoughÆ  L¥ …had been] k òinto individual 2^ 9áThe details of†Qfirstê 0, fk °ng and load>amoduleÁ �describedsgreater_    à ’section o°À {system,È Mwhic%Talso i s² Ávarious typeÇ `packag¤ 4nd ° ‹that cane bé” 0ed,¸@well 1alll @hookv L übe used to customizòK b  ö q. Note Ÿ sfailureZ!is‡A mayô<cat] leitherˆL  nü Â could not b®tÞ B*or*w ‚an erroro<redQ ZwhileE_ !, ©ò  includes execuæSN – Ÿâ€™s codeÞIF p reques·A ð is retrieved sucÐ`fully,ã@willð 
€=madñqavailabâ åÑi°e!œree ways:Ö  #* ¸ ® ;’is follow}P"as",s #    j
º  , d  àbound directly‹ œde e¯ @no oQÍ \ pspecifi/  Y Ï  be£ f iãa¬ “top level”ú   2is Ò 	^
 ) sle ïas a reference7  í 
�*not* a Ô d  ctF »˜Ä‹ 
,inÄ À  the local ðnamespace as a reference to th öp level package. '
  j'The\n ð-  imported module must be accessed using its full qualified � P ürather than directly&  ðThe "from" form useâ ð
slightly more complex proš :E  q1. findmÜ Bspec¼ !in u Àclause, loadí <andN À   initializ# €it if ne‹ Lary;0   2.Û � each of} Pident� >rs š ˜"" œ sï °   1. checkš  C Ûh8àn attribute by¨tÊÁ P   2.Z @not,D @empt{f c a subhFwithZ K andŠOthena  #  Á ¾ �again fo\t‚ Æ H  A   3¹  U ü ñis not found, "IüError" is raised.M  p   4. oó wiC˜€at valueU sstored }_localQ  !  ‘ë, ¼  p< 4"as ” Žsd�present,b ³ a  k 8  0Exa‘š$6foo�
  #  ! !ed,b” < ‰¬ 8 ƒ.bar.bazL !  N  V ,,  W 
 e oas fbbe » aŒ<fbb?0   ò š  ° ˆ Í È c 	?bazc _  ã-c  yAfoo." +Ç   e  IÝ@listéå Wpeplaced{üa star ("\'*\'"), allÅ\ublicd  Ÿvs definO|3areêgRB
t±scope where¬"K"³ ßtement occurs" Ü!*pÇ … *¹ Dby aw · adetermÔ "by
Àing '
        €'the\n'
  ñ'moduleâ€™s namespace for a variable ûd "__all__"; if defined, it R <ustf òbe a sequence of strings which are sW û  or imported byb =thab È T.  ThL †given inº i ûall considered publicb <andÃ  ¤ Prequi5 ×to exist.  If` dis notÆ �, the setò 
%v d ‚  includes ª  PfoundË  Q m³I+doÉ -no*÷begin with an underscore character ("\'_\'"). Ý kshoulda |containÊ  ¨ dentireaüAPI. It is intended to avoid accidentallí ex<ingc `items × x1parl ~ pAPI (su^¢s library ;w
“=wer„�and used8!inÙM ,).™   ’�wild card\m[ £ â€” "fromœ ÷1 *" |is onlyS §allowed atŠ ð level.  Attemptingb0use¥¼in class orN ‚function¸i °s will rais»ß"SyntaxError"ñ ÀWhen specify… Dwhatß $toâ ayou do0@have« 4 c¶ rabsolutê N ò�!.  aq  or package{
ó½eí —in anotheA tD Ppossi`to mak „relativeÜ 
g N v ³ 0samù p£  + pout hav: b  GorÉ  .&B% usC @lead 0dotz0h?ied%  af“"c <youÅ %caê� how highÊ±traverse upr ucurrentè �hierarchµ £ ?Qexact…ws. One Ó P mean#e c ¢ 4QwhereŒ ( »  ‡ŒeÓqs. Two /] 
Í,upb 5oneØ ƒRThreeD !is"woŸ s, etc. SoF 
_ mexecut‰�$ .`Qmod" 6è•R"pkg"� Àge then you 6'
  z'will\n ó+end up importing "pkg.mod". If you execute "from ..subpkg24  P  : d 8 bwithin_ B !1"_  – L }  2… <TheP óspecification for relativeH ýs is contained in the PackagN R< IPs secY .w  "5Blib.
  _module()"€ ð provided to sup`S appl¸ s9Lthatb ñdetermine dynamicallyÌ j s\ Ÿbe loaded± áRaises an audiîcevent Ê  " ¥Â arguments "g +",¬ ¼"filename",³ Á"sys.path",  Xmeta_   _hooks"² ^ ÁFuture state£ ! = !  KA *fU *¾Pa dir	 vee @�compiler «+ a¬particularc E³ should be I @d usròsyntax or semanticsc b±�availableÙ#a 3ed É ñrelease of Python where8
­0feaP± pbecomesgOndarY4The} › ESinten“ Bmigr¶$to2 
“ Œversions” Í ~€introduc O0atiachange ²«language. ­Ik‚allows u8 = Cnew !³s on a per-Í¢basis befoY¯ „i}1ich}N  `#  -’_stmt ::=�R" "__ö6__"Çi [["as"û ¼identifier]µ +
 D("," O A /)*C |¬ &"(a 
o m ° ¯ [","] ")"M  7 þ  dê -  A  3šP mustðPear n  T0top—  I0.  =
ù Lonlyb 0linØPhat cÁ ppT �a Àement are:\n6'
  :'\n ü* the module docstring (if any),0  ¯* comments+ üblank lines, andM  ñ* other future statel .*  ÁThe only fea< ðthat requires uså  ú [ < isL ÿ"annotations" (see **PEP 563**)Œ äAll historical’ Ás enabled by„Š aó <ill‘ ‚recogniz< °Python 3.  ö ýlist includes "absolute_import"¦ù"division", "generators P_stop ÿunicode_literalsO   print_func1 5 ànested_scopes"øu "with_Ð"¼  y ó 
 aÿ ð dundant because?< UalwayZdškept for ^ �backwardôßcompatibilityâ¢G is §ð	and treated specially at=Lpileâðtime: Changes toâ ñ semantics of core constructs:\oftenK Aimpl5.â ÿ€differen† ñde.  It may even bV/>cas«  YTa newÚ± introduces $inNûle syntax (such as ac <newÂ ð
reserved word), in which �  ` Ailer¿ @need32parP míÿ `ly.  S� 1dec1s cô þ pushed off unti�  /me$0ForR0 gi_Šrelease,¿ SknowsÝ ¹[names%=havˆÂbeen definedùPraiseb-Vp error ßµ
•7pcontainQ œ 0ot ´ np/it  ‚direct r7Õ ü ’@same ®Bany ¹¦ :§  1ea0Tndardß2"__eò__", described later4+iti w€ #be•  ed� µ �usual waÕ  l 	 r  Œ ¼a �executed@€interestÂEðdepend on the speciöfic feature\n'
  ð'enabled by the fu% ¼ statement.0  �Note that? ñre is nothing special abou W :G  Â   import __” Ì__ [as name].  T� Š - aÔ ô; itâ€™s an ordinaryn ù  'Lwithf %noã ÿsemantics or syntax restrictionsG£Code compi�€calls toWÒ built-in funQ Ü "exec()" and™ "I   ›ðoccur in a module "M" contain«%
ö b Pwill,4°default, usTe new °associated L_-th™ö3Ð.  This can b,Sntrol. opg l0rgu¸sa oÃ %bâ€” seÁ 1docB aR 2 ofÝy¿ for detailÕA{� typed at|Áinteractive  Ûpreter promptÁ  rÃ ±take effect˜  Á v¶ 
U ü session.  If anK €  isvr« W R"-i" f,ä@passÉ ] scri­  ¥b 0to ³@ute,´Ø= �includes¬ P, it ü  ô
�iÅ !in] Ó _þ Ø  afi Ù ƒ s° ­ d»�See alsoÔô**PEP 236** - Backâæˆ ¬ÀThe original Uposalô=   mechanism· ñ,
 'in': 'Membership test operá÷ /'* • ' ˜ L qors "in�` "not  m  3m� P.  "xŒ(s"J �evaluateôÐ"True" if *x*o"a A  Ú2*s*Bð"False" otherwiseô Ý0'"x‰i � returns1negû  L Š f.  Allhj™'sequence)qand setÎQs supªtŸÂas well as dýAary,«Rwhich%`  "	\ 0wheÐ « B 0 haägiven key. ForÂ%erŠ Bch aO À      'list,ñ tuple, set, frozen òdict, or collections.deque, the\n'
  ñ'expression "x in y" is equivalent to "any(x  V ø x == e for e inO Hy)".  0For~ ù	 string and bytes types,€ ‘"True" if' @only 8*x*Q ƒis a subQ ¹of *y*.  AnÀ 0est» ú"y.find(x) != -1© SEmpty› ðs are always considered
,bes ˜any otherš ’ €, so """Wò"abc"" will return ä /
òuser-defined classes which  Qð"__contains__()" methodR• Ý} s~  V9"y.A 3x)"£  `€true val<8andQ r"False"ÿ OwiseÌ &To notÓ Ï hbut doz ý q"__iterõ  î  iÀ\ Þ 3somÀ Q "z",¶BP Kthe 
5s zìz 
,J€producedŠ6le M � Xating\ °over "y". IÎ` excep“ K ‘raised du ‡ D Qon, i¸Xas ifQ S"in" 9 FthatR €aLastlyýµ old-style k � protocol“ `tried:;as˜s„ Ÿ__getitem}
 ä½ $ea ha non-N pnegativMñteger index *i* such æ  Ÿes y[i]˜  !",#n 1lowF N 2s1I` gError">1  (£Ñ µ 	  •)–àThe operator " Ú#isqqAhave´ Òinverse truth‘- o l a,
 'inû bs': 'I ! lðlÈ* œ"  V 4€describeÚ¶ `followïvlexical.Z Ëi.s:f  3   Ý A t::= dec V| bin 6oct ©: C'hex g V    g ñnonzerodigit (["_"]  ”)* | "0"+ j H"0")»� (  ® e €"0" ("b"R 4B")R 2bink À+\n'
         ð'   octinteger   ::= "0" ("o" | "O") (["_"]( ±digit)+\n'
?   G ?hexG xG XG ?hexG 	qnonzero# Ž �1"..."9"v ( ˆ ½ / 6bin2 /  ç 1^ =oct/  ^ 7/ Û �  ^ = A| "aÄ fA FC  â ôThere is no limit for the length of vüliterals apart from ¨Nwhatf þcan be stored in available memory.4  ÐUnderscores a¶ !gnP  ² ±determining¾ Ðnumeric valueÅ © >theb â ƒ.  They · áused to group ss'�enhanced¯readabilitÚ UOne uÌ f Óoccur betweenc ý, and after basef ¯specifiersÊ ke "0x"ZàNote that leadD #sªP non- ñ  decimal numberƒ=not— allowedy  @Thisl±ðisambiguation with C-style	3al ��s, whichh nPythonû ¯°before vers_ ?3.0�  < ÐSome examples7ü:4  A   7£’214748364  
 A0o17 ¿0b100110111Q 38 ñ79228162514264337593543950336" 30o3Q ŸxdeadbeefP - f 100_0  	 ¿0b_1110_010™  [ RChangå}<6: ½Cnow *L m>ingb qpurposež$ Ýñ ,
 'lambda': 'L
 "'* V ' 2   K R_expr' €" [paramp°_list] ":" '  eslK  ™ 1 ós (sometimes called}  1ms)jÖ*tol'creatÉð 'anonymous func` s.Òu " "Ï  Í +s:\ Ó J•'yields a` ð object.  The unnamöed object behaves like a '
  º'function\n < Üdefined with:$  ý   def <lambda>(parameters)< ƒ ïreturn expressˆ  d aSee se³ # F¼  v 0iniÇ õs for the syntax of ‡ û llists.a ¤Note that ss creat Þ ³ ‹s cannot_ mcontaiYástatements or 9 aº  Š A,
 '— ú': 'List displays§ ('*    A R I ð is a possibly empty series,‰©s enclosedØ 'Ò û'square bracketsê'Ž !  � _Ø ñ ::= "[" [starred_­ °| comprehen[] "]"I  æ Pyieldê 1newq , ›‚Zbeingà ›specifieda ³by either aQ f Í
¶ �.  When a ;ma-Q  se™ Wó oO óis supplied, its el6 m¬`'evalu a ñfrom left to right and placed into~ +"inûPorder‘,'Í š O¨  xO °is construcá Š ;the¡ Ó `result‹*  3f  Š  `namingN
 Ð zbinding\  "."  BY  Knameƒ; '= P  *NF p* refer”dAs.    Úpintrodu¢0by x  á Foper:© tÀ 'The followdšs[ e  s:96mal.s£ i -,s,ì –"import" ßq, class¤K	ªb(these„ 
h +" 'L %or–·  ±eW ¡ng block),u rtargetsÒ
a +arŒp 'identùÀrs if occurr/Àin an assign¸ð, "for" loop header,Ëb Mfter&0as"³ 0a "Q. A €"except"8Puse. ·Y
_ g	c À  'of the foö+rm "from ... import *" binds all names defined in the\n'
  '8 ú-ed module, except those beginning with an underscore.  This P Lformd ðmay only be used a` es | level.5  ð A target occurr” ðin a "del" statement iü þso considered bound¨ b tÎ @purpú p(though3ð actual semantics are to unl# 
 y)Ò ±Each assignº $orÆÎ í s~î UblockÓ
v Lby aÔ òclass or function< i /orŠ[ (the.Atop-§` Aode • ð AIf a” ¤”Ô 2, i¼û local variable of that‘ s ,Ž Punlesò0claùqas "nonR "¿"global".  Ž  f 0 '´´ W µ u.  (The sÆ VL Å cSh½ R and e #.)¼ ""isVM
 L ` ;‚ but not edÅ&reÑ F*freÀ *Ì­Arenc¶ìwð program text refersCk*TLing*¸ 	 ]  establishßy¾ p follow" aresoluè_rulesÃ p RA !of¸s# = #  “A *scope*zs¼  visibility*: sÔ²³
ád þa© å!s … € include… "at h 
f  X G ‘s`ag´ ,Ý k @exte™oto anyÏ_Qconta¼ .y ƒng one, òaï, z ` �introduced €a differ;zA for¹  H70Whe‡ ,  Øà¶ |S r  “`ved us§ Î 
h|nearestÐQenclo3 Ðscope.  The söet of all such scopes visible to a code '
  Š'block\n áis called the # üâ€™s *environment*.6  ðWhen a name is not found at§ ð
, a "NameError" exception- 
� ¬raised. Ifd    rcurrentò  = aa funcK B, anË Œ brefers
h \localc QvariaCbhat haÊ ¡yet been bÓ _PvalueÞ  – ¬point whers<thed ˜ pis used® A "UnY L’ !I 8 Ðis a subclass$vÅ$IfÃÑbinding opera]¢occurs anyç Pwithióh7,o-al`1use–  5G   D ñ are treated as ÀAenceÄ
Â\ L Q.  Thß`n leade€s« ¼ ƒ ‹ ‹ 
d auZ   before itƒ½m 1rulüsubtle.  Python lacksM Rdeclaa [d+2owsG„ˆ‡Q Ä þ¬ ™ !e ï à…& m can b¬ðdetermined by scann ¯@enti¬!exŒ  p B forÁ 
JÏ ² bsŸ f à"global" stateŸ sÂaÆ,N fí  : 
‘  ýŽ Áspecified ind Š C J Í  at* L  3 
b ¡ ‘top-level#@spac$ sûfresolv€ 0 
[  q > = byÅ Tearch¨.o a, i.e.Ý E !of ]modulecontaiùñlrbuiltinº˜ ,Q µ ² 	 $ "N "¼Ã  uså +edtfirst. > ñ  = Ÿt´¬ v + + h +. j TÚš Ímust precede� � öAThe Y Àal" statemenðt has the same scope as a n ¶binding '
  Ê'operation\n &inK ¡block.  If ànearest enclosT l «for a freee Œvariabled pcontain£ ñglobal statement,j L > ² is treated× 
± B .d  æThe "nonlocal"q ò causes correspo- :Üs to refer toO ôpreviously bound ® #s B.@funcs&EÀ Ð"SyntaxError"@raisòt compile time iœRgivenñKdoesc <notÁ Pexist¬ 7anyÒ¤ – F  V,Rpace 	`module³ ó automatically cÄ ªRfirstÁ 
Îab mN °imported.  w Smain  y ascripty Llway † ,ed` 0"__J =__"ƒ+ ÁClass definiÈ  s and arguÀ5�"exec()" P"eval é rpspecial• $ &bext ofØ`resoluy \. A c� ið aÜ —  ut’ Áthat may use± á et  s.ksØ\ences#afollowÄÁnormal rules ( Å à with an excep× µ ™ ` "unnÆtÔare looked upAÉ   .a -Thƒ ¤ s,  v…gbbecomepÁattribute diÚ;aryd ,ofÃ V \¯ä^ edÃ aäf Ö@limi
Iœb  ; Q; it  not extendÛ' 2ode& sò lmethodI>â€“Å iéAclud< mprehensioÖ`nd gena’or expres Psince'aAimpl Ôn+a ž 	pis mean‘ at[ �’<ingÃ ¬will fail:  #  ŠA+ Roa = 428     áb = list(a + iià¬range(10))9  àBuiltins and rö	estricted execution\n'
  /'= 1  ð**CPython implementai ü detail:** Users should not touchI ò"__builtins__"; it is Â Oly aa ". ` O ôwanting to override values in the n ¤ namespace¤ 
#Œ"import"b  D "E À" module and üify its attributes appropriately.N  T¢ PassocC ad withÉ Ýº of a code Ã \blockb ð
is actually found by look7!up[   š ? Ú 
b lglobalc  ? Z@; thÎ€be a dic(€ary or a5 @(žklatterÈ Lcased  ‡m|Hâ€™sW ðis used).  By default, whenÅ  9 
Å �"__main__ìa ,s&4-inÄ ;n 
j <anyÈ SotherB i Áan alias forv Af)-th(• e   ?elfŠ© aIntera½„üdynamic features1 c=1  ¡Name resolÄ ç0freÐÐriables occurn‘ runtime,i+atmcompil 2 0. T£@meanÖ!ate`followWìwill print 42:¨  Ÿ   i = 10  }def f()D œd ?(i):   S /42  -f(/ &  V�"eval()"«"=  1funÓAs do<°have accessE.=fulñpenviron¨µv?0.  Ìss may bÔ?ved�>locS `m¸s ¡ ªcaller.  F1areÔ 
…� ,ed%‚ånearest enclosÄ  )T, butµ Ž +. u<[1]c ˆ0xec{ Ó •ˆ�!op%`l arguW �N áð the global and ölocal namespace.  If only one F '
  Z'is\n ñspecified, it is used for both.\n',
 'nonq ”': 'The " »" statementZ O  '* *  4   d ˜_stmt ::=w Pident¹ vr (","  .)*N  Æ ÷ causes the listed[ ªs to referX^  'tod ñpreviously bound variables inb ýnearest enclosing scope^ žexcludinge Ðglobals. ThisÁÁimportant beÍ j `defaul ahaviorã	`  'bine  'á q searchO g€first.  Wl allowsÀ  'encapsula_BcodeX  $§outside ofs ³ 0 be; Ç"’ (module)c Ú>  'F N_8n a‚ç Ö, unlike thos6nÆab "� Gc, mustfÀto pre-exist "1ing@.anO H(Ç# rÃwhich a new J ž should bt0cre e PcannoJñ determined unambiguï)^8 q @collMwith\ '« 9 À¬ žSee also:d  ñ  **PEP 3104** - Acces=R in Outer Sî! ³LŸacation´ ¾  Ç «`umbersªý Numeric literalh ¡Ë  ýPre arí�ree types¢nl ñ: integers, floa¿
½N'poi7"'nÁ ó, and imaginary  d„ ¿no complex ä (" A @ canïÁformed by adõ@a reS } b'� ê40Not/ atÄ 	‘@ do Ú inßñe a sign; a phraLk™À     '"-1"\n7'
  ú6'is actually an expression composed of the unary operator â€˜"-"â€™ 'R 0and0 +\nj óliteral "1".\n',
 'numeric-types': 'Emulating    L Á /'* .   The followw ñmethods can be defined to e› e™ 
Þ ’ pobjectsà 	 M^ �orrespondt #toVûions that are not supportedeP /byj áparticular kinÇð number implemenX ï(e.g., bitwiseg ôž ?forH�non-integäi �s) shouldKsleft unR"] Xÿ.__add__(self, other)2 ?sub2 ?mul2 /at5 truedivk _floor7 /mo8?div5 :powÐ ¯[, modulo]©jlshift? 5 r5 !/an?xor™ 1 ¿”   These ‘ Bcall�Â  1 bi›’¯arithmeticj à€("+", "- * @ /  ?%",%"1O()",j @"pow" 1 "*^  <<Z  >> & ^ Ÿ|").  Forj Ïinstance, tok �evaluate"×ð"x + y", where *x* nl  am Cclas»0hasI"¬#)"ÄE, "xÂ0y)"w ³ç"B "__q5__(c o ²ðequivalent to '
       ¨'using\n'
  ð	'   "__floordiv__()" and 1mod ÿ; it should not be K ¯related tol 
Dtruek À.  Note thats 1pows o k Qdefink  acceptr ò$an optional third argument if the ternary version o ä �built-inp @"powE@funcw ` is to5¯supported.>  ’   If oneš ñose methods does”\ Ð Qopera{ Ã @with( n  M 6lie*'s,ðreturn "NotImpleK?ed"Õ Àobject.__radgÏself, other)š 3 osub__(3 ?mul3 /at6  ß  ‚8 ¥3 ?div6  ›i ¯[, modulo]±olshift�r6 "/anP?xorœ 2 Ìg   TheÊ‚are callÕiY ©1 bi Î¯arithmeticj  s ("+", "- * @ /  ?%",Þ"7O()",j ýA, "*^  <<Z  >> & ^ A|") †`reflec4Ü �(swapped`1   Û Dnds.Pw s RDonlyWîOleftâ L Uã   !1ort�Òcorresponding� |1[3]I bÞ o © fr `differ±ð	types. [4] For instance,aÐevaluate the ='
  ÿ'expression "x -\n& ñ#   y", where *y* is an instance of a class that ha  L Ï"__rsub__()"o µmethod, "y.0 0x)"y ò called if "x.__L Oy)" o returnsj ÿ*NotImplemented*.+  r   Noteø ðternary "pow()" will not try ¸ ?ing§  1pow_ (theo Pcoerc±ÿrules would become too complicated)Í #:}  VðIf the right operandâ€™s type·Ra sub$o, Oleft@ t 	[ 2and}_ ÿprovides a differenh iø atQ˜ r 	¢reflected ¡A forø ²  E d, this ˜!be/edo 	Pbefor\!e -f XLnon-� 0. T} q ohaviorp 	eallows©Ñes to overrid‡ 0ir ñ�storsâ€™¾ sÿobject.__iadd__(self, other)· 3 3 ?mulf ?mat6  truedivm _floor8  /mo>|>¯[, modulo]{olshiftÞ r6 "/anÜ ?xorœ 2 –ƒ   TheseDs arï Rw;2aug{N¯arithmeticm `assignF ðs ("+=", "-=", "*=", "@=", ‚"/=", "/ % ='
  Ÿ'"**=",\n `   "<<< 1">> & ^ ÿ|=").  These methods should O ¯attempt top ÿ(do the operation in-place (modifying *self*) and returnq  J oresultq �(which c· ð
be, but does not have to  v .  If ar �specificp )" i` �defined,õ ðaugmented assign o fallsm @back� ?thep dnormal ð.  For instance, if *x*� al ? ofr a classn ówith an "__iadd__()"|  , "x += y"n �equivalenm O"x =j %x.c ð y)" . Otherwisei 2.__    '‘b"y.__r) ox)" arI€consider®1as ê  aRevalu¬!ofä o y". I”certainÙ 2sitO ?s, Bcan Ö/ ie punexpecK_error²‚(see Whyô a_tuple[i]«ð[â€˜itemâ€™] raiseÜQexcepœU@whenÏâ Aaddi@ rworks?)t°this behavi¢sÝ Ÿfact part’ ‚Odatan omodel.   �   Note:  ^!Du1Pa bugÃ ¡ pispatch¼âmechanism for NmO thaÀ"  Dst2powt Æ°s "NotImpleQ?ed"owOfail¡
 ’ |"ˆv kV `x)". TÚ,$�p  fixedH¿Python 3.10Íð object.__neg__(<)Â+ ?pos+ /ab+ oinvertY › �   CalledòiÎ ið unary arithmetic ope½rations '
  ß'("-", "+",\n! ÿ   "abs()" and "~").+  ÿ	object.__complex__(self)/ ?int+ Ofloa- o à   Called to i¡ òment the built-in funcD"Ä O()",QC"int-r "± ñ()".  Should return a value ofƒ ¿appropriateo Otype�%?indŽÄ 6¡"operator.\ & 6�wheneverÄ ÏPython needsp òto losslessly conver¨‚numeric i È�an integr * _(suchr ðas in slicing, or 	A"binå C"hexöä 0"ocm d£). Presencòis method indicates thaü ´m  7is *Ke  MustŽHd’   If "__Å .1"__ö$__)" `rå¿not definedÔ ÿthen correspondingÁŸ%, ƒ°/ank   fall backxñ U/)"3”ƒ.__roundú¿[, ndigits]0Strunc8 - _floor- Oceil, ˜(	Eú! "ú Úo"math"m L 1s "�í X "Î { UnM *w?* i”Bpass:"¸ Ê ll¿#seº9s sæÜ  ýß + â "at� Pan "Iôðral" (typically a]n '
  ¯'"int").\n  ð   If "__int__()" is not defined then ÿ built-in functio† ?()"o Ðfalls back toz Qtrunc|  ¼ ò,
 'objects': 'O ü, values and typesa /'* *  *f ò* are Pythonâ€™s abstraî áfor data.  All [ in a�'? d pprogram_ó represented by î 0 or @rela^Œs betweeg]. (Inf �a sense,(àin conformancen¢Von Neumanà ýmodel of a â€œstoredT º ðcomputerâ€�, codeÌ _also Ñ -.)K  DEver0 haàÁ identity, aëÌ a }n2 ¢Q *> ð* never changes o!ite bWücreated; you may thinkÎ]of itf !asº ˆ € addressðmemory.  The â€˜"is"â€™ operator ILaresl =thej Ï  ¥3twoû !s;€ 0"id²‘breturnEmntegerP «uing itsn |	V'< 2**CÝ¡ implement«ó  detail:** For %  , Ÿ xR<theî 'e I�where "x‘š£ A>“determine´†0ion !atHÈ¡ ~supportj`(e.g.,2Qdoes Uòve a length?â€�)µ I n �e possiblÝ sœ s h° 3ype\"	
6 «f  F q (whichÒC °elf).  Like . a0ª c *d *^  "un–�able. [1]”   L*'*DsomeC canç3.  Ëb whose5 ! Q ‚ ñ@saidpbe *mut– %*;^ I i´Ë d tAtheyg q ”alled *imq 0. (ä ã  â aÝÀ   'immutablôe container object that ÷s a reference to a '
  «'mutable\n M ócan change when the latterâ€™s value is$ ¬d; howeverg .thc º €is still· £sidered im› ‘, because} ¬collectionc /ofÅ 7s i”cannot be´ d.  So,p PilityÒ =notP �strictlyŠ òsame as having an un+ Q,{ |is more° �subtle.)f #AnËc– ýdetermined by its type; for instance,R �numbers, Á ôngs and tuples areü Ále, while dic\aries¸ =anda BlistK ¯ =le.#  O¯6 n4pexplicia†destroyeR › �y’ ^becom`qunreachŽ€they mayøƒgarbage-Kñed.  An implementa^-is² pallowedH“postpone M  M  ˜por omitûàaltogether â€” gMis ah ma< of” 1quaŸ?howy ³  Õ 0ed,­ lo«Cs nod€¾  Ü  > ‘› Rá�**CPytho[¤detail:** ! `currenù us”âÄ-’ Pcount�ð scheme with (opÅÀal) delayed :Õ X�cyclicallL^linkeáç …4ichî Ù&stJ`s soonhp˜S, butn� guarante†oc èè>ingvircularësÕe2Fdocu×!of½­"gc" modul˜=forb binform on§Ptrollw ?ý"f ]¹ .ÌOb 	~‘s act dif»  ². ÈjP. Do ÏWOdepe§ ‹ó mediate finalizÕ fÆè , X Hh =(soÊ ðyou should always closp  oä)C0NotÅaÖ e ð of the implemen÷tationâ€™s tracing or debugging\n'
  û+'facilities may keep objects alive that would normally be H Ícollectable.e ƒAlso notM Pcatchš €an excep³ ò with a â€˜"try"â€¦" L"â€™o �statementl Æ ” 9 ESomeû ðcontain references to â€œexternalâ€� resour |such as¦ Mopenh Pfiles•òwindows.  It is understoodtWthesee -arv]freedb twhen thÎ  \ ƒgarbage-§ãed, but since  ¾ , mion ise ànot guaranteed�happen, D±so provide ðlplicitm mway tof `releas8$e {Q, usu�üa "close()" method.a ~ProgramÉ  Wòstrongly recommendÓ "ex® 1ly ` 	Ü m.  The³ Á0fin  Â³0 anâeë ö .Y áconvenient way‘do thisÞ3Tother;A0se ë?allv *4±ers*. Exampé&f  O  tu P, lisenÁ0dic@arie Th‰ “ –part of a] ô|value. ýI‡Ámost cases, 1Ðwe talk aboutþ  M f ¬, we implyd t B  s,üR Ridentn!of dyŒhowever,a ¦ ¶ PmutabÔy» Aonlyv 
ˆ àÉ �immediate
e³ Ö Àied.  So, ifí!im� l%÷ ¡r (like a )Ï6s a| ]#a K iN, itÛ€ changes” ÌI :  " dGñ Types affect alEqall asp3#ofÈâ behavior.  Ev�ºpimporta„9 œy™ i ped in s §sense: forÀ    'immutabwle\n'
  ü2'types, operations that compute new values may actually return a\P ð reference to any existing object with the same  B ande +, ž ?whi´  ³for mutableV  ¶ üis is not allowed.  E.g., after "a = 1; b =g =1",1"a"™ 1"b"û  t !ay` ä  à Ç Ü Ç Bb ±one, depend n‘implement�T, butÁ ‘c = []; d ".="c"e  \ð"d" are guaranteed½ Æ awo dif¸ t, unique,û-lyP òcreated empty lists. (Note9"¥ ¡ a assigSï7d £to both "cƒ²d".)\n',
 '©ñ or-summary': 'O½�or preced~T ó.'* -  `The foi ¼Œ“ 0ize�eT	— y– ÿ in Python, fromx whighestë ‘ (most biG)Û ÿ
$ 
yx o(leasto V 4.  f2s iªÁpbox havþäk �Ÿ.  Unlessx ZPyntaxÕôexplicitly given°1orsÙ�binary. _¼ u  – Õ  group leftRàright (except �R“exponentiÀ_whicht g sõ e !tov /).5  ‰ Âñarisons, membership tests,Û id¨ /ty7, !lläw ¯ :åb aÐ B-to-á Pchain6CŸfeature a!”describedŽCCompð @ secÌB"/+- 2 +@|^0	 |µDpð                  V|\n'
 
 ?'|= 2 u 	ú	 "(expressions...)",  "[ ß]", "{key: | Á ö
Binding or parenthesized L ?,  � 
‘value...}p 8  ™ '}". o| list’ õdisplay, dictionary  ?set� d  t J /+- 2 +‘‘ "x[indexÿ : Ï €Subscrip†ö, slicing, call,H Ð| "x(argument ¨Í"x.attribute� 4 ¦ reference„ 
 � ]µ2 ��await" "xí ¶ 	 AI ˜6  €/**û Å  Exponentia“C [5]3 	 € +x- ~	âPositive, nega
 ³bitwise NOT€*@ /  %‘Multiplicƒ, matrixù  |% 	 À              F| '
 
 ñ'multiplication, divis
 Sfloor+ ?|\nA |#  � } Ûremainder [6][ � /+- 2 +	‹"+", "-"©  @Addi‰Á and subtrac 	L € <</>>iShiftsï   €&û Î ³Bitwise AND,  €^=?XORû  €|=
 € inBnot 
  is `is not
 ' <= O>", ñComparisons, including membershipA| ">h ! /==œ� Qtests”’identity  …  � g¿2 
™À            ß'| "not" "x"  O| '
* Ï'Boolean NOT!  ?|\nA /+- 2 +u o| "andþ  Ä 0AND)  €/or /ORý  €ßif" â€“ "elseñConditional expressionù  €olambdaý È LI ý @ •Ø02 
/:=þ  Ã ¯Assignment	}‘ÿ -[ Footnotes ]-)  ð[1] While "abs(x%y) <  ÿy)" is true mathematically,mßfor floats itu  ¦¢may not bec Rnumer` ÿ due to roundoff.  Foru Ïexample, andt òassuming a platform on which a PythonÁ  û /ant ÿ IEEE 754 double{ ì Qprecioðnumber, in order that "-1e-100 % 1e10o0" '
  ÿ'have the same\n'  < ñsign as "1e100",7 ÿcomputed result is "-1e-100 +v B _whichv ðis numerically exact tqual toŽ o.  Theq �functionl ô"math.fmod()" returns aÜ awhose matchesp R 0 of'w õfirst argument instead, and soˆ XO" iny �is case.t Wz� approach·Bmore ðpriate depends onÃ r papplica^t Ž €[2] If x„ pvery clgRto anïÿ integer multiple of� Ÿy, itâ€™sr  Íðpossible for "x//y"N be one larp ?thaj�"(x-x%y); odue tos ñrounding.  In such©•s, Pythoné =olatteræ n?, iÒPorderÙ apreserìpat "divæÿx,y)[0] * y + x % y+6be  ë  ˜/x"#!3]ÊðUnicode standard distinguisy‘between *% ·Ïpoints* (e.gŽ  qU+0041)uÐ*abstract cha $erE Ÿ â€œLATIN›ÿCAPITAL LETTER Aâ€�)| €While moz  ï ar¡/ly~ !reêOnted£QusingíB*Ó reŠav0berkg&t €that canÒ @addi4G be µ  ˜ Ÿa sequencÓ1of ³ ¥w  Òå `.  ForZAmpleó  â Ê a s ÐC WITH CEDILLú aO a ®l¡@*pre�ðosed character* aÿt code position U+00C7, or '
  ÿ'as a sequence\n'  < ÿof a *base character* au Ÿ43 (LATINx CAPITALr ðLETTER C), followed by† ›combining‹ À 	u ÿU+0327 (COMBINING CEDILLA).9   :óThe comparison operators on strings  eP?the8�level ofq 1Uniò  ðpoints. This may bŽ ïunter-intuitivq ÿ to humans.  Forx àexample, ""\\u}R" ==   43 ÿ327"" is "False",ë ÿeven though both{ H represent G�same abst¯,O â€œ 8T WITH'?â€�)'oÐ aÉ øÍ ëœ¿s (that is,;–in a way ö_), us""ujÿdata.normalize()""ð[4] Due to automatic garbage-collecØÿ, free lists, andC dynamicðnature of descripŸQ, you2ÿnotice seeminglyq ÿunusual behaviou0 in certainfs€  ³ E"is"&`, like	ˆŸinvolvingç …ñs between instance methods/!co  7ì PCheckfiæ �documenta½ï for more info'#05] SUpower(ÿ "**" binds less tightly than anÈ parithmelàÖbitwise unaryz €on its rq ,p uq b"2**-1?0.5,$6À"%" operatorð	 is also used for string Ïmatting; '
  ¿'the same\n"  7 ðprecedence applies.\n',
 'pass': 'The " ¹" statementT /'*  
" 
 0   P “_stmt ::=_ 
% 
 �  ð null operation â€” when it0àexecuted, noth-ˆhappens.*+'IÄ  iseòful as a placeholder] aý  f ‰requiredT êsyntactically,Á ö	but no code needs to be ¯  ßŠexample:< 
 á   def f(arg):J É�# a func•that doesZ(yet)I 
 ¦   class CT 0   W  @withÃ „methods R ,Dower-p ¡)orf  , !   ~
Q õ binds more tightly than unaryx 0s osP Pleft;+F OlessF   rj (. ð_ Jx isÃ+ '(  ' ÿñ(await_expr | primary) ["**" u ]@  ‘Thus, in ñparenthesized sequà2of J<and-,Ù +th7'pð ors are evaluat•2rom Ñ ^e (this~
Y ›constrainÁ  ­U  Ô ory   | ðnds): "-1**2" resultsó @"-1"´nE @has \  "  semanticsý  ûbuilt-in "pow()"® h, ð1ed !€two argu& s:i±yields its Ž'+ a 0raiò!to¤ ¶!ofD ‰c 0.  Ý unumeric sv,arÏÀfirst converÇðto a common type, % j ô ofht  qrFor int�Ands,È K 	{ m vè
½  un¥! š esecondô  £ �negative;0casÍ %ll( ÂO 		Qfloat "a  ¹  Ö elivered. ä °
ìS '"10¦Ðturns "100",  -Â 80.0ÁÀ     '\n'
    ó#'Raising "0.0" to a negative power results in a '
9 ù   '"ZeroDivisionError".\n# _ V bnumberk ¯fractionalm ‹complex"b O ð. (In earlier ver“ ós it raised a "Value§ �)\n',
 ' ‘': 'The " »" statementk * $  "  � •_stmt ::=e p[expres¨ – ["from"  +]]I  WIf no0 `s are Q Eent,e 1re-Ô ªs the lastÂPexcep�_ �that was Ÿ veü A ôcurrent scope.  † E % i1 	-in_ )e L , cRuntim¢ ›  V Å Íd indicatingQ pat this- @an e�Œ4 –Otherwise/‚evaluate/Wfirstd" a š Q `objectÀt must be eif û a subclass or an instance ofF d"BaseE˜ ".e!itØ  B ,Ì… K {will beP óobtained when needed by7 !tiOS ^ P with\@argusG 9‘*type* ofH › 1u gceâ€™sÎ ³ *‡ e*ô  v,oitself� ÂA traceback ’ H ànormally creat�utomatic /an"isÔàd and attachedÑ$it$5"__‡ 0__"& zribute,d [whichÿ óis writable. You can¸  ;_  Çset your ownú €¡one step uü e"ø´  ()ŽØ�method (® 
Á {returnsÃ  R HsameÆò,b7its¯  Æ 0to  	º …+),a ‹like so:  ~ P�("foo oc~Kd").÷ µ0obj$ï]  ù¸`clausehul7forù òchaining: if givenÂ	é ksecondb **R1anoS¸%or^4,th
Àsecond expreñssion is an except õnstance, it will be attached to '
  i'the\n graisedQ ðas the "__cause__"O Ðribute (which… ªwritable).b +Ifa  M _expreÀ aclass,s  Ä 	¦ iæ ktiated` 1and> —resultingÌ 7 %ceU  ™ 	e _ j	B. If† O*is ;notb Öhandled, both½ sµ ‹printed:8  ¬   >>> try) a   ...K ~(1 / 0)@  & ð % Ea as” T 7ð RuntimeError("Someth�ðbad happened") fromP }  ÿTraceback (most recent call last)˜  þ  File "<stdin>", line 2, in <module>k €ZeroDivifÆ 3: d ‹ by zero5  À   The aboveã ¡w8Pdirec» Ruse o.`follow'	‰„<ionÞ r  !74!â/: â¡  ûA similar mechanism works implicitly ifá!s bdH\insidÍ	Xðr or a "finally" cl×:®qpreviouâ¯	‰+isÂ @then^Ú6newðAâ€™s=iontext?ÏÂ7l O± F  ¨œ0Duru" 	 �»–, anotherÞ
„ooccurrš %Àle "<stdin>"õ, line 4, in <module>\n'
  û'   RuntimeError: Something bad happened6  ð Exception chain= ðcan be explicitly suppressed by specify+ 	� k"None"` ûin the "from" clause:$  ¬   >>> try) a   ...Îprint(1 / 0)@  & eÚ C YraiseC/("C0") À  á m  ÿTraceback (most recent call last)™  ÿ  File "<stdin>"V@Addi al informa B on ESions Pfound–0sec& û PAs, a) P °about handl=\  isR 	N_ 0The» statement.€  aChange° @versèR3.3: ¬ð	 is now permitted as "Y"� "XQ /Y"w 0NewD 	s  » 4"__Lú
_context__" attribute to z† @auto¥Ác display ofhT _  © á,
 'return': 'ˆ  "H
a ? '* &  2   Z ²_stmt ::= " Q" [exEœion_list]=  : mà ðnly occur syntactiLPy nes¹�in a fun”	Dq 'definá,d `not wi5$ aK fclass 5  Cx, 'E @If a+ß  ß  \  pent, it ö evaluated, else…Q ¿substituted} &aleaves@currn +è  ‰ª r\ '(or� .)Î Ê eœ FWhenapasses™@rol —of a "tryŠ¨ aÄ‹"finally`" 'Su, that & jv0xecJ  before reH  / †
ý <theý Eî Iƒ•generator� › eº� indicat´ðat '
           –'the\n'
  ð'generator is done and will cause "StopIt% úion" to be raised. M T` ðreturned value (if any)n ðused as an argument^ œconstruct« Š  © ¬becomes thª .q Ì" attribute.P  !In‹ Æsynchronous �function,$ rempty "Ü "PstateÍ ` qindicat® !at³ am ‹P AB Ÿ{ A non-° ¢ º ,isc Àa syntax err#" hñ,
 'sequence-types': 'Emulating container  w Ÿ/'* 1   The follow~ °methods canÌ@defi¢qto impl¼
‘ ¸ pobjectsí P* Câ äs usually are ps (suchÿÿlists or tuples){ ¬or mapping¦t �(like di©±aries), buté `represdVotherƒs… 	ÈQ ~well.  ×" Ôfirst set of Xiô Qed eij Ato eú5e aæ /toÆF 
;E`differk V‡that forl ,m Ø a,ðable keys should- iÁintegers *k*k ¿which "0 <=k ¼k < N" wherƒt 2*N*Á €e lengthT p 5,&cslice ", { ¿Ù/ aPPrangee  items.  It� `also rYqmended Sssá pprovide‘o "Sa()", "¤s …  1get	 × `"clear! j ¢"setdefaulH @"pop0  	  h  Acopy
  Jl Ÿupdate()"l PbehavVpsimilarÃ@thosqör Pythonâ€™s standard¡yLÝ\ Îa"colleêãs.abc" module ‰ðs a "MutableMapping"N '
  ÿ'abstract base\n% ñclass to help create those methods from aF  set ofq ÿ"__getitem__()",t H"__s( v "__del9 ÿ and "keys()". Mutablev Ÿsequenceso Öshould provid× p"append© r "count Qindex 2C"ext8 r c"inserP 1popN t"remove @vers ì #so/ t ¿like Pythont ôstandard list objects.  Finally, (s types p Ÿimplementn ðaddition (meaning concatena )Ö ‘multiplic ¿A j 0rep,Áion) by defip 'thËR__addug E"__r$ l E"__i%  –3mulV  @  Ý  ,  FŸdescribedp ´below; they�2notä ðe other numerical operatorÖq OIt iñrecommended that both mappingsÔ #%s O/thR±"__contains<H dðallow efficient useN ËO"in"l ø ;G5forÈ !, J Þ`searcha! Pâ€™s Z ; 7 H?, ic Brougk Pvalue¦�A furÊl —ê ®Ki__iter}| 1to “o ª Q Æ&thé è"erMž ,É 3™ s Vp  Šn ÔÁ«ä #it[r k Â3  ¢ ï.__len__(self),  p   Call¥o‡ Ùð	built-in function "len()~".  '
  ÿ'Should return\n% ñ   the length of ñobject, an integer ">=" 0.  Also P ; _ thats ÿ!doesnâ€™t define a "__bool__()" method and whoseâ h"__len3 t ÿs zero is considered to be false in a Booleanw �context.m  ó   **CPython implementation detail:** In $ ,�h±/ism Vrequià ò	at most "sys.maxsize". IôQ õ 0lar?thaL		\ ÿ some features (such as "len()") mayn _raiseÛ à"OverflowError°To prevent = King % / bn ¯truth valut 	qtestingýç?musÃ$Y .Ùÿgth_hint__(self) r   Calláp² "operator.ôd S()". 2r@ ÿ
 "TmatedQ1forÅ× q (whichø¯be greaterpor lessKr	 ¾cactualt F). TÒ¢-beËä 0< P+Ç 1als=T"NotIÓRed", ë /isß tý dp @same3i¥ñ*2didP�exist atv 0allã 7
}�is purely<roptimiz¬ —•is never eR?forß ¿correctness*`   New°@versD?3.4F _Note:¢  `  Sliccðis done exclusiv/@with×p follow' OthreÅos[p ‚call lik À              Q'\n'

 
 ' ¯a[1:2] = b'  ÿ  is translated to*  � ÿslice(1, 2, None)� $ñand so forth.  Missing _ ÿ items are always filled in `with "� /".Á  Àobject.__gety ß__(self, key)5  Q   Ca¬ ðto implement evaluation of "` ¿[key]". ForÕ ÿ sequence types,s �the accepÛñ	keys should be integers r ¾o ßs.  Note thats qspecialc Urpretâ pnegativ~  dexes (if ¦ ¿Ïclass wishest 	Po emuÁ9 a )ß_up tof "ãß)" method. Ift P*key*^ ðof an inappropria$ðype, "TypeError" mayuç Ïraised; if ot 	 a /€e outsid‹Pe set;"inP1forê r ¯(after anyã Ç� ?s),; "I— {s 
ý@mappûæ tmO(notý?thek ücontainer), "Key¦  Œ C   (:   H "f-Áloops expectp b	LOwillP Dm 
 <g§<�to allow É„er detecœ ¥?endéoÆn 
’ˆ'sˆ,�5aassignš*to�_ Sameþ n/asqge.  Thi’1onl"Àmented for '.
  ÿ 'mappings if\n'# ñ   the objects support changes to ÿvalues for keys, or P aif new& s Ácan be addedM  Z €sequence¯ £ elements + n ïreplaced.  Theq ðsame exceptions should„ araisedÛ ïimproper *key*á ar  Vÿ"__getitem__()" method.6  �c.__delM Pself,f)5  �   CalledÜ2imphP deleP of "^  [key]".  S;Onote
¬iƒ@onlyˆ‹ �ñÒ'premovalà Ã
vr %ifŒS¦e  Á 1rom9Ôõ ,e ‡s �q ·	¡… f —�. missing__(?�-¬by "dict".¨ 5to ,“ÁÙ I Lð subclasses whenW¡ is not inB A oionary½'Citerµ!CThis¤ � cÄ° 0an ] @ator `requir†¦¿a containerÑ  Tt •�return aæv ¢_ that“ !/ §	�over alluU s„² d  For ,r #itæú’  x  ²  #  q B  q   Iter‘Æ |also next×;É ~they ar8À      '   reþ*quired to return themselves.  For more information on '
  ¿'iterator\n  ó   objects, see I0  Types.7  L ÿ.__reversed__(self)1  ð
   Called (if present) by$ "_ À()" built-in1å Ÿimplementn R  1ô ion.  It should‰Sa new# /orsO thap 	h ±es over allÙ <  s Î Àhe container Ü ¸ _order°Q   Ifz "´ñ)" method is not provided,- ‹ –j°`will fû @back¿Qusingb €sequencey _tocolmÏ("__len__()"t áand "__getitem. R).  Oû¬� support á • r 9@onlyÄ  = ‚ ¯ A)" i|Oy caÀx? anl à z ¸&€efficienØ aKO oneNn Od byo èròThe membership test op¥�s ("in" ® vin") ar¯ n /ll¬ ƒed as an» 2–through aeP. How¸,�¿ Ð Ol¯`followÛtspecial]0wit‚ n
¿s ä üò, which also doe½!reSÚ£ / bT˜?bleÙY 3.__&sû,um(5to å ;B.  S¬NK?rueK   ‘*"*@@in *½ *,¦Äse otherwise‡0appÖr s2/ist *Àd consider tñhe keys of the mapping rather than >'
  Ï'values or\n! !  > ÿ key-item pairs..  à   For objects• ñt donâ€™t define "__contains__()",x • ÿ membership testv ð
first tries iteration viap   l 'Oold u �sequencen  Q b „protocolk 0get?n �see thisj c§ i“ p àlanguage refer�  šó,
 'shifting': 'S 3 opsT .'* %  DThe l ` ð have lower priorityöÑ ¾ arithmeticQ ¤ :  "   ²_expr ::= a | Ó("<<" | ">>")" L  SThese× ðors accept intege òs arguments.  Theyw ¼'Œe B 1 to7 ð left or right b8@e nuò ä bits given «>'th u'second«  $
'– A€ Ý j A*n* | #is³ðd as floor divisZ,byÔ¿'"pow(2,n)"y  !A ï f ’multiplic^Owithh qlicings ê ù  2A sH A selËpa rangeš áts in a ,ò} (e.g.,³ ab Ðstring, tuple’list).  Sy Ás may be use� ù es} Çc ì btarget« PssignÁ l °"del" state ÔÝ syntax for aa ®Ç ‹ °±primary "["] e_ò N "]" î3lic#  ð €  e_|D (",D   �)* [","]H  '  H HP | prˆ_\ ? ! ‡ [íô_bound] ":" [upper [ ¯[ïOde] ¥ T 
¥ Àon\n'
        ò'   upper_bound  ::= expression\n'
)   0 cstride 0 B ðThere is ambiguity in the formal syntax ' ü: anything that Ž ®looks likeh 'anÉ ¶ list also 4 � a slice @, son d Ÿsubscriptócan be interpreted asY Àing.  RatherÀ Qn fur È ’complicatê Î  `, this=2dis@as ‚by defin? "atRpis case\² aÙ µ ë À takes prior¤!ovÅ ›  J 0lic� (°  à�  if� y› òcontains no proper/ .).,  ÐThe semanticsTŽ@ areê  follows.  - pprimaryV˜~indexede 0(usß  Ö ñsame "__getitem__()" methonÕ[)dnwith ag 0key9tœ €construcðKfromG,Ù IgÑ ðh wðat least one commax e Ž  ¸P tupl § g /th( `converW" ož Ž  6@s; oBwisem . e ?lonf  T  5 ¡3keyê
T þ € fe a  c 'atjk Èÿ U•Ê  object (se×c­ ¶ýstandard type hierarchy) whosec Ž"start",g ð "stop" and "ste ‘ttributes1 Ddvalues¸si Ogive4 ‘as lower h,u { Uý , respectively,]  Œ@titu(Ê  QNone"ó1mis¡ª  =@,
 '` õialattrs': 'Special Aö Z  ì-'* (   ³“implements dd*Cfew ” ° read-only Ÿ „“� ¯to severalo 6 @s, wLà they are releüvant.  Some of these are '
  ÿ 'not reported\n"  byC ÿ "dir()" built-in function.7  ÿ object.__dict__%  P   A 7 ò	ionary or other mapping \ ÿ used to store an÷ , Oâ€™sm ÿ(writable) attributesí ÿinstance.__classð AThe :  Ð swhich a \  belong™ T .__base– #Atupl^ C “  esn  a/adefiniSo__name0" 9  ‰ t<,ªð, method, descriptor,H÷Ÿgenerator!ƒå '@qual° é "*> `ified D *õ æ 
	ë  õ "ÿ   New in version 3.37²?mro- &isÃ   ÀY qes that%¯considered9Owhen'@lookŠIfor 0dur q resoluéK  « o.mro()!  s   Thisüð can be overridden by a aa  k�customiz3?thej â p order 5its?`s.  ItŒOcalll"atZn �0tiaL`, and e Qresul] dy1"__<"w"1sub .~BEachÉ Ð keeps a list°Ðweak referenc†oÁ ª�immediat|À'   subclassü!es.  This method returns a list of all those '
  ß'references\n  á   still alivem e[ ÿis in definition order.  Example:Q  ˜ ÿ	>>> int.__subclasses__()4 "4 ![<) Ï 'bool'>]\n"ç  B ÿ'-[ Footnotes ]-%  q[1] Addú ¢al informaó n these special›s may b‡�found inm  ê Äthe Python R´ñ Manual (Basic customiz‡ /).L  P[2] A6pconsequ,Ç ìÀ"[1, 2]" is " �idered eq~ 7Ÿto "[1.0,o  Ñ ÿ2.0]", and similarly for tuples¿ ñ3] They must have sinceÂ ñparser canâ€™t te`e type!À /heº operand£ ð4] Cased characters ar£  œÿwith general category² pr€ tK?ing¦ nÞ ðâ€œLuâ€� (Letter, uppercase),  l 5low2 !or5 Otâ€�| l Qtitlel ÐP5] To¢mat only a° you shouldÝÿrefore provide a2�singleto^	 t! w'o pelementñ z”0 toÀê0tedÓ C,
 'è©names': 'Sø  ,*  *  "A ýPcan iu´ €certain (as thatnŸinvoked b]Ë n àsyntax (such a¾ˆithmetick ñ or subscriptingáU¿slicing) byo [%ng@$¢ V.ü#isOâ€™s¿approach tom *-ðor overloading*,> owÇ i es™  ¹eir ownr �behavioro Ë  reÍ tS ƒlanguageI orØóFor instance, ifßÀ            ü   'class defines\n'
  ÿ,'a method named "__getitem__()", and "x" is an instance of N Qthis v ,o ¡then "x[i]S øroughly equivalent to "type(x).� /x,r Oi)".k ðExcept where mentioned, attemptsj pexecuteÛ Popera$ g @rais' k ek 0ionn ð n no appropriat| aiŠÏd (typicallyP ó	"AttributeError" or "Typ )ò M ôSetting a specialò jÿ	None" indicates that theßcorrespondingm Fòis not available.  For example, if a+_ setsq q"__iter‹p Ä ,¶ { ¬ {  ;  z P, so n " o()" ons /it)ûss will —à (without fallm back to» ko). [2]+  WLiNÞãÆAemulÔÐany built-in [J?t iü `mportaž ^  ó…only be Š  ed[Ebdegreei/itÚ ñ makes sense forÛ�object beYŒmodelledU”Osomeg ð	sequences may work well Ç  retrievalì !ovidual50eleƒ_s, buÓ dextrac‰Aliceu  ¨ î í t.  (One% z R× i­Ù �"NodeListÛ€terface ýð he W3Câ€™s Docuµ " OYMS/.)* áBasic customizS? = )  ÿ.__new__(cls[, ...]Ä P   CaK ´0cre±Ya newìW*cls*. "ˆ )Ùa´ ”   static„(”`-cased©�you need>¯declare itu uas suchñ À            û2 '   that takes the class of which an instance was requested '
   Ÿ'as its\n õ   first argument.  The remaining ÿs are those passm  to± m ñobject constructor expression (ì Ball G ø ?). Ø ¨ Oturno Pvalue8ð"__new__()" should bÎ ce new – T*¯(usually ao A ¯of *cls*).›  ð   Typical imple�ñ ations create a¯ g  2¯ 2/byj Pinvoká B Qsuper3 Xâ€™s .Ïmethod usingM "A 4().gñcls[, ...])" with appropriÇ msØ0andDgdmodify¼ bnewly-!dÿas necessary beforen  reBÝ 	/itÆ)IfC1is n`ed dur¸ q ý ÷ Ê2it ¤ Ãaor subÌ ù‡,P  @f P  çb__initG@willLâ @likeþ ) oself[,z,n pwhere *B 2* i	 ®ÿ 2 ¾­Ú ÚÁm  H �same as wx ä‰±/or,tdoes noÜ	Ó>·Õ  ¯ ?newÏ $ ÏŽ8)" · € $be�Ò &ãptended : lyÃUallow�eÂÎ ŸimmutableÐ qtypes (]ðint, str, or tuple)m €customizÐ l )�ion.  Itp ðis also commonly overridde{ l  Lajeâå�order toj K Àmize class cÜreation.\n'
  ' ÿobject.__init__(self[, ...])2  ð   Called after the instance has been c£ ed (by ¤ ÿ"__new__()"), butm ñ	before it is returned toy cŠ ÿr.  The arguments arev _thosej Gpass[ ð	lass constructor expressy¯  If a basi c=  /anp "Œ¡)" method,Ö �derived F Yâ€™s + P? /ifo �any, mustÉ €licitly A \ÿto ensure proper? :Qializ~0 of® p Ã S part/ ,1; fToample:F †"super()¹Q[args·"    BecauseO~@ and  Ü �ÿ work together in?ing¼ s7s (î ºN it,~ /top ustomiz¾öit), no non-"None" value may be;)byð ;p �doing soÜ Rwill NÐa "TypeError"à  n  aiL¯at runtime«9c.__del«¤$@when¦w FSabout© ‘destroyedE/is_is al F @ fin ’er or (imMaly) a j J.?É6{W Ä=* s <p ?if <@dele L6+GA   I7ñpossible (though not recommended!)� Ë!"‰k,µto postponeñ<ioný2 by# f_a new,ð	reference\n'
             ñ-'   to it.  This is called object *resurrection*.  It is\n'
A   M  implementa0 ÷-dependent whether "__del__()"m /a P osecondl @timeX En a ¦ º €is aboutá ßbe destroyed;l ?thei cÚnt *CPython* ç Q only8¯s it once.M   Vù not guaranteed that1±methods areo /edÌ ?fori ×s\ ¡still exis¡ðn the interpreter /tsÌ _Note:�  Eð"del x" doesnâ€™t diwZG "x.;1â€”­ 7_formea  decr¥ ðe reference count for "x" by one, an‹ek0lat( "ed¯}"x"â€™sy Ïreaches zerou*�œ’detail:**º‘ possibleç x¯PcycleY@prevß 97 HTof anHOfromB�going tol 0  IžŸ1se,ü… wÃPbe la‰�detectedµodeleteU!by\ *] �ic garbagpllectorÿA common cause ofÙ Ú  d et@when-Pexcep:� has beed Pght iæ_localm variablx ßqe frame{J ÿn‡ Æƒ , whicho Ü 
ôts own tracebackP < jŠ  -lÜ ¶ sm?ghtMi eo AåSee also: DocuÃ' Ÿ"gc" modue› Warning!Due  ÿprecarious circumstances under«qÀ\n'
          '	 ñ+methods are invoked, exceptions that occur during their '
?  `'execu7 /\n , h @gnorh  and a warnY ÿis printed to "sys.stderr"n �instead.m ïIn particular:)  ¬ õ* "__del__()" can b%ÿ when arbitrary code isª _beingh "  : `includ‡from anye 0thrò O  Ifi ¯ o 
Pneedseãtake a lock oru pother b  � ÐÏresource, ito 
€may deadM   aT$e =    alØ y_ ’ On byà 1thein 
²Pgets LCrrupReÕ=` Z d#y _prete)ÿ shutdown.  As ao °  consequeni õglobal variables it Ñ_acces†([p 
ù‰modules)Ÿàhave been deleVoor set¬�o "None"dbð  Python guarantee2at å °s whose namy Ÿgins withq �a singleÞ 
¡underscoreòÈ lÙú @ bef% þ¢ n 
 íc ‚; if no Q PreferÓ†Esuchò l ¿exist, thisp 
 L´help in ass°€at impor²mÙþ _stillL@vail^o 
 atR time Ÿ„ ] _calle¬e ÿobject.__repr__(self)+  A   Cw  O›  J  ËÐbuilt-in func± qcomputeÓ …ïâ€œofficialâ€�s !st& k aesenta` cof an Ó Àÿat all possible,ˆò
áshould look liÉTvalidTðexpression that could lbe '
  ¯'used to\n ð!   recreate an object with the same value (given% H ¿appropriatei ð#environment).  If this is not possible, a string o" Õ Oformi ÿ)"<...some useful description...>" should be returned. Thk " m @mustO ¼ J.æ ÿ a class defines¥ÿ"__repr__()" buto  +R"__st, ,§)n ? pis alsoý Od whµPâ€œinJ_alâ€�s Ž   `esentaH ��instances Cthaté iä Ÿrequired.j  C   T&’typicallyÚ ðfor debugging, so itMŸimportanti§ /th¦ç  ¡$ ö ÿ-rich and unambiguousÐ b.Â_self)ú  ò   Called by "str(R !)"—  µÐbuilt-in func¶ �"útq?andn Q"prin&  to computeu >± or nicely 1 ?ablONo  ofrã .e²–x–l W Œ  �ómethod differs from "P Ë1in rž Pthere²n�SexpecrI ü
aŸid Pythonößexpression: aÚ ð more convenientÓ`concisu A ý0canî [þ?e
 ault impleS!Ú	È?typLr"Ò  /s™¶ Ø�bytes__(¶+F  N a  -® :õ À            ô    '   object. This should return a "bytes"% @\n'
8 	 ' X ó__format__(self,  _spec):  ò   Called by the "J ñ
()" built-in function, an) ° `extens& j `evaluaJ B of i ñted string literalsf  Œ g R"str.; ?()"k ò	method, to produce a â€œ: dtedâ€�x •represent› y /anm •b The *b _Šô * argument is ap _that c ¯contains ak tdescripD &q tBo �s desiredej ‚interpreó n !ofÔ  upb † ?typk @mple?ingi "Ñÿ)", however most classes will eitherÕ �delegatef *`to one‡ ½ ê Æ €s, or us2¦similarf �� syntax.2  �   See Fæ’ Specific¡ÐMini-LanguageG  aòµ Êl €standardN 1matM¶ # é î€e must bMç.Œ   ¦Ðhanged in verhQ 3.4:t= ø Ø"h "+ it7m 0raiqða "TypeError" if p‰ó d any non-emptyÖÞCÐ 37: · .Ô  (x, \'\')"FÝ?nowË pequival„0to >q(x)" raGEthanóstr(x),1� å €F.__l§ov ¡0 e×0 /eq0 n` gÀ À      'objecüt.__ge__(self, other)\n'
  ' ð*   These are the so-called â€œrich comparisonâ€� methods.7 S ócorrespondence between operator symbols andQ  names ¹ _is ask ð follows: "x<y" ¼ ðs "x.__lt__(y)", = c 0  H 0 l 6"x=H 4 &eqd ! nP Ö 4"x>“ p  ßÇ  .;"x>g ÿOy)".G  [   A ÞŠ¢may return�ingletonÇ ÿ NotImplemented"o ôif it does not i4 d ÿion for a given pairu /ofg @argu‹ ñ
s. By convention, "False"t@"Tru #reê /edi Ž l §successful$ . However,Ú #seVSs canm k ¯any value,p @o ifV o Tÿis used in a Boolea³ßcontext (e.g.n iÿPcondiBñ of an "if" statòá), Python will~Þ "bool()on Ô to determineó ÿresult is true ofä
öBy default, "object"¡Qs "__èÿ)" by using "is",ë r;?ingÈ"4 ³ {Acasef Ç æ!: ²p @if xyp [else t P. ForÚ ¦ %b ©&Ïdelegates tom - °qinverts¶Ã`unlesse iñ Ð»r»"noý¸€ied rela·±ships among… Ù â× ¢0orsz.l j ;¾0exaÜÿ±otruth ÄP"(x<yh  o*)"5ày "x<=y". To aüutomatically '
  ¿'generate\n à   ordering op) öions from a single root O, seN ô"functools.total__ O()".„  ÿ(   See the paragraph on "__hash__()" for some important�notes onj Pcreat*\ ðable* objects which supb  customf �comparish c and are uso ÿ as dictionary keys.QThereS ñ	no swapped-argument versÛ ofT¯se methodsË P(to bœ /ed4@whenK e left i …does not2 Âø ? bu£ & _rightp 	b  ); rather,"lt TD"__g /reÞ `each o> Oâ€™sq Qrefle“e ee  :re Q t M q ¿ )eqi ni ¦their own P .p Içk ‘1nds0�of differ)ptypes, Œ �ù nd+  o Ois am Ãdirect or in ’subclass �D• j ,k /th~#edÞ_ 	Ê ß has priorityd 1wis€Ø ùµ S	` ´.  Virtual ô  hŒi8n ¯consideredÇ.6_self)e  ñ   Called by built-in çi� 2 Œ 2 � É[Ÿon membery ofCshed colƒ€s includ=â"set", "frozen  ~ U"Vz   > Á rÿshould return an integer. The only required› prý /tyI{is that\9@e eq'1havwQ same	l À    'value; ¬it is\n'
  ñ'   advised to mix together the hash values of ¿components Q & m ðobject that also play a part in ^ `arisonp . Os byl packingm ñthem into a tuple andÔ 1ingÍ  ¯. Example:J  K`def __'�__(self)E /   areturn‡ (3 p.name, > S.nick color))~  o   NotÈ  "Â Ñ()" truncatesú ± ²ed from an —?â€™ocustom¢ 5  "2�)" metho~ q@sizeúpa "Py_s __t".  OThisÚ	ð  typically 8 by× ñon 64-bit builds4 Ô'321 .Ù +Ifì  usæßteroperate onÚ œ /ofm  different Î  * s, be sureÍQcheckÇPwidthk ?allo Ÿsupportedo “ à.  An easy wayg Bdo tˆÿ with "python -ck 0"imk _ sys;n  print(sys.ša_info.Ç ?)""‚N  –ð class does not defin �@eq__ý‹Ÿit shouldÁ ?notj V  U ¸ W ì`ion eiZd; if i„ D3"__– m 1butË Nñ, its instances will% pbe usabq @item: o  Ð A ècollections.  ]TQs mut) 'o /anliŒmb anK
+ ä ¡ Ë/ » 
"Qsince: aÎ  wå ù k arequir? âA key( Y I ´m$"(iVp @? t ¦qchangesð will be in the ü	wrong hash bucket).\n'
  ' ð   User-defined classes have "__eq__()" and  h  c ¯methods bym ÿ)default; with them, all objects compare unequal (except o  C i  [ rselves)½ Fx.__¿ ÿreturns an appropriateg ¯value suchm ñat "x == y" implies boã   is G † 0(x). ×  ?y)"ÈA½ð  that overrides¶Å’does not òò "*ô Bwill'!itf  ¸ ÿcitly set to "None". o @Whenk �  eS of añ #is` °, instances  ]2the6 m Ø \raiseÐ"TypeError" w´ Ÿa program× ¿attempts tom €retrieveÿ "irÇp,µŒ àalso be correcUÙ ßidentified asp  un¦BableÂ Ächecking "is<_(obj,B ðcollections.abc.HashP °IÂ³@needBo retai' w`ementaŸ  	9pfrom a _"nt,x½¿interpreter@must™ò told this expliùbüt\O/ =L €<ParentC>ªTîQwishe]QsuppresL J & ñort, it should includ> # Q__ = ÿ Àpx¬iÖ$. çSwhichÆ s „0ownß u  µ×  kh ÀIs a öá  beä Ž0 ª  <0 byl„)ð ollections.abc.üHashable)" call.\n'
  ' �   Note:  [ ÿ&By default, the "__hash__()" values of str and bytes ˜ ¿objects areo ðâ€œsaltedâ€� with an unpredictþ r random| ¿.  Althoughu Otheyn ñ remain constantq  ins ÿindividual Python process,h  Ú O notp Ç ñbetween repeated invocationRw O.ThiP/isi °intended to¹ @vide 0tec` ¯ against aÍ ÿ	denial-of-service causedp ñby carefully-chosen inputs that exploitBŸworst cas	°performance_ a ÿ` inserÂ ÿ, O(n^2) complexity. Í /Seg 	ñhttp://www.ocert.org/advisories/ ï-2011-003.htmlf ?forðdetails.Changing BÁQs aff ]Aitere PorderOsetsþ´; f ð never made guarantees abou�1is U  ” ´o(and iÒ	@typi�@y va2 ×a32-bit!64 ¿builds).Seeß OalsoEÿ"PYTHONHASHSEED"B }gà version 3.3: VT"iz}Pis enl Ð¬ „ ÿ .__bool__(self)¯  r   CallÖiø¢ment truthNP testÍ ¸ Q tOt-inÅ #opno "« ÿ()"; should return "False" or "True".  When t®Ÿmethod is"
€defined,f2lene!isï  Pif itE ) é ¾q ) ù@iderSArue ` qs resulh ÿnonzero.  If a clasŽ‘ “yneitherÙ n?°)", all itsètûàs '
            ‚'are\n'
  ÿ'   considered true.)  ÿCustomizing attribute accessH = 2   The follow| ðmethods can be definæ 3o c¢ oe the @meanD /ofj Ø ÿ (use of, assignment to, or deletion ofl ß"x.name") foro ÿ class instances¥Àobject.__get· �__(self, u )p  á   Called when<}defaultèï fails with anO $"A õError" (either "¯ >Ï__()" raisesP @becaš*í µ* is not anL’ 'x  ¿¿ ( i¨0treˆ0r "i ";F Ñ È "a ¦ .„property	>’).  This ú shouldâ gj RreturÓ §(computed)åPvalue× “ PE  o Pexcep#Ù`   NotÄQat if�’ñ s found through onormal¯mechanism,§ Ä c ÈNcA.  (}i¢` intenÓ o Ÿasymmetryn wbetweenv 0and sÎB)".)ø/isÛ Ÿdone bothað   efficiency reasonÈ $d Bo˜@wise} K/)"s wz?havy“no way to b es0  ÷.ðk0tha…MPleastÿ ùávariables, you& fake total?tro+ byFl `insert>Aany + ¼�Ì ç A dic(/ryJO(butk 	@teadÕ s Ðthem in anothü
er object).  See the\n'
  ÿ-'   "__getattribute__()" method below for a way to actually O Ÿget totaln Õcontrol over u � access.7  â .¾ ¿self, name)9  ñ   Called unconditioné Íto implement³ /es	?forg Àinstances ofš— class. I ¿ also definb ·²,o ô	the latter will not be cí Olessâ_eitheÜ  V ôs it explicitly or raises an "Ai¿Error". ThiD„Ø Ñshould returnH§(computed)§Uvalue„ ? anQ › ` excep¡. In orderßvoid infiniteÿ¿recursion ip tù å V, itsfau  á aalways°æ –BbaseGÞ i Q withG Asame&Ó F any:Çm `needs,m 0exa2?, "¦"÷�   Note:|  ÷h`may stÿbe bypassed when looking upÚsspecial!sp !ash`resultë E b invocä¿via languagJsyntax Oð   built-in func;!s.öS¬ Ú /upmöFor certain sensitive&º7es,å6 auS�ng event812__"µ@arguƒsUp" and "ç@‘sõ6__(2!, /9$@(anPssign¶ 0 is �empted. öië/ed# @0eadS Üðnormal mechanism (iü.e. store the value in '
  o'the\n ñ   instance dictionary). *name* is]  attribute  ,d *‚ 3 o & ð  to be assigned ?it.4  À   If "__setž °__()" wantsN Z 
 nâ  = Û O, itl ±should callñbase class method with 4sam'?for+�example,o ˆ"object.ß Sself,€E/)"2õFor certain sensitive �ÿ ments, raises aR�auditingÃ oevent É  "+Aarguj $ @", "["\"ñ ð C0delã 6__(C)¸  }   Liken@but ã ^ CP deleDs?eadþ/ofg · ƒ.  This y@only2i8   ¯ed if "deld 1bj.P? isn ¡meaningfulÇ  F53  ?   XV >p VÜVC andY,S__dir82ðCalled when "dirŸ!isBQed on,h € A seque†¤omust bÃ•returned.j `converChe r e Oto a8@list5{ soV ­N ùCustomizing modul‹Occes»- r  qSpecial[sågS"  P" can…�also useß/tog cï 1e aÜ  �m÷ Qs. Thi„ À       'funcÌtion at\n'
  ð''the module level should accept one argument which is 5 M ¯name of anm ñattribute and returnM ðcomputed value or rais'  h $"AI Error".o IŠ  u Ðis not found ú áobject through’ w onormall âlookup, i.e. "Q e.__get€ `__()",^ 5n " ?__"ä /isi ¢searched i;m½p"__dictN abeforeBoing an` D0@, itû¢called wit(Þ  ý ØPresulE Ù /edÍ5 0TheL0dirú Afuncî
Å%noÄ!s,{Þ€ / ai qsequencß`stringÀat represent es>`ssiblehn ·O. Ifp U  /5is Ù ‚overridem òstandard "dir()" ð ðk ‹   pFor a mgñfine grained customiza† ofíe�behaviorž �(settingo eñs, properties, etc.),¥`can seÄPclass|O n  Áµ É‘ to a subW  â�"types.M}pType". o �example:n  Ï   import sy	�   from Š . ‘ X  2   Ú rVerboseF (  Þ )½ O`def __
__(self0 "0   o#f't   {9 0.__H__}'\n"° Á  T ˆ st‹ ,,Z˜ ’print(f'S‘  {.o}...')’  y  ¦super().__„  ? ~ ½     û.�$s[A].__¬S__ = <©H À         '\n<'
  �'Note:\n  ÷  Defining module "__getattr__" and sett! ] €"__class3 Oonlym ðaffect lookups made us] @the u ÿ	ibute access syntax â€“ v odirectn F ^ mà ðglobals (whether by code within ‰ m ? O, orÝ ñvia a reference toM 9 Tâ€™s | ïdictionary) isÜ "un,?ed.p  ðChanged in version 3.5:Ö¡‘ nois now‡ �writable… :New� 7� WQ"__die‘ vs‚ �See alsoò **PEP 562** - M1· €’‘Describes Qú 1fun
Os on€ý š �ImplemenË¢ _ptors. - .   The followƒ`methodé ðly apply when an insta2!of2	¾h RcontaÄ ½i ñ (a so-called *d“ ñ !* K )opappears¾/ann c*ownerF   (r ] € must beA !ei_ ! 3 Û )0 orU  N À   ßfor one of itOÁparents).  IäÝ 0exa'Às below, â€œr †2â€�ásÞ PÏwhose name ij ` 0key½   „propertyí ;³0â€™È ù ?__"qobject.Ë…__(self,w!, e o=None) B   C`ato get½Î] Â " (¼8 l ð access) or of aõn instance of that class ( <'
  Ï'attribute\n ð   access). The optional *owner* argument is t!    K Ž o, whilm *­ *Q  Ó  c ³ O wask ³ ¿ed through,Ý áor "None" whenÂ _ #isý J " Þ .j  ò   This method should retur‹ –computed ” �value orø �raise ano $"Aï±Error" exceÓ¹ ð**PEP 252** specifieàat "__get__()"Åßcallable with· !onÒ ?two¹ gÿ s.  Pythonâ€™s own built-in descriptors supporto Othisi Ì  caèÐ; however, itÌ blikely‹Osome` ßrd-party toolm Ihave· ·Årequire both`ù ƒ/owù”G�@mple½í ò always passes in� j ŽGpwhether/cy are Õ d»?noto¡object.__sWUself,î!, )‹  p   Call×Po set§ dGon aO”/ofòe‹/ero ý’ to a new³ 1, *» *ð    Note, addingn )"\’"__deleteãQchang™¬kind of¸ T½ wâ€œdataµð â€�.  See Invok“ 3D�/fo)0mor_tails%ÿ 
(!'Q $þ ’öL¯ô Àobject.__setð_name__(self, owner,  l)\n'
  ' ñ   Called at the time	 áowning class *` ï* is created. e ?Theh ðdescriptor has been assigned to *½ /*.@  �   Note:  d"__setC )"Ù bonly cÿimplicitly as part ofò  4o"type"o òconstructor, so it will neû $bey %exy `@withžl °appropriate¹  ameters who …bis add� aÜ ük 	Âfter initial?ionŽ#  gA< ´ Opass“ "  ã ¦ = custom_ò (Y ¢  A.attr =B e ", V .F@A, 'A _')\n"�p  See CX r Rzÿ	 object for more details#ÿew in version 3.6B @The Ø Áibute "__obj  !__8àinterpreted byž¯ "inspect"W�module aÈ : :ify@wher˜$is€was defi>P(sett1 4?thij +û� st.1runPintro“ t<¯of dynamicÚ 9Bqs). Forñ`ables,�may indic·ÿthat an instancel  ofkm `given –¡ (or a subœ )é exœÀed or requirÿsO j _firsti @posiÐal argument (°ðexample, CPython setb /isc `?fork àunbound methodL  %0re ¬ez  ed¹/C)Þm PInvokQDµD-  T  ÒIn general, az$ Ÿní Àte with '
    ú 'â€œbinding\n'
 ÿ4   'behaviorâ€�, one whose attribute access has been overridden by S methodsp ðin the descriptor protocol:  "__get__()", s ?andP ‘"__delete6 Ñ. If any of tÉ � 0 aru ßfined for an ¼ ¯object, ito ÷ is said to be aÈ .1  Tdfault ‚— x isl `get, s /or¸ m  pÐ@fromþ ê ÿâ€™s dictionary. For instance,k Q"a.x"ap ðlookup chain starting with "a.__o °__[\'x\']",nJ �"type(a)5  °and continu^ pthroughL _ baseº ¯classes ofo p" exclu5S meta8 â However, iŠ e æed-up value is…` definÇ  �/of½ ?the¶ KíS´ Python mayµe "dey �qTinvokI Åz : ead.  Wher& ¿is occurs irØ £precedenceK÷depends on which} § t  wv Ù c?ed Ø 0howyC ocalledò ÔîQpointÒŸ ; cakÿ ™g_. How÷Ö�rgumentsß Ýgmbled *O"a":A  ¿Direct Call! 1   ê pimplestQà least common ; à ßwhen user cod‘dm /lyj  29kesiì:Ì4"x.3?a)"¯Iå/ B	   R© Š2an :ì& ª¯ransformedÄ@intoeð  </: ÷ì #, õ À'
            R'\n'
  ï'Class Binding# r   If b# p to a c6 ÿ, "A.x" is transformed into the o _call:g ÿ"A.__dict__[\'x\'].__get__(None, A)".>  _SuperÞ !"aÈ ðan instance of "s@  ",Ï n Ü . ?(B,Œ ñ   obj).m()" searches "obj.__Qò __.__mro__" forq /asJ ƒO "A"n ðimmediately preceã€ "B" and]  í Pvokes ¿ descriptorº@with( o Û ÃmÃ@obj,ï Î6ForŸ�s�à e¸Ë ÿinvocation dependsÕ ˆon whichømethods are defined.  A# ?canB/ O anyo bcombin˜  }û�)", "__s)¾ÿ"__delete__()". q _If itl ƒdoes notÄ  ` h m àthen accessingõŸ attributŒ¿will returno  •ñobject itself unles„ reM’a value iskA ?â€™ºÅ Mqionary.Æ‰ “sÿ _p oand/orÜ 
‹B, itÅ Gdata0; i�qs±sneitherD o ka non-] Û.  Normally,  ss r Obothh "0‚,/le‰ _s hav%@justLo dJ.  DC!s …š ±® p (Ó úI),ÿd always override a?!reBiLOin a �¿n contrast,MK/beÖ ¯ Ðden by instanœces.\n'
  ' òPython methods (including "static �()" and Y e"class( _) arem ðimplemented as non-data descriptors.  Accorƒ ßly, instances{ ?canj �redefineµ „overrideæ ÿ
.  This allows individuald ‚ /tom ÷acquire behaviors that differ from otherÍ oof thep Qsame SÉÐThe "property¯Ëfunction is y!a wÍ‹~ žucannot k Þ _ of aì ° l o Ÿ__slots__ -   *U *-ò
 us to explicitly declareQomember«O(likAies)°AdenyAcreaÃÑof *__dict__*$ ¼ß*__weakref__*Ò (unlessÂ  @d ine Fà* or available Âarent.)o   «±space saved50 usuæ ÿcan be significant.D�Attribut]Þlookup speed T  ly roˆ as well�uobject.)ò   ˆíQ varil¥  asû  *Ð string, iter# ,	¯or sequenc   ŠM fs withu Önames used by©/. k Û ’reserves ë1forÔ1d{ sÐprevent</thÒ Pautom© .	 ‹ @OeachÏ N †Notes onôu0 ~ 0 À            œ   '\n'
  ÿ*'* When inheriting from a class without *__slots__*, the L ß__dict__* andp  K qweakref) ±ttribute ofY €instance| ¿ll always br ¿accessible.o  3* WØ a� µ ¦variable, … ocannot€ ¿ssigned newk $  V  s I ‘listed iní Wß definition. _¿Attempts tol a� “ to an unm ‚ Ï name raisesb $"AŽ¯Error". Ifk ‚dynamic s @mentÂ7newñ ¡is desired5On ad4"\'?0\'"Ã  gqsequenctstrings<‚§¸ aeclarah$  4Ã_…for each?,fZe ñ/ngp )Í 1 do>€support ~ ` refer ? itÔË Í9 p P  g xis need¿ ¨ € Á«Œ?thej Ö
«%F �are imple¤Qed at{†Ÿ level by©0reaÇ ädescriptors (Ic  DD %) )/ œ.  As ap sresult,›a¬&s ¥@used<0setQOaultÛ `values› m 8Ï¢ ed/a±; otherwiseæp nk Ê ñ would overwrite©flï`The acô ¥õ[ ñpot limi¦/toÍ  ™Ñ 
0wheutP 5.Ðu 	€parents ©Pavail˜@‚in childðes. However, child sü	ubclasses will get a '
  ß'*__dict__*\n  ð  and *__weakref__* unless they also define& Pslots$ L ß(which shouldo ñonly contain names of any *additional* i /).F  q* If a ³ 1s aJ Ç ²d in a base, ,9Ïthe instancep £  variablen @d by6\ ~ Àis inaccessi/ =Ÿexcept byn ûretrieving its descriptor directly from‚ /).ß OThisi AnderP meanr !ofX ¢program unad.  In Õ Ÿfuture, ak ÿcheck may be added to prevent this‰Nonempty­òdoes not work forùeE_rived# M¸ 4â€œýÿ!-lengthâ€� built-in types such as "int", "bytes"l  …"tuple"ñ °Any non-str¨Aiter“TRssignW1*__W?__*€Mappings‘ú ðbe used; however,T 2ñuspecial? Ž !b\a¹  Z ðvalues correspondî ¿to each key71*__) Ìk mr !!s ¤uif both+Ohaveé?samÊ wV �* Multipl‰AheriŒt with m  Ñpted parÀ Ô /esdOcan p ÐR, butþ 4oneT ‚is allowE�attributj 0rea• Ì · 0s (ÙQother3qs must b Å ' ¿ layouts) -× Pviola7Ðÿ aise "TypeErrorc W!n Z n!isýHÜ  Y˜òBis cö X Öty Àâ€™s values.ü However, the '
  ï'*__slots__*\n! ÿ  attribute will be an empty iterator.<  ÿCustomizing class creationF = 0  @When!# au òinherits from another ,A�init_sub· o__* isn âcalled on thatV ÿ. This way, it is possible to writ¹m �es whicho QhangeûÄbehavior of ª #es| ÿis closely relatedê "to² m AdecoÂs, but where1   Á only affect™ s‚specific> o û
theyâ€™re applied to, "__�P" solÚ ' sUt ofuturel 1 ? J}` defin°  omethod	F 8 � object.À _(cls)—  "  QX  Üvwë ® Rconta½ †  xû Ú p   *clsô Ð ÚUe newfB. If*ïed as a normalcinstancˆ2   Ö  Ï#is  » ðimplicitly converÄ%toÖÛ K ±ó   Keyword argument�  are givenaaY   Apass¶ 7Ë�parentâ€™£ â ÿ. For compatibility]Qwith Ðo ³ Pes us×l  ÿ, one should take outn  foneededn kL@and  « `s overU Q ?bas?, ayo   in:‰  )Ï PhilosopherD .   Odef Å@, /,Ÿault_nameO�*kwargs)j  n ysuper()7Àass__(**kwarŒgs)\n'
  ' øcls.default_name =  C  Y ÷class AustralianPhilosopher( /, œ { ¯="Bruce"):o 	 u Opass$  d   Theè ñ implementation "object.__init_subÓ ?__"³ Ïoes nothing,p ð"but raises an error if it is called with any argu� /s.P     Note.4 Ametaç u hint " "¡ ÿonsumed by the rest of  l ðtype machinery, anda `never È_ed to\ "‘i 
Õ!s.òuactual Ý Ð (rather thanº y �explicitn  5ð) can be accessed as "ñ o(cls)"Í ew in vers—?3.6B ® Mèe2- B  $ByO!, H éóre constructed using")"’@  body i¦ PexecuT �in a new ¼QspaceS ¥G    b_boundß lo€yw?theß “result of¿  V †, bases,{ ä „¥ 2cre|0pro<J‚customizz  B¦ ¶ukeywordL K0defÝ XOline�_or bypinheritŽ AfromÔ1xis Ó ðthat included sucÛ€îO. Inn  ¸ `followq 0exa±°, both "MyCr"øC"MyS°_" areq instanc å '"Jù  ; (ö¸ Îï  "  Y ñ (Æ=s n À
             ' £  pass\n'
  ' á   class MySub @(MyC /):3  W j ó&Any other keyword arguments that are specified in the� Ð ¯definition§  O  ¤ ñed through to all metaê ` operaC Ïs described m obelow.i  cWhen aÀ ¬ Ñ is executed,â ÿ following steps _occur� Ñ* MRO entries[Ÿresolved;1  *£ ·appropriate=i5oterminV "ƒ�namespaceopreparN (@bodyI cí  — `objectK createdýMR‚ êœ+ - +  “If a base\`ppearsVà 
’onot an{¿instance ofj a"type"ÌnE s"__mro_{0__"30hodLÿ searched on it.q ŸIf found,o i•¡alled with¢�originaló Ôs tuple. This~ Omustp �return ao J 2 ofÉe«¡will be usªPstead% tq  v | eo Q ?mayp �be empty,«bsuch cÅ)e ä  N_ignorš�See alsoMð  **PEP 560** - Co«àupport for typ×ÿmodule and generic?ype¥+"De} z  +¦; ^ ;  OThe € hdÔ Oed a#ðfollows:\n'
      X'\n'
  ð'* if no bases and ÿexplicit metaclass are given, then L ¿"type()" ism   used;    ?an “  "is’ ¶ ßit is *not* aŸ ¿instance ofl $  Â å U  ´ À directly asÎ "‹ t  À bc ó lšO, orÏ Õ£re definedØ öthe most derivedÎ  … o  .g  Tc 
Ñselected fromPí /ly[Ÿspecifiedn ‘ (if any)è Ãƒes (i.e.qŸcls)") ofp ?allj ‰ 2 Oes. ð ?oneg Pwhichtan  ubT ¦ P*all*	 ö these candidate¼ ‡ IÍnãp ?thei O P meetï´at criterio  [ý h o_itiono ÿwill fail with "TypeError"e] ‘PreparingY¥ �namespacÿ - 	f  O` ‰appropri¢ñ  has been identÑ“y¿ l Ô  Apõ aed. Ifø  u Sa "__$ ?__"µ¯attribute,p `called¤"� =†.h (" ,m ›i ñ **kwds)" (whereÏ 1addPðal keyword arguments,Ä?anyj AcomehÖ  ­e$e )Ð
3ÿ method should bÑPimple• ªaas a "q Q 2()"n  ,£¿ returned b
˜ 
mÀ         'paü-ssed in to "__new__", but when the final class object is '
  €'created6 /\n! �namespaceB Acopi} ÿto a new "dict".<   Ifn R meta¢ Qhas nÍ ðprepare__" attribute,. ×   C i 	» €initiali=ÿas an empty ordered mappingÊ ŸSee also:€  ô  **PEP 3115** - M	 es×¿Python 3000A ²   Introduc» 	<ù OhookF  �Executing‹WObodyD - .  7Theh  {e„ ðed (approximately) as " (’ ,å¯globals(),n 0@)". { ðkey difference fromð0ormW0all}ŽŠ  )"² Othatp �lexical sP›ng allows]€ (includw?anyÙ ¿methods) toj $reÄ ä Ê  "ñcurrent and outer� &esDß m1defc€on occurÌÿ side a function\ÖHowever, even– ‚  m  Û ¹ ƒ HX á»  N q òstill cannot see Ok œ Ped atÑ—U qcope. C§ñvariables must be acceìpthroughO Ofirsj`parameß€of instaÐ#or]ø _, or f implicii Ó"lyHd’æ  Ì†qdescribcÐ OnextÕ /se4mCã FÏ/ ¾/--/  Ogp .E ì¡been popul{0by ÀaV À'class\n'
    ú!'body, the class object is created by calling '
> ‘   '"meta< ÿ (name, bases,\n-  " ðspace, **kwds)" (} ÿadditional keywords passed here are~  < Osameo „as thoseK ÿto "__prepare__").8   Th& � ò
one that will be referenc> # _zero-k ðargument form of "super()".Â o0__"§¿an implicit"oclosur!© î ° ócompiler if any methods in a*Ó  Nþ Ø ™to eitherÆ #orà 1". ePallow¼ e %Ø 	#n 8÷ to correctly identifyù beâdefinedr  ÙOd onm ðlexical scoping, whilZ�r instanc  .@as uâJ`to mak* »@curr" œ Ó itaV !onÞ efirst .l i to1 Þ  /‚**CPytho eÏaãä detail:** In $ ï3.6 and later,€/th5"__@cell	Ô  ¿¤_ as a^ E  A  [_entryiZt  ÓÀ. If presentRpis mustapropagN€ upžß  type.__new™ ñpn order! ¶” too d ¿initialisedÕ Q. Faiï‚to do soØbresultï"RuntimeError"P2in ÿo ?3.8NpWhen us¤  @defaŽ }  "&T", or±ò ®˜ ’ultimatelösX ~ Ù@e fo¡ Œ ¸O ‚customisúQstepsÌÒinvoked after} O  Û W¶ œ:j  ð* first, "type.__ünew__" collects all of the descriptors in '
  '' class\n ð  namespace that define a "__set_ ß__()" method;H  —* second,µ *se[ Y Ïs are calledÊ @withö k !  æ c beingÆ Pd and3 ‘ assignedî >/atf ¯particularh u�finally,’ ±"__init_sub¹ dthook is!on, ¹Ÿimmediate§ bparentì Se new!cin itsÎÿ resolution order.O  QAfter¢ Ã q objectÀ ‘reated, i ‘passed to- Ï A f cdecoraä`cludedíÙíiÄ …(if any)ùl Ÿresultingp Æ Ebounl Qlocal@s.!asÍ 0²Õ RhWhen a®2s cLÂ by "type.__I¯ é Pprovi/aþ D áÒ `parameÓ ‚2opi³� ped mappbp nW0rig&Ódiscarded. Th¤0opyARwrappéa¨Ÿread-onlyn òproxy, which become°p"__dictR”attribute%°n eËŸSee also:¡  ÿ
  **PEP 3135** - New supeŽA   Dbá €implicitfÑ  ë ÿclosure referenc6•  €Uses forJai ef-  T   ¿potential ux  ;®ÿless. Some ideasÎé?hav±been explor‚tð enum, logging, interf7Qcheck �utomaticÜ `delega¼4, a+ à property creaütion, proxies, '
  ÿ'frameworks, and\n% ðautomatic resource locking/synchronizan .A  ðCustomizing instance› ÿ subclass checksT = >   The follow” ÿmethods are used to override the defaulto°behavior of, p 4"isù 1()"ü 4"isÿ   Ðbuilt-in funcxsyàIn particular,‰ R meta^ð	"abc.ABCMeta" implements' /seÖ /inÑ Porder(aE I P addi¹  	ð Abstract Base CäŸes (ABCs)p aýÀâ€œvirtual bK Ñ Qesâ€�} 1ny  ð or type (includÖ÷fÕ  B Fs), D `other · Ž” 4.__ôßp__(self_ )†  ô   Return true if *^ ÿ* should be considered a (direc·/orh "in8 )­Aof *Õ P*. If¢ined, call0njk Ï ,Ó/)"s"T
s s-H sGb  Fst=e (	 t#0Not  at  serHÀlooked up on Ÿ&(©)õ a-~à.  They cannotð0defŠ2 as6„ iv q !acPR n rThis isO¡stent withÉ  Ú  × •f specialt ?tham Y+o %onk�s, only À  ‚ àase the instanüce is itself a '
  Ÿ'class.\n  ŸSee also:  ð  **PEP 3119** - Introducing Abstract Base C’ /esH ð   Includes the specification for customiz[ × ÿ"isinstance()" andl a"issub& - ôbehavior through "__M pcheck__' w h $__h H Æ, with motivà OthisÌ@func�ality in×  :àcontext of add.‰Q (seekÖ _"abc"i ¡module) toC �languager_ `Emulat· ¿generic typ8= Z  ñOne can implementÑ | "¤ syntax as—_ed by­_484**p (Ì0exao Ð "List[int]")R Pdefinü aj Ÿal method–µ 8 ¡ object.__ ÿ_getitem__(cls, key)§  Ã   Return an[ ‘ represen´ �»BalizÜ ˆ+	dp !byP arguŸÿs found in *key*sTdñ is looked up on÷%Ù a,JÀ Qwhen ²ekiV abody, æ‚  v’icitly a ~ �1 �.  Note,,Z pchanism" primarily ¡ArvedI2use�ostaticÜ  to hintsn ¡other usag�¿discouraged‘v*1560uÁCore supportâ 0typE¥Àl] ì ˜j ¹ƒcallableI\ »  ` À '\n'
        ö'object.__call__(self[, args...])\n'
/ 
 ' ð   Called when the instance is â€œe ÿ	edâ€� as a function; if h ¿this methods ñis defined, "x(arg1À ÿ2, ...)" roughly translates toO †"type(x)xO 1O .:  ðEmulating container v sE = /   The followx S„s can be@× to implementœ š8sCØ ðs usually are sequences (suchÿlists or tuples)¯or mapping#�(like diN±aries), butá `represÓ VotherÙ s� Ý ¯well.  TheMÃfirst set ofŸsâqused eif Ato eè5e aù  é q �B  ;V`differJ v ‡that forh ,GtÐ aðable keys shouldÃ¡tegers *k*g ßwhich "0 <= ki @< N"r@2*N*¹ €e lengthH l !,)cslice i", w >ÿ/ a­Prangea  items.  It} ñalso recommended Ggs× pprovideƒk W"GÂ()", "values �  1get	 Ï `"clear f ¢"setdefaulD @"pop.  	  d  Acopy
 ?andÏ ¯"update()"h Pbehav.psimilar@thosIÐr Pythonâ€™s ãFdard�yq Ë4 ¢a"colleÆãs.abc" module { 5@"Mut¬M"k Ïabstract bas…@clas
° help creatÛ à Èafrom aD î±P__getz __rOH"__s& v "__del7  ©;#. ç ß (Á5¢Àods "append(±)", "count( Qindex <'
  €'"extend  /\n! SinserL 0pop* „ "remove @vers ƒ and "so/ O ¿like Pythonp ÿ(standard list objects.  Finally, sequence types should l Ÿimplementj ðaddition (meaning concatena )Î ‘multiplic g ? f Qrepeth ‘) by defil ñthe methods "__add__PÊ E"__r" h E"__i#  R 3mulR  >  Õ  ,  p Ÿdescribedl ´below; they€2notÜ ðe other numerical operatorÆ/ItC/isi ñrecommended that both mappingsÌ %s ï ™ P ±"__contains‚ð to allow efficient use ofK _ "in"· Ú ;n 5for¬ ,F ®asearch] Í °â€™s keys; 7 •ê ?, iÓ_ Brougg Svalue‚ais fur¦at uâ ½ Š
 ŒLiterqo …k š M Ž&thá Ø"erAš ,¹ “ o Jl (e j ”±	�t R n g ²1  š ï.__len__(self)*  p   CallmoOà built-in func¯ "len()". î S—_returê!  dlengthlÃ ñ, an integer ">=" 0.  Also ;9 &Ý …doesnâ€™«a�2boo* Æ_whoseÚ "_#)"1 p þ �s zero is`Rsideraÿbe false in a Booleans  ÜOext.i ð \n'
             ó'   **CPython implementation detail:** In $ ñ , the length '
E  _'is\n ø   required to be at most "sys.maxsize". Ifc /isf ¿larger thano 	X ÿ some features (such as "len()") may raiseP ñOverflowError".  To prevent; Zing "% ? byÀ ¯truth valup ÿ&testing, an object must define a "__bool__()" method.¾  U 2.__Ïß_hint__(self)2  r   CallÙD· "operator.` ¿()". Shouldreturn × Tmated† fo	e$a(whichÐßbe greater oro OlessF ïcactualp F). T’ Í`n inte•">=" 0.p /Thðû ¿ 1als)T"NotI›Red", ã tó dF°@sameÿim"Oð  didnâ€™t exist³Ü0allûž¡ is purelyÔbptimizl0and Vnever)m ?for× ¿correctness
à   New in versü?3.4B _Note:˜  `  Slic3ðis done exclusiv@withÁp follow' _threeU]_s.  Al �call lik~7 ß   a[1:2] = b%   Íatransl«/to(  Qÿa[slice(1, 2, None)‡   Xð so forth.  MissM[ ñ items are always fiÇ/inh•"Š "h0gets d_, keyi1e3G@of "À™[key]". FøÀ         'seüquence types,\n'
  ÿ.'   the accepted keys should be integers and slice objects.  P ŸNote thato 
qspecial_ ðrpretation of negativz ‘dexes (if¢ m Ïclass wishesp ço emulate a se¡) is up tob ÿ "__getitem__()"ß ¯method. Ifp P*key*Z ðof an inappropri‚  ‹ð, "TypeError" mayiß Ïraised; if op àa value outsid}Pe setM"inD1forâ þ n ¯(after anyÛ ·Œ `s), "I} å p eo  Ó. For mappingÌ h@miss (not in¸?theg �container¶ 3Key´    ˆ A  0   
:  œ "fÁloops expectN J	R@will8œ ô ?fori Qillegƒ$�to allow ­„er detec– #0endTË^	 t.Ž  fE.__s“Pself,¡,ò):  �   Calledîñimplement assign @to "c ð [key]".  Same nÐô ?as a	Me.  ThiZ1onlö‰  edN Çú?s i  2ðs support changesð   ™f  ä@, orFÛ 0newgS0can|QaddedI  a] © " e`#s + g �replacedŸs‡ ex 5ionC#be˜Ó #im·o ¸ +¼ õY �c.__delR \¿¸1Ddele�
¶ÀSame note '
  ¼'as for\n'
 ð' '   "__getitem__()".  This should only be implementedN  M ¿mappings ifn ñthe objects support removal of keys, ord €sequenceQ q e“ sn 0can½ a  ¹ @rom ‚ Z í ÿe same exceptionsl /bem @raise  or.òroper *key* values ‰� ?‰� method.p  Zð.__missing__(self,X)3  ü   Called by "dict".   toè ƒ  "h o[key]"?@for G o ð subclasses when² ¡ is not in4 ? oionary#Citer� • c¨ 0an Y  at÷ƒs requiraŸcontainerÇ  ‚p yÆreturn a newr ñ` that íXŸ ¸�over alleQ st¬ d  For ãO, itÝ ® æŒ  t  Š ñ ù  m @  q   Iter�¾ ©also need ¥tÙW;î yÃ /ar,ß3to ’³themselves.$°ore informaP? onh šÎ V, seeä _Types;"H ¿.__reversed$À(if present) »"[  ()" built-¶où L¯ 3   N è@ion.å”yûú l ‡"es” ž r /rdÙƒ  IfŽ Š[  ¢#)" r ‘provided,- } À       '"revÜersed()"\n'
  ÿ,'   built-in will fall back to using the sequence protocol N Ÿ("__len__p 	áand "__getitem, ú	).  Objects that support{ r � Þ °should only¼ @vide~ 1rev 0 ifj Uy can% n /anh âimplementationÆ ðis more efficienÐ a _e oneB0pro£ Od byk "½ O()".&  ñThe membership test operators ("in" ž¿not in") ar§ normall¤ °ed as an itf ðrough a container. How�,( Õ o8 ¼ 7 lyÌp follow¿ðspecial method wit~ ™ä­o Ü èð, which also does ;qrequireˆ Ÿ / bH?bleÇS 3.__�s__(self,g/m)¸  �   CalledîÛ %B.  SQ;¿return trueo @if *ø�* is in *º  *,xðse otherwise.  For mappÄn s, thisp  �consider”akeys oôb  ra{  ¸¡r Ÿvalues orn  +@key-â o pairsÚ ö Ú  � ñ t donâ€™t defin¼÷ )"ÿ \ê´ °first triesArÙ@ via( ¡$h ?old©$j  M ^ ·g @, se<ais secN�i� l àlanguage refer»ŠX `Emulat‘Ïnumeric type}= Z   ±ÉÁs¦#beºe˜ $e – À'
            Ò'objects.\n'
  ÿ-'Methods corresponding to operations that are not supported O oby thek ðparticular kind of number implemenV ï(e.g., bitwisee › ?form Ãnon-integralg ÿs) should be left undefined[ Qÿ.__add__(self, other)1 ?sub1 ?mul1 /at4 truedivi _floor6 /mo2?div4 :powÌ ¯[, modulo]¡jlshift> 4 r4  /an?xor– 0 ±£   These m ý`called¯ ì binary©¯arithmetich Ì€("+", "- * @ /  ?%",g "&O()",h @"pow! 1 "*\  <<X  >> & ^ ÿ|").  For instancer /toi �evaluateõexpression "x + y", where *x* is anj Û Oof ak Cclasž!haL "•#)"¼E, "x«0y)"u ¹ÞB "__j5__(a Tàthe equivalent*j _usingÔ 7"__[`)" andy d)"; its  �b#@relaN©6"__úq)".  No· atq F$)"m 3be -©Ÿto acceptÚ Pan opQÐal third arguö1 if.1terK1ver3o E‹built-inn À      '   "püow()" function is to be supported.\n'
  ' ô   If one of those methods does notZ ¡ the operay d @with' l  ¥ ðlied arguments, it should return "NotImple! ?ed"Ñ ÿobject.__radd__(self, other)— 2 ?sub2 ?mul2 /at5 truedivk _floor7 /mo8?div5 :powÐ ¯[, modulo]©jlshift? 5 r5 !/an?xor™ 1 ¾g   The· are callediH —� binary »¯arithmetich ü s ("+", "- * @ /  ?%",g ",O()",h !"päA, "*\  <<X  >> & ^ A|") pŸreflectedq �(swapped"  ÓDnds.J\ s LDonlyQi$oe leftm "!nd;ß SÒcorrespondingŽ aq[3] and¹²m ¦ fp ðdifferent types. [4] For instance,)�evaluateo pexpresstO"x -o Ðy", where *y*Ÿ%anj  eÿa class that has anLB"__r‘/)"m ¬@, "yò/ 0x)"w ‚if "x.__ ?y)"m zsh *“*“Q   NoZaat ter„åQ willf"trg ïÀ   '"__rpow_ì_()" (the\n'
  ÿ"'   coercion rules would become too complicated).F  �   Note:  ¡ òIf the right operandâ€™s type is a subclass o, _left á ? r Y †and that] pprovideq �differenf °implementatJ• p ñreflected method forô ¯  D d, this will beâ ocalledm abefore_ 'd RLnon-� 0. T{ N�behaviorn eallowsDÑes to overrid… ÿ ir ancestorsâ€™Ô £  srÿobject.__iadd__(self, other)³ 2 ?sub2 ?mul2 /at5 truedivk _floor7 /mo8:pow› ¯[, modulo]tjlshift? 5 r5 !/anØ ?xor™ 1 ‰ƒ   Theseòbs are Û AaÇ0augm/ed=¯arithmetick `assignD ±s ("+=", "- * @ /  %  "*4 k 0"<<: 1">> & ^ \|=").ø !sh�j ¯attempt ton !do!@ð in-place (modifying *0*) ñoreturnH„_esulto �(which c³ ðbe, but does not havC  t .  If ap ospecif¶,i^ pdefined)&e ð assignment fall\s '
  ï'back to the\n! õ   normal methods.  For instance, if *x* is an _ of ar _classl @withH Ã"__iadd__()"z  , "x += y"l  equivalent¿ /"xl =h %x.a ð y)" . Otherwiseg 2.__}   ?and] b"y.__r( ox)" arCñ considered, as æ àthe evaluation1 à  y". Inr certainÕ 2sitM ðs, augmented assign ð can result in unexpec$ ú_errorªð	(see Why does a_tuple[i]£ð[â€˜itemâ€™] raiseÔQexcepì o Owhen‡
Aaddi> ð	works?), but this behavi–sÙ �fact partUl  {OdataJomodel.  �   Note:  Ž0DueÂPa bug½ œ ÿispatching mechanism for "**=",[	_ thatp €defines b2powb Jðreturns "NotImple3�ed" woulfail ton Tfall e"vt YE `x)". TÐ´�p  fixedB¿Python 3.10Ãÿobject.__neg__(self)Û * ?pos* /ab* oinvertW — �   CalledQiÃ Uñ unary arithmetic operys ("-",qO"+",k @"absž  O"~")l# co¨ xï p/in* Ofloa, Ú EÐbuilt-in func‹3s "À /()C3int&p "­ (ÿ1 Shn�0 a !eÈ ¿appropriate°Htype‡À          '\Ln'
  ÿ	'object.__index__(self)\,  ñ   Called to implement "operator.Z ÿ()", and whenever Ž ÏPython needsn òto losslessly convert the numeric Õ  � �an integp ) _(suchp ðas in slicing, or  o Ñbuilt-in "biná q"hex()"é à "oct()"k ò"functions). Presence of this method indicates thaø k k û 7is $÷type.  Must return .L  p   If "X2t__b__floa #P"__co2 y 7ore notdefinedn õthen corresponding  W@ "in�1, "‹  ¬=/ani "³  < �fall backlí E/)"-Œƒ.__round…¿[, ndigits]�7 Strunc7 , _floor, Oceil+ �	4”! "õ  N Ž_"math5! "	mè V "Ê p()". Un8b*o?* i}Bpassë"¯ » llƒ#se§„s shouldGØ  _valueFûeÐ ç"at Pan "IÛð ral" (typically±m  ú/")—Ä1 is Œ ñ n ja ƒ þ
HallsOÏ>¸ O’With Stat ÿ Context Managerò= j  CA *ct mt  i ¯ÈÏ[ ÜŸe runtimeLK /ton ðbe established whenü executing a "with" statement. The '
  ÿ'context manager\n% òhandles the entry into, and ‘xit from, desiredp ƒruntime x p 1forI Ó Qon of Pblock Šcode.  C¾ ss Ïare normallyp  invoked us? æ Aÿ (described in sectionV k “ð), but can also be used by directlf3vok“ /irÝ �methods.n  pTypicalp sM	Ðs include sav~  ç`restor" variouso Akindh bglobal– , Ë <  ^ $un ¯resources,ï 1clo¤oopenedp 0fil? ?etcÀFor more inf.á$onª"es, seezML_ Typešÿobject.__enter__(self)ç  @   E< /mó related to this o Çi Ì� will bi2is •òâ€™s return valuex ˆ�target(sí ¢   specifi�¤ as" clauseÆ  ’ �, if anyc__exit}¢, exc_type
 É ¿, traceback° 4E+ « œ-Ÿparameterv4   ³QexcepÔ0thaxn Š ‹ žb� Qed. I†Ü I Bwas 3  	`out anH� ¯, all thren @arguµsWn Ÿbe "None"ä   Æ � Æ is suppliedÓÃP wishùoŽ 7 1res¨ yó (i.e., prevent 40 be`propagŸ ), YWshoulöÀ           'ü-   return a true value. Otherwise, the exception will be '
  Ï'processed\n ÿ   normally upon exit from this method.=  ð   Note that "__R S__()"M ðs should not rerais- ¿ a¼ ?-inl ;² !isÿ
callerâ€™s responsibilityÌ ŸSee also:  ÿ  **PEP 343** - The â€œwithâ€� statement> !  3 �specificaäñ, background, and examples forò ß€Python "| "p ” Q S¸ #alî lookup+ = +  ÐFor custom cl+òs, implicit invo>Qs of P˜ s.�are onlyn ñ%guaranteed to work correctly if defined on an object‚_type,q  Ý åE Àinstance dic@ary.*Óat behaviour þ@reas-hÞ  o ñ following code œsÍ f
B >>>›/ C; a   ...¹Opass{%  f o = C()$ ÿ.__len__ = lambda: 52 
_len(cU PTrace›P (mosÐPcent ~o last)õ ÿ  File "<stdin>", line 1, in <module>œ ""“ypeError:i ã hÀ 'C' has no ½ O)\n" Y '«rq0aleW2indWcPlies Q� a number{ rrk Z�s such as*Bhash* ár"__repr M žh  òROed bÞ3all) #Pncludç2eQs. IfJ P B¼¹o+ /seÝ  us,‘he conven·l ›ÎÀy would '
    ê'fail when\n'
 ÿ   'invoked on the type object itself:8  ð	   >>> 1 .__hash__() ==  ?(1)5 OTrue  R ?intS ?intU 	ÿaceback (most recent call last)Û %ÿFile "<stdin>", line 1, in <module>± ô"   TypeError: descriptor '@' ofy$t'j¯needs an "¢ �argumento ' òIncorrectly attempting to ð l àunbound method” /a "Pclassø Othiso ð
way is sometimes referredr ¢as â€˜metaJ ÿconfusionâ€™, andv ¯is avoideds ‘by bypassØ ±he instanceìP look £up specialè sõf Ð 6(1)‚1Ö3X  ÄZ   2  ™ 43 �In additiëo>6any>“attributeóež¯nterest ofm ëness, implicit‹¥ up general«?lsop ëe ¹e"__get¾  y"óP evenà ( ÜOâ€™si §'!àPMeta(Ú`1...fMdef ¹ _*args=  B pprint("t ~ í/d"$‰  L areturn.• ío   ...  À� "C(,š=» í *`len__(—3 Ô /10ž a ??__(‹ C/H ‡#*‰À       '   .|..\n'
  ÿ '   >>> c = C()$ ¬.__len__()G ÿ # Explicit lookup via q �instancek ÿClass getattribute invoked3 /10  Ý utype(c)¿ cÀ ¹  F g _Metac¹ >Hlen(­ wI# Imrœ 1 øBypassing the "__Š üÿ" machinery in this fashionñ�provideso ñsignificant scope for speed optimisations withp eg ÿ interpreter, atn  Ó ócost of some flexibilitÍ pe handl  $ opecialq ¿methods (thÍs> * ð *must* be set o;"e 5Ðobject itselfV:¯order to bp °consistentlÎ 41 byÉ)²,
 'string-Ÿ as': 'S " MÛ DI  '* &  d ð s implement all‘�òmmon sequence oper ,…�  'alongq  X @addiG3al ï ð described below ?  'W È ðalso support two stylesÒ a Ò¿matting, on¿2  '( yas Àlarge degree` ¾Áand customiz2O (sel ÿ "str.format()",p F"  ê € Syntax i Ci  '  à )  qÁ Ï  'other basÍ # Ân C "printf"LAR that£ßes a narrowerArang* ½‚ C°nd is sligh;$hajðuse correctly, but) Oofteì�  'faster²  wYÃcases it canÎ " (ô -?[ ¡ÐThe Text Procþessing Services section of the standard '
  ÿ'library covers a\n( `numberU ÿother modules that provide various text relatex Ÿutilitiesq p(includÛ Àregular exprî Ñon support inå O"re"á © /).h  ÿstr.capitalize()(  ð   Return a copy;�rÔ ÿ	with its first characterÆ Š dq 1andÿ rest lowercasedü     Changeda  Q�3.8: The³ ¯is now put¾ Ointo· Ptitleª 1 ra]‚than uppÀ ³. This meanp£Dos likeq ðdigraphs will only have<#irß 0let�y,Þ �stead ofs  ûFfullê–’osefold�,aF /ed› 6. C j stÄs may bi	�used for Þ0les3 otchingþ  ”˜  @pis simi%toì  �but more®1aggEŸve becausÀ 	ðit is intended to remove aÊ¡ase distinr ) / aw 3_. For&€example,Šu GermanÜ #e “€"\'ÃŸ\'"›   equivalent³ o""ss""q’   Since í valreadyw 1, "KÏ()" would doå 0notÜu ¥ ;î "Î " converts‡ ?to µ V  ¢Y  �algorithm0rdescribÙ*O3.13Ò En “Unicode SggD :Newh3F À            ð    'str.center(width[, fillchar])\n'
&  ' ¢   Return S ñed in a string of length *l p*. Padd h is doneo  us> ô the specified *Á ÿ* (default is an ASCII l ¯space). Thp 	„originalÓ Ais rò  ë fØ  o Ïless than ors �equal toà Ÿ"len(s)".$  Øÿount(sub[, start[, end]Ù) k`numberÏÀnon-overlapp‰°occurrences j#ub_*sub*Â    = p �range [*Ä ð*, *end*].  OptioŽŸargumentsj; O ando X ` are i�preted asˆ  slice notas �"�qencode( ðing='utf-8', errors=Œ�ict')\n"w$1an _  ed version‡ DrŸas a byte*’object. D9.i  õRis "\Í b\'". *Ð ÿ* may be given to set a¢Ÿdifferentr 	 (` handlx ascheme² è6for€ iå #"\lO\'",q @meanj BthatY  ß Ð raise a "UniÙEž /".à ßOther possiblb	avalues†�"\'ignore§  dbreplac \Q"\'xm¾7ref/ å Æ"\'backslash2  +a any o¹ ÿ name registeredå ?viai 	 &4cs.G _IÀ()", see sec[ H  Hæ?ersPŸFor a lis1	%ofr¿sn  Standard EžOingsÜd'   By‚ , n™ Ànot checked ¨Â/beÓ 
€performacÐ, but only usªt} Gfirs¯	g À        'errþor. Enable the\n'
  ÿ,'   Python Development Mode, or use a debug build to check P Ÿ*errors*.q  ð$   Changed in version 3.1: Support for keyword argu« sˆ _added… 6t9: The Ý r is now	± dTø qmode anù k  ½ ÿstr.endswith(suffix[, start[, end]])†  ð   Return "True" ifNp stringU  s p  �pecified”*• /*,n ³otherwise rx ”False".  ? ° can also b�_tupler 2of t /est pto look`ñ.  With optional *@à*, test beginnú /ats Othatl @posi[ i @end*¯�op compaa0at Q l M q  + xpandtabs( _ize=8 (‰a copy o ÿwhere all tab characterµ¿re replaced» �   by oneŸðmore spaces, depend�!on�@currÎocolumnD x QgivenÁ ´size.  Tab {ó s occur every *J*m ß €(defaultf`8, givÔ  Au 2at Ö ¯s 0, 8, 16s  à oso on)Qq   To e9Þ, E`is setOzerot Tb  â †examined à)B.  ISb)  L aV @Ž("\\t"),?~ Ïs are insertÊia_resulî	_untilGPequalI�the nextcæ p6/(TÌ	À tab charactþ er itself is not copied.)  If the character '
  ÿ 'is a newline\n$ ñ   ("\\n") or return pr"), it} y B andw ourrentu Ÿcolumn isr ÷
reset to zero.  Any otherÓ #isñ ¯ unchangedr ˜ p c² œ ÿ incremented by one regardless of howo /thM	”`is repë f €when pri .¬  ò"   >>> '01\\t012 3 ÿ4'.expandtabs()\n" E 2'01(1012	 @0123	   /4':  4€  |  p x 'ÿ'str.find(sub[, start[, end]])5  B   R÷ Tñ lowest index inñóstring where sub Q_*sub*ÿ¤found witha �lice "s[Ê :È Ï".  Optional‰@arguÃ1s *8 *â  $ *end* are …@rpreþ asç s‚ @notas .ä "-1" ifp ¹ð ôŸ'   Note:f   Wa The "#ÿ)" method should be used only if you ne^pto know	r 
@posi< =þ °.  To checkg   NaC or7,§ s 
 °ß"in" operator, /Þ0Py''Python ˜4 ?Tru	· ¹ðormat(*args, **kw
 ·!£Perform a ’  0att­0ion‡$he" /onM�which th¸
I ›ðalled can contain literal textL;areplac{i field(À           'þ)   delimited by braces "{}".  Each replacement field '
  ÿ'contains either\n' ð   the numeric index of a positional arguq B, or/ ?amex  < m ukeywordS ð.  Returns a copy}  ’ ¿string wherk Oeachk *$is?ad withÌ i Pvalue} (?thek  correspond´ /.2  ð    >>> "The sumŽ ÿ
1 + 2 is {0}".format(1+2)D _"   '@ _3'\n"*J ‘'   See Ft " S�ðSyntax for a descrip& ¬  ·>variousj Ú t?oQ òs that can be specified in , €Ïs|!_Note:¤  {4Whe— Ã aQñber ("int", "floa	 Ÿcomplex",Q 
¢"decimal.D ö" and subclasses)À"n" typ%?(exÔ ¼ •"\'{:n}\'^q234)"),Afuncà¿temporarilyz etµ(	ñ  "LC_CTYPE" locale toi   xNUMERIC P_decodi B0_poƒ@ò "thousands_sep"@s»g "£ ¯conv()" if´
ðthey are non-ASCII/Plonge6¡an 1 byte,Œ -
q 
ž  `differEthanP	i.  This½ßyr 
ðchange affects oZ threadr"CP Õßversion 3.7: P¶­ Q]	 ( Ös´Û   �	; ¤u 1 I ÔÁin some case4À
             S'\n'
  ÿ	'str.format_map(mapping)/  ö    Similar to "V 4(**T ÿ ", except that � ". Ÿ" is usedr ðdirectly and not copied‚ ó a "dict".  ThisM oful ifz ¿for examplet 	   a e ¯ subclass:8  q   >>> = � Default(S )K a   ...Ãÿ
def __missing__(self, key>  C `return3 ¢ ?... "À ÿ'{name} was born in "n¸"{country}'uú  F Ï='Guido'))\nD 2   $ 	p Y '6  `   New² ¿version 3.2ñ F  ðÿ
index(sub[, start[, end]]M!ÿLike "find()", but raise "ValueError" when theÒ�substringÿ?notÇŸ'   found÷ #salnum(æ !R€`"True"šàall characters– Þ Å /aré Àalphanumericé PthereÆat least onet °, "False" o* �wise.  Aa« q !"cË	£ !ifv !of½`follow§�sn '	Q"c.isj 6 wdecimal Aigit /orj  H P?()"&?phao?betCÁAŒt 9 s ÖGthos…”s definedoUnicodþM q À            ð8    '   database as â€œLetterâ€�, i.e., those with general category '
 G 
 Ï'property\n'  ñ    being one ofv mr  € t
 u
 l
 !or+ ¿oâ€�.  Note� Ïthat this is… ðdifferent from the` äAlphabeticâ€� Ì ± defined in) Ú Unicodet ŸStandard.$  ßstr.isascii()%  ñ   Return "True" ifÆ 0strˆÿis empty or all charactersan Y òare ASCII, "False" otherwise. m _have Wdpoints�Ðrange U+0000- /7Fp`   NewR ¿version 3.7F ¶decimal¸3¡‹ q›„ ´ö0and áre is at least¯% Òp ès D 3sÆÿcan be used to form”@numb²/inq é€10, e.g."ÿ660, ARABIC-INDIC DIGIT ZERO. k ¿Formally a WLë  [ s4# G]OCsPâ€œNdæ  ‹Oigit‰k ‚ %s c° !  1}g2  DZ A_inclu›
Ë¢¥ dV ŽÏneed specialÿhandling, such a�	 ÿòcompatibility superscript y 0. TÉ co‡t * o whichOàcannot be usedþ to form numbers in base 10, like the '
  Ï'Kharosthi\n! $  W ÿ.  Formally, a digit is a character that hasr �propertyq ñvalue Numeric_Type=Dn +or ecimal.L  ÿstr.isidentifier()*  ñ   Return "True" ifô bstringfvalid f ƒ`accord6  toD s ð	language definition, sec	 % IÏ ïs and keywords“   Call "B 3.is
 0()"mÓtest whether ò ?"s"à #�reservedÝ )ñ , such as "def"Î "class"Í !�Example:|  /„>>> fromP` imporú?  "W {'hello'‹&, p" O)\n"¿L  ‚, Falseu ?defs 
   q  w p ' z?lowu5 ©Vcased†Ps [4] ÷ŸÝ/ar1A'   ¦  \ � íeÙÀt least one  { ,"�"@   o` OwiseâSn.Ê3UÕPK/arM„ æ */s,U	{ O5$  2 sincludeÄ•  þ 0* ä vwpUnicodeE Î Üo, e.g.5êU+2155, VULGARr À         '  þ+ FRACTION ONE FIFTH.  Formally, numeric characters are '
  ß'those with\n" ò   the property value Ne Ï_Type=Digit,b 
* Ÿecimal oro 	2  .0  ÿstr.isprintable())  ø   Return "True" if allW!inostringe† 0 or2 s L öis empty, "False" otherwise.  NonS ¶
ýq / ƒdefined Ý vUnicode÷ ç¿database asn @â€œOÉ 0â€�ðâ€œSeparatorâ€�, exceptN t¯ASCII spac¿ï(0x20) which iz 	µconsidered <Ö.  (Note that ì sí o Atextc¤ ÿshould not be escaped whenk �"repr()"Þ Òinvoked on a Dñ.  It has no bea¤o²Phandlf=#ofD Q	ðwritten to "sys.stdout"× _err".yºö¶3 qeŠ@only-!te_ éeØ0andÙ÷re is at least on8Ëu § áh  F   AË  ‚ C*whiä *¸°/e Ìq r(see "u ü`"), eiÄ ð its general category– ø O"Zs"i 	$,Pâ€�),i j °bidirectionp @lassm  |q �of "WS",u 1"B"` ?"S"y$?titu5ðthe string is a þ
titlecased string and '
  ï'there is at\n# ð   least one character, for example uppers ! sr �may onlyo �follow unR dS  É >lowl  R q E _ones.t ðReturn "False" oOwise4 L astr.is/()%  4   ‰ ÒTrue" if all Ä }Äs [4] in theä½?arel ¦  \ " ó òI{ ,f9m S&ø"   >>> 'BANANA'_"Ö0   ?� P obananaP Q NQ ; � /'µ '©ßjoin(iterable®(a†PwhichP šñconcatenation of¯¨©Os in¯ D   *ª ð*. A "TypeError" will be rai÷ik ore are°�any non-o ” ` valueš € €, includ]"bytes"h Ïobjects.  Th‹	ôseparator between elementsN� Qproviy ?thie_ethod¼"ðljust(width[, fillü]( ½ Pleft a PifiedÂ:Ÿof lengthI*“ *Ô a   Pad@is d­ us  2pecs *Ò ¯* (defaultq  n ASCII%	`pace).Þ” originalAis rW ë #f Â  ÐÏless than ors ðequal to "len(s)".\n'
            T'\n'
  Ï'str.lower()#  ñ   Return a copy of the string with all ocased ƒ ïcharacters [4]n Ñconverted to µ  W .2  e   TheA  ¬ °algorithm u¨ ÿis described in sectionÀ C3.13ü s ÿUnicode Standard· ª \0p([3/s]²B@lead c –·�removed.Nù *J ôs* argument is a%pspecifyq ; etJq  H ’ _to bet œ pIf omit5¡or "None",“˜ v ¿defaults toq  Æ ¢whitespace g �is not aNÿ prefix; rather,t  \pcombinažs:Òits values ar‹_pped:G  "#€>>> '   Ð ¢ious   '.l„O)\n"R; '4 + f õ www.example.comg �'cmowz.'o < o €   See "b:…ò()" for a method that will ' Ãa singl¡	a ì _ n2 of"ö/. p CFor  é)æArthur: three!‚ „?e!'|ëP h L$(' n ? q í`staticzÿ.maketrans(x[, y[, z]U"SThis Y +r êb l£‘ table us p?for• Š¤R Ne()"GÀ      '\n'
   ý.'   If there is only one argument, it must be a dictionary '
N Ï  'mapping\n ÿ)   Unicode ordinals (integers) or characters (strings ofn Ïlength 1) tos $, Z  (of arbitrÓ O ˆ À "None".l CÀ   keys will_n@Åconverted to M e ³uare two¯ s,m y²è Bbequal ù ,r `and in] § resultingf, each½ , xµ0be +/edt !top 1 at �same posi‹ j 'y.Æ¹Ÿis a thirq 	õEv, whoseä Ý/beè à šP Ä 3theZ�str.part_(sep)U s   Spli_vmðfirst occurrence�p*sep*, n�return ap ð 3-tuple containO  È P befoÙÁhe separatorÙj% p bitselfµ i RafterTh Kl  /?nots tfound,  ó _ ¡ R¿followed byr  TemptyáL"Òremoveprefix( ?, /U!¨� ` start6!tht*\ *  *à ",C[len™ p):]". OÁDwiseD p a copy­ íT@origƒq p :"  "ù >>> 'TestHook'.W _')\n"GA '9 $ e @Basei KCasei À'Test')\n"
   " ò'BaseTestCase'\n"
 	 O'\n' ÿ   New in version 3.9..  òstr.removesuffix( O, /)3  ñ   If the string ends with *Z * Ÿand that ß / /isq ònot empty, return "} c[:-lenÎ ÿ )]". Otherwise,r A oa copyt oå ƒoriginalÐ :2  �>>> 'Misc*s'Œ' )C ? ?$ g ¿TmpDirMixini #A ” ¯Rÿplace(old, new[, count]²!R6õ ÛC»ð all occurrences# ±3sub8 _*old*÷a'   reÁ µd by *new*.:PoptioU¡argument *Ü O* is·¯given, onlµ	 —FfirsQ Õ 5are– C#ðfind(sub[, start[,ÿ]”) ³ Ðhighest indexì  gfwhere w—@*sub>� found, sucª4at 4 ¡ contained/inƒ1"s[õ o:end]"AL   Oà1s *;  * `*end* Žßinterpreted aû�in sliceÜ @notaS3.  ëÿ "-1" on failure® U 2�ð5qLike "rCñ)" but raises "ValueError" whenJé	¿Â 0   8÷ÿ #øjust(width[, fillcharìÀ            ~ '\n'
  ô'   Return the string right justified in a ¯of length Q �*width*.q @Paddg  is done us € 2pecs ÿ*fillchar* (defaultq ¿is an ASCIIt ôspace). The originalÓ Ais r ë #f Â ? isr Ïless than ors ÿequal to "len(s)"E ÿstr.rpartition(sep)+  ˆ   Splitßa ÿlast occurrence of *sep*, andû (/ ao ô 3-tuple containÛ Ç r beforeŒ ‘eparator, Ms% p bitselfµ  Di QafterY C Q.  If l  ù?nots cfound,5? a ó ƒwo emptye/s,R¿followed byr  Ù �ð L#s H¡=None, max O=- 1[!;@a liL_Pwords4µ ,ä`	aTe`delimiØ
.Ð*Ã *·ßgiven, at mos13 ý st 1are¤¥* [ b* onesSÕ _is nos sØ2
"–"Ëqy white¶B à (a Ï_Exceps Afor ß Otingâ AfromÜ A, "r6 õ()" behaves like " OwhicþiM	pdescribfïn detail belowÍ$`trip([%/s]¾*@copyÿ±° with trailÁ d _acter�removed. an*J ³s* argumentÕw&yq Š  et• ® H ’ Oto b8 À     '   remþ&oved.  If omitted or "None", the *chars* argument '
  ï'defaults to\n# ÿ   removing whitespace.  Tg �is not ap ÿ suffix; rather,t ÿall combinations of its values are stripped:G  "	€>>> '   Ð ¡ious   '.rU _()\n"1; 7 '+ f @miss 5ppic _'ipz'h 9 d 'â    ‘See "str.¾ezò()" for a method that willåe¸�a singlep a •#ngá _  n Ë€of a setÇ ›�acters. p ¿For exampleÞ)ÆMonty Pythony }MwÛc  *l'i  § m ä Ü split(sep=üQ, max _=- 1)­ ñ    Return a lis¬ L�words inY  Png, uo *sep*Ä as1 m “delimiter5Ñ*Ä ÿ* is given, at mosÆ3 n 9¢done (thus-í Ohavem "  ?+1"o 0elex/s)Ö  #sspecifi»O-1",H1the{_re isr 1no P! o/ p numberqû (‰“possible  õ _omade).q   –ÀÅconsecutive ÷� … Àgrouped toge/s 1andAdeem2 f c emptya0s (ýY~	¡"\'1,,2\'.'¡(\',\')" r Ðs "[\'1\', \' À p\'2\']",,‘Í @may 1ƒðmultiple characters þ(for example,\n'
  ð%'   "\'1<>2<>3\'.split(\'<>\')" returns "[\'1\', \'2 M °\'3\']"). SG ting an{ �empty str* õwith a specified separator‡ w  �  x .j  F   F$:'  "O¤>>> '1,2,3>',')\n"p4 €['1', '2 ?3']- a Q, max­/=1m ,j ?,3,Í #Ñ ?, 'Õ 'N Š÷ If *sep* is not or ÿ"None", a different  €n �algorithm[ ÿapplied: runs of consecutive whitespaceo Ïare regardedr 	sàVingleÝ€, and thB �sult will tain nos ;st 	t\ `start íSnd if x€has lead„/oro �trailingj &@.  C?•quently, �H an º  ’ Âaq  £ isæ ±HjustªO4oà ré/]"Hi5 2 HØtE^ @ @ô    1   2   3   HÍ 2=2str»ÿlines([keepends])@ A   Rp a list[ �Y 7 in:p, break8a‰ 7 k òboundaries.  LineS  s R „includedz - re:ð ing list\n'
     û'   unless *keepends* is given and true.\n'
;   ' ÿ*   This method splits on the following line boundaries.  g /Ini ±particular,_ P ÿ are a superset of *universalk 0new– /s*ô !¾ /+-  2 +÷ ð| Representation� |Û zDescrip- 3 O   |l Ø /|=  2 l 	u| "\\n"˜ 	 0| L1Ž GFeed,  m 	K — ±O"\\rÙ �Carriage»WReturãÞ Ù {µ%| Ú Ä +ÅÚ zPv" or•7x0b¾�
[Tabul—´fÚ cÚ OFormŠg“(x1Ñ z ãO Filc”Separator.  �z7x1dª£ o Group³À'Separator    X|\n'
  O'    /+-  2 +l “| "\\x1e"€  �| Record� —Separator3 ?   Ù {/85Ù ÿNext Line (C1 Controlè _Code)Ù }]u2028Û |Ô @°²| Ù 9Ù  ŸParagraph¦Þ ‹r|ðChanged in version 3.2:’`v" and
 ÿf" added to list of linen ¿boundaries.&  ÿ    For example:'  Îð>>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitÅ os()\n"K [H @', ' J  	 Okl']9 „ g š ßkeepends=True§  Ü 3, ' ­ 2\\r° û ¶ 'R %�Unlike "6ÿ()" when a delimiter string *sep* is9¿given, thisn òmethod returns an empty’sfor the w ,ÀŠ¯a terminalr  	ð break does not result0 � Axtraõ‘ ?0   +""w² ã/[]° Q 1One• ð\\n".splitlines()\Nn'
  " ÿ ['One line']\n"* /'\B ÿ'   For comparison, "split(\'\\n\')" gives:B  œ r>>> ''.S  R /')£ 1 /['Å " S 1Twoò Os\\n_ : ?', l 1ñ	str.startswith(prefix[,  Ÿ[, end]])V ò   Return "True" if stringY  s n b the *s ?*, Á'otherwise rR ‹ µ   "False".T ò	 can also be a tuple of s _es tov Ÿlook for.o ñ With optional *2t*, testí `beginn÷ at thato @posiH o @end*§$opî]dm ,ô ,¯rip([chars)`a copy� Alead6/nd2�trailing¬ 0   ¤ ðacters removed. Tr  ôs* argument is a²…pspecify“ ?thet 0setÔ  b { t}� ÿIf omitted or "None"û *K /s*s Ç qdefaultÖp  ¯ ªwhitespaceý è L /isr Snot aE Æ  suffix; ra¬P, all”@binaÕs?itsÊŸvalues arX
tripped·)0   	�ious   '.u/p(À'3 'èÆô www.example.comc 'cmowz.+'; j n	 Ø¨outermost ?) J÷�Q fromÇ Mƒng. Charú4areyð from '
          ö'the leading\n'
 
 ð'   end until reaching a str	 ÿcharacter that is not K ÿcontained in thes uset of ^ s3 * ÿs*. A similar action takesv `place % r 
PtrailÒ ÿend. For example:§  "<Ã>>> comment_,R= '#. 2 Seº ß3.2.1 Issue "�R"#32 5 O.'\n$ s .z Ÿp('.#! ')> '“ ?#32u ' ÿ 'str.swapcase()&  ð   Return a copy § Ê Ðng with upper_ !tŸverted tos 3lowR óand vice versa. NoteÜßò necessarily tru6 t '"s'  == s".:   wOtitlt,C  \d ^ of®ò¯where wordrRstartª/an¯ /  Ç  ï`remain� õb_s areåÀ7/  í4`'HelloAld'.G þ±	3 _Worldgð   The algorithm uses™i¶ÿ language-independen˜adefiniIOof a² ö  as groups› consecutivJbtters.™ V ›@workØp Pmany 7òexts but it means“ apostropheI  @  ¤@ions`p ðpossessives formÎñd boundaries, which mayèbå”desiredo oresulta “0   að	"they\'re bill\'s friend !om¶ðUK".title()\n'
    ' ò"They\'Re Bill\'S Friends From The Uk"\n'
0 	 ' ÿ*   A workaround for apostrophes can be constructed using g regularn Ïexpressions:'  Ó ß>>> import re+ ÿdef titlecase(s)v ^ 1...	 õreturn re.sub(r"[A-Za-z]+(\' O)?",‚ O T  ¯lambda mo:Hÿ	mo.group(0).capitalize()n "/s)¤ !  rC!"t‰Are b‰2s f‰/."i ÃrÃ »Ã.¸ÿstr.translate(table} Ý Ræða copy of the strâÿin which each character has¶¿been mappedt qthroughk dgiven É Aion Ë !. Ð P must„rŸan objectr 
 at3Ðlements indexã ÿvia "__getitem__()", typicallyæ 0a *ä Oing*t òor *sequence*.  Wheny ÿed by a Unicode ordinal (anr �integer),4t 0ºUdo anØ³following: Þaq › s  /1@, toþ ¥ /Pto onæ ¿ more otherw d/s;s ¼ P"None¯‹o deletex f Ï0 ?ì?; o´	ÿraise a "LookupError" exceptionù q ¯to itself.ã  a   YouØPuse "Amake>0()"Pcreat«   laŸ m@map $o �E-to-  ä@pingH  different:Omats× !ÐSee also the þ"codecs" module for a more flexible '
  ÿ'approach to custom\n* ÿ   character mappings..  ¿str.upper()#  ñ   Return a copy of the string with all _casedó Æ _s [4]n �convertedµ  W Ï.  Note thatb $"sä 1.is9 Ï()" might ber ð"False" if "s" contains unz d�@s or&   ¯0Unim ucategorH`resultK"ÿ(s) is not â€œLuâ€�ó �(Letter,p 	 È ±), but e.g.W tW A a title' ]t   The i  Ë °algorithm uÿis described in sectionÕ C3.13fØ jŸ Standard·  ¿zfill(width=Pleft _ "ed%_ASCIIó ÿ"\'0\'" digits toù dmake a€±of length *Ç �*. A lead‡¿sign prefixQ ñ("\'+\'"/"\'-\'"}ñhandled by inser¢ ø1pad\  q*after* ~ w ïp ratherÛ‘n before.R„originalì /is?r¡ \fq ! [Blessp €or equalm�"len(s)"K@   FI xample:„  !’>>> "42".•5‘"/ ¯'00042'\n"b% T -U -U B,
 'ãbs': 'Sîüand Bytes literalsÔ /'* *  e [ G are8!byV`followÞ c;calp'defini`sŠ't #  ^v ‚   ::= [ü <q](short Àg | longstri‡ng)\n'
  ð'   stringprefix Á::= "r" | "u R U f /F"I  = 	 B| "fI F fK F rM  rFT ˜ ""R Rk Rshort¹ r ´ G\'"  pitem* " ‹| \'"\' e - & Û Glongo  p  \'^  s  |q @\'""ˆ 2  z ¤ z  cchar |ÄŸescapeseqI 
t  I  H }  À<any source J üacter except "\\" orpnewline ¯the quote>¹  [ ¹ q J Â&ž O C ž Òbytesliteral �  P(. 0 | o ˆ 7  Ô X "b!"B bDB bDB Ø""r8 r9 R /RB¶¢ w  Ö Ö ‡ #Ì, % . k .", q  p   t 7ç 1 E` \ ø³ V!|  ½ 
E F ƒ E x  æ~_ASCII=.?or =Ú ¡ ´ o ø+  H :¼ A NðOne syntactic rešðction not indicated byà �se produ" Ls is€Mthatd  whitespace2  X PallowV `etween[   "{ ÿ¨"?˜A1andG  Ã 1 of ^. The0set� |definedÊ -byÈ  áðencoding declara+1; iJ ÍUTF-8 if no ( Àion '
        q'is\n'
  ð('given in the source file; see section Encoding declara -s.M  pIn plaiA ðglish: Both types of literals can be enclosed‘ © �matchingd øsingle quotes ("\'") or doub ¡"").  Theyn @alsos g ‚ g 4in ƒ a groupÁ 0thr'ƒ u �these areO 0genú ñly referred to as *triple-Ð £d strings*¼  ¯ �backslasha ð("\\") character is u[–to escape üs that otherwise havek ac ðspecial meaning, suchÄ •newline, Ÿ € itself,™ jÞ Q ­ [ ByïAðare always prefixed with "\'b\'"y €"\'B\'";ìyß nproduc©a`stance² ½  "b| "Ç… instead 2str m²=mayø �only cont+WASCIIœ!; o Î áa numeric valu’ <128Ì -orc @grea@must÷`expres&ÓÁ–C and� ˆ`may op @allyj 
�F0let™ F"\'r¨R¨Pl sFÅ called *rawý  • tî Ž es¦´ kð .  As a result,†~ d ; -s,d `"\'\\UÉ  ˆ  u a S ½ Õ Anot ± ,edh b.lyG¹¸ð Python 2.xâ€™s ` vunicodea!beÔ­differentlMthanÏ [ 3[ þ1\'uª`syntaxX Â žsupported« V 0New	@vers^@3.3:™ ¬r­4 T Í  tL has(>bee¼ Paddedé�a synonymQ   ¿ § $Sç @ forG iTegacypò Q("u\'³Ÿ’was reintuü�simplifyW tmaintenvDMdualc «12.x˜Ð3.x codebases÷. See **PEP 414** for more '
  û 'information.\n  ðA string literal with "\'f\'" or F üin its prefix is ay *x =tedf 
d �*; see F§ ;tedƒ ps.  Thez … <mayk -bec …combinedÁ Õr\'", but not bÌ × u! otherefH =rawe â ³ âs are possiblen $ TbytesY+ �?not¤ÐIn triple-quo0¬ñs, unescaped newlines and ( r _allow¢ (7  Í @retaHÐ), except tha 7reeo b ~in a ro*Ôterminate the‘.  (A â€œ> 0â€�H   ücharacter used to openö.th÷�, i.e. eiÏ :¼M"".)Å PUnles9 9  7øR,ñ’present, s¬ sequences¨ #inj  e €interpreÜ`accord’ðto rules similar@NthosDÓby Standard CR®recognizedÄ Mare:°  .+-  & $ +T 1| EÄ# SQ�   | MeanÛ @| Noa €|c = |  $ T  C "\\v"› ±| Backslash‰  � ignored' Ä|   d 7Q  
 $ oU"\\\\³  z  q¹ b("\\") 	 º r'º bSingleõ^ ("\'½ º q"¹ GDoub¹ "¸ À   '
          '|  Q|\n'

  >'+-  & $ +T s| "\\a"c  ó| ASCII Bell (BEL)  œ ¸ bb¸ Ëackspace (BS¼ ¸ qf¸ ËFormfeed (FF·  ¸ qn¸ BLine¸ L¸ ‚r¸ õCarriage Return (CRwpqt¸ ÿHorizontal Tab (TAB¸ zv¸ dVertic¶ %VTµ /  àr9oooº ð| Character with octìvalue *ooo*  |º @(1,3Ù ÀX?xhh¸ Chex ¶ 1hh*Æ¸ 2¸ Y‰ý)Escape sequences only recognized in string literals are:I  ÿ  
 $ 7° S°  
@Mean¡ a t| NotesðÀ         '|\Gn'
  >'|=  & $ -|\T Ä "\\N{name}"m À| Character  0d * �* in the' +| ž 2(4) d   	 ò| Unicode databasV $  k Ç .+-  & $ +·  …"\\uxxxx(  ðwith 16-bit hex valuÇ 5*u *ý  | gU¦   /326  u lGmNotes:  P1. Asbý#Standard C, up to three octal digits are accepted.L  œ2. Unlikea ±exactly twoÄ_ orequir_ ð3. In a bytes literal,Q Ãadecimal andÂ áescapes denoteQÅ G Ã 1   q �Rgivenpz fstring{ dthese k ` z ad —cv ;   4.F@ngedtòversion 3.3: Support fo`ý aliases [1] has beenQ o   add�C5. EÙ@four‰9Úe6. Any­�can be enÅÅd this way. z \eight&?hexÙ w#Ó1óall unrecognized’ sequence:@left–=the� YPunchaÍ�, i.e., *ˆÔbackslash is U   œresult*.  ](Thise ðbehavior is useful whe÷n debugging: if an escape sequence is '
  Ë'mistyped,\n ðthe resulting outputA ñmore easily recognized as broken.)  I* Q Malsof ðimportant to note that } ½ Js ons ,inÎ mstringe ñliterals fall intoa çcategory of unÌ z \s forb _bytesa .  þ   Changed in version 3.6: U„ »œs produce‘ ab ö"DeprecationWarning".  In a future Pytho� ¿they will bc dSyntax^ ò and eventually a "! oError"@Evenca raw ³À, quotes canš šüd with a backslash,!buE2 € remainss  në;ôðexample, "r"\\"""øac ]valida ƒÀ r consisCøf two characters:Â Ad mdoublee ;Ÿ  ž anot a “  ƒ (— W šmcannotf !en¤Ðan odd number,Dàes).  Specificø2, *i b Ïc z  j v singleØP* (siº £x l would�c  : `followÈ:„ À Nv �{a… Ã ~ b ^ @ed bøanewlinl’interpret [those 8i >parŒ!of³Hp, *not*= !a n qcontinuò mÀ,
 'subscriphs': 'S Ç ('* $  _  (a¾" (yð, tuple or list)	 
þ † OmappÊ  @(dicÕ âary) object usypselectsþ‘item from;h 0col/ Oion:Õ  8   _ð ::= primary "[" expresÜ_ê O "]"J  5TheQ °must evalua!oÝ ÷ À that suppormts '
  ÿ 'subscription\n# Ð(lists or dic( ÿaries for example).  User-defined objecs ¿can supportr • A by W ÿing a "__getitem__()" method.I  ÄFor built-in¬ ô	, there are two types of  _ thatDÍ :‘   If• ñ primary is a mapping¯ À expression ¥O mus¤ ßevaluate to aê·p whose 1 et 0oneqthe key  ‰ ?and?theÙ 	á1sel- U u nø b z°correspondsÙ  £r ­key.  (The5W@tupl ßcept if it ha4¯exactly onà   /.)‹  í�sequenceîBpintegerÙòa slice (as discussed i‡`follow!se)„ Šñformal syntax makes no special proviÝ l�negativelŸindices iÜK¶s; however, 3 alx Ode ak ƒÏ™¼ jurprets Æ ± `by add^  bclength„o Â ²e index (so‚ ˆ"x[-1]" l/la- ¿ o ?"x"× À`result¼ ¸b97nonê h@lessŽ nW ÿ onumberã o– emäó  , ‚ ? WWæ ìq Diµ tQ(counó òfrom zero). Since• Ùã /foÜ -È Ó  ” ]Uoccur÷ ¥?â€™žŸÀ__()"\n'
     ò'method, subclasses overriding this # ú will need to '
H   ÿ'explicitly add\n% ßthat support.$  öA stringâ€™s items are characters.  A Ÿ is not a® ßseparate datar ptype buD { € of exacä 'on| Ë ÀSubscriptionT “certain *…`* or * ¯s* createsÉ ßgeneric aliasˆ "InÍócase, user-defined s D can™   È/by4Bprov>Qa "__^ @_get±R__()"q V ¯ à,
 'truth': 'T	 ê Value Testingh .'* "  ¡Any objectã ábe tested for y   vp , ûuse in an "if" orN Ò"while" condi¿Àr as operandÍ²the Boolean  ' ps belowñ <'^ °By default,ƒ ·  iso Psider�rue unlessO 7 KinesP qeither ŠBbool�| ‹àreturns "Falseñ . 1len- Q ; ðzero, when called with Á ¹. [1]  HereŒL'are` 4ostDƒbuilt-in¾	f® :=  *6Stants¼2be > € "None" ·ÿ Ÿ * ì    qany numy §¢: "0", "0. j ËDecimal(0)",œ @  "F¶«ion(0, 1)"!  ð * empty sequenc‘nd collec_p: "\'\'w  ()  [] J{}",t@"set" a €  "range­   Oêt :¦2fun‹ Yehave a	jresult‹ \alway³‘ O ˜›¶t !"1©a"True" 0truØ° oðwise stated. (Im�ant exce†:°· þL'"or©>Rand" Ï  Á   ofV "ir‚nds.)\n'ñyï‚he "try"œ Hment¾ í	?.'TM ð specifies exceptóion handlers and/or cleanup code\n'
  ù'for a group of statements:' 	 ð   try_stmt  ::= 1 | 2 3  %  3 ê"try" ":" suit” œ  ð("except" [expressä ñ["as" identifier]]P Ý [ ,)+Š Y  
 g["elseŒ ]0 hfinall¿ 3 2try í "_ 	‘ 	 EThe òclause(s) specify one or more C 9w. When 1)no^ 3 °occurs in tr ½o N, no\ ; isJ cecuteds 'an3 \ º°, a search §¨ +an^  Û 0 isËrr 0 Th I  in!tsÈ à Ô 
¼  õ ‘urn untilSøis found that matcheR yion.  A[¹-¼ Cless ~ P, if æöent, must be last; io 9anyI Í { FÖdW a with z ]  C,Á › 	Q Ðis evaluated,I4¤ õ  ¹   ™resultingP `object›òâ€œcompatibleâ€�›  : Å 6An 3 0 	T Ô  if%i�Pclass`a base
  fÊ Pw 	] ~ ,@ ðtuple containingJBitemCp 	N Œ | q ã .+ 	 &Ifb Á ?use~ Îe1a�#	^ Ù Einueä@surrä ë  6o pinvocatqEZstackÉ *[1	{ Id M  ofV�p`header ¿ È 
	Q PraiseóP2ion@orig´	$ ‘ˆcanceled9and^ ŒPstartrG6newp ² >	Q  ð@callªQck (i0treq4 asN à2re E¡« àraised\n'
    ð	    'the exception).\n'
   ' ó When a matching5 ù clause is found, Q   ¹assigned toQ  ) ñtarget specified afterD ú"as" keyword in thatu ', ¬ )if] Ápresent, andO ä ¯ ‘â€™s suit¹ ãexecuted.  Alld 	N å ò s must have an 7 Ñable block.  $ Ø ²end of this 	« s] ƒreached,Q ÷ion continues normally¨entire tryU šstatementÃ (Tƒ RmeansBòif two nested handlers exist fo|Hsame] =Iion,º 
\ ¹ boccurs¯£ ;te innerv ,	Q  ouþ• € will nor ¦ ÇYion.): 	 ‡¢Øp has beÁ� usÅB"as „P", it¯yclearedQ "at} Ö3O1.  gkis as Š	I #  _  E+ ,N:  x*fo)	$ w² `ranslaÁT	+ m ?try… ‰   `   fin“7 Ydel NŠ 	 +’J =^7be 1à a different n–Yto beP ‚`to ref;oÈG»©Eìos are î1becÔAwithøÑtraceback att­0 to mÃy82m a‚ :enc  ecycle M  stI °frame, keepˆ“all local<1at " Z alivO Puntil} ð next garbage collecÅ …
	2SBeforÄ "á, details abou		M a À PSstore°Ðe "sys" modulo `d can â¹ccessed viaM  1 Ñ.exc_info()".C  ð returns a 3-tuplû PnsistH(of·*th;« Qclass½� À rinstancª &a öªobject (seP sq@The ; ðdard type hierarchy) id± fyŸ  Spoint"	ü °program wheß˜Ór£#@ val**ar� #reŒ«ðir previous values ó(before the call) when returning\n'
  ð'from a function that handled an excep .7 	 QThe o% òal "else" clause is executed if“ ÷ontrol flow leaves ‘ 9the] ö "try" suite, no‘ ð was raised, and "å è", "continue",^ *or] ñbreak" statementU ² D.  Eÿ As in¿ 
à *ar® &no>!by1 ²preceding "MsSÀIf "finally"Eópresent, it specifies a â€˜cleanupâ€™¸@r.  “UE	ú  q, incluª 6any®  \	ö hs.  IfW)an] è  OQoccur< S osµ7is 4,2K ñis temporarily saved.é *Ö (. ¨ )If] Ather¤aO ] itw2re-b0 at› S end Æ _«	^ � , Œ§ [  o‰ } ’ 	Q W‘is set as•  ë4ext™ 6newL .ª ~ ¯ ¯ ]N('orY6± b �¼ ©discarded:$ 	 ê   >>> def f()) a   ...Ã?try  ! <1/0W ; µ? 
P? 42E    ¯ <f() < 	  §Ö`nforman } Áavailable toì¼program durË·vhqpW"/a ò   p  Ù	Ù q¶ —!a  6â€¦” t> 89 isR 0alsýL1â€˜­Ùe way out.â€™0 	  hËRvalue” õãis determined ¸Elast	N º -‚d.  SinctÊ Ualway	Is, aO uPX u¬;c will X ðbe '
        'thce\n'
  ù'last one executed: 	 ú   >>> def foo()+ a   ...X 9try "  ! ö return 'try'\n"Ž ( ofinallH , L Á ½     'E & ð'Additional informa � on excep ðs can be found in sec 	I E/ 1, a' 	N ÷using the "raise" statement to ¾zgeneratÓ� ?may� Q The [ Z .¢ 	 aChangeÎ ðversion 3.8: Prior’ BPyth È, a "continu¸ 	P ‘was illegIé ~À" clause dueZ àa problem with+ 	J AimplŠ Ã Ð,
 'types': 'ç �standard  ¨ hierarchyG O  '* *  ÐBelow is a liKf¥ m òs that are built into ,'. Ç€  'ExtenZ_ ðmodules (writtenRðC, Java, or other languages, depend@ onŠ P 
1)®†define aÞ +³s.  Future õKs ofO Í  g"adcs· ¼ E p‘ (e.g., rª*alÿ ‹numbers,_ ð	efficiently stored arrayŠ  N eg5 ú etc.), although such` Ü sa pwill ofY bek�vided via< <ð library insteadiµ;  'V fSome o	s descri!b2 $ñ ain a paragraphA;ingN ðâ€˜special attributes.â€™ Ç!sea u0proË a acces“6Y  'th3:  '– ¹!no· enBfor ral use.� *irkN'È  %cJ Å "f_M<Non¬  y !ise0 ha| 2sle valu˜ "re– bobjectFi$  I SThis ;  äNaed thrj Æ Ü -in name "° *".+It   �  usK ‘o signifysaabsenc?a†  .‘many situ>*s,_ Zb  te lÀned from funõctions that donâ€™t explicitly return\n'
  û'   anything. Its truth value is false.5  ëNotImplemented ò
   This type has a singled . !erl  Éobject with ® Nthis` ­ .g ; þis accessed through the built-in nameJ "Ë ô". Numeric methods and rich comparison O cshouldy ½ õ 0 ifŽ ¤y do not i>  ` operaË
ü >forb  Ô 0 ðnds provided.  (The interpreter will^ Pn try	 L –reflected‚ ð , or some otherÿlback, depending onO — £tor.)  It  ï @be e´al ÿin a boolean contextpu   See t †  	¦arithmeticÂ ÿs for more details] ò
Changed in version 3.9: Eµ  o ) , a°Ô hå  ^`deprecð. While it curren²&1s a™^e, itQ Ü“emit a "DS °ionWarning"ÙPraise&  TypeError"º 	daa efutureŸof PythonKoEllips²xÐliteral "..."ï/th 	8$ "Ú  ".Üœ5?tru4¡"numbers.N "u0The¬`re cre#S by n�¶ �Ù ed&{results‹y_ -"orN  ö 2fun]*. Z _ ˆ0s aÛÖmmutable; oncÐ Stheirqnever cz£#  q   6W ñof course strongãl*þ to mathematicalŸ ~‚, but sup toÊa limit�@s ofs  *alú rh2sen* b iÎ@mputå  #Æ  [
Y ƒ  Ýú�classes,�àuted by\n'
     ð'   "__repr__()" and "st ò, have the following properties:\n'
J   ' ð+   * They are valid numeric literals which, when passed tor 9ir ] ^classb à  constructor,� àduce an objectÂ  ¶  Ä €value of_ 
] �original` ³ .  í  Mô	esentation is in base 10è ossibleS @LeadÀ ‚zeros, p; €y except �a single # š before aà _decimß apoint,£Ÿnot shown™ PTrail€  w š _after™ PQA sigyÌ R only` `number—negativ† Python disqðuishes between integers, floa!  S ëb 	Ç>and:tcomplex3 X"Ç 0s.I~ Nral"U    }&se’á elements fromðmathematical set	° ß ` P(posiD9Q)?œ  ¨Àre two types} p 1   þ ¿ers ("int")¥ l 	> šòan unlimited range, su;/toQ ñavailable (virtual) memoryoa.  Foraapurposv	X_shift_ €nd mask jH¶s, a binaryÐ  ËŠassumed,õk ©$  «rÿº!edq varianO2â€™~ P ¿ ZÏa givesÿ Pillus of”Àinfinite str<	/ofÑ¡bits exten&_ leftppBoolean,Obool- 6PtruthÃ€ues Falsbqd True.g Å¾ ‰s¸ ú  V �1s "Q } S "�	?the_  àÞ õ s.û   ]à is a subtype eof '
  i'the\n  ô!integer type, and Boolean values behave like the 0b ?andb ñ1, respectively, in almost all contexts,^ šexception_ _beinga �that whenL òverted to a stringY  ïs ""False"" orQ P""Tru# Êare returnedÆ .<  _äThe rules for j¡representaè  d   "nd· Jgiveý ¾C¡meaningfula CrpreY �of shiftÕ‘mask operu s¯ àinvolving nega®S Ogersï P"numb* ÿ Real" ("float")j eThese 	ð machine-level double precisK  ˜ 	Ã_point_ ‹ P You `!at]�mercy of punderlyW  L àarchitecture ( ôC or Java implemÊ)æ # acÅeQrange”Phandl€ úof overflow. Python does not supportsingle-² 8 + ;ÿ  saês�šprocessord Ó°memory usag!atcqusually\ areasonuª    se' ± ’dwarfed b>  @head©? aobject¬ @, soU r*iÙ3no “ Àto complicat½ pe languÊ àwith two kinds} 	n„Â 	`,CŒ  ex/— /ex1. Ó  as a pair¸ ÏN° b
Ê    ÃËsame caveats#Opplyb aô6 X  W ArealÜimaginary parc Oof ab 
  "z" can bXPtrievO`hrough+ Od-on° Ðttributes "z.› "œ 0"z.Ÿ "Õ�Sequence€ ìñfinite ordered seÙ2dexDnon-ø Ã.˜ðbuilt-in function "len()" õ
returns the number of '
  ‰'items\n    ' ña sequence. WhenF jlength � is *n*,! Zindexc >seta icontaiœ Às 0, 1, â€¦,Q Ð-1.  Item *i*s � J *a*c iÃ  ûselected by "a[i]".‡  C   Sò ñs also support slicing:H R:j]" ]  ' !l C^ withQ Ñ*k* such thatÎ P"<="  ’"<" *j*. d®used as anL Ñexpression, a” e{¨ $ ëûsame type.  This,_mplie1 �  @ µ 0set_ "re:Red soÁ ïit starts at 0V5omeM 4[�â€œextend` g1â€�NŠ a third¿ ®â€œstepâ€�"”parameterª/:k¬!ofC ³ í +*xR^whereb Ñ"x = i + n*k"¦× ">=" "0" andÜ4x* ÜG  
wàre distinguish ccording tû eir mutability:L  Q   Im. l�% À   An objectEMan i8 Rú cannot change once it¢�ñ   created.  (If,q Preferqsì ZotherZ 1 /s,Â bthese 6 ) r may be1!le¢ Á *d;a howevera @ colV0ion(g •directly Â v*an^ TÀ M 
a+.)+  È¡The follow'�ypes areÄ s1 �_tring" o 1A s!  
}PvalueoPat re®ºent Unicode  Í á   points. All( ,  " iˆrš"U+0000 -\ ŸU+10FFFF"a 0can£  edX aØ ú.  Python doesnâ€™t have ag o*char*d  €°; instead, W&y Ê  q  lK	ƒ› a  &² »ðwith length "1".õ  The built-in '
  ¹'function\n ! ÿ("ord()" converts a code point from its string form to aP úinteger in the range "0 - 10FFFF"; "chrs N ' �  h  correspond§ 	ë olength $1"Ý ð object. "str.en§  an be usedn )
fa_ @str"7  "bytes" us¡  ³ ±given text m �ing, andK B ?.de™ qachievew›opposite.M  oTuples  [Àitems of a t- ò are arbitrary Python @2s. Q 
"/ofa Âtwo or more i  ^  jðed by comma-separated list� P ó expressions.  A² Rof ona p (a â€˜‰±letonâ€™) cæT Ž PaffixÃ (0mmaÜ6an u * ( 	Œ/byb ôitself does not createqÿ, since parentheses must beQ `usable²` group´ 'of©  s)sn empty& 
± ` D @pair&¦ �BÈ !A ø^Á is an immutà harray.§ >	Ä _8-bit_ ] @, re5 ena3by ÆsÇÌ0 <= x < 256Ù K1   Í ð literals (like "b\'abc\'")ã¤°(?()"± ³constructorµ›4Ó 0Jlso,Ž# b È^ qüQs viaÃ "  &	rlmethod#p MÅsequenc…& š  ch^pd after‘ y™;:d. ô /ThÌ€subscrip&�@slic.@nota sp  asj z targetb ä¡assignment_ ð"del" (delete) state s0�|Àe currently õtwo intrinsic mutable sequence types:\n'
  '  _Lists ñ'   The items of a list are arbitrary Python objects.  P  x ?area òformed by placing a comma-separatedv êof expressions` /in_ 0squ¯ `brackeŸ á(Note that theÊ ûe no special case^ oneededb 0to Ä ¥ &û length 0 or 1.)8  ƒ¯Byte Array‰pA bytea$ lU is aù .°y¡1cre<	ˆ/by    µ built-in "k ÿ()" constructor.  Aside from beingQ ‘a(and h“`unhash§!),Î  µ 0s oŠJwiseÖoprovid:€the sameperface l ôfunctionality as imŒ Ø /s"³ Ã   ² PextenŽ‘ module "Ð #" ¹ ’s an addi� { examplå  Wb µ 	Ò,Ñ Adoes±a"colleî #s"… .M  2Set ëPse redðent unordered, finit]tâvunique,ZM L� As such,±  y cannot bµ2dexùêany subscript.ŽHowever,b 1theP M "te*o,  Ñ "len() breturnW`numberñúðin a set. Common u#0for sn	fNfast°  meV ðship testing, removô¢duplicates[ p É,Î N PcompuE ð mathematical op	! v .binters&, unionN `differ§q ¶ symmetric  [B   F‘ elementsö¥†i–¡rules appl¢>forâ !diÙ cfkeys. ¹@nume› äP obey^‚ normal ] 
’a F  K°arison: if Xs‰p?ÿequal (e.g., "1"”ð"1.0"), only oneB œ ö ¦¥contained R÷  •¤ðcurrently two inõtrinsic set types:\n'
  ' ~   Sets ð   These represent a mutable^ . ùy are created by the o �built-ina ð#"set()" constructor and can be modified afterwardsd 	` several_ û
methods, such as "add()"..  �   Frozenç In iml 4   %1 "fy ….  As a   : isi€ b  VP*hash¿T*, ite usa@gain"pan elemî*ofa another_ Pset, ½ ¤ ïdictionary keymMappingg ~Qfinit{òs of objects index}`arbitrx 	#" · AsetsÅð  subscript nota¼ ± "a[k]" sele  ×Hitemn 	d >"k"b Afrommå © "a"; this}Pin exdQsionsaÝ>the_ `target`assign¶s†¡"del" statÊæ e	¹ 1fun®_ @"len�qreturnsÉ `numbers   } Þ éP re¹ôcurrently a single inº- ¾½Dm/ieD u 	ÅGnnearly6   bqvalues.%R onlyn   Lb accep3	va¬ AkeysRC ñ containing listÝ^!ie •� I ¿!at\ bcompar2h 0 raÙ0 thwyög‘identity,Preaso· ® Athat `efficiO2impYa	/ofa 	ë prequirea€keyâ€™s Ð Ã `to remÅL<ant�sNumeric­ü0for¨Rs obeÁÐnormal rules  	­ nC ² \Òison: if two 3"s  ñe equal (e.g., "1"ð	a o"1.0")` @thenXyAÀinterchangeaõbly to index the same\n'
  '
 ûdictionary entry.&  5 D5 ðies preserve inserM ù order, meaning that keys will † b— µproduced inÀ W   úy were added sequentially overa /thb ù €. Replac« €an exist ðkey does not change} 
_ ë &@howe� PremovQ aƒ and re-.Rng it0add *tob Á  enÐstead of keepe €its old Ò eÎÀare mutable;î ðy can be created by � "{...}"ù Anotaq(see seb 5¿y displays)  ñThe extension modules "dbm.ndbm"R ¿gnu" providõ@addiš €al exampI aof map<’types, asø 9	­R"collÏ sû ž × CR ÄA verÜ F3.7:( ]1dide	� D/on‡› A_ s'PPythoÑãfore 3.6. In C O3.6,L j …&waù`d, but»  Ïconsidered a˜ ix3men%’detail at(°time rather ¿n a languagÓ�guaranteì@CallÖ åå `These ÿ ÷%  CQwhichò2funÉ–call operåO ö w $s)E‹applied:0  ô   User-defined z s( o   A u- ¨ object is»aM L r " ¼Fü ! ÿ s).  It should È ,ð ed with an arguúÃ list contai#¤p numberª
ê?temÿ )asžñâ€™s formal parametero •`SpeciaŽ�tributes¬*  ±/+-  	6 
" +§C| At  ‘ð           | Mea_ning  &'
 &'| i   |\n  	 /|=  	6 
" o ²| "__doc__"€  ð| The functionâ€™s documenta  + 
¯ � Writable q    ø| string, or "None" if, o  o !punavail² ÿ; not inherited by   o <¸subclasses.º  o 	1 /+-  	6 
" +œ-Oname. -  * 	é 	¯ |-	1 
¢ ¶   	$ 
" à @qualº ä à  *+ SifiedÂ	¯ à 
F   | † ò*.  New in version 3.3Vo 8  	1 
%  	$ 
" O^modul1O â ‚ of the )  Ã 	­ M/Çñ  was defined ink p o    M¼¾d·W o 	1 
~’  	$ 
" ¼�defaultsáA tuple contai, Ý 8-1argvñ values for thosg§?o °s that have2,o À         '|   V|\n'
 ' |  ù| or "None" if no arguments have  Q 
K o !üa default value.– o 	1 /+-  	6 
" +M¬"__code__"¼ `| The  ð object representing. 	­  | Writable M!to òmpiled function bodyXo  g  o 	1 
#  	$ 
" M|globalsPð| A reference to í !diã Mary š€Read-onl Þ 
¾
 Á| that holdsk OBâ€™s# =ù P variQs â€”{  â ‡  â !Ánamespace ofi ‘module inS à =Qwhichh L@ was _ined.o ža r›2   ëQdsupporç O	­ ë/`arbitrùM¿attributes.+ 	  
­Á  	$ 
" ëmclosur;|‚‘or a tupl¢@cellŒ,at+ë-ñcontain bindings for© ¹Z  x!²KFfreeôO. SeeÀ  |           ð| below for information on the/  '
  "'|  9|\n  
$   ò| "cell_contents" attribute.$ 	Q 
K o 	1 /+-  	6 
" +Þ �"__annot)Bs__"¹ À   | A dict ß waining + 9   ­ ‘| WritablhÞ 
j 	 ð| of parameters.  The keys  ¿o 6  o !Ü 1arey ~ names,Þ j  o !ñand "\'return\'"¥×  ~j  q #×Ó, if providedš¾j  o 	€
^r  	$ 
" œ™kwdefault›œ) Yœ=Êkeyword-only¦1o   MløDMostW´äs labelled â€œÎ‘â€� check(@type9 	?thef û assigned value.$  -BFunc³ò	bjects also support gett‡4d s �rbitraryP Ý ñ, which can be used,+°example, toÀ:achÎ�metadata` Cto f³  ³pRegularH T dot-ˆ1 isx  j :getg ?andb †set suchT ps. *Not¹!at–�current iÉ 2menÎ
`  ºa ]sÉ j  :�user-defiÊí 	¸b … P …built-inp Ps may”çAed i±M  À  future.*\n5'
  9'\n  ðA cell object has the attribute " ÿ_contents". This can beQ ±used to getK �value of  M `, as wu Has s& .Q  ± ðdditional informa Ð about a func ¡â€™s defin. ² 	óretrieved from its codeQ; see½ pdescrip^  Ð 	M�internal³ °types below@U "  ™ ` acces;!inm " /s"P omodule.ÿInstance methodsM JAn i( ù ô combines a class,	 1 	?andb ´any callablU0 (nº±lly a user-« ƒÀ)ß ð   Special read-onO ºò s: "__self__" iØÈ  ¶ ý » ,J  YJ   
:;# 6doc" P ‰œrocument¿P(same0"__[ R__.__P *);± Ÿ"__name__ê j  *  ]   ?__"^  _`  ?   .1 ·w #wa}›ed in, orÄ ONoneÀ �f unavai0MßÓ also supportQÀing (but notmQting)ª 	Ÿarbitrary¶ ‘ì2s o§punderlyg & 5º Uû<? ðs may be created whenU Â ? an©    š¶÷  (perhaps via aî”"atÝ*),¢/ifb GthatiÀE$or6P 	ô 3WÇ 	C  é23by Û Ÿaà µ “ ŠÊ U L!onØ 0	MR/s,`  0 š´º? Q, and«â 	e &a À is said to õ'be bound.  The new methodâ€™s "__func__" attribute '
  Y'is\n  Ðthe original C Ëtion object.2  A óWhen an instance– C ú is created by retrieving aŸ Oclas¢ æ P qfrom a / 5 orw A, it@self	ì Ã 0is T  itB T, andS   S F  Ö ?theM  - D€ underlyó e Ô `5aalled,Ä n � (1)Î cD jinsert­ 	Jç_  V  >ñ__") in front of› ùargument list.  F¾	e Owhena 0"C"®  ñwhich contains a definiVfor aÒ	` o"f()",b  ÷""xf Õ€of "C", ( q"x.f(1)( pequivalÛ 	f /tob C ¯C.f(x, 1)"	4pderivedw$	“ x— óF3â€œÕ â€� stored×3"__æZ willÉ�actuallye !be] juso that\ueither c*orb "9?1)"b 7is �%toV P"f(C,²�where "f¼ “	"A²0Notð !atõ ¢transforma  É-*toë n
Íðhappens each timz e$is~*ede  SL ‚ ð.  In some cases,]ò ruitful optimizÙ  NúaassignKñto a local variable| ' ¡ 1 À. Also noticø r ˆ 
sTonly (	ö?fora Quser-U W0unc»As; o¢ £ ° <0s (>�all non-Q 3 W) are™‚without -Àormation.  IUt '
  Y'is\n  ÿ-also important to note that user-defined functions which areQ ðttributes of a class instance7  b   converteds _boundN ñmethods; this *only* happe‰ een theœ j is anø a� ` !ofA ¥ ."  Å   Generatorr UA  B or Ä 7Ausess ÿ"yield" statement (seS!sezQ The 6 5 )ó µcalled a *g¡ 	ë¼*ã  SuÐ´ r, when V ñ , always return`#it	e nobject5#  û `can beVõQexecuk`e body/Í*: É � ?inga  8 – dâ€™s " Å.__next__()"Š€ill causès2 ž© ð	until it provides a valuÓ 1ingÖ	ã² ÷@.  Wo Ã v s  b "y)	e /or` @fall‚àÑend, a "StopI¾ ion" excepÕ F@raisF*ndx/th#b  wO have reachÓdhe endÒ0set ,sR	Á b_ rp,ed³î †Coroutin–4is è usÌ`"async /" : � 0= *c� O*.  V	û C ,Ó &  p` "* e�.  It mayGÏtain "await"J pexpress¼�, as well ä £with" and  Jfor"­sŽA1ee I Å�O#s À< ­ Au†hronous Ì×;asß¨#is r(³ Ñ /  Ç  ü	-/an` � Ð iterator objõect which can be used in an "async '
  y'for"\n  ñstatement to execute the body of ›function.C  R qCalling9 Š ôhronous iteratorâ€™s "a Ï.__anext__()¤ ñmethod will returç ³*awaitable*Qwhen  e.   å ð	until it provides a valuLÀ z"yield"Lexpress W‡  C7Xsžrempty "È &" €*org _fallsÂ "of—Ðend, a "StopAôIb ion" excep´p is rai:andc ?thea ·€Áhave reachedã4end':set` /of_ fsq1be b/ed[”Built-in W<A b) @ obj1iãõwrapper around a CQ „ Ï€Examplesæ [ às are "len()" a€"math.si þ (" "˜aÿVndardµ ðmodule). The numb¬ nd type^ z@arguÕŸ Ñdetermined byµô Š Special\ _read-¿ ñ
only attributes: "__doc__Ò  }  è1docŠ aŒQ ðstring, or "None" if unavailÞ;b Gnamec 	Ép b  = F CselfF  ¬$tor r(but seú � ­?m);O 2"__¥K  ô  c  !   h› J wasa0def‘a /in£@ '6%@This�@realÏp differ€disguiseÎ a—Ê ,Ç ?thib Àtime containN$an†0pas�!to"Š  a Ñ ô   implicit extra Þr.  An e ° þ  ž p"alist.
Ànd()", assum© * * a & ¸ _. In ï Qcase,Ñ sOB
- Éƒ	Ì’ðobject denoted bõ y *alist*.\n'
  ' ®   Classes  ù are callable.  These objects normally act as p factori` ñ for new instances of themselves, but variationsˆ ‹possibleh /orÂ cÞ ò types that override "__new__()"Ó ” argument† Q 2allˆ  7Hd toJ € and, inÅ  v ßical case, toP q"__initˆ  M   aializeD Ì$ INq   l¡arbitrary )Öes can be madó: byn�defininga a .Ô cmethod"iri Ë _Modul4 �ñ a basic organiz#pal unitÛ ÀPython code,— 4 ° pcreatedâ ðthe import systemÍäinvoked either' "( "P PstateE1, o/  	‚ing funcÅosuch aq V Blib.` !_m1()"Á €built-in`! ¾AŸ7 � ²ñ  has a namespacõ l´ Aa di«  3 K(thiÚiÂ   C= ‚referencX   þ"__globals__" attribute of® 2oeD ß U).  AA k %M atranslë¢to lookups•'isñ ì, e.g., "m.x" ô ¯equivalentb  o5  __ ³__["x"]". A® .@ doe2st conta) ¤Q {1usefP (sinÃút isnâ€™t neededNoncea  ‘V ? ñ _done)  {`assignôa updatjeø Gâ€™sk ~ionary,� zA = 1~q 9"m.`' « 4PreBP(writÆ)} s:Q  ”i(	¾ 	Ð ' ;» o"__doc@ 1docWbastring�"None" iü aunavaip;ž QannotA 90(opL0al)²±Àonary\n'
     ð$'   containing *variable annotations* collected dur( ò module body\n'
L    P Pexecu: ñ; "__file__" is the pathname of   É from which M >the_ m| öwas loaded, if it  Q  a ] W. The‰ Q ðattribute may be missæ pfor cer` typesµ  ªs, such as² C_ 1 ° that are sXñcally linked intoþinterpreter; forN ¤extension X r dynamiW Pða shared library,$	_.is` ¤
H V:  õ   Special read-only h:�GdictÎ ;â€™Q ,Ospac	 Pas a G ëionary object.‹  ð   **CPython implemen‘õon detail:** Becaus¥Cway 4 O cclears�� Aies,ÔÚ  `y willh	�G .ed` HwhenI �falls outŽ scope even ½ sti 	f /haô ñlive references.  To avoid this, copyƒ ] zor keepÿ±	`aroundçAle ua8its�directlyÃßCustom classeÏ    ¸ w3typ@creaÍ"byE p defini³~?(sey 0sec,   C‚ = S).  AT hŸ¿l*ed4bC Øo F²WatranslÙ 	ó.toT�lookups iZi…Â, e.g., "C.xµW J P"C.__ð__["x"]" (although2!reœ €a number³Phooksî^allow¬  †¡other mean„Plocat¢Ts). W)  
nôQnot f� g e·E asearch'Cinue6_e bas — w3is < í 2 bes use�C3 methoü QresolLc order7²behaves cor2 Î`e presÉ
ù ð of\n'
         ñ" '   â€˜diamondâ€™ inheritance structures where t õare multiple\n'
   O A ðpaths leading back to a common e þstor. AdditionalQ  details on€ ñ C3 MRO used by Python can be found i* J  €ocumentak   accompanyœ þthe 2.3 release at? Ñhttps://www.pw ã.org/download/< »s/2.3/mro/.D  p   Whenðlass attribute refereƒa(for c ù"C", say) would y~yield ab < ðmethod object, it is transforme3 ™Rn insü2 P C ÷ whose "__self__"½ sis "C".Ý #it¯ ¢ 	µ ¯  s�"c ~ °  µ� [rappe.byÀ  4 e ‘. See secPImple+ ºDescriptorsu>fora 0ano'@ way‰Vwhichõs retrieved fromý:may] _diffe`  6 tñactually containÈ@ its™dict__"„C^}`assigný qs updatø…Pâ€™s Z  ¬:ry,³ ?nev²  s4 p of a beœ¡ A| ëðcalled (see above)\fa2 	nÛ³D obelow)Ž wSpecialÓ:o@name X#he€   ; Qmodul  
“ s�  ./  ? D  2€ was defñ^  ]| 	_ /th   - ¾7 ä] â y Qspace_  ¬s` aò/tu�Y  A 0es,Ñ  n Porder²their occurô	Ä /in#T Q list© 3doc§  a ,Ï dø	_ ~string,d ø or "None" if uno@anno§!on0(op40al)UÔ r§*variable P à* collected du› 
pÔ ­  body execuŠ ÄÀ'Class insta•nces\n'
  ó'   A class instance is created by calling a' Éobject (see K above).a Ðhas a namespaq ±mplemented  ªdictionaryc ^whicha ñ is the first plS !n - ð attribute refereß are searched±  wWhen an< Àis not foundl Rre, a 8Câ€™s$	/hau 	^ qby that,_ � ñ  continues with ¬ç es.  If®  Ö¿  at a\Îuser-defined` 1fun“ ÿ1, iD ðtransformed into6Hjmethodf ? ` úwhose "__self__"| ÞW £.  Static ` /an°  '" u s÷Walso ·  ; É¼n underœ @â€œC"Pesâ€� e>I» #ûDescriptors for another waÈ.inf ¯6s oÆöretrieved via it­<s m] OdiffÇ AfromCÁctually storÁ ;Í0"__Š2__"U	×.noÄ ; 
»t-| ^ - J `"__get¾S__()"Ê ½ –Àed to satisfBŒe lookupÒ^ A`assign|sÑ@dele{�s update{ · M  #­t, never} /   D Ëú sú  or?del isÊ	Ÿ ´ /ea "ofÛ  ± �  ) ÷ª Ÿ directlyJ°s can preteño be numbers, sequJ, ormapping(  if‚cy haveñ certain special= ýSž¬S- ;ƒå 6  ‚L!s:”0ict« ô;ƒ 1"__ : ƒ1 ” 3I/O‰1s (ÒPknown=Dfile ð)\n'
          'ð   A *file object* represents an open   ð.  Various shortcu! ure\n'
  ñ'   available to createB b €s: the "Z Ù()" built-in H Ÿfunction,`  Ónd also "os.pG , %fd 2andh @makeÁ  l 	c nmethod` ”of socket±   (M ôperhaps by other £ Rs or M sN €provided8 ûextension modules).1  T   Th›ås "sys.stdin", Pout" ¡  oerr" aš°initializedœ ä Ðcorresponding  ¥ïinterpreterâ€™Þ  ñstandard input, output� àerror streams;Œy– B allVóNtext AmodeP  tÀefore followR  ¡ ¢face defing/th– ÿ"io.TextIOBase" abstract classˆI�nal type RA few @ use€ternallyøK@expo* *toù½ Puser."iré iðs may change with future verf@s of&U7ØP, but& ž0men[ Qed hekÏr completene(@   C°L) ! mp *byte-l Áiled* executG[Pytho Ocode    �L  " *5ð difference between a   þ`a'%  å* ais tha1 qcontain8	jexpliciÞ T   reœ  toˆW  r  globals (D6Ê in which it</was ),8 +leý · 0no  Bext;aŒ   ƒ�ault argu1q valuesØAstor	Ì ?,° /no!in= ¢€(because y7z ªcalculatedb aa õrun-time).  Unlikevª (s,!Û 	Ô2immŸ7 � Lfain noä°s (directly©$in )s	a _ 	`¶–ðSpecial read-only attributes:õ "co_name" gives the function '
  '& 9;\n   D ²argcount" iE ðtotal number of posiU Ïal argumentsN §(including4 V-only9 G and Jwith­ defaulta �values);ü 0pos[ ¿ ¹ 	ñ Æ ’ ` ß  Ë  ­    Œ I  X/kwŸ qkeyword� P � qnlocalsÒ	?the` 4: ú variables used by^� N 2ª0varƒ� ð a tuple contain- º!  n° ¦ `(startL ¤ Q …  Z ) cellvarž y 	¤ ,òthat are referencOenested°sÓFfree‹ P =
 A ½U Acode
aQ 0str8�represenE @@sequ¯  ”@byteG q instrucsROonstP
yliteral_ž z Ë ËÌ F	´	§û
b @filef e   ± from which	a /wa‚compiledÃ ·firstlinenod @rst  v° ãO alnotabJ #a ËAenco… À @mappà ¿ b
¸ offsets to‹ ñs (for details seeÿ _sourcL!of' ³interpreter‚stacksiz“ ¢ Šrequired( ±  = ý Cflagg n k Eger þ aM* 
a ?for_  “  L · .%  GT{Qollowk�lag bitsøPdefinë!orœ‹  ":! 
‘ o"0x04"` iyð t if the functiõon uses the "*arguments" syntax to accept '
  Y'an\n  õarbitrary number of positional _ û; bit "0x08" is se` /if`  ¦ @funcP ¸ �*keyword¸ ¡ _ F ¨  %20¨ !if-‡ Ois aN «generator.  ;¡Future fea pdeclaraé Ás ("from __f% ‹__ impor4¯division")a @also4 {ð s in "co_flags"æúindicate whether a code÷oobject_ õwas compiled with a particularØ €enabled:†  Z2000"e /isa  $|u " 
Z } ;` @bits’ r10" and  � @were9d5°earlier verl?s oªoPythonúOo 
–ðare reserved for interI?use[ $IfÇº@ repR dnts a Ã,Ñ¿irst item iÞ 1@consi31doc1©p stringõ©O, orrÿ"None" if undefinedÖ bFrame Ï )	" ò ` execuQ  fD ðs.  They may occu`¨ ”tracebackw Ñ (see below),- «a`passedQ	¯registeredb �sð   Special read-only attributes: "f_² ¶!toáŠprevious_stack• &‚ (towardïpcaller)Ò ¾@thisÆ õobottomP j |;   _  "helÖ0 beF¯ev	L o a ± [ elocals] !di2 ˜už�look up * N @vari¬sR DglobS D  �  * I  ‹builtin’ ? b p-in (in:ºsic) names;¤Ÿ"f_lasti"` 3givÁáprecise instruô   (/ žðan index into the\n'
   '	 ñbytecode string of the  Âobject).\n'
.   '   €  AccessB 0"f_> ð" raises an audit ievent N "f ß.__getattr__"b ð with arguments 8 t" and "r "ª ðSpecial writable u ñibutes: "f_trace", if not "Non ?s a˜ ñfunction called for various ð As du\ a execu0 	_(this` ¡is used byšðdebugger). Normallycj p is tri ‰ Q ðeach new source line - � ° can be disu 0set¼K /_D Ïs" to "False‹PImpleÏaòs *may* allow per-op3 6s] Êbe requestedG/by¡ ½ Ø_S « PTrue"Hrte that{may leaa /toa ðundefined interpreter behaviourFRexcepá V?theP ~ T`escapeû  –  beN, dõ!"f£1no"$ â0urr� ºt numberý‘frame â€”$ j 	«
@Pfrom ªQin a ¡ Í AjumpÇ Ì Rgiven|	^ O(onlÌ Y : Ábottom-most « d).  A ÄiZ a Jumpl@commAñ(aka Set Next Stat•)s & 4to CqFDÜûs support one method:’  UÞ ‹.clear()"  1 s   Thisd  : sQ¡ reference�Qlocal¦ ç[s helïP!  …™ a  Also* ˜ � belonged´Êa generator,¯ÿ&  3  ª£finalized.Ú ¶helps breakÔ 
\ _cycleL�   involvÓ° £(_0exa9@ wheÐ0tch) /anmÛ‰1stoè it‡qaceback la?useMñ   "RuntimeErrorµ<i¡½ Bis cÈ*lygðng.\n'
          e'\n'
  '
 ûNew in version 3.4.+  þ   Traceback objects# & ð  represent a st@ tJ ù of an exception.  ¬ A_ ; … ù is implicitly created when^ 
\ occurs,b ýand may also be ex^ ¯by callingB u"types.0_Type"`o   ForÎ õ "s,Ú ÿthe search for anˆ [ð handler unwinds @ Pexecuy•š, at each*unwound` …level a Ÿ ”@nserŠ€in frontï w currentQ I M.  WÂÅ ±is entered,É TP  Ž ñmade available to9 Àprogram. (SePcThe tryQ àstatement.) ItZ paccessiV aX¤third itemó _tupleP ðreturned by "sys.exc_info()", ŠU 5"__?__"M ”attributex gcaughtb7  x ©ñ contains no suitBŒ�
7­ ` ôis written (nicely formatted)šústandard error stream;c /if`  » i`preter¤ ’active, i· Ý	�/thµruser as±Flast›æV 4 Ûs¦ $upØ*oroL  A d	�mine howú¥"tb_next" 5s\ _shoul÷�be linked\  ¼r a fullHî÷Special read-onlyŽ  : ¤ Ðframe" pointso  Þ	¥Æ@ z ·;` Âlineno" give¾  

onumber_ QwhereQk[3reda Óasti" indicatd 	Á oprecisjainstru— . ˜ž ‘  ~ & ð in the\n'
       ' ò4  traceback may differ from the line number of its frame object '
 G ˜   'if\n'   H ÿ)exception occurred in a "try" statement with no matchingQ M ¢ clause or6 “a finally .<  œ áAccessing "tb_Û ð" raises an audit _eventB "
Ó.__getattr__"‘ 0rguÕ  s $ v" and "g "¡ ðSpecial writable c aibute:³ �next" is®  ` level^	‹?the¿  stû‚ (towardL a where\ uÂ*),ÿ/orb �"None" ifG  re¬ 6no « RChang5@vers‡ e3.7: T¾‡Ês can now bež ¯explicitly¦ ÂinstantiatedÿÁPython code,¼ È ¿ » "ˆ
g oAexisIh "ce© `be updt DSlicxsÄ 	" ð are used to represasF Zs for¸ "ÀŸitem__()"` ámethods.  Theya €also creÃ 0 byã± built-in "m N @funcú 4   –read-only€†s: "starËlower bound;æ OstopÝ C6upp< U"step^  À value; eachÊÝ	kromitted>sÉßhave any type Ë‰âs support one ©:Å £û.indices(self, length)0  ?  #isr @ tak9 RÃle integer a
" *[ *PP ðcomputes informa$a about^± H tha 	€
_ àwould describe—Rappli(€a sequenif® 	_  $s¡ðIt returns a tuple8Ethreás; respectivel4s­/ar®!  *ðF  *Ó#* Â Y# 0ep*ðstride\n'
         4 '  ô.length of the slice. Missing or out-of-bounds indices are\n'
E  Q òhandled in a manner consistent with regularo +s.K  þ	   Static method objects' * à provide a wayì `defeatã /thÊ àtransformation4 Bfunc € ; to’  Ÿdescribed© ¯above. A sÜ  0 is¬ �rapper ar}¯ any otherP ú	, usually a user-defined© P. WheŸ| P 	l � ðretrieved from a class# šinstance,b² B act² Pretur¬ !isŒwÿ ïp, whichŠ ?not³ !su™ ˜ ,0fur. Ê.M
³ ß0not› ðmselves callable, although     y Æ 
] ¢Ã ?are¡ àare created by] Ÿ built-inK "ÝÈ1()"…tructorrCÝ= Ñ g A	+ P, liko„ 
~,Äa &pÚÿý� P thatw#er. ays% 	�mÂ ;is ÜÚ æ#ndÞ Ûús. The behaviourÆ /ofa O 
 s upon sucY al5 !,Q ®under â€œUãosâ€�. ¿ µ
° Od c! "Æ æN ”,
 'types&cs': 'F3¬7$'* 
„ !  Z ’‡  i¸1s. ½i Oonlym Coper 6\ U ·!toI it:c` "6 û(argument-list)"ˆ. Š QThereÉ!reç¿two flavors¤:$Ð '
            ä'functions\n'
  õ'and user-defined 2 ÿ
.  Both support the same I Poperak Ÿ (to calls  I f R), bu\ ’implementF ÿis different, hencz ?thek B ï object types./  SSee FJ )iê ñs for more informº  ^ A,
 'k Âmapping': 'M   Tƒ ¿ â€” "dict"u /'* ,  3A *~ *þ ÿmaps *hashable* values to arbitraryÞ'=8Ù �s are mut\ r ps.  The!Ps curÍQly on ÑŸ'standardÖ Ó É,”*Fÿionary*.  (For other containers sem  Œobuilt-o àin "list", "se  1ð"tuple" classes,   K b"coller"K�module.)o  &A ã ‚â€™s keyn‡*almost*ÀÔB.  VÝ® P'that®o 7not% edat is,/W@ing /s,é ³ oies ork ¨42$ (ž Â compared by| 1 raÙOthanu #byyo àidentity) may è  beþ2d aU¡.  Numericas  æG‡Oobeyn  nbl rule.n_ Ü ðison: if two numb¬k / oe equaY`'(suchÉ 1"1"‘`"1.0")$n dy can ñ e ð interchangeably_indexß êpy entry…ÃNote howeverB/siÃ'Ý  utû OstorÍõ 'floating-point-¢as approxi~0s i­ usuallÏ`unwiseß /usn @themLÜ  î¸!Di
 ar}RcreatÓ@placEaé�ma-separ � kŸ of "key:’ À  'value" paü&irs within braces, for example: "{\'jack\': 4098, '
  Þ"'sjoerd':\n" Ð'4127}" or "{E $: U  ,    B P\'}",) oby them Ÿ'"dict"\n‰  ß'constructor."  `class Y Ÿ(**kwarg)) Ÿmapping, 2 �iterable3 { ñ    Return a new® ðionary initialized from an opt lDBposi l ôargument and a possibly empty set of keyword - sva   Dicˆ ðries can be created bg Ïveral means:¬  ñ   * Use a comma-separX 1lis½ ÷ "key: value" pa[„ ,\>f  "m'Nl Z } î  prehensionï €±"{x: x ** 2Ox inGŸrange(10)… $ ãWtype ¸!: áC()",
 Ÿ[(\'foo\'}ß100), ('bar',3V200)]V Ðfoo=100, bar= HPIf noJ  is given,ˆ0 m �/ryI$isöAR   If‡o ª it #a žn Ÿobject, a$¯ › )—@sameü-=</asm  ä� o ‘ Ñ.  Otherwise,h §]@must&a“*e*n �Each itemà ¨ <  e oitselfl /  Bo Âexactly two é °s.  The firŠŽ Ne�   'becomes azn !in:
! ‰d ðsecond object th\e '
  ÿ'corresponding\n# ò$   value.  If a key occurs more than once, the last1 q 0for2 tG p qbecomesP 	¢ Y !in ÿ new dictionary.O   Í òkeyword arguments are givenÍ !  /ndØ _theirl A^ �added toÂ ¾ Ñ created from ŒAposiï lk Ì ¯bbeing z òis already presentë o · ’ o  ó&s replacÁE × 2Š  ó    To illustrat¢`followpexample¯l return aß©Oequaðto "{"one": 1, "two": 2
 0hre O3}":¯  ´q>>> a =ðÐ(one=1, two=2¾oree=3)? "? ¡b = {'one'› Q'two'›  't› Ž': 3}\n"&D cƒ Qzip([M !, J   G `], [1,ó O3]))Q dQ #[(G S2), (Z 1 Ÿ _, 3)]P eP {Ö !, O 	ö }J fJ 4ã  *G 'v`a == b c d e f°: OTrue   €   ProviÇ [×#s 4cfirst ù_ onlyð�works foÓ0key¡!at4ÿvalid Python identifiers.  Otherwise, ann >  R Þ ¿can be usedéQThese¦  ­PoperaD¾ Úïies support (açrefore,ª  ustom mappd0typY Uhould` Otoo)olist(dæ'Ž À      Returnñ a list of all the keys used in ìdictionary '
  '*d*.\n  Ÿ   len(d)  v RRetur• `number¸ _items¬  ˜  od[key]‚  ˜  Ž  – €*d* withOÿ *key*.  Raises aHß"KeyError" ifn 	N t is notø ?map…ð   If a subclass¶  ëa defin§ ÿmethod "__missing__()"¾ 2andç º 	´ �present,^"up" operai¿ calls thatk –  ^m 	Ì– ÿ as argument.  The y  Åathen ryso 	Bor rß€whatever£9 4ed  @d byø K 		pQkey)"€. No oth÷,sY · % Ovoken 0)".	‚  )"Ê  m/d,—Àn 	"is'-d.W¢must be a ½ €; it canz ã  + nl 
ÿnstance variable:.  Ûr   >>> "€Counter(')M 7 1... Hdef APself,B  G I/ 0¬ 4 = ª e"R  Ü ¯['red']\n"ß '   { K _ += 1P 0 + 'v  1ö  2 âñexample above shows parî i  wov
a"colle
#s._ù ".  A differentÒ'Ú P bÁ 	9by s pdefault{"ëcð = value\n'
          T'\n'
  '
 ÿ	Set "d[key]" to *value*.4  r   del F #  ƒ fRemove† ÿfrom *d*.  Raises a "KeyError" if Ï Ï*key* is notn 	¯in the mapä �key in d^  â ¡turn "TrueÁ `*d* haÙ  U » ï, else "False"œ !?not  $ Equivalent"I  ˜  í Š iter(d) 	%0an C ‘ator over®qkeys of Ïdictionary. 
@This	an 	àshortcut for "r 0(d.g ?())ô oclear(ô "û0allõ 1ms ü  æ Ç     copyŒ #¥‘a shallowI u y   � ¡lassmethodÞ d pqable[, p]< ÖCreate a new /` with f o $ *l _* and1ƒ Os se9
'@   "Ù • 1()"œ  c pthat re�  Ò äæ  JÄ‘ defaultsÕ´None".  AllÕø _refer�to just Jÿ%ingle instance, so it generally doesnâ€™t make senseo  ‹¼ O   Î bø0mutDÐ object such Tÿn empty list.  To getq distinc÷
%@, ust  ‚á comprehensionù ?ead’É ”get(key[,§!R3¨ À for *key* iüf *key* is in the '
  ÿ'dictionary, else\n& 7 å*default*. If   b ãnot given, it ( Os tou ¯"None", soo 	ÿthat this method never raises a "KeyError".G  ¯   items()   ñReturn a new view of[GBâ€™sa � ("(key,value)"m 	²pairs). Seed €ocumenta± y � objects?keyJ ` $. ¼ ç 	d× 90popt$[,„]æ  Ý;à€, removeèRand r6Aits è, 	 vF T/. c w p ðn 	 ©Ô N ÐedU0pop[Z#U Û R#a ?C0)" Q fromÒ º ÆPYC arew ed"ÿ
LIFO (last-in, first-out)À_orderf €	"$"h`useful(ÐdestructivelyA`rate oòaQ 	ô Ò, as often usÔ âset algorithmsU
o 	øis empty, calling Ò 7œ+‚   ChangÁ Ñversion 3.7: ¢y ;ÿ now guaranteed.¦�In priorÒ 	c )s,Ê EwoulÝÏan arbitraryh Akey/§¥rØ_sed(d­ “ðreverse iteratorñ over the keys of <'
  ÿ'dictionary. This\n& 7 ðis a shortcut for "reversed(d.j _())".C  Y pNew in K ion 3.8E ósetdefault(key[,  /])x  Ž °If *key* is–  F&ÿ	, return its value.  If 6¿not, insertp 	m bwith aS  ±*Â T* andu  /. r   p 	Y ¯s to "None³ßupdate([otherc!UA •[  oAkey/\¿ pairs fromð ‚ /*,ï 	 Áwriting exis	  ­B.  RÌ#C   "
Ð)" accepts ei1 an›  ß Ÿobject orË /anÅ 	€iterable (as tuples\ w �D  l 	²length two)Üñkeyword arguments are specified,Èr ý p 	 isA "n Ld!os¾	::2"d.; o(red=1
oblue=2¥Ž/s(N c a new viewÃ å3â€™Ls.  Seeç ?theF	1doc�aÏ d l tsOð   An equality comparison between one "Ã ."¶ † ?and» 	,´will alwaysñr"False"œß also appliesn ?wheG
É -ng¼  toÒOelf:ª  "1ÿ   >>> d = {'a': 1}\n"m 
/ :U == d j '; $ À '\n'
        ö'   d | other\n'
 
 '  ÿ"Create a new dictionary with the merged keys and a ßvalues of *d*n 	 A *ª ö*, which must both be� �ies. Theo k 	g ð take priority when¥ Ë # Osharj  ö .f  UÿNew in version 3.9E Od |=Ó%0UpdÓ ½Ñ2*d*Õ Ô ÿ ¶Ofromg,ê 	Ä ay¾ ei„ð a *mapping* or an *iterable*$BAkey/� m 	Cpair, rOèm †o 	 /¾?   /D�€ies comp¥�equal ifÁ@only ‘they have±ò ¯same "(keyÎS1)" f± (regardlesfÀordering). O ‘ _isons=�(â€˜<â€™p  ! =" V â€˜>
 ÿâ€™) raise "TypeError"ƒ	>àpreserve inserã Ñ `.  Not7/atÆ uKPing a-ñ does not affect‡a K9ñ dded after deleƒ  Ð­¥ /edo ab ?endð   >>> d = {"one": 1, "two": 2
 0hre ß3, "four": 4}‰ O ! "a{'one'h Q'two'h  'th p': 3, 'h 'h "¾ G  · list(d)n 	[n !, k   h e ?]\nb .?s()k  r`   [1,3_3, 4]“ (  º !d[no] = 42- ! Ð"      {'one'Ñ: 42, 'two': 
 ü
hree': 3, 'four': 4}\n"
  ' ÿ>>> del d["two"]\n', (  = None/ ! "| @{'on­ Ä º  Û  k Ç a  Ý ÿ+Changed in version 3.7: Dictionary order is guaranteed to bë PinserS P ñ.  This behavior was an implementa, e Ÿdetail ofÕ ÿPython from 3.6.*  &  ý  ie• 6d dÁviews are re2?ble` 1   Rá = {"one": 1, [¡ "tç"¡"¡"¡%O Ð F1.	&Rlist(ý oed(d))x 	[a v  Ô '	  wo  Ö]ul Ÿ.values()u  Ò`   [4,ÜO2, 1«b Oitema N$[(× a4), ('°B', 3 á 2  æ O, 1)ê ; Æ ˜8˜›ore nowŠ%ŸSee also:†  ò  "types.MappingProxyType" can be us!ÿcreate a read-only4 Q_ of ap  ~"dK Ôu objects- = -  RThe od à returned by "Ñ “.keys()", Ú_" andP 8 i¡"„*É *U�ey provid{dynamicyOn th¶ § ñâ€™s entries, which means that wheG (¬cm/s,ß Athe Ï @refl™ š 3se 6 ÐDictionary viüews can be iterated over to yield their '
  ÿ'respective data,\n& ÿand support membership tests:3  ßlen(dictview)#  �   ReturnÌ 0 nu„ Ò of entries i  \ ionary.H   7˜ -#an~#or~ðhe keys, values or" /ms‰�(represen¾/as¨ p   tuplL sf "(key] ?)"),€   Keys ë° ,arQÿin insertion order.Í ¯This allowÉ rhe creaL  Ï w ,4ÿ)" pairs using "zip()":l "* =2 = !d.] ps(), d.–ð())".  Another way/‘ ed¿same list iÙ ‘ ñ [(v, k) for (k, v¤¿d.items()]"¤A   IÞ  @°s while add €or delet Ë *9ðmay raise a "RuntimeError"Ë@fail3 <2ateô?all¥‘ ñ pChangedÛ@versv€3.7: Dic72ary†à is guaranteed– ó /beë Ö)  xŸ  O •#  ÔÐ"True" if *x*Í ÏpunderlyÓ a Ú?â€™C ×ž…(d Álatter case, `shouldNadNQ/)"Û ©)ò reæ/ed‹. J  p?rat’# ofà ‘`. The þP will:ºŒ 0 ´N/th�MÀ           '\\n'
  ÿ&'   Changed in version 3.8: Dictionary views are now H !re< Oble.i  GKeys^ òset-like since their entrie ¯unique and† _hasha„ ³If all valuP 1 ò, so that "(key,$ r)" pair{ ö � Û  ¤ _ @thenÐ R itemó ” is also ö R.  (Vœ m …p ånot treated asU K	I generally 8 o Ü /.)n 6Forc š ,\!ofæ Popera>Ñs defined for l �abstractl ñbase class "colle˜¡s.abc.Set"™Pavailü  (j �example,'_"==",l Ï"<", or "^")Ê3An t Z of d< usage:s  ñ"   >>> dishes = {'eggs': 2, 'saQ Â': 1, 'bacon "ãÿ "'spam': 500}\n"    l k�=s . (þ� I3  5 è | #3( 
_n = 0" 
 þ1valÏMwa   ...@n +=òX 
print(n?504A  D # iÒ?Î it@ped overË ïthe same orderÖ`(inseru% ª  í@listës'  €[spm   V]Q
d Ö f  þ0[2,Æ 1,¡], B €r object¬qdynamicV0ref2“! cìsP  ó  3delå / ˜2  î  a  ö Y [ÕhÈ g ð # set operationls\n'
  ð"   >>> keys & {'eggs', 'bacon	 ¯salad'}\n"> {+ " ` °^ {'sausageZ _juiceZ 
" (, 6 ™ 1pam> ò,
 'typesmethods': 'M ô "'*   P ñ are functions that ÿcalled using the attribute u P'notaB .m QThereX ótwo flavors: built-in è ÿ (such as "append()"o Ÿon lists)o ôand class instanceb L.  Bu  Ÿdescribedo @withn ª:psupport, mD ó If you access a¯ 5 (aœÓ defined in aÞ Š�amespace¥through an,| ÿget a special object: a *boun·* (alsoÙ H*‰#*)b r. When ' Ï, it will adr  Šo"self"o °argument to…   / ýÌ ¸ ps have ’I
_read-n Fonly€s: "m.__Ÿ P__" iOeè � on whicHe• i �perates, Ûf  ´f    �` imple¹Ü l ¢@Call= �"m(arg-1,Fr-2, ... !n)Þ  col OtelyÑ requivalŽØ  ÷k 0.__Ã 6__(Cm € ¼ g 6Likå‘2s, Ù  Ã@gett› ?Ÿarbitraryo +ö s.  However, siˆ5oactualHŸstored onn  punderly°  F	Â0 ("á __"), sÛ  - /odj Ø  Î>síñdisallowed.  AttempB/tospÔ j  i ð results in an "ü
AttributeError" being '
  ï'raised.  In\n! ôorder to set a method aa  , you need$ ¡explicitly/ P Ÿit on theo punderly¯ ÿfunction object:1  ï   >>> class C; a   ...3defÛ o(self)2  7 Opass€ ?... œ o = C()$ "À .pó.whoami = 'my name is± ¡'  # can'ttOon "è 3the0 q ÿ'   Traceback (most recent call lastÿ  File "<stdin>", line 1, in <module>y  ê 
®2: 'õ 'ùv has notá ""'#?'\nÿ   f tP __^/__Y
K  *	K x Ý ± X B ð"'See The standard type hierarchy for more informa1 x@,
 '+ s}as': 'Mˆ²* †   ˜  onì±pecial oper‚  ã"a {  ª/� access:Œ0"m.Û/",o ‘where *m*R ^ Pand *7 *\ Bes a#pdefined„Šo*m*â€™âsymbol table. :‚sq� be assigd ¯to.  (NoteÛ Othatõ€"import"æ0temvió�t, stricP·peaking, aniÙ  on©íJQ#; x ‘ foo" doet … requireD ‡ edÞ �*foo* ton ð exist, rather iYa sÊ Á(external) *°iÂ*Øam mÙ £ � Asome3.d'® 3A sÎµ„of everytðis "__dict__". This”Œé > àionary containô§á  › †!ifj Àthis\n'
      ø2'dictionary will actually change the moduleâ€™s symbol table, '
 M   ï'but direct\n'   Ñassignment to_ 0"__† ÿ__" attribute is not possible (youp Ÿcan writeo 4"m._ ð[\'a\'] = 1", which defines "m.a"‘ @be "  Ç ¿  ‡ ocanâ€™à Œ  P w ÷ = {}").  Modifying ó , lyò q /noi Ïrecommended.ü  MÎ£s built in†ñ interpreter areTpten lik?is:""<l ‘\'sys\' (m ð-in)>".  If loaded from a fiOAthey|  X � /ask ‰ @ \'os Z I ð\'/usr/local/lib/pythonX.Y/os.pyc\'>"Rð,
 'typesseq': 'Sequence T ð â€” "list", "tuple	 r6"£ /'* ;  QThere*Ôthree basic s  µ  : œ 1s, › qs, and ž P Ñobjects. AddilN p tailor² or processÊ,of0'biOf Adata† Átext stringsÆ ñ
described in dedicated seœs�
J'^  uCommon ·POperaÞ B/'= X  UThe o^  Å  7`follow%/ê `supporÝ }by most>Æf ×“, both muT Snd im  . ‰ ôd'"collJDabc.^" ABCg  isà viŸðto make it easier#0corß ³BmpleËMheseÌ g ›on customjíBThis…æH:‹sm�in ascendŽ!�priorityz  !InZ lQ, *s*À2*t*ÍqAs of( Psame §], *n* ^'*i*,
#*jW kW  ŠBgersl  x*�an arbitr©¯N tha?@meet: yh À    'type anød value restrictions imposed by *s*.\n'
  ' ðThe "in" and "not  RoperaT ühave the same priorities as _ >theb ¶comparison W !. y Á+" (concatenp )ˆ -*"\ p(repeti• )e Z  ± y¯  Æ ÿcorresponding numericP 	^. [3]!  /+-  
8 	# +` 4| O–Ô ‚| Result  ­r| Notes, |p  = |  	# ` ’ "x in s"ƒ 	 ð| "True" if an item ofÖ# i³ Ð 4(1)E p    ô| equal to *x*, else "FalseŸ p H p  	Ðã  
' 	# 2"x ±D|½ AÐ @>Ã'p    @cTs + tà ‡  |ó	›€ )=*t*¡r| (6)(7ƒÐ eÈ* n" or "n *àpivalentå!ad 0*s* ÷  /(2Ð 	|6  ô| itself *n* timh/ p  @d?[i]ˆ | *i*th‰¢, origin 0¸ Ð "(3?   Ð 2À------------G--+- h+\n'
  ¸'| "s[i:j]"  ñ| slice of *s* from *i* to *j*% P a(3)(4) |p 	� ›   
" Ð /:kÒ  Ð &5Ð |é  â| with step *k1+ @! @colen(s)dlength«  Ð €/miÐ ßsmallest item× Ð �/ax ?argÏ 	 Ð €ós.index(x[, i[, j]]~!|   ˜òthe first occurren˜Ð "(8­?   @ °a*x* inîÃ(at or afterˆ /  @p Ói* and beforeg 5*j*Ã à jà C
 
`ƒ.count(x¦‘ à| total number·­s @?°‡ 
 @}@SequÎ! çýsame type also support comparisons.  In‹ðparticular,\n'
      ó$'tuples and lists are compared lexicographically by ting\n'
I  ó'corresponding elements. This means that toF îe equal, everyQ C Z must3 ³ òthe two sequences) `be of  ¡ Nsamef AtypeP Ahave8  ( ü length.  (For full details see \ C6�isons inf  ðhe language refer³ ..)*  nNotes:  r1. WhilÇ A"in"Ù P"not  poperati¤  êÝused only forÒ _simpl0     containàP testð!in<ðgeneral case, some specialin 7¼Ì ó
   (such as "str", "bytesÕ   ñ array") also usø mÎ O 4subp · Vßÿ >>> "gg" in "eggs"e o   Tru8 . �2. Values±q*n* les$Qn "0"�qtreatedý0" (which yields²ax …   empty& l  åü�s *s*).  i¤@itemÉd /thÛ  &  _ 1*s*º  tpcopied;y ù®d multipleb ^imes.. Y Jðoften haunts new Python pr¬`mmers;¢_siderà¯= [[]] * 3† !  , ! R[[],  ]$  QE Ï[0].append(3 . O 0[[3t  v  9 W’Qhas h‚ Aed iƒ0t "" da one-Ž … µS   an† =  ¥ all three) ™t  yþ.?sÌ @to t"gsingler �.  Modify©0anyk  Ó  €Q "¯ @s" m=  ie3is _   ±. You can c©! aI? ofP 1difùt& O ?way¦' ì  i“�range(3)ù ð       >>> listsø[0].append(3)\n'
  ' µ>>> lists[1. 5. 2. 7. } €[[3], [5 >7]]'  û0   Further explanation is available in the FAQ entry How do I '�create ah ñmultidimensional(.?.,  ð3. If *i* or *j*  ‘negative,� Pindex 1rel 1 to =end§ .ofc ð   sequence *s*: "len(s) + i"w   j"i Ýsubstituted. c ?Butd Ònote that "-0H �till "0"
ð 4. The slice of« ` from $to¡defined asÚ µ
²items with Yƒ*k* such» Ûi <= k < j". ›c /is	g+rQ nle", use [  is omittedŠb "None",g P 0¦ :K ; w i Ë €or equal€2*j*ž¯�is emptyé5é¡Pstep  7is ÷¼ ?the!=of ÷è "x = i + n*k"0n÷<d q(j-i)/k†1n onRwordsýindices are "i", "i+k",] o"i+2*ké@"i+3¤ ô	and so on, stopping whenÿreached (but never³ `includ= �*j*).  WD k{Bposi{ v r  ” ¿ v¯reduced tof T@" if¨y.s îs k ƒ h ‡ ]O - 1w Ð/arIV ÿthey become â€œendâ€� values (which   defOs onÎ  �Asign kžQNote,âcannot be zero8¶1üiªðis treated like "ˆ1".\n'
  ' ü.6. Concatenating immutable sequences always results in a new _ oobjectx  ð	   This means that buildq Eup al Í by repeated_ c© .onË ð   will have a quadratic runtime cost½ –the totalw Ê olengthÊ éo get a linear_ ÿ, you must switch to one of theµ Palter~®ves below:(  ‡   * if ’ng "str" ‰sŽ 2cann³ ^st an\/us�  R °.join()" atÇ ð end or else writPÿ an "io.StringIO"³ ¡  instance‡ ÿretrieve its value when complet”  V 	_bytes ¯similarly ô = ö !orÚ BR @IO",ü  è Z¯do in-plac­  }¡°on with a "b Tarray£ ).  ’Ó? arh ¸ ßþn efficient overallocation mechanismP kTtuple¿ `s, ext�a "list"ê>eadP  b ðfor other types, investigaaýhe relevant class �documentâ d  f7. Somêx ý (such as "range") only support item| -f "  òðfollow specific patù!s,
hk… donâ€™tl g f 
i!orJ tiðÊ C ð8. "index" raises "V“bError"™ð*x* is not foundP�*s*. Not>allf @   iÝªsî @pass ¡1addº aal argØ^s *i*e nb  P—j*. TheseA  w`searcht �of subsec/\/ofÊ  ª ”7. PÀ Wextraz ­is roughlyÂ pequival¦/tog u�"s[i:j].¤0(x)‰ ™ Sðout copying any d¸ata and '
  ¼'with the\n ð   returned index being relative to9 ’ start of }equenceh oratherf Bthan= 	J ^lice.1  ´Immutable S� ^Types< = *  ðThe only operatioÆ Eat i~ s~ t~ ­ generallyžimplementf  thS µs not also , ded by ê l -ise ¯support foˆ ÿthe "hash()" built-inTThis \ oallows ýs, such as "tuple"  Þinstances, to	qbe usedB ¡dict" keysÕAstor¦a "set" q"frozen Ûj á pAttemptü0to $? anã   «~contain un;  –Ü ðvalues will result in "µoError"© X M*P   s¶  J fo2 ñ � are defiL%on´˜Äg A . n p"collecpcs.abc.å ëð" ABC is provided©j ?makó �it easier3 –correctlyr ¦&seð½s on customÎÌ ä  IR"e Ë0*s*Ö  {) uaMq  ,], *t*” i/yh Aiter¨aobject@$*xo £arbitrary  èAmeetO f  €  C h ç á2triÁ \oÖ0by á €(for exaÎ, "bytearray. zb `acceptˆbtegers” ¬  ¼ � € "0 <= x $_255")y/+- ! /--# +å 4| OrÌ |”À          'Roesult  }| Notes! Y|\n'
 ?'|= ! /==# o ¹ "s[i] = x"‰  ü| item *i* of *s* is replaced ¾ dby   |<   $  |c <*x*% 
  /+- ! /--# +Ü m :jotot| slicej2frozmto *j*/ism=Ùð by the contents’ ì   ì<�iterableê /*tõìŠ¯del s[i:j]ìgame asc[: î Šê /:kÜ|ODelemO xm:j:k]"î1areG:(1)Û G#
Ú!osepgmŠ[@ š| removesuî &of4 î + M |Òœ Ä +~ 6lis3T ì pÊ! ´§.append(x)ÉÀ        | apøpends *x* to the end of '
  ' H   |  <|\n2 + 6 ý| sequence (samet %as, 	 T  #¢"s[len(s): =] =„ S[x]")~ þ /+- ! /--# +m´"s.clear()"¯  ý| removes all items from *s*õ �E| (5û L m#}as "dell 7s[:bg     )ƒ! m ?opyl€ | creatmß shallow copyY €Ym9Á-asn"oYL! móextend(t)" or "s += tè"|  sËAwithÈ~content/ofÈ’¡| *t* (forw ‘most part ç < YÉtÇÓ YsS *= nÛe	 Q| updY 7ìiã üY6Æ70repÙNd *n7Ltime³m�À     '| "s.iÚnsert(i, x)"  1| i ùs *x* into *s* at '
* B'the |  <|\n4 + <   ýdex given by *i* (same€ "as6 T  #�"s[i:i] =p R[x]")s   /+- ! /--# +m­"s.pop([i]è Ã À| retrieves Î@itemê tº2and3 /(2  m#�also remo‚ }it fromx  {   mŒË (V0   m é jafirst pô O| (3m7`where àî]" is equal toq x*l mŽoverse(Û m ÙAs ofËÚ#inî /(4m7e Cplac/n  m‡YnNotes:  ñ1. *t* must haveýÎ‚length a¡€slice it˜ re-Ning.P  ñ	2. The optional argument9€defaultsæÐ"-1", so thatZ£-  £ g T   la³#isµ d �returned° C3. "'ò)" raises "ValueError" when}às not found in½c 41"re !ð method modifiesø the sequence in place for '
  ¬'economy\n €   of sp9 öwhen reversing a largb ý.  To remind usersg that itg ñperates by side effect, it does not returnÙ ‰ -ede ò .g  ñ5. "clear()" and "copy r4acluded4ðconsistency with† Q Ð   interfaces<ð mutable containÿdonâ€™t support slicingR oóions (such as "dict´ Pset")Ê ¼ i.Mpart/of¹ €"collecti b.abc.M¼ SDð " ABC, but mostÓ ]creted ô Ì ŸÐ classes provð/it²`   NewÏ‰on 3.3:ÆmethodsZ ñ6. The value *n* is anÏpger, or ÿobject implement´ñ"__index__()".  Zerobsnegativi $ m † ›N2Å  €   Items	î1are1pcopied;X  y  Prefer9�multiple·`times,y@explÉô"s * n" under Common 1Ë OÉÍ  x  ^Lists =   @ 	¤!Às, typically¿�d to stor»Ò .ofe Ñhomogeneous iŸ`(where†ð  precise degree"�similaritX-llc ovary b� papplica°)Ps° list([iter™.])Á  2   ;Pmay b�nstructed|sŽal ways:>  c   * UHApair	 qu£€brackets�Rdenot9Qempty½ :#N"[]"e  w sm €, separaÐµåïcommas: "[a]",y  /a,g o  b, c– aá à comprehension} xƒxl¹ò Àn'
         ó"    '   * Using the type constructor: "list()" or àiterable)"\n'
F  ' Y   ThT   builds a [ ñ whose items are‡ Ìsame and in c ?thef 4 ¤order as *¦ R*â€™s_ '.  í may be eitherf ad  equence, a&ñtainer that supportk pration,3aÁ š ?torb ¸object.  If­ £is already7‚ ‘py is mad.Q ñreturned, similar to "„ ýble[:]". For example,
\'abc\'ô2   e âs "[\'a\', \'b Qc\']"ËH Ý (1, 2, 3) )"l H & Ñ 3² àIf no argumentagiven,>Àp createm=newp _emptyf  ›~, "[]".   ‘   Many oM2ope ¶¡so produceð”s, includsà�"sorted(k =Ot-in— 0Lis• Ü+call of(Ammon�0mutÓ# sá*Ó y  2   g "alî 2vidÉ`followë @addi®al method:F 0   þ(*, key=None, reverse=False)5  ¡ Th-} V s ê h0plaÙu~only "<¢¿comparisonsg tbetweentPExcepú ß"no,Àressed - if :i h “R failüaentireß  ! Q will%   (Vl S!  ³? Qlikel3@left2ÿa partially modified state)% Ç ð a ac)Fs twÚ £qat can “Qbe pa9b¸   )�word (key	 -: ,/s)y �key* specÝ  F@funcÍ D6oneƒ@is uÖaoþ qextractPZ Â ¢ from eachƒ1ele¿>(fo­¼e "<ðstr.lower"). The økey corresponding to each item in '
  ¼'the list\n ' ðis calculated once and then used for À entire sortx N �process.h ñThe default value of "None" means that« Ì ]s areÎ  ~ /edd õdirectly withoutÚ  ± °a separate F„ ®  \  À ð"functools.cmp_to_key()" utility is availableš%Ÿconvert af ñ2.x style *cmp* q 0ionM fa *key ½ ‘*reverse*¢ ‚ booleanˆ�.  If setd p"True",ñn �K	relementºªb as if¢ócomparison were ” dÈ ðThis method modifie8pe seque¼�in place·peconomyjŠ_space†wý Á 8Flargc À.  To remind"r‚ ]at it-0opepsh ð by side effect,C âdoes not retur„ Š &edä Ì ?(usË "=  ¥ *`xplici#r2�st a newÖ"ed~_ Ÿinstance)©!e {  y ±Ðis guaranteedmPbe st+A.  Aƒ Bi<:  ]&itX <‘to changeÃírelative orderc /ofŸÐš¿Ðe equal â€” tŽ¡is helpfuls o 6Ef ðmultiple passes (q‚example,@by d¼t_�-byÊ osalaryh OgradÄ1For  Ï � sua brief Îtutorial, se³S1— oHOW TO[°**CPython i#  at#òdetail:** While aÏPis beÄ “ «?ed,™  9™ @aattempúñto mutate, or even inspÂ 5 h  3 É�undefinedYLhe CØ Àof Python maøkes the list '
  œ'appear\n % ‘empty forA ýduration, and raises "ValueError" if it canh odetecth Athatc ¤ þhas been mutated during a sort.E  nTuples* =   B p are im› ýble sequences, typically used to store`collecINs ofh òheterogeneous data (such aÈ12-tÌ Á produced by=ÄÞ"enumerate()"h ·built-in). Û BalsoÁ  ÷ caä‡where anø l g jof homÐ –is neededÚ Pallowæ 5�age in a<"set" o± ÿ"dict" instance)'aclass OÎ([iterable])Å  $  6ð may be construc±¼ þ number of ways:C  p   * UsQa pai> €parentheŠ‘to denoteñŸ¿ :+õt Ptrail Qcommaú a � Rleton*P: "a,…s  /a,ju @SepaRáng items with z se Q b, cj A"(a, _ H ú"#D()" ô&:  .orÉ 1 u 'Th!oro Bds a9c whoseì  G œ 0sam[d„  inä;4 Porder*§ R*â€™s_ 6.    ¢^eitheí ad Ù0, aÛPtaine¡at supportk  À  or š t¯è   object.  If­ ¤is already8,U¿is returned° ôunchanged. For example,è“\'abc\')"F ­s "(\'a\',y0\'b !\'0 m   A¹ [1, 2, 3] ]  0)".à ®no argumenƒi– �   given, €[�or createTGnew c, "()"÷À           'X\n'
  û2'   Note that it is actually the comma which makes a tuple, not 'O ?thed ÷parentheses. The  ñ	 are optional, except in€ ° _emptyc – Ñ case, or wheB y_ ý
needed to avoid syntacticÂ ¯ambiguity.f �For examÁ"f(a, b, c)":P funcÉ þ call with threeg Ÿrguments,g •while "f(a b Ba 3-þ /as5?sol—a† ì  — Tú0s iÿ  ¾  æ !ofu  * on sequencÒ0eras^  Yñheterogeneous colleN€s of dat‰ðere access by namez'~clearerÅ Gthan@ ‡index, "l .T dPÿ()" may be a morE ñappropriate choicKQn a s&- object	´ nRanges =    r "rG Ð" type repres€× an immutable¾Ýf numbers and¿i�  ðly used for loopingspecificU  ÐPtimesç]"for"b  < :aclass Þ n(stop) 
# Part, * [ ?ep]2  D !  ¹3sM "y ð constructor must4PintegBž_(eithžð   built-in "int"Ê3any@¦~í1"__Æ?__"µ s{âal method).  I±t*step* Ñ  G€omitted,
µ pdefaultø h G"1".[ ?art\ L ] "0".þ/Ifd ³ ðis zero, "ValueErrBiOisedg0   s²a positive ] ,Í!ntBof a\A "r"L�termined´ bIñ	formula "r[i] = start + … i"°¿re "i >= 0"u; <f  Ï"ù À'
          ñ   '   For a negative *step*, the contents of ørange are still\n'
   O Ñdetermined by6 ñ	formula "r[i] = start + i pi", but) O €constrai†  y Ã"i >= 0" andR Ž> stop".@  R   A Ç ðobject will be empty ifU ñ0]" does not meeŸ  í _valuec µ 0. R4Æs do supportkuindices-sed /arb ðinterpreted as indexing fromLD end¶~sequenc] 	«É  Aposi¯ hù  D0ain� ‘absolute :ÿs larger than "sys.maxsize"pkt Dðsome features (suchÿ"len()") may raisSï"OverflowErrorOç ® examples:G 3‘>>> list(�_(10))+ ÿ[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]6 a O, 11d a O, 10e �0, 30, 5h    S Ï, 15, 20, 25_ 1c _ 3@0, -V -	% ÿ, -2, -3, -4, -5, -6, -7, -8, -r À ?1, 2	G  (¿0s i¾„ment all9ucommon @­operations¡oexceptb �concaten: ·`repetiI � (due to³0faci#at¡p±se àan only represÉ · saý
t follow a strict patternÊ ?andb µ  {
Ö Eò usually violatew Å w )F-‘  U#Th^Ä*A ð* parameter (or "0" i˜f the '
  ü'parameter was\n , Þnot supplied)%  ~   stop  b ²The value o¨ *@ %* Ÿ 9  v ev ,'epv ¢ (or "1" i– � H>9 …advantagý"range" type over a regular "list" or— Ÿ"tuple" iÜ tthat a Y ñobject will always take6ýsame (small) amountk .of’àmemory, no matf „5siz× Ö ð it represents (as ŒNonlyc astores¦  "start", "=P" and 2ep"\ís, calculatingÁ ®individualf QitemsQ 1sub´ Þs as needed).1  RÀ f²s implementº ðcollections.abc.Sequence" ABC,y Q Ðprovide featu@such– rcontain^ sests, em ]indexú ~lookup,c @slic+ J ðort for negative 4”ces (see µ ® Types â€”j ?isth  ¦!, Y.):ˆ  r>>> r =3 P(0, 2 � ) @ k 8 ~11 in r> ^False  l /104 ?Tru3 !r.—?(10À  5g Nr[5] .10  • ?r[:/ 1=	?[-1k 8k  1Teslj ý Cóequality with "==°�!=" compaÒ_them ¨s0Ps.  TØris, two y ñ are considered „  Üh  k £´x  ·À � @(Not8'atƒ c 	3—¢ ðmight have differ8îe À"step"\n'
    ò'attributes, for example "range(0) ==  ö 2, 1, 3)" or '
E D   '0 l, 3,\n 2G ¾0, 4, 2)".))   Ch‰ ðd in version 3.2: I§ ýment the Sequence ABC. Support¥ ~slicinge ñand negative indices. Test "int" objects# membership• ë Žconstante 0tim] ðstead of iterating through all >ms.>  ð3: Define â€˜==â€™ Ý Aâ€˜! ¢to compareÖ$ê o �based onpsp�of values 2y d| 5(inç !  ‡c … ¯ identity)0New‘&ð 3: The "start",	 1op"@"ste þb žSee also: 1  * õlinspace recipe shows how to iÆea lazyä-ofš†h ¡  suitable 2floWñpoint applicationXñ ,
 'typesseq-mu8 R': 'M KT% p ÷/'* 0   ¥!op0onsÄ ÓafollowÛ  ³_†W— Ò  ¢w .¤r"collec$Cabc.W"X< is”v €providedÔOmakev �it easier+ —correctly	gthese /onw ocustomì –  Iñ'@ *s*0an áaq\of a u±  tC, *tG yx  Ó Æ#*x8 £ arbitraryšM thaðž meets any €  x Îr restri œoü!by((,ê ÿ "bytearray" onlê `acceptøPtegerJ0at ´  T_‘ � "0 <= x{ y<= 255"6À            �  '\n'
  ?'+- ! /--# +w ¿| Operation— O  | ² oResult6  q| Notes  Q |§ = |  ?===# w 	¸ "s[i] = x"Â  ÿ| item *i* of *s* is1Àreplaced by YF 		 � 
	*  ­>*x*/  |  ­ ‡á! Ë$ ­ :j¯t¯t| sliceª2froºã Qto *jÒ ­+?the9€contentsº  ( � Diterablˆ /*tE ! $%¯del s[i:j]$aame asúM [B š/:k, | gDelemws�:k]" are×7(1)@ *9!osÅ” §•mÀ------------Ÿ---+\n'
  ý'| "del s[i:j:k]"% ÿ| removes the elements P &ofB | 	
 |� 		*  6| "¬ Afrom— Ž ElistD �  /+- ! /--# •¾s.append(x)”2 |  �s *x* to
aend of# ?    3 Zïsequence (same%as4 	 \ $.rlen(s): ?] =” S[x]")Ž !à:! $'oclear(" é¹�all item¶I3*s*¿E| (5 <¹*"asl­7s[:Šw   $t! •(?opy”ÿ | creates a shallow™@copy¹ ˜ }•B°a"—¹ t! •'0extNãt)" or "s += tZ"|   s kAwith-¨Acont/of0!9Ú¡| *t* (for‡ Omost$Apart& w� À            �    |\n'
	  -'|  ò | as "s[len(s): /] P S= t")C \ � /+- ! /--# +	ƒ"s *= n"»  ÿ| updates *s* with its€contentsG D| (6   9; ÿ  | repeated *n*‡ Atime„ 9 /  \ � Q«! •&Ü.insert(i, x)�"|  ¡s *x* intož›bat the 3 Q  fÿ index given by *i›P(same[? \ •3 P   |¶oi:i] =!5[x]® 4  \ � ! $'}pop([i]  Î  *qtrievesþitem at ´2and; /(2¹?�also remo’ it fromŽ  s*Š  •œã (¶* ’afirst ˜º$ y ¿/(3•?Qwhere0¿]" is equal– hx™•ƒÀ              ò'| "s.reverse()"  #|  øs the items of '
&  q'*s* in Q| (4)
 
 ?|\n> |*  |y ^place1  \ Œ § /+- ! /--# +w  oNotes:   ñ1. *t* must haveæÒsame length aù@slicÿ? isƒ re…Oing.p  ÿ'2. The optional argument *i* defaults to "-1", so that� $by5  Ó w q   lastÚ Ý ÿremoved and returnedÐ "B3. "M  Yðraises "ValueError" when *x*w Ÿnot foundÑ oin *s*‹ "4["Ë � ãmethod modifieäPequenç n ÊeŒ ¿for economyZ
Pof sp˜ë  Óing a large sr ¯.  To remi@user© a­w ðperates by side effect, it does nÝ ç ± &ed¨ w  �5. "clearx WQ"copy Àre included T¿consistency• @with¶ q Á   interface­õ mutable containGïdonâ€™t supporL ý?ingr 
ot‘ions (suc9a"dict"K`"set")
ü H ž@parth?thew 
p"collec4rs.abc.Mì SZï" ABC, but mosã “concrete ,u 
·P clas×@provh/it "`   New8 ‰�ion 3.3:6»sj À   '6. The vðalue *n* is an integer, or ¯object '
  ÿ 'implementing\n& ð   "__index__()".  Zero and negative v‰ As of� _clearw ßthe sequence.x 
˜Items in 3 ð are not copied; y Â Prefern ¯d multiplew 
ótimes, as explained for "s * n" under Common SÊ ï  Operationsí à,
 'unary': 'U	 ± arithmeticT•bitwise o8 
­ /'* 6  AAll ˆ  P havefY sameè «'priority:_  ô
   u_expr ::= power | "-" H| "+ ~ I  3TheÆ  L s(minus):‘or yields» ª on£»its numericP @argu ª5'' w o+" (plv f  X 
=Ÿunchangedo ¯~" (invertç =$ "sið K'itsÎ 5¥ 0.  á K 0"x"k1defaL a"-(x+1%òIt only applies toŸ0ral~1bergðIn all three cas•!ifÏQAdoes¥ pr:j type,paù ð"TypeError" excep¦ ß Brais– ¯Pwhile¯ " a" stat<T œ$  W  ‡ #usyárepeated execu¦ pas long¥+anQ  i!esþis trueŸ× Q_stmt£ç `assign¿V ‹":" suitG'f…["else" 2 ]¬  TThis ï rly testÁÕ  and, if it& à ,*esò,th£ Rfirst½ ;D  Z[ òis false (which may bý: 	L )Á ” aested)«) w k aclauseÅ €present,Ë 	] ì+eda àand the loop tõ erminates.\n'
  ' õ"A "break" statement executed in the first suite tY  	[ Kloop_ dwithouS 1ing6 ò"else" clauseâ€™s] ù.  A "continue" ] Ÿ b ­ 	Qskipsr qrest of É Šand goesf Kbacka tto test¼  expressionZ@,
 'ä �': 'The " L	L /'*  
" 
 R ñ is used to wrapÓ 0ionä €a block ‹ 
P ðmethods defined by a pðext manager (see sectO dWith S
N @Cont9 M9 ñs). This allows common "try"â€¦"except yfinallyâj'usageb €patternsì Àbe encapsulaœ0for» @veni´Preuse’ì
ë1'  ”_stmt ::=¬ '¢_item (","$   b)* ":"š
— J  & J ê ["as" target]7 
  Ü	· j?Ž € one â€œo ú â€� proceeds asS !foz: 
 1¥e:¼º (�  Tgiven™ &(")2+'i„ �   evalu¤žto obtaing«
2¥ š)Ð"__enter__()"ploaded  r] 
3] ?xit\ '4\ ¹ Š À invoked³ 
s5. If aW  was incluù ¤¡y,ireturn± �g�   from \Passig)_to it£ 
   Note|
… ø­   guarantee®Bat iª
‘ '@
Û_ ò s9 y�an errornã âÞwill always b€  calledÔ0us,• N ´ occurs dur,@ 2hP ¡ list, it � bbe tre0ºhe same as k  g î   ¼ð suite would be.ô See step 6 below.\n'
  ' ÿ	6. The suite is executed5 
75 ðcontext managerâ€™s "__exit__()" methodW ú invoked.  If an„ õ   exception caused t• `to be U ý	ed, its type, value, andN ðtraceback are pasR  as argumenC oª Ø. Otherwise, -]three` g"None"O  g osuppli: Ý  wasæited due to anÞ ireturn›  › Afrom2 ‰ n 0falå  ƒ u)is[ mreraisË ½ � ƒ  V  trŒU   reË ® n÷Ñontinues withÂ Pstate¯¡ following "" "L / »
Ä ó ½ \ð for any reason o[ than”
 	�	Œ€is ignorÎ3andr Y �proceedsç !at±normal loca7 ½  qkind of0 ½ tŸOaken
 gZcode:{ 
 "  ¨ûEXPRESSION as TARGET9 yZSUITEE 
 ûis semantically equivalent toT 
: $  ƒF = (“ )' qenter =B(·A).__ .__0 ?xit/ â. != N _ ' Bhit_{@ = F�
# 
 k   try Tp" =8  & w oU 	Ÿ >Truá X aif notgê ÿ, *sys.exc_info())a  ? `± 0finû7 r Ÿ '  ^  Ñ–  ­&,  
† W~@more=±n one item,uñ Q!e ª ã *ifO ’multiple µ ¥Ûs were nestedÊ 
C k0A()b Ba, B
 b7 À    '       ¤SUITE\n'
  ' úis semantically equivalent to:, 
 û   with A() as a- p # B# b#  * ¨ ð,Changed in version 3.1: Support for multiple context expres- *s.½ 
 See alsð ð**PEP 343** - The â€œá Úâ€� statement[  Ý + ñspecification, background, and examplesÉ ¸the Python º"l "`  |  æ Ð,
 'yield': '¥ " "¢ ? '* 	f  5Q '   U “_stmt ::= q@ -A •  Š
" ab & 'o  ù äø ¢ ö ð can be used to omit jûparentheses that wouldÁ �otherwiseC r&rŽ B   5u ™ 
± 	©° 4For,• H 0 s�  �  <z > Ofrom# 2 :are
”  b U\Ÿ (Ñ   )o 3     ¢ % 4 YãâG1 Ä Bonlyñû when defining aM ò*generator* func¤ ˜
F !in	qbody of ¡% 'G ` T P.  Us� Ein ap ž  { buffici‰
F[causeb ¹à B Åto create a – l pinsteadÅ ‹a normalQ ³    ¹Àfull detailsR ÜY€s, referv /»	9UK!seŽ áÑ}
__all__ = [>²"ZoneInfo", Äreset_tzpath ôavailable_timezones dTZPATH M @NotFšTError ðInvalidTZPathWarHa",
]

´A. im‰}  t_common b a

try:À K _£ Linfo6 ‘
except Ij ž ð:  # pragma: nocover
    from ._ózoneinfo import ZoneInfo

reset_tzpath = 
 . ð 
available_timeL s+   ÷
InvalidTZPathWarning3  ð


def __getattr__(name):
    if  Â == "TZPATH"   ereturn¼   7 Gelse( ðaise AttributeError(f"module {__c Ð__!r} has no ‰ ,   { U!r}")©  di¥ ¡ „ ôsorted(list(globals()) + [· 3])
…cstructO ó load_tzdata(keyV *  0lib˜qources
à �component‘ákey.split("/")  qpackageÙ â = ".".join(["k .Í V"] + N R[:-1]C 1resr D % 2-1]‡ 7tryfŽ´  Ø.open_binary(› ), f y ‘except (I³­ã, FileNotFound ‘UnicodeEn  Ô= ò# There are three types of ` ðion that can be r$d ¡all amountMP `to "we/ pnot fin- gis key“#2 Á X: If ú ð doesn't exist (e.g.íŸ  i†~ ñ   installed, or+  á p's an eþ   iÒ ‚e folder7Glike’ ò  Amrica/New_Yorkrá cµ 	¡¶ q Ø 	h Ñ èEurope/Krasnoym ½n K t*orÍ }iUTF-8,p asuch aŽ�s contai|õa surrogate character.; ö	a`(f"No ù -  f{P withóV {keyÆÄCfobjˆ0hea‰�= _TZifH ±.from_file(* H2if - P.vers›F== 1[ † •_size = 4½   × â!l" 
ù3# VP !2+Ûð64-bit integer transitq  M sC    q 8 q "q"¼  / 	h ²also starts/a† 1ç P and /u, whichb õ# we need to skip now   P_byteö(  ‚ ? ¸ Ëcnt * 5  # Tà x  Á ê  = +— . ? 6? RLocal   record<  ^ <  w 2ime5pdesignab7 @leap7 1* 8s ¯eap secondo Pisstd9 ð # Standard/wall indicators
   ô+ header.isutcnt  # UT/local indicators
2 %)
 ÷fobj.seek(skip_bytes, 1" ó# Now we need to read the second| â, which is not  5amei A# as Ufirst ¹ ’ = _TZifHÇ  from_file(Ÿ Œ @typeÜ =q . K ;tim   Ichar:  ô# The data portion starts with Z `transi Rs andWeT$if' :q  h0 õ_list_utc = struct.unpack((  , Cf">{h }	 _Ü @}",  .q(  ! *k e_size)E 
 w =idxr e B[ )F OelseÇ (&  · l (¦4# Rcttinfoø ò	, (utoff, isdst, abbrindN  Aßz ?utc0  j = zip?**(\Y">lbbâ ð6)) for i in range(b3cntõ  Ï ‹ 
ÿ … 7 = ÷ Á 
 Í  –6 ºõ ! Aevia@.rðy are null-terminated-Pings,_CexedL  RRby po‚ Æ  �¯array but   bunsplij#o� f ð. I suppose this makes morÛ0nseg CØ#usí#µ  	¸ ã 2str»  � ñ
it's inconvenient here...Ñ  ¦_vals = {}  ˜  ö   ¦«€def get_@ V(idx).ƒ# Gets aÜ Ãping at  ³@runn Quntil´ ‘next \x00„  #
 p We can|Ápre-populateK¾ 1by dtV !onJ a becauS)erÿ W€ome zone0at ( @subs» ‘of longera ¬§s, like soì ¤ @ LMTÁ 1AHS !HD " 
   W„ø  !toi P mappÀ ‡should býð {0: "LMT", 4: "p �", 5: "HS 9
 2DT"Ï K!ifz @!inl 6È  % ¢span_end ="  ñ�s.find(b"Ù  ",F œ 1     L Y[idx];   :U „].decode� < Wretur�  1 ]_ W ™ = tuple(h= dx & ¹Z>Áremainder ofa ½� consists Cleap1ðs (currently unused)SP  ÙÐstandard/wall ð ut/local indicatorð-s, which are metadata we don't need.
    # In version 2 file< e# ñ
 to skip the unnecessary N ‘to get at ¡TZ string:X ¤if header.] B>= 2 x ñEach leap second record has size (time_ A+ 4)W  ;  ’ „_bytes =e –isutcnt + 9std  k   E* 12L ¦fobj.seek(V U, 1)
" Ac = & pread(1)3ÅShould be \n) öassert c == b"\n", cG %tz³ 5b""5 ªwhile (c :f 3) !F 3 ü G ++=^ dstr =   a Felse? 2tz_$ BNone™ óreturn trans_idx, ðlist_utc, utcoff, isdst, abbr,e ñstr


class _TZifHín Ñ__slots__ = [Š  » "	&", ·
 ¹ »  9cnt ;ype Fchar ]ö ò
def __init__(self, *args)¾  ¬ Ì1len! .Ò )Þ  1 É ûfor attr, val in zip: !, 3 d  h 0set7 + ,B @`amethodk  º Pfrom_§P(cls,t7eam» S# Theð starts with a 4-6€ "magic"« !ueX  ‹ #ifL .é4‚ Ü"µ ðraise ValueError("Invalid - C!: d ³ not found"Ó  j _	) =r 1â6if % ;x00† E 1Ä 
ñ l & Dint(U j bstreamó '15¥  ­C = (A , 0# Sß[pdefinedó $ƒorder th os( rarrangeÇ ™ `  +ôuct.unpack(">6l"Ûœ 724)‚ ¸Bcls(ºŒÀZoneInfoNotFx¡1Key	 '�"""ExceptôÎ”d when a @ v key isÁä."""
import os
 Àsysconfig


�ðreset_tzpath(to=ku Òglobal TZPATH‰(  Æ!toÄ4if  |  A ~ãif isinstance(+ @, (szm)n  c  Þ C Typ«g    #f"G P mustÓ a ÿ¶ or tuple, ®5 @+ f"ÛE{typˆ S)}: {M :!r}6 ½!ifV°all(map(os..`.isabs\  sÈ tb_get_ix_3 Ð_message(tzpasths))
  âbase_tzpath = 	 s Qelse:
  + öenv_var = os.environ.get("PYTHONTZPATH", None_ 4if : ais not  W  [ 
ƒ Ó_parse_pythonš (D X 
� F Í  0   �sysconfigÊ _  æ #("Ï q  / !)
B   .Wuple(¿ �)


def Ä 
ý !ifÙ   d ƒreturn (l 3raw$ =J .split(os.¶2sep¦ 'ne+ t› dfilter* †.isabs, T )f ò# If anything has been ? ñed out, we will warn about itvif len(� A) != k ã aimportH BingsU ü ñmsg = _get_invalid_â —_message(O 6  �  H .	 (‘  M   ""IG  G è specified in · Z Ñùment variable. "M i+ msg, _ ÇTZPathWarnin" ]Ò%è ‡)4	@ = (Î A for×  Ì 0  Uð. éÁprefix = "\n!Ï °indented_stá% "+ 	 i.join(… 
Ú t"ðs should be absolute but found the followl�relativeË &s:r(+ – § ^ó find_tzfile(key&±"""Retrieved %�to a TZifÌò e from a key.""l _h at R rW t  fasearch  mÿ› D 6 m  
 27 ,s ¦ 2  ifE*  is? (   Ì  %   ; ô  h�


_TEST_|› F P.norm	 úÃô "_", "_"))[:-1]‡ > 0, _Ü=c Ÿ 	À 2abscöraise ValueError! Õ  f"ZoneInfoQs may/  �s, got: { }® @ }Ð# We only carj ‘ ]�kinds ofS ñalizations that wŸQchang,ê#±0gth: G ðey - e.g. a/../b -> a/b, or / Â. On Windows#u  ¶ 1Salso n ‚0/b š1\b,•  stcƒpreserve™  � qlength.  K_ r ç   ‹& –Ðpath) != len(ƒpath):
  õraise ValueError(  ! ðf"ZoneInfo keys must be normalized relative Y �s, got: { %}"L !)
 àresolved = os.$ .J  	 ( ðjoin(_base, new_ !))? tif not F ².startswith1 × +ÿrefer to subdirectories of TZPATHÜ °
del _TEST_) ó


def available_timezones(£ ö"""Returns a set containing all;  ;  < .DÂ.. caution::  ©ðThis may attemptÈ ðopen a large numberÍ ñfiles, since the best way tog P ðdetermine if a given : 1 on5 ˜ q searchÿ5 isy %itM Ñand check for> ñ"magic string" at Pbegin.; """Aãfrom importlib
 Rurcesavalid_)  =S(t0# S' 'P loaddS  ü Ñtzdata packagí Àit exists: tUQhas a� ð# pre-assembled listQu ðthat only requir: peÎ A one<× 6try–  ÑË .³r_text("š A", "` v") as f:  ¦ O  < in    =>.k"p(H   !if  
X  UP.add(Q C ‘except (I—:á, FileNotFound î O 3pasª Y Qkey(fà 	 9 " + _, "rb - rUò f.read(4) == b"TZifK $ » EÂ  G   ÚÑagma: nocoverð -   U RFalsem xptz_root{Ä ¨ÒO(1  ] scontinuY    ]  Z €, dirnam­ zsk os.walkM 0if :  ö n •  [   �# right/ –ðposix/ are specialu û # €shouldn'ø	M €included�  QQoutpuÿas< Aif "‹ "< ì ±  h  ƒ.remove(9 Œ !   U Õ U !9 8R  �  ¥   s¢ ÄÔÃ ‰,÷Q  Y 7key0 0relá×=Áã ïos.sep != "/":Àà        key = ûkey.replace(os.sep, "/")

  Ñif not key or ý in valid_zones:2  A �continueP > ¯key(fpath)C & d ƒ.add(keyŸ ÿif "posixrules" ‘ &# & ð is a special symlink-only time h õ where it exists, itÞ �# should°be included~ –the outpu/ ¾ xremove(´ Ê YreturO±


class InC ðTZPathWarning(Run®  93""" P rais“ bf an iB  d ÿ ý  fi  òn PYTHONTZPATH."""


 à = ()
reset_tz< ô()
import bisect …calendar ¤ollections …functool $re ðweakref
from dateÙ  i  ,�âdelta, tzinfo
2 .+ “_common, ® •

EPOCH =U Â(1970, 1, 1) ORDINAL$ ð.toordinal()

# It>örelatively expensive to construct new¯ ` objecD!an$ðmost
# cases we're looking at BQsame ì `s, likdðteger numbers of hours, etc.
# To@roveÛ0ed m °memory use,i Áll keep a dižðary with references
#Ë  …  Ó 6 ‘ve alreadI ðd so far.
#
# Load¸ Hever?!inÈ Ð2020a version´  X Þeödatabase
# requires 447;ps, whic    approximat O `amount] @spacL òthat ZoneInfo("America/New_York")ô ¡236 transi©  takes up,â Âwe will
# se”‘cache sizì0512' k í ~×  w4‘ways get ; P
# hi0but£õcifically crafted³ 1ð don't leak arbitr°ð  ¨2of á5.
@_Q.lru_q @(max¯ ð=512)
def _load_€\ƒ(seconds=‚ =' ‘\ˆ@ r_strong} _z A = 86	 F = c â.OrderedDict().  G 0 =  Ðref.WeakValue* dionary0 Ð_module__ = "Z "qø ‘_init_subQT__(clö £?ls.£ 6  ž « Ü � 2new… ,G@ T €instance$ • _ @.getùb, None)2 %f 5 !is 
E 4= cS À_cache.setdeðfault(key, cls._new_instance G))
   õ._from_cache = True
) ñ# Update the "strong" , $ m  F r[key] =†  @.popŠ $, } )k }if len(N >) >J e_size:ƒ  × 9  n ÷ item(last=Falseo ereturn‰ ˆ Á@classmethod] bdef no×  › f, key)y 4objé oA  š ;obje� s  ! Œ 2obj ‡ 
Ð?clsŒ ‘super()._0 _µ øŠ Pkey =È ¡ ±ile_path = ( ¢find_tzfil?œ  ° $if" 3 «is not Non– > _&Sopen(Z 8 f, "rb"  ?els@ °_common.loa˜ @dataMÔUwith r Fas fª ¸ } ?  % '(f; ƒ); qfobj, /ˆ=û �2 Z 
«Ã 6obj?à    €_repr =  (§ ê ð# Disable pickling forÑÐects created ì Ls| –_reduce__'#le "OXclear\Ì*, only_keysQ t  o orÚ6 inJ 
 +Bweak}  ) J,ÀO +   / È œ\À< k ô (d $ 	` & {‘@property  ’‡key(selfpq  .@‹ - ‘utcoffset3 O, dt7 ñ’rans(dt).9 I /dsC fdstoffC otzname‰ 6 F  ›?utcG ¢"""ConvertÁ ¼@timexUTC to  `local ! 2"""a  ñiõDt is§E(dt,9 ? - ôraise TypeError("Ÿ Å) requires a= — argumentöÄif dt.tzinfoÛ É
¹h DValui ð dt.tzinfo is no³t self")

  ±timestamp = Å._get_local_ E(dt)2 ðnum_trans = len(R . G_utc\ 6if - •>= 1 and V # <r N  < E[0]:h  ¡ 5tti˜ ©tti_before# …fold = 0 eelif (  G † w== 0 or… >… 5-1]> )³ änot isinstanceò ýz_after, _ttinfo)¼ #, ž $2 .cõ  8 Š_fromutc´  ¸ +•, dt.year™   ”ô 
æ � I‡ 	L © G*seD Òidx = bisect. d_right  Ç,_ ² 
>„[utc[1 F  
kprev,  Pnfos[§ –- 2 : idxÊ 9 'U û
ô  6 o Aï(s[) )   	’ i,elX7 _Ó d î, ' õ &0]Ó $ �# Detect�	épshift =;r �.utcoff -  	1 8 ö.total_seconds() >ë- -J‹OAdt +{ i !ifª 
}`returnû€replace(Œ (=1øM4 ’def _find¡ª M¬@if dßL NonòfÓ Êfixed_offset¤  mt 
å	Dõ8 ¢_NO_TTINFO´  S t^Q  -�a lÏ, 8. @[dt./!º'ltŸ	›¨ms < lt”¶ q •e 2o  q0s >N -Ñ/if[
WTZStr®   
† iY0(tsì9	  = G ™
ã ] p4 #k� is the „ñition that occurs ,0 th& tj, so wÐ°# subtract —�1 to get[ pcurrentª5nfo‘  É  k�Àlt, ts) - 1
  ÷assert idx >= 0
 ñ return self._ttinfos[idx]
' ð
def _get_local_timestamp(1 a, dt):(  S K (   ú(dt.toordinal() - EPOCHORDINAL) * 8640” ï+ dt.hour * 36 ¯minute * 6:  esecond† )Ê a_str__½ ¹ #if ö key is not NoneÛ  Ê ß 0f"{ü u._key}"f ?els0 Breprq ˆ   ‰ 5ö_class__.__name__}(key=§ O!r})ª Ú Q ³.from_file(W   _Æ  [ +~_reduceÛ >
&._b £unpickle,  Ckey,�u hcache)Å{  h 4 Êbmport S p»Caise  .Pp ŠingError­@"Caný@ À a ZoneInfo t � created ˜ " a vstream._ª @•Rmetho‹î a(cls, ë  M _å 8, /Ë fh  Š0clsé)~ ç „bcls.noK 3 4 “ pfind_tzá N— ˆ ¹ˆ_tzpath./ 3keyî J Bload$ !g, fobjI ñ# Retrieve all the data as it exists in @zone‹d¬  à ²trans_idx,  ðutc, utcoff, isdst, abbr, tzë± = _common.�  p 
ò ¤ ` Í  k q# Infer� ðDST offsets (need¡or .dst())§)  _ M ƒdstoff =Ì¦ B_to_ (Â Í  Â 	… @Conv»15 aition ‹Ò (UTC) into "øñs since 1970-01-01 ¼1 §J Ö¤  ts  . Ÿ + l£ ƒstruct `@ò` objects for each¯¸ â p,9 •_list = [  ‹ 
¸ Ô bdelta(G{set), _ u  tz'	d D Y  · M %, <  W ;  ¦3zipq ! {J B Q  %._H" =E_utc‡ $ ƒ&  ( ª - ð _list[idx] for óidx in trans_idx]

  ò	# Find the first non-DST- Uition, Pfor iI õrange(len(isdst)):$  W qif not  :[i]  ! ðself._tti_before =  ¹nfo_list[i]P  3 Ubreak JelseW 5if V Jnfos  B  u   2 *[0v d F HNoneQ1SetPð"fallback" time z(  D   Áif tz_str is. F   a‹ j!= b""Ç ° pz_after6bparse_J ( ¯.decode())/ £Q  ti~   Œ
�  º öraise ValueError("Noá  K 0rma9– found.") A «è 	¨ ?[-1ªE × D  À# Determine ™0his—ña "fixed offset"ÂÒ, meaning thaégoutputN !of2utc: Q, dst_°tzname func"Rs doe �depend on; L Ñspecific dateHvpassed.$ 
 ð We make three simplify® bassumpu 7her?#@ `1. If Qc�a ‡, it hass	Hmighð   actually occur (iò possible to construct TZ stringO “ 2   Qy STDF   bu¬	ˆ Beverl š, such asH ÷AAA0BBB,0/0,J365/25)H# 2þ ‹ ¢ ptains m¨„than one€ object,´ s ðrepresent differ
 sz $3.S w ”no unused  ös (in which case a¡#_`otherw¤½-n ¼¥ with extrÑÚs defined may.`appear§±*not* be a T T A@ AViolsA 0theª ƒPwouldS áfairly exotic,ß M  :As sh4  almost cer™!ly>1be %á *./G(theL ponly thÁ‰ ¡affected b  sÙ 0if íA�) > 1 or~ ³isinstance(ªv,¶"& L_ f= Falsª #elGv 
ŽF 1TruE À     else:
   òself._fixed_offset = _ttinfo_list[0] == (  tz_after

B Ñ@staticmethod òdef _utcoff_to_dstoff(trans_idx,  ásets, isdsts)::  P á# Now we must 6 óform our ttis and abbrs into `¨ §` objects,K ¡but there 9 â issue: .dst()b ðreturn a timedelta with7 I ödifference betweenÆ !()” ò the "standard" HW, butH % Cbase  "; F"DST ðre not encoded inŒ g file;J ñwe can infer whaé ¡y are from4 ]Q flagˆ 0 it(no’ Ðsufficient to jxRlook T d last Ù § —, because’ öoccasionally countries will shift both ì ü .R `typecn‡Alen(È %s)l S@s = ™$* . … # Provi†  assign allÚ (0.B _` ?sum` ¦_found = 0• Pfor i��range(1, � £ Ù)Æ Ä bif dstg = T ë %   Vbreakg   Ridx =þ [ :[i]   dsK[idx ð# We're only going ÕÁdaylight sav &imÈ~ f‚>dst­ Šcontinue� £# Skip any!0s t”àhave already b7“e+ m   + 3Í _ != 0{ ª K  e& =¨s\ 
¸ @compa
mK - 1Rir7 ]¥ � � -� 8 
† ] ;  á  4< (Ù;- 1] ç N ½ +½  - A# Ifafollowø “PitionAalso� €  ^fouldn', F   a# findL Ìñby this point, w€{1ot %to€ H   0# s8!itBhopeF U› Tgets 60 laz ;  #ifI#[cÑš  1 ¾  }0 ¸7 CM+= 1ø 7 ’ 5off& JelseS ¾Pwe di“�pa valid 0ue �`a give1dex„’ll end up\ À       # witõ2h dstoff = 0 for something where `isdst=1`. This is obviously
    ù&# wrong - one hour will be a much better guess than 0B   ùidx in range(typecnt):'  r cif not¼ ±s[idx] and ­  5  9 î " … = 3600
^ dreturnV  p@static!od* òdef _ts_to_local(trans_idx,  ÷list_utc, utcoffsetsÅ ñ""""Generate number of seconds since 1970 *in the g r time*.–  Ë �ñ	necessary to easily find; ‘ Qition@ s]O 1"""Ó  O S1 _Â 
E †[[], []]‹ Â# Start withw ‘imestamps—õ modify in-placet m €wall = [z R   G0),   € wif len(nJ > 1½ ˆG_0 =–5[0]�  % 1% § jidx[0]0 5if 3 > 0y X ,$ % =  1Œ JelseF g  ¿  ¥ 0±  5_X†[0][0] +s i * 1* 1åŸ @�!1,tA Gidx)âó  ± ˜[/ k[i - 1OÚ 4 u e €= ] x 	FiF. 91][. JH` ò


class _ttinfo �__slots__"JB", "É 
 stzname"ÿžÄ_init__(self…,Ø", 1 ¯ ' .[ ù
 n # =D 
 P # =Y 2ˆ %eq† Wotheru (L  Em Š != 4 š 	(  ì, ™ ,  , ¨ ,  , )¹ Crepr» õ):  # pragma: nocover6 Ç 1f"{ž !__ÒP__.__¥6__}q ð R+ f"(, ö 2},  É  ¬ &})? ô)


_NO_TTINFO =7v(None,   ) ‡ ð _TZStr:
    __slotsƒ__ = (
  f"std", 8dst Istar )en/ èget_trans_info: 
 ˆ_fromutc" ƒdst_diff !)
† Ædef __init__§ âself, std_abbr
 €offset, H   
  º ¡=None, end
 a !):    V .5  ‡ ! =J @ ! -m  0 2td_ ð = _load_timedelta(�  )1 pelf.std/  tt#Ó  � vutcoff=; Î   ^ ¡0), tzname.  ð f : Q Ò û 1 =  &   enŒ 2endm 3   ¸  ¦ Õ  Õ ï ,  a  1  N/   2 ÷  , z ÷ \ ê  !  ê á ð6# These are assertions because the constructor should only be called
÷   ’# by funcE athat w1 òfail before passingO0 orOV„  ris not uA"No i^ " ¬specified"B  š@ 	   > ? _
m û y_ 3 	 ;  6 £Ú  s(ƒ h, year\ :O Š."  _to_epoch( & ß  = J O.end+ 
breturnQÜ– ò š "tsž g, fold¤ a"""Get5 œ1rma«Babou xcurrentÈv- tti""ÀÜ ˆ î æ {a# Withˆ Q = 0,| ðperiod (denominated in local a0) w6 7theI  smÍ"r B2s a¹  O!of^ pgap and¶ M  8 ;j   à = 1, it runs ÀO ï  \  to L `beginn2&  N .! 
 0 Soé òorder to determinÈðDST boundaries we need( —know bothK Â ì €whether C °is positive½Anega q(rare),0 (itJ Rurns OÐis boils down€  Ñ „ XOR is_\ á #ifà!= �bG>= 0 ƒ ©-ù ï <Œ Felse® / ~+1 2 "if	  <ð< À      isdst ó= start <= ts < end
  Uelse:   õisdst = not (end7 E %)
- Àreturn self.3 2if <  T  2std0 ðdef _get_trans_info_fromutc(A ¶, ts, year)Ž q ,¯ " =P > qitions(- � , # -( õstd.utcoff.total_seconds()1  Ú / ?dst/ 0 $ifF ‘ ¥ 3… g<ð0# For positive DST, the ambiguous period is one dst_diff after + ñ@# ofE ¯; for negaW ebefore#� ú Z .  4“ :> 0:Å _> =Y<  X  ª " +â ,  qX 	` . Z  + -\ / bfold =oª â  å Y Õ , W A)


òpost_epoch_days_d_ãèÞ a"""Getq`numberÌ 1 ò between 1970-01-01 and YEAR 1"""Ò 1y =gA - 1 ± òy * 365 + y // 4 -	 5100 ò00 - EPOCHORDINAL


class _DayOffset© ð
__slots__ = ["d", "julian
 @hour `minute
 ž""]Gq_init__HR, d, @  , > B=2, > B=0, > '=0:"if¿ ¼ 9 )ÇÌ2365¥  ¯  `min_da/     óraise ValueError(f"d must be in [{C  },D ],} g: {d}"/ ç.J}   # =â z   î ! =õ 
 ÿ # =
 5 ÷W Q2_tok\  ; O€O = _Ÿb  , á º æ é ±and d >= 59¤ø calendar.isleapð Q   fd += 1e *M = (­ Å+ d) * 86400/ +S íÚ¬ M0* 6 Cs 'K ÷C¼ ümàw  }   r  
 i üð_DAYS_BEFORE_MONTHç Ê 5-1, 0 3 !59 À     90,
     P120,
	   7151 8 6212 7243 7 6304 #33 !)
b ñ)def __init__(self, m, w, d, hour=2, minute=0, second=0):=  Ÿ öif not 0 < m <= 12    óraise ValueError("m must be in (0, 12]"�  2 R wR 5Q wQ 5P 0= dQ 6Q dQ Y[0, 6Q  'e.m = m Zw = w Zd = d  V! =]
 g W p
 z# =ƒ½²@classmethoe Î÷ymd2ord(cls, year, month, dayº…return (i  }ð	_post_epoch_days_before_H ( )/ ñ
+ cls._DAYS_BEFORE_MONTH[r ], ( ò	 > 2 and calendar.isleap_ ` 5dayF %ñ# TODO: These are‚‘actually ½ á dates as they% �expressedx¡local time^  9 Þ 2_toý   3‘"""Calcul] 1theg  F 0 ofj ñ occurrence from  E 1"""i  d‘# We knowžñ, we need to convert‹P into¾ f + L 
 ‘ Week 1 iô € first w �in whichC ð`d` (where 0 = Sunœ appears.P @5 re82entX Hlastç $ofW H, soÃ  ã O  /PrangeÆ   Ê q ±  u©Qs_in_" & =* E . ’Clf.m]ñThis equation seems magical¢ öI'll break it downE# 1.n Q says% Mo%v, POSIX <ã (  Ñ @ + 1Ô‚get 1 = O U -> 7‚£#Ç °€is stillÏ  iv/ 8pcause tç @mathñWmod 7‰ c2. GetÑday - desired­/ a: -1 %ƒ 6�we don't„M    ½ °do anything 0adjÆênegative numbe@²3. Add 1 be³ ¾ � s‘ba 1-ba‘6dex
(  
1 = ‰i.d - (P!))¼ 2+ 1 5`# Now 8a 0[ P vers`of `w`À cÈ£Gw-thò Æ 2 %d` › +œ ¨w - 1) * 7Š ) wÁ@onlyó>ÿ Üðif w was 5, and ³`w` means
  ð$# "last occurrence of `d`", so now we just check if ×over-shot theM 0end@ Ðthe month and3 õso knock off 1 week.7 "if- ñ _day > days_in_A :&  ±  ' U-= 7
 òordinal = self._ymd2ord(year, &m,e )9 „epoch = A {* 86400  +X Óhour * 3600 +W •inute * 6 esecondC qreturn j ò


def _parse_tz_str( )ê ð# The tz string hascs format$ \ ó# std[offset[dst ó],start[/time],end "]]7   = �Pdst mßñbe 3 or more characters long* & ³not containI `a lead¬ ñcolon, embedded digits, commas, nor a plush ³inus signs;K  û ñspaces between "std" "ë  " are only� display" "ar‹ # ¦ ñactually present inJY~#y b¾m ò
 is ``[+|-]hh[:mm[:ss]]``{%  Å1, *w@_end 2 = ×â.split(",", 1)7 `# fmt: ñr_re = re.compile(  õør"(?P<std>[^<0-9:.+-]+|<[a-zA-Z0-9+\-]+>)" +5 6 õoff>[+-]?\d{1,2}(:\d{ I)?)?9 r  = odst>[^r  9   3r"(= z ()?µ ?  g # dstÏ Q)?$" ô1off ÆMn\Em = Qv.match(§� q ÛBNoneSz òaise ValueError(f"{Å}- T“ valid TZ "R ñstd_abbr = m.group(º¤ =dst Fdst" £ 0 = “ Ê S  .¼Tp("<>x  if'] É o  :  W y :¸ Coff"‘ 6try^   : =Îfdelta( à  1 gexcept]G as | $ r€"Inp0STD/!seÆ–‚") from ö7elsQ … B = 0R-Ñ oÛ !  ;dst ²    sB   5   ( $?DST$À from e
         else:

  ôdst_offset = std u+ 3600
, úif not start_end_strJ ð!raise ValueError(f"Missing transition rules: {tzB 6}")c 	\ s� m õ[0].split(",", 1)› :tryŠ I ð, end = (_parse_é   ¾ Ê(x) for x inÔ sX gexceptÒ K as ?õ  øInvalid TZ stringî v from eõ àreturn _TZStr(�Wabbr,‹ , »   
 ® " 1artæ ³ JelifÌ §  T”ø present without DST¹ n
?°# This is ax ùtic ttinfo, don't Ü A  v , (   ñ _load_timedeltað <),   0) d_F �)


def ördststr)pdate, *m   =d4strb"/"T0if ' ¢[0] == "M";  « õn_is_julian = False… ñm = re.match(r"M(\d{1,2})\.(\d) 1$",\ i  R @if mN?Nonf#ds•/ï ­ 2: {è  ] X     Ûö= tuple(map(int, m.groups())Ž wÑ = _CalendarO''(*L / 
4J4 Š 
86Tru7   ]  �uate[1:]S
d  * 
I �/  doy = int(Q §  5 Ö 3DayÑ Wdoy, N “0if ò   _component¡FlistG   ¦(:"On: 0en(0  ¥  l F < 3†  Æ : €.extend(§x* (3 - o Õr.hour, P.minu
 Aseco9e ³½, 
k2tz_µ	 h¥ðr"(?P<sign>[+-])? $h>- (: m 22}) s e)?)?",J s  Jp# Anyth€°passed to t²Afunc�ðshould already have hit an equivùte À# regular ex*sÌâto find the seS 1to p.7  x 2rt !isC ß$, ² W`h, m, S ½pv) if v ~ ; Ä! 0_   ÇvÇ Ïi Îð, ("h", "m", "s")�)
    )
 ð	total = h * 3600 + m * 6	 s# òif not -86400 < 3 !<  :F  Q õraise ValueError(   õ-f"Offset must be strictly between -24h and +24h: {tz_delta}"I ´ ò# Yes, +5 maps to an o_ aof -5h2 öif match.group("sign") != "-"¸ Ï R*= -1ð breturnç ó:
Apache Software License 2.0

Copyright (c) 2020, Paul Ganssle (Google)

8 Ãd under the [  �, Version[   (! " ±");
you mayŠñuse this file except in compliance withe C 3.
YA øobtain a copy of& ñ at

http://www.aý b.org/lø ¡s/LICENSE-ðUnless required by applicable law or agreed§Óin writing, sR0
diHbute¸ H is !  onìùL"AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See"foªðspecific language governing permis¹s¾Ç
limitationsìÏ .™  
0 	0ï, January 20045 Ûÿ˜TERMS ANDAðFOR USE, REPRODUCX,& €DISTRIBU A ‘1. Defini. 5   Í± shall meanmAterm;R cond6  zÐuse, reproducM ,Ù  % 2@as ds ‚!Se. Òs 1 through 9é M|ocument˜ <or"™  !ÞPowner*ñ entity authorizp •  ±2 @thatÂ@granöð 9 �"Legal E[ …  uná §!acF † cnd allG oÖ F Aies { �control, º lµ ,Î   �ccommonJ ) D2at q 3. F†purposesV ~»¤"F "éQs (i)þ Ðpower, direct… "in ,!"caÜe‹  €r manage½ x Csuch™ Q, wheÿ  byE1tra\ E  wiN�or (ii) Ñ@shipJ PfiftyÈ cent (50%)™ @more $thŽ €outstand÷@shar…R Úi) beneficial^ ¨ tøYou" (or "Your"){0an @viduL (r  Ó pexercis‰ €hà kÀ      "Sourcòe" form shall mean the preferred ñfor making modifications,
  `includ ñ"but not limited to software source code, documentI G ! á, and configur  ƒ files.
( ~"Object» 2any± `result‘ ó from mechanicalB Ptransù _ 1or  l Rf a S®  % ), á D ç ¡compiled o� ç `genera
	ñ 9ê @versP /ø other media typ÷ \Work"«ñwork of authorship, wheF $inÇ #or¶ ;&ñ, made available under ð License, as indðsed by aG �copyrighî ice that i.  ò ed in or attach	 Y ® C °(an example9 bprovid9  * ö Appendix below)ý°Derivative s  d  þ � Û¹ 0bas½pn (or dd  þArom) k ™ Pwhich J áeditorial reviË Æ"noß‚s, elaboÍ s,çNM ‘represent~`a wholŠ Ppiginal â 
ô0. FÅ »surposesN …of this Ò?P Îæe_ sÒcremainL Qsepar* VÇ ±merely link91bin(Pname)Ï ËÔinterfaces ofû  U•  ¿6eofö€Contribuxò
³½  p #orAq 4   ˆ  ?	â «@addiw S"to6 ?or ½ ,' 0tenC Cally� `submit#tož or˜m E DŸ  byq yDowneÖ!or�n­`vidualº ÃLegal Entity!"iz� Ó on behalf of™  r f ^:�is defin2, "U Cted"L  Q s V m 5 ñelectronic, verbalH wrpn commuª . J ue)uor its -s÷ ‹K 
d 6on ” P mail7hlists,³ ’µtrol systemü ÃPissueCc$" ÿ úQmanagAí u %e™ ¤ ‡pÌ 8pdiscussœ r m0!ng Š,ñ I  ex… , 
ì ìÀs conspicuouñ
sly marked or otherwise
  ñ8designated in writing by the copyright owner as "Not a Contribution."

L % " ðor" shall mean Licensor and any individual• ÃLegal Entity˜ ûon behalf of whomu ð has been receivedµ h I °subsequentlw acorporð awithiné QWork.Æ €2. Grantw Cÿ X Ñe. Subject to8 QtermsÕ PcondiCs of{ Cthisû ve, each8°or hereby go sR óYou a perpetual,G ñworldwide, non-exclusiv ô-charge, royalty-free, irrevocablèËlŒeq ðreproduce, prepare Derivative  Î ˆ õpublicly display,  ¡perform, s$ Qense,2dis(e0Ñ  Y  Nsuchr �in SourceOp ^ ¡3¡dPatentcž¨p(excepta!st�™`is secV2) pì ¾ô make, have made§u|Pofferãbsell,  bimport™a trans. hôI w¡ ¤v Àapplies only^ Tthose› rclaims , {"byE ` that p‘necessarižRfringËStheir1: ±ion(s) alon by combina% ´7 g1 G  ñ ‡Ú ¿ [which� 2 @ wasÍãmitted. If YouH …institutú Rlitigƒ 0aga åeÑ€ (includXaB across-1 årcounter Àin a lawsuitë 0leg; 2 • >G  Q	ì ? iná4 co¹ †s directH cÑ4oryÑ"in�Pment,9n× 
ŠsD Ç edW È0und�B forø Â  A ¾§aq k R date›^‚is filedU4. Reb@ion.¥U may Úh$ ÓÁfe » � .orŠ ,0eof µ�medium, H!or $ouEqmodificseÊ o@ovid/ 	[@meetš p followùZ:¢b   (a)ê Pust g¬ Ÿ Ó àipients of the¥ Work or
  ¡Derivative ós a copy of this License; and
8 õ2(b) You must cause any modified files to carry prominent notices
~ Ñ stating thatT ²changed theH 
z cz ¡retain, in. °Source form¾  ’ Ý À   q ñ distribute, allþ ñ
right, patent, trademark, ?  "at; 4ionÜ _ from�  Ñ  ,… bexclud 5oseD �  do @ perç  O Ó wpart ofE  Y é 
5@d) IÏã0 inv eëÑ"NOTICE" textpC as d 8 it«)@ion,â nö{ Ë1 e*³ ‚ ± a readablew · Î W0con'edG Âwithin such É Ã /, XG b â  Ý mÇat least oneG 2 €@llowÔƒplaces: § a¤ l"× ‚ „ ;Q   	õØpdocumen_ ¯ if‡±vided alongE ä H; or¥¿ ÿdisplay generated byB K, if*‚wherever­`third-gyä ð normally appear. Thnƒ‡gð0 arw@r inýðational purposes onV nc\²Ä è.…pmay add gr own ’òÏK-in-
 diongsid;rw anu Pendumî ßæ 2YFÏ� 7Caddi» l�cannot baIstruW"asËyÅ †  ü# 68Ôe| Æ BYourO !icšs h0pro— û ³ �or differ4l�Q term< B conÞ ðfor use, reproducû !, G Ý ¢"ofÑöŽ  ' C G  cBv¡u whole,|P  { C 
� Eand ã‚  P Á� otherwis„ampliesHI  ' è Sdê•.‘£5. Submissc 5Con—às. Unless You ñexplicitly state otherwise,
  ðany Contribution inten
  al6 òubmitted for inclus& “ the WorkI ‘by You to ñLicensor shall be under ð terms and condil Cs ofH Rthis ? °e, without § "ad- 2al C 'orB .@ 0Not5 �standingr °above, noth cherein› ósupersede or modifyJ  á i f� PseparFlÞ óe agreement you may have executedH  � Ò �or regarš Isuch|0s.
3 ÷6. Trademarks. TP doesÈ Ñ grant permis’ato useï t>  J ¡   names,  Q £, service  ¢or product- 1 ofF „$or*óexcept as requir¢reasonableÓ�ustomaryŽ  in describx3the– doriginj  F= "reŠ -  Þ �( ²NOTICE file*Ð7. Disclaimer& 0War‡y. Unles« Pby apª claw or� Ædº¶in writing,±�provides« (¼CeachA @K. :itsÝô) on an "AS IS" BASIS]ð!WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eiÇP exprå Ê ‚implied,© eB`limitam,Íw+Iies HÔ ðof TITLE, NON-INFRINGEMENT, MERCHANTABILITY,A ÓFITNESS FOR AD ñPARTICULAR PURPOSE.$ðare solely responsi? b der#inI Áappropriatenñ @f us# P3dis¿ï¥ ¤Passum˜Ó°risks assocM d` ” rµPrciseGWs¸–|E8. LS 5 ðLiability. In no ev ˆ ü`no leg¾Theoryû1wheÎ‘in tort (f ½Ñ negligence),AractoÈuð(p‘as delibeÉ � dgrossl"s pt acts)Û Ù ˜ÿbâ!lii to^=PdamagŒà  > @direÕ $in
 tspecial ¡incidentalú pconsequ¤3al U  € M 0cha#aer ari"Cas aF`result+ d â  bö DêÍ   ¼^¥1but’aeH–  Ò0losÞ… goodwil× Ðwork stoppageÞÒmputer failurŽbalfunc´!or· ²3allÓ p commer4ð damages or lossñes), even if such Contributor
  ðhas been advised of the possibility > �damages.
< ð9. Accepting Warran+ òr Additional LiaC Ò. While redis‚ 0ingG !  o ðWork or Derivative  s óreof, You may choose to offer,E ñand charge a fee for, a¢ BanceÅ ƒpport, w¯ ´, indemnityH ¤or other l¼ p obligaÓ ós and/or rights consistent with this� ðLicense. Howeverk �  1PY à ƒact onlyH  onú Àr own behalf„   !soV spŠ l@, noC / H  8 yÜ ,O  ly% eAagre`fbdefend2 zhold eaT� harmless~F anyF‡ Àincurred by,ðý	claims asserted against,¯£ by reasonJ wof yourT p Xß a aŽÒÁñEND OF TERMS AND CONDITIONSá�APPENDIX:Ã pPapply‘ƒ Apache ä  ‹ Bwork\ o   To 1 P, attH vffollow°boilerplateÖDice,jàe fields encloºóby brackets "[]")‚replaced9 ©  M€identifyŽainformãó. (Don't includeE  � ] ö!)  The text should beˆ !in%¤appropriatE @comm,asyntax$ X f� Â. We also re. ƒd that aˆ , Ñor class nameÀpdescrip¤ é@purp%$beÇ d2$thŠ s9 P"prinuqpage" amQ copyßq§ Teasie3:!ic1Wó ôird-party archiv*CR �[yyyy] [¸ 'ofl aowner]xVqd underK
pð , Version 2.0 (C"5 0");)y, 	u-Ahis ; ex³¡ in compli¼Ñ.D   p�obtain a­  ] p o 1 at³  JÁhttp://www.ab.org/lÑs/LICENSE-2.03 !Un(Rrequi/¡icable law½ ‹d``in wril‘, softwarÌOe0Ÿ 8is ! ñon an "AS IS" BASIS÷÷WITHOUT WARRANTIES OR 'ÁANY KIND, ei @exprê@or iJ!ed7S<"foÃð	specific language govern`permisÒa ~Qlimit`sØ ³.
Metadata-
ð: 2.1
Name: tzdata
VerñNsion: 2021.1
Summary: Provider of IANA time zone data
Home-page: https://github.com/python/tz, ‘Author: P ò Software Foundation
# p-email:b ep a-sig@p6 ÿ$.org
License: Apache-2.0
Project-URL: Bug Reports, ˜ z/issuesB oSource= 
6 �DocumentÍ =  ð&.readthedocs.io
Platform: UNKNOWN
Classifier: DevelopN ù Status :: 4 - Beta+ ðIntended Audience* @ 9ers, ; " ÀOSI Approved M—+ 	? ñProgramming Languagn ÓO:: 20 ²3
Requires-E Ð: >=2
Descrip0-Coá òt-Type: text/x-rst

YR@pack‘  Ô  id¤ ³=  ´

This is a¿m pcontainn ö``zic``-compiled binaries for theC
C€base. It] ié  Êñto be a fallbackA ò
systems that do not have
 ›p instal‡ ‚(or don'/ 7 it ñin a standard
loc¼@), aì @partû¤`PEP 615 <NFwww.“�/dev/peps “-0615/>`_6ðrepository generate\ ƒ``pip``-¨ Sable Uð, published on PyPI as
`tzI… @pypi"/pþ/! ð>`_.

For more ingØ p, see `‹d¬S B ¬Q ¢
Wheel-Ver,R1.0
GÑ  ×pbdist_w$ ô" (0.36.2)
Root-Is-Purelib: true
Tag: py2-none-any 3 Ý -™.d -Ñ ò2/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
é X tLICENSEV ÿ M-jlAC01EtP8wigrmV5rrZ0zR4G5xawxhD9ASQDh87Q,592X e_APACH_ ÿ"xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357a „METADATAº ÿ!TSehrzXFQNMahDIiMiNbKnasvLOxocteQn8Evg9BhIY,1353Z �RECORD,," 	tQUESTED} ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0X TWHEELT ðZ-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyT,V ðtop_level.txt,sha256=öjMO6QqC0xRrN67Gh9xU_nMmadwBVlYzPNkq_h4gYuzaQ,7
tzdata/__init__.py,sha256=tOFf4R9vsnU3x9Fw9HNawAnYlQxN6FauvsHyuf3OpEs,252K –pycache__W õcpython-39.pyc,,y ôzoneinfo/Africa/Abidjan… ÿ 8-f8qg6YQP9BadNWfY-1kmZEhI9JY9es-SMghDxdSG4,130W DccraU ÿz9BSWKGI7SEbQln4_U2iJ76EFA5NAedp-MtrS67wZbY,70U •ddis_Abab[ ÿ B4OFT1LDOtprbSpdhnZi8K6OFSONL857mtpPTTGetGY,191° dlgiers² ÿL2nS4gLNFvuo89p3YtB-lSDYY2284SqkGH9pQQI8uwc,47² 6sma­ 6?smeV ?dBamako	5dBanguiV ÿ5e8SiFccxWxSdsqWbhyKZ1xnR3JtdY7K_n7_zm7Ke-Q,18XdBanjulV ¬ 6TissauV ÿ wa3uva129dJHRCi7tYt04kFOn1-osMS2afMjleO9mDw,149[„BlantyreX ð_UqXNoIwqJZ2yYd3lRCpkg_o2RH6BlSBU20QSM0PUpc³¥Brazzavill[ _6fujumbud´ 5ECaircÿ!G_DetFWxeDGfYec292gA3DmxUmz5dYE_tAoKp2HRlNo,1276b•CasablancðPIRNrKy2XRuJzmxPt45f2RD2NzshuYBIaQ006vIoIaQ½ECeutV öoEIgK53afz1SYxYB_D0jR98Ss3g581yb8TnLppPaYcY,56¢ttConakry¿5_DakarU ?´r_es_Salaam] É5uDjiboutX 6Eoual·5ðEl_Aaiun,sha256=uES5_eÿrCzcAWeJ8PQRgEWcOnP8P6-K_TQ7TpUZyCq4AA,1830
tzdata/zoneinfo/Africa/Freetown,sha256=8-f8qg6YQP9BadNWfY-1kmZEhI9JY9es-SMghDxdSG4,13X „GaboroneX ð_UqXNoIwqJZ2yYd3lRCpkg_o2RH6BlSBU20QSM0PUpX 1° _HararV >ÄJohannesburg² ÿ0Zrr4kNcToS_euZVM9I6nUQPmBYuW01pxz94PgIpnsg,19
DJubaT ÿ VTpoMAP-jJ6cKsDeNVr7l3LKGoKDUxGU2b1gqvDPz34,458eKampalW ÿB4OFT1LDOtprbSpdhnZi8K6OFSONL857mtpPTTGetGY,19]„Khartoum¯ ÿNRwOwIg4SR6XuD11k3hxBz77uoBpzejXq7vxtq2Xys8¯ TigaliV 5uKinshasÿ5e8SiFccxWxSdsqWbhyKZ1xnR3JtdY7K_n7_zm7Ke-Q,18±TLagos­ U 6…ibrevill¼Z 6%omT ¾5_LuandY?�ubumbash>ULusak° a5oMalabo
=UMaputV ¬ 7Dseru¬ ¼5VMbabaÅW 6uogadish° Á5uMonrovi
ÿ WM-JVfr502Vgy18Fe6iAJ2yMgOWbwwumIQh_yp53eKM,164peNairob·¯ 5uNdjamen¯ ð!Tlj4ZUUNJxEhvAoo7TJKqWv1J7tEYaf1FEMez-K9xEg,160ÿH
tzdata/zoneinfo/Africa/Niamey,sha256=5e8SiFccxWxSdsqWbhyKZ1xnR3JtdY7K_n7_zm7Ke-Q,180
V ”ouakchottZ ÿ 8-f8qg6YQP9BadNWfY-1kmZEhI9JY9es-SMghDxdSG4,130Z ¿Ouagadougou[ =¤Porto-NovoZ 5„Sao_TomeX ÿ Pfiutakw5B5xr1OSg1uFvT0GwC6jVOqqxnx69GEJu50,173Timbukt
>tTripoli¯ ÿ zzMBLZZh4VQ4_ARe5k4L_rsuqKP7edKvVt8F6kvj5FM,431¯ DunisU ÿ uoAEER48RJqNeGoYBuk5IeYqjc8sHvWLvKssuVCd18g,449U „WindhoekX ÿ g1jLRko_2peGsUTg0_wZycOC4gxTAHwfV2SO9I3KdCM,638X ¥__init__.pÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,ÂÅ__pycache__/e ÿcpython-39.pyc,,—  !me±5Adaì ÿq_sZgOINX4TsX9iBx1gNd6XGwBnzCjg6qpdAQhK0ieA,96DU unchorag¢ÿ d8oMIpYvBpmLzl5I2By4ZaFEZsg_9dxgfqpIM0QFi_Y,977¯ tnguillaŸÿyVMJJwybzLX9ymsqEFsk1vap3Pyoo1FIQdRPKL57uMc³ OtiguX @uraguainZ ÿ TawYX4lVAxq0BxUGhTDx4C8vtBRnLuWi8qLV_oXDiUo,592õrgentina/Buenos_AireÿIEVOpSfI6oiJJmFNIb9Vb0bOOMIgxO5bghFw7vkHFGk,70¸g …CatamarcË ÿUC0fxx7ZPmjPw3D0BK-5vap-c1cBzbgR293MdmEfOx0d ÏomodRivadavii KErdobb ÿ9Ij3WjT9mWMKQ43LeSUIqQuDb9zS3FSlHYPVNQJTFfË EJujuìÿ7YpjOcmVaKKpiq31rQe8TTDNExdH9jjZIhdcZv-ShUg,69î�uLa_RiojÃ ÿmUkRD5jaWJUy2f8vNFqOlMgKPptULOBn-vf_jMgF6x8,71d	òdMendozb À=dL4q0zgY2FKÿxPbG8cC-Wknnpp8tF2Y7SWgWSC_G_WznI,708
tzdata/zoneinfo/America/Argentina/Rio_Gallegos,sha256=bCpWMlEI8KWe4c3n6fn8u6WCPnxjYtVy57ERtLTZaEsg cSalta,` ÿ H_ybxVycfOe7LlUA3GngoS0jENHkQURIRhjfJQF2kfU,690Ç „San_Juanc ÿ Mj5vIUzQl5DtsPe3iMzS7rR-88U9HKW2csQqUda4JNM,717c 5Lui&ÿrka8BokogyvMRFH6jr8D6s1tFIpsUeqHJ_feLK5O6dsc VTucumÅ ÿ yv3aC-hALLio2yqneLIIylZhXKDlbPJGAd_abgsj9gg,726Å eUshuaiŠÿmcmZgB1pEHX6i7nlyRzjLnG8bqAtAK1TwMdRD2pZqBEê´__init__.py�ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,îÅ__pycache__/p ÿcpython-39.pyc,,	%ubÿ LQt6eOn4wGSJIVbywZRlexnSSRMoYYy5WyxwLcc6su4,151V esuncioƒÿ PuuUl8VILSBeZWDyLkM67bWl47xPMcJ0fY-rAhvSFzc,884Y VtikokÿQOK-iNWTL_DYtswInjd_BemE7HX0-0no6qMnCv9iHQA,22Y 
kÿ q_sZgOINX4TsX9iBx1gNd6XGwBnzCjg6qpdAQhK0ieA,969® 6Bah`ÿ _-ZFw-HzXc7byacHW_NJHtJ03ADFdqt1kaYgyWYobYw,682V …_BanderaƒÿFZB9-d0HzpRzvT665nb01SXffdSGJ4ZLw2xClDFv0M0,53[uBarbadoY ÿlfjvofZiWMz6t4nYIgPwFw5pjGQBxdMo4eFMHjl9FdY,23TBelemÿw0jv-gdBbEBZQBF2z2liKpRM9CEOWA36O1qU1nJKeCs,39¹dBelizeW ÿ!uYBPJqnCGnOOeKnoz1IG9POWTvXD5kUirpFuB0PHjVo,1045f–lanc-SablÇÿ_DEDJegLMgn_-K2VXNdFcRsYue-Jr1mJCL_0wqy3ey4,20] 	foa_VisÿhYTFFNNZJdl_nSYIdfI8SQhtmfiakjCDI_15TlB-xEw,4¾
6ogoW ÿxpL_ZCaZRNXYKdEiYl1zlVI4nJRbaggBHzC2YJIJOtU,17Ê	DoiseeÿJt3omyPSPRoKE-KXVd-wxVON-CDE5oGaJA7Ar90Q2OM,99V 	¥uenos_Aireoð$IEVOpSfI6oiJJmFNIb9Vb0bOOMIgxO5bghFw7vkHFGk,708
tzÿPdata/zoneinfo/America/Cambridge_Bay,sha256=q-nKpZUNHxBosyjWAuxt52nTRpYGT4pjpnML59rOgcQ,768
tzd^ ”po_Grande] ÿ!mngKYjaH_ENVmJ-mtURVjjFo5kHgLfYNPHZaCVSxQFE,952] DncunW ÿ XOYTJdVeHFfKeSGxHcZ_stJ9_Vkqn0q0LmS1mhnGI8o,529W 	TracasX ÿ UHmUwc0mFPoidR4UDCWb4T4w_mpCBsSb4BkW3SOKIVY,190X 	utamarcaZ ÿC0fxx7ZPmjPw3D0BK-5vap-c1cBzbgR293MdmEfOx0,70f
Eyennaÿ 9URU4o1v5759UWuh8xI9vnaANOceOeRW67XoGQuuUa8,151² 	5ymaaÿp41zBnujy9lPiiPf3WqotoyzOxhIS8F7TiDqGuwvCoE,14a	dhicagoÿ!wntzn_RqffBZThINcltDkhfhHkTqmlDNxJEwODtUguc,1754° uhihuahubÿL058y3Aye88cj3iUQlzEBuazgzwQeL0DgDYo1FaoQm4,34¼	Äoral_Harbour¹ ÿQOK-iNWTL_DYtswInjd_BemE7HX0-0no6qMnCv9iHQA,22¸ 	Uordob¶ ÿ9Ij3WjT9mWMKQ43LeSUIqQuDb9zS3FSlHYPVNQJTFfvosta_RisÿihoqA_tHmYm0YjTRLZu3q8PqsqqOeb1CELjWhPf_HXE,23|	Urestoÿ0rIT4Wc3IzhQjpQiTu-cDLwVa-DhcbLk8Lw1wpAKimU,15Ë	6uia
ÿOaIle0Cr-BKe0hOik5rwdcoCbQ5LSHkHqBS2cLoCqAU,93b	uÔsÿLQt6eOn4wGSJIVbywZRlexnSSRMoYYy5WyxwLcc6su4"µDanmarkshavÿ cQORuA8pR0vw3ZwYfeGkWaT1tPU66nMQ2xRKT1T1Yb4,447ÏFDawscÿBlKV0U36jqnlxM5-Pxn8OIiY5kJEcLlt3QZo-GsMzlY,10á	X d_CreekÌÿ t4USMuIvq1VVL9gYCabraAYs31kmAqAnwf7GzEiJJNc,683µ Eenve#ÿ m7cDkg7KS2EZ6BoQVYOk9soiBlHxO0GEeat81WxBPz4,104qtDetroit° ÿI4F8Mt9nx38AF6D-steYskBa_HHO6jKU1-W0yRFr50A,89�WDomin"ÿyVMJJwybzLX9ymsqEFsk1vap3Pyoo1FIQdRPKL57uMc,133WEdmon#ÿDq2mxcSNWZhMWRqxwwtMcaqwAIGMwkOzz-mW8fJscV8,97Y 	eirunepïð6tKYaRpnbBSmXiwXy7_m4WW_rbVfn5LUec0keC3JÿT7Iw,436
tzdata/zoneinfo/America/El_Salvador,sha256=4wjsCpRH9AFk5abLAbnuv-zouhRKcwb0aenk-nWtmz0,176\ tnsenadaY ÿ!bCo1kJvUtKwqrE00c-zaGwGtmtLKY5E7YC9ZKtP7uLs,1025Z ´Fort_Nelson] ÿ!_j7IJ-hXHtV_7dSMg6pxGQLb6z_IaUMj3aJde_F49QQ,1448] TWayne\ ÿ 5nj0KhPvvXvg8mqc5T4EscKKWC6rBWEcsBwWg2Qy8Hs,531[ Ealezÿ ugF4DWO3j_khONebf7CLsT9ldL-JOWey_69S0jl2LIA,484Z ”Glace_Bay´ ÿ I1posPHAEfg_Lc_FQdX1B8F8_A0NeJnK72p36PE7pKM,880Z dodthabX ÿC0J1R5isFxhqK7dfTVbcRa-U0sSv7Oi3OXQb90_NVbo,46ÄIGoos² ÿkB975nprE5Sr_vb244223YBWJnnZmu3FkhYIOqAZB5Y,15³ 
”rand_Turk¶ ÿ Gp8hpMt9P3QoEHmsIX2bqGNMkUSvlwZqqNzccR-cbe8,853rÓÿyVMJJwybzLX9ymsqEFsk1vap3Pyoo1FIQdRPKL57uMc,13f	…uadeloupu[ 9Utemaluÿ BGPGI4lyN6IFF_T0kx1q2lh3U5SEhbyDqLFuW8EFCaU,212„uayaquilgÿ 8OIaCy-SirKKz4I77l6MQFDgSLHtjN0TvklLVEZ_008,179Z 	5yan± ÿqmWxE7uA_rVUBDai7IgTk2YgHSaU-OLwQehWqI9GDKY,17± tHalifax¯ ÿkO5ahBM2oTLfWS4KX15FbKXfo5wg-f9vw1_hMOISGig,16Y v° ÿ!ms5rCuq2yBM49VmTymMtFQN3c5aBN1lkd8jjzKdnNm8,1117¤Hermosillo´ ÿC1m5qUIbf0CpxnixxhNr2hbahAuGIKjpKxJ-7pAorJU,28úƒIndiana/ Tpolise ñ6] E/Knovÿ KJCzXct8CTMItVLYLYeBqM6aT6b53gWCg6aDbsH58oI,101Ã eMareng#ÿygWmq8sYee8NFwlSZyQ_tsKopFQMp9Ne557zGGbyF2Y,56~¾ ¤Petersburg!ÿBIrubzHEp5QoyMaPgYbC1zSa_F3LwpXzKM8xH3rHspI,68Pc …Tell_CitÀøem2YMHDWEFXdZH0BKi5bLRAQ8bYDfop2T0Q8SqDh0B8,52ôÀneinfo/Ameri÷Pca/Indiana/Vevay,sha256=dPk334e7MQwl71-avNyREBYVWuFTQcVKfltlRhrlRpw,369
tzdata/zoneinfo/Americ^ „incennesb ÿ jiODDXepmLP3gvCkBufdE3rp5cEXftBHnKne8_XOOCg,558b tWinamac` ÿ R8Em7dmolgP711usASyUGzhC_NL5PdNmSah39w9KoTM,612` ¥__init__.p&ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0b ¥pycache__/n ÿcpython-39.pyc,,G Epolifÿ 5nj0KhPvvXvg8mqc5T4EscKKWC6rBWEcsBwWg2Qy8Hs,531] 	Duvik]ÿ6Vmm_0i0YM-HWq-76egyFHTBSiG4CRpjqd5QBBIlbCA,70W 	dqaluitX ÿG5a_XV7RTS0ZjxGAbuwrN8gN7oTrR1STj21soySrVoE,74StJamaicaX ÿ pDexcAMzrv9TqLWGjVOHwIDcFMLT6Vqlzjb5AbNmkoQ,339EJujuÿÿ7YpjOcmVaKKpiq31rQe8TTDNExdH9jjZIhdcZv-ShUg,69® 	Tuneau­ ÿ V8IqRaJHSH7onK1gu3YYtW_a4VkNwjx5DCvQXpFdYAo,966­ ôKentucky/Louisvilled ÿ zS2SS573D9TmQZFWtSyRIVN3ZXVN_2FpVBbtqQFMzKU,124e ¤Monticelloe ÿ54or2oQ9bSbM9ifRoOjV7UjRF83jSSPuxfGeXH0nIqk,97d „>Ç /__…*tKnox_INÿ KJCzXct8CTMItVLYLYeBqM6aT6b53gWCg6aDbsH58oI,101Í	…ralendij…ÿLQt6eOn4wGSJIVbywZRlexnSSRMoYYy5WyxwLcc6su4,15…dLa_Paz³ ÿ2iYBxnc0HIwAzlx-Q3AI9Lb0GI87VY279oGcroBZSVs,17Ö5Lim�ÿ 7vNjRhxzL-X4kyba-NkzXYNAOE-cqqcXvzXTqcTXBhY,283Ô–Los_AngelJÿ!IA0FdU9tg6Nxz0CNcIUSV5dlezsL6-uh5QjP_oaj5cg,1294] 	(G€Lower_PrŸÃ6UMaceiyðdSVg0dHedT9w1QO2F1AvWoel4_h8wmuYS4guEaL-5KÿNk,502
tzdata/zoneinfo/America/Managua,sha256=ZYsoyN_GIlwAIpIj1spjQDPWGQ9kFZSipjUbO8caGfw,295X $usW ÿ9kgrhpryB94YOVoshJliiiDSf9mwjb3OZwX0HusNRrk,41¯ 
TrigotX ÿ yVMJJwybzLX9ymsqEFsk1vap3Pyoo1FIQdRPKL57uMc,130¯ 	„rtinique[ ÿ m3rC6Mogc6cc1a9XJ8FPIYhZaSFNdYkxaZ-pfHhG3X4,178[ 	etamoroÿ NCAIpY1OzdRZA_YOLxK4d0aDsMbmEUHzknKNtnt2xEM,437Z 	dzatlan³ ÿloDGLTJG9p_FXvHZSNRy_aZf46djfR30PwSfnWgvtIw,36Y 	UendozÿdL4q0zgY2FKPbG8cC-Wknnpp8tF2Y7SWgWSC_G_WznI,70	uenomineeÿoUmJmzOZtChYrB9In-E1GqEVi2ogKjPESXlUySUGs94,91² 
5rid± ÿ NZgKbdcq4vh4G36ZJpGk96JnsOLNc3hlL_MwcJNNuLE,303bPetlakedÿ-SGuCUejuefFzayhzgqgzZtx1G4UMoSlavw9Ey5aylk,5!
¤exico_City\ ÿly8lZWNi_Z2U8GUc-Hd31SJFMagTblI5bcTNZQrWbaY& É%loÿaL9A5NhloNVIHze2oKf_9fe_xD4Poawa9bhNDwhpTyM,55'	FonctX ÿ MhwbtKj6OjEEA1GQLhCEljfE-ji5RnLrieY5YgFkjd8,149i	uonterreÿfHk7KfkHlLL4HuHQx7OrIEtExN4ZR2R44n03qrhYANY,2Z Uvideogÿ7FjW6qscGzdvfjlbIeZ5CQ_AFWS3ZeVDS5ppMJCNM0,969tontrealY ÿrS1CerA3FRdQOUcbYaphHU_fM8-2HysVmT7BfEAboeU,17Ï
�ontserraê?dNassau³ ÿ!Vj8PbycCdZHz5oUKrVyyeiIWdB696YvRkBHuBYwf2A0,1006„New_YorkZ ÿ!1_IgazpFmJ_JrWPVWJIlMvpzUigNX4cXa_HbecsdH6k,1744Z GipiguÿSCxOkNkHwutcMhZzxiC16P7PhPDD6MY1giesXHyf-c,835X %om‰ÿ_-incQnh0DwK9hJqFaYzO4osUKAUB2k2lae565sblpA,97U 
EronhŠÿQ0r3GtA5y2RGkOj56OTZG5tuBy1B6kfbhyrJqCgf27g,48	ôorth_Dakota/BeulahjðRvaBIS60bNNRmREi6BXSWEbJSrcP7Jÿh8Nmxg8OkBcrow,1043
tzdata/zoneinfo/America/North_Dakota/Center,sha256=M09x4Mx6hcBAwktvwv16YvPRmsuDjZEDwHT0Umkcgyo,990d ”New_Salemg ÿmZca9gyfO2USzax7v0mLJEYBKBVmIqylWqnfLgSsVys,g ´__init__.pyi ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,Î Å__pycache__/s ÿcpython-39.pyc,,~4uukŸ ÿ C0J1R5isFxhqK7dfTVbcRa-U0sSv7Oi3OXQb90_NVbo,465U tOjinagaX ÿ XT1aU0ybeykTXMdPOCt9iwB-_j6H8vL1AxZVuJeYnEY,484X UPanamW ÿ p41zBnujy9lPiiPf3WqotoyzOxhIS8F7TiDqGuwvCoE,149W 
„gnirtung³ ÿCf5iz4mAXokn7hVhT8DWWTbYf3Z_ziNttpIqtPsqlus,76\ 
…ramaribo[ ÿ2v9tR6no54CRECWDFhANTl40UsA4AhHsdnGoNCb4_Q,187· dhoenixX ÿrhFFPCHQiYTedfLv7ATckxeKe04jxeUvIJi4vUXMtUc,24_äPort-au-Prince_ ÿwsS6VbQ__bKJ2IUMPy_Pao0CLRK5pXEBrqkaYuqs3Ns,5	 _ ”_of_Spain^ ÿyVMJJwybzLX9ymsqEFsk1vap3Pyoo1FIQdRPKL57uMc,13½ Uo_Acr¹ ÿ VjuQUr668phq5bcH40r94BPnZBKHzJf_MQBfM6Db96U,418p•orto_VelhÌÿ9yPU8EXtKDQHLF745ETc9qZZ9Me2CK6jvgb6S53pSKg,39Ú	 ue] 5Ric\ ÿq76GKN1Uh8iJ24Fs46UHe7tH9rr6_rlBHZLW7y9wzo0,17(	´unta_Arenaspÿ 9vc7t6-5XcSEtUqHqybKQS9QX9wutk4I-8vVm1NQOeo,120á–Rainy_Riv·ÿ762GdfWjFM6oRLOerkTn_8Wc_SC2jIXgRJ5HF6jI4aA,83HÄRankin_Inletº ÿ yMtg6kPONTeHXgSK4GEV7kgepuhlRHL1u2z9eHZp7jI,692ÏURecif&ÿ3yZTwF3MJlkY0D48CQUTzCRwDCfGNq8EXXTZYlBgUTg¤URegin¤ÿ_JHuns225iE-THc9NFp-RBq4PWULAuGw2OLbpOB_UMw,63}uResolut° ÿikQTciyTLd3v2DxaXfBvaXMcG7S9HWYv5BOmg_hSFX0vio_Brany1$À/zoneinfo/AmñJerica/Rosario,sha256=9Ij3WjT9mWMKQ43LeSUIqQuDb9zS3FSlHYPVNQJTFf0,708
tzdata/zoneinfo/AmeX ÄSanta_Isabel] ÿ"bCo1kJvUtKwqrE00c-zaGwGtmtLKY5E7YC9ZKtP7uLs,1025^ 4remZ ÿ dDEGsnrm4wrzl4sK6K8PzEroBKD7A1V7HBa8cWW4cMk,409Y 5iagÿ!tu-_tKNb596y2TNjISGQWbM8EdZq6fmlz5UzFpRwfss,1282Z vo_Domin_ ÿ xmJo59mZXN7Wnf-3Jjl37mCC-8GfN6xmk2l_vngyfeI,317^ 	eo_Paul¹ ÿ-izrIi8GXAKJ85l_8MVLoFp0pZm0Uihw-oapbiThiJE,95¸ 	´coresbysundoÿ3QmA-6sZqEFIJ_JzUAKni7IZQLWB_JZ1zN-HkgjgiT8,47o	thiprockY ÿ m7cDkg7KS2EZ6BoQVYOk9soiBlHxO0GEeat81WxBPz4,104· 	DitkaW ÿ pF5yln--MOzEMDacNd_Id0HX9pAmge8POfcxyTNh1-0,956gÄt_Barthelemy^ ÿ yVMJJwybzLX9ymsqEFsk1vap3Pyoo1FIQdRPKL57uMc,130^ 
TJohnsY ÿ jBTPMhJvnQTt4YCLqLAs3EgPtSzuVO2FxDbcOdh6BaM,187Ž	et_KittZ ³ 9ELucijY 9_Thoma³ BtVincenthµ 7—wift_Curr^ ÿF-b65Yaax23CsuhSmeTDl6Tv9du4IsvWvMbbSuwHkLM,36Å¥Tegucigalpoÿ KlvqBJGswa9DIXlE3acU-pgd4IFqDeBRrUz02PmlNC0,194{TThuleÿLzL5jdmZkxRkHdA3XkoqJPG_ImllnSRhYYLQpMf_TY8,45§¥Thunder_Ba-ÿ 98387CjH4PMPjJmXf_1ecfP7Lcp9YDlh6oYtMNihdys,881² Uijuan
\7eTorontIÿrS1CerA3FRdQOUcbYaphHU_fM8-2HysVmT7BfEAboeU,17¤	eTortol² v6”VancouverÀðEpou71sUffvHB1rd7wT0krvo3okXAV45_TWcOFÿPpy26Q,1330
tzdata/zoneinfo/America/Virgin,sha256=yVMJJwybzLX9ymsqEFsk1vap3Pyoo1FIQdRPKL57uMc,1W 	¤Whitehorse[ ÿ!zPAambvFUucncbvt7aGFUpHUWlpmEDIqbyQiwu7XRig,1029³ „WinnipegZ ÿ!ANzwYGBU1PknQW4LR-H92i5c4Db95LU-UQhPhWZCjDo,1294Z tYakutatY ÿ pvHLVNA1mI-H9fBDnlnpI6B9XzVFQeyvI9nyIkaFNYQ,946X •ellowknifÿOESJDiz47K1puLbse-fyhWSHTMTbGZNF_kZ5jUO0eSQ,7	´__init__.py¸ ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,Å__pycache__/f ÿcpython-39.pyc,,õ  `ntarct]ECase– ÿ x-Y2IsrnKPAmYEmrkhgFSQGtbcudvVTUGSuSSBUKb1c,243Y 
TDavisï ÿ Pom_267rsoZl6yLvYllu_SW1kixIrSPmsd-HLztn33Y,197Y ÆumontDUrvill­ÿ2Pc1_Jzc95HIm68lJDw_-U2BVTbqJ1E059dfH1uj-4,152b 
…Macquari] ÿWsRh5ci8UXCBgkvI1yK-4sIoI0u7tzqamj9yJlbTN14,97fqUMawsoÎÿUYuiBSE0qZ-2kkBAa6Xq5g9NXg-W_R0P-rl2tlO0jHc· dcMurdotÿDgbn5VrtvJLvWz0Qbnw5KrFijP2KQosg6S6ZAooL-7k,10ÎdPalmer[ ÿ3MXfhQBaRB57_jqHZMl-M_K48NMFe4zALc7vaMyS5xw,88ÏtRothera[ ÿXeddRL2YTDfEWzQI7nDqfW-Tfg-5EebxsHsMHyzGudI,13È†South_Po&:ESyow¸ ðcLyIktwtsd4DOZIp1Dn_k5PD9a726qzJcpUmtOa_NFUï€
TTrollÿqATzm4g2pZ0jc6RzibcN1aMj3jKB-x6F0UaV385RW90,17ldVostokZ ÿfMj8_siYPl8w-lC6gMqkazrKe9RXBWvKb-H4nHUp5T8³ }ã73æ%ãÅ/LongyearbyewÿPgsEbMMGco3J6l4l6yvCL1YR7zye4Obedj0ImA_6LNM,6Ñ\ ÷ "ÀWZG3hSuFU,0ý0
tzdata/zoneinfo/Arctic/__pycache__/__init__.cpython-39.pyc,,
> ÿ0sia/Aden,sha256=RoU-lCdq8u6o6GwvFSqHHAkt8ZXcUSc7j8cJH6pLRhw,133R TlmatyT ÿ iaqf5cQoVO3t6t5a8W7I2SRv1UM346tRIYZudOoLOFA,609T 5mma§ ÿ aiwKiWjin1ogq-prgEl64HNdDAT9iZuw8-umhkoKXmM,787S Tnadyr§ ÿ 30bdZurg4Q__lCpH509TE0U7pOcEY6qxjvuPF9ai5yc,743T DqtauS ÿ bRj27vG5HvGegFg5eIKNmq3dfteYmr7KmTs4JFO-7SM,606S 4obeT ÿ Pm7yI5cmfzx8CGXR2mQJDjtH12KCpx8ezFKchiJVVJ4,615T tshgabatV ÿOTLHdQ8jFPDvxu_IwKX_c3W3jdN6e7FGoCSEEb0XKuw,37V okhabadW <6tyrUÿ1YG4QzLxPRZQeGHiOrbm0cRs8ERTNg1NF9dWEwW2Pi0,61UVBaghd© ÿ zFe6LXSfuoJjGsmYTMGjJtBcAMLiKFkD7j7-VaqKwH8,630VeBahrai¦ÿ YWDWV1o3HHWxnmwlzwMWC53C84ZYPkK_gYn9-P0Xx4U,152U kQÿ _Wh6ONaRatMc9lpwGO6zB9pTE38NZ4oWg4_-sZl17mA,744R Tngkok¥ÿzcjiwoLYvJpenDyvL8Rf9OnlzRj13sjLhzNArXxYTWQ§ 
TrnaulU ÿUGFYJYvtgYVS8Tqsqvj6p0OQCmN3zdY9wITWg8ODG-k,75NUBeiru¥ÿFgM4gqbWFp6KuUnVn-H8UIXZgTydBeOxDdbebJ0GpUc,73PUishkeþ ÿ RXdxVxaiE5zxX5atQl-7ZesEeZVjsCXBGZ6cJbVU9pE,618STruneiý ÿdWd1av76ss5ZnmZSonFU-wyu9TWDI9HYyZPXB6C0aOE,15§„CalcuttaV ÿOgC9vhvElZ5ydWfHMLpRsDRV7NRV98GQxa0UOG63mw0,22¤6ChiS ÿ1Lme3ccO47R5gmTe5VCq1BSb0m_1opWibq21zvZlntg,75S foibals ÿhsakX_o0anB6tNBNp_FKGx4k57IcODYubf1u2G_2Vqk,61ó”Chongqingÿv4t-2C_m5j5tmPjOqTTurJAc0Wq6hetXVc4_i0KJ6oo,39UoChungkW ?dolombo¬ ÿQAyjK7gtXUWfLuju1M0H3_ew6iTM-bwfzO5obgvaHy8,24£ðDacca,sha256=rCGÿtmEwbW4qkUU2QfTj5zLrydVCq8HTWl1dsqEDQOvvo,231
tzdata/zoneinfo/Asia/Damascus,sha256=xCQIvMdSYVnlVZSsAHVJiijJi1w719iwaRG_O0_qssk,1047W DhakaT ?rCGª 14iliR ÿ ByL6yx7Cuq6axUp5D1n8a9MtmAod_mw6JQP_ltYdOUg,170¥ 5ubaS ÿ DZ6lBT6DGIAypvtNMB1dtoj0MBHltrH5F6EbcaDaexY,133S dshanbe© ÿ 8qbn76rf9xu47NYVdfGvjnkf2KZxNN5J8ekFiXUz3AQ,366V …FamagustRÿ385fbaRnx-mdEaXqSyBKVBDDKPzCGKbynWYt75wwCug,94 5GazR ÿ W2EbedA5B_dPCULvlcAWGXBiqwsoH2JkHV3LSEaJ0fA,121 dHarbinþ ÿv4t-2C_m5j5tmPjOqTTurJAc0Wq6hetXVc4_i0KJ6oo,39T EebroT ÿuFQcHmrqRcdUgP9vBzDhHVFJHSyWRVy_J6nB3lPobNg,1ø´Ho_Chi_Minh® ÿXzqaYDGh3tKDFZ-DVGcH6zsz0ECqQnhru0S8ICifsQQ,23¬”Hong_KongW ÿ 9AaPcyRtuXQX9zRnRTVkxX1mRs5JCbn6JTaSPvzX608,775DHovdR ÿ eqAvD2RfuIfSDhtqk58MECIjz5X14OHZ7aO4z14kndk,594R tIrkutskU ÿsWxp8g_aSfFan4ZyF9s6-pEX5Vgwxi_jNv7vwN06XIo,76S„IstanbulV ÿ KnFjsWuUgG9pmRNI59CmDEbrYbHwMF9fS4P2E9sQgG8,120W VJakarÿÿ 4qCZ6kix9xZriNIZsyb3xENz0IkJzZcjtENGlG_Wo4Q,248uJayapurÿBUa0kX1iOdf0E-v7415h7l0lQv4DBCYX_3dAbYmQ0xU,17Q”Jerusalemÿ n83o1YTeoFhfXIcnqvNfSKFJ4NvTqDv2zvi8qcFAIeM,107¯'KaWÿ pNIwTfiSG71BGKvrhKqo1xdxckAx9vfcx5nJanrL81Q,159vKamchat©ÿ Qix8x3s-m8UTeiwzNPBy_ZQvAzX_aaihz_PzLfTiUac,727W ErachYÿujo4wv-3oa9tfrFT5jsLcEYcjeGeBRgG2QwdXg_ijU4,2tKashgarUÿhJyv03dhHML8K0GJGrY8b7M0OUkEXblh_RYmdZMxWtQ®”KathmanduW ÿdrjxv-ByIxodnn-FATEOJ8DQgEjEj3Qihgtkd8FCxDg,16?KatV Aðhandyga,sha256=fdEÿrDOsDJkLuENybqIXtTiI4k2e24dKHDfBTww9AtbSw,775
tzdata/zoneinfo/Asia/Kolkata,sha256=OgC9vhvElZ5ydWfHMLpRsDRV7NRV98GQxa0UOG63mw0,220U ³rasnoyarsk,Y ÿ buNI5S1g7eedK-PpnrLkBFFZDUyCtHxcxXDQGF2ARos,741Y ´uala_LumpurZ ÿ VBavZ-2JHKTr-M2RsSJtTLicD_eyR3eBbp2mU3Ui-mQ,256Z TchingU ÿ3ajgII3xZ-Wc-dqXRTSMw8qQRDSjXlSBIxyE_sDRGTk,3TuwaitT ÿ RoU-lCdq8u6o6GwvFSqHHAkt8ZXcUSc7j8cJH6pLRhw,133© TMacaoS ÿmr89i_wpMoWhAtqZrF2SGcoILcUw6rYrDkIUNADes7E,79V S uS =TgadanU ÿwAufMGWL_s1Aw2l3myAfBFtrROVPes3dMoNuDEoNwT8,75¨ Ukassaúÿ NV9j_RTuiU47mvJvfKE8daXH5AFYJ8Ki4gvHBJSxyLc,190Q5nilÿ Vk8aVoXR_edPDnARFdmEui4pq4Q3yNuiPUCzeIAPLBI,238T EuscaùÿDZ6lBT6DGIAypvtNMB1dtoj0MBHltrH5F6EbcaDaexYùeNicosi© ÿ FDczuLwTlqVEC6bhsxGV7h8s_mDBoLIwl5NNm-LW2T4,597© ¦Novokuznet«ÿaYW9rpcxpf_zrOZc2vmpcqgiuCRKMHB1lMrioI43KCw,72Q Z GsibiÿI2n4MCElad9sMcyJAAc4YdVT6ewbhR79OoAAuhEJfCY,75&Om« ÿy7u47EObB3wI8MxKHBRTFM-BEZZqhGpzDg7x5lcwJXYVDOralªÿQ-Gf85NIvdAtU52Zkgf78rVHPlg85xyMe9Zm9ybh0po,62V¤Phnom_PenhX ÿ zcjiwoLYvJpenDyvL8Rf9OnlzRj13sjLhzNArXxYTWQ,152¯…PontianaWÿo0x0jNTlwjiUqAzGX_HlzvCMru2zUURgQ4xzpS95xds,24vPyongyaÿÿNxC5da8oTZ4StiFQnlhjlp9FTRuMM-Xwsq3Yg4y0xkA,18ª6Qat­ÿYWDWV1o3HHWxnmwlzwMWC53C84ZYPkK_gYn9-P0Xx4U„QostanayWÿLm7GHuc0Ao7qy-fmTsYkqxWDKQsf3_oW_rG61edr9fg,61¯…Qyzylord]ÿ JltKDEnuHmIQGYdFTAJMDDpdDA_HxjJOAHHaV7kFrlQ,624®eRangooÿ6J2DXIEdTaRKqLOGeCzogo3whaoO6PJWYamIHS8A6Qw,18¬ÀRiyadh,sha25ÿv6=RoU-lCdq8u6o6GwvFSqHHAkt8ZXcUSc7j8cJH6pLRhw,133
tzdata/zoneinfo/Asia/Saigon,sha256=XzqaYDGh3tKDFZ-DVGcH6zsz0ECqQnhru0S8ICifsQQ,236T UkhaliV ÿ M_TBd-03j-3Yc9KwhGEoBTwSJxWO1lPBG7ndst16PGo,755V ƒmarkand,­ ÿ KZ_q-6GMDVgJb8RFqcrbVcPC0WLczolClC4nZA1HVNU,366W DeoulS ÿZKcLb7zJtl52Lb0l64m29AwTcUbtyNvU0IHq-s2reN4,41ª thanghaiV ÿv4t-2C_m5j5tmPjOqTTurJAc0Wq6hetXVc4_i0KJ6oo,39ª„ingaporeW ÿGToOoSoNKCMog4y_lmuYF6QL4ziEeN677-Q7GivX-tg,25 Ärednekolymsk[ ÿ 06mojetFbDd4ag1p8NK0Fg6rF2OOnZMFRRC90N2ATZc,742[UTaipeÿ oEwscvT3aoMXjQNt2X0VfuHzLkeORN2npcEJI2h-5s8,511T eshkentª ÿvpN2gI9GY50z1nea6zCPFf2B6VCu6XQQHx4l6rhnTIeTbilis« ÿ ON_Uzv2VTSk6mRefNU-aI-qkqtCoUX6oECVqpeS42eI,629« Eehraÿ!SJkWIMlYqCjhpHgM8_VmRWDLlDBktv_TJ1z9JBX-lLY,2004U dl_Aviv ÿ n83o1YTeoFhfXIcnqvNfSKFJ4NvTqDv2zvi8qcFAIeM,107W ThimbuU ÿN6d_vfFvYORfMnr1fHJjYSt4DBORSbLi_2T-r2dJBnI,15T 	/phU =Dokyo¨ ÿWaOHFDDw07k-YZ-jCkOkHR6IvdSf8m8J0PQFpQBwb5Y,21Y'ToúÿBf7GoFTcUeP2hYyuYpruJji33tcEoLP-80o38A6i4zU,75S ÔUjung_Pandang® ÿ NV9j_RTuiU47mvJvfKE8daXH5AFYJ8Ki4gvHBJSxyLc,190´UlaanbaatarY ÿ--I8P6_e4BtRIe3wCSkPtwHOu_k9rPsw-KqQKHJC9vM,59¯ŸUlan_BatoX =Erumq[ÿhJyv03dhHML8K0GJGrY8b7M0OUkEXblh_RYmdZMxWtQ¶„Ust-Neraÿ6NkuV1zOms-4qHQhq-cGc-cqEVgKHk7qd3MLDM-e2BA,77\…VientianbÿzcjiwoLYvJpenDyvL8Rf9OnlzRj13sjLhzNArXxYTWQ,15¥Vladivosto`÷zkOXuEDgpxX8HQGgDlh9SbAQzHOaNxX2XSI6Y4gMD-k`Àa/zoneinfo/AòFsia/Yakutsk,sha256=xD6zA4E228dC1mIUQ7cMO-9LORSfE-Fok0awGDG6juk,741
tzdata/zoneinfo/AU DngonT ÿ!6J2DXIEdTaRKqLOGeCzogo3whaoO6PJWYamIHS8A6Qw,187T Äekaterinburg[ ÿ q17eUyqOEK2LJYKXYLCJqylj-vmaCG2vSNMttqrQTRk,760[ Ereva° ÿ pLEBdchA8H9l-9hdA6FjHmwaj5T1jupK0u-bor1KKa0,708U ´__init__.py® ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,¬ Å__pycache__/c ÿcpython-39.pyc,,“  ätlantic/Azores’ ÿ!MlSsUdo8uNdvNiX427MgphVyedbIDOJP2KhLN6BNn4c,1435Y tBermudaZ ÿ!PuxqD2cD99Pzjb8hH99Dws053d_zXnZHjeH0kZ8LSLI,1024Z UCanarEÿXMmxBlscPIWXhiauKy_d5bxX4xjNMM-5Vw84FwZkT00,47ž¤Cape_Verdeµ ÿE5ss6xpIpD0g_VEDsFMFi-ltsebp98PBSpULoVxIAyU,17	UFaeroX ÿIw0qB0mBuviH5w3Qy8jaxCOes07ZHh2wkW8MPUWJqj0,44V´ /FaW B…Jan_Mayeÿ PgsEbMMGco3J6l4l6yvCL1YR7zye4Obedj0ImA_6LNM,676¾eMadeirÿhVbliV_Ds81EjNvLDyVA8bwfbjvmFegkG7gtK4e2Ipr…Reykjavi½ÿ aXZEH_I90Wfw1NZyW1DdcdecC-1kNuxov6cKSjm_hdI,753µ ÅSouth_Georgi» ÿ kPGfCLQD2C6_Xc5TyAmqmXP-GYdLLPucpBn3S7ybWu8,132_ 	ut_Helen[ ÿ8-f8qg6YQP9BadNWfY-1kmZEhI9JY9es-SMghDxdSG4,13!eStanle.ÿ QqQd8IWklNapMKjN5vF7vvVn4K-yl3VKvM5zkCKabCM,789´ mÐ7´ Ô%Äustralia/ACTÃÿgg1FqGioj4HHMdWyx1i07QAAObYmCoBDP44PCUpgS1k,90wV VdelaiÿGk1SdGRVmB233I-WETXAMCZz7L7HVzoN4aUoIcgNr3g,92Æ[ uBrisban!ÿ2kVWz9CI_qtfdb55g0iL59gUBC7lnO3GUalIQxtHADY,2§[ ”oken_Hillð	dzk9LvGA_xRStnAIjAFuTJ8Uÿdwz_s7qGWGQmiXPgDsLY,941
tzdata/zoneinfo/Australia/Canberra,sha256=gg1FqGioj4HHMdWyx1i07QAAObYmCoBDP44PCUpgS1k,904[ 	TurrieY ÿ!1IAVgf0AA3sBPXFhaxGfu9UQ_cpd4GNpsQ9xio2l4y0,1003µ 	dDarwinZ ÿZoexbhgdUlV4leV-dhBu6AxDVkJy43xrPb9UQ3EQCdI,23³ 
EEuclÿ3NqsFfMzR6-lSUPViNXBAOyJPqyokisse7uDXurURpk,31X 
dHobart± 94LHIW ÿ 82i9JWWcApPQK7eex9rH1bc6kt_6_OFLTdL_uLoRqto,692a	uLindemacÿ iHkCc0QJ7iaQffiTTXQVJ2swsC7QJxLUMHQOGCFlkTk,325[ 
uord_How· 8…Melbourn\ ÿX7JPMEj_SYWyfgWFMkp6FOmT6GfyjR-lF9hFGgTavnE,Î4NSWi$8TNorthX É8(PeX ÿsuelcBC1YfWugH2CrlOXQcSDD4gGUJCobB1W-aupHo,306¾	¤Queenslandµ ÿ 2kVWz9CI_qtfdb55g0iL59gUBC7lnO3GUalIQxtHADY,289] 	6SouÿGk1SdGRVmB233I-WETXAMCZz7L7HVzoN4aUoIcgNr3g,92ä
dSydney± ¾8uTasmani2Ù9fVictor\ Ë85WesŒZ7•Yancowinnÿ	dzk9LvGA_xRStnAIjAFuTJ8U¨ ¥__init__.pÉÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0x	Å__pycache__/h þcpython-39.pyc,,A ¥Brazil/Acrpÿ VjuQUr668phq5bcH40r94BPnZBKHzJf_MQBfM6Db96U,418T …DeNoronhJðQ0r3GtA5y2RGkOj56OTZG5tuBy1B6kfbhyrJqCÿNgf27g,484
tzdata/zoneinfo/Brazil/East,sha256=-izrIi8GXAKJ85l_8MVLoFp0pZm0Uihw-oapbiThiJE,952T &WeT ÿ 9kgrhpryB94YOVoshJliiiDSf9mwjb3OZwX0HusNRrk,412T ´__init__.py¯ ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0Y ¥pycache__/e þcpython-39.pyc,,> 4CETˆ ÿ 9q70fJErxHX0_hfgu5Wk0oH5ZZLUWhBIHJI1z7gHgBI,621L  UST6CDP ÿajbQjR1ESk2m3dg1sAR2slqafjcfIhw-SC4SC6F7VBY,95P äanada/Atlantic¨ ÿ kO5ahBM2oTLfWS4KX15FbKXfo5wg-f9vw1_hMOISGig,167Œ CY tCentralX ÿ ANzwYGBU1PknQW4LR-H92i5c4Db95LU-UQhPhWZCjDo,129Œ X  Œ4ernX ý"rS1CerA3FRdQOUcbYaphHU_fM8-2HysVmT7BfEAboeU,1717äX uMountaiY ÿDq2mxcSNWZhMWRqxwwtMcaqwAIGMwkOzz-mW8fJscV8,97; X ÄNewfoundlandµ ÿ!jBTPMhJvnQTt4YCLqLAs3EgPtSzuVO2FxDbcOdh6BaM,1878µ VPacif½ÿ Epou71sUffvHB1rd7wT0krvo3okXAV45_TWcOFpy26Q,133µ µSaskatchewaÿ_JHuns225iE-THc9NFp-RBq4PWULAuGw2OLbpOB_UMw,63´ EYukoU ðzPAambvFUucncbvt7aGFUpHUWlpmEDIqbyQiwu7XRo?029
–û6À/__û#æhile/Continent	ÿ tu-_tKNb596y2TNjISGQWbM8EdZq6fmlz5UzFpRwfss,128a[ (IsXÿ 6_2WxQBUdLUuU29E40uTzqSxOjK6Usv4LKawmK19lXw,110\ M@´ L%4uba;ÿms5rCuq2yBM49VmTymMtFQN3c5aBN1lkd8jjzKdnNm8,11ðE•ÿftIfVTZNlKejEciANKFFxES2uv_Z4rTAgyjwvk1lLpE,49< %ES‘ðEqcp0sCDGh_NPbcYAbBhmUob540rIs8FUnkmkZDQ0go™ ÉVEST5EáÿRAPR1jPCcVa5nvibF24lGKApc2bRw3Y87RbesyI3BP4áEEgyp¶ðG_DetFWxeDGfYec292gA3DmxUmz5ÿRdYE_tAoKp2HRlNo,1276
tzdata/zoneinfo/Eire,sha256=-TIuKV_WwdC0jEOmm9Q4CHYLzRK2j-q7zEsDFsXC3i4,149N dtc/GMTQ ÿ 3EoHVxsQiE5PTzRQydGhy_TAPvU9Bu0uTqFS2eul1dc,111ž  P /+0R >1R ÿ 5L9o8TEUgtB11poIag85vRdq08LMDZmZ6DPn7UqPL_g,113¤ 1¥ ÿ IvBxiqQU76qzNbuxRo8Ah9rPQSRGQGKp_SRs5u1PPkM,114S ¦ ÿ9MfFpFp_rt9PksMjQ23VOlir3hzTlnLz_5V2tfonhbUS 2ù ÿl26XCFp9IbgXGvMw7NHgHzIZbHry2B5qGYfhMDHFVrwS R ÿYbbqH7B6jNoQEIjyV4-8a2cXD9lGC3vQKnEkY2ucDGIK3¤ ÿq3D9DLfmTBUAo4YMnNUNUUKrAkKSwM5Q-vesd9A6SZQR 4R ÿUghKME3laXSDZ7q74YDb4FcLnzNqXQydcZpQHvssP2kR 5R ðTZ5qaoELlszW_Z5FdqAEMKk8Y_xu5XhZBNZUco55SrîA6R ð_2k3LZ5x8hVjMwwmCx6GqUwW-v1IvOkBrJjYH5bD6QšR 7R ÿDi8J430WGr98Ww95tdfIo8hGxkVQfJvlx55ansDuoeH8R ÿOIIlUFhZwL2ctx3fxINbY2HDDAmSQ7i2ZAUgX7Exjg¤ 9R ÿ1vpkIoPqBiwDWzH-fLFxwNbmdKRY7mqdiJhYQImVxaR -ˆ5-‡ÿS81S9Z0-V-0B5U-0S0Pnbx8fv2iHtwE1LrlZk-ckLto4
--ðVvdG5IpXB_xJX4omzfrrHblkRUzkbCZXPhTrLngc7v‘5-%-1¦ ÿ2sYLfVuDFSy7Kc1WOPiY1EqquHw5Xx4HbDA1QOL1hc4,11S 	ÛðifHVhk5fczZG3GDy_Nv7YsLNaxf8stB4MrzgWUCINl€S 	ÜÿCMkORdXsaSyL-4N0n37Cyc1lCr22ZsWyug9_QZVe0E0¦ ÝÿNK07ElwueU0OP8gORtcXUUug_3v4d04uxfVHMUnLM9¦ ø ðQMToMLcif1S4SNPOMxMtBLqc1skUYnIhbUAjKEdAf9•Ë-÷ ÿ10GMvfulaJwDQiHiWEJiU_YURyjDfPcl5ugnYBugN3ECö ðc6Kx3v41GRkrvky8k71db_UÿXJbpyyp2OZCsjDSvjkr6s,114
tzdata/zoneinfo/Etc/GMT-5,sha256=94TvO8e_8t52bs8ry70nAquvgK8qJKQTI7lQnVCHX-U,R 
6R ÿ3fH8eX--0iDijmYAQHQ0IUXheezaj6-aadZsQNAB4fE¤ 7R ÿDnsTJ3NUYYGLUwFb_L15U_GbaMF-acLVsPyTNySyH-MR 8R ÿkvGQUwONDBG7nhEp_wESc4xl4xNXiXEivxAv09nkr_gR 9R ÿU1WRFGWQAW91JXK99gY1K9d0rFZYDWHzDUR3z71Lh6YR 
0Q ÿ 3EoHVxsQiE5PTzRQydGhy_TAPvU9Bu0uTqFS2eul1dc,111ë�reenwichV :4UCTP ð_dzh5kihcyrCmv2aFhUbKXPN8ILn7AxpD35CvmtZi5›¦ ?UTCP ;�niversalV :OZuluQ :´__init__.pyX ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0óÅ__pycache__/b ÿcpython-39.pyc,,;  ô urope/Amsterdam’ ÿ 66Cy1pMbJFuoKAZ8GkMzPCdZ0DAFNbiq5cv0fpXv4cU,107âZ dndorraX ÿ leuTyE4uduIBX0aHb_7PK_KlslpWSyS6e0SS84hKFrE,389± „strakhanY ÿ P3E5UDgQ4gqsMi-KdMAWwOSStogdcNl9rLMVUdpFLXI,726Y TthensV ÿ 8f1niwVI4ymziTT2KBJV5pjfp2GtH_hB9sy3lgbGE0U,682V tBelfastW ÿ uyn7O8ngevKoAEzN2ZbEqStrZGlPhNVY4g_ClHNEXFc,159„BelgradeY ÿ qMlk8-qnognZplD7FsaMAD6aX8Yv-7sQ-oSdVPs2YtY,478° 5rli\ÿ p_2ZMteF1NaQkAuDTDVjwYEMHPLgFxG8wJJq9sB2fLc,705V …ratislavÿ pukw4zdc3LUffYp0iFr_if0UuGHrt1yzOdD5HBbBRpo,723Z Uussel¸ðsQ-VQqhQnwpj68p449gEMt2GuOopZAAoD-vZz6dugoé0Y fuchare»ÿpWUkYQ98vXhFdLu4EQqdul6r9DmB11cL4cfaAPlEbfA,66WBudapX ð%qNr-valoDI1mevuQXqOMkOhIcT194EczOKIijxrDMV8,766
tzdÿJata/zoneinfo/Europe/Busingen,sha256=GZBiscMM_rI3XshMVt9SvlGJGYamKTt6Ek06YlCfRek,497
tzdaX  „ChisinauX ÿ VfQLbvYP7ete6eHeCdMthDfGH_FLiyEXQM7pgyHFsHo,755X gopenha² ÿ 4hDnszOco4vrEtaScOpwvWvS-8dFwCytu7-6ohkPKUY,623Z UDubliÿ!-TIuKV_WwdC0jEOmm9Q4CHYLzRK2j-q7zEsDFsXC3i4,1496W ”Gibraltar
ÿ!t1hglDTLUIFqs91nY5lulN7oxkoAXHnh0zjyaKG2bG8,1220Z tuernseyY ÿ!uyn7O8ngevKoAEzN2ZbEqStrZGlPhNVY4g_ClHNEXFc,1599Y „HelsinkiY ÿ ccpK9ZmPCZkMXoddNQ_DyONPKAuub-FPNtRpL6znpWM,481X ¥Isle_of_Mag´ 6„Istanbul´ ñKnFjsWuUgG9pmRNI59CmDEbrYbHwMF9fS4P2E9sQgf0f?JerdA´Kaliningrad³ ÿ 57ov9G8m25w1pPdJF8zoFWzq5I6UoBMVsk2eHPelbA8,904gDKievT ÿWt7ZlwDJbcyfzl-RIUuvcTCZuUyZOlcCFZAf7KEbllM,54EKiroU ÿ ZEvlKwJksz-djcEtW6Xq67P-MXsQau9UCWllNRRumyY,717© ULisboÿ eATahajY8fIUWJPdYUyo1krn3jcxHILl_loNyvAzYJ8,143r”Ljubljanaÿ qMlk8-qnognZplD7FsaMAD6aX8Yv-7sQ-oSdVPs2YtY,478° 6ond° »6¤Luxembourg± ÿ hOP5IMgRfKhfSsnDnA7gEh9eWhs0TZkbM3sltIDUAYE,108bUMadriaÿylsyHdv8iOB-DQPtL6DIMs5dDdjn2QolIAqOJImMOyE,8ÜMÐ¬ ÿirX_nDD-BXYObaduu_vhPe1F31xmgL364dSOaT_OVco,92]…Mariehamv5TMinsk® ÿ86iP_xDtidkUCqjkoKhH5_El3VI21fSgoIiXl_BzUaU,80® TonacoV ÿ 9U2X6CwmB27hUyL1Hx5grSFKt7tSG2BnPmAEkdCJvOg,111»dMoscowW ÿ7S4KCZ-0RrJBZoNDjT9W-fxaYqFsdUmn9Zy8k1s2TIo,9­ Àope/Nicosia,òFsha256=FDczuLwTlqVEC6bhsxGV7h8s_mDBoLIwl5NNm-LW2T4,597
tzdata/zoneinfo/Europe/Oslo,sT ÿ PgsEbMMGco3J6l4l6yvCL1YR7zye4Obedj0ImA_6LNM,676T TParisU ÿ!zViOd5xXN9cOTkcVja-reUWwJrK7NEVMxHdBgVRZsGg,1105V „odgoricaZ ÿ qMlk8-qnognZplD7FsaMAD6aX8Yv-7sQ-oSdVPs2YtY,478Y TragueV ÿ pukw4zdc3LUffYp0iFr_if0UuGHrt1yzOdD5HBbBRpo,723V 5Rigª ÿ HPtq7XEHXsgqU5v3ooB6isA0OhOIKvJn86mVUeKZsgA,694T %om¨ ÿhr0moG_jBXs2zyndejOPJSSv-BFu8I0AWqIRTqYSKGk,94USamarª ÿ Vc60AJe-0-b8prNiFwZTUS1bCbWxxuEnnNcgp8YkQRY,732ª ¤San_MarinoX° 7UrajevX 5tSaratov¯ ÿ0fN3eVFVewG-DSVk9xJABDQB1S_Nyn37bHOjj5X8Bm0,72¤SimferopolZ ÿQghsUjjWzNO5qMX4WYGQXSqfTycyrdR55W2iKCgFyd4,86USkopj65ofiÿ0TXL2VGk6uukiUQHQCk16xvcQDsAPZ02fIQXiQKGdNQ,59„tockholmÿBJ7zhFdhxx7x23Rp4N9I5QvlJP6CZBtIwEuFPHdfKD8,4¾tTallinnW ÿylOItyle7y0jz5IzSMQgjuX1S6Xm_El1NV3CjPAAiGA,67[UTiran[ÿI-alATWRd8mfSgvnr3dN_F9vbTB66alvz2GQo0LUbPc,60¾ V s	ÿVfQLbvYP7ete6eHeCdMthDfGH_FLiyEXQM7pgyHFsHo,75® ”Ulyanovskÿ 2vK0XahtB_dKjDDXccjMjbQ2bAOfKDe66uMDqtjzHm4,760Å„UzhgorodX ÿutZ4-uZq7YnIWuyrD9hTljM1oSO46Adte4Ha17VxXZs,53X TVaduzU ÿGZBiscMM_rI3XshMVt9SvlGJGYamKTt6Ek06YlCfRek
eVaticao5UViennÿq8_UF23-KHqc2ay4ju0qT1TuBSpRTnlB7i6vElk4eJw,65seVilniu$ðmYZJ4nkNElAAptNLaklWyt5_tOUED8fmYLLsRHZGavU,ÿN676
tzdata/zoneinfo/Europe/Volgograd,sha256=9CDgjdRu0OEauCj_85qu0aZp4IrFDqfEKV33GG_ATGk,735Y dWarsawV ÿ 6I9aUfFoFXpBrC3YpO4OmoeUGchMYSK0dxsaKjPZOkw,923¯ dZagrebV ÿ qMlk8-qnognZplD7FsaMAD6aX8Yv-7sQ-oSdVPs2YtY,478V „porozhyeZ ÿ 38G79Rf5vi5goKkVwSIxeYS3hqlUrmWQZjzdmsxEZBM,560Z TurichV ÿ GZBiscMM_rI3XshMVt9SvlGJGYamKTt6Ek06YlCfRek,497V ´__init__.py[ ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,¯ Å__pycache__/e þcpython-39.pyc,,— eFactorŒ ÿ0ytXntCnQnMWvqJgue4mdUUQRr1YxXxnnCTyZxhgr3Y,11í $GB× þ!uyn7O8ngevKoAEzN2ZbEqStrZGlPhNVY4g_ClHNEXFc,1599œ eGB-EirÙQ 0$MTž ÿ 3EoHVxsQiE5PTzRQydGhy_TAPvU9Bu0uTqFS2eul1dc,111�  OMT+0N 9-N :M 8Wreenw;.%HS‡ðup2TB-9E2uBD6IGaCSOnR96o_DENUVI9ZCE1zQS0Szp2‡„HongkongŠÿ9AaPcyRtuXQX9zRnRTVkxX1mRs5JCbn6JTaSPvzX608,77 eIcelanTÿaXZEH_I90Wfw1NZyW1DdcdecC-1kNuxov6cKSjm_hdI,75 ôIndian/Antananarivo¬ ÿB4OFT1LDOtprbSpdhnZi8K6OFSONL857mtpPTTGetGY,19„ \ dChagosV ÿJ_aS7rs0ZG1dPTGeokXxNJpF4Pds8u1ct49cRtX7giY,15S V eristmaY ÿF1sCV1FzClbhE98_2qA4sat4ELjiAKn50NSgrVtkge0,136Coc® ÿ7WfaQ8m6_WytwKgd4WdV4P450Gne3U4wmzGlgo0PrFs,14ÿ ® OomorZ>”Kerguelen]ÿWUgLa0EvR5l1S6l9SQ_Y5wM8STgUZDiF9qnzRUnrNB8
5MahØðTQkpyFD4RcKhgKDpQ4F3yX9p-VXYÿ\-yz6d7mEn3V9POQ,133
tzdata/zoneinfo/Indian/Maldives,sha256=lEhfD1j4QnZ-wtuTU51fw6-yvc4WZz2eY8CYjMzWQ44,152X euritiuY ÿ R6pdJalrHVK5LlGOmEsyD66_-c5a9ptJM-xE71Fo8hQ,179Y Tyotte° ÿ B4OFT1LDOtprbSpdhnZi8K6OFSONL857mtpPTTGetGY,191W tReunionW ÿMxlwonq6yc1CBJos5alAX7IEVrUraAgbe7zE-BmfxBs_
´__init__.py[ ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0° Å__pycache__/e ÿcpython-39.pyc,,>  %raä ÿ!SJkWIMlYqCjhpHgM8_VmRWDLlDBktv_TJ1z9JBX-lLY,2004N  TsraelÙ ÿ n83o1YTeoFhfXIcnqvNfSKFJ4NvTqDv2zvi8qcFAIeM,107P  tJamaicaQ ÿpDexcAMzrv9TqLWGjVOHwIDcFMLT6Vqlzjb5AbNmkoQ,333 6Japï ÿWaOHFDDw07k-YZ-jCkOkHR6IvdSf8m8J0PQFpQBwb5Y,212 †KwajaleiAÿ-ZFi6idKzDaelLy7DRjGPeD0s7oVud3xLMxZKNlBk8,21   ELibyî ÿzzMBLZZh4VQ4_ARe5k4L_rsuqKP7edKvVt8F6kvj5FM,43Ê 4MET:ÿEgkGCb0euba8FQGgUqAYFx4mRuKeRD6W5GIAyV6yDJ0,62L SL ÿ84AZayGFK2nfpYS0-u16q9QWrYYkCwUJcNdOnG7Ai1s,11L 57MDP ÿyt9ENOc1sfICs1yxJjiii6FhCQkEsEuw67zvs-EeBb4,95P Öexico/BajaNorþ!bCo1kJvUtKwqrE00c-zaGwGtmtLKY5E7YC9ZKtP7uLs,1025ÐMZ 4SurMÿ loDGLTJG9p_FXvHZSNRy_aZf46djfR30PwSfnWgvtIw,367W eGenera/ÿ ly8lZWNi_Z2U8GUc-Hd31SJFMagTblI5bcTNZQrWbaY,412W þc6c$$NZ9ÿ Dgbn5VrtvJLvWz0Qbnw5KrFijP2KQosg6S6ZAooL-7k,104s eNZ-CHA;þ pnhY_Lb8V4eo6cK3yL6JZL086SI_etG6rCycppJfTHg,8083dNavajo  ðm7cDkg7KS2EZ6BoQVYOk9soiBlHxO0GEeat81WxBPz4  ƒ 4PRCM ÿv4t-2C_m5j5tmPjOqTTurJAc0Wq6hetXVc4_i0KJ6oo,39ì  VPST8P'ð,8w8p5P18af0k8f2C3amKrvi4tSK83QUhUCV6QmyeTa8,951
tzdata/zonûFeinfo/Pacific/Apia,sha256=rl0Vq5JQIAWeLQ9u38mvZJUVuV8dM5wo2FK3edr2H2g,268
tzdata/zonU tucklandY ÿ!Dgbn5VrtvJLvWz0Qbnw5KrFijP2KQosg6S6ZAooL-7k,1043Z ÄBougainville^ ÿ rqdn1Y4HSarx-vjPk00lsHNfhj3IQgKCViAsumuN_IY,201] tChathamX ÿ pnhY_Lb8V4eo6cK3yL6JZL086SI_etG6rCycppJfTHg,808X 	4uukV ÿ lsuA6LDbG8lzf_QQ-21G93EXTEyKHX16qATLnYy2H38,195V dEasterW ÿ!6_2WxQBUdLUuU29E40uTzqSxOjK6Usv4LKawmK19lXw,1102X 5fat\ÿLiX_rTfipQh_Vnqb_m7OGxyBtyAUC9UANVKHUpLoCcU,34V 	„nderbury± ÿmPptmUwBq7FQpM_ZU0aBVyV7IC3ZQKC4D4kcj1s0l8Q,17Z tFakaofoX ÿUf8zeML2X8doPg8CX-p0mMGP-IOj7aHAMe7ULD5khxA,15kDFijiU ÿ dvmKvlSneeEDyTIVMJEGwphTTunvZqCqH62S7EhJ7ck,419]uFunafutY ÿ lFMZ9zE8j0PWRwNXFlgfsMpR_yJrMmT5I9wuBqUOOBo,134Y ”Galapagos³ ÿZ1KJPZSvO8M_Pay9WLcNAxzjo8imPrQ7FnXNOXfZl8c,17hVGambiiÿyIh86hjpDk1wRWTVJROOGqn9tkc7e9_O6zNxqs-wBoM,13¸´Guadalcanal´ ÿUi8PN0th4sb1-n0Z8ceszNCeSiE0Yu47QskNMr8r8YwuÇÿ i57eM6syriUFvAbrVALnziCw_I4lENyzBcJdOaH71yU,350c„Honolulu® ÿHapXKaoeDzLNRL4RLQGtTMVnqf522H3LuRgr6NLIj_A,22x�JohnstonY >†KiritimapÿcUVGmMRBgllfuYJ3X0B0zg0Bf-LPo9l7Le5ju882dx4,17pUKosra'ÿpQMLJXilygPhlkm0jCo5JuVmpmYJgLIdiTVxeP59ZEg,2'	…KwajaleiÿS-ZFi6idKzDaelLy7DRjGPeD0s7oVud3xLMxZKNlBk8,2z	UMajur&ÿAhX78uSLfijTRZjpT4mcTmCjsT9UKHhrdpVR_sAKBuQ,21Ü…MarquesaxðilprkRvn-N1XjptSI_0ZwUjeuokP-5l64uKjRBp0kxÄ+UMidwa/û ZQ2Rh1E2ZZBVMGPNaBWS_cqKCZV-DOLBjWaX7Dhe95Y,146ÆÀfo/Pacific/NôJauru,sha256=wahZONjreNAmYwhQ2CWdKMAE3SVm4S2aYvMZqcAlSYc,183
tzdata/zoneinfo/Pacific/NiueU ÿ 3wqxv3F8MMswXekUk7D7E46nIgGDaBhUrXXwd_9BZ1A,175U dorfolkX ÿ F5W2cBezC5Xuy17cz4DJJHMYZBqENTfzc1AiYC0Ll98,247X 	DumeaW ÿ ezUyn7AYWBblrZbStlItJYu7XINCLiihrCBZB-Bl-Qw,198W PPago_ Z ÿ ZQ2Rh1E2ZZBVMGPNaBWS_cqKCZV-DOLBjWaX7Dhe95Y,146Z 	%la´ÿVkLRsKUUVXo3zrhAXn9iM-pKySbGIVfzWoopDhmceMA,14° 	titcairn¯ ÿAJh6olJxXQzCMWKOE5ye4jHfgg1VA-9-gCZ5MbrX_8E,15tPohnpeiX ÿ QxzfBH5okJn-pfuj1x4z82u6RaGh69sNFC-fbIHhRM8,214_onapeW @¤rt_Moresby] ÿaDABBVtu-dydiHNODt3ReC8cNkO3wTp16c-OkFIAbhk,15´ …Rarotongoÿ rt4VeBHFKwPsIB_ldiPklSKA1xQj7l8fteIcA0icuEw,391USaipa½ÿ i57eM6syriUFvAbrVALnziCw_I4lENyzBcJdOaH71yU,350W 	%mo­ Â6UTahitÿIvcs04hthxEQj1I_6aACc70By0lmxlvhgGFYh843e14,13jUTaraw® ðCQNWIL2DFpej6Qcvgt40z8pekS1QyNpUdzmqLyj7bYW µT±5taptÿuyP3oPlpqw3NuuJ0TjwrEZ36n2u-5wMjx8D5vAB391Q,23{5TruÐÿlsuA6LDbG8lzf_QQ-21G93EXTEyKHX16qATLnYy2H38,19(5WakÿTg-PID1kYkYlfzCmofg2odL7a7f79lJ4OvnZJi_S1LQ,13dWallisÿC_jI20hvTJKC4fYfO03qF7ioTa7e2EnSC_KM6zndThYW 4YapT  6¥__init__.pÀÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,Å__pycache__/f ÿcpython-39.pyc,,L Tolandè ÿ6I9aUfFoFXpBrC3YpO4OmoeUGchMYSK0dxsaKjPZOkw,92îtortugalQ ð/eATahajY8fIUWJPdYUyo1krn3jcxHILl_loNyvAzYJ8,1436
tzdata/zoneiñ>nfo/ROC,sha256=oEwscvT3aoMXjQNt2X0VfuHzLkeORN2npcEJI2h-5s8,511
tzdata/zoneinL KL ý!ZKcLb7zJtl52Lb0l64m29AwTcUbtyNvU0IHq-s2reN4,415L ”SingaporeR þ GToOoSoNKCMog4y_lmuYF6QL4ziEeN677-Q7GivX-tg,256R dTurkeyO þ!KnFjsWuUgG9pmRNI59CmDEbrYbHwMF9fS4P2E9sQgG8,1200P 4UCTM ÿ_dzh5kihcyrCmv2aFhUbKXPN8ILn7AxpD35CvmtZi5M,1:”US/AlaskaR ÿ d8oMIpYvBpmLzl5I2By4ZaFEZsg_9dxgfqpIM0QFi_Y,977ž   R deutianT ÿ q_sZgOINX4TsX9iBx1gNd6XGwBnzCjg6qpdAQhK0ieA,969T Urizon§ ÿrhFFPCHQiYTedfLv7ATckxeKe04jxeUvIJi4vUXMtUc,24E”S/Central¦ ÿ!wntzn_RqffBZThINcltDkhfhHkTqmlDNxJEwODtUguc,1754§ ¦East-India¬ ÿ5nj0KhPvvXvg8mqc5T4EscKKWC6rBWEcsBwWg2Qy8Hs,53ß 0US/X %erRÿ 1_IgazpFmJ_JrWPVWJIlMvpzUigNX4cXa_HbecsdH6k,174¬ dHawaiiÿ ÿHapXKaoeDzLNRL4RLQGtTMVnqf522H3LuRgr6NLIj_A,22¦ ù e-StarkAÿ KJCzXct8CTMItVLYLYeBqM6aT6b53gWCg6aDbsH58oI,101B –US/MichigTÿI4F8Mt9nx38AF6D-steYskBa_HHO6jKU1-W0yRFr50A,89TuMountaiVÿ!m7cDkg7KS2EZ6BoQVYOk9soiBlHxO0GEeat81WxBPz4,1042tPacificWÿ IA0FdU9tg6Nxz0CNcIUSV5dlezsL6-uh5QjP_oaj5cg,129ªESamoûÿZQ2Rh1E2ZZBVMGPNaBWS_cqKCZV-DOLBjWaX7Dhe95Y,14N¥__init__.p˜ÿ47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,PÅ__pycache__/a ÿcpython-39.pyc,,4 T	Ï/fniversÕR .DW-SUÌþ 7S4KCZ-0RrJBZoNDjT9W-fxaYqFsdUmn9Zy8k1s2TIo,908ë %WEºÿpAiBtwIi4Sqi79_Ppm2V4VMiMrJKOUvMdCZTJeAizAc,4DZulu™ æ .¯6Àt__.cpython-þN39.pyc,,
tzdata/zoneinfo/iso3166.tab,sha256=BMh_yY7MXp8DMEy71jarFX3IJSNpwuEyIjIo2HKUXD4,4463U ´leapsecondsU þ!WFKV3wNak8BTFEaUwFFeLO5bUOa0moZ3S-255JLAank,3392U º 4.ziS þ#Spd8soQQitpGSwbTHYB7xLc0o8MjRo3nUh5mHcP_Gbo,113153U  ü ÿ"2wzsaOCfYuhhMxZsFO9y1ckAPgD4uzBfbff64XV1qWU,19321S H1970W ù"EBkiCpmeio73EQXCl7T9lGFBT19NJwWPw8tqkCc0QRI,17835W EðlvlElgNuJX7DnwkodHPOmkGqIjR-bxYolaoBJpBxNIU,90F ö~pip
#! /usr/bin/env python3

"""
An implementation of the standard library webbrowser module to open webpages.
Since we're already running a B ñ , it's really s‚ 1...’ Q

defY ð(url, new=0, autoraise=True):
    from jsÃ ±ort window
  R.openH ¦"_blank")
b @_new O greturn| 1- O_tab1 	!2)Ä ðA shim to skip tests involv `_ òcapi extension, si@ó  don't build
it0impæ @unit= !

  å.SkipTest("No ` "“ �internal› Mh /")¥ð
# -*- coding: utf-8 ò 
# flake8: noqaËð"PYSTONE" Benchmark Program

Verc:6  PÐ/1.1 (corresp¯ ³C õplus 2 Pystone fixes)

AuthorG ò+ Reinhold P. Weicker,  CACM Vol 27, No 10, 10/84 pg. 1013.¦ ‹  ¢TranslatedØ1ADA� € by Rick �hardson.ã9   ÀEvery method6 ýpreserve ADA-likeness has been used,E !atûpexpense
 C-8 ­ Cu U ° õGuido van Rossum.‚‚ HistoryÁ »  CFix B ð3.8 compatibilityT areplac@�ime.clockÃ `with t  €perf_couÐmÂInofficial v0 1.þ by Chris Arndt:: ô- Make it run under· p2 and 3­ ]usingž 1  "³¤__future__» print_func…"á‘- Change 9 preter nam Á shebang lin—ðplain
            £"python".
  ý- Add source code encoding declaration.
9 õVersion 1.1 corrects two bugs in v! .0:? ð	First, it leaked memory:: ý	Proc1(), NextRecord ends„ `up hav¬ ða pointer to itself.  I  × Ÿ ned thiF pby zappG q à.PtrComp at thSd of ›  qSecond," a3() usp Ðe operator !=� �compare aÎ rê ýto None.  This is rather inefficient and notD @truef  ³  n¾ ¹   ý
original benchmark (whereG O¯ @isonW  ™  ’ [ Aded;-!=A õ `attempðo find a method __cmp__W ~do valuˆ ~ !ofl %H).  ��runs 5-10‰ @perc11fas)hašG, sonfigure#�of differK Ù�s can't baÔ@d diðly.

"""

from __future__ import print_funcŸó 

LOOPS = 500006 Etime0 perf_couáC

__‚ ñ__ = "1.1.1"

[Ident1,  2 3 4 ò
5] = range(1, 6)


class h:AÐdef __init__(L#, =ð , Discr=0, Enum'  4Int bString )T  r K Y=T s  [ " =c 
 m % =x 
! ‚ 3 = 
 
 – 6 =  � ô Acopyð ´ creturn(Q ° !, Ý ¾  ¯  “    K    ŒÐTRUE = 1
FALS
 @0


› ±main(loops=.¢ Ê +Ò, stones = py / )³ rr("%g" %ð 5  r  ] 
2 	a ÿ  ø0Q ó

IntGlob = 0
Bool µ c
Char1 A"\0" 2 TArray# ‘[0] * 51
 ( °[x[:] for x[ 3 . p]
PtrGlƒ  “  À! =@8¹ 	Ø `global( ™ $ Ð  Ó  ¯  ¨  , Â (   Æ •Pstartª ×(Ö iÑÐ):
        paðss
    nulltime = perf_counter() - start 
+ ÷PtrGlbNext = Record()  ¶.PtrComp = A 6 ø .Discr = Ident1 CEnum;  3 3Int (40 cString ñ"DHRYSTONE PROGRAM, SOME STRING"9 2 1Loc = 2 I1'ST2 òArray2Glob[8][7] = 10%4Q  ñfor i in range(loops):ˆ  �SProc5V 4 µIntLoc1 = 24  B2 = ! 8 Ô 2Ô I2'NDÔ  6  q3 pc @Boolï Ò = not Func2(d  8",   p  N bwhile ž 31 <
 2í  %  s3 = 5 *# 31 -
 ‚ 
,  '"7(< $1,- { .  +( 2 + _   B !8(É1Ú !,  ÕQ Z 3Z Ä ÍRroc1(  �CharIndexKA` o  0<=  o 
5if ‡=j 1(+ V W, "C"/ [   2  Ø !6(¿1—  $ E p = chr(¿ )0 2 –
 2œw $ 33 /‰f  ›C7 * ±3ß f$ 4  ¸ Ì 25 "1)@Pbench”`±% -Ù° 7if 9 V= 0.0v„GPerB[ "0.UOelse* > & /` q freturn !, ( f a


def±HP:Ü1Ptr = xu }‹S.copy2 5Š 8 . . * 	´	Š * Wroc3(o E V7if  ôõb$ ® 6u  Ä  óæ (6‹ª  y 7 • D c ‚  b 7Ü  B, 10g 
)`( =ö ¯É �  + 1oneˆ >F * ç O*> ?!nt  É¼t1]Ðif Char1Glob —== "A":
  “IntLoc = 	 <- 1  XParIO" yIntGlob( CEnumI FdentE 5if  1= I 
ƒ QbreakM `return‹ t ò


def Proc3(PtrParOut)> `global, Œ @ òif PtrGlb is not None/  ó C # =( �.PtrComp> 7els- å a = 100  [ @.Int3  D „roc7(10,† )( Æ n Ç *4(¾ VChar2À BBoolE  1  µY  
 0or   ) "  7 P g = "B"z 5z  a 8 ML   M #  M !A" " ‡ = FALSEb  6(è ¹nå  QOut = H !if ]Func38  ¬	< 649   In 1ä t  8 #el‰„ : 2: $ifÇ  >ô � ã
9. ¾ † 3l À 2À 	4: Opass+ 	5+ e 3: º ßP7(Int=1ï 
 2è;D  B1 + ¶ 3 �? 02 +h8Locs ) r Ñ8(Array1Par,  2 , Iˆ Æº
` œ 5 R  ] [$ ]ã Á ½ ! @ + 1%  ]O P + 30/ ^ $ 0forü àIndex in rangeX1LocV ý$+ X Jm  ø ¦   A \ )  P -¶ I   +÷F  Ê 0]t 0Locr ! 6Ù sC = 5Á Ú 1(CcPar1, 
 Û   dLoc1 = O 2  # a !if( eLoc2 !4 ¾»	òÏ  2¤ 12(SY O
 ¤ ¹ ƒ Pwhile¿ 57<= u2if ð B 11#,  2 D)D  íþ p    Œ 	 °´ >= "W" and+ð <= "Z":
       ñ IntLoc = 7
    if Char a= "X":   ±return TRUE Felse Ôif StrParI1 > 2   B l 	 +u     b   
f   & ðFALSE


def Func3(Enum� "n)w   É  
  ¹ !if  ‚= Ident32 _ ç o ó	if __name__ == "__main__)±import sys
l  ž “error(msg˜  f Pprint ñ, end=" ", file=sys.stderr)A - ð"usage: %s [number_of_loops]" %t �.argv[0]L  ` ’exit(100)¤ Ànargs = len(  E Q) - 1� 2if ! 6> 1&Ô ð"%d arguments are too many;’ 8 Ç %elH (==I 6tryV  í Ñ 0 =  Ž 2[1]G  ! Ðexcept ValueE[
@ š fInvaliŸ 1 %r” S 
a~ QLOOPS  ß( ()
ÞñIN_BROWSER = True
if "_pyodide_core" not in›rmodules­ Tfrom ,  W 4 …_docs as  © ¼ G [j ;] =2  +	¤ yFalse

{ ] € (ð ¡Conversion], Écreate_proxy Òonce_callable 6JsP' 1JsE¯2ion Rto_js qdestroyV Ðies,
)

__all[! [y "N "3 "P  œ  	ž  ‚  î  › D",
]ýñ  ëÁ#gc_.XÃ 
z"._5 Dhook�ƒjsfinderÖòsave_state() -> dict?ñ"""Record the current global 2 .2òThis includes which Javascript package»’loaded anV N qcope inŽ$``þ 0.__� ³__``. Many ?  ¹ might have˜ Q, butL ñthere is no general way to track itŒ °we don't tr .= 1""" u D_js_x A= {} °for [key, v*]ˆw.items(“áif isinstance(5 #, ¼'  Xw  i  ƒ6 {8 &Y 9 U!s= L)å ) Ò , 0.js…7ies- � = Z )ZÀf restore_stñate(state: dict):
    """Restore the global ( ñ to a snapshot. The argument ``$ ‘`` shouldM �come from Cave_$ 1"""  °__main__.__ƒ ¯__.clear() 5upd¶ "["œ Qs"])
0 òjsfinder.jsproxies =º á["js_modules"]- vloaded_ ,  3 ófor [key, value] in list(sys.^ ƒ.items()N Ráif isinstance(; ñ, JsProxy) and key notP — – H   Gdel n  Ž Ï  .&Ç ' + ñlast_type = None ¤  ”traceback 9 õreturn gc.collect(2)


__all__ = ["sþR", "rb1"]
#òio import StringIO

try" $js" ñXMLHttpRequest
except I? RError6 õpass


def open_url(url: str) ->j / —òFetches a given URLb¡Parametersø -  Aurl [     8  4fO A R*	> - 5io.õ  è   ±contents of�AURL.1  « 	 jreq = C.newD@req.û ò("GET", url, Falsed   Psend( Î� (# `respon5 ‰ô_pyodide.console—C ó, repr_shorten,  sFuture
åD ¼

BANNER =  . 0 # ´‚: ignore7- G_basŠ ’deRunner
' 0._cÔ} õIN_BROWSER

# thiZð can fail when wâðe outside a browser (e.g. ¦tests)
if U O+*_¼ ˜ÑPackagesFromI¶`s as _ #_p _A _² rs
else:F`async Ö1 g(*argsˆ–™ “PÒ  Ba?  Î  % Ðº"]


class D (' ƒ ‚"""A sub+ “of :any:`% ³` that uses 9./ P` befÒqrunningUcode.'0run Ñ(self, sourceª ,  D: Co/• á Í ’�"""Execut
 9 ‚ object.— # BAll Žó ions are caught ÷ SystemExit, which is reraisedI * Y kô     �|³i´`depend”1sum1Q with!Àfollowing poçssibilities:
  ó$* `("success", result : Any)` -- the code executed . ^fullyL ò
exception", message : strO 5An " Ã occurred. `+ @` iss 	X • õof calling :any:`Console.formattraceback`.> 5""" ñfrom pyodide_js import loadPackagesFromI %s
8 Oawai' …(source). rreturn 5 °super().runC- ,P#)
� tasyncio ´contextvars %sy Dtime ñ 
Û 0typV ¢Callable

 d._coreõ Àcreate_once_T * ÷, IN_BROWSER

if 3f 9ósetTimeout


class WebLoop(Ó @.Abs¥ `tEvent )J Ð"""A custom e ò loop for use in P¨.‡ðSchedules tasks on$‡ browserC ñ. Does no lifecycle management and runs®sforeverc c``run_ !``+  ðuntil_complete`` cannot block like a nƒlŠ a wouldi @beca× °we only hav
 ²e thread soL  ¾6 o stallã S  É p¿ Õ 0yth<   Ó £ happeningÝ �We defer W work to_ 0 usL  öáP funcÔZ€To ensurÂ xat thisú sdoesn'tÆ aout UIPUother¶@handÍ,Ò pwe want™ Vmake _ Aeachø s
dQ as aT  - «  ` micro F. ``Ü (  7Ð, 0)`` enqueuk ù0all T `so it Ias wellºÃour purposesxQSee `ý þó Methods <https://docs.python.org/3/library/C- i.html# - 2>`_– ì÷ ódef __init__(selfv ö   ._ñ _factory = None:  " b �._set_runG_i K ( J Ì_Ï,erO ' ç#nt% $ L  ® ’get_debugd % � NRFalse#5 6# LàU€: We ignæ ç< I  x $isâ y † -> bool� A"""RÒps ``Tru !if<š¹ isW *ù ¼ rAlways Ã ? -? ha±Ù M  Ý    R  Ž 	Ë fclosedÊ Àbool:
      ó'  """Returns ``True`` if the event loop was closed.

  …Always r? @Fals@ Àbecause WebL> õhas no lifecycle management.N 5""" S  P p ²def _check_ˆ u(self):3 ÷"""Used in create_task® ðWould raise an errorê  ``J 4.isY ÷)``, but we are skipping allÄ _stuff¿ Fpass· ¿run_foreverµ  <Runm- P. Doe9 th~ i( qis impl;Xationá ùe cannot block like a normalÍ 
9­°we only hav
 ²e thread soP  „ w: 0 st
 "wbrowser] W Pand põ bnt anyÄ @from- ¿r happeningB€until_coþ !teIŠ, future Q-  ‡ is done*Ià@argu„ " ð a coroutine, it  wr¤ R:a TM™The nativ&`ë| © `=!s  a evalu¹! o… 0Ë  x ä  CEthenb scresult> ã DPSince¹
,  just ensurÚ!atuu �scheduledv • ˆ x + á. This makes t ðethod a bit useless. Instead, N `D @add_’ñ_callback(do_some%b_with_ç V)` orä•```pythonS `async ®'r( §H ƒ = await0?  " | (; )- 5``` ­ ‹ 2io.d_ì ( )#@ 2# Sm R õ @ods:) Oô .setTimeout to › Ñ0s oe,  N¥#k   _S_soon.   oô: Callable, *args, context:	 bvars.C k = NonfäArrange for a Z  ¯ b‡lJ s ~ ¸ as possibl…0Any iÆ4al �qs afterŸW €will be YQed toI ¾ ›'  -½  	­¸K ¼§  S0 us¥ #’(Z  6 b, 0)``u Š •delay = 0¨ Jk B q_later() ,@�=˜@	Õ_ Usafe(g  ` O éÀtext: contexñtvars.Context = None
    ):   õ"""Like ``call_soon()``, but thread-safe.
3 £We have no! òs so everything is ";  ; ù", and we just usn 5``.Z 5""" Æreturn self.›  
 âback, *args, cÞ = )§ @def + u_later(U  N , Ædelay: float  8  c ¦: Callable u A u :† p < 
qÑArrange for a¨  p a to be øed at a given timRña Handle: an opaque object withY öncel() method that»  ann @usedy  ca, 2 th� îAThe )" c3 “an int or9p expresI i°Õconds.  It isp ð always relativet m lurrentä AEach
@will­  šð ed exactly onceh Uf two. s Áre scheduledm:  z Asamew õ, it undefined which· { WfirstõAny positional arguments afterO	Æ !pa,%toe  �  Ü ' 0hen’ !isÓ 'edo @This@äs `setTimeout(; ,¨%)`Y P"if F < 0ÿ õraise ValueError("Can't<1 inÊ epast")] Âh = asyncio.‹Š �o£ò   # type: ignor“ ‰ Ô `reate_ã_à  ‡ƒ(h._run)è v * 1000‘ 2h/at Owhenÿ`p q@usesÐrabsolut¡A € corresppP evN�loop's ``; ÏJ KL p - cur_F /)`W  " =« , (”:+= N E´ )æ7 , îðrun_in_executor(R $,  c, funcG � %  J‡ûqspecifi}a Kðis normally suppoato run| (;)Lõa separate process or9 20sigV  – 0ourf0nt àSieð	 done. It's possible
     ð:to make the executor, but if we actually try to submit any functions to
 M ä   it, it will3 ðcreate a thread and ðow an error. Besto •can do isQ ato runm à(args) in thisD O QstickÄ õresult into a future.M 5""" ²fut = self.¢ _. %()# Etry:  á ‚fut.set_f (!(*– 5 Áexcept BaseE �ion as eK / Vion(eD Preturõ !t
€ # ò  The remaining methods are copied directly from„ ‚ventLoopC P �def time(ÿ )™ B"""R{   " p accordo !tobeQ â loop's clock.U  !T™ is{àloat expressed¶Ñseconds sinceýBpochn1the¡  E e  precision,… Quracy<Qdriftõ €unspecifú  V5mayE ¶differ per ² ª C1(!``® Ù  *.ù %``K 6rò ime.monotonic() W
L`CFœð object attachedd | `® 	r · ‚asyncio.ê"s.„ (m =« È Atask&ú, coro, *, name=None:SÀ  ulê + Sutineß Ê ` a Z  —	é  9 ç  Ä ç._check_closedÎ"ifî_A À_factory is Ë  ‚ " 4 = /  0s.T Ú ,þ1 ¾ B !ifá ú._source_tracebacki  + ÿ # Added comment! ðÀonly happensžÂget_debug() —Ws Truï ^   0# I4€at case,CGove P0­ : G   ?delÙ E[-1]3;elsð Dp	‚^
C
~_x E _m(
 }| �   É8 òp  Ã et¨Cask   C thaÏ@be uÊ!by 6 Š '()â%If= ]8@defa› 0 ! (obe setB ¡a callable[ should havjPsignaå• matching„'Ø¸ð)', where 'loop' wilól be a reference to the active
  óevent loop, 'coro' wil=   öutine object.  The callablE õmust return a Future.
d ðCopied from ``BaseEv õLoop.set_task_factory``7 5""" 3if ! ñ is not None and ’ (% %)::  è ðraise TypeError("r Q ¾ -G 1 or` %")G Yself.ª $ =B ê [def gÎ (7 � D"""R'„ ,r 1 if¦€default å �is in usS… S° ¢ 
Ù 
Ï ÿexception_handlerÔ %n .  . Ú ì	™ Q  ž  ; ž ,~ 
{4Set 1 ashFnew ¿ Æ%If= !is,C «‹ ' I?setH aNdð , it should havÄPsignaT• matching—"'(»ðcontext)', where ' Ì	þ P  6 	O @ Cdict£ p (see `._ö  &()Â�documenta@ô for details about ¶ .€ iqôjìôc     <f"A|†ós expected, " f"got {i 6!r}™ J &$ =¾7A  ’,ÊC"""Db X ` Th1sÜ  ed8n ašcoccurs<ó aEset,1 e0canP óïed by a custom@   that wantstd�5 toO  …ý ± behavior. ¶  iB log§e·q messagöN Tother-p-dependÒainformy".
v «ðIn debug mode, a truncated stack traceqalso apP d‘@wingNrø Ë Ugivence.g. a– Of 
  ð�) was crer ,í6anyþ]ÊÃ parameter h¬�same mean‰ aŒÀxception_han£dler()`.
  5""" ómessage = context.get(" %")) sif not  :  T  õ = "Unhandled exception in event loop"
; Eif (  H ñ"source_traceback"t $in� 	. òand self._current_{ 1 is7 ONone1 ,._x 7 )é $"["j © ?] =� \  ] Ólog_lines = [D] pfor key>ssorted(~ ” $if' {·5, "*"}Ä  i J :inuGvalu	F[keyŽ  6 j >== ©d  tbu".join(ÒÑ.format_list(r )d e     > ðObject created at (most recPÖcall last):\nÔ C   G Ú+= tb.rstrip(l 'elÓ ÓÓ CHÓ H.se¹ 
c= reprvh *Šñ.append(f"{key}: {; 6}")·“print("\nÜ= ó), file=sys.stderr6 @def ¬_•« r(Á,ßÚ@"""CÞCthe ßE''s_¹ràT4 Î` argum,pis a diN ontaining ^ `follow Fkeys<3- '”„': Errorý;<5- 'Ó A' (oðeal): EþoÄ	4 jfuture1 F ™ instance0 Jtask. OTask, 
. t\ Šprotocol2 P d štransport5 T 6 [socke3 S 0 Šasyncgene A õhronous generator that causedž Ú  ÷¸80NewKðs maybe introduced„ 4 ¸1 qote: dooñoverload this metho9 aþ– subclassE ¬For customÔ€ing, use§Õ O`setH #)`s Y À    """
    ð    if self._exception_handler is None:
(  :try   B ~defaultI ™(context)I p þ (SystemExit, KeyboardInterrupt)l _raiseJ TBaseEÅ 8 ð # Second protecê ù layer for unexpected errorsb  ä “# in the è ° implementaL �, as well  R ¯subclassedK  óevent loops with overloaded "a I-".K uprint("ø  ¥ @  bCion Òú", file=sys.stderr“ ç ¡traceback.[  … (& ?els ; 
R((/, ` •?exc	; àþ user set customG† Nµ# Let's try8�F  1  ".ÁA   4   {   â"message": "Un� é 1) O 1  ":,. ð$":ú0 }J € Í   � = < A  R E * Ÿ# Guard '§'Užcase it iKF ó€( A ô/ "B Rwhileming an> 	/in""â�) ñ ò ›!

gò	 WebLoopPolicy(asyncio.D•Ep ò):  # type: ignorQ"""-1A sÝ §! pX ,Pmanag1s @ bas8 d ÔÑ O }Ádef __init__×ñ_K ! =w
; Aget_Š _ A a"""Getš@currX- Š  ƒ  ;  êÀf._default_lgoop:
  õ
return self._default_loop& " ‚new_even# 1()
& Kdef   P )j °"""Create a*  D  g 1"""D  “  5 
… Å = WebLoop()' ‘ 
³ #  Ž 8set¨  Y ,o ð: asyncio.AbstractEÏ  b 
¯ ÿ Set the current²  × ó 


__all__ = ["Å 4",  ñ Policy"]
# Whenl ñpyodide package is imported, both& ajs and 1 ó_js modules
# will be available toH ÷ from. Not all functions in L B ôwork
# until after#  ˜ SfirstV  ž ¨ T  l 3  _jš  should not  dused aE ’ time. It^ n¶ guse jsT / "
#1 ñ
#
# All pure Python code that doesp arequirN oÉ  8” Pgo inU Che _ˆ.e DThis  ¤ ò !byŒ€test suiäqs well,¨Añly we don't use
# py3 �mocks forê 	œ °, so make sÝ 1to 1 ð"if IN_BROWSER" beforQ ’ 1ingç • Qse.

ˆc._core±ð JsProxy, JsExcep1, c¢‘_once_cal< p1 gto_js,€ ð, ConversionError, destroy_3 ðies  # type: ignª ‘ eU._bas™ (ÂPeval_Å, _¼ Rfind_ò s ¢CodeRunner Ú”_quiet,
)uÐ9 “ open_url 0_st«s # noqaB± = Dhook1  js� òer

register_js_“4 =  . >
un 3   )

g– ß9i@.web’¬ WP€ÀW:io.6!_p£(1 1())Ûòß‰"0.18.1"ó� "a"“"Ú Ü Ì  að Ç Í ¯ i e   éy donsole † 2 80",
x	ta�°very beginn÷ ofõ° initializaØà process so itð
# cannot import from js, pyodide_ Dor _ úPcore. The one class here that
# does use such functions is JsFinder which requires access to
# h ñJsProxy.
#
# register_js_fiI ’is called¸ ¤ ‹.js afte¶  ƒ ò	completely
# initializedb òAll pure Python codØ Ö 4n't´ .sw  #{ /
É µ belongs inJ5. C_ r5‹s5 $
#�ñ.
# type: ignore

²ctyping— ð Any, Callable, Iter
 @

# ã pdocstri� Àfor public `Úô	` APIs should be extractb ê@. Weâ Š ±he utilitieÝ `\ —.py` and  ðc` to format them
# appropria•.£ `Sphinxb  s __name__8 €determin“qe pathsa  4�. It look6tû Ú i‘€to referC se.g., `­._`¼4n `| ._ q.
_saveŠ % =“ 
œ 3= "R â"
try:
    # FKpÂ!c
 0pJsExcep(
 )8  < 1""".   ñA wrapper around a Javascript ErroÚ €allow itæ b"@rownoË.P  See :ref:`G€-transla‹ 0s-eN &s`-  ‰ : @©Eerty qdef js_7 W(selfÄ  ¼ 1""")xriginal¹ 4 _ ¡Conversion× 1An > 1 thå 0whe«< ˆ betweenn  ˆ	{ fails.z 		‚!A º QJmakexñobject behave li  b  ð ²For more inû`ion se¥‹¡` document›E. Inv°particular,G  Öh� ýst of __dunder__ methods <ö1_jsé -, 5s>`R  Ó° are (condi%Pally)h lež Ãed on :any:`E? -‚_entries3S -> "< "‚ :">îqAPI ``O|.E T F)``"sl ?keyi ,B f OvaluÑ -D j 1new1Ð, *args, **kw
 )B	ð""Construct a new instance of tóhe Javascript object"""

  õdef to_py(self, *, depth: int = -1) -> Any:4  ; ó#"""Convert the :class:`JsProxy` to a native Python~ ¹ as best asQ –possible.œ  h ñ	By default does a deep c| ÷sion, if a shallow * ia ð	desired, you can use ``p° .ú ©=1)``. See  ñ:ref:`type-translations-jsB ñ-to-py` for more inform% .I   Ú  Fpassô �3hen�ðonfulfilled: Callable, onreË ¨�"Promise"® Thî  ð.then`` API, wrapped³amanageÒÀlifetimes of 	Ä ‹handlers­ÀPresent only— ^ ‡0 haÏ"‹ Š" method*ðPyodide will autoOÂcally releasª  referencesÃ  t Ÿ 	´ @whenÉ " p#š resolvesu  Ÿ8  ŽUcatch�x,M y/x‹? ãw%0finê_z ñ> {	Å U{²B Not=òtrailing undersc»([name;òis is needed becaE^iÔ ó rved keyword inlð # There are no jsOvbuffersÒñ# https://github.com/peõ/typing/issues/593Á 6 Rbugs.0 3.or- W27501- "Thì Ajust‡ Ñdocs so lets  pmake so»B*p?ÈTassigÊ±rhs: "ReadBÐ &")Ñ  (A"""A0 s from a1 þ  Žo–H ‘Àesent only i÷'f the wrapped Javascript object is an ArrayBuffer or
   Yview.! E"""
 òdef assign_to(self, to: "ReadWritef 5"):4  m A"""A7 â to a Python b’ AfromÇ ¿  .z  F ïPresent only iû X!# ¤ ’pyproxy.c—  ócreate_once_callable(obj: C €) -> JsP: v"""Wrap= X in aÉðfunction that can be . 0ed w $´After being"  µ À will decremD  õ reference count²o[Â _. The“ ñalso has a ``destroy`` API® Q ¶ @usedqreleaseô� @thouß  ll¾ &it… � þ  `returnÝƒI {?AnyvC±± •Q`` of !Py¦'``T ThCñllows explicit control overÆ €lifetimeJ  Z%``L ;
ú:Ÿ: 8Ÿwhen doneš Q62jseto_js(y ”EAny, * ö depth: int = -1 òDies:Ãv = None# * §bool = Tru' ædict_converter`[[Iter7[�4]],m ]n ÔW Pø'to±Ï is similarŽT:any:°ñ.toJs`, but for useÁ³1. IEo Pwould™"im#²ly translatôÜB, itŽAbe rÑ%edQ ”unchangedk  í Ê`cannotd Fd±è e, thisK bmethodk h 2 a î kú ²@, as^gyou haš  ¾+ „pyodide.ü Ü5ô See :ref:`type-
Rions-)�y-to-js`eÀmore informaë°–Parameter× - ê •obj : Any  - ¶pD to» ƒ( & ü ýÍ, default=-1J ‚maximum 0 Qto doqŽñsion. Negative numbers are trH u  bÁnfinite. Set¹ �1 d$0shav± ` µ À   pyproxies÷: JsProxy, default = None
  ð(Should be a Javascript ``Array``. If provided, any ``PyY ù ies`` generatedW @willU ð"stored here. You can later use :any:`destroy_proxU É if you wantV 3to , @ the—  0 ò from Python (or Í  L  x qjust it¯ 	X AoverR ÷ O andl 5).
: “create_py¸ e: boolnJ=TrulI× óset this to False,qto_js` <æraise an erroru ðdict_converter: Callable[[IÙ  
 ÷4]],]• iT� T  ~ñÖ recieves a (R)Feble of V	% ðpairs [key, value]. It is expected`return	J @desi;0res» of"  ÿ  « ðsion. Some suggesP g Ys forM o–argument:N ³   ðjs.Map.new -- similar�  g>kbehaviZ > ..‰#--¡ tA @an aJ¹ of entriesš @ aObjectA E&  ‰ é H žo. H 5""" N2objæ 4defÈ`(²,%):A B"""D�U all ë: in#× V   mhR‚ ý CtypeN  y[	pntended¬@withäŠ a "s gdÖ �"j $" Ô b M± py.toJs`ÇP   e!. õ`method’ànecessary becaœ€indexing”  àƒ O qñautomatically unwraps4 Š Q into   4ped«Æ.Q Ç pass


finW žñ__name__ = _save > 8del ‡âimportlib.abc    MetaPathFÝ «r, Loader
1 Dutil2 Pspec_  "_l, J  sy  ‚class JsP (_ U ‚Ó__init__(self  ú  3.jsAV = {}·Pfind_€ 6 `, fullð , path, target=ÓS õ[parent, _, child] =; ñ.rpartition(".")> ‰ 2if 8 k     ñ _module = sys.m sh ]C  0 Pif noâ™instance(B ‘°  7   €# Not onS6 us    Ú ï 	t 5tryµ À         jsp÷roxy = getattr(parent_module, child)
  ùexcept AttributeError:#  . qraise MH �NotFound+ (+  / Rf"No v À named {full Q!r}", = C ¹) from None ðif not isinstance(jspó P, JsP	 )» n± JelseŽ :try  +Â ‚ = self. Dies[]R  / °1KeyP jreturn<Áloader = JsL 87 Pspec_}_4 († ",  ñ, origin="javascript")
¤ ó def register_jsw(Ø òr: str, ä y¬1"""B  â RB Cs ``* •`` as a Js 
] ``Zs``. The P òcan then be imported`ÀPython using#  USdard  / J ósystem. If anotherl 2 by@ 1ameÛ  h° µlready beenz ,N ñ#this won't have much effect unless you also deleted ” #ed{ O  µr ``sys.ysÄis is called¨ »E APIC ä:any:`pyodide.Ê"Js÷"`.æ ¤¥Parameters= -   • ô  = N&Tof jsÄ  ð$ :Ð  9 ÿ0obj(Dback½ö 1 S8 › ,Ž… c è2Typ	ÞÀf"Argument 'E `' must\aO ,¡`{type( @).__  __ø�  k |Ÿ ×¦ L © -­ & °  Ñ© à 4] =×& $unD€²U; ø¢with givenp0thaGsm¥previouslyrŠ 1ed < ì5 or; + Ó `ž j ›  $Q Adoes(a"Âexist, will Ü@an eŠ[ tÕXO Àbeen importeó,d, this won't have much effect unless you also delete the
  ñimported module from ``sys.m `s``. Te Àis called byD µ JavascriptO ñAPI :any:`pyodide.unregisterJsMR 5`.
0 ¥Parameters -  ¥name : str  ¿ N Sof js¾  5""" Etry:  7 ðdel self.jsproxies[a ]% ú except KeyError> ±raise Value (7  \   –f"Cannot û   {b w!r}: no8¸ ° with that ( D is 5&edÊ  ] )¢òNone


class JsLoader( )± Ðdef __init__(ð ", ñ y!  O   4y =!   A rcreate_F GspecC hreturnRy@ Jexec> K @ Bpass1 B# us^–�lib.util.r _š!_lé s Ÿ £is_packageœ @fullC`   0Tru2ðJsProxy: type = I1  # ñ: ignore
jsfinder: JsF
 % = P()


} £B_js_0 (w ¿ # _]_coree Å sglobal –   * =@ . $ Ÿôeta_path.append(¶ )k  ê% 
¤ 6ast `yncio
i1 as  ' ñensure_future, F * dcodeop) óCompile, Command pr, _fea> sŸ q ¤contextlibK Z �manager,ÿ þ redirect_stdout #er* ÄExitStack,
)¯ h #_RO mStreamŸ `rlcompAr2„platform 2syse „tokenizeË T /+ “traceback1 Typing/ Literal ‚Optionalú ‚Callable 2Any	 3Lis4Tup RUnion   ")
h ®U._basº Àshould_quietÕðdeRunner

__all__ = ["repr_shJ°n", "BANNER
 pConsole P  N#"]X0_bab MR"""A  ± similar to�€one prinÀ”Àreal Python  0rpr_.‚# copiedGñhttps://github.com/p< #/c ð#blob/799f8489d418b7f9207d333eac38214931bd7dcc/Lib/�.py#L214®�cprt = 'TrP"help‘copyright  Òðts" or "license" for m; infaôà.'
    versionü( = platform.python_version()
    build = f"({', '.join(4 & a())})"6 ¡return f"PT # {U 1} {+ ô&} on WebAssembly VM\n{cprt}"


BANNER = _banner()
del ó


class redirect_stdin(_R �Stream):‹ !_s A = "'  ` ? b_Write- , Ò"""A utility % ðso we can specify our own handlers for wK ñs to sdout, stderr"""
† òdef __init__(self,3 _F ³, name=None¸  } ) .[ ( * =8 ] +  D ! =K w @ t Otext` 
(" = Qflush= 7 Fpass# bisatty$ ‚ -> boolO ˜ 
ETrue¸__Readx-wÀreading froms/inr	 . Iq' 8 =  o / Alineg, n=-1;Ù * � 6(n)RuCƒCompile( • 3""" ð code with CodeRuzó, and remember future importóInstances of this:ñbehave much like theObt-in cŽ ¡ function,[ðbut if one is usedS,  œ€ containöa� Ñstatement, itI "³ !s"Â C ð
s all subsequent program [ sý  § Q 1 inP �force. It• s!‚ insteadý á  á .? –  %   * /ö_mode="last_expr"! ð
quiet_trailing_semicolon=q' ’flags=0x0 ü m 0sup`.�÷ Aelf.: A |= 	 	² .ž ( ô¬ 
' ¤ ? =  e__call5Àsource, fileî�, symbol)z·õ:  # type: ignore’ 
´  yÇ ' 6tryÄ 1if - ² fqshould_$ (« k G   
ƒ  ów ñexcept (TokenError, Syntax M ‘# Invalid»Q, leteuÁparser throw eQ à later.
        apass

 ñ   code_runner = CodeR ("  * ysource, ºmode=symbol ”filename=	 
 qreturn_?  
% ±flags=self.  µ).compile()� ófor feature in _ %s:"  Å (ifî .ú A.co_` $ &A _ r 
B  F ” ? |=5 v ß v ò


class _CommandCÍ +r( )z 3"""" F W with¦ò, and remember fuƒmports, € qNone if—  ö ` is inGRlete.òInstances of this © ðhave __call__ methods identicalpBsign}#toe ¢ð; the differencex `that ib  «s  ‹ óiles program textJ Òntaining a __á Ñ__ statement,d i½ $ '!s'Z 1allQ ©subsequentm sZ ° [  Û Eforc"¶  Ì ð determined to bÑ  p  Uñ , will suppress¥ ±SyntaxError‹ » 0 ``¤1``. 2"""”Ædef __init__‘ ‚* ïZ¶"last_expr"! ÷quiet_trailing_semicolon=TruÞB=0x0: ‹ý ä !il0 ÆŒ¸  "   ˆ  N  !   Œ  
? ¤   )7²(. µ$, “â="<console>", Æö="single") -> Optional[õ]:  # type: ignore÷ ç  ðTer().0(x l )J ö

INCOMPLETE: Literal["¨X"] =  ×
SYNTAX_ERROR3 sh -ei5 	 
f   Ó ·/  ®C,F`( D"""Ayžòextra fields used a $`value ³c:any:`\ c` apis�¡Attributesb-  Ï ²_check : stP V0OneÀ(``)r``, ``"7    or î R``. Iä¤ i~  X Q  Ñn û ò
has already been resolvedYÓresult equal &X ùz  š ±  Ÿ"``<`` t  V areject| Àth a ``SyntaðxError``. If the value is ``"complete"``, n ƒ input
  $ ñ and syntactically correct.
- °formatted_es a : str  J ~  ``Future``ƒ €rejected} õ
is will be filled with a X µ version ofW  Ò  code. ThisT ða convenience that simplifies , Ê õhelps to avoid largeV ômemory leaks when using from Javascripù 2"""Õdef __init__(M Vself,  Bõ x_check: Union[  )´Literal["in{E"],  ƒ!x-d	 . P ]x %): …super().§ ) Belf.^ Ÿ U" =R
‹ øPò: Optional[str] = None


class Consoleê P"""InGÐctive Pyodide $ ­GAn i$ c@ ‚ based o
ñPython standard library¨ `K.g ‚ `tpmanages€eam redi,Aions€ÁasynchronousP Pexecuá 1 of‡` ¬ 4TheI  z�backs can-0modÛ"d a Âly as long aY  `p7×stent_stream_Ž æ` isn't in effÎ’ParameterE - ­ ñglobals : ``dict``  À ¬    namespace^ Pwhichqe‚ atœ “ ¼rDefault�° new empty [  ó#ryddstdin_ ‘Callable[,]� AFuncW0to 9 Ò at each readÒa``sys.\  )Ž  ``f&``€ ?out� 40wri%o € ?out� ?err� F!er+M
‘Gbool€hShould áS’sÊÁkept between«�:any:`run# <f. 5>`?z
¶ UFalse¹@file�¢ 7str¡  ±  ¯ ¡RreporÉ@messÌ*. b <4>f ŸAttribute5 9@DictµX, Any³ )  –  ± @u•!asC  * ¸	À`Callback[[sçtr], None]``
  õ#Function to call at each read from ``sys.stdin``.
? pstdout_6 Ðback : ``Call ?[[ss Pwrite‰ r <outs ?errs J9errs abufferÝ AListØ Dð*The list of strings that have been :any:`pushed <Console.  >`ò Sthe c bñcompleter_word_break_characters• ?str�  !seŽ ,  ^ “idered by� ` ’  – 0be y  y !s.ú2"""¡ Ñdef __init__(  WUself, °globals: Ope¡al[dict] =Œ( * hâ:  [Iable[K –A "dA ñ	persistent_stream_redirehæ: bool = False÷ �filename:BP = "<±Role>"% %):V3if Y1 isJ  „ `= {"__V ƒ__": "__T @__", 1doc  }_  Ã.D 
 
 _gÉ ?err 
Þ: =  
I d . s/ ¹/  
/ r4 =  
! ú%: ÷Z = []$ û_lock = asyncio.Lock()$ s$ed ) ”_generatoC`  # trc[ 'Geam [M 6if ) „*  .ï0 R 9 sÏ $ Ÿ %rl $.C®(S 8)¾ µype: ignore}  # p÷nonalphanums except '.'& ósee https://github.com/python/c ð'blob/a4258e8cd776ba655cc54ba54eaeffeddb0a267c/Modules/æÅline.c#L1211w Ã Ü €&= ù Kð""" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?D 0   - t àile = _CommandX÷iler(flags=ast.PyCF_ALLOW_TOP_LEVEL_AWAIToÀignore

    ódef persistent_redirect_streams(self):
  C"""R# Ð stdin/stdout 7errK Uly"""8 0if J .X ¦_generator[  b ereturn6 3 % =L d§ ¸ Åions_inner()G AnextÉ  Ò)  # trigger M  &ioŠ # õs will be reverted to normal when›  ?ç ñ  is destroyed.
› {Sstore"z" yùif they have been‹Ô (ed–³# allowing w ²  toç àgarbage collecð !re† sp Ð  Á²BNone÷ ñ @contextmanager;  wŠ #A <  =  }8 ” standard• g — øThis supports nesting.¥yield fromÂ]¸ ?_st* 	 
A� i@õ which implements³C andtp Î  ÙUreadyF 1ed?²  �s>*ed�7  ; r¡|es = []* a "š_callback\  ñname = getattr(sys. 0, " Q", "< &>"Ð ‰  ‘ = _ReadS´ê  {  , N =   
M Ç „.append(  Ü2in(8 ); ç ?outè    u é ;outê ?outë   B   ì [Writeí  " î    z ´  <Þ sï 0outð  : r ñ ?errñ    w ñ ;errñ ?errñ   B  ñ  " ñ    z ñ 0errñ  : r ñ ;try¶4elfF8u = True gðwith ExitStack() as¤	 + 5forª5 in s~  +   sQ s.enter_³
ú  . 
Æð finally:
        ðself._streams_redirected = False

' àdef runsource(4 ",  ñ : str, filename ò = "<console>") -> C qFuture:T  X à"""Compile andc W ° code in th ¢terpreter.�  < uReturnsL -   $ i:any:`} `B 5""". 6try—  ; �  = ì 2._c¥ (ô ï µ, "single")J óexcept (OverflowError, Syntax QValue W) as  { …# Case 1S   úif e.__traceback__°  $  ë.clear_frames(8 «  4 Zres = Ý(SYNTAX_ERROR. R.set_å ^ion(e! °formatted_eü  F s <  ÒF res¤#if[s Non)¼ ®INCOMPLETE™  º presult(M ! ~ a _   Êdone_cb(fut)š�nonlocalÙ  s ¦exc = fut.O
”  õ*xcO  > Bres.Of
J(excT @  x ' ¡  +ë  > ;els‰   ”  T a ×  )� U V ó   # type: ignorm M �ensure_f0q@.run”„  r)).add_|0all( bu r*È `async µT ;elfÒ _ Á: CodeRunnerÇ'An&Â"""Execute a¥bobjectËt  ¿.n‚ CwithaJlockç •¦(` 0¿    ü Qawait¥  H_€ Wvglobals. 6   gfinallð    þsys.stdout.flush(@  + ' 5err' ‚ |À la, e: EC1ionu6strA"""F_>  N÷ that just occurred.ðThis doesn't includ·astack .€ becauseY Are i* ñ one. The actual½  Ù r ððis stored into `ö `last_vç%`.6 %  ! =  E E = eG  ¸  ô! =" À"".join(tracóeback.format_exception_only(type(e), e))
  …finally:   Àe = None  # 6 ‘: ignore
& ödef num_frames_to_keep(self, tb)L   ' � = FalseB  d Fkept 0 ò	# Try to trim out stack n ö  inside our codO Qfor ($ Â, _) in trac‰walk_tb(œ „ &ep„ ® "orq 0.f_g õ.co_filename == "<console>"¹ Q ,KexecN 7if ” W j   CE+= 1‹ wreturn   º·De: E.†) -> strq A"""FSU the Wò that just occurred.i  ž õ)The actual error object is stored into `sys.last_value`.Æ &""]+tr£6   ! =§&(eØ ‚ $ Z 6 = /	  # 5.__ %__�  1 n`@s = ì. e> 
� –‰"".join([  _ w À»+, d 3, -˜ 
n  ã$CpushPline:CûiFuture%pPush a / Â heä‹erpreter& ðshould not have a·�iling new# ‚; it may  …internal=& @s.  q 2  b€appended‡ Áa buffer andÁE ” %'sJ ðrunsource() methodI ±called with< ð	concatenated contents of K p "s R @.  I" pis indiA s= P@comm› @was u[ %orN €invalid,c Ë òis reset; otherwise  M k �complete,û P  t ¢  is left asf � Qafterj K LÀÏ\iÐ e” 0ult 8 Æc:any:`3.dA` onf 7#ntØ ¤ ZÃ .ê(® ówc = "\no4 ( 0res° Ñž (@ ,èù7 #ifê ö.syntax_check != INCOMPLETE Ü~ U = []é r«‰ = `º�� ƒð
Tuple[List[str], int]:
    ô"""Use Python's rlcompleter to  ð the source string us   ó:any:`globals <Console. ñ >` namespace.

v ÿ   Finds last "word" inf  5and… ˜s it with¦ e. WordW Àbreaks are dÅ ‚mined by[ õet of characters in: Æ ñ  r_• _O _1 Þ ) '>`ì PParamŽ sn -  _:a  /T|š!atÜ 7endr mReturno W ¾ õions : List[str]   w RA lis10ionœ Uings.* µstart : int  >  µ ´index whereÅD Garts® 0Exat¯ -R Ã>>> shell = `.() .Ø ¶e("str.isa"& 3([' …lnum(',  8pha ¦scii('], 0> ‚ d pa = 5 ;l /8l 5"""Ü `¢= max(map(&Å.rfind, self‘ ´f)) + 1Q Æ=Ï[a :ûQif ".Žk ::  ×a9= _ ó er.attr_matchesª õ)  # type: ignoreO Oelse] P_ rx1s, ì ñ


def repr_shorten(• ñvalue: Any, limitÖÀ = 1000, spl ðOptional[int] = None‰qparator¿Ð = "..."
) ->è ¡"""Compute³I ‰ `esentaY  ¡!``‹ 0`` ÿ¤ " iaÃif necessaryD Ifpis long¹ahan ``Ä  ``l #n  °‘firsts ``Ò !``ý ä u  ( �&  " rseperatZR'...'�Default ¿ F fore B is ’ b // 2`1 ê"if_ &  Q0 q¤ " =‘; ¯ atext =Å(n >pif len( 2) >5 L   ` = f"{
 ![:\ S]}{se½} - 2:]}‡;�ext
from > ówrap import dedentX B_docà(
 )Š à"""This remove„aitial ""s b €he lines ŒE ó!Af¢1he Î- , ±, all other! Ðs will includñe some
    spaces. This removes them.
  �Examples -  õ>>> from _pyodide.docstring import dedent_ 8  (  ._6 ñ__).split("\\n")[2]C `'After§ á first line of n ±, all other! Òs will includ'O 1""" L A_newO %= J p.find("ƒ ) "ifx , Q= -1:  Ufreturn@  N  Z )[:u 3] +5(/ [" 1:])N c ð 

def get_cmeth?�b(func)� a"""Get'ò value to use foNàPyMethodDef.mlD ’ attribut% ‘a builtin…  Z Ction? isM 7d iû #.cICThe S ò(should start with a signature which cannot have any typ± av ¶e: ‚must endT ñthe exact characters ")\n--\n\n".Ã 0For&  ä0: "Ñ ö name(arg1, arg21 2SeeLóhttps://github.com/python/c ðblob/v3.8.2/Objects/È o b.c#L84U f*ô Û  ¡  ’(sum)[:80Lò"sum(iterable, /,˜A=0)\+b\n\\nRÑ S0sumj1a 'À"' Iò(default: 0) pluRZ (tinspectò‚, _emptyVsig =Õ¾Ð # ³ param and   .  Ó)  inO . e.³ #s( ² &._I $ =–   Rsig._m $ r    D0.__Gñ__ + str(sig) + "R }è d¨ø
;�A libraryrñhelper utilitiesµpconnecttP} Ò §ñbrowser environment.T ð# Added by C:
# JsExcepQ! (ÐÃjsproxy.c)

É4ast  !s
, DcopyÑ@deep  $io S"IO „textwrap ú^ ƒtokenize, Dypes) PCodeTy 0typõ   ñAny, Dict, Generator, List, OÜ 2al
"}à_quiet(source:¤’) -> boolÞ  úS¬òwe suppress output?¯Âs ``True`` i†Ñlast nonwhitee‡ ÎQ``cod0 sþƒemicolon-	Ã r'1 + 1'BFals' ý	( À'1 + 1 ;')
 ñ"   True
    >>> should_quiet('1 + 1 # comment ;')* BFals4 1""" ó# largely inspired from IPython:% ñhttps://github.com/ip"  óblob/86d24741188b0cedd78ab080d498e775ed0e5272/` ó
/core/displayhook.py#L84
x ôWe need to wrap tokens in a buffer becauseª  "T# ðize requires one arguò	, readline, which must bó# a callable object& ñprovides the same interface a ² ¤io.IOBase.i õ () method of fiZ s‚òsource_io = StringIO( µô q= list( Ñize.generate_ s3 5_ioy "))G2for9 8‚reversedI "s)8 G"if& @.typß ! (Ó     g  y ¯ENDMARKER,  °NL,  # ignoÎ p empty srs (\n\n×  T   X NEWLINEV vCOMMENT º  G ccontin  rreturn è Ô "==â  Æ tOP) and  szr == ";"¡ A 4ó

def _last_assign_to_expr(mod: ast.Module˜ aPImplezPation'E  ; 3_orM "' n a_mode.X’It modifysÀupplyied AST ±ule so that!  U 8 Astatq ó 's value can beb  ed„ z  » ?# L9ú3587f5bb6c8570e7bbb06cf5f7e3bc9b9467355ag±activeshell!B3229ÜQif no*V.bodyÎrÿ p_node =:) E[-1]B µisinstance(, ,ÓAëÓ Và# In this casezra multiple t7 tsâin `a = b = 1`ÚH @We j{1takH ` first­& I 5 = — . As[0]Ü _elif À (”2AugÄ Ð "nn )Ô S f  b ] ¸ W
y E f 4Nam 4 ½ ! =UE6 �  ( (9 2.id< rLoad())ƒ > 1mod²v.append¢# r# UpdatG i€ numbers wnñæerror messagesb ‡ ñ fix_missing_loc©s×ð)


class EvalCodeResultExcepÏ(
 Oò"""We will throw+#to}A a rB eQour cñjTW�allows usôðdistinguish between "code ñ8used top level await" and "code
    returned a generator or coroutine".( A"""
	 ñdef __init__(self, v):  P …super().# &v) ð@elf.value = v


# We need EvalCodeResultException available inside the running Å ð. I suppose
# we could import it, wrap all of >  6 ñ	 in a try/finally block,ðdelete it
# again.  : 	, À but I think As is` ðbest way.
#
# Pu† Ð into a list 
  void breakÉ �CPython t;   °_inheritanc× ( . d_basee.)ñClassTests) which examinesû ( õs in
# builtins.

 ?___…?= [ ó]  # type: ignoreÔÐwill substituLnü@of xª0areƒ #to‰ñ.
_raise_template_ast = ast.parse("   ¯ ñ[0](x)").body[0]


´Âlast_expr_toe Q(mod:[ cModuleÇB"""I+ñ ! P nodeáÒa statement, Š /an¾ùJwithý  KF .%  ^ >¡if not mod¾ W§, È � =) A[-1] A Qisins> ä L  # 0, (IPExpr,×  .A)ø  � h Þ 1Â = deepcopy(:	Ÿá�# ReplaceÝ ô Bour ñ?in 7  ú f õ .exc.args[0] = ç 2i ® ( Ü " =�² ô3ñ_and_compile_gen(*Ásource: str, * B_mod A = "Œ  ;"$ òquiet_trailing_semicolon: bool = True+  H c="exec< vfilenam] < > Plags:/ä = 0x0,
) -> G›[À®Â  =RType]4@"""P/2 ``é 0``,†pn yield C AST    6robject.	"ByL À heP,×²give caller opŒPunityü do further3 ] €manipulaó¦s. Because‘ s ,Qannoyn o`  ½ iw ã0pedÜ  aPExecuÌclfñ# handle mis-indent= ðput from multi-lineAings§ J 4 ( )cmod = J $, î,«@e, fà  |ú ã.PyCF_ONLY_ASTF 1# Pû Phere,»!owì  er;�transform@ ! i¥by likeá ð mod = yield modñ

    if quiet_trailing_semicolon and should_$ ‘(source)::  > õreturn_mode = "none"X 	 ö= "last_expr_or_assign"K À# add extra % õ&ession with just the L-value so that we can handle it™ #9  4 w e code.# _ ˆ 1_toš _(mod)Á p.startsŽ (É q"):  # I  ´ 6 or æ s  *  q Wraiser Àast.fix_miss‰’locations$ pq compil< À, filename, ‡�, flags= ò)


class CodeRunnerr‚"""This  ñ	allows fine control overtPexecuˆ Q of aEr block.)ñIt is primarily intended for REPLsIðother sophisticatedl asumersÎ'±may wish toòtheir own AST transformÐ, separately P al8  öAuserQ €when parS ©  <ðlete, etc. The simpler :any:`eval_+`¸ D  Ã_async` apis!Ñ be prefered s ¹ ±flexibilityJ ƒsuffices<¡Parameters -  o¢ : ``str``p  ¶ sPython %  ±  ü 3run\ C  °Specifies wJè Ç 8 Ped, mw`be oneü5``'êA'``,¤  Ž  ö0'``0``'‚'``. On Æ a excep^i Q 8d. Y  O £by defaultä  - *' 2-- Å À ´ R¶ 
8 
¸ B 
 Ö  cY @FmentZZ õ ¤ -- always” ƒ``None``Ã Z~ ´HbooløµeQa¹ ¹Ípsuppres^€e result¼ 'no¬ WtÃis ``True`` ôãng ``"1+1 ;"``Á  ' Â ,êQi	¯``False``,F 
@ ``2s ÜØ     ù ÷ðuse in error message`pd stack% v +<Ý >O Ao " "l  BionÒ"V "ö 0``"l!le  orC T"ï D¿ë!to  1xec  F¿ ðost purposes it's ºcÖ  ry‚  î ´Jargu|1Seeö1doc )‹ðthe built in
     ó,`compile <https://docs.python.org/3/library/functions.html#: 4>`  0.

T ò flags : ``int``   BThe  3to ? ð	 with. See the documentai A for �built in_  J · A¶Attributes:³ `ast : ¹  
 ðfrom parsing ``source``. If you wish to do an 2 ¥transform,¼  À ð  modify this variable before callb ó:any:`CodeRunner.4`i J ±code : Onceƒ  <  9 NF !d < Kwillœ € be avai“ #in4 ÿde field. You canÃ J Ò Drun`2� 2.L 2"""ŽÑdef __init__(  ÿ Fself[‘V: str * ±return_mode% æ = "last_expr"(  ! g="exec  quiet_trai�ö_semicolon: bool = TrueD vfilenami <P >Q ²: int = 0x0< )):Ý %._¯{= False pgen = _–Te_and0 F_gen(,¯f     = 
%   
 = 
? !=	   F=$ )ý  bp= next(	.ô )/: WC"""Cö sðcurrent value ofÙðelf.ast`` and st– , AresuŠ%  C`�€Can onlyDÁused once. Rzs7 �`` (chainö)é Ž í    2if Ô Æ d  ôraise RuntimeError("Already[+d"/d­M:try^ £# TriggersM �0  � � �gen.sendd 3s ñ except StopIterB \ as ek 0gen ‚or must ‡�, which è sF ˆ  ‡Q = e.Å  ;elsn kassertIr o=1runÕ ð, globals: Dict[\ÿ Any] = None, loc 
x@Execb.¸ ?Uafter.’ = ö may not use top leveÐaawait, À`CodeRunner.órun_async` for code that uses top level
  uawait.
 ¥Parameters -  öglobals : ``dict``B  Y BThe $ ñ scope in which to executeœ �. This is  ²d as the ``= 5s``s  W p� Ü  ``J h``. If3  N ðabsent, a new empty © `ionary" Yused.^ PSee `  W é documentation( ð<https://docs.python.org/3/library/func8 ps.html#Q 1>`_¶ 0mor'fou?locN# M$< L2  )K |value oo	YymReturnË° :Any¹!If�òlast nonwhitespace characterÿ �source``"µ semicolon,[  °r s ``None© G_ PstatebC ãn expression, 9 ;theP @sult�  F 1 @. Usç :; @_modž 9andB õ``quiet_trailing_º 5`` _ )� modify t ydefaultK †behaviorE5"""" õif not self._compiled: ôaise RuntimeError("Not yet 2 %")3 "ifN Ó0is TQ o1 :try  ñcoroutine = eval(ž  P ,®2s, ûw  ª 5if < 
S   rÈ „     Q"Usedy _t ò with TOP_LEVEL_AWAITÊÅ2‚†instead.bW « ðexcept EvalCodeRe.E 0ion]e¾ w# Final{Q fromš„\s her† U1 e.@sU def ¼ ( gbñ: Dict[str, Any] =Êy L )¾  """Runs ``] .P#``c0mayNí å°Can only be* @d afÙ0calq :any:`Ccunner.ŽjŠ  |
{ 
_r  , automatiZ y ârœ5ingO a�Àlobals : ``d‡ict``

  ò2The global scope in which to execute code. This is used as the ``= 9s``W ðparameter for ``J w``. If 3  N ðabsent, a new empty dictionary"  p .^ PSee `  W   documenta4 	( ñ<https://docs.python.org/3/library/funl ps.html#Q 1>`_¶ 0mor6fo.3°locals : ``¥ N# M$< L2  )K |value oo	YyuReturns  -  5Any  ¿!If€ð
last nonwhitespace charac{þ �source``!¹ semicolon,N r~ s ``None¨ F_ PstateaC ãn expression, 9 ;theP @sult F 1 Q. Use¹ "``; @_modž 9andB õ``quiet_trailing_º 5`` ^s¦€modify tŸydefaultK †behaviorD5"""" õif not self._compiled:  lôraise RuntimeError("Not yet 2 %")3 "ifN  6 3 TQ o1 :try  ñcoroutine = eval(ž  P ,­2s, úw  ª 5if < 
S   @awai² ] € ðexcept EvalCodeRe½E 0ionëeM »1 e.fa


def© _¤ (Y xR: strl)@: Op©€al[Dict[  � Any]] = +. Þ - *4 — Rx @ = "Â_�"$ VÒ: bool = True+ …filenameL <I ðflags: int = 0x0,
) ->Ê ,�"""Runs a0ingGP‚ V[P/ü  Ku8strt ¾U  3run·x? ´ @   ±$= ²œDú9öòÀon.org/3/libò2rary/functions.html#exec>`_ for more info.

    locals : ``dict``   2The P scop6   which to S òute code. This is used as the ``[ !``h  Q ‘parameterŠ  ``E g``. If.  H qabsent,H pvalue o# Åglobals`` isU  t . PSee `  \   documenta$ ÿ<https://docs.python.org/3/libA±return_modeF8strEñSpecifies what should be r8 €ed, must #onè å'last_expr'``,¸ &`` ð
_or_assign'`` or ``'none'P‘On other < s an excep;praised.< r ³ by default% ½*' #--Å ¨ B  ´ eession¶ 
8 
¸ B 
 Ö  ÊY ì  ÌìZ õ ¤ -- always” ƒ``None``Ã ñ	quiet_trailing_semicolon´OboolµeJ$a ;  ; Írsuppres÷`result¼ 6not¬ cWhen t'�``True`` ¥óuting ``"1+1 ;"``Á $s Â V, wheQ it#¯``False``,F 
@ ``2s Üfilenam½     !  toáp in errK`essage`pd stack%1cesR<Ý >žs RûÃ- /6Any~&IfWðnonwhitespace characGPsourcNFis až,HZ  ÁOpYPstateX U)Ì4ionA ‡ r×• S ïQ. Use* "``ÚŸ`` and ``sabmodify3�’ behaviorW1"""‰ o ! (  é ¦CodeRunner   )P  = ¬ = 
% ½ = 
?  B A=	  `lags=f  )Î —.compile( Crun(,£s �)


asyncÁ` eval_¢_ R: stro I 1: O!€al[Dict[  � Any]] = K. Õ- *4 Yx @ = "Öã"$ K : �0 = 3+ GL À<exec>",
   ñ8 flags: int = 0x0,
) -> Any:
    """Runs a code string asynchronously.
+ ñUses `PyCF_ALLOW_TOP_LEVEL_AWAIT% ð<https://docs.python.org/3/library/ast.html#	 O 1>`_R áto compile the§ ‘ ¡Parameters) -  ñsource : ``str``
  ô QThe Pš  % ü cto run\ qglobals? Ldict@   ó
 scope in which to execut¨ ñ This is used asÂ "``= 5s``“ pË p for ``F w``. If /  J ðabsent, a new empty ¡ `ionary"  l .Z PSee `9 S å documentation$ µ@func4 s» M 1>`_® 0mor#fo;?loc:	 9$< 8.  7 
|value o[Am€return_m‘¿ ñSpecifies what should be r8 €ed, must #onè å'last_expr'``,ê &`` á_or_assign'`` †`'none'ˆ‘On other < s an excep" i€ [ˆraised. Y  O £by default% - *' #--Å ) ´  ´ 8ess¯
8 
¸ B 
 Ö  Y ì  -Z õ ¤ -- always” ƒ``None``Ã ñ	quiet_trailing_semicolon4Hbool4µeJ$a ;  ; Írsuppres0`result¼ 6not¬ cWhen t`�``True`` ™ utÄ³``"1+1 ;"``Á $s Â V, whe  it#¯``False``,F 
@ ``2s Üfilenam|    !  to @Ðerror message`pd stack%1cesR<Ý >ORûˆå1Any  o&IfVònonwhitespace character ``a�,GQ N§XPstateW?  (Ë4ionA ‡ rÖ• S îB. Usò"``ÙŸ`` and ``~à``
        parñ!ameters to modify this default behavior.
    """ ‚flags =  ñ"or ast.PyCF_ALLOW_TOP_LEVEL_AWAIT  # type: ignoreD �return (  ] öawait CodeRunner   usource,.   C g_mode= 
% ÿ
quiet_trailing_semicolon= 
? ”filename=	   
= )¦ —.compile( ò
run_async(globals, locals$ ò)


def find_imports(þ ñ: str) -> List[str]:k ˜£Finds the 9 Ò in a Python E P codeI Aing
> 3Par -  6 |  o   TheU äto inspect for„ .f RðsC b  %``Í !``  Û�A list of–@ule „ Û Tat arà  edá "``¤ #``k yExamplel -[ ô >>> from pyodidH 	m) V B = "NÓ numpy as np;Þ Â scipy.statsc ¼Ý!['D A', '9 !']n Àñ# handle mis-indentã 2put· ”multi-linÂä ª  de4 /)yQmod =¢Uparse  gÙ  Ë3set¥ »n$ <Âst.walk(mod)l7 Ðf isinstance(- ,a I¯)  - P 0ame« + .ËM  $     _ ! =î(    ² A.addy 2 â.split(".")[0]k 1 ?eliª 
KFrom® amoduleV  ˆ Bode. 	Š i˜) ~is NoneÔ rcontinuò ’   Ã \ F Å Öð(sorted(imports))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                