509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ct„jr+ ã               @   s&  d dddddddgZ dd	lZdd	lZdd	lZdd	lZdd	lZdd	lZydd	lZ	W n e
k
rl   dd	lZ	Y nX dd	lZdd
lmZ dZd	add„ ZeejjƒZdZdd„ ZdZdd„ ZdddddddgZdddddd d!d"d#d$d%d&gZg ZxeD ]Zejej ƒ ƒ qîW dtd'd(„Z!dud)d*„Z"d	d	d	d	d+œZ#ej$d,ej%ƒZ&d-d.„ Z'd/d0„ Z(ej$d1ej%ƒZ)ej$d2ej*ej%B ƒZ+ej$d3ej,ej%B ƒZ-d4d5„ Z.ej$d6ej,ej%B ƒZ/d7d8„ Z0d9d:„ Z1ej$d;ƒZ2ej$d<ƒZ3ej$d=ƒZ4ej$d>ƒZ5d?d@„ Z6ej$dAƒZ7dBdC„ Z8dDdE„ Z9dFdG„ Z:ej$dHej%ƒZ;dIdJ„ Z<dKdL„ Z=dMdN„ Z>dOdP„ Z?ej$dQej%ƒZ@dRdS„ ZAdTdU„ ZBdVdW„ ZCdXdY„ ZDdZZEej$d[ƒZFd\d]„ ZGd^d_„ ZHd`da„ ZIdbdc„ ZJG ddd „ d ƒZKG ded„ dƒZLG dfd„ deLƒZMdgdh„ ZNdidj„ ZOG dkdl„ dlƒZPG dmd„ dƒZQG dnd„ deRƒZSG dod„ deQƒZTdpdq„ ZUG drd„ deTƒZVG dsd„ deTƒZWd	S )vÚCookieÚ	CookieJarÚCookiePolicyÚDefaultCookiePolicyÚFileCookieJarÚLWPCookieJarÚ	LoadErrorÚMozillaCookieJaré    N)ÚtimegmFc              G   s(   t sd S tsdd l}|jdƒatj | Ž S )Nr	   zhttp.cookiejar)ÚdebugÚloggerÚloggingZ	getLogger)Úargsr   © r   ú&/usr/lib64/python3.6/http/cookiejar.pyÚ_debug.   s    
r   zQa filename was not supplied (nor was the CookieJar instance initialised with one)c              C   sJ   dd l } dd l}dd l}| jƒ }|jd |ƒ |jƒ }|jd| dd� d S )Nr	   zhttp.cookiejar bug!
%sé   )Ú
stacklevel)ÚioÚwarningsÚ	tracebackÚStringIOÚ	print_excÚgetvalueÚwarn)r   r   r   ÚfÚmsgr   r   r   Ú_warn_unhandled_exception<   s
    r   i²  c             C   s¨   | d d… \}}}}}}|t kr d|  ko2dkn  r d|  koJdkn  r d|  kobdkn  r d|  kozdkn  r d|  ko’dkn  r t| ƒS d S d S )	Né   é   é   é   r	   é   é;   é=   )Ú
EPOCH_YEARr
   )ÚttÚyearÚmonthZmdayÚhourÚminÚsecr   r   r   Ú_timegmK   s
    8Hr,   ZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc             C   s@   | d krt j jƒ }nt j j| ƒ}d|j|j|j|j|j|jf S )Nz%04d-%02d-%02d %02d:%02d:%02dZ)	ÚdatetimeÚutcnowÚutcfromtimestampr'   r(   Údayr)   ÚminuteÚsecond)ÚtÚdtr   r   r   Ú	time2isozY   s
    r5   c             C   sR   | d krt j jƒ }nt j j| ƒ}dt|jƒ  |jt|jd  |j|j	|j
|jf S )Nz#%s, %02d-%s-%04d %02d:%02d:%02d GMTr   )r-   r.   r/   ÚDAYSZweekdayr0   ÚMONTHSr(   r'   r)   r1   r2   )r3   r4   r   r   r   Útime2netscapel   s    r8   )ZGMTÚUTCZUTÚZz^([-+])?(\d\d?):?(\d\d)?$c             C   sj   d }| t krd}nTtj| ƒ}|rfdt|jdƒƒ }|jdƒrR|dt|jdƒƒ  }|jdƒdkrf| }|S )Nr	   i  r   é   é<   r   ú-)Ú	UTC_ZONESÚTIMEZONE_REÚsearchÚintÚgroup)ÚtzÚoffsetÚmr   r   r   Úoffset_from_tz_stringƒ   s    

rF   c             C   sˆ  t |ƒ}|tjkrd S ytj|jƒ ƒd }W nX tk
r„   yt |ƒ}W n tk
r\   d S X d|  kopdkn  r||}nd S Y nX |d kr’d}|d kržd}|d krªd}t | ƒ} t |ƒ}t |ƒ}t |ƒ}|dk �r0tjtjƒ ƒd }|d }	|}
|| |	 }|	|
 }	t	|	ƒdk�r0|	dk�r(|d }n|d }t
||| ||||fƒ}|d k	�r„|d k�r^d}|jƒ }t|ƒ}|d k�r|d S || }|S )Nr   r    r	   iè  éd   é2   r9   )rA   r-   ZMAXYEARÚMONTHS_LOWERÚindexÚlowerÚ
ValueErrorÚtimeZ	localtimeÚabsr,   ÚupperrF   )r0   ÚmonÚyrÚhrr*   r+   rC   ZimonZcur_yrrE   Ztmpr3   rD   r   r   r   Ú	_str2time‘   sV    

   

 



rS   zV^[SMTWF][a-z][a-z], (\d\d) ([JFMASOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$z+^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*aÒ  ^
    (\d\d?)            # day
       (?:\s+|[-\/])
    (\w+)              # month
        (?:\s+|[-\/])
    (\d+)              # year
    (?:
          (?:\s+|:)    # separator before clock
       (\d\d?):(\d\d)  # hour:min
       (?::(\d\d))?    # optional seconds
    )?                 # optional clock
       \s*
    ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+)? # timezone
       \s*
    (?:\(\w+\))?       # ASCII representation of timezone in parens.
       \s*$c             C   sÜ   t j| ƒ}|rl|jƒ }tj|d jƒ ƒd }t|d ƒ|t|d ƒt|d ƒt|d ƒt|d ƒf}t|ƒS | j	ƒ } t
