/usr/lib/rads/venv/lib/python3.13/site-packages/packaging/__pycache__
NameSizeModeActions
markers.cpython-313.pyc130730644editdlrm
metadata.cpython-313.pyc273420644editdlrm
requirements.cpython-313.pyc46070644editdlrm
specifiers.cpython-313.pyc376150644editdlrm
tags.cpython-313.pyc249470644editdlrm
utils.cpython-313.pyc67310644editdlrm
version.cpython-313.pyc199440644editdlrm
_elffile.cpython-313.pyc51900644editdlrm
_manylinux.cpython-313.pyc99770644editdlrm
_musllinux.cpython-313.pyc45960644editdlrm
_parser.cpython-313.pyc141600644editdlrm
_structures.cpython-313.pyc33260644editdlrm
_tokenizer.cpython-313.pyc80830644editdlrm
__init__.cpython-313.pyc5310644editdlrm
Edit: /usr/lib/rads/venv/lib/python3.13/site-packages/packaging/__pycache__/specifiers.cpython-313.pyc (37615B)
jwLSrSSKJr SSKrSSKrSSKrSSKJrJrJ r J r J r SSK J r SSKJr \ \\4r\ "S\S 9r\\\/\4rSS jr"S S \5r"S S\R0S9r"SS\5r\R6"S5rSSjrSSjrSSjrSSjr "SS\5r!g)z .. testsetup:: from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier from packaging.version import Version ) annotationsN)CallableIterableIteratorTypeVarUnion)canonicalize_version)VersionUnparsedVersionVar)boundcF[U[5(d [U5nU$N) isinstancer )versions G/usr/lib/rads/venv/lib/python3.13/site-packages/packaging/specifiers.py_coerce_versionrs 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 srrcJ\rSrSr\R S Sj5r\R S Sj5r\R S Sj5r\ \R SSj55r \ RSSj5r \R SSSjj5r \R SSS jj5r S rg) BaseSpecifier,cg)zv Returns the str representation of this Specifier-like object. This should be representative of the Specifier itself. Nrselfs r__str__BaseSpecifier.__str__-rcg)z6 Returns a hash value for this Specifier-like object. Nrr#s r__hash__BaseSpecifier.__hash__4r'rcg)z Returns a boolean representing whether or not the two Specifier-like objects are equal. :param other: The other object to check against. Nrr$others r__eq__BaseSpecifier.__eq__:r'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.prereleasesCr'rcg)zASetter for :attr:`prereleases`. :param value: The value to set. Nrr$values rr1r2Lr'rNcg)zB Determines if the given item is contained within this specifier. Nr)r$itemr1s rcontainsBaseSpecifier.containsSr'rcg)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$iterabler1s rfilterBaseSpecifier.filterYr'rrreturnstrr?intr-objectr?boolr? bool | Noner5rEr?Noner)r7r@r1rGr?rEr;zIterable[UnparsedVersionVar]r1rGr?zIterator[UnparsedVersionVar])rrrrabcabstractmethodr%r)r.propertyr1setterr8r<rrrrr r ,s                QU 4 CN %  rr ) metaclassc \rSrSrSrSrSr\R"S\-\-S-\R\R-5r SSS S S S S SS.r S(S)Sjjr \S*Sj5r\R S+Sj5r\S,Sj5r\S,Sj5rS,SjrS,Sjr\S-Sj5rS.SjrS/SjrS0SjrS1SjrS1SjrS1SjrS1SjrS1S jrS2S!jrS2S"jrS1S#jr S3S$jr!S4S5S%jjr"S4S6S&jjr#S'r$g)7 Specifierca+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. (?=<>===NcURRU5nU(d[SU<35eURS5R 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$specr1matchs r__init__Specifier.__init__sk ""4("%8#AB B KK # ) ) + KK " ( ( *'  (rcURb UR$URupUS;a<US:XaURS5(aUSSn[U5R(agg)N)r\r^r]r[rar`r_r\.*TF)rirhendswithr is_prerelease)r$rcrs rr1Specifier.prereleasessn    ($$ $ !JJ @ @4G$4$4T$:$:!#2,w--rcXlgrrir4s rr1rs!rc URS$)zHThe operator of this specifier. >>> Specifier("==1.2.3").operator '==' rrhr#s rrcSpecifier.operatorzz!}rc URS$)zIThe version of this specifier. >>> Specifier("==1.2.3").version '1.2.3' r rxr#s rrSpecifier.versionrzrcURbSUR<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=r_()>)rir1 __class__rr@r$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{}{})formatrhr#s rr%Specifier.__str__8s}}djj))rcr[URSURSS:gS9nURSU4$)Nr rr[strip_trailing_zero)r rh)r$canonical_versions r_canonical_specSpecifier._canonical_specBs>0 JJqM!%A$!6 zz!}///rc,[UR5$r)hashrr#s rr)Specifier.__hash__JsD(())rc[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 )rr@rrNotImplementedrr,s rr.Specifier.__eq__Msm& eS ! ! &s5z2E>>22! !##u'<'<<< $ &%% &sA++A>=A>c>[USURU35nU$)N _compare_)getattr _operators)r$opoperator_callables r _get_operatorSpecifier._get_operatorjs+.5 Idoob123/ ! rc [[[R"[[ U555SS5nUS- nUR S5"X5=(a UR S5"X5$)Nror^r\) _version_joinlist itertools takewhile_is_not_suffix_version_splitr)r$ prospectiverjprefixs r_compare_compatibleSpecifier._compare_compatiblepsn $$^^D5IJ KCR P  $!!$' : t?Q?QRV?W @  rcDURS5(aV[URSS9n[USSSS9n[U5n[U5n[ Xe5upxUS[ U5n X:H$[ U5n U R(d[ UR5nX:H$)NroFrrp)rqr publicr _pad_versionlenr local) r$rrjnormalized_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$rrjs r_compare_not_equalSpecifier._compare_not_equals&&{999rcD[UR5[U5:*$rr rrs r_compare_less_than_equal"Specifier._compare_less_than_equal{))*gdm;;rcD[UR5[U5:$rrrs r_compare_greater_than_equal%Specifier._compare_greater_than_equalrrc[U5nX:dgUR(d>UR(a-[UR5[UR5:XaggNFT)r rr base_versionr$rspec_strrjs r_compare_less_thanSpecifier._compare_less_thansRx  ! !!k&?&?{//0GDUR(a-[UR5[UR5:XagURb-[UR5[UR5:Xaggr)r is_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 r8r$r7s 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)r1rrrrrcr)r$r7r1normalized_itemrs rr8Specifier.contains sW4  **K*$/  ( (/3.@.@.O ,,??rc#@# 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'] Fr1NT)rr8rrr1append)r$r;r1yieldedfound_prereleaseskwrparsed_versions rr<Specifier.filter5s<K,C[ N G,W5N}}^2r22"//4#3#3%,,W5#G!M (,, --ws 4BA$B)rirhrN)rjr@r1rGr?rI)r?rErHr>)r?ztuple[str, str]rArC)rr@r?CallableOperator)rr rjr@r?rE)rr rr@r?rE)r7z str | Versionr?rEr)r7UnparsedVersionr1rGr?rErJ)%rrrrr_operator_regex_str_version_regex_strrecompileVERBOSE IGNORECASErdrrlrMr1rNrcrrr%rr)r.rrrrrrrrrrr8r<rrrrrQrQcsU \ |ZZ%%(::WD R]]"F "   J(4.""B$*00*=:!  (&/P:< < 0<=#**@ZRV;4;CN; %;;rrQz^([0-9]+)((?:a|b|c|rc)[0-9]+)$c2/nURS5up#nURU=(d S5 URS5HQn[R U5nU(a!UR UR 55 M@URU5 MS U$)aSplit version into components. The split components are intended for version comparison. The logic does not attempt to retain the original version string, so joining the components back with :func:`_version_join` may not produce the original version string. !0.) rpartitionrsplit _prefix_regexreextendgroups)rresultepochrrestr7rks rrrvswF'',NEd MM%,3 3$$T*  MM%,,. ) MM$   Mrc4UtpUSSRU53$)zJoin split version components into a version string. This function assumes the input came from :func:`_version_split`, where the first component must be the epoch (either empty or numeric), and all other components numeric. rr)join) componentsrrs rrrs%LEWAchhtn% &&rc8^[U4SjS55(+$)Nc3F># UHnTRU5v M g7fr) startswith).0rsegments r !_is_not_suffix..s#1Pv6""1Ps!)devabrcpost)any)rs`rrrs"1P rc //p2UR[[R"SU555 UR[[R"SU555 URU[ US5S5 URU[ US5S5 UR SS/[ S[ US5[ US5- 5-5 UR SS/[ S[ US5[ US5- 5-5 [[RRU55[[RRU554$)Nc"UR5$risdigitxs r_pad_version..s rc"UR5$rr r s rrrs !))+rrr r) rrrrrinsertmaxchain from_iterable)leftright left_split right_splits rrrs3 " d9../DdKLMtI//0EuMNOd3z!}-/01uSQ0234a#QKN(;c*Q->P(P!QQRq3%#aZ]);c+a.>Q)Q"RRS Y__ * *: 67 Y__ * *; 78 rc\rSrSrSrSSSjjr\SSj5r\RSSj5rSSjr SSjr SS jr SS jr SS jr SS jrSS jrSSjrSSSjjrSSSjjrSrg) 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. Nc,[U[5(adURS5Vs/sH)o3R5(dMUR5PM+ nn[ [ [ U55UlO[ U5UlX lgs snf)aLInitialize 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. May also be an iterable of ``Specifier`` instances, which will be used as is. :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) rr@rrg frozensetmaprQ_specsri)r$ specifiersr1ssplit_specifierss rrlSpecifierSet.__init__su, j# & &4>3C3CC3HV3HaGGI  3H V$C 3C$DEDK$J/DK( Ws BBcURb UR$UR(dg[SUR55$)Nc38# UHoRv M g7frr1rr"s rr+SpecifierSet.prereleases..s6+Q==+)rir rr#s rr1SpecifierSet.prereleasess?    ($$ $ {{6$++666rcXlgrrur4s rr1r+rvrcdURbSUR<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)> r~rz>> 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)r@r(s rr'SpecifierSet.__str__..s;{!s1vv{r*)rsortedr r#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.)rr@rrrr ri ValueError)r$r- specifiers 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 "  X 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 )rr@rQrrr r,s rr.SpecifierSet.__eq__8sJ& ec9- . . U,EE<00! !{{ell**rc,[UR5$)z7Returns the number of specifiers in this specifier set.)rr r#s r__len__SpecifierSet.__len__Rs4;;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')>] )iterr r#s r__iter__SpecifierSet.__iter__VsDKK  rc$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__`rrc0^^[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)r'Nr)rr"r7r1s rr(SpecifierSet.contains..sRk::d :>> 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')r1r r<rErArrrr)r$r;r1rjfilteredrr7rs rr<SpecifierSet.filtersX  **K ;; ;;xT+=N;O$> ! 24H:<  !0!6"// #)006$OOD)! 1k6I-..> !r)rir r)r!zstr | Iterable[Specifier]r1rGr?rIrFrHr>rA)r-zSpecifierSet | strr?rrC)r?zIterator[Specifier])r7rr?rE)NN)r7rr1rGrJrGr?rErrJ)rrrrrrlrMr1rNrr%r)r9r.r>rBrr8r<rrrrrrs13#'$(-$(!$(  $(L77 ""5* =!>+4 !#0$(!% 7S7S!7S 7S  7StRVM"4M"CNM" %M"M"rr)rrr?r )rr@r? list[str])rrOr?r@)rr@r?rE)rrOrrOr?ztuple[list[str], list[str]])"r __future__rrKrrtypingrrrrrutilsr rr r@rr rErrr7rABCMetar rQrrrrrrrrrrrTs#  ??' %1IWcND01 z 4 ckk4 nM M` <= ,' *I"=I"r