
    ӊ^7                      P    d Z ddlmZmZ ddlmZmZ dZ	dZ
d Zd Zd Zd	 Zd
 ZdS )z=Fallback routines for Python's standard library socket module    )unpackpack)_bytes_join_is_str   
   c                     t          |           st          dt          |           z            t          |           dk    rt	          d          dt          d|           z  S )zR
    Convert an IP address from 32-bit packed binary format to string format.
    zstring type expected, not %s   *invalid length of packed IP address stringz%d.%d.%d.%d4B)r   	TypeErrortypelen
ValueError_unpack)	packed_ips    2/usr/lib/python3/dist-packages/netaddr/fbsocket.py	inet_ntoar      sd     9 J6iHIII
9~~EFFF743333    c                 d   g }g }d }d}t          |           D ]K\  }}|dk    r
||}|dz  }n!|dk    r|                    ||f           d }d}|                    |           L|dk    r|                    ||f           t          |          dk    r|                    d            |d         }|D ]}|d         |d         k    r|}|\  }	}
|d|
         dgz   ||
|	z   d          z   }|d         dk    r|                    dd           |d         dk    r|                    d           |S )Nr   0   c                     | d         S )Nr    )xs    r   <lambda>z&_compact_ipv6_tokens.<locals>.<lambda>9   s
    QqT r   )key )	enumerateappendr   sortinsert)tokens
new_tokens	positionsstart_index
num_tokensidxtokenbest_positionpositionlength	start_idxs              r   _compact_ipv6_tokensr/      s   JIKJ  '' ! !
UC<<"!!OJJA~~  *k!:;;;KJ%     A~~*k2333 9~~>>***!!! 	) 	)H{]1--- (+),t3jVASATAT6UU
 a=Ba$$$b>Rb!!!r   c                    | t           k    rt          |          S | t          k    rt          |          dk    st	          |          st          d          d t          d|          D             }t          t          d|                    }d}t          t          |                    D ]\  }}|}|d|z  z  }||z  }d|cxk     rdk    sn |dz	  dk    r<t          d	gd
 |dd         D             R  }t          |          }	|dd         |	gz   }d                    t          |                    S t          d| z            )zBConvert an packed IP address of the given family to string format.   r   c                     g | ]}d |z  S )%xr   .0is     r   
<listcomp>zinet_ntop.<locals>.<listcomp>V   s    >>>q$(>>>r   z>8Hr     l        z>2Hc                 .    g | ]}t          |d           S r1   intr4   s     r   r7   zinet_ntop.<locals>.<listcomp>b   s     (I(I(IQ(I(I(Ir   N:zunknown address family %d)AF_INETr   AF_INET6r   r   r   r   listr    reversed_packjoinr/   )
afr   r$   wordsint_valr6   numwordpacked_ipv4ipv4_strs
             r   	inet_ntoprM   L   sq   	W}}###	xy>>Rwy'9'9IJJJ>>GE9$=$=>>> WUI..//00 	% 	%FAsD26>DnGGG))))z))))W]f-D-DJ(I(IVBCC[(I(I(IJJJK --HAbD\XJ.Fxx,V445554r9:::r   c                    t          |           rt          d| z            }|                     d          }t          |          dk    rg }|D ]}|                    d          s(|                    d          rt          |          dk    r|	 t          |          }n# t          $ r |w xY w|dz	  dk    r||                    t          d	|                     t          |          S |t          d
t          |           z            )a  
    Convert an IP address in string format (123.45.67.89) to the 32-bit packed
    binary format used in low-level network functions. Differs from inet_aton
    by only support decimal octets. Using octal or hexadecimal values will
    raise a ValueError exception.
    illegal IP address string %r.r
   0xr   r      r   Bz#argument should be a string, not %s)
r   r   splitr   
startswithr=   r!   rD   r   r   )	ip_stringinvalid_addrr$   rG   r*   octets         r   _inet_pton_af_inetrY   k   s6    y !"@9"LMM%% v;;!E 
0 
0##D)) 'e.>.>s.C.C 'E

