o
    ˷e                  	   @   s&  d dl 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d dlZd dlm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZm Z m!Z! d d	lm"Z" e#e$Z%d
Z&dZ'dZ(dZ)g dZ*dZ+dZ,dd Z-dd Z.G dd dZ/G dd de/Z0G dd de/Z1G dd de/Z2G dd de/Z3G dd  d e3Z4G d!d" d"e3Z5G d#d$ d$e5Z6G d%d& d&e3Z7G d'd( d(e/Z8G d)d* d*e8Z9G d+d, d,e8Z:G d-d. d.e0Z;e1e2e2e8e9e:e7e;d/Z<erd d0l=m>Z> e<?e> dS e<?e3e5e4e6d1 dS )2    N)Mapping
formatdate)sha1sha256)
itemgetter)	HAS_CRTHTTPHeadersencodebytesensure_unicodeparse_qsquoteunquoteurlsplit
urlunsplit)NoAuthTokenErrorNoCredentialsError)is_valid_ipv6_endpoint_urlnormalize_url_pathpercent_encode_sequence)MD5_AVAILABLE@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855i   z%Y-%m-%dT%H:%M:%SZz%Y%m%dT%H%M%SZ)expectz
user-agentzx-amzn-trace-idzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                 C   sZ   t | }|j}t| rd| d}ddd}|jd ur+|j||jkr+d||jf }|S )N[]P   i  )httphttpsz%s:%d)r   hostnamer   portgetscheme)url	url_partshostdefault_ports r&   D/var/www/ideatree/venv/lib/python3.10/site-packages/botocore/auth.py_host_from_urlF   s   
r(   c                 C   s<   | j }t|trt|d}|S t|trt|}|S Nutf-8)data
isinstancebytesjsonloadsdecodestr)requestr+   r&   r&   r'   _get_body_as_dictY   s   


r3   c                   @   s   e Zd ZdZdZdd ZdS )
BaseSignerFc                 C   s   t d)Nadd_auth)NotImplementedErrorselfr2   r&   r&   r'   r5   j   s   zBaseSigner.add_authN)__name__
__module____qualname__REQUIRES_REGIONREQUIRES_TOKENr5   r&   r&   r&   r'   r4   f   s    r4   c                   @   s   e Zd ZdZ	 dd ZdS )TokenSignerTc                 C   
   || _ d S N)
auth_token)r8   rA   r&   r&   r'   __init__t      
zTokenSigner.__init__N)r9   r:   r;   r=   rB   r&   r&   r&   r'   r>   n   s    r>   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )		SigV2Authz+
    Sign a request with Signature V2.
    c                 C   r?   r@   credentialsr8   rF   r&   r&   r'   rB   }   rC   zSigV2Auth.__init__c                 C   s
  t d t|j}|j}t|dkrd}|j d|j d| d}tj	| j
jdtd}g }t|D ])}|dkr;q4t|| }	t|ddd	}
t|	dd
d	}||
 d|  q4d|}||7 }t d| ||d t|  d}||fS )Nz$Calculating signature using v2 auth.r   /
r*   	digestmod	Signature safez-_~=&zString to sign: %s)loggerdebugr   r"   pathlenmethodnetlochmacnewrF   
secret_keyencoder   sortedr1   r   appendjoinupdatebase64	b64encodedigeststripr0   )r8   r2   paramssplitrT   string_to_signlhmacpairskeyvalue
quoted_keyquoted_valueqsb64r&   r&   r'   calc_signature   s.   


zSigV2Auth.calc_signaturec                 C   s   | j d u rt |jr|j}n|j}| j j|d< d|d< d|d< ttt |d< | j j	r4| j j	|d< | 
||\}}||d< |S )	NAWSAccessKeyId2SignatureVersion
HmacSHA256SignatureMethod	TimestampSecurityTokenrL   )rF   r   r+   rd   
access_keytimestrftimeISO8601gmtimetokenro   )r8   r2   rd   rm   	signaturer&   r&   r'   r5      s   
zSigV2Auth.add_authN)r9   r:   r;   __doc__rB   ro   r5   r&   r&   r&   r'   rD   x   s
    rD   c                   @   s   e Zd Zdd Zdd ZdS )	SigV3Authc                 C   r?   r@   rE   rG   r&   r&   r'   rB      rC   zSigV3Auth.__init__c                 C   s   | j d u rt d|jv r|jd= tdd|jd< | j jr-d|jv r&|jd= | j j|jd< tj| j jdt	d}|
