§
    7xÅjáˆ  ã                   ól  — d Z ddlZddlZddlZddlmZ ddlZddlmZm	Z	 ddl
mZmZmZ ddlmZ ddlmZ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mZm Z m!Z! dd	l"m#Z# dd
l$m%Z%m&Z&  ej'        e(¦  «        Z)dZ*di iZ+ G d„ d¦  «        Z, G d„ de,¦  «        Z- G d„ de.e¦  «        Z/ G d„ d¦  «        Z0dS )zÛResolves regions and endpoints.

This module implements endpoint resolution, including resolving endpoints for a
given service and region and resolving the available endpoints for a service
in a specific AWS partition.
é    N)ÚEnum)ÚUNSIGNEDÚ
xform_name)ÚAUTH_TYPE_MAPSÚHAS_CRTÚresolve_auth_scheme_preference©ÚCRT_SUPPORTED_AUTH_TYPES)ÚS3_UNREFERENCED_PARAMSÚEndpointProvider)ÚEndpointProviderErrorÚEndpointVariantErrorÚ!InvalidEndpointConfigurationErrorÚInvalidHostLabelErrorÚMissingDependencyExceptionÚNoRegionErrorÚParamValidationErrorÚ$UnknownEndpointResolutionBuiltInNameÚUnknownRegionErrorÚUnknownSignatureVersionErrorÚ*UnsupportedS3AccesspointConfigurationErrorÚUnsupportedS3ConfigurationErrorÚUnsupportedS3ControlArnErrorÚ&UnsupportedS3ControlConfigurationError)Úregister_feature_id)Úensure_booleanÚinstance_cachez{service}.{region}.{dnsSuffix}Ú	endpointsc                   ó*   — e Zd ZdZdd„Zd„ Z	 d	d„ZdS )
ÚBaseEndpointResolverz3Resolves regions and endpoints. Must be subclassed.Nc                 ó   — t           ‚)a7  Resolves an endpoint for a service and region combination.

        :type service_name: string
        :param service_name: Name of the service to resolve an endpoint for
            (e.g., s3)

        :type region_name: string
        :param region_name: Region/endpoint name to resolve (e.g., us-east-1)
            if no region is provided, the first found partition-wide endpoint
            will be used if available.

        :rtype: dict
        :return: Returns a dict containing the following keys:
            - partition: (string, required) Resolved partition name
            - endpointName: (string, required) Resolved endpoint name
            - hostname: (string, required) Hostname to use for this endpoint
            - sslCommonName: (string) sslCommonName to use for this endpoint.
            - credentialScope: (dict) Signature version 4 credential scope
              - region: (string) region name override when signing.
              - service: (string) service name override when signing.
            - signatureVersions: (list<string>) A list of possible signature
              versions, including s3, v4, v2, and s3v4
            - protocols: (list<string>) A list of supported protocols
              (e.g., http, https)
            - ...: Other keys may be included as well based on the metadata
        ©ÚNotImplementedError)ÚselfÚservice_nameÚregion_names      úAC:\Projects\Historical\venv\Lib\site-packages\botocore/regions.pyÚconstruct_endpointz'BaseEndpointResolver.construct_endpoint>   s
   € õ6 "Ð!ó    c                 ó   — t           ‚)z�Lists the partitions available to the endpoint resolver.

        :return: Returns a list of partition names (e.g., ["aws", "aws-cn"]).
        r"   ©r$   s    r'   Úget_available_partitionsz-BaseEndpointResolver.get_available_partitions[   s
   € õ
 "Ð!r)   ÚawsFc                 ó   — t           ‚)aÒ  Lists the endpoint names of a particular partition.

        :type service_name: string
        :param service_name: Name of a service to list endpoint for (e.g., s3)

        :type partition_name: string
        :param partition_name: Name of the partition to limit endpoints to.
            (e.g., aws for the public AWS endpoints, aws-cn for AWS China
            endpoints, aws-us-gov for AWS GovCloud (US) Endpoints, etc.

        :type allow_non_regional: bool
        :param allow_non_regional: Set to True to include endpoints that are
             not regional endpoints (e.g., s3-external-1,
             fips-us-gov-west-1, etc).
        :return: Returns a list of endpoint names (e.g., ["us-east-1"]).
        r"   )r$   r%   Úpartition_nameÚallow_non_regionals       r'   Úget_available_endpointsz,BaseEndpointResolver.get_available_endpointsb   s
   € õ& "Ð!r)   ©N)r-   F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   r,   r1   © r)   r'   r    r    ;   sX   € € € € € Ø=Ð=ð"ð "ð "ð "ð:"ð "ð "ð FKð"ð "ð "ð "ð "ð "r)   r    c                   ó’   — e Zd ZdZddgZdd„Zdd„Zd„ Z	 	 	 dd
„Z	 dd„Z		 	 	 	 dd„Z
d„ Z	 dd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd	S )ÚEndpointResolverz7Resolves endpoints based on partition endpoint metadatazaws-isoz	aws-iso-bFc                 óH   — d|vrt          d¦  «        ‚|| _        || _        dS )a  
        :type endpoint_data: dict
        :param endpoint_data: A dict of partition data.

        :type uses_builtin_data: boolean
        :param uses_builtin_data: Whether the endpoint data originates in the
            package's data directory.
        Ú