UV&&'JJEE! ' ' '&&' QJ1$$&&U3..////u%%%
:T)__L
M
MMs   B  B-c           	      n   | t           k    rt          |          S | t          k    r~t          d|z            }g }t	          |          s|d|v r|d|v r|dk    rd                                dz  S 	 |                    d          \  }}n# t          $ r |w xY wg }g }|dk    r|                    d          }|dk    r|                    d          }t          |          rd|d	         v rt          |                                          }|	                    d
t          d|dd                   d         z             |	                    d
t          d|dd                   d         z             t          |          t          |          z   }	d|	cxk    rdk    sn |dt          |          t          |          z   z
  }
d |D             d t          |
          D             z   d |D             z   }	 ||z   D ]#}t          |d          }d|cxk    rdk    sn |$nk# t          $ r |w xY wd|v rT|                    d          }d|v r|dd	         }|dd	         g dk    r||d	                                         dvr|t          |          dk    r|t          |                                          }|	                    d
t          d|dd                   d         z             |	                    d
t          d|dd                   d         z             d |D             }nt          |          dk    r|	 d |D             }|D ]}d|cxk    rdk    sn |n# t          $ r |w xY wd |D             }n|t          |          S t          d| z            )z|
    Convert an IP address from string format to a packed string suitable for
    use with low-level network functions.
    rO   r   z:: r1   r   r?   rP   r   r3   >Hr   r   r
      rR   c           	      J    g | ] }t          d t          |d                    !S r\   r1   rD   r=   r4   s     r   r7   zinet_pton.<locals>.<listcomp>   *    ;;;QtSBZZ((;;;r   c                 6    g | ]}d                                  S )z  )encoder4   s     r   r7   zinet_pton.<locals>.<listcomp>   s$    >>>""$$>>>r   c           	      J    g | ] }t          d t          |d                    !S r_   r`   r4   s     r   r7   zinet_pton.<locals>.<listcomp>   ra   r   r8   N)r   r   r   r   r   )r   ffffc           	      J    g | ] }t          d t          |d                    !S r_   r`   r4   s     r   r7   zinet_pton.<locals>.<listcomp>   s*    FFF!eD#a**55FFFr   c                 .    g | ]}t          |d           S r;   r<   )r5   r*   s     r   r7   zinet_pton.<locals>.<listcomp>   s     AAAc%nnAAAr   c                 .    g | ]}t          d |          S )r\   )rD   r4   s     r   r7   zinet_pton.<locals>.<listcomp>   s     999Q%a..999r   zUnknown address family %d)r@   rY   rA   r   r   rc   rT   r   popr!   r   ranger=   lowerr   )rF   rV   rW   valuesprefixsuffixl_prefixl_suffixrL   token_countgap_sizer*   rJ   r$   ipv6_prefixs                  r   	inet_ptonrt      s   
 
W}}!),,,	x!"@9"LMMy!! 	)9D  }}++#!*!6!6 # # #""# HH||!<<,,||!<<,, 8}} H!4!4-hllnn==wtXac]'C'CA'F FGGGwtXac]'C'CA'F FGGGh--#h--7K,,,,u,,,,""S]]S]]:<H <;(;;;>>eHoo>>>?;;(;;;< 
#%0 + +Eub>>D........** /+  # # #""# i"--)##"("+K"3B3'+D+D+DDD**"2,,..mCC** 6{{a''**1&**,,??HMM$x!})E)Ea)H"HIIIMM$x!})E)Ea)H"HIIIFFvFFFFF 6{{a''**'AA&AAAF!' / / E3333V3333"..  4/ " ' ' '&&' :9&999""6"""4r9:::s$   5B B )H+ +H8"M7 7NN)__doc__structr   r   r   rD   netaddr.compatr   r   r@   rA   r   r/   rM   rY   rt   r   r   r   <module>rx      s    D C 3 3 3 3 3 3 3 3 / / / / / / / /

4 
4 
4, , ,^; ; ;>N N NDi; i; i; i; i;r   