|jd d t|  }d| j j d|d }d	|jv rb|jd	= ||jd	< d S )
NDateTusegmtX-Amz-Security-Tokenr*   rJ   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rF   r   headersr   r|   rX   rY   rZ   r[   r   r_   r
   rb   rc   rw   r0   )r8   r2   new_hmacencoded_signaturer}   r&   r&   r'   r5      s*   



zSigV3Auth.add_authN)r9   r:   r;   rB   r5   r&   r&   r&   r'   r      s    r   c                   @   s   e Zd ZdZdZdd Zd1d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d.d/ Zd0S )2	SigV4Authz+
    Sign a request with Signature V4.
    Tc                 C   s   || _ || _|| _d S r@   )rF   _region_name_service_namer8   rF   service_nameregion_namer&   r&   r'   rB      s   
zSigV4Auth.__init__Fc                 C   s<   |rt ||dt }|S t ||dt }|S r)   )rX   rY   r[   r   	hexdigestrb   )r8   ri   msghexsigr&   r&   r'   _sign   s
   zSigV4Auth._signc                 C   sL   t  }|j D ]\}}| }|tvr|||< qd|vr$t|j|d< |S )zk
        Select the headers from the request that need to be included
        in the StringToSign.
        r$   )r	   r   itemslowerSIGNED_HEADERS_BLACKLISTr(   r"   )r8   r2   
header_mapnamerj   lnamer&   r&   r'   headers_to_sign   s   zSigV4Auth.headers_to_signc                 C   s"   |j r	| |j S | t|jS r@   )rd   _canonical_query_string_params_canonical_query_string_urlr   r"   r7   r&   r&   r'   canonical_query_string   s   z SigV4Auth.canonical_query_stringc                 C   s~   g }t |tr| }|D ]\}}|t|ddtt|ddf qg }t|D ]\}}|| d|  q)d|}|S )Nz-_.~rN   rP   rQ   )r,   r   r   r]   r   r1   r\   r^   )r8   rd   key_val_pairsri   rj   sorted_key_valsr   r&   r&   r'   r     s   

z(SigV4Auth._canonical_query_string_paramsc           	      C   sv   d}|j r9g }|j dD ]}|d\}}}|||f qg }t|D ]\}}|| d|  q%d|}|S )NrM   rQ   rP   )queryre   	partitionr]   r\   r^   )	r8   partsr   r   pairri   _rj   r   r&   r&   r'   r     s   
z%SigV4Auth._canonical_query_string_urlc                    sZ   g }t t|}|D ]}d fdd||D }|| dt|  q
d|S )a  
        Return the headers that need to be included in the StringToSign
        in their canonical form by converting all header keys to lower
        case, sorting them in alphabetical order and then joining
        them into a string, separated by newlines.
        ,c                 3   s    | ]}  |V  qd S r@   )_header_value.0vr8   r&   r'   	<genexpr>,  s    

z.SigV4Auth.canonical_headers.<locals>.<genexpr>:rI   )r\   setr^   get_allr]   r   )r8   r   r   sorted_header_namesri   rj   r&   r   r'   canonical_headers"  s   
zSigV4Auth.canonical_headersc                 C   s   d | S )N )r^   re   )r8   rj   r&   r&   r'   r   2  s   zSigV4Auth._header_valuec                 C   s    t dd t|D }d|S )Nc                 s   s    | ]	}|   V  qd S r@   )r   rc   )r   nr&   r&   r'   r   ;  s    z+SigV4Auth.signed_headers.<locals>.<genexpr>;)r\   r   r^   )r8   r   r   r&   r&   r'   signed_headers:  s   
zSigV4Auth.signed_headersc                 C   s0   |j di }|d}t|to|ddkS )Nchecksumrequest_algorithmintrailer)contextr    r,   dict)r8   r2   checksum_context	algorithmr&   r&   r'   _is_streaming_checksum_payload>  s   
z(SigV4Auth._is_streaming_checksum_payloadc                 C   s   |  |rtS | |stS |j}|r>t|dr>| }t|j	t
}t }t|dD ]}|| q+| }|| |S |rFt| S tS )Nseek    )r   "STREAMING_UNSIGNED_PAYLOAD_TRAILER_should_sha256_sign_payloadUNSIGNED_PAYLOADbodyhasattrtell	functoolspartialreadPAYLOAD_BUFFERr   iterr_   r   r   EMPTY_SHA256_HASH)r8   r2   request_bodypositionread_chunksizer   chunkhex_checksumr&   r&   r'   payloadC  s&   


