a0bi& SrSSKrSSKrSSKrSSKJrJrJrJrJ r J r J r J r J r SSKJr SSKJr \ \\4r\ "S\S9r\\\/\4rS \S \4S jr"S S \5r"SS\R4S9r"SS\5r\R:"S5rS \S \\4SjrS\S \4Sjr S\\S\\S \ \\\\44Sjr!"SS\5r"g)z .. testsetup:: from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier from packaging.version import Version N) CallableIterableIteratorListOptionalSetTupleTypeVarUnion)canonicalize_version)VersionUnparsedVersionVar)boundversionreturncF[U[5(d [U5nU$N) isinstancer)rs ڠ/builddir/build/BUILDROOT/alt-python313-setuptools-69.0.2-3.el8.x86_64/opt/alt/python313/lib/python3.13/site-packages/setuptools/_vendor/packaging/specifiers.py_coerce_versionr"s gw ' ''" Nc\rSrSrSrSrg)InvalidSpecifier(z Raised when attempting to create a :class:`Specifier` with a specifier string that is invalid. >>> Specifier("lolwat") Traceback (most recent call last): ... packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat' N)__name__ __module__ __qualname____firstlineno____doc____static_attributes__rrrrr(srrc \rSrSr\R S\4Sj5r\R S\4Sj5r \R S\ S\ 4Sj5r \ \R S\\ 4Sj55r\R S\ SS 4S j5r\R SS \S \\ S\ 4S jj5r\R SS\\S \\ S\\4Sjj5rSrg ) BaseSpecifier4rcg)zv Returns the str representation of this Specifier-like object. This should be representative of the Specifier itself. Nrselfs r__str__BaseSpecifier.__str__5rcg)z6 Returns a hash value for this Specifier-like object. Nrr's r__hash__BaseSpecifier.__hash__<r+rothercg)z Returns a boolean representing whether or not the two Specifier-like objects are equal. :param other: The other object to check against. Nrr(r/s r__eq__BaseSpecifier.__eq__Br+rcg)zWhether or not pre-releases as a whole are allowed. This can be set to either ``True`` or ``False`` to explicitly enable or disable prereleases or it can be set to ``None`` (the default) to use default semantics. Nrr's r prereleasesBaseSpecifier.prereleasesKr+rvalueNcg)zASetter for :attr:`prereleases`. :param value: The value to set. Nrr(r7s rr5r6Tr+ritemr5cg)zB Determines if the given item is contained within this specifier. Nr)r(r:r5s rcontainsBaseSpecifier.contains[r+riterablecg)z} Takes an iterable of items and filters them so that only items which are contained within this specifier are allowed in it. Nr)r(r>r5s rfilterBaseSpecifier.filterar+rrr)rrrr abcabstractmethodstrr)intr-objectboolr2propertyrr5setterr<rrrr@r"rrrr$r$4s7     #    F t   Xd^    $    S x~    TX  !34 CKD> $ %  rr$) metaclassc \rSrSrSrSrSr\R"S\-\-S-\R\R-5r SSS S S S S SS.r S2S\ S\\SS4Sjjr\S\4Sj5r\R&S\SS4Sj5r\S\ 4Sj5r\S\ 4Sj5rS\ 4SjrS\ 4Sjr\S\\ \ 44Sj5rS\4SjrS\S\4SjrS \ S\4S!jrS"\ S\ S\4S#jr!S"\ S\ S\4S$jr"S"\ S\ S\4S%jr#S"\ S\ S\4S&jr$S"\ S\ S\4S'jr%S"\ S(\ S\4S)jr&S"\ S(\ S\4S*jr'S"\ S\ S\4S+jr(S,\)\ \ 4S\4S-jr*S3S,\+S\\S\4S.jjr,S3S/\-\.S\\S\/\.4S0jjr0S1r1g)4 Specifierka+This class abstracts handling of version specifiers. .. tip:: It is generally not required to instantiate this manually. You should instead prefer to work with :class:`SpecifierSet` instead, which can parse comma-separated version specifiers (which is what package metadata contains). z8 (?P(~=|==|!=|<=|>=|<|>|===)) a (?P (?: # The identity operators allow for an escape hatch that will # do an exact string match of the version you wish to install. # This will not be parsed by PEP 440 and we cannot determine # any semantic meaning from it. This operator is discouraged # but included entirely as an escape hatch. (?<====) # Only match for the identity operator \s* [^\s;)]* # The arbitrary version can be just about anything, # we match everything except for whitespace, a # semi-colon for marker support, and a closing paren # since versions can be enclosed in them. ) | (?: # The (non)equality operators allow for wild card and local # versions to be specified so we have to define these two # operators separately to enable that. (?<===|!=) # Only match for equals and not equals \s* v? (?:[0-9]+!)? # epoch [0-9]+(?:\.[0-9]+)* # release # You cannot use a wild card and a pre-release, post-release, a dev or # local version together so group them with a | and make them optional. (?: \.\* # Wild card syntax of .* | (?: # pre release [-_\.]? (alpha|beta|preview|pre|a|b|c|rc) [-_\.]? [0-9]* )? (?: # post release (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) )? (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local )? ) | (?: # The compatible operator requires at least two digits in the # release segment. (?<=~=) # Only match for the compatible operator \s* v? (?:[0-9]+!)? # epoch [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *) (?: # pre release [-_\.]? (alpha|beta|preview|pre|a|b|c|rc) [-_\.]? [0-9]* )? (?: # post release (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) )? (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release ) | (?: # All other operators only allow a sub set of what the # (non)equality operators do. Specifically they do not allow # local versions to be specified nor do they allow the prefix # matching wild cards. (?=<>===Nspecr5rcURRU5nU(d[SUS35eURS5R 5URS5R 54UlX lg)aInitialize a Specifier instance. :param spec: The string representation of a specifier which will be parsed and normalized before use. :param prereleases: This tells the specifier if it should accept prerelease versions if applicable or not. The default of ``None`` will autodetect it from the given specifiers. :raises InvalidSpecifier: If the given specifier is invalid (i.e. bad syntax). zInvalid specifier: ''operatorrN)_regexsearchrgroupstrip_spec _prereleases)r(r]r5matchs r__init__Specifier.__init__sm ""4("%9$q#AB B KK # ) ) + KK " ( ( *'  (rcURb UR$URupUS;a<US:XaURS5(aUSSn[U5R(agg)N)rWrYrXrVr\rW.*TF)rfreendswithr is_prerelease)r(r`rs rr5Specifier.prereleasessn    ($$ $ !JJ 6 64G$4$4T$:$:!#2,w--rr7cXlgrrfr9s rr5ro!rc URS$)zHThe operator of this specifier. >>> Specifier("==1.2.3").operator '==' rrer's rr`Specifier.operatorzz!}rc URS$)zIThe version of this specifier. >>> Specifier("==1.2.3").version '1.2.3' r rtr's rrSpecifier.version%rvrcURbSUR<3OSnSURRS[ U5<US3$)aA representation of the Specifier that shows all internal state. >>> Specifier('>=1.0.0') =1.0.0')> >>> Specifier('>=1.0.0', prereleases=False) =1.0.0', prereleases=False)> >>> Specifier('>=1.0.0', prereleases=True) =1.0.0', prereleases=True)> , prereleases=rZ()>)rfr5 __class__rrDr(pres r__repr__Specifier.__repr__.sU  ,T--0 1 4>>**+1SYM#bAArc4SR"UR6$)zA string representation of the Specifier that can be round-tripped. >>> str(Specifier('>=1.0.0')) '>=1.0.0' >>> str(Specifier('>=1.0.0', prereleases=False)) '>=1.0.0' z{}{})formatrer's rr)Specifier.__str__@s}}djj))rcr[URSURSS:gS9nURSU4$)Nr rrVstrip_trailing_zero)r re)r(canonical_versions r_canonical_specSpecifier._canonical_specJs>0 JJqM!%A$!6 zz!}///rc,[UR5$r)hashrr's rr-Specifier.__hash__RsD(())rr/c[U[5(aUR[U55nO [XR5(d[$UR UR :H$![a [s$f=f)aWhether or not the two Specifier-like objects are equal. :param other: The other object to check against. The value of :attr:`prereleases` is ignored. >>> Specifier("==1.2.3") == Specifier("== 1.2.3.0") True >>> (Specifier("==1.2.3", prereleases=False) == ... Specifier("==1.2.3", prereleases=True)) True >>> Specifier("==1.2.3") == "==1.2.3" True >>> Specifier("==1.2.3") == Specifier("==1.2.4") False >>> Specifier("==1.2.3") == Specifier("~=1.2.3") False )rrDr~rNotImplementedrr1s rr2Specifier.__eq__Usm& eS ! ! &s5z2E>>22! !##u'<'<<< $ &%% &sA++A>=A>opc>[USURU35nU$)N _compare_)getattr _operators)r(roperator_callables r _get_operatorSpecifier._get_operatorrs+.5 Idoob123/ ! r prospectivec SR[[R"[[ U555SS5nUS- nUR S5"X5=(a UR S5"X5$)N.rkrYrW)joinlist itertools takewhile_is_not_suffix_version_splitr)r(rr]prefixs r_compare_compatibleSpecifier._compare_compatiblexsr $$^^D5IJ KCR P  $!!$' : t?Q?QRV?W @  rcDURS5(aV[URSS9n[USSSS9n[U5n[U5n[ Xe5upxUS[ U5n X:H$[ U5n U R(d[ UR5nX:H$)NrkFrrl)rmr publicr _pad_versionlenrlocal) r(rr]normalized_prospectivenormalized_spec split_specsplit_prospectivepadded_prospective_shortened_prospective spec_versions r_compare_equalSpecifier._compare_equals ==  %9""& "349RWXO(8J !//E F %11B$O !  %77HZ$I !(6 6#4=L  %%%k&8&89 . .rc.URX5(+$r)rr(rr]s r_compare_not_equalSpecifier._compare_not_equals&&{999rcD[UR5[U5:*$rrrrs r_compare_less_than_equal"Specifier._compare_less_than_equal {))*gdm;;rcD[UR5[U5:$rrrs r_compare_greater_than_equal%Specifier._compare_greater_than_equalrrspec_strc[U5nX:dgUR(d>UR(a-[UR5[UR5:XaggNFT)rrn base_versionr(rrr]s r_compare_less_thanSpecifier._compare_less_thansRx  ! !!k&?&?{//0GDUR(a-[UR5[UR5:XagURb-[UR5[UR5:Xaggr)ris_postreleaserrrs r_compare_greater_thanSpecifier._compare_greater_thansx  ! ""{'A'A{//0GD>> "1.2.3" in Specifier(">=1.2.3") True >>> Version("1.2.3") in Specifier(">=1.2.3") True >>> "1.0.0" in Specifier(">=1.2.3") False >>> "1.3.0a1" in Specifier(">=1.2.3") False >>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True) True r<r(r:s r __contains__Specifier.__contains__&}}T""rcUc URn[U5nUR(aU(dgURUR5nU"X0R 5$)aReturn whether or not the item is contained in this specifier. :param item: The item to check for, which can be a version string or a :class:`Version` instance. :param prereleases: Whether or not to match prereleases with this Specifier. If set to ``None`` (the default), it uses :attr:`prereleases` to determine whether or not prereleases are allowed. >>> Specifier(">=1.2.3").contains("1.2.3") True >>> Specifier(">=1.2.3").contains(Version("1.2.3")) True >>> Specifier(">=1.2.3").contains("1.0.0") False >>> Specifier(">=1.2.3").contains("1.3.0a1") False >>> Specifier(">=1.2.3", prereleases=True).contains("1.3.0a1") True >>> Specifier(">=1.2.3").contains("1.3.0a1", prereleases=True) True F)r5rrnrr`r)r(r:r5normalized_itemrs rr<Specifier.containssW8  **K*$/  ( (/3.@.@.O ,,??rr>c#@# Sn/nSUbUOS0nUHjn[U5nUR"U40UD6(dM(UR(a+U(d$UR(dUR U5 MdSnUv Ml U(dU(aUHnUv M ggg7f)aFilter items in the given iterable, that match the specifier. :param iterable: An iterable that can contain version strings and :class:`Version` instances. The items in the iterable will be filtered according to the specifier. :param prereleases: Whether or not to allow prereleases in the returned iterator. If set to ``None`` (the default), it will be intelligently decide whether to allow prereleases or not (based on the :attr:`prereleases` attribute, and whether the only versions matching are prereleases). This method is smarter than just ``filter(Specifier().contains, [...])`` because it implements the rule from :pep:`440` that a prerelease item SHOULD be accepted if no other versions match the given specifier. >>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"])) ['1.3'] >>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")])) ['1.2.3', '1.3', ] >>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"])) ['1.5a1'] >>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True)) ['1.3', '1.5a1'] >>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"])) ['1.3', '1.5a1'] Fr5NT)rr<rnr5append)r(r>r5yieldedfound_prereleaseskwrparsed_versions rr@Specifier.filterEs<K,C[ N G,W5N}}^2r22"//4#3#3%,,W5#G!M (,, --ws 4BA$B)rfrer{Nr)2rrrr r!_operator_regex_str_version_regex_strrecompileVERBOSE IGNORECASErarrDrrGrhrHr5rIr`rrr)r rrEr-rFr2CallableOperatorrrrrrrrrrrr rUnparsedVersionr<rrrr@r"rrrrLrLks \ |ZZ%%(::WD R]]"F "   J(S(HTN(d(4T.""$""#B#B$**0sCx00*#*=F=t=:!!(8!  w c d *'/''/'/'/R:g:S:T:=g=S=T=#sG|!4##,DH,@#,@2:4.,@ ,@^UY; !34;CKD>; $ %;;rrLz^([0-9]+)((?:a|b|c|rc)[0-9]+)$c/nURS5HQn[RU5nU(a!URUR 55 M@UR U5 MS U$)Nr)split _prefix_regexrbextendgroupsr)rresultr:rgs rrrsRF c"$$T*  MM%,,. ) MM$  # Mrsegmentc8^[U4SjS55(+$)Nc3F># UHnTRU5v M g7fr) startswith).0rrs r !_is_not_suffix..s#1Pv6""1Ps!)devabrcpost)any)rs`rrrs"1P rleftrightc //p2UR[[R"SU555 UR[[R"SU555 URU[ US5S5 URU[ US5S5 UR SS/[ S[ US5[ US5- 5-5 UR SS/[ S[ US5[ US5- 5-5 [[R"U65[[R"U654$)Nc"UR5$risdigitxs r_pad_version..s rc"UR5$rrrs rrrs !))+rrr 0)rrrrrinsertmaxchain)rr left_split right_splits rrrs  " d9../DdKLMtI//0EuMNOd3z!}-/01uSQ0234a#QKN(;c*Q->P(P!QQRq3%#aZ]);c+a.>Q)Q"RRS *- .Y__k5R0S TTrc p\rSrSrSrSS\S\\SS4Sjjr\ S\\4Sj5r \ RS \SS4S j5r S\4S jr S\4S jr S\4S jrS\S\4SS4SjrS\S\4SjrS\4SjrS\\4SjrS\S\4SjrSS\S\\S\\S\4SjjrSS\\S\\S\\4SjjrSrg) SpecifierSetizThis class abstracts handling of a set of version specifiers. It can be passed a single specifier (``>=3.0``), a comma-separated list of specifiers (``>=3.0,!=3.1``), or no specifier at all. N specifiersr5rcURS5Vs/sH)o3R5(dMUR5PM+ nn[5nUHnUR[ U55 M [ U5UlX lgs snf)aInitialize a SpecifierSet instance. :param specifiers: The string representation of a specifier or a comma-separated list of specifiers which will be parsed and normalized before use. :param prereleases: This tells the SpecifierSet if it should accept prerelease versions if applicable or not. The default of ``None`` will autodetect it from the given specifiers. :raises InvalidSpecifier: If the given ``specifiers`` are not parseable than this exception will be raised. ,N)rrdsetaddrL frozenset_specsrf)r(rr5ssplit_specifiersparsed specifiers rrhSpecifierSet.__init__st(0:/?/?/DR/D! IAGGI/DR"%)I JJy+ ,* ' (Ss B B cURb UR$UR(dg[SUR55$)Nc38# UHoRv M g7frr5rrs rr+SpecifierSet.prereleases..s6+Q==+)rfrrr's rr5SpecifierSet.prereleasess?    ($$ $ {{6$++666rr7cXlgrrqr9s rr5r"rrrcdURbSUR<3OSnS[U5<US3$)aA representation of the specifier set that shows all internal state. Note that the ordering of the individual specifiers within the set may not match the input string. >>> SpecifierSet('>=1.0.0,!=2.0.0') =1.0.0')> >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False) =1.0.0', prereleases=False)> >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True) =1.0.0', prereleases=True)> rzr{z>> str(SpecifierSet(">=1.0.0,!=1.0.1")) '!=1.0.1,>=1.0.0' >>> str(SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False)) '!=1.0.1,>=1.0.0' rc38# UHn[U5v M g7fr)rDrs rr'SpecifierSet.__str__..s;{!s1vv{r!)rsortedrr's rr)SpecifierSet.__str__s"xx;t{{;;<>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1' =1.0.0')> >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1') =1.0.0')> zFCannot combine SpecifierSets with True and False prerelease overrides.)rrDrrrrrf ValueError)r(r/rs r__and__SpecifierSet.__and__ s eS ! ! 'EE<00! ! N $T[[5<<%?@     $););)G%*%7%7I "   *u/A/A/I%)%6%6I "  %"4"4 4%)%6%6I "  rc[U[[45(a[[U55nO[U[5(d[$UR UR :H$)a1Whether or not the two SpecifierSet-like objects are equal. :param other: The other object to check against. The value of :attr:`prereleases` is ignored. >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1") True >>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) == ... SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True)) True >>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1" True >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0") False >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2") False )rrDrLrrrr1s rr2SpecifierSet.__eq__-sJ& ec9- . . U,EE<00! !{{ell**rc,[UR5$)z7Returns the number of specifiers in this specifier set.)rrr's r__len__SpecifierSet.__len__Gs4;;rc,[UR5$)z Returns an iterator over all the underlying :class:`Specifier` instances in this specifier set. >>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str) [, =1.0.0')>] )iterrr's r__iter__SpecifierSet.__iter__KsDKK  rr:c$URU5$)aReturn whether or not the item is contained in this specifier. :param item: The item to check for. This is used for the ``in`` operator and behaves the same as :meth:`contains` with no ``prereleases`` argument passed. >>> "1.2.3" in SpecifierSet(">=1.0.0,!=1.0.1") True >>> Version("1.2.3") in SpecifierSet(">=1.0.0,!=1.0.1") True >>> "1.0.1" in SpecifierSet(">=1.0.0,!=1.0.1") False >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1") False >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True) True rrs rrSpecifierSet.__contains__Urr installedc0^^[T[5(d [T5mTc URmT(dTR(agU(a&TR(a[TR5m[ UU4SjUR 55$)aReturn whether or not the item is contained in this SpecifierSet. :param item: The item to check for, which can be a version string or a :class:`Version` instance. :param prereleases: Whether or not to match prereleases with this SpecifierSet. If set to ``None`` (the default), it uses :attr:`prereleases` to determine whether or not prereleases are allowed. >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.2.3") True >>> SpecifierSet(">=1.0.0,!=1.0.1").contains(Version("1.2.3")) True >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.0.1") False >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1") False >>> SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True).contains("1.3.0a1") True >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1", prereleases=True) True Fc3B># UHoRTTS9v M g7f)rNr)rrr:r5s rr(SpecifierSet.contains..sRk::d :cUc URnUR(a7URHnURU[U5S9nM [ U5$/n/nUHSn[ U5nUR (a#U(dU(dURU5 M@MBURU5 MU U(dU(aUc [ U5$[ U5$)a.Filter items in the given iterable, that match the specifiers in this set. :param iterable: An iterable that can contain version strings and :class:`Version` instances. The items in the iterable will be filtered according to the specifier. :param prereleases: Whether or not to allow prereleases in the returned iterator. If set to ``None`` (the default), it will be intelligently decide whether to allow prereleases or not (based on the :attr:`prereleases` attribute, and whether the only versions matching are prereleases). This method is smarter than just ``filter(SpecifierSet(...).contains, [...])`` because it implements the rule from :pep:`440` that a prerelease item SHOULD be accepted if no other versions match the given specifier. >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", "1.5a1"])) ['1.3'] >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", Version("1.4")])) ['1.3', ] >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.5a1"])) [] >>> list(SpecifierSet(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True)) ['1.3', '1.5a1'] >>> list(SpecifierSet(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"])) ['1.3', '1.5a1'] An "empty" SpecifierSet will filter items based on the presence of prerelease versions in the set. >>> list(SpecifierSet("").filter(["1.3", "1.5a1"])) ['1.3'] >>> list(SpecifierSet("").filter(["1.5a1"])) ['1.5a1'] >>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"])) ['1.3', '1.5a1'] >>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True)) ['1.3', '1.5a1'] r)r5rr@rGr7rrnr)r(r>r5r]filteredrr:rs rr@SpecifierSet.filtersX  **K ;; ;;xT+=N;O$> ! 24H:<  !0!6"// #)006$OOD)! 1k6I-..> !r)rfrr)NNr)rrrr r!rDrrGrhrHr5rIrr)rEr-r r/rFr2r4rrLr8rrr<rrr@r"rrrrrs{CG!(!(19$!( !(F7Xd^77 ""$""5#5* = =!#!U>3#67N@+F+t+4  !(9-!##T#0'+$( 7S7Sd^7SD> 7S  7StUYM" !34M"CKD>M" $ %M"M"rr)#r!rBrrtypingrrrrrrr r r utilsr rrrDrrrGrrr.rABCMetar$rLrrrrrrrrrrHs     ( %1IWcND01_ z 4 ckk4 nU Up <= CDICD UtCyUcUuT#YS =Q7RU$G"=G"r