Ë köØÈ‡Tê„ã óÜ—dZddlZddlZddlmZejdvr ddl m Z m Z nddlm Z m Z ddl mZmZmZmZddlmZmZmZmZmZmZmZ dZ!d Z"d Z#d Z$e Z%d Z&d Z'dZ(de!zdz Z)e!e"zZ*de"zdz Z+e,e-de!dz«D�cgc]}|e)de!|z zdz z f‘Œc}«Z.e,e-de!dz«D�cgc]}e)de!|z zdz z |f‘Œc}«Z/e,e-de!dz«D�cgc]}|de!|z zdz f‘Œc}«Z0e,e-de!dz«D�cgc]}de!|z zdz |f‘Œc}«Z1d!d„Z2d!d„Z3d"d„Z4d„Z5d„Z6d„Z7d„Zd„Z8d„Z9d„Zd„Zd"d„Zd„Zd„Zd„Zd „Z:ycc}wcc}wcc}wcc}w)#zIPv4 address logic.éN)Ú inet_aton)Úwin32Úcygwin)Ú inet_ptonÚAF_INET)ÚAddrFormatErrorÚZEROFILLÚ INET_ATONÚ INET_PTON)Ú valid_wordsÚ valid_bitsÚ bits_to_intÚ int_to_bitsÚ valid_binÚ int_to_binÚ bin_to_inté éú%dÚ.ÚIPv4éé éécóŠ—t|t«stdt|«z«‚ t ||«y#t $rYywxYw)ah :param addr: An IPv4 address in presentation (string) format. :param flags: decides which rules are applied to the interpretation of the addr value. Supported constants are INET_PTON and ZEROFILL. See the :class:`IPAddress` documentation for details. .. versionchanged:: 0.10.1 ``flags`` is scheduled to default to :data:`INET_PTON` instead of :data:`INET_ATON` in the future. :return: ``True`` if IPv4 address is valid, ``False`` otherwise. .. versionchanged:: 1.0.0 Returns ``False`` instead of raising :exc:`AddrFormatError` for empty strings. zInvalid type: %sFT)Ú isinstanceÚstrÚ TypeErrorÚtypeÚ str_to_intr)ÚaddrÚflagss ú:/usr/lib/python3.12/site-packages/netaddr/strategy/ipv4.pyÚ valid_strr%QsK€ô" �dœCÔ ÜÐ*¬T°$«ZÑ7Ó8Ð8ðÜ�4˜Ôð øô òÙðús© 6¶ AÁAc ó²—t|›d�«}|tzxs |tz }|tzr;dj |j d«D�cgc]}dt |«z‘Œc}«}n%|r#td„|j d«D««r|‚ |rtt|«}n t|«}tjd|«dScc}w#t$r|‚wxYw)a_ :param addr: An IPv4 dotted decimal address in string form. :param flags: decides which rules are applied to the interpretation of the addr value. Supported constants are INET_PTON and ZEROFILL. See the :class:`IPAddress` documentation for details. :return: The equivalent unsigned integer for a given IPv4 address. z$ is not a valid IPv4 address string!rrc3ó^K—|]%}t|«dkDxr|jd«–—Œ'y­w)rÚ0N)ÚlenÚ startswith)Ú.0Úps r$Ú zstr_to_int..ys*èø€ÐUÁ_Àœ3˜q›6 A™:Ò;¨!¯,©,°sÓ*;Ó;Á_ùs‚+-ú>Ir)rr r r ÚjoinÚsplitÚintÚanyÚ _inet_ptonrÚ _inet_atonÚOSErrorÚ_structÚunpack)r"r#ÚerrorÚ pton_modeÚiÚpackeds r$r!r!ksÍ€ô ÊÐNÓ O€EØœ Ñ!Ò:¨´Ñ):Ð%:€IØ ŒxÒØ�x‰x°· ± ¸3´Ó@±¨1˜¤ A£›°Ñ@ÓA‰Ù ”sÑUÀTÇZÁZÐPSÄ_ÓUÔU؈ ð٠ܤ¨Ó.‰Fä Ó%ˆFô �>‰>˜$ Ó '¨Ñ *Ð*ùòAøô ò؈ ðúsÁ CÂC à Ccóx—d|cxkr tkrnnd|dz |dz dz|dz dz|dzfzSt|›d�«‚)zÝ :param int_val: An unsigned integer. :param dialect: (unused) Any value passed in is ignored. :return: The IPv4 presentation (string) format address equivalent to the unsigned integer provided. rz %d.%d.%d.%déééÿrz( is not a valid 32-bit unsigned integer!©Úmax_intÚ ValueError)Úint_valÚdialects r$Ú int_to_strrE†sY€ð ˆGÔ”wÕØØ �r‰MØ ˜‰]˜dÑ "Ø ˜‰\˜TÑ !Ø �d‰Nð  ñ ð ôÊÐRÓSÐSócóª—t|«D�cgc]}d|z‘Œ }}|j«|jgd¢«dj|«Scc}w)z“ :param int_val: An unsigned integer. :return: The reverse DNS lookup for an IPv4 address in network byte order integer form. r)zin-addrÚarpaÚr)Ú int_to_wordsÚreverseÚextendr/)rCr:Úwordss r$Ú int_to_arparNšsL€ô ,¨GÔ4Ó 5Ñ4˜!ˆT�A‹XÐ4€EÐ 5Ø ‡M�M„OØ ‡L�LÒ(Ô)Ø �8‰8�E‹?Ðùò 6sŽ Acó.—tjd|«S)z• :param int_val: the integer to be packed. :return: a packed string that is equivalent to value represented by an unsigned integer. r.)r6Úpack©rCs r$Ú int_to_packedrR§s€ô �<‰<˜˜gÓ &Ð&rFcó4—tjd|«dS)a :param packed_int: a packed string containing an unsigned integer. It is assumed that string is packed in network byte order. :return: An unsigned integer equivalent to value of network address represented by packed binary string. r.r)r6r7)Ú packed_ints r$Ú packed_to_intrU±s€ô �>‰>˜$  Ó +¨AÑ .Ð.rFcó,—t|tt«S©N)Ú _valid_wordsÚ word_sizeÚ num_words©rMs r$r r ¼s€Ü ˜œy¬)Ó 4Ð4rFcóp—d|cxkr tksnt|›d�«‚|dz |dz dz|dz dz|dzfS)z¥ :param int_val: An unsigned integer. :return: An integer word (octet) sequence that is equivalent to value represented by an unsigned integer. rz< is not a valid integer value supported bythis address type!r=r>r?rr@rQs r$rJrJÀsP€ð �Ô "œ7Ô "ÜÚSZÐ \ó ð ð �r‰M˜G r™M¨TÑ1°G¸q±LÀDÑ3HÈ'ÐTXÉ.Ð YÐYrFcóŽ—t|«st|›d�«‚tjdtjdg|¢­Ž«dS)z® :param words: A list or tuple containing integer octets. :return: An unsigned integer that is equivalent to value represented by word (octet) sequence. z/ is not a valid octet list for an IPv4 address!r.Ú4Br)r rBr6r7rPr[s r$Ú words_to_intr_Îs?€ô �uÔ ÜÒPUÐWÓXÐXÜ �>‰>˜$¤§ ¡ ¨TÐ :°EÒ :Ó ;¸AÑ >Ð>rFcó,—t|tt«SrW)Ú _valid_bitsÚwidthÚword_sep©Úbitss r$r r Ús€Ü �tœU¤HÓ -Ð-rFcó,—t|tt«SrW)Ú _bits_to_intrbrcrds r$rrÞs€Ü ˜œe¤XÓ .Ð.rFcóL—|€ t«d}t|tt|«S)Nrc)ÚglobalsÚ _int_to_bitsrYrZ)rCrcs r$rrâs%€ØÐÜ“9˜ZÑ(ˆÜ ˜¤¬I°xÓ @Ð@rFcó"—t|t«SrW)Ú _valid_binrb©Úbin_vals r$rrès€Ü �gœuÓ %Ð%rFcó"—t|t«SrW)Ú _int_to_binrbrQs r$rrìó€Ü �w¤Ó &Ð&rFcó"—t|t«SrW)Ú _bin_to_intrbrms r$rrðrqrFcó¨—g}td|z«}t|t«r�d|vr|‚ d|vr+|jd«D�cgc]}dt |«z‘Œ}}ndt |«zg}dt |«cxkrdkr2n|‚tdt |«z «D]}|jd«Œn|‚|s|‚dt|«zScc}w#t $r|‚wxYw) a Expands a partial IPv4 address into a full 4-octet version. :param addr: an partial or abbreviated IPv4 address :return: an expanded IP address in presentation format (x.x.x.x) >>> expand_partial_address('1.2') '1.2.0.0' .. versionadded:: 1.1.0 z!invalid partial IPv4 address: %r!Ú:rrrrr(z %s.%s.%s.%s) rrrr0r1rBr)ÚrangeÚappendÚtuple)r"Útokensr8Úor:s r$Úexpand_partial_addressr{ôsé€ð€Fä Ð?À$ÑFÓ G€Eä�$œÔØ �$‰;àˆKð Ø�d‰{Ø15·±¸C´ÓA±¨A˜$¤ Q£›-°�ÑAठT£Ñ*Ð+�ð ”�F“ Ô ˜qÔ ðˆKô˜1œs 6›{™?Ö+�Ø— ‘ ˜cÕ"ñ,ðˆKá Øˆ à œ5 ›=Ñ (Ð(ùòBøôò ؈Kð ús¨C¿CÁCÃCà C)rrW);Ú__doc__ÚsysÚ_sysÚstructr6Úsocketrr4ÚplatformÚnetaddr.fbsocketrr3rÚ netaddr.corerr r r Únetaddr.strategyr rXr rarrgrrjrrlrrprrsrbrYÚword_fmtrcÚfamilyÚ family_nameÚversionÚ word_baserArZÚmax_wordÚdictrvÚprefix_to_netmaskÚnetmask_to_prefixÚprefix_to_hostmaskÚhostmask_to_prefixr%r!rErNrRrUrJr_r{)r:s0r$Úr�sðñ ãÛå*ð‡=�=Ð'Ñ'÷BÐA÷8çHÓH÷÷ñð €ð € ð €ð €ð €ð€ ð €ð € ð ˆU‰(�Q‰,€ð �YÑ € ð ˆi‰<˜!Ñ €ñÉÈqÐRWÐZ[ÑR[ÔI\Ó]ÑI\ÀA˜1˜g¨¨u°q©yÑ)9¸AÑ)=Ñ>Ò?ÐI\Ñ]Ó^ÐñÉÈqÐRWÐZ[ÑR[ÔI\Ó]ÑI\ÀA˜7 a¨E°A©IÑ&6¸Ñ&:Ñ;¸QÒ?ÐI\Ñ]Ó^ÐñÁÀaÈÐQRÉÔ@SÓTÑ@S¸1˜A  e¨a¡iÑ 0°1Ñ 4Ò6Ð@SÑTÓUÐñÁÀaÈÐQRÉÔ@SÓTÑ@S¸1˜Q 5¨1¡9Ñ-°Ñ1°AÒ6Ð@SÑTÓUÐóó4+ó6Tò( ò'ò/ò5ò Zò ?ò.ò/óAò &ò'ò'ó')ùò_^ùò^ùòUùòUsÂEÂ1EÃE$Ä E)