partitionsz%Missing "partitions" in endpoint dataN)Ú
ValueErrorÚ_endpoint_dataÚuses_builtin_data)r$   Úendpoint_datar>   s      r'   Ú__init__zEndpointResolver.__init__}   s4   € ð ˜}Ð,Ð,ÝÐDÑEÔEÐEØ+ˆÔØ!2ˆÔÐÐr)   r-   c                 óx   — | j         d         D ]+}|d         |k    rŒ|d         }||vrŒ||         d         c S d S )Nr;   Ú	partitionÚservicesr   )r=   )r$   r%   r/   rB   rC   s        r'   Úget_service_endpoints_dataz+EndpointResolver.get_service_endpoints_data‹   sd   € ØÔ,¨\Ô:ð 	7ð 	7ˆIØ˜Ô%¨Ò7Ð7ØØ  Ô,ˆHØ 8Ð+Ð+ØØ˜LÔ)¨+Ô6Ð6Ð6Ð6ð	7ð 	7r)   c                 ó`   — g }| j         d         D ]}|                     |d         ¦  «         Œ|S )Nr;   rB   )r=   Úappend)r$   ÚresultrB   s      r'   r,   z)EndpointResolver.get_available_partitions”   s=   € ØˆØÔ,¨\Ô:ð 	2ð 	2ˆIØ�MŠM˜) KÔ0Ñ1Ô1Ð1Ð1Øˆr)   Nc                 ó:  — g }| j         d         D ]Š}|d         |k    rŒ|d         }||vrŒ||         d         }|D ]]}	|	|d         v }
|r6|
r4|                      ||	         |¦  «        }|r|                     |	¦  «         ŒD|s|
r|                     |	¦  «         Œ^Œ‹|S )Nr;   rB   rC   r   Úregions)r=   Ú_retrieve_variant_datarF   )r$   r%   r/   r0   Úendpoint_variant_tagsrG   rB   rC   Úservice_endpointsÚendpoint_nameÚis_regional_endpointÚvariant_datas               r'   r1   z(EndpointResolver.get_available_endpointsš   sö   € ð ˆØÔ,¨\Ô:ð 	1ð 	1ˆIØ˜Ô%¨Ò7Ð7ØØ  Ô,ˆHØ 8Ð+Ð+ØØ (¨Ô 6°{Ô CÐØ!2ð 
1ð 
1�Ø'4¸	À)Ô8LÐ'LÐ$à(ð 1Ð-Að 1Ø#'×#>Ò#>Ø)¨-Ô8Ð:Oñ$ô $�Lð $ð 5ØŸš mÑ4Ô4Ð4øØ'ð 1Ð+?ð 1Ø—M’M -Ñ0Ô0Ð0øð
1ð ˆr)   c                 óÊ   — | j         d         D ]T}|d         |k    rF|r:|                      |                     d¦  «        |¦  «        }|rd|v r
|d         c S ŒJ|d         c S ŒUd S )Nr;   rB   ÚdefaultsÚ	dnsSuffix)r=   rJ   Úget)r$   r/   rK   rB   Úvariants        r'   Úget_partition_dns_suffixz)EndpointResolver.get_partition_dns_suffix¶   s�   € ð Ô,¨\Ô:ð 		2ð 		2ˆIØ˜Ô%¨Ò7Ð7Ø(ð 2Ø"×9Ò9Ø!Ÿš jÑ1Ô1Ð3Hñô �Gð ð 4 ;°'Ð#9Ð#9Ø& {Ô3Ð3Ð3Ð3øà$ [Ô1Ð1Ð1Ð1ð 8ð ˆtr)   c                 ó$  — |dk    r|r|€d}|�@d }| j         d         D ]}|d         |k    r|}Œ|�|                      |||||d¦  «        }|S d S | j         d         D ]3}|r|d         | j        v rŒ|                      |||||¦  «        }|r|c S Œ4d S )NÚs3z	us-east-1r;   rB   T)r=   Ú_endpoint_for_partitionÚ!_UNSUPPORTED_DUALSTACK_PARTITIONS)	r$   r%   r&   r/   Úuse_dualstack_endpointÚuse_fips_endpointÚvalid_partitionrB   rG   s	            r'   r(   z#EndpointResolver.construct_endpointÅ   s  € ð ˜DÒ Ð Ø&ð !àÐ#à%ˆKàÐ%Ø"ˆOØ!Ô0°Ô>ð 0ð 0�	Ø˜[Ô)¨^Ò;Ð;Ø&/�OøàÐ*Ø×5Ò5Ø#Ø ØØ*Ø%Øñô �ð �Ø�4ð Ô,¨\Ô:ð 	ð 	ˆIØ%ð Ø˜+Ô&ØÔ9ð:ð :ð Ø×1Ò1ØØØØ&Ø!ñô ˆFð ð Ø���ðð	ð 	r)   c                 ó„   — | j         d         D ]"}|                      ||¦  «        r
|d         c S Œ#t          |d¬¦  «        ‚)Nr;   rB   z,No partition found for provided region_name.)r&   Ú	error_msg)r=   Ú_region_matchr   )r$   r&   rB   s      r'   Úget_partition_for_regionz)EndpointResolver.get_partition_for_region÷   sd   € ØÔ,¨\Ô:ð 	.ð 	.ˆIØ×!Ò! )¨[Ñ9Ô9ð .Ø  Ô-Ð-Ð-Ð-ð.å Ø#ØDð
ñ 
ô 
ð 	
r)   c                 óV  — |d         }|r!|| j         v rd|› d�}t          dg|¬¦  «        ‚|d                              |t          ¦  «        }	|€d|	v r	|	d         }nt	          ¦   «         ‚|||	|||dœ}
||	d	         v r | j        di |
¤ŽS |                      ||¦  «        s|r‡|	                     d¦  «        }|	                     d
d¦  «        }|r1|s/t                               d|||¦  «         ||
d<    | j        di |
¤ŽS t                               d||¦  «          | j        di |
¤ŽS d S )NrB   z4Dualstack endpoints are currently not supported for z
 partitionÚ	dualstack©Útagsr^   rC   ÚpartitionEndpoint)rB   r%   Úservice_datarM   rZ   r[   r   ÚisRegionalizedTz'Using partition endpoint for %s, %s: %srM   z*Creating a regex based endpoint for %s, %sr7   )	rY   r   rS   ÚDEFAULT_SERVICE_DATAr   Ú_resolver_   ÚLOGÚdebug)r$   rB   r%   r&   rZ   r[   Úforce_partitionr/   r^   rf   Úresolve_kwargsÚpartition_endpointÚis_regionalizeds                r'   rX   z(EndpointResolver._endpoint_for_partition   sÓ  € ð # ;Ô/ˆà"ð	Pà $Ô"HÐHÐHð3Ø&ð3ð 3ð 3ð õ '¨[¨MÀYÐOÑOÔOÐOð ! Ô,×0Ò0ØÕ.ñ
ô 
ˆð ÐØ" lÐ2Ð2Ø*Ð+>Ô?��å#‘o”oÐ%ð #Ø(Ø(Ø(Ø&<Ø!2ð
ð 
ˆð ˜, {Ô3Ð3Ð3Ø �4”=Ð2Ð2 >Ð2Ð2Ð2ð ×Ò˜i¨Ñ5Ô5ð 	3¸ð 	3à!-×!1Ò!1Ð2EÑ!FÔ!FÐØ*×.Ò.Ð/?ÀÑFÔFˆOØ!ð 7¨/ð 7Ý—	’	Ø=Ø ØØ&ñ	ô ð ð 3E�˜Ñ/Ø$�t”}Ð6Ð6 ~Ð6Ð6Ð6Ý�IŠIØ<ØØñô ð ð
 !�4”=Ð2Ð2 >Ð2Ð2Ð2ð%	3ð 	3r)   c                 ó€   — ||d         v rdS d|v r-t          j        |d         ¦  «                             |¦  «        S dS )NrI   TÚregionRegexF)ÚreÚcompileÚmatch)r$   rB   r&   s      r'   r_   zEndpointResolver._region_matchA  sJ   € Ø˜) IÔ.Ð.Ð.Ø�4Ø˜IÐ%Ð%Ý”:˜i¨Ô6Ñ7Ô7×=Ò=¸kÑJÔJÐJØˆur)   c                 ó¸   — |                      dg ¦  «        }|D ]@}t          |d         ¦  «        t          |¦  «        k    r|                     ¦   «         }|c S ŒAd S )NÚvariantsrd   )rS   ÚsetÚcopy)r$   r?   rd   rv   rT   rG   s         r'   rJ   z'EndpointResolver._retrieve_variant_dataH  sh   € Ø ×$Ò$ Z°Ñ4Ô4ˆØð 	ð 	ˆGÝ�7˜6”?Ñ#Ô#¥s¨4¡y¤yÒ0Ð0Ø Ÿš™œ�Ø���ð 1ð	ð 	r)   c                 óf   — g }|r|                      d¦  «         |r|                      d¦  «         |S )Nrb   Úfips)rF   )r$   rZ   r[   rd   s       r'   Ú_create_tag_listz!EndpointResolver._create_tag_listO  s@   € ØˆØ!ð 	%Ø�KŠK˜Ñ$Ô$Ð$Øð 	 Ø�KŠK˜ÑÔÐØˆr)   c                 óv   — i }|||fD ]0}|                       ||¦  «        }|r|                      ||¦  «         Œ1|S r2   )rJ   Ú_merge_keys)r$   rd   r?   Úservice_defaultsÚpartition_defaultsrG   rv   rT   s           r'   Ú_resolve_variantz!EndpointResolver._resolve_variantW  sZ   € ð ˆØ&Ð(8Ð:LÐMð 	2ð 	2ˆHØ×1Ò1°(¸DÑAÔAˆGØð 2Ø× Ò  ¨&Ñ1Ô1Ð1øØˆr)   c                 ó   — |                      di ¦  «                              |i ¦  «        }|                      d¦  «        rt                               d|¦  «         |                      di ¦  «        }|                      di ¦  «        }	|                      ||¦  «        }
|
rN|                      |
|||	¦  «        }|i k    rd|› d|› �}t          |
|¬¦  «        ‚|                      ||¦  «         n|}d|vr|d         |d<   |d	         |d	<   ||d
<   |                      ||¦  «         |                      |	|¦  «         |                      ||d         |||d         ¦  «        |d<   d|v r(|                      ||d         |||d         ¦  «        |d<   |S )Nr   Ú
deprecatedz5Client is configured with the deprecated endpoint: %srQ   zEndpoint does not exist for z in region rc   rR   rB   ÚendpointNameÚhostnameÚsslCommonName)rS   rj   Úwarningr{   r€   r   r}   Ú_expand_template)r$   rB   r%   rf   rM   rZ   r[   r?   r~   r   rd   rG   r^   s                r'   ri   zEndpointResolver._resolvea  s  € ð %×(Ò(¨°bÑ9Ô9×=Ò=Ø˜2ñ
ô 
ˆð ×Ò˜\Ñ*Ô*ð 	Ý�KŠKØGØñô ð ð
 (×+Ò+¨J¸Ñ;Ô;ÐØ&Ÿ]š]¨:°rÑ:Ô:ÐØ×$Ò$Ð%;Ð=NÑOÔOˆàð 	#Ø×*Ò*Ø�mÐ%5Ð7Iñô ˆFð ˜Š|ˆ|ð1°<ð 1ð 1Ø!.ð1ð 1ð õ +°À	ÐJÑJÔJÐJØ×Ò˜]¨FÑ3Ô3Ð3Ð3à"ˆFð ˜fÐ$Ð$Ø"+¨KÔ"8ˆF�;Ñà'¨Ô4ˆˆ{ÑØ!.ˆˆ~Ñð 	×ÒÐ)¨6Ñ2Ô2Ð2Ø×ÒÐ+¨VÑ4Ô4Ð4à!×2Ò2ØØ�:ÔØØØ�;Ôñ
ô 
ˆˆzÑð ˜fÐ$Ð$Ø&*×&;Ò&;ØØ�Ô'ØØØ�{Ô#ñ'ô 'ˆF�?Ñ#ð ˆr)   c                 ó.   — |D ]}||vr||         ||<   Œd S r2   r7   )r$   Ú	from_datarG   Úkeys       r'   r}   zEndpointResolver._merge_keys£  s4   € Øð 	-ð 	-ˆCØ˜&Ð Ð Ø'¨œn��s‘øð	-ð 	-r)   c                 ó2   — |                      |||¬¦  «        S )N)ÚserviceÚregionrR   )Úformat)r$   rB   Útemplater%   rM   rR   s         r'   r‡   z!EndpointResolver._expand_template¨  s&   € ð �ŠØ ¨À)ð ñ 
ô 
ð 	
r)   )F)r-   )r-   FNr2   )NNFF)r3   r4   r5   r6   rY   r@   rD   r,   r1   rU   r(   r`   rX   r_   rJ   r{   r€   ri   r}   r‡   r7   r)   r'   r9   r9   x   sM  € € € € € ØAÐAà)2°KÐ(@Ð%ð3ð 3ð 3ð 3ð7ð 7ð 7ð 7ðð ð ð Ø Ø"ðð ð ð ð: 59ðð ð ð ð$ ØØ$Øð0ð 0ð 0ð 0ðd
ð 
ð 
ð  ð?3ð ?3ð ?3ð ?3ðBð ð ðð ð ðð ð ðð ð ð@ð @ð @ðD-ð -ð -ð

