403Webshell
Server IP : 178.105.222.151  /  Your IP : 216.73.216.38
Web Server : nginx/1.28.3
System : Linux MNK 7.0.0-15-generic #15-Ubuntu SMP PREEMPT_DYNAMIC Wed Apr 22 16:06:43 UTC 2026 x86_64
User : www-data ( 33)
PHP Version : 8.5.4
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/botocore/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/botocore/__pycache__/utils.cpython-314.pyc
+
��i<��"	�^RIt^RIt^RIt^RIt^RIt^RIt^RIt^RIt^RI	t	^RI
t
^RIt^RIt^RI
t
^RIt^RIt^RIHt^RIHt^RIHt^RIHtHt^RIt^RIHt^RIHt^RIt^RIt^RI t^RI!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t-H.t.H/t/H0t0H1t1H2t2H3t3H4t4H5t5H6t6H7t7^R	I8H9t9H:t:H;t;H<t<H=t=H>t>H?t?H@t@HAtAHBtBHCtCHDtDHEtEHFtFHGtGHHtHHItIHJtJHKtKHLtLHMtMHNtNHOtO^R
IPHQtQHRtRHStS]P�!]U4tV^tWRtXRtYERtZR
t[]P�!R4t]]H]=];]<3t^R.t_/RRbRRbRRbRRbRRbRRbRRbRRbR R!bR"R#bR$R%bR&R'bR(R)bR*R+bR,R-bR.R/bR0R1b/R2R3bR4R5bR6R7bR8R9bR:R;bR<R=bR>R?bR@RAbRBRCbRDREbRFRGbRHRIbRJREbRKRLbRMRNbRORPbRQRRbC/RSRTbRURTbRVR-bRWR/bRXRYbRZR[bR\R]bR^R_bR`RabRbRcbRdRPbReRfbRgRhbRiRhbRjRkbRlR]bRmRnbCRoRpRqRrRsRtRuRvRwR_RxRyRzR{R|R}R~RR�R�R�R�R�R�R�R�R�R?R�Rr/Ct`]P�!R�]P�R�7tbERtcR�tdR�teR�tfR�tgR�thR�tiR�tjR�tkR�tlERR�ltmR�tnR�to!R�R�]p4tq!R�R�]p4tr!R�R�4ts!R�R�]s4tt!R�R�4tu!R�R�]s4tvERR�ltwR�tx]y3R�ltzR�t{][3R�lt|][3R�lt}R�t~R�tR�t�R�t�ERR�lt�ERR�lt�R�t�R�t�!R�R�4t�!R�R�4t�R�t�R�t�R�t�R�t�R�t�R�t�ERR�lt�ERR�lt�R�t�R�t�R�t�R�t�R�t�ERR�lt�ERR�lt�R�t�R�t�!R�R�4t�!R�R�]�4t�!R�R�4t�!R�R�4t�!R�R�4t�!R�R�]�4t�!R�R�4t�!R�R�4t�!R�R�4t�!R�R�4t�!R�R�4t�!R�R�]�4t�!R�R�4t�R�t�R�t�R�t�ERR�lt�R�t�R�t�R�t�R�t�R�t�R�t�R�t�R�t�!R�R�4t�!R�R�4t�!R�R�4t�R�t�!R�R�4t�R�t�ERR�lt�R�t�RxRy/t�/RRbRRbR�R�bRRbRRbR R!bR"R#bR$R%bR&R'bR(R)bR*R+bR2R3bR6R7bR4R5bR8R9bR:R;bR<R=b/R�R�bR>R?bR@RAbRHRIbRJREbRKRLbRQRRbRSRTbR�R�bRVR-bRWR/bR�R�bERERbERERbRXRYbERERbRZR[bC/R\R]bERERbR^R_bERER	bR`RabRbRcbReRfbRdRPbRiRhbRjRkbER
ERbRqRrbRsRtbRuRvbERER
bRzR{bR|R}bCR~RR�R�ERERR�R�R�R�/Ct�R#(�N)�datetime)�
ip_address)�Path)�
getproxies�proxy_bypass)�tzutc)�LocationParseError)�HAS_CRT�HEX_PAT�IPV4_PAT�IPV4_RE�IPV6_ADDRZ_PAT�
IPV6_ADDRZ_RE�IPV6_PAT�LS32_PAT�
MD5_AVAILABLE�UNRESERVED_PAT�UNSAFE_URL_CHARS�ZONE_ID_PAT�OrderedDict�get_current_datetime�get_md5�get_tzinfo_options�json�quote�urlparse�urlsplit�
urlunsplit�zip_longest)�ClientError�ConfigNotFound�ConnectionClosedError�ConnectTimeoutError�EndpointConnectionError�HTTPClientError�InvalidDNSNameError�!InvalidEndpointConfigurationError�InvalidExpressionError�InvalidHostLabelError�InvalidIMDSEndpointError�InvalidIMDSEndpointModeError�InvalidRegionError�MetadataRetrievalError�MissingDependencyException�ReadTimeoutError�SSOTokenLoadError�UnsupportedOutpostResourceError�*UnsupportedS3AccesspointConfigurationError�UnsupportedS3ArnError�UnsupportedS3ConfigurationError�UnsupportedS3ControlArnError�&UnsupportedS3ControlConfigurationError)�
PluginContext�reset_plugin_context�set_plugin_contextzhttp://169.254.169.254/zhttp://[fd00:ec2::254]/z-._~z-z0-9][a-z0-9\-]*[a-z0-9]�	dualstackzapi.mediatailor�mediatailorzapi.pricing�pricingz
api.sagemaker�	sagemaker�
apigatewayzapi-gatewayzapplication-autoscalingzapplication-auto-scaling�
appstream2�	appstream�autoscalingzauto-scalingzautoscaling-planszauto-scaling-plans�cez
cost-explorer�
cloudhsmv2zcloudhsm-v2�cloudsearchdomainzcloudsearch-domainzcognito-idpzcognito-identity-provider�configzconfig-service�curzcost-and-usage-report-servicezdata.iotziot-data-planez
data.jobs.iotziot-jobs-data-planezdata.mediastorezmediastore-data�datapipelinez
data-pipeline�
devicefarmzdevice-farm�
directconnectzdirect-connect�	discoveryzapplication-discovery-service�dmszdatabase-migration-service�dszdirectory-service�dynamodbstreamszdynamodb-streams�elasticbeanstalkzelastic-beanstalk�elasticfilesystem�efs�elasticloadbalancingzelastic-load-balancing�elasticmapreduce�emr�elastictranscoderzelastic-transcoder�elb�elbv2zelastic-load-balancing-v2�email�seszentitlement.marketplacezmarketplace-entitlement-service�eszelasticsearch-service�events�eventbridgezcloudwatch-eventsziot-dataz
iot-jobs-data�kinesisanalyticszkinesis-analytics�kinesisvideoz
kinesis-videoz
lex-modelszlex-model-building-servicezlex-runtimezlex-runtime-service�logszcloudwatch-logs�machinelearningzmachine-learningzmarketplace-entitlement�marketplacecommerceanalyticszmarketplace-commerce-analyticszmetering.marketplacezmarketplace-metering�meteringmarketplace�mghz
migration-hubz
models.lex�
monitoring�
cloudwatchzmturk-requester�mturk�resourcegroupstaggingapizresource-groups-tagging-api�route53zroute-53�route53domainszroute-53-domainszruntime.lexzruntime.sagemakerzsagemaker-runtime�sdb�simpledb�secretsmanagerzsecrets-manager�serverlessrepo�serverlessapplicationrepository�servicecatalogzservice-catalog�states�sfn�
stepfunctions�storagegatewayzstorage-gatewayzstreams.dynamodb�taggingz^X-Amz-Checksum-([a-z0-9]*)$)�flagsc��\V\4'dV#\V\4'dVP4R8H#R#)zvEnsures a boolean value if a string or boolean is provided

For strings, the value for True/False is case insensitive
�trueF)�
isinstance�bool�str�lower��vals&�0/usr/lib/python3/dist-packages/botocore/utils.py�ensure_booleanr~�s7��
�#�t����
�	�C��	�	��y�y�{�f�$�$��c���VPR4pVe3VP4pV\9dRVR\/p\R/VBhV#VPR4'dR#R#)z~Resolving IMDS endpoint mode to either IPv6 or IPv4.

ec2_metadata_service_endpoint_mode takes precedence over imds_use_ipv6.
�"ec2_metadata_service_endpoint_mode�mode�valid_modes�
imds_use_ipv6�ipv6�ipv4�)�get_config_variablerz�METADATA_ENDPOINT_MODESr+)�session�
endpoint_mode�lendpoint_mode�error_msg_kwargss&   r}�resolve_imds_endpoint_moder��sw��
�/�/�,��M�� �&�,�,�.���!8�8��
��6� ��/�B�1A�B�B���	�	$�	$�_�	5�	5��rc���\VR4;'dZVPPRR4;'d6VPPR4R8H;'dVPR8H#)z�Determines if the provided shape is the special header type jsonvalue.

:type shape: botocore.shape
:param shape: Shape to be inspected for the jsonvalue trait.

:return: True if this type is a jsonvalue, False otherwise
:rtype: Bool
�
serialization�	jsonvalueF�location�header�string)�hasattrr��get�	type_name)�shapes&r}�is_json_value_headerr��sn��	���'�	(�	(����#�#�K��7�	(�	(����#�#�J�/�8�;�	(�	(�
�O�O�x�'�	rc���VfR#\V\PP4'dW9#VP	4VP4Uu.uFq"P	4NK	up9#uupi)z&Case-insensitive check for header key.F)rw�botocore�
awsrequest�HeadersDictrz�keys)�header_name�headers�keys&& r}�
has_headerr��s]�����	�G�X�0�0�<�<�	=�	=��%�%�� � �"�g�l�l�n�&M�n�s�y�y�{�n�&M�M�M��&Ms�A3c��VPPRVPPRVP44pVPRR4pVPRR4p\P
!RRV4pV#)znReturns the module name for a service

This is the value used in both the documentation and client class name
�serviceAbbreviation�serviceFullName�Amazon��AWSz\W+)�metadatar��service_name�replace�re�sub)�
service_model�names& r}�get_service_module_namer�	su��
�!�!�%�%�����"�"��}�9�9�	
��D��<�<��"�%�D��<�<��r�"�D�
�6�6�&�"�d�#�D��Krc�,�V'gR#\V4#)�/)�remove_dot_segments��paths&r}�normalize_url_pathr�s�����t�$�$rc�$�VfV#\V4#)zHReturns None if val is None, otherwise ensure value
converted to boolean)r~r{s&r}�normalize_booleanr� s���{��
��c�"�"rc�v�V'gR#VPR4p.pVFJpV'gK
VR8wgKVR8XdV'dVP4K7K9VPV4KL	V^,R8XdRpMRpVR,R8XdV'dRpMRpVRPV4,V,#)r�r��.z..���)�split�pop�append�join)�url�	input_url�output_list�x�first�lasts&     r}r�r�)s������	�	�#��I��K�
���1��c���D�y���O�O�%���"�"�1�%�
��1�v��}�����
�2�w�#�~�+������3�8�8�K�(�(�4�/�/rc�r�V'dVR8Xd
\VR7hRFpW9gK\VR7h	R#)r���
expressionN)�[�]�*)r()r��invalids& r}�validate_jmespath_for_setr�Ds4����s�*�$�
�;�;�"��� �(�J�?�?�#rc��V'd\V4VPR^4pV^,\V4^8�d
V^,MRreV'g
\VR7hV'dWP9d/W&\	W,WbRR7#W V&R#)r�r�r�F)�is_firstN)r�r��lenr(�set_value_from_jmespath)�sourcer��valuer��bits�current_key�	remainders&&&&   r}r�r�Os~���!�*�-����C��#�D�!�!�W��T��Q��d�1�g�B���$�
�;�;���$�#%�F��&����E�
�	
�
 �;�rc�R�VPR/4pVPR4R8HpV#)z9Determine if request is intended for an MRAP accesspoint.�s3_accesspoint�regionr��r�)�contextr��	is_globals&  r}�is_global_accesspointr�ms.���[�[�!1�2�6�N��"�"�8�,��2�I��rc��\RR7p\V4pVP!V3/VB\V4# \T4i;i)�DISABLED)�plugins)r7r9�
