Ë
    qPêj£´  ã                   ó”  — 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mZmZ d dlmZmZm Z m!Z! d dl"m#Z#m$Z$m%Z%  ejL                  e'«      Z(d	Z)d
Z*dZ+dZ,g d¢Z-dZ.dZ/d„ Z0d„ Z1 G d„ d«      Z2 G d„ de2«      Z3 G d„ de2«      Z4 G d„ de2«      Z5 G d„ de2«      Z6 G d„ de6«      Z7 G d„ de7«      Z8 G d „ d!e8«      Z9 G d"„ d#e8«      Z: G d$„ d%e6«      Z; G d&„ d'e;«      Z< G d(„ d)e6«      Z= G d*„ d+e2«      Z> G d,„ d-e>«      Z? G d.„ d/e>«      Z@ G d0„ d1e3«      ZAd2„ ZBd3„ ZCe4e5e5e>e?e@e=e8e:e9eAd4œZDerd d5lEmFZF eDj�                  eF«       neDj�                  e6e;e7e<d6œ«       d7d8d9d:d;œZHeHj“                  «       D � �ci c]  \  } }| j•                  d<«      d=   |“Œ c}} ZKyc c}} w )>é    N)ÚMapping©Ú
formatdate)Úsha1Úsha256)Ú
itemgetter)ÚHAS_CRTÚMD5_AVAILABLEÚHTTPHeadersÚencodebytesÚensure_unicodeÚget_current_datetimeÚparse_qsÚquoteÚunquoteÚurlsplitÚ
urlunsplit)ÚNoAuthTokenErrorÚNoCredentialsErrorÚUnknownSignatureVersionErrorÚ UnsupportedSignatureVersionError)Úis_valid_ipv6_endpoint_urlÚnormalize_url_pathÚpercent_encode_sequenceÚ@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855i   z%Y-%m-%dT%H:%M:%SZz%Y%m%dT%H%M%SZ)ÚbaggageÚ
connectionÚexpectz
keep-alivezproxy-authenticatezproxy-authorizationÚteÚtraceparentÚ
tracestateÚtrailerztransfer-encodingÚupgradez
user-agentzx-amzn-trace-idzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                 óê   — t        | «      }|j                  }t        | «      rd|› d�}dddœ}|j                  �9|j                  |j	                  |j
                  «      k7  r|› d|j                  › �}|S )Nú[ú]éP   i»  )ÚhttpÚhttpsú:)r   Úhostnamer   ÚportÚgetÚscheme)ÚurlÚ	url_partsÚhostÚdefault_portss       úR/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/botocore/auth.pyÚ_host_from_urlr4   T   s}   € ô
 ˜“€IØ×Ñ€DÜ! #Ô&Ø�4�&˜ˆ{ˆàØñ€Mð ‡~�~Ð!Ø�>‰>˜]×.Ñ.¨y×/?Ñ/?Ó@Ò@Ø�V˜1˜YŸ^™^Ð,Ð-ˆDØ€Kó    c                 óÔ   — | j                   }t        |t        «      r&t        j                  |j                  d«      «      }|S t        |t        «      rt        j                  |«      }|S ©Núutf-8)ÚdataÚ
isinstanceÚbytesÚjsonÚloadsÚdecodeÚstr)Úrequestr9   s     r3   Ú_get_body_as_dictrA   g   sT   € ð
 �<‰<€DÜ�$œÔÜ�z‰z˜$Ÿ+™+ gÓ.Ó/ˆð €Kô 
�Dœ#Ô	Ü�z‰z˜$ÓˆØ€Kr5   c                   ó   — e Zd ZdZdZd„ Zy)Ú
BaseSignerFc                 ó   — t        d«      ‚)NÚadd_auth)ÚNotImplementedError©Úselfr@   s     r3   rE   zBaseSigner.add_authx   s   € Ü! *Ó-Ð-r5   N)Ú__name__Ú
__module__Ú__qualname__ÚREQUIRES_REGIONÚREQUIRES_TOKENrE   © r5   r3   rC   rC   t   s   „ Ø€OØ€Nó.r5   rC   c                   ó   — e Zd ZdZ	 d„ Zy)ÚTokenSignerTc                 ó   — || _         y ©N)Ú
auth_token)rH   rS   s     r3   Ú__init__zTokenSigner.__init__‚   s	   € Ø$ˆ�r5   N)rI   rJ   rK   rM   rT   rN   r5   r3   rP   rP   |   s   „ Ø€Nðó%r5   rP   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú	SigV2Authz+
    Sign a request with Signature V2.
    c                 ó   — || _         y rR   ©Úcredentials©rH   rY   s     r3   rT   zSigV2Auth.__init__‹   ó
   € Ø&ˆÕr5   c                 óP  — t         j                  d«       t        |j                  «      }|j                  }t        |«      dk(  rd}|j                  › d|j                  › d|› d�}t        j                  | j                  j                  j                  d«      t        ¬«      }g }t        |«      D ]d  }|dk(  rŒ	t        ||   «      }	t!        |j                  d«      d¬	«      }