jd| dƒ} d gd \}}}}}}	}
tj| ƒ}|d k	rÄ|jƒ \}}}}}}	}
nd S t||||||	|
ƒS )	Nr   r   r	   r;   é   é   Ú é   )ÚSTRICT_DATE_REr@   ÚgroupsrI   rJ   rK   rA   Úfloatr,   ÚlstripÚ
WEEKDAY_REÚsubÚLOOSE_HTTP_DATE_RErS   )ÚtextrE   ÚgrP   r&   r0   rQ   rR   r*   r+   rC   r   r   r   Ú	http2timeß   s    
"
ra   aÆ  ^
    (\d{4})              # year
       [-\/]?
    (\d\d?)              # numerical month
       [-\/]?
    (\d\d?)              # day
   (?:
         (?:\s+|[-:Tt])  # separator before clock
      (\d\d?):?(\d\d)    # hour:min
      (?::?(\d\d(?:\.\d*)?))?  # optional seconds (and fractional)
   )?                    # optional clock
      \s*
   ([-+]?\d\d?:?(:?\d\d)?
    |Z|z)?               # timezone  (Z is "zero meridian", i.e. GMT)
      \s*$c       
      C   sd   | j ƒ } d gd \}}}}}}}tj| ƒ}|d k	rL|jƒ \}}}}}}}}	nd S t|||||||ƒS )NrW   )r[   ÚISO_DATE_REr@   rY   rS   )
r_   r0   rP   rQ   rR   r*   r+   rC   rE   Ú_r   r   r   Úiso2time'  s    
rd   c             C   s*   | j dƒ\}}| jd |… | j|d …  S )Nr	   )ÚspanÚstring)ÚmatchÚstartÚendr   r   r   Ú	unmatchedH  s    rj   z^\s*([^=\s;,]+)z&^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"z^\s*=\s*([^\s;,]*)z\\(.)c       
      C   s  g }�x | D ]ø}|}g }xÜ|rôt j|ƒ}|rªt|ƒ}|jdƒ}tj|ƒ}|rlt|ƒ}|jdƒ}tjd|ƒ}n.tj|ƒ}|r–t|ƒ}|jdƒ}|jƒ }nd }|j	||fƒ q|j
ƒ jdƒrÜ|j
ƒ dd … }|rÖ|j	|ƒ g }qtjdd|ƒ\}}	|}qW |r|j	|ƒ qW |S )Nr   z\1ú,z^[=\s;]*rV   )ÚHEADER_TOKEN_REr@   rj   rB   ÚHEADER_QUOTED_VALUE_REÚHEADER_ESCAPE_REr]   ÚHEADER_VALUE_REÚrstripÚappendr[   Ú
startswithÚreÚsubn)
Zheader_valuesÚresultr_   Z	orig_textÚpairsrE   ÚnameÚvalueZnon_junkZnr_junk_charsr   r   r   Úsplit_header_wordsQ  s>    .






 
 ry   z([\"\\])c             C   s„   g }xt| D ]l}g }xN|D ]F\}}|d k	rTt jd|ƒsHtjd|ƒ}d| }d||f }|j|ƒ qW |r
|jdj|ƒƒ q
W dj|ƒS )Nz^\w+$z\\\1z"%s"z%s=%sz; z, )rs   r@   ÚHEADER_JOIN_ESCAPE_REr]   rq   Újoin)ZlistsÚheadersrv   ÚattrÚkÚvr   r   r   Újoin_header_words§  s    
 r€   c             C   s0   | j dƒr| dd … } | jdƒr,| d d… } | S )Nú"r   éÿÿÿÿ)rr   Úendswith)r_   r   r   r   Ústrip_quotesÀ  s
    

r„   c             C   s  d}g }xô| D ]ì}g }d}xÀt |jd	ƒƒD ]®\}}|jƒ }|jd
ƒ\}}	}
|jƒ }|sd|dkr*P nq*|	rp|
jƒ nd }
|dkrÊ|jƒ }||kr�|}|dkr®|
d k	r¨t|
ƒ}
d}n|dkrÊ|
d k	rÊtt|
ƒƒ}
|j||
fƒ q*W |r|� sð|jdƒ |j|ƒ qW |S )NÚexpiresÚdomainÚpathÚsecureÚversionÚportúmax-ageFú;ú=r	   TÚ0)r…   r†   r‡   rˆ   r‰   rŠ   r‹   )r‰   rŽ   )Ú	enumerateÚsplitÚstripÚ	partitionrK   r„   ra   rq   )Z
ns_headersZknown_attrsru   Z	ns_headerrv   Úversion_setZiiZparamÚkeyÚsepÚvalÚlcr   r   r   Úparse_ns_headersÇ  s@     

r˜   z\.\d+$c             C   s:   t j| ƒrdS | dkrdS | d dks2| d dkr6dS dS )NFrV   r	   Ú.r   Tr‚   )ÚIPV4_REr@   )r_   r   r   r   Úis_HDN  s    
r›   c             C   sl   | j ƒ } |j ƒ }| |krdS t| ƒs(dS | j|ƒ}|dksB|dkrFdS |jdƒsTdS t|dd … ƒshdS dS )NTFr   r	   r™   r‚   )rK   r›   Úrfindrr   )ÚAÚBÚir   r   r   Údomain_match  s    

r    c             C   s   t j| ƒrdS dS )NFT)rš   r@   )r_   r   r   r   Úliberal_is_HDNB  s    
r¡   c             C   sb   | j ƒ } |j ƒ }t| ƒot|ƒs0| |kr,dS dS |jdƒ}|rL| j|ƒrLdS | r^| |kr^dS dS )NTFr™   )rK   r¡   rr   rƒ   )r�   rž   Úinitial_dotr   r   r   Úuser_domain_matchL  s    
r£   z:\d+$c             C   sB   | j ƒ }tjj|ƒd }|dkr,| jddƒ}tjd|dƒ}|jƒ S )Nr   rV   ZHost)Úget_full_urlÚurllibÚparseZurlparseZ
get_headerÚcut_port_rer]   rK   )ÚrequestÚurlÚhostr   r   r   Úrequest_hosta  s    r«   c             C   s6   t | ƒ }}|jdƒdkr.tj|ƒ r.|d }||fS )Nr™   r   z.localr‚   )r«   Úfindrš   r@   )r¨   ÚerhnÚreq_hostr   r   r   Úeff_request_hostq  s    r¯   c             C   s4   | j ƒ }tjj|ƒ}t|jƒ}|jdƒs0d| }|S )Nú/)r¤   r¥   r¦   ZurlsplitÚescape_pathr‡   rr   )r¨   r©   Úpartsr‡   r   r   r   Úrequest_path|  s    