create_clientr8)r�r��kwargs�ctx�tokens&&,  r}�create_nested_clientr�tsB���
�
+�C��s�#�E�$��$�$�\�<�V�<��U�#���U�#�s	�7�
Ac��]tRtRtRtRtR#)�_RetriesExceededError�z@Internal exception used when the number of retries are exceeded.r�N)�__name__�
__module__�__qualname__�__firstlineno__�__doc__�__static_attributes__r�rr}r�r��s��J�rr�c�&a�]tRtRtoRtRtVtR#)�BadIMDSRequestErrori�c��WnR#�N��request��selfr�s&&r}�__init__�BadIMDSRequestError.__init__�s���rr�N)r�r�r�r�r�r��__classdictcell__��
__classdict__s@r}r�r��s�����rr�c�a�]tRtRto]tRtRt]^]	RRR3Rlt
RtRtRt
R	tRR
ltRtRtR
tRtRtRtRRltRtVtR#)�IMDSFetcheri�zlatest/api/token�21600Nc��WnW nVf/pVPW64VnW`nVf\
PP4pVPRR4P4R8HVn
VPR4VnWPn\PPVP\!VP4R7VnR#)N�AWS_EC2_METADATA_DISABLED�falserv�ec2_metadata_v1_disabled)�timeout�proxies)�_timeout�
_num_attempts�_select_base_url�	_base_url�_config�os�environ�copyr�rz�	_disabled�_imds_v1_disabled�_user_agentr��httpsession�URLLib3Session�get_environ_proxies�_session)r�r�num_attempts�base_url�env�
user_agentrEs&&&&&&&r}r��IMDSFetcher.__init__�s��� �
�)���>��F��.�.�x�@������;��*�*�/�/�#�C��G�G�/��9�?�?�A�V�K�	
��"(���,F�!G���%�� �,�,�;�;��M�M�'����7�<�
��
rc��VP#r�)r�r�s&r}�get_base_url�IMDSFetcher.get_base_url�s���~�~�rc�l�Vf/pVPR4R8HpVPR4pV'dV'd\PR4RpV\8wdTpM V'dTpMV'd\pM\p\PRV4\
V4'g
\VR7hV#)Nr�r��ec2_metadata_service_endpointzFCustom endpoint and IMDS_USE_IPV6 are both set. Using custom endpoint.zIMDS ENDPOINT: %s)�endpoint)r��logger�warning�METADATA_BASE_URL�METADATA_BASE_URL_IPv6�debug�is_valid_urir*)r�rrE�
requires_ipv6�custom_metadata_endpoint�chosen_base_urls&&&   r}r�IMDSFetcher._select_base_url�s����>��F�
�J�J�;�<��F�	�$*�:�:�.M�#N� ��5��N�N�X�
����(�(�&�O�
%�6�O�
�4�O�/�O����(�/�:��O�,�,�*�O�D�D��rc��RpVP'd$VPPR4'gRpVPVV2#)r�r�)r�endswith)r�r��seps&& r}�_construct_url�IMDSFetcher._construct_url�sA�����>�>�>�$�.�.�"9�"9�#�">�">��C��.�.�!�#��t�f�-�-rc	��VP4VPVP4pRVP/pVP	V4\
PPRWR7p\VP4F|pVPPVP44pVP^�8XdVPu#VPR	9dR#VPR
9d\V4hK~	R# \ dR#\"d%p\$P'RTTRR7Rp?K�Rp?i\(dBp\+TP,P/R4\04'd
\3YR7hhRp?ii;i)z$x-aws-ec2-metadata-token-ttl-seconds�PUT��methodr�r�N�OCaught retryable HTTP exception while making metadata service request to %s: %sT��exc_info�error)rr6)i�i�i�)i�)�_assert_enabledr-�_TOKEN_PATH�
_TOKEN_TTL�_add_user_agentr�r��
AWSRequest�rangerr�send�prepare�status_code�textr�r/�RETRYABLE_HTTP_ERRORSr r$r%rwr�r�r	r*)r�r�r�r��i�response�es&      r}�_fetch_metadata_token�!IMDSFetcher._fetch_metadata_token�s\�������!�!�$�"2�"2�3��2�D�O�O�
��	
���W�%��%�%�0�0��c�1�
���t�)�)�*�A�
��=�=�-�-�g�o�o�.?�@���'�'�3�.�#�=�=�(��)�)�_�<���)�)�V�3�-�g�6�6�4�+�0��$�
��(�
����0���!�����#�
��a�h�h�l�l�7�3�5G�H�H�2�C�I�I���	
�sC�AD�
D�!D�F
�F
�F
�D;�;F
�F
�	<F�F
c	�@�VP4V'gVP4Vf
VPpVPV4p/pVeW5R&VP	V4\VP4F`p\PPRWER7pVPPVP44pV!V4'gVu#Kb	VP!4h \d%p	\PRTT	RR7Rp	?	K�Rp	?	ii;i)aMake a get request to the Instance Metadata Service.

:type url_path: str
:param url_path: The path component of the URL to make a get request.
    This arg is appended to the base_url that was provided in the
    initializer.

:type retry_func: callable
:param retry_func: A function that takes the response as an argument
     and determines if it needs to retry. By default empty and non
     200 OK responses are retried.

:type token: str
:param token: Metadata token to send along with GET requests to IMDS.
Nzx-aws-ec2-metadata-token�GETr1r3Tr4)r7�_assert_v1_enabled�_default_retryr-r:r<rr�r�r;rr=r>rAr r$�_RETRIES_EXCEEDED_ERROR_CLS)
r��url_path�
retry_funcr�r�r�rBr�rCrDs
&&&&      r}�_get_request�IMDSFetcher._get_request�s�� 	
������#�#�%����,�,�J��!�!�(�+������27�.�/����W�%��t�)�)�*�A�
�"�-�-�8�8� �c�9��� �=�=�-�-�g�o�o�.?�@��!�(�+�+�#�O�,�
+� �.�.�0�0��)�
����0���!�����
�s�>AC.�.D�9D�Dc�D�VPeVPVR&R#R#)Nz
User-Agent)r)r�r�s&&r}r:�IMDSFetcher._add_user_agent$s#�����'�$(�$4�$4�G�L�!�(rc�t�VP'd&\PR4VP4hR#)z)Access to EC2 metadata has been disabled.N)r
r r$rKrs&r}r7�IMDSFetcher._assert_enabled(s,���>�>�>��L�L�D�E��2�2�4�4�rc�B�VP'd
\RR7hR#)zLUnable to retrieve token for use in IMDSv2 call and IMDSv1 has been disabled��	error_msgN)rr-rs&r}rI�IMDSFetcher._assert_v1_enabled-s#���!�!�!�(�h��
�"rc�V�VPV4;'gVPV4#r���_is_non_ok_response�	_is_empty�r�rCs&&r}rJ�IMDSFetcher._default_retry3�$���'�'��1�M�M�T�^�^�H�5M�Mrc�T�VP^�8wdVPVRRR7R#R#)��znon-200T��log_bodyF)r?�_log_imds_responser\s&&r}rZ�IMDSFetcher._is_non_ok_response6s+�����3�&��#�#�H�i�$�#�G��rc�V�VP'gVPVRRR7R#R#)zno bodyTraF)�contentrcr\s&&r}r[�IMDSFetcher._is_empty<s)�������#�#�H�i�$�#�G��rc���RpW!PVP.pV'd%VR,
pVPVP4\P
!V.VO5!R#)zHMetadata service returned %s response with status code of %s for url: %sz, content body: %sN)r?r�r�rfr r$)r�rC�
reason_to_logrb�	statement�logger_argss&&&&  r}rc�IMDSFetcher._log_imds_responseBsU��
1�	�%�&:�&:�H�L�L�I����-�-�I����x�/�/�0����Y�-��-r)rr	r
rrrrrr��F)r�r�r�r�r�rKr8r9� DEFAULT_METADATA_SERVICE_TIMEOUTr"r�rrr-rErNr:r7rIrJrZr[rcr�r�r�s@r}r�r��sr����"7��$�K��J�1��"����
�8��>.�"�H*1�X5�5�
�N���	.�	.rr�c�da�]tRtRtoRt.R
OtRtRRltRRltRt	Rt
R	tR
tRt
RtVtR#)�InstanceMetadataFetcheriNz*latest/meta-data/iam/security-credentials/c�0�VP4pVPV4pVPW!4pVPV4'd<RVRVR,RVR,RVR,RVR,/pVP	V4V#R	V9dR
V9d\
P
RV4/# TPd%\
P
RTP4/#\d,p\
P
R
TP4Rp?/#Rp?ii;i)�	role_name�
access_key�AccessKeyId�
secret_key�SecretAccessKeyr��Token�expiry_time�
Expiration�Code�Messagez7Error response received when retrievingcredentials: %s.�\Max number of attempts exceeded (%s) when attempting to retrieve data from metadata service.zBad IMDS request: %sN)rE�
_get_iam_role�_get_credentials�_contains_all_credential_fields�_evaluate_expirationr r$rKrr�r�)r�r�rr�credentialsrDs&    r}�retrieve_iam_role_credentials�5InstanceMetadataFetcher.retrieve_iam_role_credentialsWs��%	<��.�.�0�E��*�*�5�1�I��/�/�	�A�K��3�3�K�@�@��� �+�m�"<� �+�.?�"@��[��1�!�;�|�#<����)�)�+�6�"�"��[�(�Y�+�-E��L�L�+�#��
�	���/�/�	��L�L�E��"�"�
��	�#�	<��L�L�/����;�;��	��	<�s*�BB,�%B,�,1D� D�)D�* D�DNc�f�VPVPVPVR7P#��rLrMr�)rN�	_URL_PATH�_needs_retry_for_role_namer@)r�r�s&&r}r}�%InstanceMetadataFetcher._get_iam_role�s4��� � ��^�^��6�6��!�
��$�		rc��VPVPV,VPVR7p\P!VP
4#r�)rNr��_needs_retry_for_credentialsr�loadsr@)r�rrr��rs&&& r}r~�(InstanceMetadataFetcher._get_credentials�sD������^�^�i�/��8�8��
�
��
�z�z�!�&�&�!�!rc��\P!VP4R# \dTP	TR4R#i;i)Fzinvalid jsonT)rr�r@�
ValueErrorrcr\s&&r}�_is_invalid_json�(InstanceMetadataFetcher._is_invalid_json�s<��	��J�J�x�}�}�%����	��#�#�H�n�=��	�s� $�A�Ac�V�VPV4;'gVPV4#r�rYr\s&&r}r��2InstanceMetadataFetcher._needs_retry_for_role_name�r^rc��VPV4;'g+VPV4;'gVPV4#r�)rZr[r�r\s&&r}r��4InstanceMetadataFetcher._needs_retry_for_credentials�sC���$�$�X�.�
/�
/��~�~�h�'�
/�
/��$�$�X�.�	
rc�j�VPF"pW!9gK\PRV4R#	R#)z3Retrieved credentials is missing required field: %sFT)�_REQUIRED_CREDENTIAL_FIELDSr r$)r�r��fields&& r}r�7InstanceMetadataFetcher._contains_all_credential_fields�s4���5�5�E��'����I����
6�rc��VPR4pVfR#\PPVR4pVPPRR4p\P
!^xR4pW4,p\
4p\P!VR7pW',
pWh8�d<Wg,p	V	PR4VR&\PRV^<,4R#R# \d"\PRTR,4R#i;i)rxNz%Y-%m-%dT%H:%M:%SZ�ec2_credential_refresh_windowiX��secondsz�Attempting credential expiration extension due to a credential service availability issue. A refresh of these credentials will be attempted again within the next %.0f minutes.z!Unable to parse expiry_time in %s)
r�r�strptimer	�random�randintr�	timedelta�strftimer �infor�r$)
r�r��
expiration�refresh_interval�jitter�refresh_interval_with_jitter�current_time�refresh_offset�extension_time�new_times
&&        r}r��,InstanceMetadataFetcher._evaluate_expiration�s�� �_�_�]�3�
����	�!�*�*�3�3��0��J� $�|�|�/�/�/�� ���^�^�C��-�F�+;�+D�(�/�1�L�%�/�/�4��N�(�8�N��-�'�8��-5�->�->�(�.��M�*����-�1�2�5��.���	��L�L�3�[��5O�
�	�s�CC � (D�Dr�)rtrvrwryr�)r�r�r�r�r�r�r�r}r~r�r�r�rr�r�r�r�s@r}rprpNsA����<�I�#��'�R�"��N�
��!�!rrpc�Ba�]tRtRtoR	RltRtRtRtRtRt	Vt
R#)
�IMDSRegionProvideri�Nc�R�WnVf\PpW nW0nR#)a�Initialize IMDSRegionProvider.
:type session: :class:`botocore.session.Session`
:param session: The session is needed to look up configuration for
    how to contact the instance metadata service. Specifically the
    whether or not it should use the IMDS region at all, and if so how
    to configure the timeout and number of attempts to reach the
    service.
:type environ: None or dict
:param environ: A dictionary of environment variables to use. If
    ``None`` is the argument then ``os.environ`` will be used by
    default.
:type fecther: :class:`botocore.utils.InstanceMetadataRegionFetcher`
:param fetcher: The class to actually handle the fetching of the region
    from the IMDS. If not provided a default one will be created.
N)rr
r�_environ�_fetcher)r�r�r�fetchers&&&&r}r��IMDSRegionProvider.__init__�s!��  �
��?��j�j�G��
��
rc�&�VP4pV#)z#Provide the region value from IMDS.)�_get_instance_metadata_region)r��instance_regions& r}�provide�IMDSRegionProvider.provide�s���<�<�>���rc�F�VP4pVP4pV#r�)�_get_fetcher�retrieve_region)r�r�r�s&  r}r��0IMDSRegionProvider._get_instance_metadata_region�s#���#�#�%���(�(�*���
rc�`�VPfVP4VnVP#r�)r��_create_fetcherrs&r}r��IMDSRegionProvider._get_fetcher�s&���=�=� � �0�0�2�D�M��}�}�rc�p�VPPR4pVPPR4pRVPPR4R\VP4RVPPR4/p\VVVPVPP4VR7pV#)�metadata_service_timeout�metadata_service_num_attemptsrr�r)rrrrrE)rr�r��InstanceMetadataRegionFetcherr�r)r��metadata_timeout�metadata_num_attempts�imds_configr�s&    r}r��"IMDSRegionProvider._create_fetcher�s����=�=�<�<�&�
��!%�
�
� A� A�+�!
��
,�T�]�]�-N�-N�/�.�
1�2L��
�
�3�
'��
�
�(I�(I�*�)�

��0�$�.��
�
��}�}�/�/�1��
���r)r�r�r�NN)r�r�r�r�r�r�r�r�r�r�r�r�s@r}r�r��s#���� �,�
�
�
�rr�c�0a�]tRtRtoRtRtRtRtVtR#)r�iz-latest/meta-data/placement/availability-zone/c��VP4pV# TPd%\PRTP4R#i;i)aGet the current region from the instance metadata service.
:rvalue: str
:returns: The region the current instance is running in or None
    if the instance metadata service cannot be contacted or does not
    give a valid response.
:rtype: None or str
:returns: Returns the region as a string if it is configured to use
    IMDS as a region source. Otherwise returns ``None``. It will also
    return ``None`` if it fails to get the region from IMDS due to
    exhausting its retries or not being able to connect.
r|N)�_get_regionrKr r$r)r�r�s& r}r��-InstanceMetadataRegionFetcher.retrieve_regionsO��	��%�%�'�F��M���/�/�	��L�L�E��"�"�
�
�
	�s��1A	�A	c��VP4pVPVPVPVR7pVPpVRRpV#)r�Nr�)rErNr�rJr@)r�r�rC�availability_zoner�s&    r}r��)InstanceMetadataRegionFetcher._get_region+sU���*�*�,���$�$��^�^��*�*��%�
��
%�M�M��"�3�B�'���
rr�N)	r�r�r�r�r�r�r�r�r�r�s@r}r�r�s����?�I��.	�	rr�c��VF�p\W,\4'd3W09d!W19d\W,W,4KEW,W&KQ\W,\4'dVV'dNW09d<\W,\4'd W,P	W,4K�W,W&K�W,W&K�	R#)z�Given two dict, merge the second dict into the first.

The dicts can have arbitrary nesting.

:param append_lists: If true, instead of clobbering a list with the new
    value, append all of the new values onto the original list.
N)rw�dict�merge_dicts�list�extend)�dict1�dict2�append_listsr�s&&& r}r�r�7s������e�j�$�'�'��|����E�J��
�3�"�Z��
���
�D�
)�
)�l��|�
�5�:�t� <� <��
�!�!�%�*�-�"�Z��
���E�J�%rc�L�/pVFpW,WP4&K	V#)zDCopies the given dictionary ensuring all keys are lowercase strings.)rz)�originalrr�s&  r}�lowercase_dictr�Ts&��
�D���$�M��Y�Y�[����Krc���V!V4;_uu_4pVP4p\V4uuRRR4# +'giR#;i \d\TR7hi;i)Nr�)�read�parse_key_val_file_contents�OSErrorr!)�filename�_open�f�contentss&&  r}�parse_key_val_filer�\sL��,�
�8�_�_���v�v�x�H�.�x�8��_�_�_���,��(�+�+�,�s%�A�8�
A�A		�A�	A�A$c��/pVP4FDpRV9dKVPR^4wr4VP4pVP4pWAV&KF	V#)�=)�
splitlinesr��strip)r��final�liner�r|s&    r}r�r�es\��
�E��#�#�%���d�?���:�:�c�1�%����i�i�k���i�i�k���c�
�
&��Lrc	�j�.p\VR4'dVP4pMTpVFvwrE\V\4'd4VF+pVP	\V4R\V424K-	KNVP	\V4R\V424Kx	RP
V4#)a6Urlencode a dict or list into a string.

This is similar to urllib.urlencode except that:

* It uses quote, and not quote_plus
* It has a default list of safe chars that don't need
  to be encoded, which matches what AWS services expect.

If any value in the input ``mapping`` is a list type,
then each list element wil be serialized.  This is the equivalent
to ``urlencode``'s ``doseq=True`` argument.

This function should be preferred over the stdlib
``urlencode()`` function.

:param mapping: Either a dict to urlencode or a list of
    ``(key, value)`` pairs.

�itemsr��&)r�r�rwr�r��percent_encoder�)�mapping�safe�
encoded_pairs�pairsr�r��elements&&     r}�percent_encode_sequencer�ts���(�M��w�� � ��
�
������
���e�T�"�"� ���$�$�%�c�*�+�1�^�G�-D�,E�F��!�

� � �!�#�&�'�q���)>�(?�@�
���8�8�M�"�"rc��\V\\34'g\V4p\V\4'gVPR4p\	WR7#)a�Urlencodes a string.

Whereas percent_encode_sequence handles taking a dict/sequence and
producing a percent encoded string, this function deals only with
taking a string (not a dict/sequence) and percent encoding it.

If given the binary type, will simply URL encode it. If given the
text type, will produce the binary type by UTF-8 encoding the
text. If given something else, will convert it to the text type
first.
�utf-8)r�)rw�bytesry�encoder)�	input_strr�s&&r}r�r��sF���i�%���.�.��	�N�	��i��'�'��$�$�W�-�	���&�&rc
��\P!R^^^^^\4R7pVPV!44pV\P!VR7,#)axParse numerical epoch timestamps (seconds since 1970) into a
``datetime.datetime`` in UTC using ``datetime.timedelta``. This is intended
as fallback when ``fromtimestamp`` raises ``OverflowError`` or ``OSError``.