ð 
ð 
ð 
ð 
r)   r9   c                   óF   — e 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S )ÚEndpointResolverBuiltinszAWS::RegionzAWS::UseFIPSzAWS::UseDualStackzAWS::STS::UseGlobalEndpointzAWS::S3::UseGlobalEndpointzAWS::S3::AcceleratezAWS::S3::ForcePathStylezAWS::S3::UseArnRegionz$AWS::S3::DisableS3ExpressSessionAuthzAWS::S3Control::UseArnRegionz'AWS::S3::DisableMultiRegionAccessPointszSDK::EndpointzAWS::Auth::AccountIdz AWS::Auth::AccountIdEndpointModeN)r3   r4   r5   Ú
AWS_REGIONÚAWS_USE_FIPSÚAWS_USE_DUALSTACKÚAWS_STS_USE_GLOBAL_ENDPOINTÚAWS_S3_USE_GLOBAL_ENDPOINTÚAWS_S3_ACCELERATEÚAWS_S3_FORCE_PATH_STYLEÚAWS_S3_USE_ARN_REGIONÚ#AWS_S3_DISABLE_EXPRESS_SESSION_AUTHÚAWS_S3CONTROL_USE_ARN_REGIONÚAWS_S3_DISABLE_MRAPÚSDK_ENDPOINTÚ
ACCOUNT_IDÚACCOUNT_ID_ENDPOINT_MODEr7   r)   r'   r‘   r‘   °  sr   € € € € € à€Jð "€Lð ,Ðð #@Ðð ">Ðà-Ðà7Ðð 4Ðð 	/ð (ð
 $BÐ àCÐà"€Là'€JàAÐÐÐr)   r‘   c                   ó¶   — e Zd ZdZ	 	 	 dd„Zd„ Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚEndpointRulesetResolverz5Resolves endpoints using a service's endpoint rulesetTNc
                 óô   — t          |||j        dk    rt          nd ¬¦  «        | _        | j        j        j        | _        || _        || _        || _	        || _
        || _        || _        |	| _        i | _        d S )NrW   )Úruleset_dataÚpartition_dataÚexcluded_params)r   r%   r   Ú	_providerÚrulesetÚ