r³   c             C   s^   | j }|jdƒ}|dkrV||d d … }yt|ƒ W qZ tk
rR   td|ƒ d S X nt}|S )Nú:r	   r   znonnumeric port: '%s')rª   r¬   rA   rL   r   ÚDEFAULT_HTTP_PORT)r¨   rª   rŸ   rŠ   r   r   r   Úrequest_port†  s    

r¶   z%/;:@&=+$,!~*'()z%([0-9a-fA-F][0-9a-fA-F])c             C   s   d| j dƒjƒ  S )Nz%%%sr   )rB   rO   )rg   r   r   r   Úuppercase_escaped_char˜  s    r·   c             C   s   t jj| tƒ} tjt| ƒ} | S )N)r¥   r¦   ZquoteÚHTTP_PATH_SAFEÚESCAPED_CHAR_REr]   r·   )r‡   r   r   r   r±   š  s    
r±   c             C   sP   | j dƒ}|dkrL| |d d … }|j dƒ}t| ƒrL|dksD|dkrLd| S | S )Nr™   r	   r   Zlocal)r¬   r›   )ÚhrŸ   Úbr   r   r   Úreach¨  s    

r¼   c             C   s$   t | ƒ}t|t| jƒƒsdS dS d S )NTF)r«   r    r¼   Zorigin_req_host)r¨   r®   r   r   r   Úis_third_partyË  s    
r½   c               @   sJ   e Zd Zddd„Zdd„ Zddd„Zd	d
„ Zddd„Zdd„ Zdd„ Z	dS )r   Fc             C   s°   |d k	rt |ƒ}|d k	r$t t|ƒƒ}|d kr<|dkr<tdƒ‚|| _|| _|| _|| _|| _|jƒ | _	|| _
|| _|	| _|
| _|| _|| _|| _|| _|| _|| _tj|ƒ| _d S )NTz-if port is None, port_specified must be false)rA   rZ   rL   r‰   rw   rx   rŠ   Úport_specifiedrK   r†   Údomain_specifiedÚdomain_initial_dotr‡   Úpath_specifiedrˆ   r…   ÚdiscardÚcommentÚcomment_urlÚrfc2109ÚcopyÚ_rest)Úselfr‰   rw   rx   rŠ   r¾   r†   r¿   rÀ   r‡   rÁ   rˆ   r…   rÂ   rÃ   rÄ   ÚrestrÅ   r   r   r   Ú__init__î  s.      
zCookie.__init__c             C   s
   || j kS )N)rÇ   )rÈ   rw   r   r   r   Úhas_nonstandard_attr  s    zCookie.has_nonstandard_attrNc             C   s   | j j||ƒS )N)rÇ   Úget)rÈ   rw   Údefaultr   r   r   Úget_nonstandard_attr  s    zCookie.get_nonstandard_attrc             C   s   || j |< d S )N)rÇ   )rÈ   rw   rx   r   r   r   Úset_nonstandard_attr  s    zCookie.set_nonstandard_attrc             C   s,   |d krt j ƒ }| jd k	r(| j|kr(dS dS )NTF)rM   r…   )rÈ   Únowr   r   r   Ú
is_expired  s
     zCookie.is_expiredc             C   sX   | j d krd}n
d| j  }| j| | j }| jd k	rFd| j| jf }n| j}d||f S )NrV   r´   z%s=%sz<Cookie %s for %s>)rŠ   r†   r‡   rx   rw   )rÈ   ÚpÚlimitZ	namevaluer   r   r   Ú__str__%  s    
 

zCookie.__str__c             C   sp   g }x,dD ]$}t | |ƒ}|jd|t|ƒf ƒ q
W |jdt| jƒ ƒ |jdt| jƒ ƒ d| jjdj|ƒf S )Nr‰   rw   rx   rŠ   r¾   r†   r¿   rÀ   r‡   rÁ   rˆ   r…   rÂ   rÃ   rÄ   z%s=%szrest=%sz
rfc2109=%sz%s(%s)z, )r‰   rw   rx   rŠ   r¾   r†   r¿   rÀ   r‡   rÁ   rˆ   r…   rÂ   rÃ   rÄ   )Úgetattrrq   ÚreprrÇ   rÅ   Ú	__class__Ú__name__r{   )rÈ   r   rw   r}   r   r   r   Ú__repr__/  s       
zCookie.__repr__)F)N)N)
rØ   Ú
__module__Ú__qualname__rÊ   rË   rÎ   rÏ   rÑ   rÔ   rÙ   r   r   r   r   r   Ü  s   
 


c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r   c             C   s
   t ƒ ‚d S )N)ÚNotImplementedError)rÈ   Úcookier¨   r   r   r   Úset_okG  s    zCookiePolicy.set_okc             C   s
   t ƒ ‚d S )N)rÜ   )rÈ   rÝ   r¨   r   r   r   Ú	return_okP  s    zCookiePolicy.return_okc             C   s   dS )NTr   )rÈ   r†   r¨   r   r   r   Údomain_return_okT  s    zCookiePolicy.domain_return_okc             C   s   dS )NTr   )rÈ   r‡   r¨   r   r   r   Úpath_return_okY  s    zCookiePolicy.path_return_okN)rØ   rÚ   rÛ   rÞ   rß   rà   rá   r   r   r   r   r   >  s   		c               @   sö   e Zd ZdZdZdZdZeeB Zdddddddddeddfdd	„Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ ZdS )6r   r   r   rT   r	   NTFc             C   sp   || _ || _|| _|| _|| _|| _|	| _|