:type value: float or int
:param value: The Unix timestamps as number.

:type tzinfo: callable
:param tzinfo: A ``datetime.tzinfo`` class or compatible callable.
���tzinfor�)rr�
astimezoner�)r�r��
epoch_zero�epoch_zero_localizeds&&  r}�_epoch_seconds_to_datetimer�sK���"�"�4��A�q�!�Q�u�w�G�J�%�0�0���:���(�"4�"4�U�"C�C�Crc��\V\\34'd%\PP	W!44#\PP	\V4V!44# \
\3dMi;i\PPTR\4/R7# \
\3dp\
RTRT24hRp?ii;i)z.Parse timestamp with pluggable tzinfo options.�GMT)�tzinfoszInvalid timestamp "z": N)rw�int�floatr�
fromtimestamp�	TypeErrorr��dateutil�parser�parser)r�r�rDs&& r}�_parse_timestamp_with_tzinfor�s����%�#�u��&�&�� � �.�.�u�f�h�?�?�	��$�$�2�2�5��<���J�J���:�&�	��	��>����$�$�U�U�E�G�4D�$�E�E���z�"�>��.�u�g�S���<�=�=��>�s*�-A0�0B�B�*B3�3C�C�Cc���\4pVFp\W4u#	\V4pVFp\WBR7u#	\RTR24h \\3d.p\PRTPTR7Rp?K}Rp?ii;i \\3d-p\PRXPTR7Rp?L�Rp?ii;i \\3dL�i;i)z�Parse a timestamp into a datetime object.

Supported formats:

    * iso8601
    * rfc822
    * epoch (value is an integer)

This will return a ``datetime.datetime`` object.

z2Unable to parse timestamp with "%s" timezone info.r4Nr�zHUnable to parse timestamp using fallback method with "%s" timezone info.z1Unable to calculate correct timezone offset for "�")rrr��
OverflowErrorr r$r�rrrr��RuntimeError)r��tzinfo_optionsr�rD�
numeric_values&    r}�parse_timestampr�s���(�)�N� ��	�/��>�>�!���e��
�		�(��1�-�O�O�)��
;�E�7�!�D����7��'�	��L�L�D�����
�
�
��	��(��'�	��L�L�!�����	
�
�
��	��

�z�"�
��
�sE�
A�C�B�B�B�""B
�
B�C�#"C
�
C�C&�%C&c���\V\4'dTpM\V4pVPfVP	\4R7pV#VP
\44pV#)aUConverted the passed in value to a datetime object with tzinfo.

This function can be used to normalize all timestamp inputs.  This
function accepts a number of different types of inputs, but
will always return a datetime.datetime object with time zone
information.

The input param ``value`` can be one of several types:

    * A datetime object (both naive and aware)
    * An integer representing the epoch time (can also be a string
      of the integer, i.e '0', instead of 0).  The epoch time is
      considered to be UTC.
    * An iso8601 formatted timestamp.  This does not need to be
      a complete timestamp, it can contain just the date portion
      without the time component.

The returned value will be a datetime object that will have tzinfo.
If no timezone info was provided in the input value, then UTC is
assumed, not local time.

r�)rw�_DatetimeClassrr�r�rr�)r��datetime_objs& r}�parse_to_aware_datetimersg��6�%��(�(���
'�u�-�����"�
$�+�+�5�7�+�;����$�.�.�u�w�7���rc�
�\P!R^^4pVPf!Vf\4pVPVR7pVPRR7VP	4,
V,
pVP4#)a[Calculate the timestamp based on the given datetime instance.

:type dt: datetime
:param dt: A datetime object to be converted into timestamp
:type default_timezone: tzinfo
:param default_timezone: If it is provided as None, we treat it as tzutc().
                         But it is only used when dt is a naive datetime.
:returns: The timestamp
r�Nr�)rr�rr��	utcoffset�
total_seconds)�dt�default_timezone�epoch�ds&&  r}�datetime2timestampr/sn��
���d�A�q�)�E�	�y�y���#�$�w��
�Z�Z�/�Z�
0��
�
�
�$�
��"�,�,�.�0�5�8�A��?�?��rc��a�\P!4p\V3RlR4FpVPV4K	V'dVP	4#VP4#)a�Calculate a sha256 checksum.

This method will calculate the sha256 checksum of a file like
object.  Note that this method will iterate through the entire
file contents.  The caller is responsible for ensuring the proper
starting position of the file and ``seek()``'ing the file back
to its starting location if other consumers need to read from
the file like object.

:param body: Any file like object.  The file must be opened
    in binary mode such that a ``.read()`` call returns bytes.
:param as_hex: If True, then the hex digest is returned.
    If False, then the digest (as binary bytes) is returned.

:returns: The sha256 checksum

c�&<�SPR4#�i��r�)�bodys�r}�<lambda>�"calculate_sha256.<locals>.<lambda>Us���d�i�i��4rr)�hashlib�sha256�iter�update�	hexdigest�digest)r%�as_hex�checksum�chunksf&  r}�calculate_sha256r1BsN���$�~�~��H��4�c�:�������;�
��!�!�#�#���� � rc�aa�.pRo\Pp\VV3RlR4F(pVPV!V4P	44K*	V'gV!R4P4#\
V4^8�d].p\V4FGwrVVe.VPV!WV,4P	44K6VPV4KI	TpKl\P!V^,4PR4#)a@Calculate a tree hash checksum.

For more information see:

http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html

:param body: Any file like object.  This has the same constraints as
    the ``body`` param in calculate_sha256

:rtype: str
:returns: The hex version of the calculated tree hash

c�&<�SPS4#r�r$)r%�required_chunk_sizes��r}r&�%calculate_tree_hash.<locals>.<lambda>ns���d�i�i�(;�<rr�asciir#)r(r)r*r�r-r,r��	_in_pairs�binascii�hexlify�decode)r%�chunksr)r0�
new_chunksr��secondr4sf      @r}�calculate_tree_hashr>]s�����F�%��
�^�^�F��<�c�B���
�
�f�U�m�*�*�,�-�C���c�{�$�$�&�&�

�f�+��/��
�&�v�.�M�E��!��!�!�&���"8�"?�"?�"A�B��!�!�%�(�/������F�1�I�&�-�-�g�6�6rc�.�\V4p\W4#r�)r*r)�iterable�shared_iters& r}r7r7~s���x�.�K�
�{�0�0rc�0a�]tRtRtoRtRtRtRtVtR#)�CachedPropertyi�z�A read only property that caches the initially computed value.

This descriptor will only call the provided ``fget`` function once.
Subsequent access to this property will return the cached value.

c��WnR#r���_fget)r��fgets&&r}r��CachedProperty.__init__�s���
rc�x�VfV#VPV4pW1PVPP&V#r�)rF�__dict__r�)r��obj�cls�computed_values&&& r}�__get__�CachedProperty.__get__�s5���;��K�!�Z�Z��_�N�0>�L�L����,�,�-�!�!rrEN)	r�r�r�r�r�r�rNr�r�r�s@r}rCrC�s������"�"rrCc�Pa�]tRtRtoRtRRltRtRRltRtRt	Rt
R	tVtR
#)
�ArgumentGeneratori�a�Generate sample input based on a shape model.

This class contains a ``generate_skeleton`` method that will take
an input/output shape (created from ``botocore.model``) and generate
a sample dictionary corresponding to the input/output shape.

The specific values used are place holder values. For strings either an
empty string or the member name can be used, for numbers 0 or 0.0 is used.
The intended usage of this class is to generate the *shape* of the input
structure.

This can be useful for operations that have complex input shapes.
This allows a user to just fill in the necessary data instead of
worrying about the specific structure of the input arguments.

Example usage::

    s = botocore.session.get_session()
    ddb = s.get_service_model('dynamodb')
    arg_gen = ArgumentGenerator()
    sample_input = arg_gen.generate_skeleton(
        ddb.operation_model('CreateTable').input_shape)
    print("Sample input for dynamodb.CreateTable: %s" % sample_input)

c��WnR#r���_use_member_names)r��use_member_namess&&r}r��ArgumentGenerator.__init__�s��!1�rc�(�.pVPW4#)z�Generate a sample input.

:type shape: ``botocore.model.Shape``
:param shape: The input shape.

:return: The generated skeleton input corresponding to the
    provided input shape.

)�_generate_skeleton)r�r��stacks&& r}�generate_skeleton�#ArgumentGenerator.generate_skeleton�s�����&�&�u�4�4rc��VPVP4VPR8Xd"VPW4VP	4#VPR8Xd"VPW4VP	4#VPR8Xd"VP
W4VP	4#VPR8XdzVP'dVVP	4#VP'd1\P!VP4VP	4#VP	4R#VPR9dVP	4^#VPR9dVP	4R#VPR8XdVP	4R#VPR8Xd,\P!R	^^^^^4VP	4#VP	4R
# TP	4i;i)
�	structurer��mapr�r�g�booleanT�	timestampr�N)�integer�long)r�double)r�r�r��_generate_type_structurer��_generate_type_list�_generate_type_maprT�enumr��choicer�r�r�rYr�s&&&&r}rX�$ArgumentGenerator._generate_skeleton�s���
���U�Z�Z� �	����+�-��4�4�U�B�(
�I�I�K�'���F�*��/�/��=�$
�I�I�K�#���E�)��.�.�u�<� 
�I�I�K����H�,��)�)�)��
�I�I�K��:�:�:�!�=�=����4�
�I�I�K��
�I�I�K����$7�7��
�I�I�K����$7�7��
�I�I�K����I�-��
�I�I�K����K�/��(�(��q�!�Q��1�=��I�I�K�0�
�I�I�K��E�I�I�K�sG�!G8�!G8�!G8�3"G8�G8�(G8�:G8�=G8�!G8�G8�)+G8�8H
c���VPVP4^8�d/#\4pVPP	4FwrEVPWRVR7W4&K	V#)�)r�)�countr�r�membersr�rX)r�r�rY�skeleton�member_name�member_shapes&&&   r}rd�*ArgumentGenerator._generate_type_structure�sa���;�;�u�z�z�"�Q�&��I��=��).���)<�)<�)>�%�K�$(�$;�$;��+�%<�%�H�!�*?��rc��RpVP'dVPPpVPVPW#4.#�r�)rT�memberr�rXris&&& r}re�%ArgumentGenerator._generate_type_list�sB�����!�!�!��<�<�$�$�D��#�#�E�L�L�%�>�
�	
rc��VPpVPpVPR8XgQh\RVP	WB43.4#)r��KeyName)r�r�r�rrX)r�r�rY�	key_shape�value_shapes&&&  r}rf�$ArgumentGenerator._generate_type_map�sM���I�I�	��k�k���"�"�h�.�.�.���D�3�3�K�G�H�
�
�	
rrSNrmrt)
r�r�r�r�r�r�rZrXrdrerfr�r�r�s@r}rQrQ�s-�����42�5��4�
�
�
rrQc��\P!V4'dR#R\V4PR2p\P
!V4RJ#)Fr�r�N)r�intersectionr�hostnamer�match��endpoint_urlr~s& r}�is_valid_ipv6_endpoint_urlr�sF���$�$�\�2�2���8�L�)�2�2�3�1�5�H����x�(��4�4rc�\�\V4Pp\P!V4RJ#r�)rr~r
rr�s& r}�is_valid_ipv4_endpoint_urlr�s&����%�.�.�H��=�=��"�$�.�.rc�.�\P!V4'dR#\V4pVPpVfR#\	V4^�8�dR#VR,R8XdVRRp\
P!R\
P4pVPV4#)z�Verify the endpoint_url is valid.

:type endpoint_url: string
:param endpoint_url: An endpoint_url.  Must have at least a scheme
    and a hostname.

:return: True if the endpoint url is valid. False otherwise.

FNr�z;^((?!-)[A-Z\d-]{1,63}(?<!-)\.)*((?!-)[A-Z\d-]{1,63}(?<!-))$r�)	rr}rr~r�r��compile�
IGNORECASEr)r��partsr~�alloweds&   r}�is_valid_endpoint_urlr�s����$�$�\�2�2���\�"�E��~�~�H����
�8�}�s�����|�s���C�R�=���j�j�F�
�
�
��G��=�=��"�"rc�>�\V4;'g\V4#r�)r�r�)r�s&r}r%r%0s$�� ��.���2L��3�rc��VfR#\P!R4pVPV4pV'g
\VR7hR#)z0Provided region_name must be a valid host label.Nz)^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{,63}(?<!-)$)�region_name)r�r�rr,)r��valid_host_label�valids&  r}�validate_region_namer�6s>������z�z�"N�O���"�"�;�/�E�� �[�9�9�rc��RV9dR#\V4pV^8gV^?8�dR#\PV4pVeVP4\V48wdR#R#)a~
Check to see if the ``bucket_name`` complies with the
restricted DNS naming conventions necessary to allow
access via virtual-hosting style.

Even though "." characters are perfectly valid in this DNS
naming scheme, we are going to punt on any name containing a
"." character because these will cause SSL cert validation
problems if we try to use virtual-hosting style addressing.
r�FT)r��LABEL_REr�end)�bucket_name�nrs&  r}�check_dns_namer�@sT���k����K��A��1�u��B����N�N�;�'�E��}��	�	��s�;�'7�7��rc���VPPRR4'dRp\WV4R# \d5pTPR,p\
P
RT4Rp?R#Rp?ii;i)aV
This handler looks at S3 requests just before they are signed.
If there is a bucket name on the path (true for everything except
ListAllBuckets) it checks to see if that bucket name conforms to
the DNS naming conventions.  If it does, it alters the request to
use ``virtual hosting`` style addressing rather than ``path-style``
addressing.

�use_global_endpointFzs3.amazonaws.comr�z2Not changing URI, bucket is not DNS compatible: %sN)r�r��switch_to_virtual_host_styler&r�r r$)r��signature_versionr��default_endpoint_urlr�rDr�s&&&&,  r}�fix_s3_hostr�Wsk�� �����0�%�8�8�1��
�$��(<�	
���
��h�h�}�-�����@�+�	
�	
��
�s�4�A3�)A.�.A3c�^�VPeR#\V4'd\PR4R#\	VP
4pVPVnVPPR4pVf
VPp\V4^8�EdV^,pV'gR#\PRVP
4\V4'd�\V4^8Xd2VPR	,R8wdV;PR,
unVPV4RPV4;'gRpTpVR,V,p	VPW�VPR3p
\V
4pW�n\PRV4R#\!VR7hR#)
a
This is a handler to force virtual host style s3 addressing no matter
the signature version (which is taken in consideration for the default
case). If the bucket is not DNS compatible an InvalidDNSName is thrown.

:param request: A AWSRequest object that is about to be sent.
:param signature_version: The signature version to sign with
:param default_endpoint_url: The endpoint to use when switching to a
    virtual style. If None is supplied, the virtual host will be
    constructed from the url of the request.