parametersÚ_param_definitionsÚ_service_modelÚ	_builtinsÚ_client_contextÚ_event_emitterÚ_use_sslÚ_requested_auth_schemeÚ_auth_scheme_preferenceÚ_instance_cache)
r$   Úendpoint_ruleset_datar¤   Úservice_modelÚbuiltinsÚclient_contextÚevent_emitterÚuse_sslÚrequested_auth_schemeÚauth_scheme_preferences
             r'   r@   z EndpointRulesetResolver.__init__Û  s‘   € õ *Ø.Ø)ð !Ô-°Ò5Ð5õ 'Ð&àð
ñ 
ô 
ˆŒð #'¤.Ô"8Ô"CˆÔØ+ˆÔØ!ˆŒØ-ˆÔØ+ˆÔØˆŒØ&;ˆÔ#Ø'=ˆÔ$Ø!ˆÔÐÐr)   c                 óB  — |€i }|€i }|                       |||¦  «        }t                               d|¦  «         	  | j        j        di |¤Ž}n.# t
          $ r!}|                      ||¦  «        }|€‚ ||‚d}~ww xY wt                               d|j        ¦  «         | j        sD|j         	                    d¦  «        r*d|vr&| 
                    d|j        dd…         › �¬¦  «        }| 
                    d	„ |j                             ¦   «         D ¦   «         ¬
¦  «        }|S )zAInvokes the provider with params defined in the service's rulesetNz-Calling endpoint provider with parameters: %szEndpoint provider result: %szhttps://ÚEndpointzhttp://é   )Úurlc                 ó&   — i | ]\  }}||d          “ŒS )r   r7   )Ú.0rŠ   Úvals      r'   ú
<dictcomp>z>EndpointRulesetResolver.construct_endpoint.<locals>.<dictcomp>)  s/   € ð ð ð Ù (  S��S˜”Vðð ð r)   )Úheadersr7   )Ú_get_provider_paramsrj   rk   r¦   Úresolve_endpointr   Ú#ruleset_error_to_botocore_exceptionr½   r®   Ú
startswithÚ_replacerÂ   Úitems)r$   Úoperation_modelÚ	call_argsÚrequest_contextÚprovider_paramsÚprovider_resultÚexÚbotocore_exceptions           r'   r(   z*EndpointRulesetResolver.construct_endpointú  s˜  € ð ÐØˆIàÐ"Ø ˆOà×3Ò3Ø˜Y¨ñ
ô 
ˆõ 	�	Š	Ø;¸_ñ	
ô 	
ð 	
ð	1Ø=˜dœnÔ=ð ð Ø!ðð ˆOˆOøõ %ð 	1ð 	1ð 	1Ø!%×!IÒ!IØ�Oñ"ô "Ðð "Ð)Øà(¨bÐ0øøøøð	1øøøõ 	�	Š	Ð0°/Ô2EÑFÔFÐFð ”ð	àÔ#×.Ò.¨zÑ:Ô:ð	ð  /Ð1Ð1à-×6Ò6Ø7˜oÔ1°!°"°"Ô5Ð7Ð7ð 7ñ ô ˆOð *×2Ò2ðð Ø,;Ô,C×,IÒ,IÑ,KÔ,Kðñ ô ð 3ñ 
ô 
ˆð Ðs   ¼A Á
A:ÁA5Á5A:c                 ó*  — i }|                       |||¦  «        }| j                             ¦   «         D ]_\  }}|                      |||¬¦  «        }|€#|j        �|                      |j        |¬¦  «        }|�|||<   |                      ||¦  «         Œ`|S )a…  Resolve a value for each parameter defined in the service's ruleset

        The resolution order for parameter values is:
        1. Operation-specific static context values from the service definition
        2. Operation-specific dynamic context values from API parameters
        3. Client-specific context parameters
        4. Built-in values such as region, FIPS usage, ...
        )Ú
