gtl UdZddlmZddlZddlZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddl$Z$ddl%m&Z&ddl%m'Z'ddl(m)Z)ddlm*Z*ddl%m+Z+e"d Z,e"d!d"#Z-e"d$ed%ef&Z.e"d'd(&Z/e"d)d*&Z0e"d+d,&Z1e"d-d.&Z2e'jfrdd/Z4ndd0Z4dd1Z5Gd2d3Z6dd4Z7dd5Z8 d dd6Z9 dd8Z:dd9Z;dd:Zdd=Z?d>Z@ dd?ZAe"d@ZBe"dAZCGdBdCZDdDZEedd%dE ddFZFeddGdE ddHZFddGdE ddIZFddJZG d ddKZH d ddLZIddMZJ d ddNZKdOZLdPZM d ddQZNGdRdSZOdTZPdUZQ ddVZRdWZSddXZTe"dYdZ&ZUGd[d\ee-ZVGd]d^eVe-ZWGd_d`eVe-ZXe!r eVZYeVZZe[Z\e[Z]neXxZYZ\eWxZZZ]ddaZ^GdbdcZ_e!re[Z`n e_jZ`GdddeZbddfZcddgZdddhZe d ddiZfddjZgddkZhddlZi d ddmZj ddnZkdoZlGdpdqe[ZmGdrdsee,ZnGdtduee,ZoGdvdwee,ZpGdxdyeqZrGdzd{esZtGd|d}et~Zue!r ddlmvZvevZwneuZwe"dej&Zy d ddZzda{ddZ|ddZ}ddZ~GddeZdddZddZiZded< ddZe j dZ d ddZ ddZe j dZe j dZeef ddZesdZdZe j dZGddZGddZdZdZddZddZ ddZe j dZddZddZddZGddejZej8Ze#e,e*ej8fZy)zRoutines to help with the creation, loading and introspection of modules, classes, hierarchies, attributes, functions, and methods. ) annotationsNupdate_wrapper)CodeType)Any)Callable)cast)Dict) FrozenSet)Generic)Iterator)List)Mapping)NoReturn)Optional)overload)Sequence)Set)Tuple)Type) TYPE_CHECKING)TypeVar)Union) _collections)compat)HAS_CYEXTENSION)Literal)exc_T_T_coT) covariant_F.)bound_MPzmemoized_property[Any]_MAz#HasMemoized.memoized_attribute[Any]_HPzhybridproperty[Any]_HMzhybridmethod[Any]c,tj|SN)inspectget_annotationsobjs L/opt/hc_python/lib64/python3.12/site-packages/sqlalchemy/util/langhelpers.pyr-r-As&&s++ct|tr|jjdd}n t |dd}|t j Std|S)N__annotations__Mapping[str, Any]) isinstancetype__dict__getgetattrr EMPTY_DICTr )r/anns r0r-r-FsS c4 ,,""#4d;C#0$7C ;** *+S1 1r1c|jd}tj}|j|t t |j S)Nzutf-8)encodermd5_not_for_securityupdater str hexdigest)xms r0md5_hexrDWs< A##%AHHQK Q[[] ##r1c@eZdZUdZdZded<ddZ d dZy) safe_reraiseaReraise an exception after invoking some handler code. Stores the existing exception info before invoking so that it is maintained across a potential coroutine context switch. e.g.:: try: sess.commit() except: with safe_reraise(): sess.rollback() TODO: we should at some point evaluate current behaviors in this regard based on current greenlet, gevent/eventlet implementations in Python 3, and also see the degree to which our own asyncio (based on greenlet also) is impacted by this. .rollback() will cause IO / context switch to occur in all these scenarios; what happens to the exception context from an "except:" block if we don't explicitly store it? Original issue was #2703. ) _exc_infozdUnion[None, Tuple[Type[BaseException], BaseException, types.TracebackType], Tuple[None, None, None]]rGc6tj|_yr+)sysexc_inforGselfs r0 __enter__zsafe_reraise.__enter__sr1c|jJ|,|j\}}}|Jd|_|j|d|_|J|j|r+)rGwith_traceback)rLtype_value tracebackexc_type exc_valueexc_tbs r0__exit__zsafe_reraise.__exit__sq ~~))) =*... 'Hi( ((!DN**62 2!DN$ $$&&y1 1r1NreturnNone)rPzOptional[Type[BaseException]]rQzOptional[BaseException]rRzOptional[types.TracebackType]rXr)__name__ __module__ __qualname____doc__ __slots__r3rMrVr1r0rFrF^sH0I(2,2'21 2  2r1rFc#Kt}|g}|rM|j}||vr|j||j|j ||rLyywr+)setpopaddextend__subclasses__)clsseenstacks r0walk_subclassesrisVUD EE iik $;  HHSM S'')*  s AA A cft|tr|S t|S#t$rd|zcYSwxYw)Nzunprintable element %r)r5r@ Exception)elements r0string_or_unprintablerms:'3 6w<  6+g5 5 6s 00cz|xs |j}djdtjd|DS)N c3<K|]}|jywr+)lower).0ns r0 z(clsname_as_plain_name..sN'M!AGGI'Msz([A-Z][a-z]+|SQL))rZjoinrefindall)rfuse_namenames r0clsname_as_plain_namerzs3  #s||D 88Nrzz2F'MN NNr1Callable[..., Any]czt|ts |j}n|}|j}t ||}||k7S)z1Return True if the two class methods don't match.)r5r6 __class__rZr9)instance_or_clsagainst_method current_cls method_namecurrent_methods r0method_is_overriddenrs@ ot ,%// %  ))K'.{K'HN ^ ++r1cg}|j|j|jfD]/}t|dr|j }|j |1t |S)zrdecode a slice object as sent to __getitem__. takes into account the 2.5 __index__() method, basically. __index__)startstopstephasattrrappendtuple)slcretrBs r0 decode_slicersR C YY#(( * 1k " A 1 + :r1c 'Kt|}|D]^tjftfdt d}|D]}||vs|j ||Qt dzyw)Nc t|zSr+r@)ibases r0z!_unique_symbols..s $Q-r1iz&exhausted namespace for symbol base %s)ra itertoolschainmaprangerc NameError)usedbasesused_setpoolsymrs @r0_unique_symbolsrsw4yH G 't 5 C(" S!   DtKL Ls AA3 (A3c#HK|r||dzz}||||z}|ryyw)z6Call the given function given each nonzero bit from n.rNr_)fnrsbs r0map_bitsrs1 !aLe  Q s""_Fnc(dfd }t|S)z'A signature-matching decorator factory.ctj|s tj|s tdt j |}i}t ||}ttd|dtd|ddz|jfz}t|dd\}}t||}|jt|d |j|d <tj|r d |d <d|d<n d|d <d|d<dt|dvrd|z}nd|z}t j"|j$}|jt'||j| ||d|j$itt(j*t-|||j} t/|d|j0| _|| _t5| |S)Nznot a decoratable functionzTuple[str, ...]rrtargetr)rrFgroupedryzasync prefixzawait target_prefix__zf%(prefix)sdef %(name)s%(grouped_args)s: return %(target_prefix)s%(target)s(%(fn)s, %(apply_pos)s) ze%(prefix)sdef %(name)s%(grouped_args)s: return %(target_prefix)s%(target)s(%(fn)s, %(apply_kw)s) rZ__func__)r, isfunctionismethodrkrinspect_getfullargspec!_update_argspec_defaults_into_envrr rZrdictr?format_argspec_plusiscoroutinefunctionreprrImodulesr[varstypes FunctionType_exec_code_in_envr9 __defaults__ __wrapped__r) rspecenvnames targ_namefn_namemetadatacodemod decoratedrs r0decoratezdecorator..decorates!!"%g.>.>r.B89 9,,R0 0s; $($q'2 3$d1Qi0 1{{n   -UHdC 7-1w-O+D%@A;;  & &r *!)HX (0H_ %!#HX (*H_ % 4Q=     kk"--( 49 IvwJ NO    dC 5 ")Z! ##*.**d ;  r1c2fd}||j|<y)Nc|t}jdddD]}t||}t|S)N.r) __import__splitr9)rtoken modulepathobjnames r0rz#PluginLoader.register..load|sBZ(C#))#.qr2c5)33( (r1)r)rLryrrrs `` r0registerzPluginLoader.register{s )   4r1r+)rr@rzOptional[Callable[..., Any]])ryr@rXr)ryr@rr@rr@rXrY)rZr[r\rrrrr_r1r0rr]s)BF#? & r1rc" tj}|j}|j}t |j d|t |j|zfS#t$r+tj|}|dt |dfcYSwxYw)Nrr) r,CO_VARKEYWORDS__code__ co_argcountr co_varnamesboolco_flagsAttributeErrorrr)rco_varkeywordsconargsrs r0_inspect_func_argsrs  //[[ ' ( ~- .   & ,,R0AwT!W %% &sA1B B)_setraiseerrcyr+r_rfrrs r0get_cls_kwargsrs r1Fcyr+r_rs r0rrsr1c|du}|r t}|J|jjdd}|xr@t|tj xr$t|j tj}|r5t|\}}|j||s|s|rtd|dyd}|r|r |jD]}t||n|jd|S)aeReturn the full set of inherited kwargs for the given `cls`. Probes a class's __init__ method, collecting all named arguments. If the __init__ defines a \**kwargs catch-all, then the constructor is presumed to pass along unrecognized keywords to its base classes, and the collection process is repeated recursively on each of the bases. Uses a subset of inspect.getfullargspec() to cut down on method overhead, as this is used within the Core typing system to create copies of type objects which is a performance-sensitive operation. No anonymous tuple arguments please ! NrFz given cls z doesn't have an __init__ method)rrL)rar7r8r5rrrrrr? TypeError __bases__rdiscard) rfrrtoplevelctrhas_initrhas_kwcs r0rrs"t|Hu    ,,  :u -C  5 sE.. / 5 s||U^^ 4 *3/ v Eh %EF vAad+3 LL Kr1c2tj|dS)zReturn the set of legal kwargs for the given `func`. Uses getargspec so is safe to call for methods, functions, etc. r)rr)funcs r0get_func_kwargsr s  ( ( .q 11r1c tj|rtd|ztj|r|r{|ryt j |}t j |jdd|j|j|j|j|j|jSt j |Stj|r|r|s |jrt j |j }t j |jdd|j|j|j|j|j|jSt j |j Stj"|rt%|j&|dSt)|drt j |j St)|drDtj|j*rt%|j*|Std |ztd |z) zReturn the argument signature for any callable. All pure-Python callables are accepted, including functions, methods, classes, objects with __call__; builtins and other edge cases like functools.partial() objects raise a TypeError. zCan't inspect builtin: %srNT)no_self_is_initr__call__)rzCan't inspect callable: %s)r, isbuiltinrrrrrargsvarargsvarkwr kwonlyargskwonlydefaultsrr__self__risclassget_callable_argspecrrr)rrrrs r0rrs3b899   B  004D%% !"    ##   004 4   "  BKK00=D%% !"    ##   00= =  # KK4   Z ,,R[[99 Z   BKK (' WE E82=> >4r9::r1c t|rtj|}n|}tj|}tj|d|d|dd|d}|dr1|dd}tj|ddd|d|dd|d}n|dr d|dz}|}nd}|}d}|dr&|t t t t|dz }|dr|t |dz }|d|dz}|r |d|z d} nd} tj||d|d| d } |dr%tj|dd|d|d| d } n| } |rt|||| || St|||dd | dd |dd | dd  S)aReturns a dictionary of formatted, introspected function arguments. A enhanced variant of inspect.formatargspec to support code generation. fn An inspectable callable or tuple of inspect getargspec() results. grouped Defaults to True; include (parens, around, argument) lists Returns: args Full inspect.formatargspec for fn self_arg The name of the first positional argument, varargs[0], or None if the function defines no positional arguments. apply_pos args, re-written in calling rather than receiving syntax. Arguments are passed positionally. apply_kw Like apply_pos, except keyword-ish args are passed as keywords. apply_pos_proxied Like apply_pos but omits the self/cls argument Example:: >>> format_argspec_plus(lambda self, a, b, c=3, **d: 123) {'grouped_args': '(self, a, b, c=3, **d)', 'self_arg': 'self', 'apply_kw': '(self, a, b, c=c, **d)', 'apply_pos': '(self, a, b, c, **d)'} rrrNz%s[0]rr_cdt|zSN=rrBs r0rz%format_argspec_plus..ss cCFlr1) formatvaluecdt|zSrrr s r0rz%format_argspec_plus..|s #A,r1) grouped_argsself_arg apply_posapply_kwapply_pos_proxiedapply_kw_proxied) callablerrinspect_formatargspeclenr rrr) rrrrr%r$r' num_defaults name_argsdefaulted_valsr&r(s r0rr sH|,,R0  ' ' .D,, Qa$q'4aI Aw71:"88 GABKa$q'4a  aT!W$%%L AwDsT!W566  AwDG $ Q$q'!I"1|#3#56++ Q Q* H Aw!77 abM G G .  $/-   "oa^/"5-a3   r1c|tjurd}|rdnd}|rdnd}n t||St d||||| S#t$rd}|r|nd}|rdnd }Y*wxYw) a$format_argspec_plus with considerations for typical __init__ methods Wraps format_argspec_plus with error handling strategies for typical __init__ cases: .. sourcecode:: text object.__init__ -> (self) other unreflectable (usually C) -> (self, *args, **kwargs) z(self)rLz()rrz(self, *args, **kwargs)zself, *args, **kwargsz(*args, **kwargs)z*args, **kwargs)r$r#r%r&r'r()objectrrrr)methodrr#rproxieds r0format_argspec_initr4s  "x!$r L&vw? ? !!    L4L#*<0GD-4):KG Ls AAAc d}|S)aSA class decorator indicating attributes should refer to a proxy class. This decorator is now a "marker" that does nothing at runtime. Instead, it is consumed by the tools/generate_proxy_methods.py script to statically generate proxy methods and attributes that are fully recognized by typing tools such as mypy. c|Sr+r_)rfs r0rz&create_proxy_methods..decorates r1r_) target_clstarget_cls_sphinx_nameproxy_cls_sphinx_name classmethodsmethods attributesuse_intermediate_variablers r0create_proxy_methodsr>s& Or1c tj|S#t$r%|tjur dgdddfcYSdgdddfcYSwxYw)ainspect.getargspec with considerations for typical __init__ methods Wraps inspect.getargspec with error handling for typical __init__ cases: .. sourcecode:: text object.__init__ -> (self) other unreflectable (usually C) -> (self, *args, **kwargs) rLNrkwargs)rrrr1r)r2s r0getargspec_initrAsU6,,V44 6 V__ $HdD$/ /Hfh5 5 6s"AAAcjt|tjr|js |jS|S)zSAdjust the incoming callable such that a 'self' argument is not required. )r5r MethodTyperr) func_or_clss r0unbound_method_to_callablerEs. +u//09M9M###r1c |g}ntj|}t}g}tj}d}t |D]/\}} t j | j} | jrt| jnd} |dk(rY| jr | j}| r |j| jd| nN|j| jddn/|j| jd| D cgc]} | |fc} | s| jsJ|jt| j| d| jD cgc] \} } | | f c} } 2g}|jfd|D|>t!|r2|jt#|Dcgc] }t%|c}|j'D]7\} }| |vr t#| |}||ur||k7r|j)| d|9|r7|D]2\} } t#| |}||ur||k7r|j)| d|4j,j.ddj1|dScc} wcc} } w#t$rYTwxYwcc}w#t*$rYwxYw#t*$rYwxYw) z}Produce a __repr__() based on direct association of the __init__() specification vs. same-named attributes present. Nrrc3JK|]}tt|dywr+)rr9)rrrr/s r0rtzgeneric_repr.."s D8C$wsC./8s #r(, ))rto_listr1 OrderedDict enumeraterrrrr,rrdrr?ziprrr9ritemsrrkr}rZru)r/ additional_kw to_inspect omit_kwargmissingpos_argskw_argsvargsrinspr default_lenrdefaultoutputvaldefvals` r0 generic_reprr]sU !))*5 hGH2>2J2J2LG EZ(4 00?D15 #dmm,1KAv<< LLEOODIIa $=>OODIIabM2/3yyKA     sHJ J $J J"5,J'.,J6 JJ' J32J36 KKc.eZdZdZdZdZdZddZdZy) portable_instancemethodz_Turn an instancemethod into a (parent, name) pair to produce a serializable callable. )rryr@ __weakref__cJ|j|j|jdS)Nrryr@rbrKs r0 __getstate__z$portable_instancemethod.__getstate__Es!kkIIkk  r1cZ|d|_|d|_|jdd|_y)Nrryr@r_)rryr8r@)rLstates r0 __setstate__z$portable_instancemethod.__setstate__Ls*Ho &M ii"- r1cV|j|_|j|_||_yr+)rrrZryr@)rLmethr@s r0rz portable_instancemethod.__init__Qsmm MM  r1c|j|jt|j|j|i|Sr+)r?r@r9rry)rLrkws r0rz portable_instancemethod.__call__Vs3 $++.wt{{DII.:r::r1N)r_) rZr[r\r]r^rcrfrrr_r1r0r_r_=s" :I .  ;r1r_c|ht|j}|r|j}fd|jD}|D]$}|j |j |&|j dk(s t|dslt|ts|jn|j|Dcgc]}|vr| c}D]$}|j |j |&|rtScc}w)a'Return an unordered sequence of all classes related to cls. Traverses diamond hierarchies. Fibs slightly: subclasses of builtin types are not returned. Thus class_hierarchy(class A(object)) returns (A, object), not A plus every class systemwide that derives from object. c3,K|] }|vs| ywr+r_)rr_hiers r0rtz"class_hierarchy..js9Kq1D=Ks rre) r__mro__rbrrrcr[r issubclassr6re)rfprocessr rrrmsrns @r0class_hierarchyrs[s 5D3;;G  KKM9AKK9A NN1  HHQK <<: %WQ8H-I  "!T*  "%%a() ) } ) A NN1  HHQK  , : s9 C>c#Kt|}|D]6}|jD]%}||jvs||j|f68yw)ziterate all the keys and attributes associated with a class, without using getattr(). Does not use getattr() so that class-sensitive descriptors (i.e. property.__get__()) are not called. N)dirror7)rfkeyskeyr s r0iterate_attributesrxsK s8DAajj AJJsO,,s .A A c|r|}nN|d}t|Dcgc]6}|jdr#|jdrt||s||vr|8}}|D]} t ||} t| dst | d| } t t j| } tj| } tj| d} tj| ddd} d tz}|duxr||ixsi}t|| | j||_t!||||ycc}w#t$rYwxYw#t$rd} d } YrwxYw#t$rYEwxYw) z9Automates delegation of __specials__ for a proxying type.N)r^__del____getattribute__ __metaclass__rcrfrrrrrz(self, *args, **kw)z (*args, **kw)z?def %(method)s%(fn_args)s: return %(name)s.%(method)s%(d_args)s)ru startswithendswithrr9r rrrrrr+rlocalsrrsetattr)into_clsfrom_clsskiponlyry from_instancedundersrCr2maybe_fnrrfn_argsd_argspyrs r0monkeypatch_proxied_specialsrs  <D]  " T"JJt$!,TM "    x0H8Z0xX>He(((3B %004D2247;G11$q'!"+>F  35;X >  % ?4*? E2  R  ')CK $ &#f+.?  &     %+G$F %   sB;D2D73'D7AE E7 EE EE E%$E%c6t|d|t|d|uS)z;Return True if the two methods are the same implementation.r)r9)meth1meth2s r0methods_equivalentrs( 5*e , z51 r1c |s |s tdt|trt||r|St|xs+t |Dcgc]}|j dr|c}}tt |}t j}t|tr|}n(|st}t j}n t|}||j||r|St|ts<|t juxrdxsd}t|d|ddj|Gdd } |rd |jz| _ t} t|D]Z\} } | |vrtd | zt| st| d | d t| | t!| | j#| \|| |r| Stddj|| z zcc}w)aEnsure basic interface compliance for an instance or dict of callables. Checks that ``obj`` implements public methods of ``cls`` or has members listed in ``methods``. If ``required`` is not supplied, implementing at least one interface method is sufficient. Methods present on ``obj`` that are not in the interface are ignored. If ``obj`` is a dict and ``dict`` does not meet the interface requirements, the keys of the dictionary are inspected. Keys present in ``obj`` that are not in the interface will raise TypeErrors. Raises TypeError if ``obj`` does not meet the interface criteria. In all passing cases, an object with callable members is returned. In the simple case, ``obj`` is returned as-is; if dict processing kicks in then an anonymous class is returned. obj A type, instance, or dictionary of callables. cls Optional, a type. All public methods of cls are considered the interface. An ``obj`` instance of cls will always pass, ignoring ``required``.. methods Optional, a sequence of method names to consider as the interface. required Optional, a sequence of mandatory implementations. If omitted, an ``obj`` that provides at least one interface method is considered sufficient. As a convenience, required may be a type, in which case all public methods of the type are required. z2a class or collection of method names are requiredrmzany ofzall ofz does not implement z: rIceZdZdZy)(as_interface..AnonymousInterfacezA callable-holding shell.NrZr[r\r]r_r1r0AnonymousInterfacers'r1r Anonymousz%r: unknown in this interfacerz is not callablez,dictionary does not contain required keys %s)rr5r6rarur}operatorgegt intersectionrrurZdictlike_iteritemsr*r staticmethodrc) r/rfr;requiredrC interface implementedcomplies qualifierrfoundr2rs r0 as_interfacersB wLMM#tC!5 GM3s8M8a1<<;L8MNIc#h-K{{H(D! 5;;x= ((3X>  c4  +8DH Ityy3 5  (( &1CLL&@# EE*3/   ";fDE E~vtDE E"FL,>? & 0x !! 6 ))Hu$ % & S Ns G(G(_GFDzgeneric_fn_descriptor[Any]ceZdZUdZded<ded<ded<ddd Zedd Zedd Zdd Zerdd Z ddZ ddZ e ddZ y)generic_fn_descriptoragDescriptor which proxies a function when the attribute is not present in dict This superclass is organized in a particular way with "memoized" and "non-memoized" implementation classes that are hidden from type checkers, as Mypy seems to not be able to handle seeing multiple kinds of descriptor classes used for the same attribute. Callable[..., _T_co]fget Optional[str]r]r@rZNc^||_|xs |j|_|j|_yr+rr]rZrLrdocs r0rzgeneric_fn_descriptor.__init__Ds$ *dll   r1cyr+r_rLr/rfs r0__get__zgeneric_fn_descriptor.__get__Is:=r1cyr+r_rs r0rzgeneric_fn_descriptor.__get__Ls7:r1ctr+NotImplementedErrorrs r0rzgeneric_fn_descriptor.__get__O !##r1cyr+r_rLinstancerQs r0__set__zgeneric_fn_descriptor.__set__Tscr1cyr+r_)rLrs r0 __delete__z generic_fn_descriptor.__delete__VsSr1ctr+rrLr/s r0_resetzgeneric_fn_descriptor._resetXrr1ctr+rrfr/rys r0resetzgeneric_fn_descriptor.reset[s !##r1r+)rrrr)rLrr/rYrfrrXr)r/r1rfrrXr")rLrr/rrfrrXzUnion[_GFD, _T_co]rrrQrrXrYrrrXrY)r/rrXrY)r/rryr@rXrY)rZr[r\r]r3rrrrrrr classmethodrr_r1r0rr5sf  M& == ::$A8$$$r1rceZdZdZesdZyy)_non_memoized_propertyza plain descriptor that proxies a function. primary rationale is to provide a plain attribute that's compatible with memoized_property which is also recognized as equivalent by mypy. c,||S|j|Sr+rrs r0rz_non_memoized_property.__get__ks{ 99S> !r1N)rZr[r\r]rrr_r1r0rr`s  " r1rc0eZdZdZesdZdZedZy)_memoized_propertyz2A read-only @property that is only evaluated once.cb||S|j|x|j|j<}|Sr+)rr7rZrLr/rfresults r0rz_memoized_property.__get__vs0{ 3799S> ACLL '&Mr1cDtj||jyr+)rrrZrs r0rz_memoized_property._reset|s  dmm4r1c<|jj|dyr+)r7rbrs r0rz_memoized_property.resets t$r1N) rZr[r\r]rrrrrr_r1r0rrqs&<   5%%r1rc&fd}t|S)zDecorate a method memoize its return value. Best applied to no-arg methods: memoization is not sensitive to argument values, and will always return the same value even when called with different arguments. c|g|i|fd}j|_j|_||jj<S)NcSr+r_arjrs r0memoz6memoized_instancemethod..oneshot..memosMr1)rZr]r7rLrrjrrrs @r0oneshotz(memoized_instancemethod..oneshotsKD&4&2&   zz %) bkk" r1r)rrs` r0memoized_instancemethodrs  '2 &&r1cxeZdZUdZesdZeZded<d dZ d dZ d dZ Gdd e e Zedd Zy ) HasMemoizedzA mixin class that maintains the names of memoized elements in a collection for easy cache clearing, generative, etc. r_zFrozenSet[str]_memoized_keysc^|jD]}|jj|d yr+)rr7rbrLrs r0_reset_memoizationszHasMemoized._reset_memoizationss&''D MM  dD )(r1cF|jD]}||jvrJyr+)rr7rs r0_assert_no_memoizationsz#HasMemoized._assert_no_memoizationss$''Dt}}, ,,(r1cN||j|<|xj|hzc_yr+)r7r)rLrwrQs r0_set_memoized_attributez#HasMemoized._set_memoized_attributes#" c u$r1cdeZdZUdZded<ded<ded<d dd Zedd Zedd Zd Zy)HasMemoized.memoized_attributezTA read-only @property that is only evaluated once. :meta private: Callable[..., _T]rrr]r@rZNc^||_|xs |j|_|j|_yr+rrs r0rz'HasMemoized.memoized_attribute.__init__s$DI.$,,DL MMDMr1cyr+r_rs r0rz&HasMemoized.memoized_attribute.__get__s ACLL '&   4==/ 1 Mr1r+)rrrr)rLr'r/rYrfrrXr')r/rrfrrXr!)rZr[r\r]r3rrrr_r1r0memoized_attributersB    * ? ? 8 8 r1rc(dfd }t|S)zMDecorate a method memoize its return value. :meta private: c|g|i|fd}j|_j|_||jj<|xjjhzc_S)NcSr+r_rs r0rzBHasMemoized.memoized_instancemethod..oneshot..memos r1)rZr]r7rrs @r0rz4HasMemoized.memoized_instancemethod..oneshotsb*t*r*F KKDM::DL)-DMM"++ &   BKK= 0 Mr1)rLrrrrjrrXrr)rfrrs ` r0rz#HasMemoized.memoized_instancemethods gr**r1NrW)rwr@rQrrXrYrr$rXr$)rZr[r\r]rr^ frozensetrr3rrrmemoized_propertyr!rrrr_r1r0rrsT  %.[NN0*-%.r2:++r1rc"eZdZdZdZdZddZy) MemoizedSlotszApply memoized items to an object using a __getattr__ scheme. This allows the functionality of memoized_property and memoized_instancemethod to be available to a class using __slots__. r_ct|r+)r)rLrws r0_fallback_getattrzMemoizedSlots._fallback_getattrs S!!r1cjdsjdr ttjdr#t d}t ||Stjdr)t dfd}j |_|SjS)N_memoized_attr__memoized_method_c|i|fd}j|_j|_t|S)NcSr+r_rs r0rz8MemoizedSlots.__getattr__..oneshot..memo)s!Mr1)rZr]r)rrjrrrrwrLs @r0rz*MemoizedSlots.__getattr__..oneshot&s>TR"!#  !zz c4( r1)r}rrr}r9rr]r)rLrwrQrrs`` @r0 __getattr__zMemoizedSlots.__getattr__s >>+ , 1 !% %T^^se%< =:GDOC5"9: ?!23%89B !jjGON))#. .r1N)rwr@rXr)rZr[r\r]r^rrr_r1r0rr sI"/r1rct|tr6|jj}|dvry|dvryt d|zt |S)N)trueyesonyt1T)falsenooffrsf0FzString is not true/false: %r)r5r@striprq ValueErrorrr.s r0asboolr8sS#siik! 6 6 9 9;cAB B 9r1cdfd }|S)zqReturn a callable that will evaluate a string as boolean, or one of a set of "alternate" string values. c&|vr|St|Sr+)r)r/texts r0 bool_or_valuez"bool_or_str..bool_or_valueJs $;J#; r1)r/r@rXzUnion[str, bool]r_)r r s` r0 bool_or_strr Ds  r1c ||St|S)zCoerce to integer.)int)rQs r0asintrSs } u:r1c||}||vrQt|trt|||s1||+|tur|rt||||<y|||||<yyyy)zIf 'key' is present in dict 'kw', coerce its value to type 'type\_' if necessary. If 'flexi_bool' is True, the string '0' is considered false when coercing to boolean. N)r5r6rr)rjrwrP flexi_booldests r0coerce_kw_typer[ss | r E4( 2c7E0J sG  D=Zr#wDIbgDI 1K r1cJt|}|ftfd|DzS)zbProduce a tuple structure that is cacheable using the __dict__ of obj to retrieve values c3^K|]$}|jvs|j|f&ywr+r7rrkr/s r0rtz"constructor_key..{s-&+qCLL/@CLLOe--)rr)r/rfrs` r0constructor_keyrus2 3 E 6E&+ r1c|t|}|jfd|j|D||i|S)zInstantiate cls using the __dict__ of obj as constructor arguments. Uses inspect to match the named arguments of ``cls``. c3^K|]$}|jvs|j|f&ywr+rrs r0rtz#constructor_copy..s.&:a3<<>OCLLO&:r)rr? difference)r/rfrrjrs` r0constructor_copyrsE 3 EII&+&6&6r&:   r1chtjtjdfd}|S)z%Return a threadsafe counter function.rcJ5tcdddS#1swYyxYwr+)next)counterlocksr0_nextzcounter.._nexts =TTs ") threadingLockrcount)r%r#r$s @@r0r#r#s+ >> Dooa G! Lr1ct|dr8|j t|jtrtS|jSt |t rtnt}||t rt S||trtS||trtSt|drt St|drtSt|drtS|S)zGiven an instance or class, guess if it is or is acting as one of the basic collection types: list, set and dict. If the __emulates__ property is present, return that preferentially. __emulates__rrcra)rr*rprar5r6rr)specimenrYisas r0duck_type_collectionr-sx(  ,  ! !32 J(( ("8T2* C 8T Xs  Xt  x" 5 ! 5 ! r1c  t||r|St|tr>tjd|ddj d|Ddt |dtjd|d|dt |d) Nz Argument 'z ' is expected to be one of type z or c3&K|] }d|z yw)z'%s'Nr_)rrrs r0rtz"assert_arg_type..s$AAVaZsz, got ''z' is expected to be of type 'z', got ')r5rr ArgumentErrorrur6)rargtyperys r0assert_arg_typer3su#w gu %##$A$AA49N  ##$s)- r1c JtdrtjStdtddt dztdr fd}|Stdr"t fd j DSt dz) z?Return a (key, value) iterator for almost any dict-like object.rO __getitem__r8NzObject '%r' is not dict-likeiterkeysc3XKjD]}J||fywr+)r6)rwdictlikegetters r0iteratorz$dictlike_iteritems..iterators5((*)))6#;&&+s'*rvc32K|]}||fywr+r_)rrrwr9s r0rtz%dictlike_iteritems..sB/3S&+&/s)rrrOr9riterrv)r8r:r9s` @r0rrsx!HNN$%% X}ght.L MF ~6ABBx$ ' z 6 "B(--/BBB6ABBr1c:eZdZUdZded<dfd ZdddZxZS) classpropertyaAA decorator that behaves like @property except that operates on classes rather than instances. The decorator is currently special when using the declarative module, but note that the :class:`~.sqlalchemy.ext.declarative.declared_attr` decorator should be used for this purpose with declarative. Callable[[Any], Any]rcNt||g|i||j|_yr+)superrr])rLrrrjr}s r0rzclassproperty.__init__s% **r*|| r1c$|j|Sr+rrs r0rzclassproperty.__get__syy~r1)rr?rrrjrr+)r/rrfzOptional[type]rXr)rZr[r\r]r3rr __classcell__r}s@r0r>r>s $r1r>c$eZdZddZddZddZy)hybridpropertyc ||_||_yr+)r clslevelrLr s r0rzhybridproperty.__init__s  r1cN||j|}|S|j|Sr+rHr rLrownerclsvals r0rzhybridproperty.__get__*  ]]5)FM99X& &r1c||_|Sr+rHrIs r0 classlevelzhybridproperty.classlevel   r1Nr rrrrMrrXr!)r r{rXzhybridproperty[_T])rZr[r\rrrRr_r1r0rFrFs'r1rFc4eZdZddZddZd dZd dZd dZy) rw_hybridpropertyc.||_||_d|_yr+)r rHsetfnrIs r0rzrw_hybridproperty.__init__s  37 r1cN||j|}|S|j|Sr+rKrLs r0rzrw_hybridproperty.__get__rOr1cD|jJ|j||yr+rYrs r0rzrw_hybridproperty.__set__s zz%%% 8U#r1c||_|Sr+r\rIs r0setterzrw_hybridproperty.setter s  r1c||_|Sr+rQrIs r0rRzrw_hybridproperty.classlevel$rSr1NrTrUr)r r{rXzrw_hybridproperty[_T])rZr[r\rrrr^rRr_r1r0rWrWs8 '$r1rWc(eZdZdZddZddZddZy) hybridmethodz/Decorate a function as cls- or instance- level.c.|x|_|_||_yr+)r rrHrIs r0rzhybridmethod.__init__,s$(( DM r1c|&|jj||jS|jj||Sr+)rHrr}r )rLrrMs r0rzhybridmethod.__get__0s:  ==((@ @99$$Xu5 5r1c||_|Sr+rQrIs r0rRzhybridmethod.classlevel6rSr1NrT)rrrMrrXr)r r{rXzhybridmethod[_T])rZr[r\r]rrrRr_r1r0rara)s96 r1raczeZdZUdZded<iZded<ejZ d d dZ dZ d Z d Z y) symbolaIA constant symbol. >>> symbol("foo") is symbol("foo") True >>> symbol("foo") A slight refinement of the MAGICCOOKIE=object() pattern. The primary advantage of symbol() is its repr(). They are also singletons. Repeated calls of symbol('name') will all return the same instance. r@ryzDict[str, symbol]symbolsNcf|j5|jj|}|Yt|tsJ| t |}t jt|}||_ |r||_ ||j|<n|r||k7rtd|d||cdddS#1swYyxYw)Nz#Can't replace canonical symbol for z with new int value ) _lockrgr8r5r@hashr__new__rfryr]r)rfryr canonicalrs r0rkzsymbol.__new__Os YY++//$'C{!$,,,$ $T Ikk&)4"%CK %( D!c!1#=dXF..7[:-YYs BB''B0c>t|jdt|ffS)NrB)rfryrrKs r0 __reduce__zsymbol.__reduce__ms 3D 222r1ct|Sr+)rrKs r0__str__zsymbol.__str__ps Dzr1c"d|jdS)Nzsymbol(rJ)ryrKs r0__repr__zsymbol.__repr__ss Q''r1)NN)ryr@rrrl Optional[int]rXrf) rZr[r\r]r3rgr&r'rirkrnrprrr_r1r0rfrf;si  I!#G # INN E "#' !   <3(r1rfc0eZdZ ddZddZy) _IntFlagMetac gx|_}|jD]u\}}tjd|rt |t rt ||}n|jds tdXt||||j|wtj|Dcic]}|j|c}|_ycc}w)Nz^__.*__$)rlrmz#Expected integer values for IntFlag)_itemsrOrvmatchr5rrfr}rrrr immutabledictry __members__) rf classnamerdict_rjrOrvrs r0rz_IntFlagMeta.__init__xs  UKKMDAqxx Q'!S!Q!,\\#& EFF CC LL "'44&+ ,esSXXs]e ,  ,s%Cctd)Nziter not implemented to ensure compatibility with Python 3.11 IntFlag. Please use __members__. See https://github.com/python/cpython/issues/99304rrKs r0__iter__z_IntFlagMeta.__iter__s! =  r1N) r{r@rzTuple[Type[Any], ...]r|Dict[str, Any]rjrrXrY)rXzIterator[symbol])rZr[r\rrr_r1r0ruruws<  %       2 r1ruceZdZdZy) _FastIntFlagzAn 'IntFlag' copycat that isn't slow when performing bitwise operations. the ``FastIntFlag`` class will return ``enum.IntFlag`` under TYPE_CHECKING and ``_FastIntFlag`` otherwise. Nrr_r1r0rrsr1r) metaclass)IntFlag_Ec|jD]*\}}||ur|cS|r||jk(r|cS||vs(|cS|ytjd|d|)aOGiven a user parameter, parse the parameter into a chosen value from a list of choice objects, typically Enum values. The user argument can be a string name that matches the name of a symbol, or the symbol object itself, or any number of alternate choices such as True/False/ None etc. :param arg: the user argument. :param choices: dictionary of enum values to lists of possible entries for each. :param name: name of the argument. Used in an :class:`.ArgumentError` that is raised if the parameter doesn't match any available argument. NzInvalid value for 'z': )rOryr r1)rchoicesryresolve_symbol_names enum_valuechoices r0parse_user_argument_for_enumrsq(&mmo F *   !cZ__&<  F]  . {  1$s3'B CCr1c,t|_tdz ay)zAssign a '_creation_order' sequence to the given instance. This allows multiple instances to be sorted in order of creation (typically within a single thread; the counter is not particularly threadsafe). rN)_creation_order)rs r0set_creation_orderrs /HqOr1cx ||i|S#t$r&tdtjddzYywxYw)zXexecutes the given function, catches all exceptions and converts to a warning. z%s('%s') ignoredrrN)rkwarnrIrJ)r rr@s r0warn_exceptionrsA 7T$V$$ 7 #,,.1"5 567s  ,99cV t||kDrd|d|zS|S#t$r|cYSwxYw)Nz%s...r)r,r)rQlen_s r0ellipses_stringrs= u: U1T]* *L  s ((cPeZdZUdZded< dfd ZddZd dZxZS) _hash_limit_stringa/A string subclass that can only be hashed on a maximum amount of unique values. This is used for warnings so that we can send out parameterized warnings without the __warningregistry__ of the module, or the non-overridable "once" registry within warnings.py, overloading memory, r_hashc||zd|zz}t|||}td|t||zfz|_|S)Nz6 (this warning may be suppressed after %d occurrences)z%s_%d)rArkrjr)rfrQnumr interpolatedrLr}s r0rkz_hash_limit_string.__new__sR Ds J wsL1'UD,>,D$EEF  r1c|jSr+)rrKs r0__hash__z_hash_limit_string.__hash__ s zzr1c0t|t|k(Sr+)rj)rLothers r0__eq__z_hash_limit_string.__eq__sDzT%[((r1)rQr@rrr Sequence[Any]rXr)rXr)rrrXr) rZr[r\r]r3rkrrrCrDs@r0rrs> J!)6 )r1rc~|r!ttj||yt|tjy)zdIssue a warning. If msg is a string, :class:`.exc.SAWarning` is used as the category. )rN)_warnings_warnr SAWarning)msgrs r0rrs( s}}St45sCMM*r1cV|r t|d|}t|tjy)z\Issue a warning with a parameterized string, limiting the number of registrations. N)rrr r)rrs r0 warn_limitedr s#   b$/3 &r1z)Dict[CodeType, Tuple[str, Type[Warning]]] _warning_tagscfd}|S)Nc2ft|j<|Sr+)rr)rcategorymessages r0goz#tag_method_for_warnings..go0s&-x%8 bkk" r1r_)rrrs`` r0tag_method_for_warningsr-s Ir1z&^(?:sqlalchemy\.(?!testing)|alembic\.)c tj|}dx}}||s6tjt|j j ddsd}|jtvr&d}t|j\}}|xs|}|d|d}|j}|s|dz }n|r|rn| |tj|||dz ytj||dz y#t$rd}YFd}YKxYw) NFrZrTz (rJrr) stacklevel) rI _getframervrx_not_sa_pattern f_globalsr8f_coderf_backrwarningsr)rrrframestacklevel_foundwarning_tag_found_suffix _categorys r0rr:s % j)054,$BHH!4!4Z!D- $( ||},$(!'4U\\'B$)#0y$IRy2LLE#a !&736 gxJNC g*q.9Q   sC## C50C5c"gdfd }|S)zNDecorate the given function to be a no-op after it is called exactly once.ct}rj} ||i|Sy#rjd|xYw)Nr)rbinsert)rrj strong_fnonce_fnronceretry_on_exceptions r0rzonly_once..gousM hhjG *r**   %KK7+s 7)rrrjrrXz Optional[_T]r_)rrrrs`` @r0 only_oncerms 4D  Ir1z%sqlalchemy/([a-z_]+/){0,2}[a-z_]+\.pyzunit(?:2|test2?/)cd}t|dz }||kr3|j||r|dz }||kr|j||r||kr3|j||r|dz}||kr|j||r|||dzS)atChop extraneous lines off beginning and end of a traceback. :param tb: a list of traceback lines as returned by ``traceback.format_stack()`` :param exclude_prefix: a regular expression object matching lines to skip at beginning of ``tb`` :param exclude_suffix: a regular expression object matching lines to skip at end of ``tb`` rr)r,search)tbexclude_prefixexclude_suffixrends r0chop_tracebackrs" E b'A+C 3,>00E;   3,>00E; 3,>00C9 q 3,>00C9 ecAg r1c^d|z}tj}t|||dS)Nz&def set(obj, value): obj.%s = valuera)rcopyr)attrnamerrs r0 attrsetterrs, 3h >D (--/CsO u:r1z^__.+__$c(eZdZdZdZdfd ZxZS) TypingOnlyzA mixin class that marks a class as 'typing only', meaning it has absolutely no methods, attributes, or runtime functionality whatsoever. r_ct|jvrC|jDchc]}tj |r|}}|rt d|d|dt |ycc}w)NzClass z< directly inherits TypingOnly but has additional attributes r)rrr7_dundersrxAssertionErrorrA__init_subclass__)rfry remainingr}s r0rzTypingOnly.__init_subclass__sv  &!$!-X^^D5I $SE"--6Kq: !#s A&A&rW)rZr[r\r]r^rrCrDs@r0rrs I $ $r1rcDeZdZUdZded< dfd ZeddZxZS) EnsureKWArga6Apply translation of functions to accept \**kw arguments if they don't already. Used to ensure cross-compatibility with third party legacy code, for things like compiler visit methods that need to accept ``**kw`` arguments, but may have been copied from old code that didn't accept them. r@ ensure_kwargc |j}|j}|re|D]`}tj||}|s||}t j |}|j rC|j|}t|||bt|)yr+) rr7rvrxrrr _wrap_w_kwrrAr) rffn_regclsdictrwrCrrwrappedr}s r0rzEnsureKWArg.__init_subclass__s~!!,, HHVS) B!88.wraps s8Or1)rrrjrrXrr)rfrrs ` r0rzEnsureKWArg._wrap_w_kws dB''r1rW)rr{rXr{) rZr[r\r]r3rrrrCrDs@r0rrs. $((r1rcvt|dr t||S|}|jj|_t|dr|j|_t|j dr3|j j r|j j |_|S|j r|j |_|S)zAugment functools.update_wrapper() to work with objects with a ``__call__()`` method. :param fn: object with __call__ method rZr[r])rrr}rZr[rr])wrapperr_fs r0 wrap_callablersr:gr** ll++ 2| $MMBM 2;; *r{{/B/B,,BJ ZZBJ r1cd|vr|jdSd}gg}d}t|}||kr}||}|dk(r8|dk(r-||dz kr%||dzdk(r|djd|dz }n6|dz}n0|dk(r|dk(r|jgn|dj||dz }||kr}|Dcgc]}dj|c}Scc}w)aParse a dotted identifier with accommodation for quoted names. Includes support for SQL-style double quotes as a literal character. E.g.:: >>> quoted_token_parser("name") ["name"] >>> quoted_token_parser("schema.name") ["schema", "name"] >>> quoted_token_parser('"Schema"."Name"') ['Schema', 'Name'] >>> quoted_token_parser('"Schema"."Name""Foo"') ['Schema', 'Name""Foo'] "rrrr)r)rr,rru)rQreridxlvcharrs r0quoted_token_parserrs$ %{{3 E!dF C UB (Sz 3;zcBFluS1W~/Dr !!#&q  S[UaZ MM"  2J  d # q ()/ /uBGGEN // /s.C c@tjfd}|S)Nc|jduxr |jxsd}|rt|Dcic]}|c}}||_|Scc}w)Nr)r]inject_param_text)rrparamparamsr s r0rz$add_parameter_text..decorate7sSjj$39r #C6)J6%%+6)JKC  *Ks A )rrK)rr rs`` r0add_parameter_textr4s  ! !& )F Or1c|jdd}t|dk(r|S|\}}|jds|dztj|zStj|S)N rro)rr,r}textwrapdedent)r  split_text firstliners r0_dedent_docstringrAscD!$J :! ) 9    $4(//)"<<<t$$r1ct|xsd}|jd}t|dk(r|jdt j |jd}|dr|j ddt|Dcgc]\}}|jr|}}}|j dd|t|t|dz } |d| |z|| dz}dj|Scc}}w)Nrrrr) rrr,rrrrrMrminru) given_doctext injecttextposdoctextlines injectlinesrlineblanks inject_poss r0inject_docstring_textrMs%]%8b9G MM$ E 5zQ R//*-33D9K1~1b!#,U#3 H#3ic44::%(3rxx{+;%;F &u)= =I  LL$ 40 1I LL$ 40 1I ]]4  LL$ 0 0 23 4  T? B 99U r1ct|dk(ryt|dk}|r|ddn |dd|ddz}|Dcgc]}t|dkDrd|ddzn|}}|rdj|Sdj|ddd |dScc}w) zTrims a list of strings from the middle and return a string of up to four elements. Strings greater than 11 characters will be truncatedrNrrr) z%s..rIz, ..., )r,ru)rflagryress r0repr_tuple_namesrs 5zQ u:?DE!AJE!AJrs$;EFK LedTR6D"I T 9eC L yy~ $ #a( 3SW== MsBc,try|r tdy)NTzDcython extensions were expected to be installed, but are not presentF)r ImportError)raise_s r0has_compiled_extrs"  "  r1c.eZdZejZy)_MissingN)rZr[r\enumautoMissingr_r1r0rrsdiikGr1r)r/rrXr4)rBrrXr@)rfType[_T]rXzIterator[Type[_T]])rlrrXr@r+)rf Type[Any]rxrrXr@)r~zUnion[Type[Any], object]rr{rXr)rslicerXTuple[Any, ...])r Sequence[str]rr@rXz Iterator[str])rzCallable[[int], Any]rsrrXz Iterator[Any])rr{rXzCallable[[_Fn], _Fn])rzUnion[str, types.CodeType]rrrr@rXr{)rfr6rOptional[Set[str]]rz Literal[True]rXzSet[str])rfr6rr%rrrXr%)r r{rX List[str])FF)rr{rrrrrXzcompat.FullArgSpec)T)rz-Union[Callable[..., Any], compat.FullArgSpec]rrrXzDict[str, Optional[str]])r_r_r_r_)r7r!r8r@r9r@r:r$r;r$r<r$r=r$rXzCallable[[_T], _T])r_Nr_) r/rrPzSequence[Tuple[str, Any]]rQz%Optional[Union[object, List[object]]]rRr$rXr@)NNz self.proxyN)NNNr)r/rrXr)r r@rXz!Callable[[str], Union[str, bool]])rQrrXrs)TN) rjrrwr@rPr!rrrzOptional[Dict[str, Any]]rXrY)r/rrfr!rXr#) r/r!rfr rrrjrrXr!)rXzCallable[[], int])r+rrYOptional[Type[Any]]rXr')rrr2z'Union[Tuple[Type[Any], ...], Type[Any]]ryr@rXr)F) rrrzDict[_E, List[Any]]ryr@rrrXz Optional[_E]r)r r{rrr@rrXr))rr@rrrXrY)rr@rrrXrY)rr@rz Type[Warning]rXCallable[[_F], _F])Nr)rzUnion[str, Warning]rzOptional[Type[Warning]]rrrXrY)rrrrrXzCallable[..., Optional[_T]])rr&rre.Pattern[str]rr*rXr&)rrr r@rXr))r r@rXr@)rrrr@rrrXr@)rr@r zDict[str, str]rXr@)rr&rXr)r] __future__rrr functoolsrr,rrrvrIrr&rrtypingrrr r r r r rrrrrrrrrrrrrrrr_has_cyrrr r!r"r$r&r'r(r)py310r-rDrFrirmrzrrrrrrrrrrrrrr rrr4r>rArEr]r_rsrxrrrrrrrrnon_memoized_propertypropertyro_memoized_propertyro_non_memoized_propertyrr!HasMemoized_ro_memoized_attributerrrr rrrrr#r-r3rr>rFrWrarrfr6rurr FastIntFlagEnumrrrrrrr@rrrrr3rcompilerrr_SQLA_RE _UNITTEST_RErNoneTyperrrrrrrrrr rrrrr MissingOrr_r1r0r<s# $   $ T]4( T#s(+, e34 e@A e01 e./ <<, 2"$8282v 6/3O O+OO,-,&, ,$  M e/0 D,N* $+9DGen en% % P (  $!        -1E *=A  .2E2 2*2=A22j2EJ5;5;%)5;=A5;5;rHLr 5r @Dr r jJ#% "/1      -26( 028< " KB KB,KB6KB KB  KB\;;<#L &   @/FSlv9:($GEN($V"259""%.u5%<.1 $'0BA,7MM4'.J+J+Z(0%(3(F(F%*/*/\  %) '' ' ' ' # '  '4  37  /  F >FI$C0H*WR[" 472;$9(S9(x 4 D\KK T#"' D D D D D  DD 7))< +'<> 8= )"**FG )-0: 0:%0:0: 0:f/3 4 2::> ?rzz./ '3&.#$ 4 : 2::j !$$*&(&(R0)0X  % .18;(RZZ- . (V > tyy    "gh..// 0 r1