NzKRequest is GetBucketLocation operation, not checking for DNS compatibility.r�z*Checking for DNS compatible bucket for: %sr�r�zURI updated to: %s)r�r�)�	auth_path�_is_get_bucket_location_requestr r$rr�r�r��netlocr�r��remover��scheme�queryrr&)r�r�r�r�r��
path_partsr�r��global_endpoint�host�	new_tuple�new_uris&&&,        r}r�r�tsc�����$�	�	(��	1�	1�	���
%�	
�	��W�[�[�!�E��
�
�G�����!�!�#�&�J��#�$�|�|��
�:���� ��m���
����A�7�;�;�O��+�&�&��:��!�#��$�$�R�(�C�/��%�%��,�%����k�*��8�8�J�'�.�.�3�D�2�O���$��6�D����t�5�;�;��C�I� ��+�G�!�K��L�L�-�w�7�%�+�>�>�3rc�8�VPPR4#)z	?location)r�r+r�s&r}r�r��s���;�;����,�,rc�baa�SPo\P!S4VV3Rl4pV#)a�Method decorator for caching method calls to a single instance.

**This is not a general purpose caching decorator.**

In order to use this, you *must* provide an ``_instance_cache``
attribute on the instance.

This decorator is used to cache method calls.  The cache is only
scoped to a single instance though such that multiple instances
will maintain their own cache.  In order to keep things simple,
this decorator requires that you provide an ``_instance_cache``
attribute on your instance.

c��<�SV3pV'd'\\VP444pSW3pVPP	V4pVeV#S!V.VO5/VBpWPPV&V#r�)�tuple�sortedr��_instance_cacher�)r��argsr��	cache_key�kwarg_items�result�func�	func_names&*,   ��r}�_cache_guard�$instance_cache.<locals>._cache_guard�sw�����%�	����v�|�|�~� 6�7�K�"�D�6�I��%�%�)�)�)�4�����M��d�,�T�,�V�,��*0���Y�'��
r)r��	functools�wraps)r�r�r�sf @r}�instance_cacher��s1����
�
�I��_�_�T��
��
��rc�aa�VV3RlpV#)a�
Version of functools.lru_cache that stores a weak reference to ``self``.

Serves the same purpose as :py:func:`instance_cache` but uses Python's
functools implementation which offers ``max_size`` and ``typed`` properties.

lru_cache is a global cache even when used on a method. The cache's
reference to ``self`` will prevent garbage collection of the object. This
wrapper around functools.lru_cache replaces the reference to ``self`` with
a weak reference to not interfere with garbage collection.
c�<aa�\P!S/SBV3Rl4o\P!S4V3Rl4pSPVnV#)c�&<�S!V!4.VO5/VB#r�r�)�weakref_to_selfr�r�r�s&*,�r}�func_with_weakref�=lru_cache_weakref.<locals>.wrapper.<locals>.func_with_weakref�s�����)�;�D�;�F�;�;rc�<�VP4F*wr4\V\4'gK\V4W#&K,	S!\P
!V4.VO5/VB#r�)r�rwr�r��weakref�ref)r�r�r��	kwarg_key�kwarg_valuer�s&*,  �r}�inner�1lru_cache_weakref.<locals>.wrapper.<locals>.inner�sP���*0�,�,�.�&�	��k�4�0�0�(-�k�(:�F�%�+9�%�W�[�[��%6�H��H��H�Hr)r��	lru_cacher��
cache_info)r�r�r��
cache_args�cache_kwargssf @��r}�wrapper�"lru_cache_weakref.<locals>.wrapper�sY���	�	�	�j�	9�L�	9�	<�
:�	<�
����	�	I�
�	I�-�7�7����rr�)r�r�r�sjl r}�lru_cache_weakrefr��s���
��Nrc�F�\VP4PPR4pVUu.uFqD\9gKVNK	ppRp\V4^8�d VRP
V4R,,
pVR,
pVR9dR#\WRR7R#uupi)z?Switches the current s3 endpoint with an S3 Accelerate endpointr�zhttps://s3-accelerate.�
amazonaws.comNF)�use_new_scheme)�ListBuckets�CreateBucket�DeleteBucket)rr�r�r��S3_ACCELERATE_WHITELISTr�r��
_switch_hosts)r��operation_namer�r��prs&&,   r}�switch_host_s3_accelerater��s���
�W�[�[�!�(�(�.�.�s�3�E��>��1�&=�!=�Q�Q��E�>�'�H�
�5�z�A�~��C�H�H�U�O�c�)�)�����H��H�H���'�E�:��
?s�B�Bc��\P!VPPR44pVP	V4'dW!,p\W4R#R#)zBSwitches the host using a parameter value from a JSON request bodyr�N)rr��datar:r�r�)r��
param_name�request_json�new_endpoints&&  r}�switch_host_with_paramr�sE���:�:�g�l�l�1�1�'�:�;�L����
�#�#�#�/���g�,�$rc�>�\VPW4pW0nR#r�)�_get_new_endpointr�)r�r�r��final_endpoints&&& r}r�r�s��&����\��N�!�Krc��\V4p\V4pVPpV'd
VPpVVPVPVPR3p\V4p\PRW4V#)r��Updating URI from %s to %s)rr�r�r�r�rr r$)�original_endpointr�r��new_endpoint_components�original_endpoint_componentsr��final_endpoint_componentsr�s&&&     r}r�r�s���&�|�4��#+�,=�#>� �
)�
0�
0�F��(�/�/����&�&�$�)�)�$�*�*�
�!�� � 9�:�N�
�L�L�$�&7���rc���VFepW 9dS\W,\4'd7\W,\4'd\W,W,4K[W,W&Kg	R#)z�Deeply two dictionaries, overriding existing keys in the base.

:param base: The base dictionary which will be merged into.
:param extra: The dictionary to merge into the base. Keys from this
    dictionary will take precedence.
N)rwr��
deep_merge)�base�extrar�s&& r}r�r�.sO����
�K��4�9�d�+�+��5�:�t�,�,��t�y�%�*�-���J��	�rc�B�VPRR4P4#)z[Translate the form used for event emitters.

:param service_id: The service_id to convert.
� �-)r�rz)�
service_ids&r}�hyphenize_service_idr�Cs ��
���c�3�'�-�-�/�/rc�:a�]tRtRtoRtRtRtRtRtRt	Vt
R#)	�
IdentityCacheiKz�Base IdentityCache implementation for storing and retrieving
highly accessed credentials.

This class is not intended to be instantiated in user code.
�base_identity_cachec��WnW nR#r���_client�_credential_cls�r��client�credential_clss&&&r}r��IdentityCache.__init__T�
����-�rc��VP!R/VBpV!4pVPPVVVP^-^
R7pV#)�-)r��
refresh_usingr2�advisory_timeout�mandatory_timeoutr�)�build_refresh_callbackr��create_from_metadata�METHOD)r�r��callbackr��credential_entrys&,   r}�get_credentials�IdentityCache.get_credentialsXsT���.�.�8��8���:���/�/�D�D��"��;�;�� �E�
�� �rc��\4h)zuCallback to be implemented by subclasses.

Returns a set of metadata to be converted into a new
credential instance.
)�NotImplementedError)r�s,r}r�$IdentityCache.build_refresh_callbackds
��"�#�#rr�N)r�r�r�r�r�rr�rrr�r�r�s@r}r�r�Ks%�����#�F�.�
 �$�$rr�c�|aa�]tRtRtoRtRtRt]P!^dR7V3Rl4t	Rt
R
RltR	tVt
V;t#)�S3ExpressIdentityCacheimz�S3Express IdentityCache for retrieving and storing
credentials from CreateSession calls.

This class is not intended to be instantiated in user code.
�	s3expressc��WnW nR#r�r�r�s&&&r}r��S3ExpressIdentityCache.__init__vr�r)�maxsizec�$<�\SV`VR7#)��bucket)�superr)r�r�	__class__s&&�r}r�&S3ExpressIdentityCache.get_credentialszs����w�&�f�&�5�5rc�aa�VV3RlpV#)c�<�SPPSR7pVR,pSPVR,RR7pRVR,RVR,R	VR
,RV/#)��Bucket�CredentialsryT)�isorsrtrurvr��SessionTokenrx)r��create_session�_serialize_if_needed)rC�credsr�rr�s   ��r}�	refresher�@S3ExpressIdentityCache.build_refresh_callback.<locals>.refresherss����|�|�2�2�&�2�A�H��]�+�E��2�2��l�#��3��J��e�M�2��e�$5�6���~�.��z�	�
rr�)r�rr"sff r}r�-S3ExpressIdentityCache.build_refresh_callback~s���	��rc��\V\4'd*V'dVP4#VPR4#V#�z%Y-%m-%dT%H:%M:%S%Z�rwr�	isoformatr��r�r�rs&&&r}r �+S3ExpressIdentityCache._serialize_if_needed��4���e�^�,�,�����(�(��>�>�"7�8�8��rr�rm)r�r�r�r�r�rr�r�r�rrr r�r��
__classcell__)rr�s@@r}r
r
msD������F�.�����%�6�&�6�� �rr
c�@a�]tRtRtoRRltRRltRtRtRtVt	R#)	�S3ExpressIdentityResolveri�Nc�|�\P!V4VnVf\VPV4pW0nR#r�)r��proxyr�r
�_cache)r�r�r��caches&&&&r}r��"S3ExpressIdentityResolver.__init__�s,���}�}�V�,����=�*�4�<�<��H�E��rc���\PR4T;'g!VPPPpVPRVP4VPRVP4R#)z'Registering S3Express Identity Resolver�before-call.s3�before-sign.s3N)r r$r��metarZ�register�apply_signing_cache_key�resolve_s3express_identity�r��
event_emitter�emitters&& r}r8�"S3ExpressIdentityResolver.register�sZ�����>�?��;�;�4�<�<�#4�#4�#;�#;�����)�4�+G�+G�H����)�4�+J�+J�Krc���VPR/4pVPRR4pVPR/4PR4pVR8Xd&Ve VPR/4WbR,R&R#R#R#)�endpoint_properties�backendN�input_paramsr�	S3Express�signingr�)r��
setdefault)r��paramsr�r�r@rAr�s&&&,   r}r9�1S3ExpressIdentityResolver.apply_signing_cache_key�su��%�k�k�*?��D��%�)�)�)�T�:���k�k�.�"�5�9�9�(�C���k�!�k�&=����y�"�-�.9�I��{�+�'>�!rc�P�VPPR/4pVPR4pVR8XdrVPR4'dYVPVR&RV9dAVPPR/4PR/4PR4VR&R	#R	#R	#R	#)
rD�signing_namerzv4-s3express�identity_cacher��s3_redirectrFrN)r�r��
startswithr1)	r�r�rIr�r��request_signerr�r��signing_contexts	&&&&&&&, r}r:�4S3ExpressIdentityResolver.resolve_s3express_identity�s���"�/�/�-�-�i��<��&�*�*�>�:���;�&�+<�+G�+G��,
�,
�15���O�,�-��/�1��O�O�'�'�
�r�:��S��2�&��S��]� ��,�2�	,
�&r�r1r�r�)
r�r�r�r�r�r8r9r:r�r�r�s@r}r.r.�s�����L�:��rr.c�Va�]tRtRtoRtRRltRRltRtRtRt	R	t
R
tRtVt
R#)
�S3RegionRedirectorv2i�z�Updated version of S3RegionRedirector for use when
EndpointRulesetResolver is in use for endpoint resolution.

This class is considered private and subject to abrupt breaking changes or
removal without prior announcement. Please do not use it directly.
Nc�^�T;'g/Vn\P!V4VnR#r�)r1r�r0r��r��endpoint_bridger�r2s&&&&r}r��S3RegionRedirectorv2.__init__�s���k�k�r����}�}�V�,��rc�,�\PR4T;'g!VPPPpVPRVP4VPRVP4VPRVP4R#)z(Registering S3 region redirector handler�needs-retry.s3�before-parameter-build.s3zbefore-endpoint-resolution.s3N)	r r$r�r7rZr8�redirect_from_error�annotate_request_context�redirect_from_cacher;s&& r}r8�S3RegionRedirectorv2.register�sw�����?�@��;�;�4�<�<�#4�#4�#;�#;�����)�4�+C�+C�D����'��)F�)F�	
�	���+�T�-E�-E�	
rc�$�VfR#VPR/4PR/4p\PVPR44'd\P	R4R#VPR4'd\P	R4R#V^,PR/4pVPR	4pV^,PR
/4pVR9;'dVP
R8Hp	VR9;'d-VP
R8H;'dR
VPR/49p
VR8H;'dRV9pV^,RJ;'dV^,PR9pVR8Hp
VR8H;'dVP
R8gp\V	VV
V
VV.4'gR#VR,R,R,pVR,PR4pVPW�4pVf\P	RVV4R#\P	RVVV4VVPV&VPPpVPVVR,R,R,VR,R7pVPVR,VP4VR&RVR,R,R&VPPR4pVeJVP!V4pVwppVVR,R&/VR,PR/4CVCVR,R&^#) ��
An S3 request sent to the wrong region will return an error that
contains the endpoint the request should be sent to. This handler
will add the redirect information to the signing context and then
redirect the request.
Nr�rKrzBS3 request was previously for an Accesspoint ARN, not redirecting.�
redirected�6S3 request was previously redirected, not redirecting.�Errorrz�ResponseMetadata�
HeadObject�
HeadBucket�x-amz-bucket-region�HTTPHeaders�AuthorizationHeaderMalformed�Region�PermanentRedirect�"IllegalLocationConstraintExceptionr��
client_region��S3 client configured for region %s but the bucket %s is not in that region and the proper region could not be automatically determined.��S3 client configured for region %s but the bucket %s is in region %s; Please configure the proper region to avoid multiple unnecessary redirects and signing attempts.rF)�operation_model�	call_args�request_contextr�T�authSchemes�	auth_typerD��301�400�i-i.i3)r��	ArnParser�is_arnr r$r�r?�any�get_bucket_regionr1r��_ruleset_resolver�construct_endpoint�set_request_urlr��
properties�auth_schemes_to_signing_ctx)r��request_dictrC�	operationr��redirect_ctxr6�
error_code�response_metadata�is_special_head_object�is_special_head_bucket�is_wrong_signing_region�is_redirect_status�is_permanent_redirect�is_opt_in_region_redirectrrl�
new_region�ep_resolver�ep_info�auth_schemes�	auth_inforsrNs&&&&,                   r}rZ�(S3RegionRedirectorv2.redirect_from_error�sV����
�#�'�'�	�2�6�:�:�=�"�M�����L�,�,�X�6�7�7��L�L��
�
����L�)�)��L�L�H�
�
��������,���Y�Y�v�&�
�$�Q�K�O�O�,>��C��
�.�(�K�K�Y�^�^�|�-K�	�
�.�(�
8�
8����,�.�
8�
8�%� �$�$�]�B�7�8�	�
�8�8�N�N�X��=N�	 �&�a�[��4�)�)��
�:
�
�+��:)��!+�.A� A���>�>�
1�
1����.�0�	"��&�'�%�&�"�)�

�	
�	
�
��i�(��7��A��$�Y�/�3�3�O�D�
��+�+�F�=�
����L�L�9���
�
����
I�
���
	
�)����F���l�l�4�4���0�0�%�"�9�-�m�<�X�F�(��3�1�
��
#�2�2�������
��U��@D��Y��
�.�|�<��)�)�-�-�m�<���#�#�?�?��M�I�)2�&�I��3<�L��#�K�0�2��y�)�-�-�i��<�2�!�2�L��#�I�.�rc��V^,pVR,R,pRV9d
VR,#VPR/4PRR4pVeV#VPPVR7pVR,R,pVPRR4pV# \d%pTPR,R,pRp?L>Rp?ii;i�a�
There are multiple potential sources for the new region to redirect to,
but they aren't all universally available for use. This will try to
find region from response elements, but will fall back to calling
HEAD on the bucket if all else fails.