param_namerÉ   rÊ   N)Úbuiltin_namer´   )Ú_get_customized_builtinsr©   rÈ   Ú_resolve_param_from_contextÚbuiltinÚ_resolve_param_as_builtinÚ_register_endpoint_feature_ids)	r$   rÉ   rÊ   rË   rÌ   Úcustomized_builtinsrÑ   Ú	param_defÚ	param_vals	            r'   rÃ   z,EndpointRulesetResolver._get_provider_params0  sÔ   € ð ˆð #×;Ò;Ø˜Y¨ñ
ô 
Ðð &*Ô%<×%BÒ%BÑ%DÔ%Dð 	Kð 	KÑ!ˆJ˜	Ø×8Ò8Ø%Ø /Ø#ð 9ñ ô ˆIð
 Ð  YÔ%6Ð%BØ ×:Ò:Ø!*Ô!2Ø0ð ;ñ ô �	ð Ð$Ø.7� 
Ñ+Ø×3Ò3°JÀ	ÑJÔJÐJøàÐr)   c                 óÌ   — |                       ||¦  «        }|�|S |                      |||¦  «        }|�|S |                      |||¦  «        }|�|S |                      |¦  «        S r2   )Ú&_resolve_param_as_static_context_paramÚ'_resolve_param_as_dynamic_context_paramÚ)_resolve_param_as_operation_context_paramÚ&_resolve_param_as_client_context_param)r$   rÑ   rÉ   rÊ   ÚstaticÚdynamicÚoperation_context_paramss          r'   rÔ   z3EndpointRulesetResolver._resolve_param_from_contextR  s•   € ð ×<Ò<Ø˜ñ
ô 
ˆð ÐØˆMØ×>Ò>Ø˜¨ñ
ô 
ˆð ÐØˆNà×:Ò:Ø˜O¨Yñô ð 	!ð
 $Ð/Ø+Ð+Ø×:Ò:¸:ÑFÔFÐFr)   c                 óV   — |                       |¦  «        }|                     |¦  «        S r2   )Ú_get_static_context_paramsrS   )r$   rÑ   rÉ   Ústatic_ctx_paramss       r'   rÜ   z>EndpointRulesetResolver._resolve_param_as_static_context_paramh  s,   € ð !×;Ò;¸OÑLÔLÐØ ×$Ò$ ZÑ0Ô0Ð0r)   c                 ór   — |                       |¦  «        }||v r||         }|                     |¦  «        S d S r2   )Ú_get_dynamic_context_paramsrS   )r$   rÑ   rÉ   rÊ   Údynamic_ctx_paramsÚmember_names         r'   rÝ   z?EndpointRulesetResolver._resolve_param_as_dynamic_context_paramn  sH   € ð "×=Ò=¸oÑNÔNÐØÐ+Ð+Ð+Ø,¨ZÔ8ˆKØ—=’= Ñ-Ô-Ð-ð ,Ð+r)   c                 óz   — |                       ¦   «         }||v r"||         }| j                             |¦  «        S d S r2   )Ú_get_client_context_paramsr¬   rS   )r$   rÑ   Úclient_ctx_paramsÚclient_ctx_varnames       r'   rß   z>EndpointRulesetResolver._resolve_param_as_client_context_paramv  sK   € Ø ×;Ò;Ñ=Ô=ÐØÐ*Ð*Ð*Ø!2°:Ô!>ÐØÔ'×+Ò+Ð,>Ñ?Ô?Ð?ð +Ð*r)   c                 ób   — |j         }||v r#||         d         }t          j        ||¦  «        S d S )NÚpath)Úoperation_context_parametersÚjmespathÚsearch)r$   rÑ   rÉ   rÊ   Úoperation_ctx_paramsrï   s         r'   rÞ   zAEndpointRulesetResolver._resolve_param_as_operation_context_param|  sB   € ð  /ÔKÐØÐ-Ð-Ð-Ø'¨
Ô3°FÔ;ˆDÝ”? 4¨Ñ3Ô3Ð3ð .Ð-r)   c                 óÂ   — |t           j                             ¦   «         vrt          |¬¦  «        ‚|                     |¦  «        }t          |¦  «        r
 |¦   «         S |S )N©Úname)r‘   Ú__members__Úvaluesr   rS   Úcallable)r$   rÒ   r´   rÕ   s       r'   rÖ   z1EndpointRulesetResolver._resolve_param_as_builtin„  s`   € ØÕ7ÔC×JÒJÑLÔLÐLÐLÝ6¸LÐIÑIÔIÐIØ—,’,˜|Ñ,Ô,ˆÝ�GÑÔð 	Ø�7‘9”9ÐØˆr)   c                 ó$   — d„ |j         D ¦   «         S )z=Mapping of param names to static param value for an operationc                 ó(   — i | ]}|j         |j        “ŒS r7   )rö   Úvalue©r¿   Úparams     r'   rÁ   zFEndpointRulesetResolver._get_static_context_params.<locals>.<dictcomp>�  s.   € ð 
