???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
bW                 @   s   d Z ddlZddlZddlZddlZddlmZmZm	Z	 ej
dZdd Zej
dZej
d	Zej
d
Zdd ZdZdd ZdS )zIPv6 helper functions.    N   )xrangebinary_typemaybe_decodes   0+([0-9a-f]+)c             C   s  t | dkrtdtj| }g }d}t |}xJ||k rx|||d  }tj|}|dk	rd|jd}|j| |d7 }q0W d}d}d}	d}
xNtdD ]B}|| d	kr|
r|}||	 }||kr|	}|}d}
q|
s|}	d
}
qW |
 rd}||	 }||k r|	}|}|dkr|dkrb|dks4|dkrb|d dkrb|dkrDd}nd}|t	j
j| dd  }n,dj|d| d dj||| d  }n
dj|}t|S )zConvert a network format IPv6 address into text.

    @param address: the binary address
    @type address: string
    @rtype: string
    @raises ValueError: the address isn't 16 bytes long
       z IPv6 addresses are 16 bytes longr      Nr   F      0T      s   ffffs   ::s   ::ffff:      :)len
ValueErrorbinasciiZhexlify_leading_zeromatchgroupappendr   dnsipv4	inet_ntoajoinr   )addresshexchunksilchunkmZ
best_startZbest_lenstartZlast_was_zeroendZcurrent_lenprefix r$   /usr/lib/python3.6/ipv6.pyr      s^    	










r   s   (.*):(\d+\.\d+\.\d+\.\d+)$s   ::.*s   .*::$c       
      C   s  t | ts| j } | dkrd} tj| }|dk	rvttjj|j	d}d|j	dj
 |d |d |d |d f j } tj| }|dk	r| dd } ntj| }|dk	r| dd } | jd	}t|}|d
krtjjd}g }x|D ]}|dkr.|r tjjd}xftdd
| d D ]}|jd qW qt|}	|	dkrHtjj|	dkrbdd|	  | }|j| qW |d
k r| rtjjdj|} y
tj| S  tjtfk
r   tjjY nX dS )zConvert a text format IPv6 address into network format.

    @param text: the textual address
    @type text: string
    @rtype: string
    @raises dns.exception.SyntaxError: the text was not properly formatted
    s   ::s   0::N   z%s:%02x%02x:%02x%02xr   r      r   r   F    Ts   0000r   r	   r   )
isinstancer   encode
_v4_endingr   	bytearrayr   r   	inet_atonr   decode_colon_colon_start_colon_colon_endsplitr   Z	exceptionSyntaxErrorr   r   r   r   Z	unhexlifyError	TypeError)
textr    br   r   Z
seen_emptyZ	canonicalcr   Zlcr$   r$   r%   r-   b   sR    










r-       
   s   c             C   s
   | j tS )N)
startswith_mapped_prefix)r   r$   r$   r%   	is_mapped   s    r<   s
             s             )__doc__rer   Zdns.exceptionr   Zdns.ipv4Z_compatr   r   r   compiler   r   r+   r/   r0   r-   r;   r<   r$   r$   r$   r%   <module>   s   
C


G