:param bucket: The bucket to find the region for. This is necessary if
    the region is not available in the error response.
:param response: A response representing a service request that failed
    due to incorrect region configuration.
rcrgrfrbriNr�r�r��head_bucketr rC�r�rrC�service_response�response_headersr�r�rDs&&&     r}r{�&S3RegionRedirectorv2.get_bucket_regionR����$�A�;��+�,>�?�
�N�� �$4�4�#�$9�:�:�"�%�%�g�r�2�6�6�x��F�����M�	D��|�|�/�/�v�/�>�H��1�2�=�A�G����2�D�9���
��	�	D��j�j�!3�4�]�C�G��	D���,B�C�B=�=Cc��\WR4#)z�
Splice a new endpoint into an existing URL. Note that some endpoints
from the the endpoint provider have a path component which will be
discarded by this function.
F)r�)r��old_urlr�r�s&&&,r}r~�$S3RegionRedirectorv2.set_request_urlss��!���>�>rc��VPR4pVe4W@P9d"VPPV4pWQR&R#R#R#)z�
If a bucket name has been redirected before, it is in the cache. This
handler will update the AWS::Region endpoint resolver builtin param
to use the region from cache instead of the client region to avoid the
redirect.
rNzAWS::Region)r�r1)r��builtinsrFr�rr�s&&&,  r}r\�(S3RegionRedirectorv2.redirect_from_cache{sC�����H�%����&�K�K�"7�������0�J�&0�]�#�#8�rc�>�VPR4pRRRVRV/VR&R#)zvStore the bucket name in context for later use when redirecting.
The bucket name may be an access point ARN or alias.
rr`FrrFrKNr�)r�rFr�r�rs&&&, r}r[�-S3RegionRedirectorv2.annotate_request_context�s-�����H�%���%��f��f�"
��
�rrPr�)r�r�r�r�r�r�r8rZr{r~r\r[r�r�r�s@r}rRrR�s5�����-�	
�s�j�B?�
1�	
�	
rrRc�Va�]tRtRtoRtRRltRRltRtRtRt	R	t
R
tRtVt
R#)
�S3RegionRedirectori�z�This handler has been replaced by S3RegionRedirectorv2. The original
version remains in place for any third-party libraries that import it.
Nc��WnW0nVPf/Vn\P!V4Vn\
P!R\R7R#)Nz�The S3RegionRedirector class has been deprecated for a new internal replacement. A future version of botocore may remove this class.��category)�_endpoint_resolverr1r�r0r��warnings�warn�
FutureWarningrTs&&&&r}r��S3RegionRedirector.__init__�sF��"1�����;�;���D�K��}�}�V�,����
�
�
�#�		
rc��T;'g!VPPPpVPRVP4VPRVP
4VPRVP4R#)rXr5rYN)r�r7rZr8rZr~r\r;s&& r}r8�S3RegionRedirector.register�sd���;�;�4�<�<�#4�#4�#;�#;�����)�4�+C�+C�D����)�4�+?�+?�@����4�d�6N�6N�Orc��VfR#VPVPR/44'd\PR4R#VPR/4PR4'd\PR4R#V^,PR/4pVPR4pV^,PR/4pVR9;'dVPR	8HpVR9;'d-VPR
8H;'dRVPR/49p	VR
8H;'dRV9p
V^,RJ;'dV^,P
R9pVR8Hp\
VV
VV	V.4'gR#VR,R,R,p
VR,PR4pVPW�4pVf\PRVV
4R#\PRVV
V4VPPRV4pVR,pRVRV
RV/pVVR,R&VVPV
&VPWR,4RVR,R&^#)r_Nr�z=S3 request was previously to an accesspoint, not redirecting.�
s3_redirectedrarbrzrcrdrerfrgrhrirjrDrrlrmrn�s3r�r�rTrtrw)�_is_s3_accesspointr�r r$r�r?rzr{r��resolver1r~)r�r�rCr�r�r6r�r�r�r�r�r�r�rrlr�rrNs&&&&,             r}rZ�&S3RegionRedirector.redirect_from_error�s�����
��"�"�<�#3�#3�I�r�#B�C�C��L�L�O�
�
����I�r�*�.�.��?�?��L�L�H�
�
��������,���Y�Y�v�&�
�$�Q�K�O�O�,>��C��
�.�(�K�K�Y�^�^�|�-K�	�
�.�(�
8�
8����,�.�
8�
8�%� �$�$�]�B�7�8�	�
�8�8�N�N�X��=N�	 �&�a�[��4�)�)��
�:
�
�+��:)��!+�.A� A���&�'�%�&�"�
�
�
�
��i�(��3�H�=��$�Y�/�3�3�O�D�
��+�+�F�=�
����L�L�,���
�
����
:�
���
	
��*�*�2�2�4��D���N�+��
�j��f���
��
.=��Y��	�*�-����F�����\�	�+B�C�37��Y���0�rc��V^,pVR,R,pRV9d
VR,#VPR/4PRR4pVeV#VPPVR7pVR,R,pVPRR4pV# \d%pTPR,R,pRp?L>Rp?ii;ir�r�r�s&&&     r}r{�$S3RegionRedirector.get_bucket_regionr�r�c��VPR/4PRR4pVe\VR,VR4VR&R#R#)rDrNr�F)r�r��r�rFr�r�rs&&&, r}r~�"S3RegionRedirector.set_request_url3s@���;�;�y�"�-�1�1�*�d�C����-�f�U�m�X�u�M�F�5�M� rc��VPV4'dR#VPR4pVPPV4pVeWRR&R#RV/VR&R#)zn
This handler retrieves a given bucket's signing context from the cache
and adds it into the request context.
NrrDr)r�r�r1)r�rFr�r�rrNs&&&,  r}r\�&S3RegionRedirector.redirect_from_cache8sU��
�"�"�7�+�+�����H�%���+�+�/�/�&�1���&�!0�I��"*�F�!3�G�I�rc��RV9#�r�r�)r�r�s&&r}r��%S3RegionRedirector._is_s3_accesspointFs
���7�*�*r)r1r�r�r�)r�r�r�r�r�r�r8rZr{r~r\r�r�r�r�s@r}r�r��s7�����
�"P�a�F�BN�
4�+�+rr�c��]tRtRtRtR#)�InvalidArnExceptioniJr�N)r�r�r�r�r�r�rr}r�r�Js��rr�c�6a�]tRtRtoRt]R4tRtVtR#)rxiNc���VPR^4p\V4^8d\RVR24hRV^,RV^,RV^,RV^,RV^,/#)�:zProvided ARN: zE must be of the format: arn:partition:service:region:account:resource�	partition�servicer��account�resource)r�r�r�)r��arn�	arn_partss&& r}�	parse_arn�ArnParser.parse_arnOsw���I�I�c�1�%�	��y�>�A��%� ���&@�@��
�

��1���y��|��i��l��y��|��	�!��
�	
rc��\V\4'dVPR4'gR#\4pVP	V4R# \
dR#i;i)zarn:FT)rwryrLrxr�r�)r��
arn_parsers& r}ry�ArnParser.is_arn^sQ���%��%�%�U�-=�-=�f�-E�-E���[�
�	�� � ��'���"�	��	�s�A�A�Ar�N)	r�r�r�r�r��staticmethodryr�r�r�s@r}rxrxNs����

����rrxc�a�]tRtRto]P
!R4t]P
!R4tR.tRRlt	Rt
RtR	tR
t
RtRtR
tVtR#)�S3ArnParamHandlerijzA^(?P<resource_type>accesspoint|outpost)[/:](?P<resource_name>.+)$zc^(?P<outpost_name>[a-zA-Z0-9\-]{1,63})[/:]accesspoint[/:](?P<accesspoint_name>[a-zA-Z0-9\-]{1,63}$)r�Nc�<�WnVf\4VnR#R#r���_arn_parserrx�r�r�s&&r}r��S3ArnParamHandler.__init__t���%����(�{�D��rc�>�VPRVP4R#)rYN�r8�
handle_arn�r�r<s&&r}r8�S3ArnParamHandler.registerys�����:�D�O�O�Lrc��VPVP9dR#VPV4pVfR#VR,R8XdVPWV4R#VR,R8XdVP	WV4R#R#)N�
resource_type�accesspoint�outpost)r��_BLACKLISTED_OPERATIONS�"_get_arn_details_from_bucket_param�_store_accesspoint�_store_outpost)r�rF�modelr�r��arn_detailss&&&&, r}r��S3ArnParamHandler.handle_arn|so���:�:��5�5�5���=�=�f�E�������'�=�8��#�#�F�[�A�
��
)�Y�
6������=�7rc��RV9d9VR,pVPPV4pVPW#4V#R# \dR#i;i)rN)r�r��_add_resource_type_and_namer�)r�rFr�r�s&&  r}r��4S3ArnParamHandler._get_arn_details_from_bucket_param�s_���v��
��X�&��"�.�.�8�8��=���0�0��B�"�"���'�
���
�s�6A�A�Ac���VPPVR,4pV'd+VPR4VR&VPR4VR&R#\VR7h)r�r��
resource_name)r�N)�_RESOURCE_REGEXr�groupr3)r�r�r�rs&&& r}r��-S3ArnParamHandler._add_resource_type_and_name�sQ���$�$�*�*�;�z�+B�C���+0�;�;��+G�K��(�+0�;�;��+G�K��(�'�C�0�0rc��VR,VR&RVR,RVR,RVR,RVR,RVR,/VR&R#)	r�rr�r�r�r�r�r�Nr��r�rFr�r�s&&&&r}r��$S3ArnParamHandler._store_accesspoint�sR��'��7��x���K��0��{�9�-���[�1��k�(�+��{�9�-�%
�� �!rc
��VR,pVPPV4pV'g
\VR7hVPR4pWaR&RVPR4RVRVR,RVR,RVR,R	VR	,/VR
&R#)r�)r��accesspoint_namer�outpost_namer�r�r�r�r�r�N)�_OUTPOST_RESOURCE_REGEXrr1r�)r�rFr�r�r�rr�s&&&&   r}r�� S3ArnParamHandler._store_outpost�s���#�O�4�
��,�,�2�2�=�A���1�
�N�N�!�;�;�'9�:��+�x���E�K�K��7��$��{�9�-���[�1��k�(�+��{�9�-�
%
�� �!r�r�r�)r�r�r�r�r�r�r�r�r�r�r8r�r�r�r�r�r�r�r�s@r}r�r�js`�����j�j�L��O�!�j�j�	6��� .�.��+�
M�	>�	�1�
�"
�
rr�c��a�]tRtRtoRtRtRRltRtRtRt	R	t
R
tRtRt
R
tRtRtRtRtRtRtRtRtRtRtRtRtRt]R4t]R4t]R4tRt Vt!R#) �S3EndpointSetteri��awsr�Nc��WnW nW0nW`nVf/VnW@nWPnVfVPVnR#R#r��r��_region�
_s3_config�_use_fips_endpoint�
_endpoint_url�
_partition�_DEFAULT_PARTITION�r��endpoint_resolverr��	s3_configr�r��use_fips_endpoints&&&&&&&r}r��S3EndpointSetter.__init__�sJ��#4����#��"3���� �D�O�)��#����"�5�5�D�O�rc��VPRVP4VPRVP4VPRVP4R#)r6zchoose-signer.s3z%before-call.s3.WriteGetObjectResponseN)r8�set_endpoint�
set_signer�#update_endpoint_to_s3_object_lambdar�s&&r}r8�S3EndpointSetter.register�sH�����/��1B�1B�C����1�4�?�?�C����3��4�4�	
rc�N�VP'd
\RR7hVPVR4VP'dR#VPpVPRVP4pRPVR,VR,R7p\VR,VR	4VR&R#)
zOS3 client does not support accelerate endpoints for S3 Object Lambda operations��msg�s3-object-lambdaNzhttps://{host_prefix}{hostname}�host_prefixr~)rr~r�F)	�_use_accelerate_endpointr4�_override_signing_namerr�r}r��formatr�)r�rFr�r��resolver�resolvedr�s&&&,   r}r
�4S3EndpointSetter.update_endpoint_to_s3_object_lambda�s����(�(�(�1�e��
�	
�#�#�G�-?�@�������*�*���.�.�����
��9�?�?��}�-��j�)�@�
��
*�&��-��u�M��u�
rc���VPV4'diVPV4VPV4VPV4VP	V4pVPV4VP
W4R#VP'd:VP'd\RVPR2R7h\RRV/VBVP'dVP!RRV/VBR#R#)Nz8Client is configured to use the FIPS psuedo region for "zA", but S3 Accelerate does not have any FIPS compatible endpoints.rr�r�)
�_use_accesspoint_endpoint�_validate_accesspoint_supported�_validate_fips_supported�_validate_global_regions�(_resolve_region_for_accesspoint_endpoint�._resolve_signing_name_for_accesspoint_endpoint�_switch_to_accesspoint_endpointrrr4r�r��_s3_addressing_handler)r�r�r�r�s&&, r}r�S3EndpointSetter.set_endpoint�s����)�)�'�2�2��0�0��9��)�)�'�2��)�)�'�2��G�G���K�
�?�?��H��0�0��F���(�(�(��&�&�&�5� � $���~�.0�0���
&�@�g�@��@��&�&�&��'�'�B��B�6�B�'rc� �RVP9#r��r�r�s&&r}r�*S3EndpointSetter._use_accesspoint_endpoint	s���7�?�?�2�2rc��VP'gR#RVPR,R,9d\R0R7hRVPR,9d\RVPR2R7hVPR,R,pW P8wdBVPPR	R
4'g\RVPRVR
2R7hR#R#)N�fipsr�r��,Invalid ARN, FIPS region not allowed in ARN.rr�z4Client is configured to use the FIPS psuedo-region "z2", but outpost ARNs do not support FIPS endpoints.�use_arn_regionTz8Client is configured to use the FIPS psuedo-region for "z1", but the access-point ARN provided is for the "zn" region. For clients using a FIPS psuedo-region calls to access-point ARNs in another region are not allowed.)rr�r2r�rr��r�r��accesspoint_regions&& r}r�)S3EndpointSetter._validate_fips_supported	s����&�&�&���W�_�_�%5�6�x�@�@�<�C�D��
��W�_�_�-=�>�>�<�J�4�<�<�.�YF�F��
�%�_�_�-=�>�x�H�����-��?�?�&�&�'7��>�>�A� � $���~�. � 2�3�42�2���?�.rc��VPPRR4'dR#VPR9d\RVPR2R7hR#)r*TNz6Client is configured to use the global psuedo-region "zJ". When providing access-point ARNs a regional endpoint must be specified.r)z
aws-globalz
s3-external-1)rr�r�r2r�s&&r}r�)S3EndpointSetter._validate_global_regions4	sT���?�?���/��6�6���<�<�:�:�<�����~�&2�2��
�;rc�L�VP'd
\RR7hVPR,R,pW P8wd\RVPRVR2R7hVPR,P	R4pVR8Xd.VP
P	R	4'd
\R
R7hVPR,P	R4pV'd.VP
P	R	4'd
\RR7hVP
V4R
#)zZClient does not support s3 accelerate configuration when an access-point ARN is specified.rr�r��Client is configured for "z3" partition, but access-point ARN provided is for "zE" partition. The client and  access-point partition must be the same.r�r�use_dualstack_endpointzjClient does not support s3 dualstack configuration when an S3 Object Lambda access point ARN is specified.r�zTClient does not support s3 dualstack configuration when an outpost ARN is specified.N)rr2r�rr�r�_validate_mrap_s3_config)r�r��request_partition�
s3_servicer�s&&   r}r�0S3EndpointSetter._validate_accesspoint_supported@	s���(�(�(�<�=��
�$�O�O�,<�=�k�J�����/�<�0����0A�B-�->�,?�@@�@��
��_�_�%5�6�:�:�9�E�
��+�+����0C�0C�$�1
�1
�=�N��
����'7�8�<�<�^�L���D�O�O�/�/�0H�I�I�<�8��
�	
�%�%�g�.rc���\VP4'gR#VPPR4'd
\	RR7hVPPR4'd
\	RR7hR#)N�$s3_disable_multiregion_access_pointszCInvalid configuration, Multi-Region Access Point ARNs are disabled.rr2zeClient does not support s3 dualstack configuration when a Multi-Region Access Point ARN is specified.)r�r�rr�r2r�s&&r}r3�)S3EndpointSetter._validate_mrap_s3_confige	sl��$�W�_�_�5�5���?�?���E�F�F�<�)��
��_�_�
 �
 �!9�
:�
:�<�I��
�;rc�*�\VP4'dVPVR4VP
#VPP	RR4'd.VPR,R,pVPW4V#VP
#)r�r*Tr�r�)r�r��_override_signing_regionrr�r�r+s&& r}r�9S3EndpointSetter._resolve_region_for_accesspoint_endpointw	s|�� ����1�1��)�)�'�3�7��|�|���_�_�
 �
 �!1�4�
8�
8�!(���1A�!B�8�!L��
�)�)�'�F�%�%��|�|�rc�\�\V4'd\'dR#\RR7hR#)�s3v4azzUsing S3 with an MRAP arn requires an additional dependency. You will need to pip install botocore[crt] before proceeding.rN)r�r
r.)r�r�r�s&&,r}r�S3EndpointSetter.set_signer�	s,�� ��)�)��w��0�7���	*rc�r�VPR,R,pVPVPV4R#)r�r�N�r�r)r�r��accesspoint_services&& r}r �?S3EndpointSetter._resolve_signing_name_for_accesspoint_endpoint�	s,��%�o�o�.>�?�	�J���#�#�G�O�O�5H�Irc�B�\VP4p\VPVP	VP
V4VP
VPVP
4VPR34p\PRVPV4WAnR#�r�r�N)rr�rr��_get_netlocr��_get_accesspoint_pathr�r�r r$)r�r�r��original_components�accesspoint_endpoints&&&  r}r!�0S3EndpointSetter._switch_to_accesspoint_endpoint�	s���&�w�{�{�3��)�#�*�*�� � ����+�>��*�*�'�,�,�g�o�o��$�)�)��
�
 