ð 
ð 
àð ŒJ˜œð
ð 
ð 
r)   )Ústatic_context_parameters©r$   rÉ   s     r'   rä   z2EndpointRulesetResolver._get_static_context_paramsŒ  s&   € ð
ð 
à(ÔBð
ñ 
ô 
ð 	
r)   c                 ó$   — d„ |j         D ¦   «         S )z7Mapping of param names to member names for an operationc                 ó(   — i | ]}|j         |j        “ŒS r7   )rö   ré   rý   s     r'   rÁ   zGEndpointRulesetResolver._get_dynamic_context_params.<locals>.<dictcomp>—  s/   € ð 
ð 
ð 
àð ŒJ˜Ô)ð
ð 
ð 
r)   )Úcontext_parametersr   s     r'   rç   z3EndpointRulesetResolver._get_dynamic_context_params”  s&   € ð
ð 
à(Ô;ð
ñ 
ô 
ð 	
r)   c                 ó.   — d„ | j         j        D ¦   «         S )z7Mapping of param names to client configuration variablec                 óB   — i | ]}|j         t          |j         ¦  «        “ŒS r7   )rö   r   rý   s     r'   rÁ   zFEndpointRulesetResolver._get_client_context_params.<locals>.<dictcomp>Ÿ  s6   € ð 
ð 
ð 
àð ŒJ�
 5¤:Ñ.Ô.ð
ð 
ð 
r)   )rª   Úclient_context_parametersr+   s    r'   rë   z2EndpointRulesetResolver._get_client_context_paramsœ  s)   € ð
ð 
àÔ,ÔFð
ñ 
ô 
ð 	
r)   c                 ó¸   — | j         j                             ¦   «         }t          j        | j        ¦  «        }| j                             d|› �||||¬¦  «         |S )Nzbefore-endpoint-resolution.)r´   ÚmodelÚparamsÚcontext)rª   Ú
service_idÚ	hyphenizerx   r«   r­   Úemit)r$   rÉ   rÊ   rË   r  rØ   s         r'   rÓ   z0EndpointRulesetResolver._get_customized_builtins¤  sl   € ð Ô(Ô3×=Ò=Ñ?Ô?ˆ
Ý"œi¨¬Ñ7Ô7ÐàÔ× Ò Ø6¨*Ð6Ð6Ø(Ø!ØØ#ð 	!ñ 	
ô 	
ð 	
ð #Ð"r)   c                 óÎ  ‡ — t          |t          ¦  «        rt          |¦  «        dk    rt          d¦  «        ‚t                               dd                     d„ |D ¦   «         ¦  «        ‰ j        ¦  «         ‰ j        t          k    rdi fS d„ |D ¦   «         }ˆ fd„|D ¦   «         }‰ j        �4	 t          ˆ fd
„|D ¦   «         ¦  «        \  }}në# t          $ r d	i fcY S w xY w‰ j        �A‰ j                             d¦  «        }ˆ fd„|D ¦   «         }t          ||¦  «        }||         }n�	 t          d„ |D ¦   «         ¦  «        \  }}nq# t          $ rd d}d„ |D ¦   «         }t          st          d„ |D ¦   «         ¦  «        }|rt!          d¬¦  «        ‚t#          d                     |¦  «        ¬¦  «        ‚w xY wi }	d|v r|d         |	d<   n;d|v r7t          |d         ¦  «        dk    rd                     |d         ¦  «        |	d<   d|v r|	                     |d         ¬¦  «         d|v rt'          |d         ¦  «        |	d<   t                               d|d         ||	¦  «         ||	fS )að  Convert an Endpoint's authSchemes property to a signing_context dict

        :type auth_schemes: list
        :param auth_schemes: A list of dictionaries taken from the
            ``authSchemes`` property of an Endpoint object returned by
            ``EndpointProvider``.

        :rtype: str, dict
        :return: Tuple of auth type string (to be used in
            ``request_context['auth_type']``) and signing context dict (for use
            in ``request_context['signing']``).
        r   z&auth_schemes must be a non-empty list.z_Selecting from endpoint provider's list of auth schemes: %s. User selected auth scheme is: "%s"z, c                 ó@   — g | ]}d |                      d¦  «        › d �‘ŒS )ú"rö   )rS   ©r¿   Úss     r'   ú