t!        |	j                  d«      d
¬	«      }|j#                  |
› d|› �«       Œf dj%                  |«      }||z  }t         j                  d|«       |j'                  |j                  d«      «       t)        j*                  |j-                  «       «      j/                  «       j1                  d«      }||fS )Nz$Calculating signature using v2 auth.r   ú/ú
r8   ©Ú	digestmodÚ	SignatureÚ ©Úsafez-_~ú=ú&zString to sign: %s)ÚloggerÚdebugr   r/   ÚpathÚlenÚmethodÚnetlocÚhmacÚnewrY   Ú
secret_keyÚencoder   Úsortedr?   r   ÚappendÚjoinÚupdateÚbase64Ú	b64encodeÚdigestÚstripr>   )rH   r@   ÚparamsÚsplitri   Ústring_to_signÚlhmacÚpairsÚkeyÚvalueÚ
quoted_keyÚquoted_valueÚqsÚb64s                 r3   Úcalc_signaturezSigV2Auth.calc_signatureŽ   sj  € Ü�‰Ð;Ô<Ü˜Ÿ™Ó%ˆØ�z‰zˆÜˆt‹9˜Š>ØˆDØ#ŸN™NÐ+¨2¨e¯l©l¨^¸2¸d¸VÀ2ÐFˆÜ—‘Ø×Ñ×'Ñ'×.Ñ.¨wÓ7Ä6ô
ˆð ˆÜ˜&“>ò 		9ˆCð �kÒ!ØÜ˜˜s™Ó$ˆEÜ˜sŸz™z¨'Ó2¸Ô<ˆJÜ  §¡¨gÓ!6¸UÔCˆLØ�L‰L˜J˜< q¨¨Ð7Õ8ð		9ð �X‰X�e‹_ˆØ˜"ÑˆÜ�‰Ð)¨>Ô:Ø�‰�^×*Ñ*¨7Ó3Ô4Ü×Ñ˜uŸ|™|›~Ó.×4Ñ4Ó6×=Ñ=¸gÓFˆØ�CˆyÐr5   c                 ó²  — | j                   €
t        «       ‚|j                  r|j                  }n|j                  }| j                   j                  |d<   d|d<   d|d<   t        j                  t        t        j                  «       «      |d<   | j                   j                  r| j                   j                  |d<   | j                  ||«      \  }}||d<   |S )	NÚAWSAccessKeyIdÚ2ÚSignatureVersionÚ
HmacSHA256ÚSignatureMethodÚ	TimestampÚSecurityTokenra   )rY   r   r9   ry   Ú
access_keyÚtimeÚstrftimeÚISO8601ÚgmtimeÚtokenr„   )rH   r@   ry   r‚   Ú	signatures        r3   rE   zSigV2Auth.add_authª   sÆ   € ð ×ÑÐ#Ü$Ó&Ð&Ø�<Š<à—\‘\‰Fð —^‘^ˆFØ#'×#3Ñ#3×#>Ñ#>ˆÐÑ Ø%(ˆÐ!Ñ"Ø$0ˆÐ Ñ!Ü"Ÿm™m¬G´T·[±[³]ÓCˆˆ{ÑØ×Ñ×!Ò!Ø&*×&6Ñ&6×&<Ñ&<ˆF�?Ñ#Ø×+Ñ+¨G°VÓ<‰ˆˆIØ'ˆˆ{ÑØˆr5   N)rI   rJ   rK   Ú__doc__rT   r„   rE   rN   r5   r3   rV   rV   †   s   „ ñò'òó8r5   rV   c                   ó   — e Zd Zd„ Zd„ Zy)Ú	SigV3Authc                 ó   — || _         y rR   rX   rZ   s     r3   rT   zSigV3Auth.__init__Ä   r[   r5   c                 ó  — | j                   €
t        «       ‚d|j                  v r|j                  d= t        d¬«      |j                  d<   | j                   j                  r>d|j                  v r|j                  d= | j                   j                  |j                  d<   t        j                  | j                   j                  j                  d«      t        ¬«      }|j                  |j                  d   j                  d«      «       t        |j                  «       «      j                  «       }d| j                   j                  › d|j                  d«      › �}d	|j                  v r|j                  d	= ||j                  d	<   y )
NÚDateT©ÚusegmtúX-Amz-Security-Tokenr8   r_   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rY   r   Úheadersr   r’   rm   rn   ro   rp   r   rt   r   rw   rx   r�   r>   )rH   r@   Únew_hmacÚencoded_signaturer“   s        r3   rE   zSigV3Auth.add_authÇ   sL  € Ø×ÑÐ#Ü$Ó&Ð&Ø�W—_‘_Ñ$Ø—‘ Ð'Ü",°DÔ"9ˆ�‰˜ÑØ×Ñ×!Ò!Ø%¨¯©Ñ8Ø—O‘OÐ$:Ð;Ø6:×6FÑ6F×6LÑ6LˆG�O‰OÐ2Ñ3Ü—8‘8Ø×Ñ×'Ñ'×.Ñ.¨wÓ7Ä6ô
ˆð 	�‰˜Ÿ™¨Ñ/×6Ñ6°wÓ?Ô@Ü'¨¯©Ó(9Ó:×@Ñ@ÓBÐà(¨×)9Ñ)9×)DÑ)DÐ(Eð F.Ø.?×.FÑ.FÀwÓ.OÐ-PðRð 	ð " W§_¡_Ñ4Ø—‘Ð 6Ð7Ø2;ˆ�‰Ð.Ò/r5   N)rI   rJ   rK   rT   rE   rN   r5   r3   r–   r–   Ã   s   „ ò'ó<r5   r–   c                   óš   — e Zd ZdZdZd„ Zdd„Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú	SigV4Authz+
    Sign a request with Signature V4.
    Tc                 ó.   — || _         || _        || _        y rR   )rY   Ú_region_nameÚ_service_name©rH   rY   Úservice_nameÚregion_names       r3   rT   zSigV4Auth.__init__æ   s   € Ø&ˆÔð (ˆÔØ)ˆÕr5   c                 óî   — |r:t        j                  ||j                  d«      t        «      j	                  «       }|S t        j                  ||j                  d«      t        «      j                  «       }|S r7   )rm   rn   rp   r   Ú	hexdigestrw   )rH   r~   ÚmsgÚhexÚsigs        r3   Ú_signzSigV4Auth._signî   s[   € ÙÜ—(‘(˜3 §
¡
¨7Ó 3´VÓ<×FÑFÓHˆCð ˆ
ô —(‘(˜3 §
¡
¨7Ó 3´VÓ<×CÑCÓEˆCØˆ
r5   c                 óÒ   — t        «       }|j                  j                  «       D ]#  \  }}|j                  «       }|t        vsŒ|||<   Œ% d|vrt        |j                  «      |d<   |S )zk
        Select the headers from the request that need to be included
        in the StringToSign.
        r1   )r   r�   ÚitemsÚlowerÚSIGNED_HEADERS_BLACKLISTr4   r/   )rH   r@   Ú
header_mapÚnamer   Úlnames         r3   Úheaders_to_signzSigV4Auth.headers_to_signõ   sn   € ô
 !“]ˆ
Ø"Ÿ?™?×0Ñ0Ó2ò 	*‰KˆD�%Ø—J‘J“LˆEØÔ4Ò4Ø$)�
˜5Ò!ð	*ð ˜Ñ#ô "0°·±Ó!<ˆJ�vÑØÐr5   c                 ó˜   — |j                   r| j                  |j                   «      S | j                  t        |j                  «      «      S rR   )ry   Ú_canonical_query_string_paramsÚ_canonical_query_string_urlr   r/   rG   s     r3   Úcanonical_query_stringz SigV4Auth.canonical_query_string  s:   € ð
 �>Š>Ø×6Ñ6°w·~±~ÓFÐFà×3Ñ3´H¸W¿[¹[Ó4IÓJÐJr5   c           	      ó:  — g }t        |t        «      r|j                  «       }|D ]7  \  }}|j                  t	        |d¬«      t	        t        |«      d¬«      f«       Œ9 g }t        |«      D ]  \  }}|j                  |› d|› �«       Œ dj                  |«      }|S )Nz-_.~rc   re   rf   )r:   r   r¯   rr   r   r?   rq   rs   )rH   ry   Úkey_val_pairsr~   r   Úsorted_key_valsr¹   s          r3   r·   z(SigV4Auth._canonical_query_string_params  s¦   € àˆÜ�fœgÔ&Ø—\‘\“^ˆFØ ò 	‰JˆC�Ø× Ñ Ü�s Ô(¬%´°E³
ÀÔ*HÐIõð	ð ˆô ! Ó/ò 	5‰JˆC�Ø×"Ñ" c U¨!¨E¨7Ð#3Õ4ð	5à!$§¡¨/Ó!:ÐØ%Ð%r5   c                 ó.  — d}|j                   r†g }|j                   j                  d«      D ]*  }|j                  d«      \  }}}|j                  ||f«       Œ, g }t	        |«      D ]  \  }}|j                  |› d|› �«       Œ dj                  |«      }|S )Nrb   rf   re   )Úqueryrz   Ú	partitionrr   rq   rs   )	rH   Úpartsr¹   r»   Úpairr~   Ú_r   r¼   s	            r3   r¸   z%SigV4Auth._canonical_query_string_url   s§   € Ø!#ÐØ�;Š;àˆMØŸ™×)Ñ)¨#Ó.ò 3�Ø $§¡¨sÓ 3‘��Q˜Ø×$Ñ$ c¨5 \Õ2ð3ð !ˆOô % ]Ó3ò 9‘
��UØ×&Ñ&¨#¨¨a°¨wÐ'7Õ8ð9à%(§X¡X¨oÓ%>Ð"Ø%Ð%r5   c                 óð   ‡ — g }t        t        |«      «      }|D ]J  }dj                  ˆ fd„|j                  |«      D «       «      }|j	                  |› dt        |«      › �«       ŒL dj                  |«      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   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrR   )Ú_header_value)Ú.0ÚvrH   s     €r3   ú	<genexpr>z.SigV4Auth.canonical_headers.<locals>.<genexpr>:  s!   øè ø€ ò Ø*+�×"Ñ" 1×%ñùs   ƒr*   r^   )rq   Úsetrs   Úget_allrr   r   )rH   rµ   r�   Úsorted_header_namesr~   r   s   `     r3   Úcanonical_headerszSigV4Auth.canonical_headers0  s   ø€ ð ˆÜ$¤S¨Ó%9Ó:ÐØ&ò 	=ˆCØ—H‘Hó Ø/>×/FÑ/FÀsÓ/Kôó ˆEð �N‰N˜c˜U !¤N°5Ó$9Ð#:Ð;Õ<ð		=ð
 �y‰y˜Ó!Ð!r5   c                 ó@   — dj                  |j                  «       «      S )Nú )rs   rz   )rH   r   s     r3   rÆ   zSigV4Auth._header_value@  s   € ð �x‰x˜Ÿ™›Ó&Ð&r5   c                 óZ   — t        d„ t        |«      D «       «      }dj                  |«      S )Nc              3   óX   K  — | ]"  }|j                  «       j                  «       –— Œ$ y ­wrR   )r°   rx   )rÇ   Úns     r3   rÉ   z+SigV4Auth.signed_headers.<locals>.<genexpr>I  s   è ø€ ÒI¨q˜Ÿ™›Ÿ™×*ÑIùs   ‚(*ú;)rq   rÊ   rs   )rH   rµ   r�   s      r3   Úsigned_headerszSigV4Auth.signed_headersH  s&   € ÜÑI´C¸Ó4HÔIÓIˆØ�x‰x˜Ó Ð r5   c                 ó¨   — |j                   j                  di «      }|j                  d«      }t        |t        «      xr |j                  d«      dk(  S )NÚchecksumÚrequest_algorithmÚinr"   )Úcontextr-   r:   Údict)rH   r@   Úchecksum_contextÚ	algorithms       r3   Ú_is_streaming_checksum_payloadz(SigV4Auth._is_streaming_checksum_payloadL  sJ   € Ø"Ÿ?™?×.Ñ.¨z¸2Ó>ÐØ$×(Ñ(Ð)<Ó=ˆ	Ü˜)¤TÓ*ÒO¨y¯}©}¸TÓ/BÀiÑ/OÐOr5   c                 óÚ  — | j                  |«      rt        S | j                  |«      st        S |j                  }|r�t        |d«      rƒ|j                  «       }t        j                  |j                  t        «      }t        «       }t        |d«      D ]  }|j                  |«       Œ |j                  «       }|j                  |«       |S |rt        |«      j                  «       S t         S )NÚseekr5   )rÝ   Ú"STREAMING_UNSIGNED_PAYLOAD_TRAILERÚ_should_sha256_sign_payloadÚUNSIGNED_PAYLOADÚbodyÚhasattrÚtellÚ	functoolsÚpartialÚreadÚPAYLOAD_BUFFERr   Úiterrt   r©   rß   ÚEMPTY_SHA256_HASH)rH   r@   Úrequest_bodyÚpositionÚread_chunksizerÖ   ÚchunkÚhex_checksums           r3   ÚpayloadzSigV4Auth.payloadQ  sÖ   € Ø×.Ñ.¨wÔ7Ü5Ð5Ø×1Ñ1°'Ô:ô $Ð#Ø—|‘|ˆÙœG L°&Ô9Ø#×(Ñ(Ó*ˆHÜ&×.Ñ.Ø×!Ñ!¤>óˆNô “xˆHÜ˜n¨cÓ2ò '�Ø—‘ Õ&ð'à#×-Ñ-Ó/ˆLØ×Ñ˜hÔ'ØÐÙô ˜,Ó'×1Ñ1Ó3Ð3ä$Ð$r5   c                 ór   — |j                   j                  d«      sy|j                  j                  dd«      S )Nr)   TÚpayload_signing_enabled)r/   Ú