��	���(�'�+�+�7K�	
�+�rc�h�\V4'dVPV4#VPW4#r�)r��_get_mrap_netloc�_get_accesspoint_netloc)r�rqr�s&&&r}rF�S3EndpointSetter._get_netloc�	s/�� ��1�1��(�(��9�9��/�/��M�Mrc�,�VR,pRpVR,.pVP'd2\VP4PpVPV4M,VR,pVP	RVVPV4.4RP
V4#)r�z	s3-globalr�r�r�r�)rrr�r�r��_get_partition_dns_suffixr�)r�rqr�r��mrap_netloc_components�endpoint_url_netlocr�s&&     r}rL�!S3EndpointSetter._get_mrap_netloc�	s���(�)9�:��!��"0��"8�!9������"*�4�+=�+=�">�"E�"E��"�)�)�*=�>�&�{�3�I�"�)�)�!���2�2�9�=��
��x�x�.�/�/rc���VR,pRPVR,VR,4.pVPR4pVP'dKV'dVPV4\	VP4P
pVPV4M�V'dVR.pVP
V4MUVR,R8Xd%VPRV4pVPV4M#VPRV4pVPV4VPPR	4'dVPR
4VP
W PV4.4RPV4#)r�z{}-{}r�r�r��s3-outpostsr�rzs3-accesspointr2r:r�)rr�rr�rr�r��_inject_fips_if_neededr�_get_dns_suffixr�)	r�rqr�r��accesspoint_netloc_componentsr�rR�outpost_host�	components	&&&      r}rM�(S3EndpointSetter._get_accesspoint_netloc�	sJ��(�)9�:���N�N�>�&�1�>�)�3L�M�)
�%�&�)�)�.�9�������-�4�4�\�B�"*�4�+=�+=�">�"E�"E��)�0�0�1D�E�� ,�m�<��-�4�4�\�B��	�*�.@�@� �7�7�&���	�.�4�4�Y�?� �7�7�$�o��	�.�4�4�Y�?����"�"�#;�<�<�-�4�4�[�A�)�0�0��2�2�;�?�@�
��x�x�5�6�6rc�4�VP'dVR2#V#)�-fips�r)r�rZrqs&&&r}rV�'S3EndpointSetter._inject_fips_if_needed�	s!���"�"�"��[��&�&��rc�j�VR,R,pVPRV,R^4;'gR#)r�r�r�r�)r�)r��
original_pathrqr�s&&& r}rG�&S3EndpointSetter._get_accesspoint_path�	s5��
�/�0��8���$�$�S�4�Z��Q�7�>�>�3�>rc�\�VPPV4pVf
VPpV#r�)r��get_partition_dns_suffix�_DEFAULT_DNS_SUFFIX)r��partition_name�
dns_suffixs&& r}rP�*S3EndpointSetter._get_partition_dns_suffix�	s4���,�,�E�E��
�
����1�1�J��rc��VPPRV4pVPpV'dRV9d
VR,pV#�r��	dnsSuffix�r�r}re�r�r�rrgs&&  r}rW� S3EndpointSetter._get_dns_suffix�	�D���*�*�=�=��+�
���-�-�
���x�/�!�+�.�J��rc�b�VPPR/4pW#R&W1PR&R#�rDr�N�r�r��r�r�r�rNs&&& r}r;�)S3EndpointSetter._override_signing_region�	�.��!�/�/�-�-�i��<��
%0��!�%4���	�"rc�:�VPR/4pW#R&W1R&R#�rDrINr�)r�r�rIrNs&&& r}r�'S3EndpointSetter._override_signing_name
s$��!�+�+�i��4��
+7��'�,�	�rc���VPPR4'dR#VPfR#\VP4PpVPR4'gR#VP
R4pV^,R8wdR#V^Rp\V4\\V448wdR#\;QJdRV4F'dKR#	R#!RV44#)�use_accelerate_endpointTFr�r��
s3-acceleratec3�2"�TF
q\9x�K	R#5ir��r���.0r�s& r}�	<genexpr>�<S3EndpointSetter._use_accelerate_endpoint.<locals>.<genexpr>/
s���G��A�/�/�������)
rr�rrr�r+r�r��set�all)r�r�r��
feature_partss&   r}r�)S3EndpointSetter._use_accelerate_endpoint
s����?�?���8�9�9�����%���$�,�,�-�4�4������/�/�����S�!����8��&���a���
��}���S��%7�!8�8���s�G��G�s�s�G�s�G�s�G��G�G�Grc�x�VP'dR#VPPR4pV'dV#R#)�virtual�addressing_styleN)rrr�)r��configured_addressing_styles& r}�_addressing_style�"S3EndpointSetter._addressing_style1
s9���(�(�(��'+�o�o�&9�&9�:L�&M�#�&�.�.�'rc��VPR8Xd\PR4\#VPR8XgVPe\PR4R#\PR4\
#)r�z'Using S3 virtual host style addressing.r�NzUsing S3 path style addressing.zSDefaulting to S3 virtual host style addressing with path style addressing fallback.)r�r r$r�rr�rs&r}r"�'S3EndpointSetter._s3_addressing_handler=
si���!�!�Y�.��L�L�B�C�/�/��!�!�V�+�t�/A�/A�/M��L�L�:�;�����
.�	
��r�r�rrr�rr�NNNNF)"r�r�r�r�rrer�r8r
rrrrrr3rrr r!rFrLrMrVrGrPrWr;rrCrr�r"r�r�r�s@r}r�r��s�������)��6�*
�N�6C�03��<
�#/�J�$�	�J�+�$N�0�$7�@�
?���5�-�� H�� H�D�	/��	/����rr�c��a�]tRtRtoRtRt]P!R4tRRlt	Rt
RtR	tR
t
RtRtR
tRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRt Rt!Vt"R#) �S3ControlEndpointSetteriV
r�r�z^[a-zA-Z0-9\-]{1,63}$Nc��WnW nW0nW`nVf/VnW@nWPnVfVPVnR#R#r�r�rs&&&&&&&r}r�� S3ControlEndpointSetter.__init__[
sJ��#4����#��"3���� �D�O�)��#����"�5�5�D�O�rc�>�VPRVP4R#)zbefore-sign.s3-controlN)r8rr�s&&r}r8� S3ControlEndpointSetter.registero
s�����7��9J�9J�Krc��VPV4'dXVPV4VPV4pVPV4VP	W4VPV4R#VP
V4'dRVPV4VPVR4VPVP4pVPW4R#R#)rUN)�_use_endpoint_from_arn_details�-_validate_endpoint_from_arn_details_supported� _resolve_region_from_arn_details�&_resolve_signing_name_from_arn_details�"_resolve_endpoint_from_arn_details�_add_headers_from_arn_details�_use_endpoint_from_outpost_id�#_validate_outpost_redirection_validr�_construct_outpost_endpointr��_update_request_netloc)r�r�r�r��
new_netlocs&&,  r}r�$S3ControlEndpointSetter.set_endpointr
s����.�.�w�7�7��>�>�w�G��?�?��H�K��7�7��@��3�3�G�I��.�.�w�7�
�
/�
/��
8�
8��4�4�W�=��'�'���?��9�9�$�,�,�G�J��'�'��<�	9rc� �RVP9#)r�r%r�s&&r}r��6S3ControlEndpointSetter._use_endpoint_from_arn_details
s������/�/rc� �RVP9#)�
outpost_idr%r�s&&r}r��5S3ControlEndpointSetter._use_endpoint_from_outpost_id�
s���w���.�.rc��RVPR,R,9d&\VPR,R,RR7hVPPRR4'gJVPR,R,pW P8wd RVR	VPR
2p\VR7hVPR,R,pW@P8wd\R
VPRVR2R7hVPPR4'd
\RR7hRVPR,9dVPV4R#R#)r(r�r�r�r)�r�rr*FzCThe use_arn_region configuration is disabled but received arn for "z(" when the client is configured to use "rrr�r1z&" partition, but arn provided is for "z;" partition. The client and arn partition must be the same.rz�7S3 control client does not support accelerate endpointsr�N)r�r5rr�r�r6rr�)r�r��
arn_regionrV�request_partions&&   r}r��ES3ControlEndpointSetter._validate_endpoint_from_arn_details_supported�
s;���W�_�_�]�3�H�=�=�.��O�O�M�2�:�>�B��
����"�"�#3�U�;�;� ����7��A�J��\�\�)�)�)3��5�#�|�|�n�A�/��
=��K�K�!�/�/�-�8��E���o�o�-�8�0����0A�B(�(7�'8�96�6��
��?�?���8�9�9�8�M��
��W�_�_�]�;�;��4�4�W�=�<rc�`�VPPR4'd
\RR7hR#)r2zPClient does not support s3 dualstack configuration when an outpost is specified.rN)rr�r6r�s&&r}r��;S3ControlEndpointSetter._validate_outpost_redirection_valid�
s/���?�?���7�8�8�8�4��
�9rc��VPPRR4'd.VPR,R,pVPW4V#VP#)r*Fr�r�)rr�r�r;r�)r�r�r�s&& r}r��8S3ControlEndpointSetter._resolve_region_from_arn_details�
sM���?�?���/��7�7� ����7��A�J�
�)�)�'�>����|�|�rc�\�VPR,R,pVPW4V#)r�r�rA)r�r��arn_services&& r}r��>S3ControlEndpointSetter._resolve_signing_name_from_arn_details�
s)���o�o�m�4�Y�?���#�#�G�9��rc�J�VPW4pVPW4R#r�)� _resolve_netloc_from_arn_detailsr�)r�r�r�r�s&&& r}r��:S3ControlEndpointSetter._resolve_endpoint_from_arn_details�
s%���:�:��
�
�	
�#�#�G�8rc���\VP4p\VPVVPVP
R34p\PRVPV4WAnR#rE)rr�rr�r�r�r r$)r�r�r�rH�arn_details_endpoints&&&  r}r��.S3ControlEndpointSetter._update_request_netloc�
sc��&�w�{�{�3��)�#�*�*��#�(�(�#�)�)��
� 
��	���(�'�+�+�7K�	
�+�rc��VPR,pRV9dVPV4#VR,pVPW$4#)r�r�r�)r�r��_construct_s3_control_endpoint)r�r�r�r�r�s&&&  r}r��8S3ControlEndpointSetter._resolve_netloc_from_arn_details�
sD���o�o�m�4���[�(��3�3�K�@�@��i�(���2�2�;�H�Hrc�8�VPPV4#r�)�_HOST_LABEL_REGEXr)r��labels&&r}�_is_valid_host_label�,S3ControlEndpointSetter._is_valid_host_label�
s���%�%�+�+�E�2�2rc�^�VF&pVPV4'dK\VR7h	R#))r�N)r�r))r��labelsr�s&* r}�_validate_host_labels�-S3ControlEndpointSetter._validate_host_labels�
s(���E��,�,�U�3�3�+�%�8�8�rc� �VPW4VP'd$\VP4PpW#.pM8VR.pVP	V4VPV4pVP
W.4VPV4#)�
s3-control)r�rrr��_add_dualstackrWr��_construct_netloc)r�r�r�rRr�rgs&&&   r}r��6S3ControlEndpointSetter._construct_s3_control_endpoint�
s����"�"�;�8�����"*�4�+=�+=�">�"E�"E���3�F����F�
����'��-�-�k�:�J��M�M�;�3�4��%�%�f�-�-rc���VPV4VP'd \VP4P#RVVP	V4.pVPV4VP
V4#)rU)r�rrr�rW�	_add_fipsr�)r�r�r�s&& r}r��3S3ControlEndpointSetter._construct_outpost_endpoint�
so���"�"�;�/������D�.�.�/�6�6�6����$�$�[�1��F�

�N�N�6�"��%�%�f�-�-rc�$�RPV4#)r�)r��r�r�s&&r}r��)S3ControlEndpointSetter._construct_netloc�
s���x�x���rc�T�VP'dV^,R,V^&R#R#)rr]Nr^r�s&&r}r��!S3ControlEndpointSetter._add_fips�
s%���"�"�"��q�	�G�+�F�1�I�#rc�n�VPPR4'dVPR4R#R#)r2r:N)rr�r�r�s&&r}r��&S3ControlEndpointSetter._add_dualstacks)���?�?���7�8�8��M�M�+�&�9rc��VPPRV4pVPpV'dRV9d
VR,pV#rjrlrms&&  r}rW�'S3ControlEndpointSetter._get_dns_suffixrorc�b�VPPR/4pW#R&W1PR&R#rqrrrss&&& r}r;�0S3ControlEndpointSetter._override_signing_regionrurc�b�VPPR/4pW#R&W1PR&R#rwrr)r�r�rIrNs&&& r}r�.S3ControlEndpointSetter._override_signing_names.��!�/�/�-�-�i��<��
+7��'�%4���	�"rc��VPR,pVPR4pV'dVPW4R#R#)r�r�N)r�r��_add_outpost_id_header)r�r�r�r�s&&  r}r��5S3ControlEndpointSetter._add_headers_from_arn_details"s4���o�o�m�4��"���~�6����'�'��>�rc�"�W!PR&R#)zx-amz-outpost-idN)r�)r�r�r�s&&&r}r��.S3ControlEndpointSetter._add_outpost_id_header(s��.:���*�+rr�r�)#r�r�r�r�rrer�r�r�r�r8rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rWr;rr�r�r�r�r�s@r}r�r�V
s�������)���
�
�#;�<��6�(L�=�0�/�>�>���
9�+� I�3�9�

.�.� �,�'��5�5�?�;�;rr�c�a�]tRtRtoRt]P!R4tRRltRt	Rt
RtR	tR
t
RtRtR
tRtRtRtRtRtVtR#)�S3ControlArnParamHandleri,z�This handler has been replaced by S3ControlArnParamHandlerv2. The
original version remains in place for any third-party importers.
z[/:]Nc�p�WnVf\4Vn\P!R\R7R#)Nz�The S3ControlArnParamHandler class has been deprecated for a new internal replacement. A future version of botocore may remove this class.r�)r�rxr�r�r�r�s&&r}r��!S3ControlArnParamHandler.__init__3s.��%����(�{�D���
�
�
�#�		
rc�>�VPRVP4R#)z!before-parameter-build.s3-controlNr�r�s&&r}r8�!S3ControlArnParamHandler.register>s�����/��O�O�	
rc��VPR9dVPWV4R#VPWV4VPWV4R#)r�N)r��ListRegionalBuckets)r��_handle_outpost_id_param�_handle_name_param�_handle_bucket_param)r�rFr�r�r�s&&&&,r}r��#S3ControlArnParamHandler.handle_arnDsA���:�:�@�@�
�)�)�&��A��#�#�F�7�;��%�%�f�W�=rc��W!9dR#W,pVPPV4pW4R&VPV4VR&V# \dR#i;i)Nr��	resources)r�r��_split_resourcer�)r�rFr�r�r�s&&&  r}�_get_arn_details_from_param�4S3ControlArnParamHandler._get_arn_details_from_paramNsc���#��	��$�C��*�*�4�4�S�9�K�&)�
�#�'+�';�';�K�'H�K��$����"�	��	�s�<A�A�Ac�F�VPPVR,4#)r�)�_RESOURCE_SPLIT_REGEXr�)r�r�s&&r}r��(S3ControlArnParamHandler._split_resourceZs���)�)�/�/��J�0G�H�Hrc��VR,pRV9d;VR,V8wd-RPVR,4p\VR,VR7hW1R&R#)r��	AccountIdzGAccount ID in arn does not match the AccountId parameter provided: "{}"r�r�N)rr5)r�rFr��
account_idrVs&&&  r}�_override_account_id_param�3S3ControlArnParamHandler._override_account_id_param]s]�� ��+�
��&� �V�K�%8�J�%F�!��f�V�K�(�)�
�/��
�+���
�)�{�rc�0�RV9dR#VR,VR&R#)�	OutpostIdNr�r�)r�rFr�r�s&&&&r}r��1S3ControlArnParamHandler._handle_outpost_id_paramjs���f�$�� &�{� 3���rc���VPR8XdR#VPVR4pVfR#VPV4'dVPWV4R#Rp\	VR,VR7h��CreateAccessPointN�Namez4The Name parameter does not support the provided ARNr�r�)r�r��_is_outpost_accesspoint�_store_outpost_accesspointr5�r�rFr�r�r�rVs&&&&  r}r��+S3ControlArnParamHandler._handle_name_paramosk���:�:�,�,���6�6�v�v�F������'�'��4�4��+�+�F�[�I�N�I�.��
�+���
rc��VR,R8wdR#VR,p\V4^8wdR#V^,R8H;'d
V^,R8H#)r�rUFr�r�r��r��r�r�r�s&& r}r�0S3ControlArnParamHandler._is_outpost_accesspointsK���y�!�]�2����,�	��y�>�Q�����|�y�(�J�J�Y�q�\�]�-J�Jrc��VPW4VR,^,pWAR&WCR&VR,^,VR&W2R&R#)r�rr�r�r�N�r�)r�rFr�r�r�s&&&& r}r�3S3ControlArnParamHandler._store_outpost_accesspoint�sL���'�'��<�&�{�3�A�6��)�v��*:�&�'�&1�+�&>�q�&A��N�#�!,�
�rc��VPVR4pVfR#VPV4'dVPWV4R#Rp\VR,VR7h�rNz6The Bucket parameter does not support the provided ARNr�r�)r��_is_outpost_bucket�_store_outpost_bucketr5rs&&&&  r}r��-S3ControlArnParamHandler._handle_bucket_param�sc���6�6�v�x�H������"�"�;�/�/��&�&�v��D�I�
�/��
�+���
rc��VR,R8wdR#VR,p\V4^8wdR#V^,R8H;'d
V^,R8H#)r�rUFr�r�rrr	s&& r}r�+S3ControlArnParamHandler._is_outpost_bucket�sK���y�!�]�2����,�	��y�>�Q�����|�y�(�E�E�Y�q�\�X�-E�Erc��VPW4VR,^,pWAR&WCR&VR,^,VR&W2R&R#)r�rr�r�r�Nr)r�rFr�r�r�s&&&& r}r�.S3ControlArnParamHandler._store_outpost_bucket�sK���'�'��<�!�+�.�q�1��&�x��%0�M�"�&1�+�&>�q�&A��N�#�!,�
�rr�r�)r�r�r�r�r�r�r�r�r�r8r�r�r�r�r�r�rrr�rrr�r�r�s@r}r�r�,sd������J�J�w�/��	
�
�>�
�I�)�4�
� K�-�
�F�-�-rr�c�Xa�]tRtRtoRtR
RltRtRtRtRt	R	t
R
tRtRt
VtR#)�S3ControlArnParamHandlerv2i�aUpdated version of S3ControlArnParamHandler for use when
EndpointRulesetResolver is in use for endpoint resolution.