| _|| _|| _	|d k	rPt
|ƒ| _nf | _|d k	rft
|ƒ}|| _d S )N)ÚnetscapeÚrfc2965Úrfc2109_as_netscapeÚhide_cookie2Ústrict_domainÚstrict_rfc2965_unverifiableÚstrict_ns_unverifiableÚstrict_ns_domainÚstrict_ns_set_initial_dollarÚstrict_ns_set_pathÚtupleÚ_blocked_domainsÚ_allowed_domains)rÈ   Úblocked_domainsÚallowed_domainsrâ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   r   r   r   rÊ   i  s     zDefaultCookiePolicy.__init__c             C   s   | j S )N)rí   )rÈ   r   r   r   rï   Š  s    z#DefaultCookiePolicy.blocked_domainsc             C   s   t |ƒ| _d S )N)rì   rí   )rÈ   rï   r   r   r   Úset_blocked_domains�  s    z'DefaultCookiePolicy.set_blocked_domainsc             C   s"   x| j D ]}t||ƒrdS qW dS )NTF)rí   r£   )rÈ   r†   Zblocked_domainr   r   r   Ú
is_blocked‘  s    
zDefaultCookiePolicy.is_blockedc             C   s   | j S )N)rî   )rÈ   r   r   r   rð   —  s    z#DefaultCookiePolicy.allowed_domainsc             C   s   |d k	rt |ƒ}|| _d S )N)rì   rî   )rÈ   rð   r   r   r   Úset_allowed_domainsš  s    z'DefaultCookiePolicy.set_allowed_domainsc             C   s0   | j d krdS x| j D ]}t||ƒrdS qW dS )NFT)rî   r£   )rÈ   r†   Zallowed_domainr   r   r   Úis_not_allowed   s    

z"DefaultCookiePolicy.is_not_allowedc             C   sB   t d|j|jƒ x,dD ]$}d| }t| |ƒ}|||ƒsd	S qW d
S )Nz - checking cookie %s=%sr‰   Úverifiabilityrw   r‡   r†   rŠ   Zset_ok_FT)r‰   rõ   rw   r‡   r†   rŠ   )r   rw   rx   rÕ   )rÈ   rÝ   r¨   ÚnÚfn_nameÚfnr   r   r   rÞ   ¨  s    


zDefaultCookiePolicy.set_okc             C   s^   |j d krtd|j|jƒ dS |j dkr<| j r<tdƒ dS |j dkrZ| j rZtdƒ dS dS )Nz0   Set-Cookie2 without version attribute (%s=%s)Fr	   z$   RFC 2965 cookies are switched offz$   Netscape cookies are switched offT)r‰   r   rw   rx   rã   râ   )rÈ   rÝ   r¨   r   r   r   Úset_ok_version»  s    
z"DefaultCookiePolicy.set_ok_versionc             C   sJ   |j rFt|ƒrF|jdkr*| jr*tdƒ dS |jdkrF| jrFtdƒ dS dS )Nr	   z>   third-party RFC 2965 cookie during unverifiable transactionFz>   third-party Netscape cookie during unverifiable transactionT)Úunverifiabler½   r‰   rç   r   rè   )rÈ   rÝ   r¨   r   r   r   Úset_ok_verifiabilityÊ  s    z(DefaultCookiePolicy.set_ok_verifiabilityc             C   s0   |j dkr,| jr,|jjdƒr,td|jƒ dS dS )Nr	   ú$z'   illegal name (starts with '$'): '%s'FT)r‰   rê   rw   rr   r   )rÈ   rÝ   r¨   r   r   r   Úset_ok_nameÖ  s
    zDefaultCookiePolicy.set_ok_namec             C   sL   |j rHt|ƒ}|jdks(|jdkrH| jrH|j|jƒ rHtd|j|ƒ dS dS )Nr	   z7   path attribute %s is not a prefix of request path %sFT)rÁ   r³   r‰   rë   rr   r‡   r   )rÈ   rÝ   r¨   Úreq_pathr   r   r   Úset_ok_pathß  s    

zDefaultCookiePolicy.set_ok_pathc             C   sö  | j |jƒrtd|jƒ dS | j|jƒr8td|jƒ dS |j�ròt|ƒ\}}|j}| jrÌ|jdƒdkrÌ|jdƒ}|jdd|ƒ}|dkrÌ||d d … }||d |… }	|	j	ƒ d$krÌt
|ƒdkrÌtd|ƒ dS |jdƒ� ræ|dd … }
n|}
|
jdƒdk}| �r|dk�rtd|ƒ dS |jdk�rb|j|ƒ �rb|jdƒ �rbd| j|ƒ �rbtd ||ƒ dS |jdk�s|| j| j@ �r˜t||ƒ�s˜td!||ƒ dS |jdk�s²| j| j@ �rò|d t
|ƒ … }|jdƒdk�ròtj|ƒ �ròtd"||ƒ dS d#S )%Nz"   domain %s is in user block-listFz&   domain %s is not in user allow-listr™   r   r	   r   ÚcoÚacÚcomÚeduÚorgÚnetÚgovÚmilrA   ÚaeroÚbizÚcatÚcoopÚinfoÚjobsÚmobiÚmuseumrw   ÚproÚtravelÚeuz&   country-code second level domain %sz.localz/   non-local domain %s contains no embedded dotzO   effective request-host %s (even with added initial dot) does not end with %sz5   effective request-host %s does not domain-match %sz.   host prefix %s for domain %s contains a dotT)r   r  r  r  r  r  r  r  rA   r  r	  r
  r  r  r  r  r  rw   r  r  r  )rò   r†   r   rô   r¿   r¯   ræ   Úcountrœ   rK   Úlenrr   r¬   r‰   rƒ   ré   ÚDomainRFC2965Matchr    ÚDomainStrictNoDotsrš   r@   )rÈ   rÝ   r¨   r®   r­   r†   rŸ   ÚjZtldZsldZundotted_domainZembedded_dotsZhost_prefixr   r   r   Úset_ok_domainê  sf    
  
