grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a XC?h<ã@s„dZddlZdZdZGdd„deƒZGdd„deƒZd d „Zd7}|d|j kr‚qÞq‚dS)Nz1first and last must be IP addresses, not networksú%%s and %s are not of the same versionz*last IP address must be greater than firstrézunknown IP versionr)) Ú isinstanceÚ _BaseAddressÚ TypeErrorÚversionrrrÚ_max_prefixlenr,r3r6r4Ú _ALL_ONES)r/r0r1Zip_bitsZ first_intZlast_intZnbitsÚnetr r r Úsummarize_address_rangeÇs6 ÿ ÿ   ÿ r@ccs�t|ƒ}i}|rV| ¡}| ¡}| |¡}|dur<|||<q ||kr ||=| |¡q d}t| ¡ƒD]$}|dur€|j|jkr€qf|V|}qfdS©N)ÚlistÚpopÚsupernetÚgetÚappendÚsortedÚvaluesÚbroadcast_address)r-Zto_mergeÚsubnetsr?rDZexistingr0r r r Ú_collapse_addresses_internalþs$    rKc Cs.g}g}g}|D]Ú}t|tƒrR|rF|dj|jkrFtd||dfƒ‚| |¡q|j|jkr¸|r†|dj|jkr†td||dfƒ‚z| |j¡Wqêty´| |j ¡Yqê0q|rà|dj|jkràtd||dfƒ‚| |¡qt t |ƒƒ}|�r"t |ƒD]\}}|  t||ƒ¡�qt||ƒS)Néÿÿÿÿr7)r9r:Ú_versionr;rFÚ _prefixlenr=r1ÚAttributeErrorÚnetwork_addressrGÚsetr2Úextendr@rK)r-ZaddrsZipsZnetsr1r/r0r r r Úcollapse_addresses/s: ÿ  ÿ ÿ  rScCs(t|tƒr| ¡St|tƒr$| ¡StSrA)r9Ú _BaseNetworkÚ_get_networks_keyr:Ú_get_address_keyÚNotImplemented)Úobjr r r Úget_mixed_type_keyes   rYc@s eZdZdZedd„ƒZedd„ƒZedd„ƒZedd „ƒZd d „Z d d „Z e dd„ƒZ e dd„ƒZ e dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZdd„ZdS)Ú_IPAddressBaser cCs| ¡SrA)Ú_explode_shorthand_ip_string©Úselfr r r Úexploded„sz_IPAddressBase.explodedcCst|ƒSrA©r#r\r r r Ú compressed‰sz_IPAddressBase.compressedcCs| ¡SrA)Ú_reverse_pointerr\r r r Úreverse_pointerŽs z_IPAddressBase.reverse_pointercCsdt|ƒf}t|ƒ‚dS)Nz%200s has no version specified©ÚtypeÚNotImplementedError©r]Úmsgr r r r<™sz_IPAddressBase.versioncCsF|dkrd}t|||jfƒ‚||jkrBd}t|||j|jfƒ‚dS)Nrz-%d (< 0) is not permitted as an IPv%d addressz2%d (>= 2**%d) is not permitted as an IPv%d address)rrMr>r=)r]rrgr r r Ú_check_int_addressžs  ÿz!_IPAddressBase._check_int_addresscCs.t|ƒ}||kr*d}t|||||jfƒ‚dS)Nz6%r (len %d != %d) is not permitted as an IPv%d address)r%rrM)r]rZ expected_lenZ address_lenrgr r r Ú_check_packed_address§s ÿz$_IPAddressBase._check_packed_addresscCs|j|j|?ASrA)r>)ÚclsÚ prefixlenr r r Ú_ip_int_from_prefix®s z"_IPAddressBase._ip_int_from_prefixc Cs\t||jƒ}|j|}||?}d|>d}||krX|jd}| |d¡}d}t||ƒ‚|S)Nr)érz&Netmask pattern %r mixes zeroes & ones)r6r=rr) rjÚip_intZtrailing_zeroesrkZ leading_onesZall_onesZbyteslenZdetailsrgr r r Ú_prefix_from_ip_int»s ÿ     z"_IPAddressBase._prefix_from_ip_intcCsd|}t|ƒd‚dS)Nz%r is not a valid netmask)r )rjZ netmask_strrgr r r Ú_report_invalid_netmaskÔsz&_IPAddressBase._report_invalid_netmaskcCsj| ¡r| ¡s| |¡z t|ƒ}WntyB| |¡Yn0d|krZ|jksfn| |¡|S©Nr)ÚisasciiÚisdigitrpÚintrr=)rjZ prefixlen_strrkr r r Ú_prefix_from_prefix_stringÙs    z)_IPAddressBase._prefix_from_prefix_stringcCs„z| |¡}Wnty*| |¡Yn0z | |¡WStyJYn0||jN}z | |¡WSty~| |¡Yn0dSrA)Ú_ip_int_from_stringrrprorr>)rjÚip_strrnr r r Ú_prefix_from_ip_stringòs      z%_IPAddressBase._prefix_from_ip_stringcCsHt|ttfƒr||jfSt|tƒs*t|ƒ}t|ƒdkr:|S|d|jfS)Nr)r)r9Úbytesrtr=Útupler'r%)rjrr r r Ú_split_addr_prefixs    z!_IPAddressBase._split_addr_prefixcCs|jt|ƒffSrA)Ú __class__r#r\r r r Ú __reduce__,sz_IPAddressBase.__reduce__N)rrrÚ __slots__Úpropertyr^r`rbr<rhriÚ classmethodrlrorprurxr{r}r r r r rZ~s0          ! rZcspeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z ‡fdd„Z‡ZS)r:r cCs|jSrA)r,r\r r r Ú__int__=sz_BaseAddress.__int__cCs6z|j|jko|j|jkWSty0tYS0dSrA)r,rMrOrW©r]Úotherr r r Ú__eq__@s   ÿ z_BaseAddress.__eq__cCsFt|tƒstS|j|jkr*td||fƒ‚|j|jkrB|j|jkSdS©Nr7F)r9r:rWrMr;r,r‚r r r Ú__lt__Gs  ÿ  z_BaseAddress.__lt__cCs t|tƒstS| t|ƒ|¡SrA©r9rtrWr|r‚r r r Ú__add__Ss z_BaseAddress.__add__cCs t|tƒstS| t|ƒ|¡SrAr‡r‚r r r Ú__sub__Xs z_BaseAddress.__sub__cCsd|jjt|ƒfS©Nz%s(%r)©r|rr#r\r r r Ú__repr__]sz_BaseAddress.__repr__cCst| |j¡ƒSrA)r#Ú_string_from_ip_intr,r\r r r Ú__str__`sz_BaseAddress.__str__cCsttt|jƒƒƒSrA)ÚhashÚhexrtr,r\r r r Ú__hash__csz_BaseAddress.__hash__cCs |j|fSrA©rMr\r r r rVfsz_BaseAddress._get_address_keycCs|j|jffSrA)r|r,r\r r r r}isz_BaseAddress.__reduce__csÖ|r|ddkrtt|ƒ|ƒStdur8ddl}| d¡at |¡}|sRtƒ |¡S| ¡\}}}|dkr||j dkrxd}nd}|dkrŒ|j }n |j d}|rª||dd 7}|r¶|d 7}tt |ƒ|›d |›|›|›�ƒS) NrLÚsrz(#?)(_?)([xbnX])ÚnrÚbÚxr)r"Ú0) Úformatr#Ú_address_fmt_reÚreÚcompileÚ fullmatchÚsuperÚ __format__ÚgroupsrMr=rt)r]ZfmtršÚmZ alternateZgroupingZfmt_baseZpadlen©r|r r ržls*     z_BaseAddress.__format__)rrrr~r�r„r†rˆr‰rŒrŽr‘rVr}ržÚ __classcell__r r r¡r r:2s  r:c@s\eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z e jdd„ƒZe jdd„ƒZedd„ƒZedd„ƒZedd„ƒZedd „ƒZed!d"„ƒZed#d$„ƒZd%d&„Zd'd(„Zd)d*„ZdEd-d.„ZdFd/d0„Zed1d2„ƒZed3d4„ƒZd5d6„Z d7d8„Z!ed9d:„ƒZ"ed;d<„ƒZ#ed=d>„ƒZ$ed?d@„ƒZ%edAdB„ƒZ&edCdD„ƒZ'd,S)GrTcCsd|jjt|ƒfSrŠr‹r\r r r rŒ¦sz_BaseNetwork.__repr__cCsd|j|jfS©Nú%s/%d)rPrkr\r r r rŽ©sz_BaseNetwork.__str__ccs8t|jƒ}t|jƒ}t|d|ƒD]}| |¡Vq"dSr(©rtrPrIÚrangeÚ_address_class©r]ÚnetworkÚ broadcastr–r r r Úhosts¬s  z_BaseNetwork.hostsccs8t|jƒ}t|jƒ}t||dƒD]}| |¡Vq"dSr(r¥r¨r r r Ú__iter__¸s  z_BaseNetwork.__iter__cCslt|jƒ}t|jƒ}|dkr>|||kr0tdƒ‚| ||¡S|d7}|||krZtdƒ‚| ||¡SdS)Nrzaddress out of ranger))rtrPrIÚ IndexErrorr§)r]r”r©rªr r r Ú __getitem__¾s    z_BaseNetwork.__getitem__cCs^t|tƒstS|j|jkr*td||fƒ‚|j|jkrB|j|jkS|j|jkrZ|j|jkSdSr…)r9rTrWrMr;rPÚnetmaskr‚r r r r†Ës  ÿ    z_BaseNetwork.__lt__cCsJz.|j|jko,|j|jko,t|jƒt|jƒkWStyDtYS0dSrA)rMrPrtr¯rOrWr‚r r r r„×s  ÿþ z_BaseNetwork.__eq__cCstt|jƒt|jƒfƒSrA)r�rtrPr¯r\r r r r‘ßsz_BaseNetwork.__hash__cCs8|j|jkrdSt|tƒrdS|j|jj@|jjkSdS©NF)rMr9rTr,r¯rPr‚r r r Ú __contains__âs   z_BaseNetwork.__contains__cCs(|j|vp&|j|vp&|j|vp&|j|vSrA)rPrIr‚r r r Úoverlapsîs    ýz_BaseNetwork.overlapscCs| t|jƒt|jƒB¡SrA)r§rtrPÚhostmaskr\r r r rIõs ÿz_BaseNetwork.broadcast_addresscCs| t|jƒ|jA¡SrA)r§rtr¯r>r\r r r r³úsz_BaseNetwork.hostmaskcCsd|j|jfSr£)rPrNr\r r r Úwith_prefixlenþsz_BaseNetwork.with_prefixlencCsd|j|jfS©Nú%s/%s)rPr¯r\r r r Ú with_netmasksz_BaseNetwork.with_netmaskcCsd|j|jfSrµ)rPr³r\r r r Ú with_hostmasksz_BaseNetwork.with_hostmaskcCst|jƒt|jƒdSr()rtrIrPr\r r r Ú num_addresses sz_BaseNetwork.num_addressescCsdt|ƒf}t|ƒ‚dS)Nz%%200s has no associated address classrcrfr r r r§sz_BaseNetwork._address_classcCs|jSrA)rNr\r r r rksz_BaseNetwork.prefixlenccs|j|jkstd||fƒ‚t|tƒs2td|ƒ‚| |¡sLtd||fƒ‚||krXdS| d|j|jf¡}|  ¡\}}||krÚ||krÚ| |¡r¨|V|  ¡\}}qz| |¡rÆ|V|  ¡\}}qzt d|||fƒ‚qz||krê|Vn"||krú|Vnt d|||fƒ‚dS)Nr7z%s is not a network objectz%s not contained in %sr¶z3Error performing exclusion: s1: %s s2: %s other: %s) rMr;r9rTÚ subnet_ofrr|rPrkrJÚAssertionError)r]rƒÚs1Ús2r r r Úaddress_excludes>$ ÿ    ÿ   þþz_BaseNetwork.address_excludecCs`|j|jkrtd||fƒ‚|j|jkr,dS|j|jkr 0z0prefix length diff %d is invalid for netblock %s) rNr=rrtrPrIr³r¦r|) r]Úprefixlen_diffÚ new_prefixÚ new_prefixlenÚstartÚendÚstepZnew_addrZcurrentr r r rJ s0     ÿÿ z_BaseNetwork.subnetscCsˆ|jdkr|S|durB||jkr(tdƒ‚|dkr8tdƒ‚|j|}|j|}|dkrftd|j|fƒ‚| t|jƒt|jƒ|>@|f¡S)Nrznew prefix must be shorterr)rÀz;current prefixlen is %d, cannot have a prefixlen_diff of %d)rNrrkr|rtrPr¯)r]rÁrÂrÃr r r rDÕs&    ÿÿþz_BaseNetwork.supernetcCs|jjo|jjSrA)rPÚ is_multicastrIr\r r r rÇþs ÿz_BaseNetwork.is_multicastcCsfz:|j|jkr"t|›d|›d�ƒ‚|j|jko8|j|jkWSty`td|›d|›�ƒ‚Yn0dS)Nz and z are not of the same versionz*Unable to test subnet containment between )rMr;rPrIrO)Úar•r r r Ú _is_subnet_of s   ÿ ÿÿz_BaseNetwork._is_subnet_ofcCs | ||¡SrA©rÉr‚r r r rºsz_BaseNetwork.subnet_ofcCs | ||¡SrArÊr‚r r r Ú supernet_ofsz_BaseNetwork.supernet_ofcCs|jjo|jjSrA)rPÚ is_reservedrIr\r r r rÌs ÿz_BaseNetwork.is_reservedcCs|jjo|jjSrA)rPÚ is_link_localrIr\r r r rÍ*sÿz_BaseNetwork.is_link_localcCs|jjo|jjSrA)rPÚ is_privaterIr\r r r rÎ5s ÿz_BaseNetwork.is_privatecCs|j SrA)rÎr\r r r Ú is_globalAs z_BaseNetwork.is_globalcCs|jjo|jjSrA)rPÚis_unspecifiedrIr\r r r rÐLs ÿz_BaseNetwork.is_unspecifiedcCs|jjo|jjSrA)rPÚ is_loopbackrIr\r r r rÑXs ÿz_BaseNetwork.is_loopback)r)N)r)N)(rrrrŒrŽr«r¬r®r†r„r‘r±r²Ú functoolsÚcached_propertyrIr³rr´r·r¸r¹r§rkr¾r¿rUrJrDrÇÚ staticmethodrÉrºrËrÌrÍrÎrÏrÐrÑr r r r rTžsb            K0 5 )       rTc@s€eZdZdZdZdedZeZiZdd„Z e dd„ƒZ e d d „ƒZ e d d „ƒZ e d d„ƒZdd„Zedd„ƒZedd„ƒZdS)Ú_BaseV4r rr"r)cCst|ƒSrAr_r\r r r r[wsz$_BaseV4._explode_shorthand_ip_stringcCsŽ||jvr„t|tƒr<|}d|kr.|jkshn| |¡n,z| |¡}Wntyf| |¡}Yn0t|  |¡ƒ}||f|j|<|j|Srq) Ú_netmask_cacher9rtr=rprur rxr rl©rjÚargrkr¯r r r Ú _make_netmaskzs    z_BaseV4._make_netmaskc Cs€|s tdƒ‚| d¡}t|ƒdkr.td|ƒ‚zt t|j|ƒd¡WStyz}ztd||fƒd‚WYd}~n d}~00dS)NúAddress cannot be emptyÚ.rzExpected 4 octets in %rrú%s in %r)rr$r%rtÚ from_bytesÚmapÚ _parse_octetr)rjrwZoctetsÚexcr r r rv”s   z_BaseV4._ip_int_from_stringcCsŽ|s tdƒ‚| ¡r| ¡s,d}t||ƒ‚t|ƒdkrHd}t||ƒ‚|dkrl|ddkrld}t||ƒ‚t|dƒ}|d krŠtd |ƒ‚|S) NzEmpty octet not permittedz#Only decimal digits permitted in %réz$At most 3 characters permitted in %rr—rz%Leading zeros are not permitted in %ré éÿzOctet %d (> 255) not permitted)rrrrsr%rt)rjZ octet_strrgZ octet_intr r r rß®s      z_BaseV4._parse_octetcCsd tt| dd¡ƒ¡S)NrÛrr)ÚjoinrÞr#r)rjrnr r r r�Òs z_BaseV4._string_from_ip_intcCs&t|ƒ d¡ddd…}d |¡dS)NrÛrLz .in-addr.arpa)r#r$rä)r]Zreverse_octetsr r r raßsz_BaseV4._reverse_pointercCs|jSrA©r=r\r r r Ú max_prefixlenèsz_BaseV4.max_prefixlencCs|jSrAr’r\r r r r<ìsz_BaseV4.versionN)rrrr~rMÚ IPV4LENGTHr>r=rÖr[r€rÙrvrßr�rarrær<r r r r rÕds&     #   rÕc@sˆeZdZdZdd„Zedd„ƒZedd„ƒZee  ¡dd „ƒƒZ ee  ¡d d „ƒƒZ ed d „ƒZ edd„ƒZ edd„ƒZedd„ƒZdS)r )r,Ú __weakref__cCstt|tƒr| |¡||_dSt|tƒrF| |d¡t |d¡|_dSt|ƒ}d|vrdtd|›�ƒ‚|  |¡|_dS)Nrrr!úUnexpected '/' in ) r9rtrhr,ryrirÝr#rrv©r]rZaddr_strr r r Ú__init__÷s    zIPv4Address.__init__cCs t|jƒSrA)rr,r\r r r ÚpackedszIPv4Address.packedcCs ||jjvSrA)Ú _constantsÚ_reserved_networkr\r r r rÌs zIPv4Address.is_reservedcs4t‡fdd„ˆjjDƒƒo2t‡fdd„ˆjjDƒƒS)Nc3s|]}ˆ|vVqdSrAr ©Ú.0r?r\r r Ú <óz)IPv4Address.is_private..c3s|]}ˆ|vVqdSrAr rïr\r r rñ=rò)ÚanyríÚ_private_networksÚallÚ_private_networks_exceptionsr\r r\r rÎ*sþzIPv4Address.is_privatecCs||jjvo|j SrA)ríÚ_public_networkrÎr\r r r rÏ@szIPv4Address.is_globalcCs ||jjvSrA)ríÚ_multicast_networkr\r r r rÇRs zIPv4Address.is_multicastcCs ||jjkSrA)ríÚ_unspecified_addressr\r r r rÐ]s zIPv4Address.is_unspecifiedcCs ||jjvSrA)ríÚ_loopback_networkr\r r r rÑhszIPv4Address.is_loopbackcCs ||jjvSrA)ríÚ_linklocal_networkr\r r r rÍrszIPv4Address.is_link_localN)rrrr~rërrìrÌrÒÚ lru_cacherÎrÏrÇrÐrÑrÍr r r r r ñs(#       r c@sxeZdZdd„Zejdd„ƒZdd„Zdd„Zd d „Z d d „Z e j Z e d d„ƒZe dd„ƒZe dd„ƒZe dd„ƒZdS)rcCsD| |¡\}}t ||¡t||fdd�|_|jj|_|jj|_dS©NF)r)r{r rërr©r¯rN©r]rr&Úmaskr r r rës   zIPv4Interface.__init__cCs|jjSrA©r©r³r\r r r r³‡szIPv4Interface.hostmaskcCsd| |j¡|jfSr£©r�r,rNr\r r r rŽ‹s ÿzIPv4Interface.__str__cCsDt ||¡}|tus|s|Sz|j|jkWSty>YdS0dSr°)r r„rWr©rO©r]rƒZ address_equalr r r r„�s   zIPv4Interface.__eq__cCsPt ||¡}|turtSz|j|jkp4|j|jko4|WStyJYdS0dSr°)r r†rWr©rO©r]rƒZ address_lessr r r r†›s  ÿ zIPv4Interface.__lt__cCst|j|jt|jjƒfƒSrA©r�r,rNrtr©rPr\r r r r‘§szIPv4Interface.__hash__cCs t|jƒSrA)r r,r\r r r r1¬szIPv4Interface.ipcCsd| |j¡|jfSrµrr\r r r r´°s ÿzIPv4Interface.with_prefixlencCsd| |j¡|jfSrµ©r�r,r¯r\r r r r·µs ÿzIPv4Interface.with_netmaskcCsd| |j¡|jfSrµ©r�r,r³r\r r r r¸ºs ÿzIPv4Interface.with_hostmaskN)rrrrërÒrÓr³rŽr„r†r‘rZr}rr1r´r·r¸r r r r r}s       rc@s.eZdZeZddd„Zee ¡dd„ƒƒZ dS)rTcs¤| |¡\‰}tˆƒ|_| |¡\|_|_t|jƒ}|t|jƒ@|krl|rXtd|ƒ‚nt|t|jƒ@ƒ|_|j|jdkr†|j |_ n|j|jkr ‡fdd„|_ dS)Nú%s has host bits setr)cs tˆƒgSrA)r r ©r&r r Úròz&IPv4Network.__init__..) r{r rPrÙr¯rNrtrr=r¬r«©r]rrrÿrìr rr rëÏs#  ÿ  zIPv4Network.__init__cCs&|jtdƒvo|jtdƒv o$|j S)Nú 100.64.0.0/10)rPrrIrÎr\r r r rÏs  ÿþzIPv4Network.is_globalN)T) rrrr r§rërrÒrürÏr r r r rÀs   4rc@s¤eZdZedƒZedƒZedƒZedƒZedƒedƒedƒedƒedƒedƒed ƒed ƒed ƒed ƒed ƒedƒedƒedƒgZedƒedƒgZ edƒZ e dƒZ dS)Ú_IPv4Constantsz169.254.0.0/16z 127.0.0.0/8z 224.0.0.0/4r z 0.0.0.0/8z 10.0.0.0/8z 172.16.0.0/12z 192.0.0.0/24z192.0.0.170/31z 192.0.2.0/24z192.168.0.0/16z 198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z 240.0.0.0/4z255.255.255.255/32z 192.0.0.9/32z 192.0.0.10/32z0.0.0.0N) rrrrrûrúrør÷rôrörîr rùr r r r r s0òþr c@s¦eZdZdZdZdedZdZedƒZ eZ iZ e dd„ƒZ e d d „ƒZe d d „ƒZe d d„ƒZe ddd„ƒZdd„Zdd„Zedd„ƒZedd„ƒZedd„ƒZdS)Ú_BaseV6r r8r"r)rmZ0123456789ABCDEFabcdefcCsl||jvrbt|tƒr<|}d|kr.|jksFn| |¡n | |¡}t| |¡ƒ}||f|j|<|j|Srq)rÖr9rtr=rprur rlr×r r r rÙOs    z_BaseV6._make_netmaskc CsB|s tdƒ‚t|ƒdkrb|}t|ƒdkrT|dd…›dt|ƒd›d|dd…›�}td|›�ƒ‚|jd }|jd |d �}d }t|ƒ|kržd ||f}t|ƒ‚d|dv�rzt| ¡ƒj}Wn6tyô}ztd||fƒd‚WYd}~n d}~00| d|d?d@¡| d|d@¡t|ƒ|k�rDd|d |f}t|ƒ‚d} td t|ƒd ƒD].} || �sZ| du�r‚d|}t|ƒ‚| } �qZ| du�r,| } t|ƒ| d } |d�sÐ| d 8} | �rÐd}t||ƒ‚|d�sø| d 8} | �rød}t||ƒ‚|j| | } | d k�r–d}t||jd |fƒ‚njt|ƒ|jk�rRd}t||j|fƒ‚|d�sld}t||ƒ‚|d�s†d}t||ƒ‚t|ƒ} d} d} znd}t| ƒD] } |dK}||  || ¡O}�q¤|d| K}t| dƒD] } |dK}||  || ¡O}�qÞ|WSt �y<}ztd||fƒd‚WYd}~n d}~00dS)NrÚé-édú(éZz chars elided)iÓÿÿÿz"At most 45 characters expected in r)ú:)Úmaxsplitráz At least %d parts expected in %rrÛrLrÜú%xréÿÿz!At most %d colons permitted in %rz At most one '::' permitted in %rrz0Leading ':' only permitted as part of '::' in %rz1Trailing ':' only permitted as part of '::' in %rz/Expected at most %d other parts with '::' in %rz,Exactly %d parts expected without '::' in %r) rr%Ú _HEXTET_COUNTr$r rCr,rFr¦Ú _parse_hextetr)rjrwZshortenZ _max_partsÚpartsZ _min_partsrgÚipv4_intràZ skip_indexÚiZparts_hiZparts_loZ parts_skippedrnr r r rvcs’  ,ÿ   (              z_BaseV6._ip_int_from_stringcCs>|j |¡std|ƒ‚t|ƒdkr4d}t||ƒ‚t|dƒS)NzOnly hex digits permitted in %rrz$At most 4 characters permitted in %rr)Ú _HEX_DIGITSÚ issupersetrr%rt)rjZ hextet_strrgr r r rÔs     z_BaseV6._parse_hextetc Cs¢d}d}d}d}t|ƒD]>\}}|dkrN|d7}|dkr<|}||krV|}|}qd}d}q|dkrž||}|t|ƒkr~|dg7}dg|||…<|dkrždg|}|S)NrLrr—r)Ú)Ú enumerater%) rjÚhextetsZbest_doublecolon_startZbest_doublecolon_lenZdoublecolon_startZdoublecolon_lenÚindexZhextetZbest_doublecolon_endr r r Ú_compress_hextetsîs0ÿ   z_BaseV6._compress_hextetsNcsZ|durt|jƒ}||jkr$tdƒ‚d|‰‡fdd„tdddƒDƒ}| |¡}d |¡S) NzIPv6 address is too largeú%032xcs&g|]}dtˆ||d…dƒ‘qS)rrr)rt©rðr–©Zhex_strr r Ú 3ròz/_BaseV6._string_from_ip_int..rrrr)rtr,r>rr¦r!rä)rjrnrr r$r r�s   z_BaseV6._string_from_ip_intcsŒt|tƒrt|jƒ}nt|tƒr,t|jƒ}nt|ƒ}| |¡}d|‰‡fdd„tdddƒDƒ}t|ttfƒr‚dd  |¡|j fSd  |¡S) Nr"csg|]}ˆ||d…‘qS)rr r#r$r r r%Hròz8_BaseV6._explode_shorthand_ip_string..rrrr¤r) r9rr#rPrr1rvr¦rTrärN)r]rwrnrr r$r r[8s     z$_BaseV6._explode_shorthand_ip_stringcCs&|jddd… dd¡}d |¡dS)NrLrrrÛú .ip6.arpa)r^Úreplacerä)r]Ú reverse_charsr r r raMsz_BaseV6._reverse_pointercCs:| d¡\}}}|sd}n|r&d|vr2td|ƒ‚||fS)Nú%zInvalid IPv6 address: "%r")Ú partitionr)rwr&ÚsepÚscope_idr r r Ú_split_scope_idVs   z_BaseV6._split_scope_idcCs|jSrArår\r r r ræjsz_BaseV6.max_prefixlencCs|jSrAr’r\r r r r<nsz_BaseV6.version)N)rrrr~rMÚ IPV6LENGTHr>rÚ frozensetrr=rÖr€rÙrvrr!r�r[rarÔr-rrær<r r r r r ;s2    p  /    r cseZdZdZdd„Z‡fdd„Z‡fdd„Zdd „Z‡fd d „Zd d „Z ‡fdd„Z e dd„ƒZ e dd„ƒZ e dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe e ¡dd„ƒƒZe dd„ƒZe d d!„ƒZe d"d#„ƒZe d$d%„ƒZe d&d'„ƒZe d(d)„ƒZ‡ZS)*r )r,Ú _scope_idrècCs�t|tƒr$| |¡||_d|_dSt|tƒrR| |d¡t |d¡|_d|_dSt|ƒ}d|vrpt d|›�ƒ‚|  |¡\}|_|  |¡|_dS)Nrrr!ré) r9rtrhr,r0ryrirÝr#rr-rvrêr r r rëys    zIPv6Address.__init__cs:|j}|durtƒ ¡Sd}tƒ ¡}|d|…›|›�S)Né)Ú ipv4_mappedr�r[)r]r2Ú prefix_lenÚraw_exploded_strr¡r r r[¡s   z(IPv6Address._explode_shorthand_ip_stringcsb|j}|durtƒ ¡Sd}tƒ ¡d|…}|j}|›|d›�ddd… dd¡}d |¡dS)Nr1Z008xrLrrrÛr&)r2r�rar[r,r'rä)r]r2r3r4rr(r¡r r ra©s  zIPv6Address._reverse_pointercCs>|j}|durtdt|ƒƒ‚|jd?}d| |¡t|ƒfS)Nz0Can not apply to non-IPv4-mapped IPv6 address %srz%s:%s)r2rr#r,r�)r]r2Zhigh_order_bitsr r r Ú_ipv4_mapped_ipv6_to_str´s  z$IPv6Address._ipv4_mapped_ipv6_to_strcs:|j}|durtƒ ¡}n| ¡}|jr6|d|jS|S)Nr))r2r�rŽr5r0)r]r2rwr¡r r rŽÆs  zIPv6Address.__str__cCst|j|jfƒSrA)r�r,r0r\r r r r‘ÎszIPv6Address.__hash__cs2tƒ |¡}|turtS|s dS|jt|ddƒkS)NFr0)r�r„rWr0Úgetattrrr¡r r r„Ñs  zIPv6Address.__eq__cCs|jSrA)r0r\r r r r,Ùs zIPv6Address.scope_idcCs t|jƒSrA)r r,r\r r r rìåszIPv6Address.packedcCs |j}|dur|jS||jjvSrA)r2rÇrírø©r]r2r r r rÇês zIPv6Address.is_multicastcs.ˆj}|dur|jSt‡fdd„ˆjjDƒƒS)Nc3s|]}ˆ|vVqdSrAr r#r\r r rñròz*IPv6Address.is_reserved..)r2rÌróríÚ_reserved_networksr7r r\r rÌøs zIPv6Address.is_reservedcCs |j}|dur|jS||jjvSrA)r2rÍrírûr7r r r rÍszIPv6Address.is_link_localcCs ||jjvSrA)ríÚ_sitelocal_networkr\r r r Ú is_site_locals zIPv6Address.is_site_localcsHˆj}|dur|jSt‡fdd„ˆjjDƒƒoFt‡fdd„ˆjjDƒƒS)Nc3s|]}ˆ|vVqdSrAr rïr\r r rñ6ròz)IPv6Address.is_private..c3s|]}ˆ|vVqdSrAr rïr\r r rñ7rò)r2rÎrórírôrõrör7r r\r rÎ!s þzIPv6Address.is_privatecCs|j}|dur|jS|j SrA)r2rÏrÎr7r r r rÏ:szIPv6Address.is_globalcCs|j}|dur|jS|jdkSrq)r2rÐr,r7r r r rÐNs zIPv6Address.is_unspecifiedcCs|j}|dur|jS|jdkSr()r2rÑr,r7r r r rÑ\s zIPv6Address.is_loopbackcCs |jd?dkrdSt|jd@ƒS)Nrrìÿÿ©r,r r\r r r r2js zIPv6Address.ipv4_mappedcCs4|jd?dkrdSt|jd?d@ƒt|jd@ƒfS)Né`i é@r;r<r\r r r Úteredows ÿzIPv6Address.teredocCs$|jd?dkrdSt|jd?d@ƒS)Népi éPr;r<r\r r r Ú sixtofour†s zIPv6Address.sixtofour)rrrr~rër[rar5rŽr‘r„rr,rìrÇrÌrÍr:rÒrürÎrÏrÐrÑr2r?rBr¢r r r¡r r ssF(                r csœeZdZdd„Zejdd„ƒZ‡fdd„Zdd„Zd d „Z d d „Z e j Z e d d„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe ‡fdd„ƒZ‡ZS)rcCsD| |¡\}}t ||¡t||fdd�|_|jj|_|jj|_dSrý)r{r rërr©r¯rNrþr r r rë–s   zIPv6Interface.__init__cCs|jjSrArr\r r r r³žszIPv6Interface.hostmaskcsdtƒ ¡|jfSr£)r�rŽrNr\r¡r r rŽ¢s ÿzIPv6Interface.__str__cCsDt ||¡}|tus|s|Sz|j|jkWSty>YdS0dSr°)r r„rWr©rOrr r r r„¦s   zIPv6Interface.__eq__cCsPt ||¡}|tur|Sz|j|jkp4|j|jko4|WStyJYdS0dSr°)r r†rWr©rOrr r r r†²s  ÿ zIPv6Interface.__lt__cCst|j|jt|jjƒfƒSrArr\r r r r‘¾szIPv6Interface.__hash__cCs t|jƒSrA)r r,r\r r r r1ÃszIPv6Interface.ipcCsd| |j¡|jfSrµrr\r r r r´Çs ÿzIPv6Interface.with_prefixlencCsd| |j¡|jfSrµrr\r r r r·Ìs ÿzIPv6Interface.with_netmaskcCsd| |j¡|jfSrµrr\r r r r¸Ñs ÿzIPv6Interface.with_hostmaskcCs|jdko|jjSrq)r,r©rÐr\r r r rÐÖszIPv6Interface.is_unspecifiedcstƒjo|jjSrA)r�rÑr©r\r¡r r rÑÚszIPv6Interface.is_loopback)rrrrërÒrÓr³rŽr„r†r‘rZr}rr1r´r·r¸rÐrÑr¢r r r¡r r”s(         rc@s.eZdZeZd dd„Zdd„Zedd„ƒZdS) rTcs¤| |¡\‰}tˆƒ|_| |¡\|_|_t|jƒ}|t|jƒ@|krl|rXtd|ƒ‚nt|t|jƒ@ƒ|_|j|jdkr†|j |_ n|j|jkr ‡fdd„|_ dS)Nrr)cs tˆƒgSrA)r r rr r r  ròz&IPv6Network.__init__..) r{r rPrÙr¯rNrtrr=r¬r«r r rr rëïs  ÿ  zIPv6Network.__init__ccs<t|jƒ}t|jƒ}t|d|dƒD]}| |¡Vq&dSr(r¥r¨r r r r« s  zIPv6Network.hostscCs|jjo|jjSrA)rPr:rIr\r r r r:+ s ÿzIPv6Network.is_site_localN)T) rrrr r§rër«rr:r r r r rßs  0 rc@sðeZdZedƒZedƒZedƒedƒedƒedƒedƒedƒed ƒed ƒed ƒed ƒedƒg Zed ƒedƒedƒedƒedƒedƒgZedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒed ƒed!ƒgZed"ƒZ d#S)$Ú_IPv6Constantsz fe80::/10zff00::/8z::1/128z::/128z ::ffff:0:0/96z64:ff9b:1::/48z100::/64z 2001::/23z 2001:db8::/32z 2002::/16z 3fff::/20zfc00::/7z 2001:1::1/128z 2001:1::2/128z 2001:3::/32z2001:4:112::/48z 2001:20::/28z 2001:30::/28z::/8z100::/8z200::/7z400::/6z800::/5z1000::/4z4000::/3z6000::/3z8000::/3zA000::/3zC000::/3zE000::/4zF000::/5zF800::/6zFE00::/9z fec0::/10N) rrrrrûrørôrör8r9r r r r rC; s>óú       ø rC)T)#Ú __version__rÒrçr.rrr rrrrr r'r2r6r@rKrSrYrZr™Útotal_orderingr:rTrÕr rrr rír r rrrCr r r r Ú sZ "7163kH CR&:#K\/