This class is considered private and subject to abrupt breaking changes or
removal without prior announcement. Please do not use it directly.
Nc�<�WnVf\4VnR#R#r�r�r�s&&r}r��#S3ControlArnParamHandlerv2.__init__�r�rc�>�VPRVP4R#)z%before-endpoint-resolution.s3-controlNr�r�s&&r}r8�#S3ControlArnParamHandlerv2.register�s�����3��O�O�	
rc��VPR8XdR#VPVR4pVfR#VPV4VPV4VP	V4'dVPWV4R#Rp\
VR,VR7hr)r�r��_raise_for_fips_pseudo_region�_raise_for_accelerate_endpointrrr5rs&&&&  r}r��-S3ControlArnParamHandlerv2._handle_name_param�s����:�:�,�,���6�6�v�v�F������*�*�;�7��+�+�G�4��'�'��4�4��+�+�F�[�I�N�I�.��
�+���
rc�(�VPW4R#r�rr�s&&&&r}r�5S3ControlArnParamHandlerv2._store_outpost_accesspoint�����'�'��<rc��VPVR4pVfR#VPV4VPV4VPV4'dVP	WV4R#Rp\VR,VR7hr)r�rrrrr5rs&&&&  r}r��/S3ControlArnParamHandlerv2._handle_bucket_param�s���6�6�v�x�H������*�*�;�7��+�+�G�4��"�"�;�/�/��&�&�v��D�I�
�/��
�+���
rc�(�VPW4R#r�rr�s&&&&r}r�0S3ControlArnParamHandlerv2._store_outpost_bucket�r#rc��VR,pVPR4'gVPR4'd\VR,RR7hR#)r�zfips-r�r)r�N)rLr+r5)r�r�r�s&& r}r�8S3ControlArnParamHandlerv2._raise_for_fips_pseudo_region�sK�� ��*�
�� � ��)�)�Z�-@�-@��-I�-I�.��
�+�B��
�.Jrc��VR,P;'g/pVPR4'd
\RR7hR#)�
client_configrzr�rN)r�r�r6)r�r�rs&& r}r�9S3ControlArnParamHandlerv2._raise_for_accelerate_endpoint�s?���O�,�/�/�5�5�2�	��=�=�2�3�3�8�M��
�4rr�r�)r�r�r�r�r�r�r8r�rr�rrrr�r�r�s@r}rr�s7�����+�

��$=��"=���rrc�a�]tRtRto^t^t^tRt]RRR.tR]	P3RltRRltR	t
R
tRtRtRR
ltRtRtRtVtR#)�ContainerMetadataFetcheri�z
169.254.170.2z169.254.170.23zfd00:ec2::23�	localhostNc�z�Vf+\PPVPR7pWnW nR#)N)r)r�rr�TIMEOUT_SECONDSr�_sleep)r�r��sleeps&&&r}r��!ContainerMetadataFetcher.__init__
s7���?��*�*�9�9��,�,�:��G� �
��rc�F�VPV4VPW4#)z�Retrieve JSON metadata from container metadata.

:type full_url: str
:param full_url: The full URL of the metadata service.
    This should include the scheme as well, e.g
    "http://localhost:123/foo"

)�_validate_allowed_url�_retrieve_credentials)r��full_urlr�s&&&r}�retrieve_full_uri�*ContainerMetadataFetcher.retrieve_full_uris#��	
�"�"�8�,��)�)�(�<�<rc�8�\PPV4pVPVP4'dR#VPVP4pV'g5\
RVPRRPVP424hR#)NzUnsupported host 'zN'.  Can only retrieve metadata from a loopback address or one of these hosts: z, )	r��compatr�_is_loopback_addressr~�_check_if_whitelisted_hostr�r��_ALLOWED_HOSTS)r�r8�parsed�is_whitelisted_hosts&&  r}r6�.ContainerMetadataFetcher._validate_allowed_urls������)�)�(�3���$�$�V�_�_�5�5��"�=�=�f�o�o�N��"��$�V�_�_�$5�6B�BF�)�)�D�L_�L_�B`�Aa�c��
�#rc�V�\V4pVP# \dR#i;irm)r�is_loopbackr�)r�r~�ips&& r}r=�-ContainerMetadataFetcher._is_loopback_address)s-��	��H�%�B��>�>�!���	��	�s��(�(c�*�WP9dR#R#)TF)r?)r�r�s&&r}r>�3ContainerMetadataFetcher._check_if_whitelisted_host0s���&�&�&��rc�F�VPV4pVPV4#)z�Retrieve JSON metadata from container metadata.

:type relative_uri: str
:param relative_uri: A relative URI, e.g "/foo/bar?id=123"

:return: The parsed JSON response.

)r8r7)r��relative_urir8s&& r}�retrieve_uri�%ContainerMetadataFetcher.retrieve_uri5s#���=�=��.���)�)�(�3�3rc�@�RR/pVeVPV4^pVPWVP4# \dYp\PRTRR7TP
TP4T^,
pY@P8�dhRp?K|Rp?ii;i)�Acceptzapplication/jsonNTzAReceived error when attempting to retrieve container metadata: %sr4)	r+�
_get_responser1r-r r$r2�
SLEEP_TIME�RETRY_ATTEMPTS)r�r8�
extra_headersr��attemptsrDs&&&   r}r7�.ContainerMetadataFetcher._retrieve_credentialsAs����/�0���$��N�N�=�)����
��)�)��t�';�';����*�

����-��!�	�����D�O�O�,��A�
���2�2�2��3��

�s�:�B�A
B�Bc�
�\PPpV!RWR7pVPP	VP44pVPPR4pVP^�8wd\RVPRV2R7h\P!V4# \d&Rp\PRY�4\TR7hi;i \dp	RT	2p\TR7hR	p	?	ii;i)
rHr1r�zReceived non 200 response z from container metadata: rUz>Unable to parse JSON returned from container metadata servicesz%s:%sz?Received error when attempting to retrieve container metadata: N)r�r�r;rr=r>rfr:r?r-rr�r�r r$rA)
r�r8r�rr;r�rC�
response_textrVrDs
&&&&      r}rO�&ContainerMetadataFetcher._get_responseWs��	>�!�,�,�7�7�J� ��8�M�G��}�}�)�)�'�/�/�*;�<�H�$�,�,�3�3�G�<�M��#�#�s�*�,�4�X�5I�5I�4J�K4�4A�?�D���
B��z�z�-�0�0���
B�\�	����W�i�?�,�y�A�A�
B��%�	>�'�'(�c�+�
�)�9�=�=��	>�s*�BC!�B.�.0C�C!�!D�,C=�=Dc�$�RVPV2#)zhttp://)�
IP_ADDRESS)r�rJs&&r}r8�!ContainerMetadataFetcher.full_urlqs������)�,��8�8r)rr2r�)r�r�r�r�r1rQrPrYr?�timer3r�r9r6r=r>rKr7rOr8r�r�r�s@r}r.r.�si�����O��N��J� �J�����	�N� $�4�:�:��
=�	���

4��,>�49�9rr.c�<�\V4'd/#\4#r�)�should_bypass_proxiesr�r�s&r}rrus���S�!�!��	��|�rc��\\V4P4'dR#R# \\P
3dR#i;i)z2
Returns whether we should bypass proxies or not.
TF)rrr�r�socket�gaierrorr^s&r}r]r]|sI��
����
�,�,�-�-��.�
��
�v���'�
���
�s�$+�A
�	A
c�x�V'g^#\V4# \\3dMi;i\TR4'd{\TR4'diTP	4pTP^^4TP	4pTPT4Y!,
# \PdR#i;iR#)r�seek�tellN)r��AttributeErrorrr�rdrc�io�UnsupportedOperation)r%�orig_pos�end_file_poss&  r}�determine_content_lengthrj�s�����
��4�y����I�&�
��
���t�V�����v�!6�!6�	��y�y�{�H��I�I�a��O��9�9�;�L��I�I�h���*�*���&�&�	�

��	��s�
�+�+�A
B�B7�6B7c��VPR4pV'gR#\PP4pW#R&VP	R4pVeV#RV9dV#R#)z�Returns encodings from given HTTP Header Dict.

:param headers: dictionary to extract encoding from.
:param default: default encoding if the content-type is text
zcontent-typeN�charsetr@)r�rW�messager{�	get_param)r��default�content_typermrls&&   r}�get_encoding_from_headersrq�s_���;�;�~�.�L����m�m�#�#�%�G�*�N�����	�*�G�����
�����rc��\V\\34'd
\V4pM\	V4p\
P!V4PR4#)�KThis function has been deprecated, but is kept for backwards compatibility.r6)rwr��	bytearray�_calculate_md5_from_bytes�_calculate_md5_from_file�base64�	b64encoder:)r%r��
binary_md5s&, r}�
calculate_md5rz�sD���$��	�*�+�+�.�t�4�
�-�d�3�
����J�'�.�.�w�7�7rc�<�\VRR7pVP4#)rsF��usedforsecurity)rr-)�
body_bytes�md5s& r}ruru�s��
�*�e�
4�C��:�:�<�rc��a�SP4p\RR7p\V3RlR4FpVPV4K	SP	V4VP4#)rsFr|c�&<�SPR4#r"r$)�fileobjs�r}r&�*_calculate_md5_from_file.<locals>.<lambda>�s���g�l�l�;�7rr)rdrr*r+rcr-)r��start_positionrr0sf   r}rvrv�sN����\�\�^�N�
�%�
(�C��7��=���
�
�5��>��L�L�� ��:�:�<�rc�n�VPR/4PR/4pVPR4R8H#)r�r@rArCr�)rFr@s& r}�_is_s3express_requestr��s;�� �*�*�Y��3�7�7��r����"�"�9�-��<�<rc�f�VR,pVF!p\PV4'gK R#	R#)z�
Checks if a header starting with "x-amz-checksum-" is provided in a request.

This function is considered private and subject to abrupt breaking changes or
removal without prior announcement. Please do not use it directly.
r�TF)�CHECKSUM_HEADER_PATTERNr)rFr�r�s&  r}�has_checksum_headerr��s3���Y��G���"�(�(��0�0���rc�\�\V4'g\V3/VB\V3/VBR#R#)rsN)r��conditionally_calculate_md5�conditionally_enable_crc32)rFr�s&,r}� conditionally_calculate_checksumr��s,���v�&�&�#�F�5�f�5�"�6�4�V�4�'rc���VPR/4PR/4pVPR4p\V4'd-VR,e VR9dRRRRR	R
R//VR,R&R#R#R#R#)
rsr�r/�request_algorithmr%N�	algorithm�crc32�inr�r�zx-amz-checksum-crc32)N�conditional-md5)r�r�)rFr��checksum_context�checksum_algorithms&,  r}r�r��s����z�z�)�R�0�4�4�Z��D��)�-�-�.A�B���f�%�%��6�N�&��";�;�
 ��W��h��.�"�)