startswithrÙ   r-   rG   s     r3   rá   z%SigV4Auth._should_sha256_sign_payloadk  s1   € à�{‰{×%Ñ% gÔ.Øð
 �‰×"Ñ"Ð#<¸dÓCÐCr5   c                 ó@  — |j                   j                  «       g}| j                  t        |j                  «      j
                  «      }|j                  |«       |j                  | j                  |«      «       | j                  |«      }|j                  | j                  |«      dz   «       |j                  | j                  |«      «       d|j                  v r|j                  d   }n| j                  |«      }|j                  |«       dj                  |«      S )Nr^   úX-Amz-Content-SHA256)rk   ÚupperÚ_normalize_url_pathr   r/   ri   rr   r¹   rµ   rÍ   rÔ   r�   rñ   rs   )rH   r@   Úcrri   rµ   Úbody_checksums         r3   Úcanonical_requestzSigV4Auth.canonical_requestu  sÞ   € Ø�n‰n×"Ñ"Ó$Ð%ˆØ×'Ñ'¬°·±Ó(=×(BÑ(BÓCˆØ
�	‰	�$ŒØ
�	‰	�$×-Ñ-¨gÓ6Ô7Ø×.Ñ.¨wÓ7ˆØ
�	‰	�$×(Ñ(¨Ó9¸DÑ@ÔAØ
�	‰	�$×%Ñ% oÓ6Ô7Ø! W§_¡_Ñ4Ø#ŸO™OÐ,BÑC‰Mà ŸL™L¨Ó1ˆMØ
�	‰	�-Ô Ø�y‰y˜‹}Ðr5   c                 ó2   — t        t        |«      d¬«      }|S )Nz/~rc   )r   r   )rH   ri   Únormalized_paths      r3   rø   zSigV4Auth._normalize_url_path„  s   € ÜÔ 2°4Ó 8¸tÔDˆØÐr5   c                 ó"  — | j                   j                  g}|j                  |j                  d   dd «       |j                  | j                  «       |j                  | j
                  «       |j                  d«       dj                  |«      S ©NÚ	timestampr   é   Úaws4_requestr]   )rY   r�   rr   rÙ   r£   r¤   rs   ©rH   r@   Úscopes      r3   r  zSigV4Auth.scopeˆ  sp   € Ø×!Ñ!×,Ñ,Ð-ˆØ�‰�W—_‘_ [Ñ1°!°AÐ6Ô7Ø�‰�T×&Ñ&Ô'Ø�‰�T×'Ñ'Ô(Ø�‰�^Ô$Ø�x‰x˜‹Ðr5   c                 óø   — g }|j                  |j                  d   dd «       |j                  | j                  «       |j                  | j                  «       |j                  d«       dj	                  |«      S rÿ   )rr   rÙ   r£   r¤   rs   r  s      r3   Úcredential_scopezSigV4Auth.credential_scope�  sa   € ØˆØ�‰�W—_‘_ [Ñ1°!°AÐ6Ô7Ø�‰�T×&Ñ&Ô'Ø�‰�T×'Ñ'Ô(Ø�‰�^Ô$Ø�x‰x˜‹Ðr5   c                 ó  — dg}|j                  |j                  d   «       |j                  | j                  |«      «       |j                  t        |j	                  d«      «      j                  «       «       dj                  |«      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   r8   r^   )rr   rÙ   r  r   rp   r©   rs   )rH   r@   rû   Ústss       r3   r{   zSigV4Auth.string_to_sign˜  sl   € ð "Ð"ˆØ�
‰
�7—?‘? ;Ñ/Ô0Ø�
‰
�4×(Ñ(¨Ó1Ô2Ø�
‰
”6Ð+×2Ñ2°7Ó;Ó<×FÑFÓHÔIØ�y‰y˜‹~Ðr5   c                 óP  — | j                   j                  }| j                  d|› �j                  «       |j                  d   dd «      }| j                  || j
                  «      }| j                  || j                  «      }| j                  |d«      }| j                  ||d¬«      S )NÚAWS4r   r   r  r  T)r«   )rY   ro   r­   rp   rÙ   r£   r¤   )rH   r{   r@   r~   Úk_dateÚk_regionÚ	k_serviceÚ	k_signings           r3   r“   zSigV4Auth.signature¤  s˜   € Ø×Ñ×)Ñ)ˆØ—‘Ø�C�5ˆ\×!Ñ!Ó# W§_¡_°[Ñ%AÀ!ÀAÐ%Fó