zSigV4Auth.payloadc                 C   s   |j dsdS |jddS )Nr   Tpayload_signing_enabled)r"   
startswithr   r    r7   r&   r&   r'   r   ]  s   z%SigV4Auth._should_sha256_sign_payloadc                 C   s   |j  g}| t|jj}|| || | | |}|| 	|d  || 
| d|jv r>|jd }n| |}|| d|S )NrI   X-Amz-Content-SHA256)rV   upper_normalize_url_pathr   r"   rT   r]   r   r   r   r   r   r   r^   )r8   r2   crrT   r   body_checksumr&   r&   r'   canonical_requestg  s   





zSigV4Auth.canonical_requestc                 C   s   t t|dd}|S )Nz/~rN   )r   r   )r8   rT   normalized_pathr&   r&   r'   r   v  s   zSigV4Auth._normalize_url_pathc                 C   sN   | j jg}||jd dd  || j || j |d d|S N	timestampr      aws4_requestrH   )rF   rw   r]   r   r   r   r^   r8   r2   scoper&   r&   r'   r   z  s   


zSigV4Auth.scopec                 C   sH   g }| |jd dd  | | j | | j | d d|S r   )r]   r   r   r   r^   r   r&   r&   r'   credential_scope  s   

zSigV4Auth.credential_scopec                 C   sH   dg}| |jd  | | | | t|d  d|S )z
        Return the canonical StringToSign as well as a dict
        containing the original version of all headers that
        were included in the StringToSign.
        AWS4-HMAC-SHA256r   r*   rI   )r]   r   r   r   r[   r   r^   )r8   r2   r   stsr&   r&   r'   rf     s
   
zSigV4Auth.string_to_signc                 C   sd   | j j}| d|  |jd dd }| || j}| || j}| |d}| j||ddS )NAWS4r   r   r   r   T)r   )rF   rZ   r   r[   r   r   r   )r8   rf   r2   ri   k_datek_region	k_service	k_signingr&   r&   r'   r}     s   zSigV4Auth.signaturec                 C   s   | j d u rt tj }|t|jd< | | | |}t	
d t	
d| | ||}t	
d| | ||}t	
d| | || d S )Nr   z$Calculating signature using v4 auth.zCanonicalRequest:
%sStringToSign:
%szSignature:
%s)rF   r   datetimeutcnowry   SIGV4_TIMESTAMPr   _modify_request_before_signingr   rR   rS   rf   r}   _inject_signature_to_request)r8   r2   datetime_nowr   rf   r}   r&   r&   r'   r5     s   




zSigV4Auth.add_authc                 C   sR   d|  | g}| |}|d| |  |d|  d||jd< |S )NzAWS4-HMAC-SHA256 Credential=%szSignedHeaders=zSignature=%sz, Authorization)r   r   r]   r   r^   r   )r8   r2   r}   auth_strr   r&   r&   r'   r     s   
z&SigV4Auth._inject_signature_to_requestc                 C   sv   d|j v r	|j d= | | | jjr"d|j v r|j d= | jj|j d< |jdds9d|j v r2|j d= t|j d< d S d S )Nr   r   r   Tr   )r   _set_necessary_date_headersrF   r|   r   r    r   r7   r&   r&   r'   r     s   



z(SigV4Auth._modify_request_before_signingc                 C   s   d|j v r.|j d= tj|jd t}ttt|	 |j d< d|j v r,|j d= d S d S d|j v r7|j d= |jd |j d< d S )Nr   r   
X-Amz-Date)
r   r   strptimer   r   r   intcalendartimegm	timetuple)r8   r2   datetime_timestampr&   r&   r'   r     s   