��y��*�%�
<�
'�	&rc�B�VR,pVPR/4PR/4pVPR4pV'd
VR8wdR#\V4'dR#\V4'dR#\'d Ve\	V3/VBpWPR,R&R#R#R#)	zOnly add a Content-MD5 if the system supports it.

This function has been deprecated, but is kept for backwards compatibility.
r%r�r/r�r�Nr�zContent-MD5)r�r�r�rrz)rFr�r%r�r��
md5_digests&,    r}r�r�
s���
�&�>�D��z�z�)�R�0�4�4�Z��D��)�-�-�.A�B���0�4E�E���6�"�"���V�$�$���}��)�"�4�2�6�2�
�+5�y��-�(�*�}rc�2a�]tRtRto]3RltRtRtVtR#)�FileWebIdentityTokenLoaderi)
c��WnW nR#r�)�_web_identity_token_pathr�)r��web_identity_token_pathr�s&&&r}r��#FileWebIdentityTokenLoader.__init__*
s
��(?�%��
rc��VPVP4;_uu_4pVP4uuRRR4# +'giR#;ir�)r�r�r�)r��
token_files& r}�__call__�#FileWebIdentityTokenLoader.__call__.
s2��
�Z�Z��5�5�
6�
6�*��?�?�$�7�
6�
6�
6�s	�?�A	)r�r�N)	r�r�r�r��openr�r�r�r�r�s@r}r�r�)
s����6:��%�%rr�c�Da�]tRtRtoRRltRtRRltRRltRtVt	R#)	�SSOTokenLoaderi3
Nc��Vf/pWnR#r��r1)r�r2s&&r}r��SSOTokenLoader.__init__4
s���=��E��rc�x�TpVeTp\P!VPR44P4#)Nr�)r(�sha1r�r,)r��	start_url�session_namer�s&&& r}�_generate_cache_key�"SSOTokenLoader._generate_cache_key9
s5���	��#�$�I��|�|�I�,�,�W�5�6�@�@�B�Brc�D�VPW4pW PV&R#r�)r�r1)r�r�r�r�r�s&&&& r}�
save_token�SSOTokenLoader.save_token?
s���,�,�Y�E�	�!&���I�rc��VPW4p\PRV4W0P9dTpVeTpRVR2p\	VR7hVPV,pRV9gRV9dRVR2p\	VR7hV#)z Checking for cached token at: %sz
Token for z does not existrU�accessToken�	expiresAtz is invalid)r�r r$r1r0)r�r�r�r�r�rVr�s&&&    r}r��SSOTokenLoader.__call__C
s����,�,�Y�E�	����7��C��K�K�'��D��'�#��$�T�F�/�:�I�#�i�8�8����I�&����%��E�)A�$�Y�K�{�;�I�#�i�8�8��rr�r�)
r�r�r�r�r�r�r�r�r�r�r�s@r}r�r�3
s�����
C�'��rr�c�Na�]tRtRtoRtRtRRltRtRtRt	RR	lt
R
tVtR#)
�EventbridgeSignerSetteriT
r�r�Nc�*�WnW nW0nR#r�)r�r�r)r�rr�r�s&&&&r}r�� EventbridgeSignerSetter.__init__X
s��"3����)�rc�v�VPRVP4VPRVP4R#)z'before-parameter-build.events.PutEventszbefore-call.events.PutEventsN)r8�check_for_global_endpoint�set_endpoint_urlr�s&&r}r8� EventbridgeSignerSetter.register]
s7�����5��*�*�	
�	���*�D�,A�,A�	
rc�n�RV9d.VR,p\PRVR,V4WAR&R#R#)�eventbridge_endpointzRewriting URL from %s to %sr�N)r r$r�s&&&, r}r��(EventbridgeSignerSetter.set_endpoint_urlf
s:��!�W�,��5�6�H��L�L�-�v�e�}�h�
�%�5�M�-rc���VPR4pVfR#\V4^8Xd
\RR7h\'g
\	RR7hVPR4pRpVe4VP
'd
\RR7hVP'dR.pVPf?\RV24pVPV8wd
\R	R7hVPWFR
7pMVPpW�R&RVR
&R#)�
EndpointIdNz+EndpointId must not be a zero length stringrzqUsing EndpointId requires an additional dependency. You will need to pip install botocore[crt] before proceeding.r+z>FIPS is not supported with EventBridge multi-region endpoints.r:�https://z-EndpointId is not a valid hostname component.��endpoint_variant_tagsr��v4ars)r�r�r'r
r.rr2rrr~�_get_global_endpoint)	r�rFr�r�rrEr�r��resolved_endpoints	&&&,     r}r��1EventbridgeSignerSetter.check_for_global_endpointn
s���:�:�l�+������x�=�A��3�A��
��w�,�3��
����_�-�� $�����'�'�'�7�.����,�,�,�)4�
�%����%��x��z�2�3�E��~�~��)�7�G���!%� 9� 9��!:�!��!%� 2� 2��*;�&�'�$���rc���VPpVPVP4pVf
VPpVP	WBR7pVf
VP
pRVRVR2#)Nr�r�z.endpoint.events.r�)r��get_partition_for_regionr�rrdre)r�rr�rr�rgs&&&   r}r��,EventbridgeSignerSetter._get_global_endpoint�
ss���*�*���5�5�d�l�l�C�	����/�/�I��6�6��7�
�
����1�1�J��(��#4�Z�L��B�Br)r�rr�r�r�)
r�r�r�r�rrer�r8r�r�r�r�r�r�s@r}r�r�T
s2������)��*�

�%�*%�XC�Crr�c��VfR#\V4pVPPR4'dVPR9dR#VPP	R4pV^,R8wdR#V^Rp\V4\\
V448wdR#\;QJdRV4F'dKR#	R#!RV44#)	z�Does the URL match the S3 Accelerate endpoint scheme?

Virtual host naming style with bucket names in the netloc part of the URL
are not allowed by this function.
Fr�r�r{c3�2"�TF
q\9x�K	R#5ir�r}r~s& r}r��'is_s3_accelerate_url.<locals>.<genexpr>�
s���C�]��+�+�]�r�T)�https�httpr�)rr�r+r�r�r�r�r�)r��	url_partsr�r�s&   r}�is_s3_accelerate_urlr��
s����{����
�I����$�$����	�	�	�!2�	2��
���"�"�3�'�E��Q�x�?�"���!�B�K�M��=��S��]�!3�4�4���3�C�]�C�3�3�C�3�C�3�C�]�C�C�Crc��a�]tRtRtoRt]PP]PPRRRR44t	]	R3Rlt
R	tR
tRt
RtR
tRtRRltRtVtR#)�
JSONFileCachei�
z�JSON file cache.
This provides a dict like interface that stores JSON serializable
objects.
The objects are serialized to JSON and stored in a file.  These
values can be retrieved at a later time.
�~z.aws�botor2Nc�>�WnVf
VPpW nR#r�)�_working_dir�_default_dumps�_dumps)r��working_dir�
dumps_funcs&&&r}r��JSONFileCache.__init__�
s��'�����,�,�J� �rc�D�\P!WPR7#))ro)r�dumpsr )r�rKs&&r}r��JSONFileCache._default_dumps�
s���z�z�#�'@�'@�A�Arc�b�VPV4p\PPV4#r�)�_convert_cache_keyr
r��isfile)r�r��
actual_keys&& r}�__contains__�JSONFileCache.__contains__�
s%���,�,�Y�7�
��w�w�~�~�j�)�)rc��VPV4p\V4;_uu_4p\P!V4uuRRR4# +'giR#;i \\
3d
\
T4hi;i)z Retrieve value from a cache key.N)r�r�r�loadr�r��KeyError)r�r�r�r�s&&  r}�__getitem__�JSONFileCache.__getitem__�
s\���,�,�Y�7�
�	&��j�!�!�Q��y�y��|�"�!�!�!����$�	&��9�%�%�	&�s'�A�A�
A�A	�A�A�A8c��VPV4p\V4pVP4R# \d
\	T4hi;ir�)r�r�unlink�FileNotFoundErrorr�)r�r�r��key_paths&&  r}�__delitem__�JSONFileCache.__delitem__�
sE���,�,�Y�7�
�	&��J�'�H��O�O��� �	&��9�%�%�	&�s	�0�Ac�`�VPV4pVPV4p\P
P
TP4'g#\P!TPRR7\P!\P!T\P\P,R4R4;_uu_4pTP4TPT4RRR4R# \\3d\RT24hi;i +'giR#;i)z3Value cannot be cached, must be JSON serializable: T)�exist_okr��wN)r�r�rr�r
r��isdirr��makedirs�fdopenr��O_WRONLY�O_CREAT�truncate�write)r�r�r��full_key�file_contentr�s&&&   r}�__setitem__�JSONFileCache.__setitem__�
s����*�*�9�5��	��;�;�u�-�L�
�w�w�}�}�T�.�.�/�/��K�K��)�)�D�9�
�Y�Y��G�G�H�b�k�k�B�J�J�6��>��
�
�
�
�J�J�L�
�G�G�L�!�	
�
��
�:�&�	��E�e�W�M��
�	��
�
�
�s�C9�
"D�9 D�D-	c�h�\PPVPVR,4pV#)z.json)r
r�r�r�)r�r��	full_paths&& r}r�� JSONFileCache._convert_cache_keys'���G�G�L�L��!2�!2�I��4G�H�	��rc��\V\4'd*V'dVP4#VPR4#V#r&r'r)s&&&r}r �"JSONFileCache._serialize_if_neededr+r)r�r�rm)r�r�r�r�r�r
r��
expanduserr��	CACHE_DIRr�r�r�r�r�r�r�r r�r�r�s@r}r�r��
sf��������"�"�2�7�7�<�<��V�V�W�#M�N�I�#,��!�B�*�&�&�"� ��rr�c�0�VfR#VPR4#)NFz--x-s3)r+rs&r}�is_s3express_bucketrs��
�~���?�?�8�$�$rc��\V\4'dVP4'gR#Vf\Pp\V4pVP
V4#r�)rwryr�r
r�_get_bearer_env_var_namer�)rIr�env_vars&& r}�get_token_from_environmentrsG���l�C�(�(��0B�0B�0D�0D�����*�*��&�|�4�G��;�;�w��rc�l�VPRR4PRR4P4pRV2#)r��_r��AWS_BEARER_TOKEN_)r��upper)rI�bearer_names& r}r
r
s7���&�&�s�C�0�8�8��c�B�H�H�J�K�
�{�m�,�,r�appmeshzapp-meshzds-datazdirectory-service-data�globalacceleratorzglobal-acceleratorziotevents-dataziot-events-data�	ioteventsz
iot-events�iotwirelessziot-wireless�kinesisanalyticsv2zkinesis-analytics-v2zlexv2-modelsz
lex-models-v2z
lexv2-runtimezlex-runtime-v2z	sms-voicezpinpoint-sms-voice�	s3controlr�zservicecatalog-appregistryzservice-catalog-appregistry)r�r�)rz	rest-jsonzrest-xmlzsmithy-rpc-v2-cborr��ec2)Trmr�)z
ISO-8859-1)�rwr8r�
email.messagerWr�r(rf�loggingr
r�r�r`r[r�r�r�	ipaddressr�pathlibr�urllib.requestrr�dateutil.parserr	�dateutil.tzr�urllib3.exceptionsr	r��botocore.awsrequest�botocore.httpsession�botocore.compatr
rrr
rrrrrrrrrrrrrrrrrr�botocore.exceptionsr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6�botocore.pluginr7r8r9�	getLoggerr�r rnr"r#r��
SAFE_CHARSr�r�rAr��
EVENT_ALIASESr�r��$PRIORITY_ORDERED_SUPPORTED_PROTOCOLSr~r�r�r�r�r�r�r�r�r�r�r��	Exceptionr�r�r�rpr�r�r�r�r�r�r�r�r�rrrrrr1r>r7rCrQr�r�r�r%r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
r.rRr�r�r�rxr�r�r�r�rr.rr]rjrqrzrurvr�r�r�r�r�r�r�r�r�r�rrr
�SERVICE_NAME_ALIASES�.CLIENT_NAME_TO_HYPHENIZED_SERVICE_ID_OVERRIDESr�rr}�<module>r-s�	��������	��	�
�	�
����/� ��3���1����������0�������2��
�	�	�8�	$��#$� �-��2��*���
�
�:�:�4�5������	��'�-��C��}�C��9�C��[�C��-�	C�
�9�C��+�
C��>�C��-�C�	�/�C��-�C��-�C��.�C�
��C�
�*�C�� �C� �*�!C�"�(�#C�$�O�%C�&�-�'C�(�%�)C�*�0�+C�,
�'�-C�.	�
�/C�0�)�1C�2�+�3C�4��5C�6�4�7C�8��9C�:�-�;C�<
�#�=C�>�
(�?C�@�U�AC�B�@�CC�D	�
!�EC�F
�m�GC�H��IC�J� �KC�L�*�MC�N�+�OC�P�O�QC�R�.�SC�T�(�UC�V��WC�X�)�YC�Z�@�[C�\#�$D�]C�^�2�_C�`�1�aC�b
�?�cC�d�.�eC�f�,�gC�h�w�� =�
�z��(��(��,�	�:��'��7��'��e��U��'��*�
�,�EC�
�N�*�*�#�
�-�-���
(�$�
��,�"N��"%�#�0�6@� �<�	$�	�I�	��)��
@.�@.�F~�k�~�B?�?�D#�K�#�L$�:�(,�,��+5�##�L$.�'�*
D� >�&-�`*�Z�&!�67�B1�""�"�(a
�a
�H5�/�
#�:�:��.
�:=?�@-��B�>;�&-�!��(�*0�$�$�D&�]�&�R-�-�`J
�J
�Zt+�t+�n	�*�	���8R
�R
�jT�T�nS;�S;�lB-�B-�JJ�!9�J�Zt9�t9�n��*�:�.8���=��$5�
�$6�2%�%���BRC�RC�jD�BA�A�H%� �-�,�-@�A��:2��-�:2��9�:2��z�	:2�
�>�:2��-�
:2�	�/�:2��-�:2��-�:2��.�:2�
��:2�
�*�:2��O�:2��%�:2��-�:2� �0�!:2�"
�'�#:2�$	�
�%:2�&�'�':2�(�)�):2�*�+�+:2�,�-�-:2�.
�#�/:2�0�
(�1:2�2	�
!�3:2�4
�m�5:2�6�-�7:2�8� �9:2�:�*�;:2�<�'�=:2�>��?:2�@�>�A:2�B�+�C:2�D�0�E:2�F�O�G:2�H�.�I:2�J�O�K:2�L�(�M:2�N�%�O:2�P��Q:2�R�)�S:2�T#�$D�U:2�V�@�W:2�X�1�Y:2�Z
�?�[:2�\�%�]:2�^� =�_:2�`�z�a:2�b�(�c:2�d��e:2�f
�:�g:2�h�'�i:2�j�7��'� �"?��U��'�s:2�.r

Youez - 2016 - github.com/yon3zu
LinuXploit