z!DefaultCookiePolicy.set_ok_domainc             C   s†   |j r‚t|ƒ}|d krd}nt|ƒ}x\|jjdƒD ]:}yt|ƒ W n tk
r`   td|ƒ dS X ||kr2P q2W td||jƒ dS dS )NÚ80rk   z   bad port %s (not numeric)Fz$   request port (%s) not found in %sT)r¾   r¶   ÚstrrŠ   r�   rA   rL   r   )rÈ   rÝ   r¨   Úreq_portrÒ   r   r   r   Úset_ok_port%  s"    

zDefaultCookiePolicy.set_ok_portc             C   sB   t d|j|jƒ x,dD ]$}d| }t| |ƒ}|||ƒsd	S qW d
S )Nz - checking cookie %s=%sr‰   rõ   rˆ   r…   rŠ   r†   Z
return_ok_FT)r‰   rõ   rˆ   r…   rŠ   r†   )r   rw   rx   rÕ   )rÈ   rÝ   r¨   rö   r÷   rø   r   r   r   rß   :  s    	


zDefaultCookiePolicy.return_okc             C   s@   |j dkr| j rtdƒ dS |j dkr<| j r<tdƒ dS dS )Nr	   z$   RFC 2965 cookies are switched offFz$   Netscape cookies are switched offT)r‰   rã   r   râ   )rÈ   rÝ   r¨   r   r   r   Úreturn_ok_versionL  s    z%DefaultCookiePolicy.return_ok_versionc             C   sJ   |j rFt|ƒrF|jdkr*| jr*tdƒ dS |jdkrF| jrFtdƒ dS dS )Nr	   z>   third-party RFC 2965 cookie during unverifiable transactionFz>   third-party Netscape cookie during unverifiable transactionT)rú   r½   r‰   rç   r   rè   )rÈ   rÝ   r¨   r   r   r   Úreturn_ok_verifiabilityU  s    z+DefaultCookiePolicy.return_ok_verifiabilityc             C   s    |j r|jdkrtdƒ dS dS )NZhttpsz(   secure cookie with non-secure requestFT)rˆ   Útyper   )rÈ   rÝ   r¨   r   r   r   Úreturn_ok_securea  s    z$DefaultCookiePolicy.return_ok_securec             C   s   |j | jƒrtdƒ dS dS )Nz   cookie expiredFT)rÑ   Ú_nowr   )rÈ   rÝ   r¨   r   r   r   Úreturn_ok_expiresg  s    z%DefaultCookiePolicy.return_ok_expiresc             C   sP   |j rLt|ƒ}|d krd}x0|j jdƒD ]}||kr(P q(W td||j ƒ dS dS )Nr  rk   z0   request port %s does not match cookie port %sFT)rŠ   r¶   r�   r   )rÈ   rÝ   r¨   r  rÒ   r   r   r   Úreturn_ok_portm  s    
z"DefaultCookiePolicy.return_ok_portc             C   s¶   t |ƒ\}}|j}|r,|jdƒ r,d| }n|}|jdkrb| j| j@ rb|j rb||krbtdƒ dS |jdkrˆt||ƒ rˆtd||ƒ dS |jdkr²d| j	|ƒ r²td||ƒ dS dS )Nr™   r	   zQ   cookie with unspecified domain does not string-compare equal to request domainFzQ   effective request-host name %s does not domain-match RFC 2965 cookie domain %sz;   request-host %s does not match Netscape cookie domain %sT)
r¯   r†   rr   r‰   ré   ÚDomainStrictNonDomainr¿   r   r    rƒ   )rÈ   rÝ   r¨   r®   r­   r†   Ú	dotdomainr   r   r   Úreturn_ok_domain{  s&    

z$DefaultCookiePolicy.return_ok_domainc             C   sš   t |ƒ\}}|jdƒsd| }|jdƒs0d| }|rJ|jdƒ rJd| }n|}|j|ƒp`|j|ƒsfdS | j|ƒr~td|ƒ dS | j|ƒr–td|ƒ dS dS )Nr™   Fz"   domain %s is in user block-listz&   domain %s is not in user allow-listT)r¯   rr   rƒ   rò   r   rô   )rÈ   r†   r¨   r®   r­   r%  r   r   r   rà   –  s"    






z$DefaultCookiePolicy.domain_return_okc             C   s0   t d|ƒ t|ƒ}|j|ƒs,t d||ƒ dS dS )Nz- checking cookie path=%sz  %s does not path-match %sFT)r   r³   rr   )rÈ   r‡   r¨   rþ   r   r   r   rá   °  s    

z"DefaultCookiePolicy.path_return_ok)rØ   rÚ   rÛ   r  r$  r  ZDomainLiberalZDomainStrictrÊ   rï   rñ   rò   rð   ró   rô   rÞ   rù   rû   rý   rÿ   r  r  rß   r  r  r   r"  r#  r&  rà   rá   r   r   r   r   r   _  sJ   	;	c             C   s   t | jƒ ƒ}t| j|ƒS )N)ÚsortedÚkeysÚmaprÌ   )Zadictr(  r   r   r   Úvals_sorted_by_key¹  s    r*  c             c   sZ   t | ƒ}xL|D ]D}d} y
|j W n tk
r4   Y nX d} t|ƒE d H  | s|V  qW d S )NFT)r*  ÚitemsÚAttributeErrorÚ
deepvalues)ÚmappingÚvaluesÚobjr   r   r   r-  ½  s    

r-  c               @   s   e Zd ZdS )ÚAbsentN)rØ   rÚ   rÛ   r   r   r   r   r1  Ï  s    r1  c               @   sø   e Zd ZejdƒZejdƒZejdƒZejdƒZejdƒZ	ejdej
ƒZd2dd	„Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd3d$d%„Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Z dS )4r   z\Wz([\"\\])z\.?[^.]*z[^.]*z^\.+z^\#LWP-Cookies-(\d+\.\d+)Nc             C   s(   |d krt ƒ }|| _tjƒ | _i | _d S )N)r   Ú_policyÚ
_threadingÚRLockÚ_cookies_lockÚ_cookies)rÈ   Úpolicyr   r   r   rÊ   à  s
    
zCookieJar.__init__c             C   s
   || _ d S )N)r2  )rÈ   r7  r   r   r   Ú
set_policyè  s    zCookieJar.set_policyc             C   s”   g }| j j||ƒsg S td|ƒ | j| }xd|jƒ D ]X}| j j||ƒsHq4|| }x:|jƒ D ].}| j j||ƒsvtdƒ qZtdƒ |j|ƒ qZW q4W |S )Nz!Checking %s for cookies to returnz   not returning cookiez   it's a match)	r2  rà   r   r6  r(  rá   r/  rß   rq   )rÈ   r†   r¨   ÚcookiesZcookies_by_pathr‡   Zcookies_by_namerÝ   r   r   r   Ú_cookies_for_domainë  s     

zCookieJar._cookies_for_domainc             C   s.   g }x$| j jƒ D ]}|j| j||ƒƒ qW |S )N)r6  r(  Úextendr:  )rÈ   r¨   r9  r†   r   r   r   Ú_cookies_for_requestý  s    zCookieJar._cookies_for_requestc       	      C   sF  |j dd„ dd� d}g }�x$|D �]}|j}|sLd}|dkrL|jd| ƒ |jd k	r~| jj|jƒr~|dkr~| jjd|jƒ}n|j}|jd krœ|j|jƒ n|jd	|j|f ƒ |dkr"|j	rÎ|jd
|j
 ƒ |jjdƒ�r|j}|j oò|jdƒ�r|dd … }|jd| ƒ |jd k	r"d}|j�r4|d|j  }|j|ƒ q"W |S )Nc             S   s
   t | jƒS )N)r  r‡   )Úar   r   r   Ú<lambda>  s    z)CookieJar._cookie_attrs.<locals>.<lambda>T)r”   ÚreverseFr	   z$Version=%sz\\\1z%s=%sz