z%SigV4Auth._set_necessary_date_headersN)F)r9   r:   r;   r~   r<   rB   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rf   r}   r5   r   r   r   r&   r&   r&   r'   r      s2    




r   c                       s0   e Zd Z fddZ fddZdd Z  ZS )S3SigV4Authc                    s2   t  | d|jv r|jd= | ||jd< d S )Nr   )superr   r   r   r7   	__class__r&   r'   r     s   
z*S3SigV4Auth._modify_request_before_signingc                    s   |j d}t|dd }|d u ri }|dd }|d ur|S d}|j di }|d}t|tr<|ddkr<|d	 }|jd
rG||jvrIdS |j ddrRdS t 	|S )Nclient_configs3r   zContent-MD5r   r   r   headerr   r   Thas_streaming_inputF)
r   r    getattrr,   r   r"   r   r   r   r   )r8   r2   r   	s3_configsign_payloadchecksum_headerr   r   r   r&   r'   r     s&   


z'S3SigV4Auth._should_sha256_sign_payloadc                 C      |S r@   r&   r8   rT   r&   r&   r'   r        zS3SigV4Auth._normalize_url_path)r9   r:   r;   r   r   r   __classcell__r&   r&   r   r'   r     s    )r   c                       s4   e Zd ZdZef fdd	Zdd Zdd Z  ZS )SigV4QueryAuth  c                    s   t  ||| || _d S r@   )r   rB   _expires)r8   rF   r   r   expiresr   r&   r'   rB     s   
zSigV4QueryAuth.__init__c                 C   s  |j d}d}||kr|j d= | | |}d| ||jd | j|d}| jjd ur3| jj|d< t	|j
}t|jdd}d	d
 | D }|jrT||j i |_d}	|jrc|t| d|_|rkt|d }	|	 t| }
|}|d |d |d |
|d f}t||_
d S )Ncontent-typez0application/x-www-form-urlencoded; charset=utf-8r   r   )zX-Amz-AlgorithmzX-Amz-Credentialr   zX-Amz-ExpireszX-Amz-SignedHeadersr   T)keep_blank_valuesc                 S   s   i | ]	\}}||d  qS r   r&   )r   kr   r&   r&   r'   
<dictcomp><  s    zASigV4QueryAuth._modify_request_before_signing.<locals>.<dictcomp>rM   rQ   r            )r   r    r   r   r   r   r
  rF   r|   r   r"   r   r   r   rd   r_   r+   r3   r   r   )r8   r2   content_typeblacklisted_content_typer   auth_paramsr#   query_string_parts
query_dictoperation_paramsnew_query_stringpnew_url_partsr&   r&   r'   r     s>   
z-SigV4QueryAuth._modify_request_before_signingc                 C   s   | j d| 7  _ d S )Nz&X-Amz-Signature=%s)r"   )r8   r2   r}   r&   r&   r'   r   ^  s   z+SigV4QueryAuth._inject_signature_to_request)r9   r:   r;   DEFAULT_EXPIRESrB   r   r   r  r&   r&   r   r'   r    s    Ar  c                   @   s    e Zd ZdZdd Zdd ZdS )S3SigV4QueryAutha  S3 SigV4 auth using query parameters.

    This signer will sign a request using query parameters and signature
    version 4, i.e a "presigned url" signer.

    Based off of:

    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html

    c                 C   r  r@   r&   r  r&   r&   r'   r   q  r  z$S3SigV4QueryAuth._normalize_url_pathc                 C   s   t S r@   )r   r7   r&   r&   r'   r   u  s   zS3SigV4QueryAuth.payloadN)r9   r:   r;   r~   r   r   r&   r&   r&   r'   r  e  s    r  c                   @      e Zd ZdZdd ZdS )S3SigV4PostAuthz
    Presigns a s3 post

    Implementation doc here:
    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
    c                 C   sN  t j  }|t|jd< i }|jdd d ur|jd }i }g }|jdd d ur;|jd }|dd d ur;|d }||d< d|d< | ||d< |jd |d< |ddi |d| |i |d|jd i | jj	d ur| jj	|d	< |d	| jj	i t