<listcomp>zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>Æ  s.   € ÐBÐBÐB°Ð+˜1Ÿ5š5 ™=œ=Ð+Ð+Ð+ÐBÐBÐBr)   Únonec                 óP   — g | ]#}|d                                d¦  «        d         ‘Œ$S ©rö   ú#éÿÿÿÿ)Úsplitr  s     r'   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>Í  s:   € ð #
ð #
ð #
Ø)*ˆAˆfŒI�OŠO˜CÑ Ô  Ô$ð#
ð #
ð #
r)   c                 óR   •— g | ]#}i |¥d ‰                      |d          ¦  «        i¥‘Œ$S rõ   )Ú_strip_sig_prefix)r¿   Úschemer$   s     €r'   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>Ð  sK   ø€ ð 
ð 
ð 
àð GˆvÐF�v˜t×5Ò5°f¸V´nÑEÔEÐFÐFð
ð 
ð 
r)   Nc              3   ól   •K  — | ].}‰                      ‰j        |d          ¦  «        ¯#‰j        |fV — Œ/dS ©rö   N)Ú._does_botocore_authname_match_ruleset_authnamer¯   ©r¿   r  r$   s     €r'   ú	<genexpr>zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>Ù  sa   øè è € ð $ð $àØ×JÒJØÔ3°Q°v´Yñô ð$ØÔ0°!Ð4ð$ð $ð $ð $ð $ð $r)   ú,c                 óz   •— i | ]7}‰                      |d                               d¦  «        d         ¦  «        |“Œ8S r  )r  r  r   s     €r'   rÁ   zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<dictcomp>ç  sN   ø€ ð )ð )ð )àð ×&Ò& q¨¤y§¢°sÑ';Ô';¸BÔ'?Ñ@Ô@À!ð)ð )ð )r)   c              3   óH   K  — | ]}|d          t           v ¯|d          |fV — ŒdS r  )r   r  s     r'   r!  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>ñ  sE   è è € ð $ð $àØ˜”y¥NÐ2Ð2ð �v”Y �Nà2Ð2Ð2Ð2ð$ð $r)   Fc                 ó   — g | ]
}|d          ‘ŒS rõ   r7   r  s     r'   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>û  s   € Ð$EÐ$EÐ$E°1 Q v¤YÐ$EÐ$EÐ$Er)   c              3   ó(   K  — | ]}|t           v V — Œd S r2   r	   )r¿   r  s     r'   r!  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>ý  s<   è è € ð +ð +à"ð Õ":Ð:ð+ð +ð +ð +ð +ð +r)   zbThis operation requires an additional dependency. Use pip install botocore[crt] before proceeding.©Úmsg)Úsignature_versionÚsigningRegionr�   ÚsigningRegionSetÚsigningName)Úsigning_nameÚdisableDoubleEncodingz?Selected auth type "%s" as "%s" with signing context params: %srö   )Ú
isinstanceÚlistÚlenÚ	TypeErrorrj   rk   Újoinr¯   r   ÚnextÚStopIterationr°   r  r   r   Úanyr   r   Úupdater   )
r$   Úauth_schemesÚavailable_ruleset_namesrö   r  ÚprefsÚauth_schemes_by_auth_typeÚfixable_with_crtÚauth_type_optionsÚsigning_contexts
   `         r'   Úauth_schemes_to_signing_ctxz3EndpointRulesetResolver.auth_schemes_to_signing_ctx³  s¤  ø€ õ ˜,­Ñ-Ô-ð 	Fµ°\Ñ1BÔ1BÀaÒ1GÐ1GÝÐDÑEÔEÐEå�	Š	ð1à�IŠIÐBÐB°\ÐBÑBÔBÑCÔCØÔ'ñ		
ô 	
ð 	
ð Ô&­(Ò2Ð2Ø˜2�:Ðð#
ð #
Ø.:ð#
ñ #
ô #
Ðð
ð 
ð 
ð 
à&ð
ñ 
ô 
ˆð Ô&Ð2ð õ  $ð $ð $ð $ð $à)ð$ñ $ô $ñ  ô  ‘��f�føõ !ð  ð  ð  ð ˜R�x���ð	 øøøð
 Ô)Ð5ØÔ0×6Ò6°sÑ;Ô;ˆEð)ð )ð )ð )à%ð)ñ )ô )Ð%õ 2ØÐ.ñô ˆDð /¨tÔ4ˆFˆFðÝ#ð $ð $à)ð$ñ $ô $ñ  ô  ‘��f�føõ
 !ð ð ð ð $)Ð Ø$EÐ$E¸Ð$EÑ$EÔ$EÐ!Ýð Ý'*ð +ð +à&7ð+ñ +ô +ñ (ô (Ð$ð
 $ð Ý4ðLðñ ô ð õ
 7Ø*.¯)ª)Ð4EÑ*FÔ*Fðñ ô ð ð%øøøð, ˆØ˜fÐ$Ð$Ø(.¨Ô(?ˆO˜HÑ%Ð%Ø 6Ð)Ð)Ý�6Ð,Ô-Ñ.Ô.°Ò2Ð2Ø,/¯HªHØÐ-Ô.ñ-ô -� Ñ)ð ˜FÐ"Ð"Ø×"Ò"°°}Ô0EÐ"ÑFÔFÐFØ" fÐ,Ð,Ý7EØÐ.Ô/ñ8ô 8ˆOÐ3Ñ4õ 	�	Š	ØMØ�6ŒNØØñ		
ô 	
ð 	
ð �_Ð$Ð$s   Â-C ÃCÃCÄ)E ÅA.F4c                 óD   — |                      d¦  «        r
|dd…         n|S )z6Normalize auth type names by removing any "sig" prefixÚsigé   N)rÆ   )r$   Ú	auth_names     r'   r  z)EndpointRulesetResolver._strip_sig_prefix#  s'   € à )× 4Ò 4°UÑ ;Ô ;ÐJˆy˜˜˜Œ}ˆ}ÀÐJr)   c                 ó¸   — |                       |¦  «        }|                     d¦  «        d         }|dk    r|                     d¦  «        r
|dd…         }||k    S )a\  
        Whether a valid string provided as signature_version parameter for
        client construction refers to the same auth methods as a string
        returned by the endpoint ruleset provider. This accounts for:

        * The ruleset prefixes auth names with "sig"
        * The s3 and s3control rulesets don't distinguish between v4[a] and
          s3v4[a] signers
        * The v2, v3, and HMAC v1 based signers (s3, s3-*) are botocore legacy
          features and do not exist in the rulesets
        * Only characters up to the first dash are considered

        Example matches:
        * v4, sigv4
        * v4, v4
        * s3v4, sigv4
        * s3v7, sigv7 (hypothetical example)
        * s3v4a, sigv4a
        * s3v4-query, sigv4

        Example mismatches:
        * v4a, sigv4
        * s3, sigv4
        * s3-presign-post, sigv4
        ú-r   rW   é   N)r  r  rÆ   )r$   ÚbotonameÚrsnames      r'   r  zFEndpointRulesetResolver._does_botocore_authname_match_ruleset_authname'  sc   € ð4 ×'Ò'¨Ñ/Ô/ˆØ—>’> #Ñ&Ô& qÔ)ˆØ�tÒÐ × 3Ò 3°DÑ 9Ô 9ÐØ   ”|ˆHØ˜Ò!Ð!r)   c                 ót  — |j                              d¦  «        }|€dS |                     d¦  «        r?	 |                     d¦  «        d         }n# t          $ r |}Y nw xY wt          |¬¦  «        S | j        j        }|dk    rá|dk    s|d	k    rt          |¬
¦  «        S |                     d¦  «        si|                     d¦  «        sT|                     d¦  «        s?|                     d¦  «        s*|                     d¦  «        s|                     d¦  «        rt          |¬
¦  «        S | 
                    ¦   «                              d¦  «        rt          |¬¦  «        S |dk    r‹|                     d¦  «        r&|                     d¦  «        }t          ||¬¦  «        S |                     d¦  «        s|                     d¦  «        rt          |¬
¦  «        S |dk    rt          |¬¦  «        S |dk    r;|                     d¦  «        rt          |¬
¦  «        S |dk    rt          |¬
¦  «        S dS )z„Attempts to translate ruleset errors to pre-existing botocore
        exception types by string matching exception strings.
        r(  NzInvalid region in ARN: ú`é   )ÚlabelrW   z/S3 Object Lambda does not support S3 Acceleratez#Accelerate cannot be used with FIPSr'  zS3 Outposts does not supportzS3 MRAP does not supportz!S3 Object Lambda does not supportzAccess Points do not supportzInvalid configuration:z#Client was configured for partitionzinvalid arn:)ÚreportÚ	s3controlzInvalid ARN:ÚBucket)Úarnr(  z!AccountId is required but not setÚeventszUInvalid Configuration: FIPS is not supported with EventBridge multi-region endpoints.z&EndpointId must be a valid host label.)ÚkwargsrS   rÆ   r  Ú