$Path="%s"r™   r   z$Domain="%s"z$Portz="%s")Úsortr‰   rq   rx   Únon_word_rer@   Úquote_rer]   rw   rÁ   r‡   r†   rr   rÀ   rŠ   r¾   )	rÈ   r9  r“   ÚattrsrÝ   r‰   rx   r†   rÒ   r   r   r   Ú_cookie_attrs  s>    



zCookieJar._cookie_attrsc          
   C   s¾   t dƒ | jjƒ  z’ttjƒ ƒ | j_| _| j|ƒ}| j|ƒ}|r^|j	dƒs^|j
ddj|ƒƒ | jjr¢| jj r¢|j	dƒ r¢x$|D ]}|jdkr‚|j
ddƒ P q‚W W d | jjƒ  X | jƒ  d S )NÚadd_cookie_headerr   z; ZCookie2r   z$Version="1")r   r5  ÚacquirerA   rM   r2  r!  r<  rD  Z
has_headerZadd_unredirected_headerr{   rã   rå   r‰   ÚreleaseÚclear_expired_cookies)rÈ   r¨   r9  rC  rÝ   r   r   r   rE  ?  s$    






zCookieJar.add_cookie_headerc             C   s�  g }d}d}�x||D �]r}|d \}}d}d}	i }
i }�x4|dd … D �]"\}}|j ƒ }||ksh||krl|}||kr€|d kr€d}||
krŠqF|dkr°|d kr¨tdƒ d}	P |j ƒ }|dkrÐ|r¾qF|d krÐtdƒ qF|dk�rd}yt|ƒ}W n$ tk
�r   tdƒ d}	P Y nX d}| j| }||k�s2||k�rb|d k�rX|dk�rXtd| ƒ d}	P ||
|< qF|||< qFW |	�rvq|j|||
|fƒ qW |S )NrÂ   rˆ   r‰   r…   úmax-ager†   r‡   rŠ   rÃ   Ú
commenturlr	   Fr   Tz%   missing value for domain attributezM   missing or invalid value for expires attribute: treating as session cookiez?   missing or invalid (non-numeric) value for max-age attributez!   missing value for %s attribute)rÂ   rˆ   )r‰   r…   rI  r†   r‡   rŠ   rÃ   rJ  )rŠ   rÃ   rJ  )rK   r   rA   rL   r!  rq   )rÈ   Ú	attrs_setÚcookie_tuplesÚboolean_attrsÚvalue_attrsZcookie_attrsrw   rx   Zmax_age_setZ
bad_cookieÚstandardrÉ   r~   r   r—   r   r   r   Ú_normalized_cookie_tuples`  sl       





z#CookieJar._normalized_cookie_tuplesc          !   C   s$  |\}}}}|j dtƒ}|j dtƒ}|j dtƒ}	|j dtƒ}
|j dd ƒ}|d k	rryt|ƒ}W n tk
rp   d S X |j ddƒ}|j ddƒ}|j d	d ƒ}|j d
d ƒ}|tk	rÀ|dkrÀd}t|ƒ}nXd}t|ƒ}|jdƒ}|dk�r|dkrö|d |… }n|d |d … }t|ƒdk�rd}|tk	}d}|�r8t|j	dƒƒ}|tk�rTt
|ƒ\}}|}n|j	dƒ�shd| }d}|	tk	�rž|	d k�rŠt|ƒ}	nd}tjdd|	ƒ}	nd }	|
tk�r¶d }
d}nH|
| jk�rþy| j|||ƒ W n tk
�rê   Y nX td|||ƒ d S t||||	||||||||
||||ƒS )Nr†   r‡   rŠ   r…   r‰   rˆ   FrÂ   rÃ   rJ  rV   Tr°   r   r	   r™   z\s+z2Expiring cookie, domain='%s', path='%s', name='%s'r‚   )rÌ   r1  rA   rL   r±   r³   rœ   r  Úboolrr   r¯   r¶   rs   r]   r!  ÚclearÚKeyErrorr   r   )rÈ   Útupr¨   rw   rx   rO  rÉ   r†   r‡   rŠ   r…   r‰   rˆ   rÂ   rÃ   rÄ   rÁ   rŸ   r¿   rÀ   r®   r­   r¾   r   r   r   Ú_cookie_from_cookie_tupleÁ  s‚    


 





z#CookieJar._cookie_from_cookie_tuplec             C   s:   | j |ƒ}g }x&|D ]}| j||ƒ}|r|j|ƒ qW |S )N)rP  rU  rq   )rÈ   rK  r¨   rL  r9  rT  rÝ   r   r   r   Ú_cookies_from_attrs_set  s    

 z!CookieJar._cookies_from_attrs_setc             C   sL   t | jdd ƒ}|d kr | jj }x&|D ]}|jdkr&d|_|r&d|_q&W d S )Nrä   r   Tr	   )rÕ   r2  rã   r‰   rÅ   )rÈ   r9  Zrfc2109_as_nsrÝ   r   r   r   Ú_process_rfc2109_cookies&  s    


z"CookieJar._process_rfc2109_cookiesc             C   s6  |j ƒ }|jdg ƒ}|jdg ƒ}| jj}| jj}| r<| s`| rH| s`| rT| s`| rd| rdg S y| jt|ƒ|ƒ}W n tk
r–   tƒ  g }Y nX |ož|�r2y| jt	|ƒ|ƒ}	W n tk
rÔ   tƒ  g }	Y nX | j
|	ƒ |�r"i }
x |D ]}d |
|j|j|jf< qðW |
fdd„}t||	ƒ}	|	�r2|j|	ƒ |S )NzSet-Cookie2z
Set-Cookiec             S   s   | j | j| jf}||kS )N)r†   r‡   rw   )Z	ns_cookieÚlookupr”   r   r   r   Úno_matching_rfc2965^  s    z3CookieJar.make_cookies.<locals>.no_matching_rfc2965)r  Zget_allr2  rã   râ   rV  ry   Ú	Exceptionr   r˜   rW  r†   r‡   rw   Úfilterr;  )rÈ   Úresponser¨   r|   Zrfc2965_hdrsZns_hdrsrã   râ   r9  Z
ns_cookiesrX  rÝ   rY  r   r   r   Úmake_cookies2  sB    