ˆð —:‘:˜f d×&7Ñ&7Ó8ˆØ—J‘J˜x¨×);Ñ);Ó<ˆ	Ø—J‘J˜y¨.Ó9ˆ	Ø�z‰z˜) ^¸ˆzÓ>Ð>r5   c                 óæ  — | j                   €
t        «       ‚t        «       }|j                  t        «      |j
                  d<   | j                  |«       | j                  |«      }t        j                  d«       t        j                  d|«       | j                  ||«      }t        j                  d|«       | j                  ||«      }t        j                  d|«       | j                  ||«       y )Nr   z$Calculating signature using v4 auth.zCanonicalRequest:
%súStringToSign:
%szSignature:
%s)rY   r   r   r�   ÚSIGV4_TIMESTAMPrÙ   Ú_modify_request_before_signingrû   rg   rh   r{   r“   Ú_inject_signature_to_request)rH   r@   Údatetime_nowrû   r{   r“   s         r3   rE   zSigV4Auth.add_auth®  sÇ   € Ø×ÑÐ#Ü$Ó&Ð&Ü+Ó-ˆØ'3×'<Ñ'<¼_Ó'Mˆ�‰˜Ñ$ð 	×+Ñ+¨GÔ4Ø ×2Ñ2°7Ó;ÐÜ�‰Ð;Ô<Ü�‰Ð,Ð.?Ô@Ø×,Ñ,¨WÐ6GÓHˆÜ�‰Ð(¨.Ô9Ø—N‘N >°7Ó;ˆ	Ü�‰Ð% yÔ1à×)Ñ)¨'°9Õ=r5   c                 óü   — d| j                  |«      › �g}| j                  |«      }|j                  d| j                  |«      › �«       |j                  d|› �«       dj	                  |«      |j
                  d<   |S )NzAWS4-HMAC-SHA256 Credential=zSignedHeaders=z
Signature=ú, ÚAuthorization)r  rµ   rr   rÔ   rs   r�   )rH   r@   r“   Úauth_strrµ   s        r3   r  z&SigV4Auth._inject_signature_to_requestÀ  s~   € Ø2°4·:±:¸gÓ3FÐ2GÐHÐIˆØ×.Ñ.¨wÓ7ˆØ�‰Ø˜T×0Ñ0°ÓAÐBÐCô	
ð 	�‰˜* Y KÐ0Ô1Ø+/¯9©9°XÓ+>ˆ�‰˜Ñ(Øˆr5   c                 óš  — d|j                   v r|j                   d= | j                  |«       | j                  j                  r>d|j                   v r|j                   d= | j                  j                  |j                   d<   |j                  j                  dd«      s/d|j                   v r|j                   d= t        |j                   d<   y y )Nr  rœ   ró   Trö   )r�   Ú_set_necessary_date_headersrY   r’   rÙ   r-   râ   rG   s     r3   r  z(SigV4Auth._modify_request_before_signingÊ  s®   € Ø˜gŸo™oÑ-Ø—‘ Ð0Ø×(Ñ(¨Ô1Ø×Ñ×!Ò!Ø%¨¯©Ñ8Ø—O‘OÐ$:Ð;Ø6:×6FÑ6F×6LÑ6LˆG�O‰OÐ2Ñ3à�‰×"Ñ"Ð#<¸dÔCØ%¨¯©Ñ8Ø—O‘OÐ$:Ð;Ü6FˆG�O‰OÐ2Ò3ð Dr5   c                 óÈ  — d|j                   v r�|j                   d= t        j                  j                  |j                  d   t        «      }t        t        t        j                  |j                  «       «      «      «      |j                   d<   d|j                   v r|j                   d= y y d|j                   v r|j                   d= |j                  d   |j                   d<   y )Nr™   r   ú
X-Amz-Date)
r�   ÚdatetimeÚstrptimerÙ   r  r   ÚintÚcalendarÚtimegmÚ	timetuple)rH   r@   Údatetime_timestamps      r3   r  z%SigV4Auth._set_necessary_date_headersØ  sÁ   € ð �W—_‘_Ñ$Ø—‘ Ð'Ü!)×!2Ñ!2×!;Ñ!;Ø—‘ Ñ,¬oó"Ðô '1Ü”H—O‘OÐ$6×$@Ñ$@Ó$BÓCÓDó'ˆG�O‰O˜FÑ#ð ˜wŸ™Ñ.Ø—O‘O LÑ1ð /ð ˜wŸ™Ñ.Ø—O‘O LÐ1Ø,3¯O©O¸KÑ,HˆG�O‰O˜LÒ)r5   N)F)rI   rJ   rK   r”   rL   rT   r­   rµ   r¹   r·   r¸   rÍ   rÆ   rÔ   rÝ   rñ   rá   rû   rø   r  r  r{   r“   rE   r  r  r  rN   r5   r3   r¡   r¡   ß   s�   „ ñð €Oò*óòò Kò&ò"&ò "ò 'ò!òPò
%ò4Dòòòòò
ò?ò>ò$òGóIr5   r¡   c                   ó.   ‡ — e Zd Zˆ fd„Zˆ fd„Zd„ Zˆ xZS )ÚS3SigV4Authc                 ó–   •— t         ‰| �  |«       d|j                  v r|j                  d= | j                  |«      |j                  d<   y )Nrö   )Úsuperr  r�   rñ   ©rH   r@   Ú	__class__s     €r3   r  z*S3SigV4Auth._modify_request_before_signingí  sA   ø€ Ü‰Ñ.¨wÔ7Ø! W§_¡_Ñ4Ø—‘Ð 6Ð7à26·,±,¸wÓ2Gˆ�‰Ð.Ò/r5   c                 óä  •— |j                   j                  d«      }t        |dd «      }|€i }|j                  dd «      }|�|S d}|j                   j                  di «      }|j                  d«      }t        |t        «      r|j                  d«      dk(  r|d	   }|j
                  j                  d