t|d
d
|d< | |d ||d< ||jd< ||jd< d S )Nr   s3-presign-post-fieldss3-presign-post-policy
conditionsr   zx-amz-algorithmzx-amz-credentialz
x-amz-datex-amz-security-tokenr*   policyzx-amz-signature)r   r   ry   r   r   r    r   r]   rF   r|   r`   ra   r.   dumpsr[   r0   r}   )r8   r2   r   fieldsr%  r#  r&   r&   r'   r5     s:   



zS3SigV4PostAuth.add_authNr9   r:   r;   r~   r5   r&   r&   r&   r'   r   }      r   c                   @   sx   e Zd Zg dZdddZdd Zdd Zd	d
 Zdd ZdddZ		dddZ
	dddZdd Zdd Zdd ZdS )
HmacV1Auth)$
accelerateaclcorsdefaultObjectAcllocationlogging
partNumberr%  requestPaymenttorrent
versioning	versionIdversionswebsiteuploadsuploadIdzresponse-content-typezresponse-content-languagezresponse-expireszresponse-cache-controlzresponse-content-dispositionzresponse-content-encodingdelete	lifecycletaggingrestorestorageClassnotificationreplicationr2  	analyticsmetrics	inventoryselectzselect-typezobject-lockNc                 C   r?   r@   rE   r   r&   r&   r'   rB     rC   zHmacV1Auth.__init__c                 C   s>   t j| jjdtd}||d t| 	 
dS )Nr*   rJ   )rX   rY   rF   rZ   r[   r   r_   r
   rb   rc   r0   )r8   rf   r   r&   r&   r'   sign_string  s
   zHmacV1Auth.sign_stringc                 C   s   g d}g }d|v r|d= |   |d< |D ])}d}|D ]}| }|| d ur6||kr6|||   d}q|s>|d qd|S )N)content-md5r  dater   FTrM   rI   )	_get_dater   r]   rc   r^   )r8   r   interesting_headershoiihfoundri   lkr&   r&   r'   canonical_standard_headers  s"   

z%HmacV1Auth.canonical_standard_headersc                 C   s   g }i }|D ] }|  }|| d ur&|dr&ddd ||D ||< qt| }|D ]}|| d||   q/d|S )Nx-amz-r   c                 s   s    | ]}|  V  qd S r@   )rc   r   r&   r&   r'   r     s    
z6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>r   rI   )r   r   r^   r   r\   keysr]   )r8   r   rJ  custom_headersri   rM  sorted_header_keysr&   r&   r'   canonical_custom_headers  s   


z#HmacV1Auth.canonical_custom_headersc                 C   s$   t |dkr|S |d t|d fS )z(
        TODO: Do we need this?
        r  r   )rU   r   )r8   nvr&   r&   r'   	unquote_v  s   zHmacV1Auth.unquote_vc                    s   |d ur|}n|j }|jrC|jd}dd |D } fdd|D }t|dkrC|jtdd dd |D }|d7 }|d|7 }|S )	NrQ   c                 S   s   g | ]}| d dqS )rP   r  )re   r   ar&   r&   r'   
<listcomp>  s    z1HmacV1Auth.canonical_resource.<locals>.<listcomp>c                    s$   g | ]}|d   j v r |qS r  )QSAOfInterestrU  rV  r   r&   r'   rX    s    r   )ri   c                 S   s   g | ]}d  |qS )rP   )r^   rV  r&   r&   r'   rX    s    ?)rT   r   re   rU   sortr   r^   )r8   re   	auth_pathbufqsar&   r   r'   canonical_resource
  s   	
zHmacV1Auth.canonical_resourcec                 C   sN   |  d }|| |d 7 }| |}|r||d 7 }|| j||d7 }|S )NrI   r\  )r   rN  rS  r_  )r8   rV   re   r   r  r\  csrQ  r&   r&   r'   canonical_string$  s   
zHmacV1Auth.canonical_stringc                 C   sB   | j jr|d= | j j|d< | j||||d}td| | |S )Nr$  r`  r   )rF   r|   rb  rR   rS   rE  )r8   rV   re   r   r  r\  rf   r&   r&   r'   get_signature/  s   
zHmacV1Auth.get_signaturec                 C   sX   | j d u rttd t|j}td|j | j|j||j|j	d}| 
|| d S )Nz(Calculating signature using hmacv1 auth.zHTTP request method: %sr`  )rF   r   rR   rS   r   r"   rV   rc  r   r\  _inject_signature)r8   r2   re   r}   r&   r&   r'   r5   ;  s   


zHmacV1Auth.add_authc                 C   s
   t ddS )NTr   r   r   r&   r&   r'   rH  F  rC   zHmacV1Auth._get_datec                 C   s4   d|j v r	|j d= d| jj d| }||j d< d S )Nr   zAWS r   )r   rF   rw   )r8   r2   r}   auth_headerr&   r&   r'   rd  I  s   
zHmacV1Auth._inject_signature)NNr@   )r9   r:   r;   rY  rB   rE  rN  rS  rU  r_  rb  rc  r5   rH  rd  r&   r&   r&   r'   r*    s    
'
	

r*  c                   @   s0   e Zd ZdZdZefddZdd Zdd Zd	S )
HmacV1QueryAuthz
    Generates a presigned request for s3.

    Spec from this document:

    http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
    #RESTAuthenticationQueryStringAuth

    r	  c                 C   s   || _ || _d S r@   )rF   r
  )r8   rF   r  r&   r&   r'   rB   d  s   
zHmacV1QueryAuth.__init__c                 C   s   t tt t| j S r@   )r1   r   rx   r
  r   r&   r&   r'   rH  h  s   zHmacV1QueryAuth._get_datec           	      C   s   i }| j j|d< ||d< |jD ]"}| }|dkr!|jd |d< q|ds*|dv r1|j| ||< qt|}t|j}|d rH|d  d| }|d	 |d
 |d ||d f}t||_d S )Nrp   rL   r   ExpiresrO  )rF  r     rQ   r   r  r  r  )	rF   rw   r   r   r   r   r   r"   r   )	r8   r2   r}   r  
header_keyrM  r  r  r  r&   r&   r'   rd  k  s    

z!HmacV1QueryAuth._inject_signatureN)r9   r:   r;   r~   r  rB   rH  rd  r&   r&   r&   r'   rf  W  s    
rf  c                   @   r  )HmacV1PostAuthz
    Generates a presigned post for s3.

    Spec from this document:

    http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
    c                 C   s   i }|j dd d ur|j d }i }g }|j dd d ur.|j d }|dd d ur.|d }||d< | jj|d< | jjd urM| jj|d< |d| jji tt	|
dd|d< | |d |d< ||j d< ||j d< d S )	Nr!  r"  r#  rp   r$  r*   r%  r}   )r   r    rF   rw   r|   r]   r`   ra   r.   r&  r[   r0   rE  )r8   r2   r'  r%  r#  r&   r&   r'   r5     s,   


zHmacV1PostAuth.add_authNr(  r&   r&   r&   r'   rj    s    rj  c                   @   r  )
BearerAuthz
    Performs bearer token authorization by placing the bearer token in the
    Authorization header as specified by Section 2.1 of RFC 6750.

    https://datatracker.ietf.org/doc/html/rfc6750#section-2.1
    c                 C   s>   | j d u rt d| j j }d|jv r|jd= ||jd< d S )NzBearer r   )rA   r   r|   r   )r8   r2   re  r&   r&   r'   r5     s   

zBearerAuth.add_authNr(  r&   r&   r&   r'   rk    r)  rk  )v2v3v3httpsr   zs3-queryzs3-presign-postzs3v4-presign-postbearer)CRT_AUTH_TYPE_MAPS)v4zv4-querys3v4z
s3v4-query)@r`   r   r   r   rX   r.   r0  rx   collections.abcr   email.utilsr   hashlibr   r   operatorr   botocore.compatr   r	   r
   r   r   r   r   r   r   botocore.exceptionsr   r   botocore.utilsr   r   r   r   	getLoggerr9   rR   r   r   rz   r   r   r   r   r(   r3   r4   r>   rD   r   r   r   r  r  r   r*  rf  rj  rk  AUTH_TYPE_MAPSbotocore.crt.authrp  r_   r&   r&   r&   r'   <module>   s|   ,

=  6Q0 +5(