zCookieJar.make_cookiesc          
   C   sN   | j jƒ  z2ttjƒ ƒ | j_| _| jj||ƒr:| j|ƒ W d | j jƒ  X d S )N)	r5  rF  rA   rM   r2  r!  rÞ   Ú
set_cookierG  )rÈ   rÝ   r¨   r   r   r   Úset_cookie_if_okh  s    
zCookieJar.set_cookie_if_okc          
   C   sl   | j }| jjƒ  zJ|j|kr&i ||j< ||j }|j|krDi ||j< ||j }|||j< W d | jjƒ  X d S )N)r6  r5  rF  r†   r‡   rw   rG  )rÈ   rÝ   ÚcZc2Zc3r   r   r   r^  u  s    

 


 

zCookieJar.set_cookiec          
   C   s|   t d|jƒ ƒ | jjƒ  zRttjƒ ƒ | j_| _x6| j||ƒD ]&}| jj	||ƒr>t d|ƒ | j
|ƒ q>W W d | jjƒ  X d S )Nzextract_cookies: %sz setting cookie: %s)r   r  r5  rF  rA   rM   r2  r!  r]  rÞ   r^  rG  )rÈ   r\  r¨   rÝ   r   r   r   Úextract_cookies‚  s    

zCookieJar.extract_cookiesc             C   st   |d k	r2|d ks|d kr t dƒ‚| j| | |= n>|d k	rX|d krJt dƒ‚| j| |= n|d k	rj| j|= ni | _d S )Nz8domain and path must be given to remove a cookie by namez.domain must be given to remove cookies by path)rL   r6  )rÈ   r†   r‡   rw   r   r   r   rR  �  s    
zCookieJar.clearc             C   sH   | j jƒ  z,x&| D ]}|jr| j|j|j|jƒ qW W d | j jƒ  X d S )N)r5  rF  rÂ   rR  r†   r‡   rw   rG  )rÈ   rÝ   r   r   r   Úclear_session_cookies«  s    

zCookieJar.clear_session_cookiesc             C   sT   | j jƒ  z8tjƒ }x*| D ]"}|j|ƒr| j|j|j|jƒ qW W d | j jƒ  X d S )N)	r5  rF  rM   rÑ   rR  r†   r‡   rw   rG  )rÈ   rÐ   rÝ   r   r   r   rH  º  s    



zCookieJar.clear_expired_cookiesc             C   s
   t | jƒS )N)r-  r6  )rÈ   r   r   r   Ú__iter__Í  s    zCookieJar.__iter__c             C   s   d}x| D ]}|d }q
W |S )Nr	   r   r   )rÈ   rŸ   rÝ   r   r   r   Ú__len__Ð  s    
 zCookieJar.__len__c             C   s6   g }x| D ]}|j t|ƒƒ q
W d| jjdj|ƒf S )Nz<%s[%s]>z, )rq   rÖ   r×   rØ   r{   )rÈ   ÚrrÝ   r   r   r   rÙ   Ö  s    
 zCookieJar.__repr__c             C   s6   g }x| D ]}|j t|ƒƒ q
W d| jjdj|ƒf S )Nz<%s[%s]>z, )rq   r  r×   rØ   r{   )rÈ   re  rÝ   r   r   r   rÔ   Û  s    
 zCookieJar.__str__)N)NNN)!rØ   rÚ   rÛ   rs   ÚcompilerA  rB  Zstrict_domain_reZ	domain_reZdots_reÚASCIIÚmagic_rerÊ   r8  r:  r<  rD  rE  rP  rU  rV  rW  r]  r_  r^  ra  rR  rb  rH  rc  rd  rÙ   rÔ   r   r   r   r   r   Ñ  s6   





;!a\	6
c               @   s   e Zd ZdS )r   N)rØ   rÚ   rÛ   r   r   r   r   r   â  s    c               @   s4   e Zd Zddd„Zddd„Zddd„Zdd	d
„ZdS )r   NFc          	   C   sJ   t j| |ƒ |d k	r6y|d  W n   tdƒ‚Y nX || _t|ƒ| _d S )NrV   zfilename must be string-like)r   rÊ   rL   ÚfilenamerQ  Ú	delayload)rÈ   ri  rj  r7  r   r   r   rÊ   ç  s    zFileCookieJar.__init__c             C   s
   t ƒ ‚d S )N)rÜ   )rÈ   ri  Úignore_discardÚignore_expiresr   r   r   Úsaveö  s    zFileCookieJar.savec             C   sJ   |d kr"| j d k	r| j }nttƒ‚t|ƒ�}| j||||ƒ W d Q R X d S )N)ri  rL   ÚMISSING_FILENAME_TEXTÚopenÚ_really_load)rÈ   ri  rk  rl  r   r   r   r   Úloadú  s    
 
zFileCookieJar.loadc             C   s„   |d kr"| j d k	r| j }nttƒ‚| jjƒ  zFtj| jƒ}i | _y| j|||ƒ W n t	k
rn   || _‚ Y nX W d | jj
ƒ  X d S )N)ri  rL   rn  r5  rF  rÆ   Údeepcopyr6  rq  ÚOSErrorrG  )rÈ   ri  rk  rl  Z	old_stater   r   r   Úrevert  s    
 
zFileCookieJar.revert)NFN)NFF)NFF)NFF)rØ   rÚ   rÛ   rÊ   rm  rq  rt  r   r   r   r   r   ä  s
   


	 c             C   s$  | j | jfd| jfd| jfg}| jd k	r8|jd| jfƒ | jrH|jdƒ | jrX|jdƒ | jrh|jdƒ | j	rx|jdƒ | j
r–|jdtt| j
ƒƒfƒ | jr¦|jdƒ | jr¼|jd
| jfƒ | jrÒ|jd| jfƒ t| jjƒ ƒ}x$|D ]}|j|t| j| ƒfƒ qæW |jdt| jƒfƒ t|gƒS )Nr‡   r†   rŠ   Ú	path_specÚ	port_specÚ
domain_dotrˆ   r…   rÂ   rÃ   rJ  r‰   )ru  N)rv  N)rw  N)rˆ   N)rÂ   N)rw   rx   r‡   r†   rŠ   rq   rÁ   r¾   rÀ   rˆ   r…   r5   rZ   rÂ   rÃ   rÄ   r'  rÇ   r(  r  r‰   r€   )rÝ   rº   r(  r~   r   r   r   Úlwp_cookie_str  s6    

  
 
 
 
  
  