«      r||j                  vry|j                   j                  dd«      ry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á   )	rH   r@   r,  Ú	s3_configÚsign_payloadÚchecksum_headerrÛ   rÜ   r*  s	           €r3   rá   z'S3SigV4Auth._should_sha256_sign_payloadô  só   ø€ ð  Ÿ™×+Ñ+¨OÓ<ˆÜ˜M¨4°Ó6ˆ	ð ÐØˆIð !—}‘}Ð%>ÀÓEˆØÐ#ØÐð (ˆØ"Ÿ?™?×.Ñ.¨z¸2Ó>ÐØ$×(Ñ(Ð)<Ó=ˆ	Ü�i¤Ô&¨9¯=©=¸Ó+>À(Ò+JØ'¨Ñ/ˆOà—‘×&Ñ& wÔ/Ø g§o¡oÑ5àð �?‰?×ÑÐ4°eÔ<Øô ‰wÑ2°7Ó;Ð;r5   c                 ó   — |S rR   rN   ©rH   ri   s     r3   rø   zS3SigV4Auth._normalize_url_path  ó   € àˆr5   )rI   rJ   rK   r  rá   rø   Ú__classcell__©r*  s   @r3   r&  r&  ì  s   ø„ ôHô'<öRr5   r&  c                   ó6   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ fd„Zˆ xZS )ÚS3ExpressAuthTc                ó6   •— t         ‰| �  |||«       || _        y rR   )r(  rT   Ú_identity_cache)rH   rY   r¦   r§   Úidentity_cacher*  s        €r3   rT   zS3ExpressAuth.__init__%  s   ø€ ô 	‰Ñ˜ l°KÔ@Ø-ˆÕr5   c                 ó$   •— t         ‰| �  |«       y rR   )r(  rE   r)  s     €r3   rE   zS3ExpressAuth.add_auth+  s   ø€ Ü‰Ñ˜Õ!r5   c                 ó¾   •— t         ‰| �  |«       d|j                  vr#| j                  j                  |j                  d<   d|j                  v r|j                  d= y y )Nzx-amz-s3session-tokenrœ   )r(  r  r�   rY   r’   r)  s     €r3   r  z,S3ExpressAuth._modify_request_before_signing.  sU   ø€ Ü‰Ñ.¨wÔ7Ø"¨'¯/©/Ñ9Ø7;×7GÑ7G×7MÑ7MˆG�O‰OÐ3Ñ4à! W§_¡_Ñ4Ø—‘Ð 6Ñ7ð 5r5   )rI   rJ   rK   ÚREQUIRES_IDENTITY_CACHErT   rE   r  r7  r8  s   @r3   r:  r:  "  s   ø„ Ø"Ðô.ô"÷8ð 8r5   r:  c                   ó   — e Zd ZdZd„ Zy)ÚS3ExpressPostAuthTc                 óö  — t        «       }|j                  t        «      |j                  d<   i }|j                  j	                  dd «      �|j                  d   }i }g }|j                  j	                  dd «      �&|j                  d   }|j	                  dd «      �|d   }||d<   d|d<   | j                  |«      |d<   |j                  d   |d<   |j                  ddi«       |j                  d| j                  |«      i«       |j                  d|j                  d   i«       | j                  j                  �@| j                  j                  |d	<   |j                  d	| j                  j                  i«       t        j                  t        j                  |«      j                  d
«      «      j                  d
«      |d<   | j                  |d   |«      |d<   ||j                  d<   ||j                  d<   y )Nr   ús3-presign-post-fieldsús3-presign-post-policyÚ
conditionsr  úx-amz-algorithmúx-amz-credentialú
x-amz-dateúX-Amz-S3session-Tokenr8   Úpolicyúx-amz-signature©r   r�   r  rÙ   r-   r  rr   rY   r’   ru   rv   r<   Údumpsrp   r>   r“   ©rH   r@   r  ÚfieldsrK  rF  s         r3   rE   zS3ExpressPostAuth.add_auth:  så  € Ü+Ó-ˆØ'3×'<Ñ'<¼_Ó'Mˆ�‰˜Ñ$àˆØ�?‰?×ÑÐ7¸Ó>ÐJØ—_‘_Ð%=Ñ>ˆFàˆØˆ
Ø�?‰?×ÑÐ7¸Ó>ÐJØ—_‘_Ð%=Ñ>ˆFØ�z‰z˜,¨Ó-Ð9Ø# LÑ1�
à)ˆˆ|Ñà$6ˆÐ Ñ!Ø%)§Z¡Z°Ó%8ˆÐ!Ñ"Ø&Ÿ™¨{Ñ;ˆˆ|Ñà×ÑÐ,Ð.@ÐAÔBØ×ÑÐ-¨t¯z©z¸'Ó/BÐCÔDØ×Ñ˜<¨¯©¸Ñ)EÐFÔGà×Ñ×!Ñ!Ð-Ø.2×.>Ñ.>×.DÑ.DˆFÐ*Ñ+Ø×ÑØ(¨$×*:Ñ*:×*@Ñ*@ÐAôô
 "×+Ñ+Ü�J‰J�vÓ×%Ñ% gÓ.ó
ç
‰&�‹/ð 	ˆxÑð %)§N¡N°6¸(Ñ3CÀWÓ$MˆÐ Ñ!à4:ˆ�‰Ð0Ñ1Ø4:ˆ�‰Ð0Ò1r5   N)rI   rJ   rK   r@  rE   rN   r5   r3   rB  rB  7  s   „ Ø"Ðó';r5   rB  c                   óD   ‡ — e Zd ZdZdZedœˆ fd„
Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )	ÚS3ExpressQueryAuthi,  T)Úexpiresc                ó:   •— t         ‰| �  ||||¬«       || _        y )N)r=  ©r(  rT   Ú_expires)rH   rY   r¦   r§   r=  rS  r*  s         €r3   rT   zS3ExpressQueryAuth.__init__h  s,   ø€ ô 	‰ÑØØØØ)ð	 	ô 	
ð  ˆ�r5   c                 óN  — |j                   j                  d«      }d}||k(  r|j                   d= | j                  | j                  |«      «      }d| j	                  |«      |j
                  d   | j                  |dœ}| j                  j                  �| j                  j                  |d<   t        |j                  «      }t        |j                  d¬«      }|j                  «       D ��	ci c]  \  }}	||	d	   “Œ }
}}	|j                  r"|
j                  |j                  «       i |_        d
}|j                   r!|
j                  t#        |«      «       d
|_        |
rt%        |
«      dz   }|› t%        |«      › �}|}|d	   |d   |d   ||d   f}t'        |«      |_
        y c c}	}w )Núcontent-typeú0application/x-www-form-urlencoded; charset=utf-8r  r   ©zX-Amz-AlgorithmzX-Amz-Credentialr  zX-Amz-ExpireszX-Amz-SignedHeadersrJ  T©Úkeep_blank_valuesr   rb   rf   é   é   é   ©r�   r-   rÔ   rµ   r  rÙ   rV  rY   r’   r   r/   r   r¾   r¯   ry   rt   r9   rA   r   r   )rH   r@   Úcontent_typeÚblocklisted_content_typerÔ   Úauth_paramsr0   Úquery_string_partsÚkrÈ   Ú
query_dictÚoperation_paramsÚnew_query_stringÚpÚnew_url_partss                  r3   r  z1S3ExpressQueryAuth._modify_request_before_signingy  s«  € ð —‘×*Ñ*¨>Ó:ˆà>ð 	!ð Ð3Ò3Ø—‘ Ð/ð
 ×,Ñ,¨T×-AÑ-AÀ'Ó-JÓKˆð  2Ø $§
