
    Eqg                     $   d Z ddlZddlZddlmZmZ ddlZddlZ ej	        d          Z
dedefdZ ej	        d          Z ej	        d	          Z ej	        d
          Zddeeef         dedefdZdZdedefdZdeeef         defdZdS )zIPv6 helper functions.    N)ListUnionz0+([0-9a-f]+)addressreturnc                    t          |           dk    rt          d          t          j        |           }g }d}t          |          }||k     rp|||dz                                            }t
                              |          }||                    d          }|                    |           |dz  }||k     pd}d}d}	d}
t          d	          D ]*}||         d
k    r|
r|}||	z
  }||k    r|	}|}d}
$|
s|}	d}
+|
rd	}||	z
  }||k    r|	}|}|dk    r|dk    rN|dk    s|dk    rB|d         dk    r6|dk    rd}nd}|t          j                            | dd                   z   }nWd                    |d|                   dz   d                    |||z   d                   z   }nd                    |          }|S )zConvert an IPv6 address in binary form to text form.

    *address*, a ``bytes``, the IPv6 address in binary form.

    Raises ``ValueError`` if the address isn't 16 bytes long.
    Returns a ``str``.
       z IPv6 addresses are 16 bytes longr      N   F   0T      ffffz::z::ffff:   :)len
ValueErrorbinasciihexlifydecode_leading_zeromatchgroupappendrangednsipv4	inet_ntoajoin)r   hexchunksilchunkm
best_startbest_lenstartlast_was_zeroendcurrent_lenprefixthexs                  :/var/www/html/env/lib/python3.11/site-packages/dns/ipv6.pyr   r      s6    7||r;<<<

7
#
#CF	ACA
a%%AAI%%'' &&=GGAJJEe	Q a%% JHEM1XX ! !!9 &!Ek))!&J*H % 	!E M #Ek!!J"H!||??AQ6!9PVCVCV1}}"CH..wrss|<<<DD ,--((6*x"7"9"9:;;< D xxK    s   (.*):(\d+\.\d+\.\d+\.\d+)$s   ::.*s   .*::$Ftextignore_scopec                    t          | t                    s|                                 }n| }|rJ|                    d          }t	          |          }|dk    r	|d         }n|dk    rt
          j        j        |dk    rt
          j        j        |                    d          r&|                    d          st
          j        j        |	                    d          r&|	                    d          st
          j        j        |dk    rd}t                              |          }|t
          j                            |                    d                    }|                    d	                                           d
|d         d|d	         dd
|d         d|d         d                                }t                               |          }||d	d         }n&t"                              |          }|
|dd         }|                    d          }t	          |          }|dk    rt
          j        j        d}g }	|D ]}
|
dk    rD|rt
          j        j        d}t%          dd|z
  d	z             D ]}|	                    d           Lt	          |
          }|dk    rt
          j        j        |dk    rdd|z
  z  |
z   }
|	                    |
           |dk     r|st
          j        j        d                    |	          }	 t+          j        |          S # t*          j        t0          f$ r t
          j        j        w xY w)a+  Convert an IPv6 address in text form to binary form.

    *text*, a ``str`` or ``bytes``, the IPv6 address in textual form.

    *ignore_scope*, a ``bool``.  If ``True``, a scope will be ignored.
    If ``False``, the default, it is an error for a scope to be present.

    Returns a ``bytes``.
       %   r   r0      :s   ::s   0::Nr
   r   02x   r   r   FTs   0000r	      0)
isinstancebytesencodesplitr   r   	exceptionSyntaxErrorendswith
startswith
_v4_endingr   r   	inet_atonr   r   _colon_colon_start_colon_colon_endr   r   r    r   	unhexlifyError	TypeError)r1   r2   btextpartsr$   r&   br"   
seen_empty	canonicalc_lcs                r/   rC   rC   h   sR    dE""  ,D!!JJ66!HEEUU-++||m''			 ennU&;&; m''			$		 (8(8(?(? m''	% 	A}Hqwwqzz**wwqzz  ""NNQqTNNqtNNN!A$NNAaDNNN
&(( 	 	  ''A}abb	""5))=#2#JE [[FFA1uum''JI    88 0m//J1a!eai(( * *  ))))* QBAvvm//QwwQV_)Q1uuZum''HHYE
(!%(((NI& ( ( (m''(s   L' '(Ms             c                 6    |                      t                    S )zIs the specified address a mapped IPv4 address?

    *address*, a ``bytes`` is an IPv6 address in binary form.

    Returns a ``bool``.
    )rA   _mapped_prefix)r   s    r/   	is_mappedrS      s     n---r0   c                 z    t           j                            t           j                            |                     S )a  Verify that *address* is a valid text form IPv6 address and return its
    canonical text form.  Addresses with scopes are rejected.

    *text*, a ``str`` or ``bytes``, the IPv6 address in textual form.

    Raises ``dns.exception.SyntaxError`` if the text is not valid.
    )r   ipv6r   rC   )r1   s    r/   canonicalizerV      s*     8ch0066777r0   )F)__doc__r   retypingr   r   dns.exceptionr   dns.ipv4compiler   r;   strr   rB   rD   rE   boolrC   rR   rS   rV    r0   r/   <module>r`      s]  $    				             
+,,Bu B B B B BJ RZ677
RZ)) 2:i(( X( X(E#u*% X(T X(e X( X( X( X(v ,.u . . . . .8uS%Z( 8S 8 8 8 8 8 8r0   