rx  c               @   s(   e Zd Zd
dd„Zddd„Zdd	„ ZdS )r   Tc             C   s\   t j ƒ }g }x>| D ]6}| r$|jr$q| r6|j|ƒr6q|jdt|ƒ ƒ qW dj|dg ƒS )NzSet-Cookie3: %sÚ
rV   )rM   rÂ   rÑ   rq   rx  r{   )rÈ   rk  rl  rÐ   re  rÝ   r   r   r   Ú
as_lwp_strG  s    
zLWPCookieJar.as_lwp_strNFc             C   sX   |d kr"| j d k	r| j }nttƒ‚t|dƒ�"}|jdƒ |j| j||ƒƒ W d Q R X d S )NÚwz#LWP-Cookies-2.0
)ri  rL   rn  ro  Úwriterz  )rÈ   ri  rk  rl  r   r   r   r   rm  W  s    
 
zLWPCookieJar.savec             C   sL  |j ƒ }| jj|ƒs$d| }t|ƒ‚tjƒ }d}d}	d}
�yÊ�xÂ|j ƒ }|dkrRP |j|ƒs^q@|t|ƒd … jƒ }�xˆt|gƒD �]x}|d \}}i }i }x|	D ]}d||< q W x„|dd … D ]t\}}|d k	rØ|j	ƒ }nd }||
k� sð||	k� rô|}||	k�r|d k�rd}|||< q¾||
k�r*|||< q¾|||< q¾W |j
}|dƒ}|dƒ}|d k	�r^t|ƒ}|d k�rld}|dƒ}|jdƒ}t|dƒ|||d	ƒ|dƒ|||dƒ|d
ƒ|dƒ|dƒ|||dƒ|dƒ|ƒ}| �rÚ|j�rÚq€| �rð|j|ƒ�rðq€| j|ƒ q€W q@W W nB tk
�r   ‚ Y n, tk
�rF   tƒ  td||f ƒ‚Y nX d S )Nz5%r does not look like a Set-Cookie3 (LWP) format filezSet-Cookie3:rv  ru  rw  rˆ   rÂ   r‰   rŠ   r‡   r†   r…   rÃ   rJ  rV   r	   Fr   Tr™   z&invalid Set-Cookie3 format file %r: %r)rv  ru  rw  rˆ   rÂ   )r‰   rŠ   r‡   r†   r…   rÃ   rJ  )Úreadlinerh  r@   r   rM   rr   r  r‘   ry   rK   rÌ   rd   r   rÂ   rÑ   r^  rs  rZ  r   )rÈ   r   ri  rk  rl  Úmagicr   rÐ   ÚheaderrM  rN  ÚlineÚdatarw   rx   rO  rÉ   r~   r   r—   rº   r…   rÂ   r†   r¿   r`  r   r   r   rp  c  sŒ         




 






zLWPCookieJar._really_load)TT)NFF)rØ   rÚ   rÛ   rz  rm  rp  r   r   r   r   r   :  s   

c               @   s,   e Zd ZejdƒZdZdd„ Zd	dd„ZdS )
r   z#( Netscape)? HTTP Cookie Filezr# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.

c             C   sn  t j ƒ }|jƒ }| jj|ƒs(td| ƒ‚� yüxö|jƒ }|dkr@P |jdƒrV|d d… }|jƒ jdƒs.|jƒ dkrrq.|jdƒ\}}	}
}}}}|dk}|	dk}	|dkrª|}d }|jd	ƒ}d
}|dkrÈd }d}t	d||d d
||	||
d
|||d d i ƒ}| �r |j
�r q.| �r|j|ƒ�rq.| j|ƒ q.W W nB tk
�r>   ‚ Y n, tk
�rh   tƒ  td||f ƒ‚Y nX d S )Nz4%r does not look like a Netscape format cookies filerV   ry  r   ú#rü   ú	ÚTRUEr™   FTr	   z+invalid Netscape format cookies file %r: %rr‚   )r‚  rü   )rM   r}  rh  r@   r   rƒ   r‘   rr   r�   r   rÂ   rÑ   r^  rs  rZ  r   )rÈ   r   ri  rk  rl  rÐ   r~  r€  r†   r¿   r‡   rˆ   r…   rw   rx   r¢   rÂ   r`  r   r   r   rp  Ù  s`     
 
zMozillaCookieJar._really_loadNFc             C   s  |d kr"| j d k	r| j }nttƒ‚t|dƒ�Ð}|j| jƒ tjƒ }x´| D ]¬}| rZ|jrZqH| rl|j|ƒrlqH|j	rxd}nd}|j
jdƒrŽd}nd}|jd k	r¨t|jƒ}	nd}	|jd krÂd}
|j}n|j}
|j}|jdj|j
||j||	|
|gƒd ƒ qHW W d Q R X d S )Nr{  r„  ZFALSEr™   rV   rƒ  ry  )ri  rL   rn  ro  r|  r  rM   rÂ   rÑ   rˆ   r†   rr   r…   r  rx   rw   r{   r‡   )rÈ   ri  rk  rl  r   rÐ   rÝ   rˆ   r¢   r…   rw   rx   r   r   r   rm    s<    
 
  

zMozillaCookieJar.save)NFF)	rØ   rÚ   rÛ   rs   rf  rh  r  rp  rm  r   r   r   r   r   ²  s   
A)N)N)XÚ__all__rÆ   r-   rs   rM   Zurllib.parser¥   Zurllib.requestZ	threadingr3  ÚImportErrorZdummy_threadingZhttp.clientZhttpZcalendarr
   r   r   r   r  ZclientZ	HTTP_PORTrµ   rn  r   r%   r,   r6   r7   rI   r(   rq   rK   r5   r8   r>   rf  rg  r?   rF   rS   rX   ÚIr\   ÚXr^   ra   rb   rd   rj   rl   rm   ro   rn   ry   rz   r€   r„   r˜   rš   r›   r    r¡   r£   r§   r«   r¯   r³   r¶   r¸   r¹   r·   r±   r¼   r½   r   r   r   r*  r-  r1  r   rs  r   r   rx  r   r   r   r   r   r   Ú<module>   s®   

 

88!



U
D'


#b!  \    :x