IndexErrorr   rª   r%   r   r   Úlowerr   r   r   r   )r$   Úruleset_exceptionr	  r(  rL  r%   rP  s          r'   rÅ   z;EndpointRulesetResolver.ruleset_error_to_botocore_exceptionG  s–  € ð  Ô&×*Ò*¨5Ñ1Ô1ˆØˆ;ØˆFà�>Š>Ð3Ñ4Ô4ð 	6ðØŸ	š	 #™œ qÔ)��øÝð ð ð Ø���ðøøøå(¨uÐ5Ñ5Ô5Ð5àÔ*Ô7ˆØ˜4ÒÐàÐHÒHÐHØÐ?Ò?Ð?å6¸3Ð?Ñ?Ô?Ð?à—’Ð=Ñ>Ô>ðKà—>’>Ð"<Ñ=Ô=ðKð —>’>Ð"EÑFÔFðKð —>’>Ð"@ÑAÔAð	Kð
 —>’>Ð":Ñ;Ô;ðKð —>’>Ð"GÑHÔHðKõ BÀcÐJÑJÔJÐJØ�yŠy‰{Œ{×%Ò% nÑ5Ô5ð 8Ý+°3Ð7Ñ7Ô7Ð7Ø˜;Ò&Ð&Ø�~Š~˜nÑ-Ô-ð FØ—j’j Ñ*Ô*�Ý3¸ÀÐEÑEÔEÐEØ�~Š~Ð6Ñ7Ô7ð G¸3¿>º>Ø5ñ<ô <ð Gõ >À#ÐFÑFÔFÐFØÐ9Ò9Ð9Ý+°3Ð7Ñ7Ô7Ð7Ø˜8Ò#Ð#Ø�~Š~ð6ñô ð Bõ 9¸SÐAÑAÔAÐAØÐ>Ò>Ð>Ý8¸SÐAÑAÔAÐAØˆts   µA ÁA ÁA c                 óŒ   — |dk    r&t          d|                     ¦   «         › �¦  «         d S |dk    rt          d¦  «         d S d S )NÚAccountIdEndpointModeÚACCOUNT_ID_MODE_Ú	AccountIdÚRESOLVED_ACCOUNT_ID)r   Úupper)r$   rÑ   rÚ   s      r'   r×   z6EndpointRulesetResolver._register_endpoint_feature_ids~  s]   € ØÐ0Ò0Ð0ÝÐ F°9·?²?Ñ3DÔ3DÐ FÐ FÑGÔGÐGÐGÐGØ˜;Ò&Ð&ÝÐ 5Ñ6Ô6Ð6Ð6Ð6ð 'Ð&r)   )TNN)r3   r4   r5   r6   r@   r(   rÃ   rÔ   rÜ   rÝ   rß   rÞ   rÖ   r   rä   rç   rë   rÓ   r?  r  r  rÅ   r×   r7   r)   r'   r¡   r¡   Ø  sm  € € € € € Ø?Ð?ð Ø"Ø#ð"ð "ð "ð "ð>4ð 4ð 4ðl ð  ð  ðDGð Gð Gð,1ð 1ð 1ð.ð .ð .ð@ð @ð @ð4ð 4ð 4ðð ð ð ð
ð 
ñ „^ð
ð ð
ð 
ñ „^ð
ð ð
ð 
ñ „^ð
ð#ð #ð #ðn%ð n%ð n%ð`Kð Kð Kð"ð "ð "ð@5ð 5ð 5ðn7ð 7ð 7ð 7ð 7r)   r¡   )1r6   rx   Úloggingrr   Úenumr   rñ   Úbotocorer   r   Úbotocore.authr   r   r   Úbotocore.crtr
   Úbotocore.endpoint_providerr   r   Úbotocore.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   Úbotocore.useragentr   Úbotocore.utilsr   r   Ú	getLoggerr3   rj   ÚDEFAULT_URI_TEMPLATErh   r    r9   Ústrr‘   r¡   r7   r)   r'   ú<module>rh     sz  ððð ð €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à €€€à )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð
 2Ð 1Ð 1Ð 1Ð 1Ð 1Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ Oðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  3Ð 2Ð 2Ð 2Ð 2Ð 2Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à€gÔ˜Ñ!Ô!€Ø7Ð Ø# RÐ(Ð ð:"ð :"ð :"ð :"ð :"ñ :"ô :"ð :"ðzu
ð u
ð u
ð u
ð u
Ð+ñ u
ô u
ð u
ðp	%Bð %Bð %Bð %Bð %B˜s Dñ %Bô %Bð %BðPj7ð j7ð j7ð j7ð j7ñ j7ô j7ð j7ð j7ð j7r)   