¡
¨7Ó 3Ø!Ÿ/™/¨+Ñ6Ø!Ÿ]™]Ø#1ñ
ˆð ×Ñ×!Ñ!Ð-Ø37×3CÑ3C×3IÑ3IˆKÐ/Ñ0ô ˜WŸ[™[Ó)ˆ	ô & i§o¡oÈÔNÐØ*<×*BÑ*BÓ*D×E¡$ ! Q�a˜˜1™‘gÐEˆ
ÑEà�>Š>Ø×Ñ˜gŸn™nÔ-ØˆGŒNð ÐØ�<Š<ð ×ÑÔ/°Ó8Ô9ØˆGŒLÙÜ6°zÓBÀSÑHÐàÐ Ô!8¸Ó!EÐ FÐGð 	ð ˆØ˜1™˜q ™t Q q¡TÐ+;¸Q¸q¹TÐBˆÜ  Ó/ˆ�ùóA Fó   Ã,F!c                 ó4   — |xj                   d|› �z  c_         y ©Nz&X-Amz-Signature=©r/   ©rH   r@   r“   s      r3   r  z/S3ExpressQueryAuth._inject_signature_to_requestº  ó   € ð 	�ŠÐ*¨9¨+Ð6Ñ6Žr5   c                 ó   — |S rR   rN   r5  s     r3   rø   z&S3ExpressQueryAuth._normalize_url_pathÀ  r6  r5   c                 ó   — t         S rR   ©râ   rG   s     r3   rñ   zS3ExpressQueryAuth.payloadÄ  ó
   € ô
  Ðr5   )rI   rJ   rK   ÚDEFAULT_EXPIRESr@  rT   r  r  rø   rñ   r7  r8  s   @r3   rR  rR  d  s-   ø„ Ø€OØ"Ðð  ö ò"?0òB7òö r5   rR  c                   ó2   ‡ — e Zd ZdZefˆ fd„	Zd„ Zd„ Zˆ xZS )ÚSigV4QueryAuthé  c                 ó6   •— t         ‰| �  |||«       || _        y rR   rU  )rH   rY   r¦   r§   rS  r*  s        €r3   rT   zSigV4QueryAuth.__init__Ï  s   ø€ ô 	‰Ñ˜ l°KÔ@Øˆ�r5   c                 óN  — |j                   j                  d«      }d}||k(  r|j                   d= | j                  | j                  |«      «      }d| j	                  |«      |j
                  d   | j                  |dœ}| j                  j                  �| j                  j                  |d<   t        |j                  «      }t        |j                  d¬«      }|j                  «       D ��	ci c]  \  }}	||	d	   “Œ }
}}	|j                  r"|
j                  |j                  «       i |_        d
}|j                   r!|
j                  t#        |«      «       d
|_        |
rt%        |
«      dz   }|› t%        |«      › �}|}|d	   |d   |d   ||d   f}t'        |«      |_
        y c c}	}w )NrX  rY  r  r   rZ  rœ   Tr[  r   rb   rf   r]  r^  r_  r`  )rH   r@   ra  Úblacklisted_content_typerÔ   rc  r0   rd  re  rÈ   rf  rg  rh  ri  rj  s                  r3   r  z-SigV4QueryAuth._modify_request_before_signingÕ  s«  € ð —‘×*Ñ*¨>Ó:ˆà>ð 	!ð Ð3Ò3Ø—‘ Ð/ð
 ×,Ñ,¨T×-AÑ-AÀ'Ó-JÓKˆð  2Ø $§
¡
¨7Ó 3Ø!Ÿ/™/¨+Ñ6Ø!Ÿ]™]Ø#1ñ
ˆð ×Ñ×!Ñ!Ð-Ø26×2BÑ2B×2HÑ2HˆKÐ.Ñ/ô ˜WŸ[™[Ó)ˆ	ô & i§o¡oÈÔNÐØ*<×*BÑ*BÓ*D×E¡$ ! Q�a˜˜1™‘gÐEˆ
ÑEà�>Š>Ø×Ñ˜gŸn™nÔ-ØˆGŒNð ÐØ�<Š<ð ×ÑÔ/°Ó8Ô9ØˆGŒLÙÜ6°zÓBÀSÑHÐàÐ Ô!8¸Ó!EÐ FÐGð 	ð ˆØ˜1™˜q ™t Q q¡TÐ+;¸Q¸q¹TÐBˆÜ  Ó/ˆ�ùóA Frk  c                 ó4   — |xj                   d|› �z  c_         y rm  rn  ro  s      r3   r  z+SigV4QueryAuth._inject_signature_to_request  rp  r5   )rI   rJ   rK   ru  rT   r  r  r7  r8  s   @r3   rw  rw  Ì  s   ø„ Ø€Oð ?Nõ ò?0öB7r5   rw  c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú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                 ó   — |S rR   rN   r5  s     r3   rø   z$S3SigV4QueryAuth._normalize_url_path)  r6  r5   c                 ó   — t         S rR   rs  rG   s     r3   rñ   zS3SigV4QueryAuth.payload-  rt  r5   N)rI   rJ   rK   r”   rø   rñ   rN   r5   r3   r~  r~    s   „ ñ	òó r5   r~  c                   ó   — e Zd ZdZd„ Zy)ÚS3SigV4PostAuthz†
    Presigns a s3 post

    Implementation doc here:
    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
    c                 óö  — t        «       }|j                  t        «      |j                  d<   i }|j                  j	                  dd «      �|j                  d   }i }g }|j                  j	                  dd «      �&|j                  d   }|j	                  dd «      �|d   }||d<   d|d<   | j                  |«      |d<   |j                  d   |d<   |j                  ddi«       |j                  d| j                  |«      i«       |j                  d|j                  d   i«       | j                  j                  �@| j                  j                  |d	<   |j                  d	| j                  j                  i«       t        j                  t        j                  |«      j                  d
«      «      j                  d
«      |d<   | j                  |d   |«      |d<   ||j                  d<   ||j                  d<   y )Nr   rD  rE  rF  r  rG  rH  rI  úx-amz-security-tokenr8   rK  rL  rM  rO  s         r3   rE   zS3SigV4PostAuth.add_auth=  sã  € Ü+Ó-ˆØ'3×'<Ñ'<¼_Ó'Mˆ�‰˜Ñ$àˆØ�?‰?×ÑÐ7¸Ó>ÐJØ—_‘_Ð%=Ñ>ˆFàˆØˆ
Ø�?‰?×ÑÐ7¸Ó>ÐJØ—_‘_Ð%=Ñ>ˆFØ�z‰z˜,¨Ó-Ð9Ø# LÑ1�
à)ˆˆ|Ñà$6ˆÐ Ñ!Ø%)§Z¡Z°Ó%8ˆÐ!Ñ"Ø&Ÿ™¨{Ñ;ˆˆ|Ñà×ÑÐ,Ð.@ÐAÔBØ×ÑÐ-¨t¯z©z¸'Ó/BÐCÔDØ×Ñ˜<¨¯©¸Ñ)EÐFÔGà×Ñ×!Ñ!Ð-Ø-1×-=Ñ-=×-CÑ-CˆFÐ)Ñ*Ø×ÑÐ5°t×7GÑ7G×7MÑ7MÐNÔOô "×+Ñ+Ü�J‰J�vÓ×%Ñ% gÓ.ó
ç
‰&�‹/ð 	ˆxÑð %)§N¡N°6¸(Ñ3CÀWÓ$MˆÐ Ñ!à4:ˆ�‰Ð0Ñ1Ø4:ˆ�‰Ð0Ò1r5   N©rI   rJ   rK   r”   rE   rN   r5   r3   r‚  r‚  5  s   „ ñó%;r5   r‚  c                   ób   — e Zd Zg d¢Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„Z		 dd	„Z
	 dd
„Zd„ Zd„ Zd„ Zy)Ú
HmacV1Auth)$Ú
accelerateÚaclÚcorsÚdefaultObjectAclÚlocationÚloggingÚ
partNumberrK  Ú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Úreplicationr�  Ú	analyticsÚmetricsÚ	inventoryÚselectzselect-typezobject-lockNc                 ó   — || _         y rR   rX   r¥   s       r3   rT   zHmacV1Auth.__init__Ž  r[   r5   c                 ó*  — t        j                  | j                  j                  j	                  d«      t
        ¬«      }|j                  |j	                  d«      «       t        |j                  «       «      j                  «       j                  d«      S )Nr8   r_   )rm   rn   rY   ro   rp   r   rt   r   rw   rx   r>   )rH   r{   rž   s      r3   Úsign_stringzHmacV1Auth.sign_string‘  sk   € Ü—8‘8Ø×Ñ×'Ñ'×.Ñ.¨wÓ7Ä4ô
ˆð 	�‰˜×-Ñ-¨gÓ6Ô7Ü˜8Ÿ?™?Ó,Ó-×3Ñ3Ó5×<Ñ<¸WÓEÐEr5   c                 ó,  — g d¢}g }d|v r|d= | j                  «       |d<   |D ]_  }d}|D ]B  }|j                  «       }||   €Œ||k(  sŒ|j                  ||   j                  «       «       d}ŒD |rŒO|j                  d«       Œa dj	                  |«      S )N)úcontent-md5rX  Údater™   FTrb   r^   )Ú	_get_dater°   rr   rx   rs   )rH   r�   Úinteresting_headersÚhoiÚihÚfoundr~   Úlks           r3   Úcanonical_standard_headersz%HmacV1Auth.canonical_standard_headers˜  s¨   € ÚEÐØˆØ�WÑØ˜�ØŸ.™.Ó*ˆ�‰Ø%ò 	ˆBØˆEØò !�Ø—Y‘Y“[�Ø˜3‘<Ñ+°°b³Ø—J‘J˜w s™|×1Ñ1Ó3Ô4Ø ‘Eð	!ò
 Ø—
‘
˜2•ð	ð �y‰y˜‹~Ðr5   c                 óP  — g }i }|D ]T  }|j                  «       }||   €Œ|j                  d«      sŒ+dj                  d„ |j                  |«      D «       «      ||<   ŒV t	        |j                  «       «      }|D ]  }|j                  |› d||   › �«       Œ dj                  |«      S )Núx-amz-rÄ   c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrR   )rx   )rÇ   rÈ   s     r3   rÉ   z6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>°  s   è ø€ ò 2Ø&'˜Ÿ™Ÿ	ñ2ùs   ‚r*   r^   )r°   rô   rs   rË   rq   Úkeysrr   )rH   r�   rª  Úcustom_headersr~   r­  Úsorted_header_keyss          r3   Úcanonical_custom_headersz#HmacV1Auth.canonical_custom_headers©  sµ   € ØˆØˆØò 	ˆCØ—‘“ˆBØ�s‰|Ñ'Ø—=‘= Õ*Ø),¯©ñ 2Ø+2¯?©?¸3Ó+?ô2ó *�N 2Ò&ð		ô $ N×$7Ñ$7Ó$9Ó:ÐØ%ò 	7ˆCØ�J‰J˜#˜˜a ¨sÑ 3Ð4Ð5Õ6ð	7à�y‰y˜‹~Ðr5   c                 óH   — t        |«      dk(  r|S |d   t        |d   «      fS )z(
        TODO: Do we need this?
        r]  r   )rj   r   )rH   Únvs     r3   Ú	unquote_vzHmacV1Auth.unquote_v¸  s+   € ô ˆr‹7�aŠ<ØˆIà�q‘Eœ7 2 a¡5›>Ð*Ð*r5   c                 óò  — |�|}n|j                   }|j                  rÊ|j                  j                  d«      }|D �cg c]  }|j                  dd«      ‘Œ }}|D �cg c]%  }|d   | j                  v sŒ| j	                  |«      ‘Œ' }}t        |«      dkD  rR|j                  t        d«      ¬«       |D �cg c]  }dj                  |«      ‘Œ }}|dz  }|dj                  |«      z  }|S c c}w c c}w c c}w )Nrf   re   r]  r   )r~   ú?)	ri   r¾   rz   ÚQSAOfInterestr¸  rj   Úsortr   rs   )rH   rz   Ú	auth_pathÚbufÚqsaÚas         r3   Úcanonical_resourcezHmacV1Auth.canonical_resourceÁ  sí   € ð Ð Ø‰Cà—*‘*ˆCØ�;Š;Ø—+‘+×#Ñ# CÓ(ˆCØ,/Ö0 q�1—7‘7˜3 •?Ð0ˆCÐ0à+.öØ&'°!°A±$¸$×:LÑ:LÒ2L�—‘˜qÕ!ðˆCð ô �3‹x˜!Š|Ø—‘œZ¨›]�Ô+Ø,/Ö0 q�s—x‘x •{Ð0�Ð0Ø�s‘
�Ø�s—x‘x “}Ñ$�Øˆ
ùò 1ùòùò
 1s   ½C*ÁC/Á3C/Â5C4c                 ó¼   — |j                  «       dz   }|| j                  |«      dz   z  }| j                  |«      }|r||dz   z  }|| j                  ||¬«      z  }|S )Nr^   ©r½  )r÷   r®  rµ  rÁ  )rH   rk   rz   r�   rS  r½  Úcsr³  s           r3   Úcanonical_stringzHmacV1Auth.canonical_stringÛ  so   € ð �\‰\‹^˜dÑ"ˆØ
ˆd×-Ñ-¨gÓ6¸Ñ=Ñ=ˆØ×6Ñ6°wÓ?ˆÙØ�. 4Ñ'Ñ'ˆBØ
ˆd×%Ñ% e°yÐ%ÓAÑAˆØˆ	r5   c                 óÞ   — | j                   j                  r|d= | j                   j                  |d<   | j                  ||||¬«      }t        j	                  d|«       | j                  |«      S )Nr„  rÃ  r  )rY   r’   rÅ  rg   rh   r¤  )rH   rk   rz   r�   rS  r½  r{   s          r3   Úget_signaturezHmacV1Auth.get_signatureæ  ss   € ð ×Ñ×!Ò!ØÐ.Ð/Ø.2×.>Ñ.>×.DÑ.DˆGÐ*Ñ+Ø×.Ñ.Ø�E˜7¨ið /ó 
ˆô 	�‰Ð(¨.Ô9Ø×Ñ Ó/Ð/r5   c                 óF  — | j                   €t        ‚t        j                  d«       t	        |j
                  «      }t        j                  d|j                  «       | j                  |j                  ||j                  |j                  ¬«      }| j                  ||«       y )Nz(Calculating signature using hmacv1 auth.zHTTP request method: %srÃ  )rY   r   rg   rh   r   r/   rk   rÇ  r�   r½  Ú_inject_signature)rH   r@   rz   r“   s       r3   rE   zHmacV1Auth.add_authò  s€   € Ø×ÑÐ#Ü$Ð$Ü�‰Ð?Ô@Ü˜Ÿ™Ó%ˆÜ�‰Ð.°·±Ô?Ø×&Ñ&Ø�N‰N˜E 7§?¡?¸g×>OÑ>Oð 'ó 
ˆ	ð 	×Ñ˜w¨	Õ2r5   c                 ó   — t        d¬«      S )NTrš   r   ©rH   s    r3   r¨  zHmacV1Auth._get_dateý  s   € Ü Ô&Ð&r5   c                 ó�   — d|j                   v r|j                   d= d| j                  j                  › d|› �}||j                   d<   y )Nr  zAWS r*   )r�   rY   r�   )rH   r@   r“   Úauth_headers       r3   rÉ  zHmacV1Auth._inject_signature   sI   € Ø˜gŸo™oÑ-ð —‘ Ð0à˜T×-Ñ-×8Ñ8Ð9¸¸9¸+ÐFˆØ+6ˆ�‰˜Ò(r5   )NNrR   )rI   rJ   rK   r»  rT   r¤  r®  rµ  r¸  rÁ  rÅ  rÇ  rE   r¨  rÉ  rN   r5   r3   r‡  r‡  e  sN   „ ò%€MóN'òFòò"ò+óð6 ?Có	ð ?Có
0ò	3ò'ó7r5   r‡  c                   ó*   — e Zd ZdZdZefd„Zd„ Zd„ Zy)ÚHmacV1QueryAuthzÁ
    Generates a presigned request for s3.

    Spec from this document:

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

    rx  c                 ó    — || _         || _        y rR   )rY   rV  )rH   rY   rS  s      r3   rT   zHmacV1QueryAuth.__init__  s   € Ø&ˆÔØˆ�r5   c                 óz   — t        t        t        j                  «       t        | j                  «      z   «      «      S rR   )r?   r   rŽ   rV  rË  s    r3   r¨  zHmacV1QueryAuth._get_date  s&   € Ü”3”t—y‘y“{¤S¨¯©Ó%7Ñ7Ó8Ó9Ð9r5   c                 óª  — i }| j                   j                  |d<   ||d<   |j                  D ]R  }|j                  «       }|dk(  r|j                  d   |d<   Œ+|j	                  d«      s|dv sŒA|j                  |   ||<   ŒT t        |«      }t        |j                  «      }|d   r
|d   › d|› �}|d	   |d
   |d   ||d   f}t        |«      |_        y )Nr†   ra   r™   ÚExpiresr°  )r¦  rX  é   rf   r   r]  r^  r_  )	rY   r�   r�   r°   rô   r   r   r/   r   )	rH   r@   r“   rf  Ú
header_keyr­  rh  ri  rj  s	            r3   rÉ  z!HmacV1QueryAuth._inject_signature"  sþ   € Øˆ
Ø'+×'7Ñ'7×'BÑ'Bˆ
Ð#Ñ$Ø"+ˆ
�;Ñà!Ÿ/™/ò 	5ˆJØ×!Ñ!Ó#ˆBð ˜VÒ#Ø(/¯©¸Ñ(?�
˜9Ò%ð —‘˜xÔ(¨Bð 3ò -ð ")§¡°Ñ!4�
˜2’ð	5ô  3°:Ó>Ðô �W—[‘[Ó!ˆØˆQŠ4ð #$ A¡$  qÐ)9Ð(:Ð;ÐØ˜1™˜q ™t Q q¡TÐ+;¸Q¸q¹TÐBˆÜ  Ó/ˆ�r5   N)rI   rJ   rK   r”   ru  rT   r¨  rÉ  rN   r5   r3   rÏ  rÏ    s    „ ñð €Oà,;ó  ò:ó0r5   rÏ  c                   ó   — e Zd ZdZd„ Zy)ÚHmacV1PostAuthz‘
    Generates a presigned post for s3.

    Spec from this document:

    http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
    c                 óÎ  — i }|j                   j                  dd «      �|j                   d   }i }g }|j                   j                  dd «      �&|j                   d   }|j                  dd «      �|d   }||d<   | j                  j                  |d<   | j                  j                  �@| j                  j                  |d<   |j                  d| j                  j                  i«       t        j                  t        j                  |«      j                  d«      «      j                  d«      |d<   | j                  |d   «      |d<   ||j                   d<   ||j                   d<   y )	NrD  rE  rF  r†   r„  r8   rK  r“   )rÙ   r-   rY   r�   r’   rr   ru   rv   r<   rN  rp   r>   r¤  )rH   r@   rP  rK  rF  s        r3   rE   zHmacV1PostAuth.add_authL  sX  € ØˆØ�?‰?×ÑÐ7¸Ó>ÐJØ—_‘_Ð%=Ñ>ˆFàˆØˆ
Ø�?‰?×ÑÐ7¸Ó>ÐJØ—_‘_Ð%=Ñ>ˆFØ�z‰z˜,¨Ó-Ð9Ø# LÑ1�
à)ˆˆ|Ñà#'×#3Ñ#3×#>Ñ#>ˆÐÑ à×Ñ×!Ñ!Ð-Ø-1×-=Ñ-=×-CÑ-CˆFÐ)Ñ*Ø×ÑÐ5°t×7GÑ7G×7MÑ7MÐNÔOô "×+Ñ+Ü�J‰J�vÓ×%Ñ% gÓ.ó
ç
‰&�‹/ð 	ˆxÑð #×.Ñ.¨v°hÑ/?Ó@ˆˆ{Ñà4:ˆ�‰Ð0Ñ1Ø4:ˆ�‰Ð0Ò1r5   Nr…  rN   r5   r3   r×  r×  C  s   „ ñó;r5   r×  c                   ó   — e Zd ZdZd„ Zy)Ú
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                 ó¶   — | j                   €
t        «       ‚d| j                   j                  › �}d|j                  v r|j                  d= ||j                  d<   y )NzBearer r  )rS   r   r’   r�   )rH   r@   rÍ  s      r3   rE   zBearerAuth.add_auths  sR   € Ø�?‰?Ð"Ü"Ó$Ð$à §¡× 5Ñ 5Ð6Ð7ˆØ˜gŸo™oÑ-Ø—‘ Ð0Ø+6ˆ�‰˜Ò(r5   Nr…  rN   r5   r3   rÚ  rÚ  k  s   „ ñó7r5   rÚ  c                 óš   — | D ];  }|dk(  rt         |   c S |t         v rt         |   }|t        v sŒ-|c S t        |¬«      ‚ t        | ¬«      ‚)Núsmithy.api#noAuth©Úsignature_version)ÚAUTH_TYPE_TO_SIGNATURE_VERSIONÚAUTH_TYPE_MAPSr   r   )Ú
auth_traitÚ	auth_typerß  s      r3   Úresolve_auth_typerä  }  sa   € Øò Lˆ	ØÐ+Ò+Ü1°)Ñ<Ò<ØÔ8Ñ8Ü >¸yÑ IÐØ ¤NÒ2Ø(Ò(ä.ÀÔKÐKðLô +¸ZÔ
HÐHr5   c                 óÎ  — |D �cg c]  }|j                  d«      d   ‘Œ }}| D �cg c]  }|t        vr|‘Œ }}|rt        j                  d|«       | |z   }t        j                  |«      D �cg c]  }||v r|‘Œ
 }}|D ]3  }|dk(  rt        |   c S t        j                  |«      }|t        v sŒ1|c S  t        dj                  t        |«      «      ¬«      ‚c c}w c c}w c c}w )Nú#éÿÿÿÿz/Unsupported auth schemes in preference list: %rÚnoAuthr  rÞ  )rz   ÚAUTH_PREF_TO_SIGNATURE_VERSIONrg   rh   rÚ   Úfromkeysr-   rá  r   rs   rq   )Úpreference_listÚauth_optionsr.   Úservice_supportedÚunsupportedÚcombinedÚprioritized_schemesÚsig_versions           r3   Úresolve_auth_scheme_preferencerò  Š  s  € Ø=IÖJ°6˜Ÿ™ cÓ*¨2Ó.ÐJÐÐJð &öàØÔ7Ñ7ò 	ð€Kð ñ
 Ü�‰Ø=¸{ô	
ð Ð!2Ñ2€Hô —m‘m HÓ-öàØÐ&Ñ&ò 	ðÐð ð &ò ˆØ�XÒÜ1°&Ñ9Ò9Ü4×8Ñ8¸Ó@ˆØœ.Ò(ØÒðô +ØŸ)™)¤FÐ+<Ó$=Ó>ôð ùò5 Kùòùòs   …C¦CÁ-C")Úv2Úv3Úv3httpsr-  zs3-queryzs3-presign-postzs3v4-presign-postzv4-s3expresszv4-s3express-queryzv4-s3express-presign-postÚbearer)ÚCRT_AUTH_TYPE_MAPS)Úv4zv4-queryÚs3v4z
s3v4-queryrø  Úv4arö  Únone)zaws.auth#sigv4zaws.auth#sigv4azsmithy.api#httpBearerAuthrÝ  ræ  rç  )Lru   r!  r  ræ   rm   r<   r�  rŽ   Úcollections.abcr   Úemail.utilsr   Úhashlibr   r   Úoperatorr   Úbotocore.compatr	   r
   r   r   r   r   r   r   r   r   r   Úbotocore.exceptionsr   r   r   r   Úbotocore.utilsr   r   r   Ú	getLoggerrI   rg   rë   ré   r�   r  r±   râ   rà   r4   rA   rC   rP   rV   r–   r¡   r&  r:  rB  rR  rw  r~  r‚  r‡  rÏ  r×  rÚ  rä  rò  rá  Úbotocore.crt.authr÷  rt   rà  r¯   rz   ré  )Úauth_schemerñ  s   00r3   ú<module>r     s:  ðó Û Û Û Û Û Û Û Ý #Ý "ß  Ý ÷÷ ÷ ñ ÷ó ÷ñ ð 
ˆ×	Ñ	˜8Ó	$€ð Gð ð €Ø
€Ø"€òÐ ð  &Ð Ø%IÐ "òò&
÷.ñ .ô%�*ô %ô:�
ô :ôz<�
ô <ô8JI�
ô JIôZ3�)ô 3ôl8�Kô 8ô**;˜ô *;ôZe ˜ô e ôPN7�Yô N7ôb �~ô  ô0-;�iô -;ô`f7�ô f7ôR20�jô 20ôj%;�Zô %;ôP7�ô 7ò$
IòðB Ø
ØØ
ØØ%Ø(Ø!Ø,Ø!2Øñ€ñ Ý4à×ÑÐ,Õ-à×ÑàØ&ØØ*ñ		
ôð ØØ!)Øñ	"Ð ð %C×$HÑ$HÓ$J÷"á ˆ�[ð ×Ñ�cÓ˜2Ñ Ñ+ó"Ñ ùó "s   Æ G