ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3
ir+                @   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   qW 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rd|  ko2dkn  rd|  koJdkn  rd|  kobdkn  rd|  kozdkn  rd|  kodkn  rt| 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rd}|d krd}|d krd}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|rt j|}|rt|}|jd}tj|}|rlt|}|jd}tjd|}n.tj|}|rt|}|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}xt |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	rt|
}
d}n|dkr|
d k	rt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rt|\}}|j}| jr|jddkr|jd}|jdd|}|dkr||d d  }||d | }	|	j	 d$krt
|dkrt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@ rt||std!|| dS |jdks| j| j@ r|d t
|  }|jddkrtj| rt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 rt|}|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rt|| rtd|| dS |jdkrd| j	| rt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|rt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  zttj  | j_| _| j|}| j|}|r^|j	ds^|j
ddj| | jjr| jj r|j	d rx$|D ]}|jdkr|j
dd P qW 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rd}||
krqF|dkr|d krtd d}	P |j  }|dkr|rqF|d krt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rd}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rt|}	nd}tjdd|	}	nd }	|
tkrd }
d}nH|
| jkry| 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< qW |
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 qW |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 }xt|gD ]x}|d \}}i }i }x|	D ]}d||< qW 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|||< qW |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rq| r|j|rq| j| qW 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|  yx|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rd }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rd}nd}|jd k	rt|j}	nd}	|jd krd}
|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